From f2a8d79d169ad4751bc5081f1400f0b4200f88ed Mon Sep 17 00:00:00 2001
From: Joaquin Matres <4514346+joamatab@users.noreply.github.com>
Date: Fri, 29 Jul 2022 16:01:05 +0200
Subject: [PATCH 01/12] clean code
---
.gitignore | 3 +
python/adjoint/basis.py | 14 +-
python/adjoint/connectivity.py | 10 +-
python/adjoint/filters.py | 20 +--
python/adjoint/objective.py | 4 +-
python/adjoint/optimization_problem.py | 86 +++------
python/adjoint/utils.py | 30 +---
python/binary_partition_utils.py | 12 +-
python/chunk_balancer.py | 4 +-
python/examples/3rd-harm-1d.py | 2 +-
python/examples/absorbed_power_density.py | 3 +-
python/examples/absorber-1d.py | 2 +-
python/examples/antenna_pec_ground_plane.py | 15 +-
python/examples/binary_grating.py | 6 +-
python/examples/binary_grating_phasemap.py | 14 +-
python/examples/cavity_arrayslice.py | 7 +-
python/examples/cyl-ellipsoid.py | 2 +-
python/examples/eps_fit_lorentzian.py | 4 +-
python/examples/finite_grating.py | 12 +-
python/examples/gaussian-beam.py | 2 +-
python/examples/holey-wvg-bands.py | 7 +-
python/examples/holey-wvg-cavity.py | 6 +-
python/examples/metal-cavity-ldos.py | 4 +-
python/examples/metasurface_lens.py | 40 +++--
python/examples/mpb_hole_slab.py | 6 +-
python/examples/mpb_tutorial.py | 12 +-
python/examples/multilevel-atom.py | 2 +-
python/examples/parallel-wvgs-force.py | 9 +-
python/examples/perturbation_theory.py | 2 +-
python/examples/perturbation_theory_2d.py | 2 +-
python/examples/polarization_grating.py | 4 +-
python/examples/refl-angular-kz2d.py | 7 +-
python/examples/refl-angular.py | 8 +-
python/examples/refl-quartz.py | 2 +-
python/examples/ring-mode-overlap.py | 2 +-
python/examples/ring_gds.py | 6 +-
python/examples/stochastic_emitter.py | 9 +-
python/examples/stochastic_emitter_line.py | 7 +-
python/examples/wvg-src.py | 4 +-
python/examples/zone_plate.py | 10 +-
python/geom.py | 68 +++----
python/mpb_data.py | 32 +---
python/simulation.py | 27 +--
python/solver.py | 141 ++++++---------
python/source.py | 18 +-
python/tests/test_adjoint_cyl.py | 5 +-
python/tests/test_adjoint_jax.py | 9 +-
python/tests/test_adjoint_solver.py | 31 ++--
python/tests/test_antenna_radiation.py | 12 +-
python/tests/test_bend_flux.py | 21 ++-
python/tests/test_cavity_arrayslice.py | 7 +-
python/tests/test_chunk_balancer.py | 7 +-
python/tests/test_conductivity.py | 3 +-
python/tests/test_cyl_ellipsoid.py | 2 +-
python/tests/test_dft_fields.py | 6 +-
python/tests/test_dispersive_eigenmode.py | 4 +-
python/tests/test_divide_mpi_processes.py | 6 +-
python/tests/test_dump_load.py | 4 +-
python/tests/test_fragment_stats.py | 15 +-
python/tests/test_gaussianbeam.py | 3 +-
python/tests/test_get_epsilon_grid.py | 2 +-
python/tests/test_holey_wvg_bands.py | 2 +-
python/tests/test_holey_wvg_cavity.py | 4 +-
python/tests/test_kdom.py | 2 +-
python/tests/test_material_grid.py | 188 ++++++++++----------
python/tests/test_mode_coeffs.py | 14 +-
python/tests/test_mpb.py | 19 +-
python/tests/test_prism.py | 18 +-
python/tests/test_refl_angular.py | 11 +-
python/tests/test_ring.py | 2 +-
python/tests/test_simulation.py | 12 +-
python/tests/test_source.py | 4 +-
python/tests/test_special_kz.py | 3 +-
python/timing_measurements.py | 5 +-
python/verbosity_mgr.py | 4 +-
python/visualization.py | 108 +++++------
76 files changed, 500 insertions(+), 720 deletions(-)
diff --git a/.gitignore b/.gitignore
index 4ed1ef7e1..a525caf09 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,6 +15,9 @@
_build
.vscode
.idea
+python/examples/.ipynb_checkpoints/
+h5utils/
+hdf5/
# autotools stuff
Makefile
diff --git a/python/adjoint/basis.py b/python/adjoint/basis.py
index ac28d512c..937777d61 100644
--- a/python/adjoint/basis.py
+++ b/python/adjoint/basis.py
@@ -21,7 +21,7 @@ def __init__(
size=None,
center=mp.Vector3(),
):
- self.volume = volume if volume else mp.Volume(center=center, size=size)
+ self.volume = volume or mp.Volume(center=center, size=size)
self.rho_vector = rho_vector
def func(self):
@@ -59,11 +59,7 @@ def __init__(self, resolution, symmetry=None, **kwargs):
super(BilinearInterpolationBasis, self).__init__(**kwargs)
# Generate interpolation grid
- if symmetry is None or len(symmetry) == 0:
- self.symmetry = []
- else:
- self.symmetry = symmetry
-
+ self.symmetry = [] if symmetry is None or len(symmetry) == 0 else symmetry
if mp.X in set(self.symmetry):
self.Nx = int(resolution * self.volume.size.x / 2) + 1
self.rho_x = np.linspace(
@@ -243,8 +239,4 @@ def gen_interpolation_matrix(
ri += 1
- # From matrix vectors, populate the sparse matrix
- A = sparse.coo_matrix((interp_weights, (row_ind, col_ind)),
- shape=(output_dimension, input_dimension))
-
- return A
+ return sparse.coo_matrix((interp_weights, (row_ind, col_ind)), shape=(output_dimension, input_dimension))
diff --git a/python/adjoint/connectivity.py b/python/adjoint/connectivity.py
index dc2309e94..f3fe9a640 100644
--- a/python/adjoint/connectivity.py
+++ b/python/adjoint/connectivity.py
@@ -22,14 +22,8 @@ def __init__(self, nx, ny, nz, k0=1000, zeta=0, sp_solver=cg, alpha=None, alpha0
self.p = p
#default alpha and alpha0
- if alpha != None:
- self.alpha=alpha
- else:
- self.alpha = 0.1*min(1/nx, 1/ny, 1/nz)
- if alpha0 != None:
- self.alpha0 = alpha0
- else:
- self.alpha0 = -np.log(thresh)/min(nx, nz)
+ self.alpha = alpha if alpha != None else 0.1*min(1/nx, 1/ny, 1/nz)
+ self.alpha0 = alpha0 if alpha0 != None else -np.log(thresh)/min(nx, nz)
def forward(self, rho_vector):
self.rho_vector = rho_vector
diff --git a/python/adjoint/filters.py b/python/adjoint/filters.py
index c7eddd688..703a1fc81 100644
--- a/python/adjoint/filters.py
+++ b/python/adjoint/filters.py
@@ -49,13 +49,7 @@ def _edge_pad(arr, pad):
bottom_right = npa.tile(arr[-1, -1],
(pad[0][1], pad[1][1])) # bottom right
- out = npa.concatenate((npa.concatenate(
- (top_left, top, top_right)), npa.concatenate((left, arr, right)),
- npa.concatenate(
- (bottom_left, bottom, bottom_right))),
- axis=1)
-
- return out
+ return npa.concatenate((npa.concatenate((top_left, top, top_right)), npa.concatenate((left, arr, right)), npa.concatenate((bottom_left, bottom, bottom_right))), axis=1)
def simple_2d_filter(x, h):
"""A simple 2d filter algorithm that is differentiable with autograd.
@@ -632,14 +626,13 @@ def get_eta_from_conic(b, R):
norm_length = b / R
if norm_length < 0:
- eta_e = 0
+ return 0
elif norm_length < 1:
- eta_e = 0.25 * norm_length**2 + 0.5
+ return 0.25 * norm_length**2 + 0.5
elif norm_length < 2:
- eta_e = -0.25 * norm_length**2 + norm_length
+ return -0.25 * norm_length**2 + norm_length
else:
- eta_e = 1
- return eta_e
+ return 1
def get_conic_radius_from_eta_e(b, eta_e):
@@ -714,8 +707,7 @@ def indicator_solid(x, c, filter_f, threshold_f, resolution):
raise ValueError(
"The gradient fields must be 2 dimensional. Check input array and filter functions."
)
- I_s = design_field * npa.exp(-c * grad_mag)
- return I_s
+ return design_field * npa.exp(-c * grad_mag)
def constraint_solid(x, c, eta_e, filter_f, threshold_f, resolution):
diff --git a/python/adjoint/objective.py b/python/adjoint/objective.py
index 7bfa010d4..6194a22d5 100644
--- a/python/adjoint/objective.py
+++ b/python/adjoint/objective.py
@@ -272,7 +272,7 @@ def place_adjoint_source(self, dJ):
for fourier_data in self.all_fouriersrcdata:
amp_arr = np.array(fourier_data.amp_arr).reshape(-1, self.num_freq)
scale = amp_arr * self._adj_src_scale(include_resolution=False)
-
+
if self.num_freq == 1:
sources += [mp.IndexedSource(time_src, fourier_data, scale[:,0], not self.yee_grid)]
else:
@@ -393,7 +393,7 @@ def place_adjoint_source(self, dJ):
if mp.is_electric(src_i.component):
src_i.amplitude *= -1
sources += [src_i]
-
+
return sources
def __call__(self):
diff --git a/python/adjoint/optimization_problem.py b/python/adjoint/optimization_problem.py
index a9b0b656a..2d3d7b57d 100644
--- a/python/adjoint/optimization_problem.py
+++ b/python/adjoint/optimization_problem.py
@@ -58,21 +58,20 @@ def __init__(
if frequencies is not None:
self.frequencies = frequencies
self.nf = np.array(frequencies).size
+ elif nf == 1:
+ self.nf = nf
+ self.frequencies = [fcen]
else:
- if nf == 1:
- self.nf = nf
- self.frequencies = [fcen]
- else:
- fmax = fcen + 0.5 * df
- fmin = fcen - 0.5 * df
- dfreq = (fmax - fmin) / (nf - 1)
- self.frequencies = np.linspace(
- fmin,
- fmin + dfreq * nf,
- num=nf,
- endpoint=False,
- )
- self.nf = nf
+ fmax = fcen + 0.5 * df
+ fmin = fcen - 0.5 * df
+ dfreq = (fmax - fmin) / (nf - 1)
+ self.frequencies = np.linspace(
+ fmin,
+ fmin + dfreq * nf,
+ num=nf,
+ endpoint=False,
+ )
+ self.nf = nf
if self.nf == 1:
self.fcen_idx = 0
@@ -128,8 +127,7 @@ def __call__(self, rho_vector=None, need_value=True, need_gradient=True, beta=No
print("Calculating gradient...")
self.calculate_gradient()
else:
- raise ValueError("Incorrect solver state detected: {}".format(
- self.current_state))
+ raise ValueError(f"Incorrect solver state detected: {self.current_state}")
return self.f0, self.gradient
@@ -160,10 +158,7 @@ def prepare_forward_run(self):
self.sim.change_sources(self.forward_sources)
# register user specified monitors
- self.forward_monitors = [
- ] # save reference to monitors so we can track dft convergence
- for m in self.objective_arguments:
- self.forward_monitors.append(m.register_monitors(self.frequencies))
+ self.forward_monitors = [m.register_monitors(self.frequencies) for m in self.objective_arguments]
# register design region
self.forward_design_region_monitors = utils.install_design_region_monitors(
@@ -187,15 +182,12 @@ def forward_run(self):
self.maximum_run_time))
# record objective quantities from user specified monitors
- self.results_list = []
- for m in self.objective_arguments:
- self.results_list.append(m())
-
+ self.results_list = [m() for m in self.objective_arguments]
# evaluate objectives
self.f0 = [fi(*self.results_list) for fi in self.objective_functions]
if len(self.f0) == 1:
self.f0 = self.f0[0]
-
+
# store objective function evaluation in memory
self.f_bank.append(self.f0)
@@ -204,8 +196,7 @@ def forward_run(self):
def prepare_adjoint_run(self):
# Compute adjoint sources
- self.adjoint_sources = [[]
- for i in range(len(self.objective_functions))]
+ self.adjoint_sources = [[] for _ in range(len(self.objective_functions))]
for ar in range(len(self.objective_functions)):
for mi, m in enumerate(self.objective_arguments):
dJ = jacobian(self.objective_functions[ar],
@@ -277,11 +268,10 @@ def calculate_gradient(self):
if len(self.gradient) == 1:
self.gradient = self.gradient[
0] # only one objective function and one design region
- else:
- if len(self.gradient[0]) == 1:
- self.gradient = [
- g[0] for g in self.gradient
- ] # multiple objective functions bu one design region
+ elif len(self.gradient[0]) == 1:
+ self.gradient = [
+ g[0] for g in self.gradient
+ ] # multiple objective functions bu one design region
# Return optimizer's state to initialization
self.current_state = "INIT"
@@ -354,10 +344,7 @@ def calculate_fd_gradient(
b0)
# initialize design monitors
- self.forward_monitors = []
- for m in self.objective_arguments:
- self.forward_monitors.append(
- m.register_monitors(self.frequencies))
+ self.forward_monitors = [m.register_monitors(self.frequencies) for m in self.objective_arguments]
if any(isinstance(m, LDOS) for m in self.objective_arguments):
self.sim.run(mp.dft_ldos(self.frequencies), until_after_sources=mp.stop_when_energy_decayed(dt=1, decay_by=1e-11))
@@ -368,9 +355,7 @@ def calculate_fd_gradient(
self.maximum_run_time))
# record final objective function value
- results_list = []
- for m in self.objective_arguments:
- results_list.append(m())
+ results_list = [m() for m in self.objective_arguments]
fm = [fi(*results_list) for fi in self.objective_functions]
# -------------------------------------------- #
@@ -379,17 +364,12 @@ def calculate_fd_gradient(
self.sim.reset_meep()
# assign new design vector
- if in_interior: b0[k] += 2 * db # central difference rule...
- else: b0[k] += db # forward or backward difference...
-
+ b0[k] += 2 * db if in_interior else db
self.design_regions[design_variables_idx].update_design_parameters(
b0)
# initialize design monitors
- self.forward_monitors = []
- for m in self.objective_arguments:
- self.forward_monitors.append(
- m.register_monitors(self.frequencies))
+ self.forward_monitors = [m.register_monitors(self.frequencies) for m in self.objective_arguments]
# add monitor used to track dft convergence
if any(isinstance(m, LDOS) for m in self.objective_arguments):
@@ -401,9 +381,7 @@ def calculate_fd_gradient(
self.maximum_run_time))
# record final objective function value
- results_list = []
- for m in self.objective_arguments:
- results_list.append(m())
+ results_list = [m() for m in self.objective_arguments]
fp = [fi(*results_list) for fi in self.objective_functions]
# -------------------------------------------- #
@@ -440,10 +418,7 @@ def update_design(self, rho_vector, beta=None):
def get_objective_arguments(self):
'''Return list of evaluated objective arguments.
'''
- objective_args_evaluation = [
- m.get_evaluation() for m in self.objective_arguments
- ]
- return objective_args_evaluation
+ return [m.get_evaluation() for m in self.objective_arguments]
def plot2D(self, init_opt=False, **kwargs):
"""Produce a graphical visualization of the geometry and/or fields,
@@ -493,7 +468,4 @@ def atleast_3d(*arys):
else:
result = ary
res.append(result)
- if len(res) == 1:
- return res[0]
- else:
- return res
+ return res[0] if len(res) == 1 else res
diff --git a/python/adjoint/utils.py b/python/adjoint/utils.py
index ef4a94aee..7d38a1bd4 100644
--- a/python/adjoint/utils.py
+++ b/python/adjoint/utils.py
@@ -29,7 +29,7 @@ def __init__(
size=None,
center=mp.Vector3()
):
- self.volume = volume if volume else mp.Volume(center=center, size=size)
+ self.volume = volume or mp.Volume(center=center, size=size)
self.size = self.volume.size
self.center = self.volume.center
self.design_parameters = design_parameters
@@ -118,17 +118,7 @@ def install_design_region_monitors(
decimation_factor: int = 0,
) -> List[mp.DftFields]:
"""Installs DFT field monitors at the design regions of the simulation."""
- design_region_monitors = [[
- simulation.add_dft_fields(
- [comp],
- frequencies,
- where=design_region.volume,
- yee_grid=True,
- decimation_factor=decimation_factor,
- persist=True
- ) for comp in _compute_components(simulation)
- ] for design_region in design_regions ]
- return design_region_monitors
+ return [[simulation.add_dft_fields([comp], frequencies, where=design_region.volume, yee_grid=True, decimation_factor=decimation_factor, persist=True) for comp in _compute_components(simulation)] for design_region in design_regions]
def gather_monitor_values(monitors: List[ObjectiveQuantity]) -> onp.ndarray:
@@ -142,9 +132,7 @@ def gather_monitor_values(monitors: List[ObjectiveQuantity]) -> onp.ndarray:
complex128. Note that these values refer to the mode as oriented (i.e. they
are unidirectional).
"""
- monitor_values = []
- for monitor in monitors:
- monitor_values.append(monitor())
+ monitor_values = [monitor() for monitor in monitors]
monitor_values = onp.array(monitor_values)
assert monitor_values.ndim in [1, 2]
monitor_values = _make_at_least_nd(monitor_values, 2)
@@ -206,19 +194,15 @@ def validate_and_update_design(
design_variable) in enumerate(zip(design_regions,
design_variables)):
if design_variable.ndim not in [1, 2, 3]:
- raise ValueError(
- 'Design variables should be 1D, 2D, or 3D, but the design variable '
- 'at index {} had a shape of {}.'.format(
- i, design_variable.shape))
+ raise ValueError(f'Design variables should be 1D, 2D, or 3D, but the design variable at index {i} had a shape of {design_variable.shape}.')
+
design_region_shape = tuple(
int(x) for x in design_region.design_parameters.grid_size)
design_variable_padded_shape = design_variable.shape + (1, ) * (
3 - design_variable.ndim)
if design_variable_padded_shape != design_region_shape:
- raise ValueError(
- 'The design variable at index {} with a shape of {} is '
- 'incompatible with the associated design region, which has a shape '
- 'of {}.'.format(i, design_variable.shape, design_region_shape))
+ raise ValueError(f'The design variable at index {i} with a shape of {design_variable.shape} is incompatible with the associated design region, which has a shape of {design_region_shape}.')
+
design_variable = onp.asarray(design_variable, dtype=onp.float64)
# Update the design variable in Meep
design_region.update_design_parameters(design_variable.flatten())
diff --git a/python/binary_partition_utils.py b/python/binary_partition_utils.py
index c37a5d07f..5fe73f492 100644
--- a/python/binary_partition_utils.py
+++ b/python/binary_partition_utils.py
@@ -30,10 +30,8 @@ def enumerate_leaf_nodes(
if is_leaf_node(partition):
yield partition
else:
- for child in enumerate_leaf_nodes(partition.left):
- yield child
- for child in enumerate_leaf_nodes(partition.right):
- yield child
+ yield from enumerate_leaf_nodes(partition.left)
+ yield from enumerate_leaf_nodes(partition.right)
def partition_has_duplicate_proc_ids(partition: mp.BinaryPartition) -> bool:
@@ -219,10 +217,8 @@ def get_total_volume_per_process(partition: mp.BinaryPartition,
volumes_per_process = {}
leaf_nodes_in_tree = enumerate_leaf_nodes(partition)
for leaf in leaf_nodes_in_tree:
- total_volume = 0
- for i, owner in enumerate(chunk_owners):
- if owner == leaf.proc_id:
- total_volume += pixel_volume(chunk_volumes[i])
+ total_volume = sum(pixel_volume(chunk_volumes[i]) for i, owner in enumerate(chunk_owners) if owner == leaf.proc_id)
+
volumes_per_process[leaf.proc_id] = total_volume
return volumes_per_process
diff --git a/python/chunk_balancer.py b/python/chunk_balancer.py
index 956ba979c..d0816fd06 100644
--- a/python/chunk_balancer.py
+++ b/python/chunk_balancer.py
@@ -130,9 +130,7 @@ def _validate_sim(self, sim: mp.Simulation):
node.proc_id for node in bpu.enumerate_leaf_nodes(sim.chunk_layout)
]
if set(chunk_owners) != set(proc_ids):
- raise ValueError(
- 'Processes {} present in chunk_layout but not grid_owners!'.format(
- set(proc_ids) - set(chunk_owners)))
+ raise ValueError(f'Processes {set(proc_ids) - set(chunk_owners)} present in chunk_layout but not grid_owners!')
class ChunkBalancer(AbstractChunkBalancer):
diff --git a/python/examples/3rd-harm-1d.py b/python/examples/3rd-harm-1d.py
index 5ac0f5dd3..b6cbae498 100644
--- a/python/examples/3rd-harm-1d.py
+++ b/python/examples/3rd-harm-1d.py
@@ -55,7 +55,7 @@ def main(args):
50, mp.Ex, mp.Vector3(0, 0, 0.5*sz - dpml - 0.5), 1e-6))
# sim.display_fluxes(trans)
- print("harmonics:, {}, {}, {}, {}".format(k, amp, mp.get_fluxes(trans1)[0], mp.get_fluxes(trans3)[0]))
+ print(f"harmonics:, {k}, {amp}, {mp.get_fluxes(trans1)[0]}, {mp.get_fluxes(trans3)[0]}")
if __name__ == '__main__':
parser = argparse.ArgumentParser()
diff --git a/python/examples/absorbed_power_density.py b/python/examples/absorbed_power_density.py
index 8072a56b9..92947db8b 100644
--- a/python/examples/absorbed_power_density.py
+++ b/python/examples/absorbed_power_density.py
@@ -64,7 +64,8 @@
absorbed_power = np.sum(absorbed_power_density)*dxy
absorbed_flux = mp.get_fluxes(flux_box)[0]
err = abs(absorbed_power-absorbed_flux)/absorbed_flux
-print("flux:, {} (dft_fields), {} (dft_flux), {} (error)".format(absorbed_power,absorbed_flux,err))
+print(f"flux:, {absorbed_power} (dft_fields), {absorbed_flux} (dft_flux), {err} (error)")
+
plt.figure()
sim.plot2D()
diff --git a/python/examples/absorber-1d.py b/python/examples/absorber-1d.py
index e6d93633c..b6ec258fa 100644
--- a/python/examples/absorber-1d.py
+++ b/python/examples/absorber-1d.py
@@ -18,7 +18,7 @@ def main(args):
def print_stuff(sim):
p = sim.get_field_point(mp.Ex, mp.Vector3())
- print("ex:, {}, {}".format(sim.meep_time(), p.real))
+ print(f"ex:, {sim.meep_time()}, {p.real}")
sim = mp.Simulation(cell_size=cell_size,
resolution=resolution,
diff --git a/python/examples/antenna_pec_ground_plane.py b/python/examples/antenna_pec_ground_plane.py
index 6b65db7ad..d02af9760 100644
--- a/python/examples/antenna_pec_ground_plane.py
+++ b/python/examples/antenna_pec_ground_plane.py
@@ -34,9 +34,7 @@ def radial_flux(sim,nearfield_box,r):
Px = np.real(E[:,1]*H[:,2]-E[:,2]*H[:,1]) # Ey*Hz-Ez*Hy
Py = np.real(E[:,2]*H[:,0]-E[:,0]*H[:,2]) # Ez*Hx-Ex*Hz
- Pr = np.sqrt(np.square(Px)+np.square(Py))
-
- return Pr
+ return np.sqrt(np.square(Px)+np.square(Py))
def free_space_radiation(src_cmpt):
@@ -82,9 +80,7 @@ def free_space_radiation(src_cmpt):
sim.run(until_after_sources=mp.stop_when_dft_decayed())
- Pr = radial_flux(sim,nearfield_box,r)
-
- return Pr
+ return radial_flux(sim,nearfield_box,r)
def pec_ground_plane_radiation(src_cmpt=mp.Hz):
@@ -146,9 +142,7 @@ def pec_ground_plane_radiation(src_cmpt=mp.Hz):
sim.run(until_after_sources=mp.stop_when_dft_decayed())
- Pr = radial_flux(sim,nearfield_box,r)
-
- return Pr
+ return radial_flux(sim,nearfield_box,r)
if __name__ == '__main__':
@@ -175,7 +169,8 @@ def pec_ground_plane_radiation(src_cmpt=mp.Hz):
plt.plot(np.degrees(angles),Pr_theory_norm,'r-',label='theory')
plt.xlabel('angle (degrees)')
plt.ylabel('radial flux (normalized by maximum flux)')
- plt.title('antenna with {}$_z$ polarization above PEC ground plane'.format('E' if src_cmpt==mp.Ez else r'H'))
+ plt.title(f"antenna with {'E' if src_cmpt==mp.Ez else r'H'}$_z$ polarization above PEC ground plane")
+
plt.axis([0,90,0,1.0])
plt.legend()
plt.savefig('radiation_pattern.png',bbox_inches='tight')
diff --git a/python/examples/binary_grating.py b/python/examples/binary_grating.py
index dd63e2770..fcba5dbb7 100644
--- a/python/examples/binary_grating.py
+++ b/python/examples/binary_grating.py
@@ -101,10 +101,10 @@
plt.axis([min(mode_wvl), max(mode_wvl), min(mode_angle), max(mode_angle)])
plt.xlabel("wavelength (μm)")
plt.ylabel("diffraction angle (degrees)")
-plt.xticks([t for t in np.arange(0.4,0.7,0.1)])
-plt.yticks([t for t in range(0,35,5)])
+plt.xticks(list(np.arange(0.4,0.7,0.1)))
+plt.yticks(list(range(0,35,5)))
plt.title("transmittance of diffraction orders")
cbar = plt.colorbar()
-cbar.set_ticks([t for t in np.arange(0,tran_max+0.1,0.1)])
+cbar.set_ticks(list(np.arange(0,tran_max+0.1,0.1)))
cbar.set_ticklabels(["{:.1f}".format(t) for t in np.arange(0,tran_max+0.1,0.1)])
plt.show()
diff --git a/python/examples/binary_grating_phasemap.py b/python/examples/binary_grating_phasemap.py
index f75fdf3ad..c2d5688dd 100644
--- a/python/examples/binary_grating_phasemap.py
+++ b/python/examples/binary_grating_phasemap.py
@@ -84,7 +84,7 @@ def grating(gp,gh,gdc,oddz):
parser.add_argument('-gh', type=float, default=0.6, help='grating height (default: 0.6 μm)')
parser.add_argument('-oddz', action='store_true', default=False, help='oddz? (default: False)')
args = parser.parse_args()
-
+
gdc = np.arange(0.1,1.0,0.1)
mode_tran = np.empty((gdc.size,nfreq))
mode_phase = np.empty((gdc.size,nfreq))
@@ -97,24 +97,24 @@ def grating(gp,gh,gdc,oddz):
plt.pcolormesh(mode_wvl, gdc, mode_tran, cmap='hot_r', shading='gouraud', vmin=0, vmax=mode_tran.max())
plt.axis([wvl_min, wvl_max, gdc[0], gdc[-1]])
plt.xlabel("wavelength (μm)")
- plt.xticks([t for t in np.arange(wvl_min,wvl_max+0.1,0.1)])
+ plt.xticks(list(np.arange(wvl_min,wvl_max+0.1,0.1)))
plt.ylabel("grating duty cycle")
- plt.yticks([t for t in np.arange(gdc[0],gdc[-1]+0.1,0.1)])
+ plt.yticks(list(np.arange(gdc[0],gdc[-1]+0.1,0.1)))
plt.title("transmittance")
cbar = plt.colorbar()
- cbar.set_ticks([t for t in np.arange(0,1.2,0.2)])
+ cbar.set_ticks(list(np.arange(0,1.2,0.2)))
cbar.set_ticklabels(["{:.1f}".format(t) for t in np.arange(0,1.2,0.2)])
plt.subplot(1,2,2)
plt.pcolormesh(mode_wvl, gdc, mode_phase, cmap='RdBu', shading='gouraud', vmin=mode_phase.min(), vmax=mode_phase.max())
plt.axis([wvl_min, wvl_max, gdc[0], gdc[-1]])
plt.xlabel("wavelength (μm)")
- plt.xticks([t for t in np.arange(wvl_min,wvl_max+0.1,0.1)])
+ plt.xticks(list(np.arange(wvl_min,wvl_max+0.1,0.1)))
plt.ylabel("grating duty cycle")
- plt.yticks([t for t in np.arange(gdc[0],gdc[-1]+0.1,0.1)])
+ plt.yticks(list(np.arange(gdc[0],gdc[-1]+0.1,0.1)))
plt.title("phase (radians)")
cbar = plt.colorbar()
- cbar.set_ticks([t for t in range(-3,4)])
+ cbar.set_ticks(list(range(-3,4)))
cbar.set_ticklabels(["{:.1f}".format(t) for t in range(-3,4)])
plt.tight_layout()
diff --git a/python/examples/cavity_arrayslice.py b/python/examples/cavity_arrayslice.py
index 6fa9e91aa..863fce44e 100644
--- a/python/examples/cavity_arrayslice.py
+++ b/python/examples/cavity_arrayslice.py
@@ -23,11 +23,8 @@
geometry = [blk]
-for i in range(3):
- geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)))
-
-for i in range(3):
- geometry.append(mp.Cylinder(r, center=mp.Vector3(d / -2 - i)))
+geometry.extend(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)) for i in range(3))
+geometry.extend(mp.Cylinder(r, center=mp.Vector3(d / -2 - i)) for i in range(3))
sim = mp.Simulation(cell_size=cell,
geometry=geometry,
diff --git a/python/examples/cyl-ellipsoid.py b/python/examples/cyl-ellipsoid.py
index 3e0d50a34..8a727163e 100644
--- a/python/examples/cyl-ellipsoid.py
+++ b/python/examples/cyl-ellipsoid.py
@@ -27,7 +27,7 @@ def main():
def print_stuff(sim_obj):
v = mp.Vector3(4.13, 3.75, 0)
p = sim.get_field_point(src_cmpt, v)
- print("t, Ez: {} {}+{}i".format(sim.round_time(), p.real, p.imag))
+ print(f"t, Ez: {sim.round_time()} {p.real}+{p.imag}i")
sim.run(mp.at_beginning(mp.output_epsilon),
mp.at_every(0.25, print_stuff),
diff --git a/python/examples/eps_fit_lorentzian.py b/python/examples/eps_fit_lorentzian.py
index 8b825db69..bbae3076c 100644
--- a/python/examples/eps_fit_lorentzian.py
+++ b/python/examples/eps_fit_lorentzian.py
@@ -14,7 +14,7 @@ def lorentzfunc(p, x):
"""Return the complex ε profile given a set of Lorentzian parameters p
(σ_0, ω_0, γ_0, σ_1, ω_1, γ_1, ...) for a set of frequencies x.
"""
- N = int(len(p)/3)
+ N = len(p) // 3
y = np.zeros(len(x))
for n in range(N):
A_n = p[3*n+0]
@@ -29,7 +29,7 @@ def lorentzerr(p, x, y, grad):
well as the gradient of this error with respect to each Lorentzian
polarizability parameter in p and saving the result in grad.
"""
- N = int(len(p)/3)
+ N = len(p) // 3
yp = lorentzfunc(p, x)
val = np.sum(np.square(abs(y - yp)))
for n in range(N):
diff --git a/python/examples/finite_grating.py b/python/examples/finite_grating.py
index e1cdf1eee..1129410e2 100644
--- a/python/examples/finite_grating.py
+++ b/python/examples/finite_grating.py
@@ -62,11 +62,13 @@
sim.reset_meep()
-for j in range(num_cells):
- geometry.append(mp.Block(material=glass,
- size=mp.Vector3(gh,gdc*gp,mp.inf),
- center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,-0.5*sy+dpml+dpad+(j+0.5)*gp)))
-
+geometry.extend(
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(gh, gdc * gp, mp.inf),
+ center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh, -0.5 * sy +
+ dpml + dpad + (j + 0.5) * gp))
+ for j in range(num_cells))
sim = mp.Simulation(resolution=resolution,
cell_size=cell_size,
boundary_layers=pml_layers,
diff --git a/python/examples/gaussian-beam.py b/python/examples/gaussian-beam.py
index bc2747718..0d794a4fa 100644
--- a/python/examples/gaussian-beam.py
+++ b/python/examples/gaussian-beam.py
@@ -39,4 +39,4 @@
output_plane=mp.Volume(center=mp.Vector3(),
size=mp.Vector3(s-2*dpml,s-2*dpml)))
-plt.savefig('Ez_angle{}.png'.format(rot_angle),bbox_inches='tight',pad_inches=0)
+plt.savefig(f'Ez_angle{rot_angle}.png', bbox_inches='tight', pad_inches=0)
diff --git a/python/examples/holey-wvg-bands.py b/python/examples/holey-wvg-bands.py
index a04ee390d..d56cc420e 100644
--- a/python/examples/holey-wvg-bands.py
+++ b/python/examples/holey-wvg-bands.py
@@ -38,10 +38,7 @@ def main():
sim = mp.Simulation(cell_size=cell, geometry=[b, c], sources=[s], symmetries=[sym],
boundary_layers=[mp.PML(dpml, direction=mp.Y)], resolution=20)
- kx = False # if true, do run at specified kx and get fields
- k_interp = 19 # # k-points to interpolate, otherwise
-
- if kx:
+ if kx := False:
sim.k_point = mp.Vector3(kx)
sim.run(
@@ -53,6 +50,8 @@ def main():
sim.run(mp.at_every(1 / fcen / 20, mp.output_hfield_z), until=1 / fcen)
else:
+ k_interp = 19 # # k-points to interpolate, otherwise
+
sim.run_k_points(300, mp.interpolate(k_interp, [mp.Vector3(), mp.Vector3(0.5)]))
diff --git a/python/examples/holey-wvg-cavity.py b/python/examples/holey-wvg-cavity.py
index 7bedb283d..34f28bd58 100644
--- a/python/examples/holey-wvg-cavity.py
+++ b/python/examples/holey-wvg-cavity.py
@@ -14,7 +14,7 @@
def main(args):
resolution = 20 # pixels/um
-
+
eps = 13 # dielectric constant of waveguide
w = 1.2 # width of waveguide
r = 0.36 # radius of holes
@@ -40,8 +40,6 @@ def main(args):
fcen = args.fcen # pulse center frequency
df = args.df # pulse frequency width
- nfreq = 500 # number of frequencies at which to compute flux
-
sim = mp.Simulation(cell_size=cell,
geometry=geometry,
sources=[],
@@ -72,6 +70,8 @@ def main(args):
freg = mp.FluxRegion(center=mp.Vector3(0.5*sx-dpml-0.5),
size=mp.Vector3(0,2*w))
+ nfreq = 500 # number of frequencies at which to compute flux
+
# transmitted flux
trans = sim.add_flux(fcen, df, nfreq, freg)
diff --git a/python/examples/metal-cavity-ldos.py b/python/examples/metal-cavity-ldos.py
index b00ed414b..97b6a2c45 100644
--- a/python/examples/metal-cavity-ldos.py
+++ b/python/examples/metal-cavity-ldos.py
@@ -9,7 +9,7 @@ def metal_cavity(w):
resolution = 50
sxy = 2
dpml = 1
- sxy = sxy+2*dpml
+ sxy += 2*dpml
cell = mp.Vector3(sxy,sxy)
pml_layers = [mp.PML(dpml)]
@@ -60,7 +60,7 @@ def metal_cavity(w):
for j in range(len(ws)):
ldos_1[j], ldos_2[j] = metal_cavity(ws[j])
- print("ldos:, {}, {}".format(ldos_1[j],ldos_2[2]))
+ print(f"ldos:, {ldos_1[j]}, {ldos_2[2]}")
plt.figure(dpi=150)
plt.semilogy(1/ws,ldos_1,'bo-',label="2Q/(πωV)")
diff --git a/python/examples/metasurface_lens.py b/python/examples/metasurface_lens.py
index 42b56e77d..771d4fb9f 100644
--- a/python/examples/metasurface_lens.py
+++ b/python/examples/metasurface_lens.py
@@ -56,9 +56,9 @@ def grating(gp,gh,gdc_list):
flux_obj = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy)))
sim.run(until_after_sources=50)
-
+
input_flux = mp.get_fluxes(flux_obj)
-
+
sim.reset_meep()
geometry.append(mp.Block(material=glass, size=mp.Vector3(gh,gdc_list[0]*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh)))
@@ -83,10 +83,10 @@ def grating(gp,gh,gdc_list):
mode_phase = np.angle(coeffs[0,0,0])
if mode_phase > 0:
mode_phase -= 2*np.pi
-
+
return mode_tran, mode_phase
-
- else:
+
+ else:
sy = num_cells*gp
cell_size = mp.Vector3(sx,sy,0)
@@ -95,11 +95,12 @@ def grating(gp,gh,gdc_list):
center=src_pt,
size=mp.Vector3(y=sy))]
- for j in range(num_cells):
- geometry.append(mp.Block(material=glass,
- size=mp.Vector3(gh,gdc_list[j]*gp,mp.inf),
- center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,-0.5*sy+(j+0.5)*gp)))
-
+ geometry.extend(
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(gh, gdc_list[j] * gp, mp.inf),
+ center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh, -0.5 * sy +
+ (j + 0.5) * gp)) for j in range(num_cells))
sim = mp.Simulation(resolution=resolution,
cell_size=cell_size,
boundary_layers=pml_layers,
@@ -111,7 +112,7 @@ def grating(gp,gh,gdc_list):
n2f_obj = sim.add_near2far(fcen, 0, 1, mp.Near2FarRegion(center=mon_pt, size=mp.Vector3(y=sy)))
sim.run(until_after_sources=500)
-
+
return abs(sim.get_farfields(n2f_obj, ff_res, center=mp.Vector3(-0.5*sx+dpml+dsub+gh+focal_length), size=mp.Vector3(spot_length))['Ez'])**2
@@ -128,20 +129,20 @@ def grating(gp,gh,gdc_list):
plt.subplot(1,2,1)
plt.plot(gdc, mode_tran, 'bo-')
plt.xlim(gdc[0],gdc[-1])
-plt.xticks([t for t in np.linspace(0.1,0.9,5)])
+plt.xticks(list(np.linspace(0.1,0.9,5)))
plt.xlabel("grating duty cycle")
plt.ylim(0.96,1.00)
-plt.yticks([t for t in np.linspace(0.96,1.00,5)])
+plt.yticks(list(np.linspace(0.96,1.00,5)))
plt.title("transmittance")
plt.subplot(1,2,2)
plt.plot(gdc, mode_phase, 'rs-')
plt.grid(True)
plt.xlim(gdc[0],gdc[-1])
-plt.xticks([t for t in np.linspace(0.1,0.9,5)])
+plt.xticks(list(np.linspace(0.1,0.9,5)))
plt.xlabel("grating duty cycle")
plt.ylim(-2*np.pi,0)
-plt.yticks([t for t in np.linspace(-6,0,7)])
+plt.yticks(list(np.linspace(-6,0,7)))
plt.title("phase (radians)")
plt.tight_layout(pad=0.5)
@@ -171,9 +172,12 @@ def grating(gp,gh,gdc_list):
x = np.linspace(focal_length-0.5*spot_length,focal_length+0.5*spot_length,ff_res*spot_length)
plt.figure(dpi=200)
-plt.semilogy(x,abs(ff_nc[:,0])**2,'bo-',label='num_cells = {}'.format(2*num_cells[0]+1))
-plt.semilogy(x,abs(ff_nc[:,1])**2,'ro-',label='num_cells = {}'.format(2*num_cells[1]+1))
-plt.semilogy(x,abs(ff_nc[:,2])**2,'go-',label='num_cells = {}'.format(2*num_cells[2]+1))
+plt.semilogy(
+ x, abs(ff_nc[:, 0])**2, 'bo-', label=f'num_cells = {2*num_cells[0] + 1}')
+plt.semilogy(
+ x, abs(ff_nc[:, 1])**2, 'ro-', label=f'num_cells = {2*num_cells[1] + 1}')
+plt.semilogy(
+ x, abs(ff_nc[:, 2])**2, 'go-', label=f'num_cells = {2*num_cells[2] + 1}')
plt.xlabel('x coordinate (μm)')
plt.ylabel(r'energy density of far-field electric fields, |E$_z$|$^2$')
plt.title('focusing properties of a binary-grating metasurface lens')
diff --git a/python/examples/mpb_hole_slab.py b/python/examples/mpb_hole_slab.py
index 02442576f..385e8d41a 100644
--- a/python/examples/mpb_hole_slab.py
+++ b/python/examples/mpb_hole_slab.py
@@ -41,11 +41,7 @@
only_K = False # run with only_K=true to only do this k_point
k_interp = 4 # the number of k points to interpolate
-if only_K:
- k_points = [K]
-else:
- k_points = mp.interpolate(k_interp, [Gamma, M, K, Gamma])
-
+k_points = [K] if only_K else mp.interpolate(k_interp, [Gamma, M, K, Gamma])
resolution = mp.Vector3(32, 32, 16)
num_bands = 9
diff --git a/python/examples/mpb_tutorial.py b/python/examples/mpb_tutorial.py
index 7b3ded2b4..bc3ceb99f 100644
--- a/python/examples/mpb_tutorial.py
+++ b/python/examples/mpb_tutorial.py
@@ -74,8 +74,8 @@ def first_tm_gap(r):
ms.mesh_size = 7
result = minimize_scalar(first_tm_gap, method='bounded', bounds=[0.1, 0.5], options={'xatol': 0.1})
-print("radius at maximum: {}".format(result.x))
-print("gap size at maximum: {}".format(result.fun * -1))
+print(f"radius at maximum: {result.x}")
+print(f"gap size at maximum: {result.fun * -1}")
ms.mesh_size = 3 # Reset to default value of 3
@@ -110,7 +110,7 @@ def first_tm_gap(r):
ms.get_dfield(25) # compute the D field for band 25
ms.compute_field_energy() # compute the energy density from D
c = mp.Cylinder(1.0, material=mp.air)
-print("energy in cylinder: {}".format(ms.compute_energy_in_objects([c])))
+print(f"energy in cylinder: {ms.compute_energy_in_objects([c])}")
print_heading('5x5 point defect, targeted solver')
@@ -130,11 +130,11 @@ def rootfun(eps):
# add the cylinder of epsilon = eps to the old geometry:
ms.geometry = old_geometry + [mp.Cylinder(0.2, material=mp.Medium(epsilon=eps))]
ms.run_tm() # solve for the mode (using the targeted solver)
- print("epsilon = {} gives freq. = {}".format(eps, ms.get_freqs()[0]))
+ print(f"epsilon = {eps} gives freq. = {ms.get_freqs()[0]}")
return ms.get_freqs()[0] - 0.314159 # return 1st band freq. - 0.314159
rooteps = ridder(rootfun, 1, 12)
-print("root (value of epsilon) is at: {}".format(rooteps))
+print(f"root (value of epsilon) is at: {rooteps}")
rootval = rootfun(rooteps)
-print("root function at {} = {}".format(rooteps, rootval))
+print(f"root function at {rooteps} = {rootval}")
diff --git a/python/examples/multilevel-atom.py b/python/examples/multilevel-atom.py
index d3326a3c6..87a6f231d 100644
--- a/python/examples/multilevel-atom.py
+++ b/python/examples/multilevel-atom.py
@@ -91,6 +91,6 @@ def field_func(p):
def print_field(sim):
fp = sim.get_field_point(mp.Ex, mp.Vector3(z=(-0.5 * sz) + Lcav + (0.5 * dpad))).real
- print("field:, {}, {}".format(sim.meep_time(), fp))
+ print(f"field:, {sim.meep_time()}, {fp}")
sim.run(mp.after_time(endt - 250, print_field), until=endt)
diff --git a/python/examples/parallel-wvgs-force.py b/python/examples/parallel-wvgs-force.py
index c7a3e2a42..68bfce7af 100644
--- a/python/examples/parallel-wvgs-force.py
+++ b/python/examples/parallel-wvgs-force.py
@@ -3,12 +3,12 @@
import matplotlib.pyplot as plt
resolution = 40 # pixels/μm
-
+
Si = mp.Medium(index=3.45)
dpml = 1.0
pml_layers = [mp.PML(dpml)]
-
+
sx = 5
sy = 3
cell = mp.Vector3(sx+2*dpml,sy+2*dpml,0)
@@ -45,7 +45,7 @@ def parallel_waveguide(s,xodd):
parity=mp.ODD_Y)
fcen = EigenmodeData.freq
- print("freq:, {}, {}, {}".format("xodd" if xodd else "xeven", s, fcen))
+ print(f'freq:, {"xodd" if xodd else "xeven"}, {s}, {fcen}')
sim.reset_meep()
@@ -70,7 +70,8 @@ def parallel_waveguide(s,xodd):
flux = mp.get_fluxes(wvg_flux)[0]
force = mp.get_forces(wvg_force)[0]
- print("data:, {}, {}, {}, {}, {}".format("xodd" if xodd else "xeven", s, flux, force, -force/flux))
+ print(f'data:, {"xodd" if xodd else "xeven"}, {s}, {flux}, {force}, {-force / flux}')
+
sim.reset_meep()
return flux, force
diff --git a/python/examples/perturbation_theory.py b/python/examples/perturbation_theory.py
index b6a7d5e4f..a82fe585a 100644
--- a/python/examples/perturbation_theory.py
+++ b/python/examples/perturbation_theory.py
@@ -114,7 +114,7 @@ def main(args):
finite_diff_dw_dR = (frq_perturbed - frq_unperturbed) / dr
- print("dwdR:, {} (pert. theory), {} (finite diff.)".format(perturb_theory_dw_dR,finite_diff_dw_dR))
+ print(f"dwdR:, {perturb_theory_dw_dR} (pert. theory), {finite_diff_dw_dR} (finite diff.)")
if __name__ == '__main__':
parser = argparse.ArgumentParser()
diff --git a/python/examples/perturbation_theory_2d.py b/python/examples/perturbation_theory_2d.py
index 13f2d5d2f..4065a2201 100644
--- a/python/examples/perturbation_theory_2d.py
+++ b/python/examples/perturbation_theory_2d.py
@@ -134,7 +134,7 @@ def main(args):
finite_diff_dw_dR = (frq_perturbed - frq_unperturbed) / dr
- print("dwdR:, {} (pert. theory), {} (finite diff.)".format(perturb_theory_dw_dR,finite_diff_dw_dR))
+ print(f"dwdR:, {perturb_theory_dw_dR} (pert. theory), {finite_diff_dw_dR} (finite diff.)")
if __name__ == '__main__':
parser = argparse.ArgumentParser()
diff --git a/python/examples/polarization_grating.py b/python/examples/polarization_grating.py
index 8cccb1a96..c943b559c 100644
--- a/python/examples/polarization_grating.py
+++ b/python/examples/polarization_grating.py
@@ -139,7 +139,7 @@ def lc_mat(p):
plt.plot(phase,eff_m1,'ro-',clip_on=False,label='±1 orders (meep)')
plt.plot(phase,eff_m1_analytic,'r--',clip_on=False,label='±1 orders (analytic)')
plt.axis([0, 1.0, 0, 1])
-plt.xticks([t for t in np.arange(0,1.2,0.2)])
+plt.xticks(list(np.arange(0,1.2,0.2)))
plt.xlabel("phase delay Δnd/λ")
plt.ylabel("diffraction efficiency @ λ = 0.54 μm")
plt.legend(loc='center')
@@ -154,7 +154,7 @@ def lc_mat(p):
plt.plot(phase,eff_m0,'bo-',clip_on=False,label='0th order (meep)')
plt.plot(phase,eff_m1,'ro-',clip_on=False,label='±1 orders (meep)')
plt.axis([0, 1.0, 0, 1])
-plt.xticks([t for t in np.arange(0,1.2,0.2)])
+plt.xticks(list(np.arange(0,1.2,0.2)))
plt.xlabel("phase delay Δnd/λ")
plt.ylabel("diffraction efficiency @ λ = 0.54 μm")
plt.legend(loc='center')
diff --git a/python/examples/refl-angular-kz2d.py b/python/examples/refl-angular-kz2d.py
index 89bd49d39..13fea4c88 100644
--- a/python/examples/refl-angular-kz2d.py
+++ b/python/examples/refl-angular-kz2d.py
@@ -28,7 +28,7 @@ def refl_planar(theta, kz_2d):
refl_fr = mp.FluxRegion(center=mp.Vector3(-0.25*sx))
refl = sim.add_flux(fcen, 0, 1, refl_fr)
-
+
sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ey, mp.Vector3(-0.5*sx+dpml), 1e-9))
input_flux = mp.get_fluxes(refl)
@@ -56,8 +56,7 @@ def refl_planar(theta, kz_2d):
refl_flux = mp.get_fluxes(refl)
freqs = mp.get_flux_freqs(refl)
- Rmeep = -refl_flux[0]/input_flux[0]
- return Rmeep
+ return -refl_flux[0]/input_flux[0]
# rotation angle of source: CCW around Y axis, 0 degrees along +X axis
@@ -78,4 +77,4 @@ def refl_planar(theta, kz_2d):
# for incident planewave in medium n1 at angle theta_in
Rfresnel = lambda theta_in: math.fabs((n2*math.cos(theta_out(theta_in))-n1*math.cos(theta_in))/(n2*math.cos(theta_out(theta_in))+n1*math.cos(theta_in)))**2
-print("refl:, {} (real/imag), {} (complex), {} (3d), {} (analytic)".format(Rmeep_real_imag,Rmeep_complex,Rmeep_3d,Rfresnel(theta_r)))
+print(f"refl:, {Rmeep_real_imag} (real/imag), {Rmeep_complex} (complex), {Rmeep_3d} (3d), {Rfresnel(theta_r)} (analytic)")
diff --git a/python/examples/refl-angular.py b/python/examples/refl-angular.py
index a51791cc9..316beca8a 100644
--- a/python/examples/refl-angular.py
+++ b/python/examples/refl-angular.py
@@ -26,11 +26,7 @@ def main(args):
k = mp.Vector3(math.sin(theta_r),0,math.cos(theta_r)).scale(fmin)
# if normal incidence, force number of dimensions to be 1
- if theta_r == 0:
- dimensions = 1
- else:
- dimensions = 3
-
+ dimensions = 1 if theta_r == 0 else 3
sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
component=mp.Ex,
center=mp.Vector3(0,0,-0.5*sz+dpml))]
@@ -73,7 +69,7 @@ def main(args):
freqs = mp.get_flux_freqs(refl)
for i in range(nfreq):
- print("refl:, {}, {}, {}, {}".format(k.x,1/freqs[i],math.degrees(math.asin(k.x/freqs[i])),-refl_flux[i]/empty_flux[i]))
+ print(f"refl:, {k.x}, {1 / freqs[i]}, {math.degrees(math.asin(k.x/freqs[i]))}, {-refl_flux[i] / empty_flux[i]}")
if __name__ == '__main__':
parser = argparse.ArgumentParser()
diff --git a/python/examples/refl-quartz.py b/python/examples/refl-quartz.py
index 55a61a23a..859b9149d 100644
--- a/python/examples/refl-quartz.py
+++ b/python/examples/refl-quartz.py
@@ -68,6 +68,6 @@
plt.xlabel("wavelength (μm)")
plt.ylabel("reflectance")
plt.axis([0.4, 0.8, 0.0340, 0.0365])
-plt.xticks([t for t in np.arange(0.4,0.9,0.1)])
+plt.xticks(list(np.arange(0.4,0.9,0.1)))
plt.legend(loc='upper right')
plt.show()
diff --git a/python/examples/ring-mode-overlap.py b/python/examples/ring-mode-overlap.py
index 72182fdd7..336cab4e9 100644
--- a/python/examples/ring-mode-overlap.py
+++ b/python/examples/ring-mode-overlap.py
@@ -57,4 +57,4 @@ def overlap_integral(r, ez1, ez2):
return ez1.conjugate() * ez2
res = sim.integrate2_field_function(fields2, [mp.Ez], [mp.Ez], overlap_integral)
-print("overlap integral of mode at w and 2w: {}".format(abs(res)))
+print(f"overlap integral of mode at w and 2w: {abs(res)}")
diff --git a/python/examples/ring_gds.py b/python/examples/ring_gds.py
index 64e2b99d5..47e17f0e4 100644
--- a/python/examples/ring_gds.py
+++ b/python/examples/ring_gds.py
@@ -24,7 +24,7 @@ def create_ring_gds(radius,width):
# Reload the library each time to prevent gds library name clashes
importlib.reload(gdspy)
- ringCell = gdspy.Cell("ring_resonator_r{}_w{}".format(radius,width))
+ ringCell = gdspy.Cell(f"ring_resonator_r{radius}_w{width}")
# Draw the ring
ringCell.add(gdspy.Round((0,0),
@@ -53,7 +53,7 @@ def create_ring_gds(radius,width):
(radius+width/2+pad,radius+width/2+pad),
SIMULATION_LAYER))
- filename = "ring_r{}_w{}.gds".format(radius,width)
+ filename = f"ring_r{radius}_w{width}.gds"
gdspy.write_gds(filename, unit=1.0e-6, precision=1.0e-9)
return filename
@@ -109,4 +109,4 @@ def find_modes(filename,wvl=1.55,bw=0.05):
filename = create_ring_gds(2.0,0.5)
wvls, Qs = find_modes(filename,1.55,0.05)
for w, Q in zip(wvls,Qs):
- print("mode: {}, {}".format(w,Q))
+ print(f"mode: {w}, {Q}")
diff --git a/python/examples/stochastic_emitter.py b/python/examples/stochastic_emitter.py
index c14e51be4..18b497026 100644
--- a/python/examples/stochastic_emitter.py
+++ b/python/examples/stochastic_emitter.py
@@ -51,11 +51,8 @@
def compute_flux(m=1,n=0):
if m == 1:
- sources = []
- for n in range(ndipole):
- sources.append(mp.Source(mp.CustomSource(src_func=lambda t: np.random.randn()),
- component=mp.Ez,
- center=mp.Vector3(sx*(-0.5+n/ndipole),-0.5*sy+dAg+0.5*dsub)))
+ sources = [mp.Source(mp.CustomSource(src_func=lambda t: np.random.randn()), component=mp.Ez, center=mp.Vector3(sx * (-0.5 + n / ndipole), -0.5 * sy + dAg + 0.5 * dsub)) for n in range(ndipole)]
+
else:
sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
component=mp.Ez,
@@ -92,5 +89,5 @@ def compute_flux(m=1,n=0):
if mp.am_master():
- with open('method{}_{}_res{}_nfreq{}_ndipole{}.npz'.format(args.method,"textured" if args.textured else "flat",resolution,nfreq,ndipole),'wb') as f:
+ with open(f'method{args.method}_{"textured" if args.textured else "flat"}_res{resolution}_nfreq{nfreq}_ndipole{ndipole}.npz', 'wb') as f:
np.savez(f,freqs=freqs,fluxes=fluxes)
diff --git a/python/examples/stochastic_emitter_line.py b/python/examples/stochastic_emitter_line.py
index eef3bac61..a2e168a6b 100644
--- a/python/examples/stochastic_emitter_line.py
+++ b/python/examples/stochastic_emitter_line.py
@@ -98,10 +98,5 @@ def compute_flux(m,n):
if mp.am_master():
- with open('method{}_{}_res{}_nfreq{}_{}{}.npz'.format(args.method,
- "textured" if args.textured else "flat",
- resolution,
- nfreq,
- "ndipole" if args.method == 2 else "nsrc",
- ndipole if args.method == 2 else nsrc),'wb') as f:
+ with open(f'method{args.method}_{"textured" if args.textured else "flat"}_res{resolution}_nfreq{nfreq}_{"ndipole" if args.method == 2 else "nsrc"}{ndipole if args.method == 2 else nsrc}.npz', 'wb') as f:
np.savez(f,freqs=freqs,fluxes=fluxes)
diff --git a/python/examples/wvg-src.py b/python/examples/wvg-src.py
index b5cbbaf09..bcd2edb84 100644
--- a/python/examples/wvg-src.py
+++ b/python/examples/wvg-src.py
@@ -48,7 +48,7 @@
flux2 = sim.flux_in_box(mp.X, mp.Volume(center=mp.Vector3(6.0), size=mp.Vector3(1.8, 6)))
# averaged over y region of width 1.8
-print("left-going flux = {}".format(flux1 / -1.8))
+print(f"left-going flux = {flux1 / -1.8}")
# averaged over y region of width 1.8
-print("right-going flux = {}".format(flux2 / 1.8))
+print(f"right-going flux = {flux2 / 1.8}")
diff --git a/python/examples/zone_plate.py b/python/examples/zone_plate.py
index 9defcac9f..3759035ba 100644
--- a/python/examples/zone_plate.py
+++ b/python/examples/zone_plate.py
@@ -44,10 +44,7 @@
size=mp.Vector3(sr,0,dpml+dsub),
center=mp.Vector3(0.5*sr,0,-0.5*sz+0.5*(dpml+dsub)))]
-for n in range(zN-1,-1,-1):
- geometry.append(mp.Block(material=glass if n % 2 == 0 else mp.vacuum,
- size=mp.Vector3(r[n],0,zh),
- center=mp.Vector3(0.5*r[n],0,-0.5*sz+dpml+dsub+0.5*zh)))
+geometry.extend(mp.Block(material=glass if n % 2 == 0 else mp.vacuum, size=mp.Vector3(r[n], 0, zh), center=mp.Vector3(0.5 * r[n], 0, -0.5 * sz + dpml + dsub + 0.5 * zh)) for n in range(zN - 1, -1, -1))
sim = mp.Simulation(cell_size=cell_size,
boundary_layers=pml_layers,
@@ -90,7 +87,7 @@
plt.subplot(1,2,1)
plt.semilogy(np.linspace(0,sr-dpml,len(E2_r)),E2_r,'bo-')
plt.xlim(-2,20)
- plt.xticks([t for t in np.arange(0,25,5)])
+ plt.xticks(list(np.arange(0,25,5)))
plt.grid(True,axis="y",which="both",ls="-")
plt.xlabel(r'$r$ coordinate (μm)')
plt.ylabel(r'energy density of far fields, |E|$^2$')
@@ -99,6 +96,7 @@
plt.grid(True,axis="y",which="both",ls="-")
plt.xlabel(r'$z$ coordinate (μm)')
plt.ylabel(r'energy density of far fields, |E|$^2$')
- plt.suptitle(r"binary-phase zone plate with focal length $z$ = {} μm".format(focal_length))
+ plt.suptitle(f"binary-phase zone plate with focal length $z$ = {focal_length} μm")
+
plt.tight_layout()
plt.savefig("zone_plate_farfields.png")
diff --git a/python/geom.py b/python/geom.py
index 908337089..a244cc137 100755
--- a/python/geom.py
+++ b/python/geom.py
@@ -19,7 +19,7 @@ def check_nonnegative(prop, val):
if val >= 0:
return val
else:
- raise ValueError("{} cannot be negative. Got {}".format(prop, val))
+ raise ValueError(f"{prop} cannot be negative. Got {val}")
def init_do_averaging(mat_func):
if not hasattr(mat_func, 'do_averaging'):
@@ -113,7 +113,7 @@ def __mul__(self, other):
elif isinstance(other, Number):
return self.scale(other)
else:
- raise TypeError("No operation known for 'Vector3 * {}'".format(type(other)))
+ raise TypeError(f"No operation known for 'Vector3 * {type(other)}'")
def __truediv__(self, other):
if type(other) is Vector3:
@@ -121,7 +121,7 @@ def __truediv__(self, other):
elif isinstance(other, Number):
return Vector3(self.x / other, self.y / other, self.z / other)
else:
- raise TypeError("No operation known for 'Vector3 / {}'".format(type(other)))
+ raise TypeError(f"No operation known for 'Vector3 / {type(other)}'")
def __rmul__(self, other):
"""
@@ -135,7 +135,7 @@ def __rmul__(self, other):
if isinstance(other, Number):
return self.scale(other)
else:
- raise TypeError("No operation known for '{} * Vector3'".format(type(other)))
+ raise TypeError(f"No operation known for '{type(other)} * Vector3'")
def __getitem__(self, i):
if i == 0:
@@ -145,10 +145,10 @@ def __getitem__(self, i):
elif i == 2:
return self.z
else:
- raise IndexError("No value at index {}".format(i))
+ raise IndexError(f"No value at index {i}")
def __repr__(self):
- return "Vector3<{}, {}, {}>".format(self.x, self.y, self.z)
+ return f"Vector3<{self.x}, {self.y}, {self.z}>"
def __array__(self):
return np.array([self.x, self.y, self.z])
@@ -423,8 +423,8 @@ def __init__(self, epsilon_diag=Vector3(1, 1, 1),
self.epsilon_offdiag = Vector3(*epsilon_offdiag)
self.mu_diag = Vector3(*mu_diag)
self.mu_offdiag = Vector3(*mu_offdiag)
- self.E_susceptibilities = E_susceptibilities if E_susceptibilities else []
- self.H_susceptibilities = H_susceptibilities if H_susceptibilities else []
+ self.E_susceptibilities = E_susceptibilities or []
+ self.H_susceptibilities = H_susceptibilities or []
self.E_chi2_diag = Vector3(chi2, chi2, chi2) if chi2 else Vector3(*E_chi2_diag)
self.E_chi3_diag = Vector3(chi3, chi3, chi3) if chi3 else Vector3(*E_chi3_diag)
self.H_chi2_diag = Vector3(*H_chi2_diag)
@@ -501,9 +501,11 @@ def _get_epsmu(self, diag, offdiag, susceptibilities, conductivity_diag, conduct
# Check for values outside of allowed ranges
if np.min(np.squeeze(freqs)) < self.valid_freq_range.min:
- raise ValueError('User specified frequency {} is below the Medium\'s limit, {}.'.format(np.min(np.squeeze(freqs)),self.valid_freq_range.min))
+ raise ValueError(f"User specified frequency {np.min(np.squeeze(freqs))} is below the Medium\'s limit, {self.valid_freq_range.min}.")
+
if np.max(np.squeeze(freqs)) > self.valid_freq_range.max:
- raise ValueError('User specified frequency {} is above the Medium\'s limit, {}.'.format(np.max(np.squeeze(freqs)),self.valid_freq_range.max))
+ raise ValueError(f"User specified frequency {np.max(np.squeeze(freqs))} is above the Medium\'s limit, {self.valid_freq_range.max}.")
+
# Initialize with instantaneous dielectric tensor
epsmu = np.expand_dims(Matrix(diag=diag,offdiag=offdiag),axis=0)
@@ -527,11 +529,10 @@ class MaterialGrid(object):
argument of the [`Simulation`](#Simulation) constructor (similar to a [material function](#medium)).
"""
def check_weights(self, w):
- if np.amin(w) < 0. or np.amax(w) > 1.:
- warnings.warn('The weights parameter of MaterialGrid must be in the range [0,1].')
- return np.clip(w, 0., 1.)
- else:
+ if np.amin(w) >= 0.0 and np.amax(w) <= 1.0:
return w
+ warnings.warn('The weights parameter of MaterialGrid must be in the range [0,1].')
+ return np.clip(w, 0., 1.)
def __init__(self,
grid_size,
@@ -630,7 +631,8 @@ def update_weights(self, x):
Reset the `weights` to `x`.
"""
if x.size != self.num_params:
- raise ValueError("weights of shape {} do not match user specified grid dimension: {}".format(self.weights.size,self.grid_size))
+ raise ValueError(f"weights of shape {self.weights.size} do not match user specified grid dimension: {self.grid_size}")
+
self.weights[:] = self.check_weights(x).flatten().astype(np.float64)
class Susceptibility(object):
@@ -860,8 +862,8 @@ class MultilevelAtom(Susceptibility):
"""
def __init__(self, initial_populations=None, transitions=None, **kwargs):
super(MultilevelAtom, self).__init__(**kwargs)
- self.initial_populations = initial_populations if initial_populations else []
- self.transitions = transitions if transitions else []
+ self.initial_populations = initial_populations or []
+ self.transitions = transitions or []
class Transition(object):
@@ -1263,13 +1265,13 @@ def __mul__(self, m):
elif isinstance(m, Number):
return self.scale(m)
else:
- raise TypeError("No operation known for 'Matrix * {}'".format(type(m)))
+ raise TypeError(f"No operation known for 'Matrix * {type(m)}'")
def __rmul__(self, left_arg):
if isinstance(left_arg, Number):
return self.scale(left_arg)
else:
- raise TypeError("No operation known for 'Matrix * {}'".format(type(left_arg)))
+ raise TypeError(f"No operation known for 'Matrix * {type(left_arg)}'")
def __truediv__(self, scalar):
return Matrix(self.c1 / scalar, self.c2 / scalar, self.c3 / scalar)
@@ -1284,9 +1286,7 @@ def __repr__(self):
r0 = self.row(0)
r1 = self.row(1)
r2 = self.row(2)
- return "<<{} {} {}>\n <{} {} {}>\n <{} {} {}>>".format(r0[0], r0[1], r0[2],
- r1[0], r1[1], r1[2],
- r2[0], r2[1], r2[2])
+ return f"<<{r0[0]} {r0[1]} {r0[2]}>\n <{r1[0]} {r1[1]} {r1[2]}>\n <{r2[0]} {r2[1]} {r2[2]}>>"
def __array__(self):
return np.array([self.row(0).__array__(),
@@ -1446,10 +1446,7 @@ def reciprocal_to_cartesian(x, lat):
m = Matrix(Vector3(s.x), Vector3(y=s.y), Vector3(z=s.z))
Rst = (lat.basis * m).transpose()
- if isinstance(x, Vector3):
- return Rst.inverse() * x
- else:
- return (Rst.inverse() * x) * Rst
+ return Rst.inverse() * x if isinstance(x, Vector3) else (Rst.inverse() * x) * Rst
def cartesian_to_reciprocal(x, lat):
@@ -1458,10 +1455,7 @@ def cartesian_to_reciprocal(x, lat):
m = Matrix(Vector3(s.x), Vector3(y=s.y), Vector3(z=s.z))
Rst = (lat.basis * m).transpose()
- if isinstance(x, Vector3):
- return Rst * x
- else:
- return (Rst * x) * Rst.inverse()
+ return Rst * x if isinstance(x, Vector3) else (Rst * x) * Rst.inverse()
def lattice_to_reciprocal(x, lat):
@@ -1476,11 +1470,10 @@ def geometric_object_duplicates(shift_vector, min_multiple, max_multiple, go):
shift_vector = Vector3(*shift_vector)
def _dup(min_multiple, lst):
- if min_multiple <= max_multiple:
- shifted = go.shift(shift_vector.scale(min_multiple))
- return _dup(min_multiple + 1, [shifted] + lst)
- else:
+ if min_multiple > max_multiple:
return lst
+ shifted = go.shift(shift_vector.scale(min_multiple))
+ return _dup(min_multiple + 1, [shifted] + lst)
return _dup(min_multiple, [])
@@ -1531,8 +1524,7 @@ def memoize(f):
f_memo_tab = {}
def _mem(y=None):
- tab_val = f_memo_tab.get(y, None)
- if tab_val:
+ if tab_val := f_memo_tab.get(y, None):
return tab_val
fy = f(y)
@@ -1550,9 +1542,7 @@ def find_root_deriv(f, tol, x_min, x_max, x_guess=None):
f_memo = memoize(f)
def lazy(x):
- if isinstance(x, numbers.Number):
- return x
- return x()
+ return x if isinstance(x, numbers.Number) else x()
def pick_bound(which):
def _pb():
diff --git a/python/mpb_data.py b/python/mpb_data.py
index 87ffadd92..01337de41 100644
--- a/python/mpb_data.py
+++ b/python/mpb_data.py
@@ -31,11 +31,7 @@ def __init__(self,
if periods:
self.multiply_size = [periods, periods, periods]
else:
- self.multiply_size = [
- x if x else 1,
- y if y else 1,
- z if z else 1
- ]
+ self.multiply_size = [x or 1, y or 1, z or 1]
self.resolution = resolution
self.phase_angle = phase_angle
@@ -61,7 +57,7 @@ def handle_dataset(self, in_arr):
out_dims = [1, 1, 1]
rank = len(in_arr.shape)
num_ones = 3 - rank
- in_dims = [x for x in in_arr.shape] + [1] * num_ones
+ in_dims = list(in_arr.shape) + [1] * num_ones
if np.iscomplexobj(in_arr):
in_arr_re = np.real(in_arr)
@@ -91,7 +87,7 @@ def handle_dataset(self, in_arr):
N *= out_dims[i]
if self.verbose:
- print("Output data {}x{}x{}".format(out_dims[0], out_dims[1], out_dims[2]))
+ print(f"Output data {out_dims[0]}x{out_dims[1]}x{out_dims[2]}")
out_arr_re = np.zeros(int(N))
@@ -103,11 +99,7 @@ def handle_dataset(self, in_arr):
flat_in_arr_re = in_arr_re.ravel()
flat_in_arr_im = in_arr_im.ravel() if isinstance(in_arr_im, np.ndarray) else np.array([])
- if self.kpoint:
- kvector = [self.kpoint.x, self.kpoint.y, self.kpoint.z]
- else:
- kvector = []
-
+ kvector = [self.kpoint.x, self.kpoint.y, self.kpoint.z] if self.kpoint else []
map_data(flat_in_arr_re, flat_in_arr_im, np.array(in_dims, dtype=np.intc),
out_arr_re, out_arr_im, np.array(out_dims, dtype=np.intc), self.coord_map,
kvector, self.pick_nearest, self.verbose, False)
@@ -131,13 +123,13 @@ def handle_cvector_dataset(self, in_arr, multiply_bloch_phase):
d_in = [[in_x_re, in_x_im], [in_y_re, in_y_im], [in_z_re, in_z_im]]
in_dims = [in_arr.shape[0], in_arr.shape[1], 1]
- rank = 2
-
if self.verbose:
print("Found complex vector dataset...")
if self.verbose:
fmt = "Input data is rank {}, size {}x{}x{}."
+ rank = 2
+
print(fmt.format(rank, in_dims[0], in_dims[1], in_dims[2]))
# rotate vector field according to cart_map
@@ -179,11 +171,7 @@ def handle_cvector_dataset(self, in_arr, multiply_bloch_phase):
fmt = "Output data {}x{}x{}."
print(fmt.format(out_dims[0], out_dims[1], out_dims[2]))
- if self.kpoint:
- kvector = [self.kpoint.x, self.kpoint.y, self.kpoint.z]
- else:
- kvector = []
-
+ kvector = [self.kpoint.x, self.kpoint.y, self.kpoint.z] if self.kpoint else []
converted = []
for dim in range(3):
out_arr_re = np.zeros(int(N))
@@ -240,11 +228,7 @@ def init_output_lattice(self):
# that our first vector (in the direction of ve) smoothly
# interpolates between the original lattice vectors.
- if self.have_ve:
- ve = self.ve.unit()
- else:
- ve = Rout.c1.unit()
-
+ ve = self.ve.unit() if self.have_ve else Rout.c1.unit()
# First, compute c1 in the direction of ve by smoothly
# interpolating the old c1/c2/c3 (formula is slightly tricky)
V = Rout.c1.cross(Rout.c2).dot(Rout.c3)
diff --git a/python/simulation.py b/python/simulation.py
index a3ba603d6..43c7b3c69 100644
--- a/python/simulation.py
+++ b/python/simulation.py
@@ -66,9 +66,7 @@ def fix_dft_args(args, i):
return args
def get_num_args(func):
- if isinstance(func, Harminv):
- return 2
- return func.__code__.co_argcount
+ return 2 if isinstance(func, Harminv) else func.__code__.co_argcount
def vec(*args):
@@ -95,14 +93,13 @@ def py_v3_to_vec(dims, iterable, is_cylindrical=False):
elif dims == 2:
if is_cylindrical:
return mp.veccyl(v3.x, v3.z)
- else:
- v = mp.vec(v3.x, v3.y)
- v.set_direction(mp.Z, v3.z) # for special_kz handling
- return v
+ v = mp.vec(v3.x, v3.y)
+ v.set_direction(mp.Z, v3.z) # for special_kz handling
+ return v
elif dims == 3:
return mp.vec(v3.x, v3.y, v3.z)
else:
- raise ValueError("Invalid dimensions in Volume: {}".format(dims))
+ raise ValueError(f"Invalid dimensions in Volume: {dims}")
def bands_to_diffractedplanewave(where,bands):
if bands.axis is None:
@@ -255,7 +252,7 @@ def mean_stretch(self, val):
if val >= 1:
self._mean_stretch = val
else:
- raise ValueError("PML.mean_stretch must be >= 1. Got {}".format(val))
+ raise ValueError(f"PML.mean_stretch must be >= 1. Got {val}")
class Absorber(PML):
@@ -404,7 +401,7 @@ def get_vertices(self):
zmax = self.center.z + self.size.z/2
# Iterate over and remove duplicates for collapsed dimensions (i.e. min=max))
- return [Vector3(x,y,z) for x in list(set([xmin,xmax])) for y in list(set([ymin,ymax])) for z in list(set([zmin,zmax]))]
+ return [Vector3(x, y, z) for x in list({xmin, xmax}) for y in list({ymin, ymax}) for z in list({zmin, zmax})]
def get_edges(self):
@@ -432,10 +429,7 @@ def pt_in_volume(self,pt):
zmin = self.center.z - self.size.z/2
zmax = self.center.z + self.size.z/2
- if (pt.x >= xmin and pt.x <= xmax and pt.y >= ymin and pt.y <= ymax and pt.z >= zmin and pt.z <= zmax):
- return True
- else:
- return False
+ return pt.x >= xmin and pt.x <= xmax and pt.y >= ymin and pt.y <= ymax and pt.z >= zmin and pt.z <= zmax
class FluxRegion(object):
@@ -917,10 +911,7 @@ def _harminv(self):
def _harm(sim):
- if self.mxbands is None or self.mxbands == 0:
- mb = 100
- else:
- mb = self.mxbands
+ mb = 100 if self.mxbands is None or self.mxbands == 0 else self.mxbands
self.modes = self._analyze_harminv(sim, mb)
f1 = self._collect_harminv()
diff --git a/python/solver.py b/python/solver.py
index 17e3ae17e..75f260812 100644
--- a/python/solver.py
+++ b/python/solver.py
@@ -102,8 +102,8 @@ def __init__(self,
self.mode_solver = None
self.resolution = resolution
self.eigensolver_flags = eigensolver_flags
- self.k_points = k_points if k_points else []
- self.geometry = geometry if geometry else []
+ self.k_points = k_points or []
+ self.geometry = geometry or []
self.geometry_lattice = geometry_lattice
self.geometry_center = mp.Vector3(*geometry_center)
self.default_material = default_material
@@ -170,7 +170,7 @@ def resolution(self, val):
self._resolution = [val.x, val.y, val.z]
else:
t = type(val)
- raise TypeError("resolution must be a number or a Vector3: Got {}".format(t))
+ raise TypeError(f"resolution must be a number or a Vector3: Got {t}")
if self.mode_solver:
self.mode_solver.resolution = self._resolution
@@ -323,14 +323,10 @@ def allow_negative_epsilon(self):
def get_filename_prefix(self):
if self.filename_prefix:
- return self.filename_prefix + '-'
- else:
- _, filename = os.path.split(sys.argv[0])
+ return f'{self.filename_prefix}-'
+ _, filename = os.path.split(sys.argv[0])
- if filename == 'ipykernel_launcher.py' or filename == '__main__.py':
- return ''
- else:
- return re.sub(r'\.py$', '', filename) + '-'
+ return '' if filename in ['ipykernel_launcher.py', '__main__.py'] else re.sub(r'\.py$', '', filename) + '-'
def get_freqs(self):
return self.mode_solver.get_freqs()
@@ -418,9 +414,7 @@ def _get_field(self, f, band, bloch_phase):
self.mode_solver.get_curfield_cmplx(arr)
arr = np.reshape(arr, dims)
- res = MPBArray(arr, self.get_lattice(), self.current_k, bloch_phase=bloch_phase)
-
- return res
+ return MPBArray(arr, self.get_lattice(), self.current_k, bloch_phase=bloch_phase)
def get_curfield_as_array(self, bloch_phase=True):
dims = self.mode_solver.get_dims()
@@ -499,20 +493,19 @@ def update_band_range_data(self, brd, freqs, kpoint):
def update_brd(brd, freqs, br_start):
if not freqs:
return br_start + brd
- else:
- br = ((mp.inf, -1), (-mp.inf, -1)) if not brd else brd[0]
- br_rest = [] if not brd else brd[1:]
- newmin = (freqs[0], kpoint) if freqs[0] < br[0][0] else br[0]
- newmax = (freqs[0], kpoint) if freqs[0] > br[1][0] else br[1]
- new_start = br_start + [(newmin, newmax)]
- return update_brd(br_rest, freqs[1:], new_start)
+ br = brd[0] if brd else ((mp.inf, -1), (-mp.inf, -1))
+ br_rest = brd[1:] if brd else []
+ newmin = (freqs[0], kpoint) if freqs[0] < br[0][0] else br[0]
+ newmax = (freqs[0], kpoint) if freqs[0] > br[1][0] else br[1]
+ new_start = br_start + [(newmin, newmax)]
+ return update_brd(br_rest, freqs[1:], new_start)
return update_brd(brd, freqs, [])
def output_band_range_data(self, br_data):
if verbosity.mpb > 0:
+ fmt = "Band {} range: {} at {} to {} at {}"
for tup, band in zip(br_data, range(1, len(br_data) + 1)):
- fmt = "Band {} range: {} at {} to {} at {}"
min_band, max_band = tup
min_freq, min_kpoint = min_band
max_freq, max_kpoint = max_band
@@ -524,24 +517,20 @@ def output_gaps(self, br_data):
def ogaps(br_cur, br_rest, i, gaps):
if not br_rest:
- ordered_gaps = []
gaps = list(reversed(gaps))
- for i in range(0, len(gaps), 3):
- ordered_gaps.append((gaps[i + 2], gaps[i + 1], gaps[i]))
- return ordered_gaps
+ return [(gaps[i + 2], gaps[i + 1], gaps[i]) for i in range(0, len(gaps), 3)]
else:
br_rest_min_f = br_rest[0][0][0]
br_cur_max_f = br_cur[1][0]
if br_cur_max_f >= br_rest_min_f:
return ogaps(br_rest[0], br_rest[1:], i + 1, gaps)
- else:
- gap_size = ((200 * (br_rest_min_f - br_cur_max_f)) /
- (br_rest_min_f + br_cur_max_f))
- if verbosity.mpb > 0:
- fmt = "Gap from band {} ({}) to band {} ({}), {}%"
- print(fmt.format(i, br_cur_max_f, i + 1, br_rest_min_f, gap_size))
- return ogaps(br_rest[0], br_rest[1:], i + 1,
- [gap_size, br_cur_max_f, br_rest_min_f] + gaps)
+ gap_size = ((200 * (br_rest_min_f - br_cur_max_f)) /
+ (br_rest_min_f + br_cur_max_f))
+ if verbosity.mpb > 0:
+ fmt = "Gap from band {} ({}) to band {} ({}), {}%"
+ print(fmt.format(i, br_cur_max_f, i + 1, br_rest_min_f, gap_size))
+ return ogaps(br_rest[0], br_rest[1:], i + 1,
+ [gap_size, br_cur_max_f, br_rest_min_f] + gaps)
if not br_data:
return []
else:
@@ -626,7 +615,7 @@ def output_field_to_file(self, component, fname_prefix):
elif curfield_type in 'DHBnmR':
self._output_scalar_field(curfield_type, fname_prefix)
else:
- raise ValueError("Unkown field type: {}".format(curfield_type))
+ raise ValueError(f"Unkown field type: {curfield_type}")
self.mode_solver.curfield_reset()
@@ -643,7 +632,7 @@ def _output_complex_scalar_field(self, fname_prefix, output_k):
)
fname = self._create_fname(fname, fname_prefix, True)
if verbosity.mpb > 0:
- print("Outputting complex scalar field to {}...".format(fname))
+ print(f"Outputting complex scalar field to {fname}...")
with h5py.File(fname, 'w') as f:
f['description'] = description.encode()
@@ -666,7 +655,7 @@ def _output_vector_field(self, curfield_type, fname_prefix, output_k, component)
fname = "{}.k{:02d}.b{:02d}".format(curfield_type, kpoint_index, curfield_band)
if component >= 0:
- fname += ".{}".format(components[component])
+ fname += f".{components[component]}"
description = "{} field, kpoint {}, band {}, freq={:.6g}".format(
curfield_type,
@@ -677,7 +666,7 @@ def _output_vector_field(self, curfield_type, fname_prefix, output_k, component)
fname = self._create_fname(fname, fname_prefix, True)
if verbosity.mpb > 0:
- print("Outputting fields to {}...".format(fname))
+ print(f"Outputting fields to {fname}...")
with h5py.File(fname, 'w') as f:
f['description'] = description.encode()
@@ -696,9 +685,9 @@ def _output_vector_field(self, curfield_type, fname_prefix, output_k, component)
self.mode_solver.get_curfield_cmplx(field)
component_field = field[c_idx::3].reshape(dims)
- name = "{}.r".format(c)
+ name = f"{c}.r"
f[name] = np.real(component_field)
- name = "{}.i".format(c)
+ name = f"{c}.i"
f[name] = np.imag(component_field)
def _output_scalar_field(self, curfield_type, fname_prefix):
@@ -719,10 +708,10 @@ def _output_scalar_field(self, curfield_type, fname_prefix):
description = descr_fmt.format(curfield_type, kpoint_index, curfield_band,
self.freqs[curfield_band - 1])
- parity_suffix = False if curfield_type in 'mn' else True
+ parity_suffix = curfield_type not in 'mn'
fname = self._create_fname(fname, fname_prefix, parity_suffix)
if verbosity.mpb > 0:
- print("Outputting {}...".format(fname))
+ print(f"Outputting {fname}...")
with h5py.File(fname, 'w') as f:
f['description'] = description.encode()
@@ -735,8 +724,7 @@ def _output_scalar_field(self, curfield_type, fname_prefix):
for c1 in range(3):
for c2 in range(c1, 3):
self.mode_solver.get_epsilon_tensor(c1, c2, 0, inv)
- dataname = "{}.{}{}".format(inv_str, components[c1],
- components[c2])
+ dataname = f"{inv_str}.{components[c1]}{components[c2]}"
self._create_h5_dataset(f, dataname)
if with_hermitian_epsilon() and c1 != c2:
@@ -754,11 +742,7 @@ def _create_h5_dataset(self, h5file, key):
def _create_fname(self, fname, prefix, parity_suffix):
parity_str = self.mode_solver.get_parity_string()
- if parity_suffix and parity_str:
- suffix = ".{}".format(parity_str)
- else:
- suffix = ''
-
+ suffix = f".{parity_str}" if parity_suffix and parity_str else ''
return prefix + fname + suffix + '.h5'
def compute_field_energy(self):
@@ -809,12 +793,12 @@ def randomize_fields(self):
self.mode_solver.randomize_fields()
def display_kpoint_data(self, name, data):
- k_index = self.mode_solver.get_kpoint_index()
if verbosity.mpb > 0:
- print("{}{}:, {}".format(self.parity, name, k_index), end='')
+ k_index = self.mode_solver.get_kpoint_index()
+ print(f"{self.parity}{name}:, {k_index}", end='')
for d in data:
- print(", {}".format(d), end='')
+ print(f", {d}", end='')
print()
def display_eigensolver_stats(self):
@@ -835,15 +819,15 @@ def display_eigensolver_stats(self):
idx2 = ((num_runs + 1) // 2) - 1
median_iters = 0.5 * (sorted_iters[idx1] + sorted_iters[idx2])
if verbosity.mpb > 0:
- print(", median = {}".format(median_iters))
+ print(f", median = {median_iters}")
mean_flops = self.eigensolver_flops / (num_runs * mean_iters)
if verbosity.mpb > 0:
- print("mean flops per iteration = {}".format(mean_flops))
+ print(f"mean flops per iteration = {mean_flops}")
mean_time = self.total_run_time / (mean_iters * num_runs)
if verbosity.mpb > 0:
- print("mean time per iteration = {} s".format(mean_time))
+ print(f"mean time per iteration = {mean_time} s")
def _get_grid_size(self):
grid_size = mp.Vector3(self.resolution[0] * self.geometry_lattice.size.x,
@@ -867,9 +851,7 @@ def next_factor2357(self, n):
def is_factor2357(n):
def divby(n, p):
- if n % p == 0:
- return divby(n // p, p)
- return n
+ return divby(n // p, p) if n % p == 0 else n
return divby(divby(divby(divby(n, 2), 3), 5), 7) == 1
if is_factor2357(n):
@@ -899,7 +881,7 @@ def run_parity(self, p, reset_fields, *band_functions):
if verbosity.mpb > 0:
print("Initializing eigensolver data")
- print("Computing {} bands with {} tolerance".format(self.num_bands, self.tolerance))
+ print(f"Computing {self.num_bands} bands with {self.tolerance} tolerance")
self.init_params(p, reset_fields)
@@ -907,12 +889,12 @@ def run_parity(self, p, reset_fields, *band_functions):
self.load_eigenvectors(reset_fields)
if verbosity.mpb > 0:
- print("{} k-points".format(len(self.k_points)))
+ print(f"{len(self.k_points)} k-points")
for kp in self.k_points:
- print(" {}".format(kp))
+ print(f" {kp}")
- print("elapsed time for initialization: {}".format(time.time() - init_time))
+ print(f"elapsed time for initialization: {time.time() - init_time}")
# TODO: Split over multiple processes
# k_split = list_split(self.k_points, self.k_split_num, self.k_split_index)
@@ -926,7 +908,7 @@ def run_parity(self, p, reset_fields, *band_functions):
self.solve_kpoint(k)
self.iterations = self.mode_solver.get_iterations()
if verbosity.mpb > 0:
- print("elapsed time for k point: {}".format(time.time() - solve_kpoint_time))
+ print(f"elapsed time for k point: {time.time() - solve_kpoint_time}")
self.all_freqs[i, :] = np.array(self.freqs)
self.band_range_data = self.update_band_range_data(self.band_range_data,
self.freqs, k)
@@ -953,7 +935,7 @@ def run_parity(self, p, reset_fields, *band_functions):
end = time.time() - start
if verbosity.mpb > 0:
- print("total elapsed time for run: {}".format(end))
+ print(f"total elapsed time for run: {end}")
self.total_run_time += end
self.eigensolver_flops = self.mode_solver.get_eigensolver_flops()
self.parity = self.mode_solver.get_parity_string()
@@ -1021,13 +1003,10 @@ def find_k(self, p, omega, band_min, band_max, korig_and_kdir, tol,
def rootfun(b):
def _rootfun(k):
- # First, look in the cached table
- tab_val = bktab.get((b, k), None)
- if tab_val:
+ if tab_val := bktab.get((b, k), None):
if verbosity.mpb > 0:
- print("find-k {} at {}: {} (cached)".format(b, k, tab_val[0]))
+ print(f"find-k {b} at {k}: {tab_val[0]} (cached)")
return tab_val
- # Otherwise, compute bands and cache results
else:
self.num_bands = b
self.k_points = [korig + kdir1.scale(k)]
@@ -1035,9 +1014,7 @@ def _rootfun(k):
v = self.mode_solver.compute_group_velocity_component(kdir1)
# Cache computed values
- for _b, _f, _v in zip(range(band_min, b - band_min + 1, 1),
- self.freqs[band_min - 1:],
- v[band_min - 1:]):
+ for _b, _f, _v in zip(range(band_min, b - band_min + 1), self.freqs[band_min - 1:], v[band_min - 1:]):
tabval = bktab.get((_b, k0s[_b - band_min]), None)
if not tabval or abs(_f - omega) < abs(tabval[0]):
@@ -1047,7 +1024,7 @@ def _rootfun(k):
fun = self.freqs[-1] - omega
if verbosity.mpb > 0:
- print("find-k {} at {}: {}".format(b, k, fun))
+ print(f"find-k {b} at {k}: {fun}")
return (fun, v[-1])
return _rootfun
@@ -1096,10 +1073,7 @@ def n(k):
return mp.reciprocal_to_cartesian(k, self.geometry_lattice).norm()
def try_plus(k, v):
- if n(k + v) < n(k):
- return try_plus(k + v, v)
- else:
- return k
+ return try_plus(k + v, v) if n(k + v) < n(k) else k
def _try(k, v):
return try_plus(try_plus(k, v), mp.Vector3() - v)
@@ -1133,10 +1107,7 @@ def compute_symmetry(self, band, W, w):
return self.mode_solver.compute_symmetry(band, W, w)
def compute_symmetries(self, W, w):
- symvals = []
- for band in range(1, self.num_bands+1):
- symvals.append(self.mode_solver.compute_symmetry(band, W, w))
- return symvals
+ return [self.mode_solver.compute_symmetry(band, W, w) for band in range(1, self.num_bands + 1)]
# Predefined output functions (functions of the band index), for passing to `run`
@@ -1235,7 +1206,7 @@ def output_dpwr(ms, which_band):
def output_tot_pwr(ms, which_band):
ms.get_tot_pwr(which_band)
- ms.output_field_to_file(-1, ms.get_filename_prefix() + 'tot.')
+ ms.output_field_to_file(-1, f'{ms.get_filename_prefix()}tot.')
def output_dpwr_in_objects(output_func, min_energy, objects=[]):
@@ -1267,22 +1238,22 @@ def output_charge_density(ms, which_band):
def output_poynting(ms, which_band):
ms.get_poynting(which_band)
- ms.output_field_to_file(-1, ms.get_filename_prefix() + 'flux.')
+ ms.output_field_to_file(-1, f'{ms.get_filename_prefix()}flux.')
def output_poynting_x(ms, which_band):
ms.get_poynting(which_band)
- ms.output_field_to_file(0, ms.get_filename_prefix() + 'flux.')
+ ms.output_field_to_file(0, f'{ms.get_filename_prefix()}flux.')
def output_poynting_y(ms, which_band):
ms.get_poynting(which_band)
- ms.output_field_to_file(1, ms.get_filename_prefix() + 'flux.')
+ ms.output_field_to_file(1, f'{ms.get_filename_prefix()}flux.')
def output_poynting_z(ms, which_band):
ms.get_poynting(which_band)
- ms.output_field_to_file(2, ms.get_filename_prefix() + 'flux.')
+ ms.output_field_to_file(2, f'{ms.get_filename_prefix()}flux.')
def display_yparities(ms):
diff --git a/python/source.py b/python/source.py
index b50a30acb..765d79d42 100644
--- a/python/source.py
+++ b/python/source.py
@@ -8,7 +8,7 @@ def check_positive(prop, val):
if val > 0:
return val
else:
- raise ValueError("{} must be positive. Got {}".format(prop, val))
+ raise ValueError(f"{prop} must be positive. Got {val}")
class Source(object):
@@ -171,7 +171,8 @@ def __init__(self, frequency=None, start_time=0, end_time=1.0e20, width=0,
"""
if frequency is None and wavelength is None:
- raise ValueError("Must set either frequency or wavelength in {}.".format(self.__class__.__name__))
+ raise ValueError(f"Must set either frequency or wavelength in {self.__class__.__name__}.")
+
super(ContinuousSource, self).__init__(is_integrated=is_integrated, **kwargs)
self.frequency = 1 / wavelength if wavelength else float(frequency)
@@ -238,7 +239,8 @@ def __init__(self, frequency=None, width=0, fwidth=float('inf'), start_time=0, c
`amplitude` or `amp_func` factor that you specified for the source.
"""
if frequency is None and wavelength is None:
- raise ValueError("Must set either frequency or wavelength in {}.".format(self.__class__.__name__))
+ raise ValueError(f"Must set either frequency or wavelength in {self.__class__.__name__}.")
+
super(GaussianSource, self).__init__(is_integrated=is_integrated, **kwargs)
self.frequency = 1 / wavelength if wavelength else float(frequency)
@@ -478,10 +480,7 @@ def eig_lattice_size(self):
@eig_lattice_size.setter
def eig_lattice_size(self, val):
- if val is None:
- self._eig_lattice_size = self.size
- else:
- self._eig_lattice_size = val
+ self._eig_lattice_size = self.size if val is None else val
@property
def eig_lattice_center(self):
@@ -489,10 +488,7 @@ def eig_lattice_center(self):
@eig_lattice_center.setter
def eig_lattice_center(self, val):
- if val is None:
- self._eig_lattice_center = self.center
- else:
- self._eig_lattice_center = val
+ self._eig_lattice_center = self.center if val is None else val
@property
def component(self):
diff --git a/python/tests/test_adjoint_cyl.py b/python/tests/test_adjoint_cyl.py
index ab6a3307d..2a59ae128 100644
--- a/python/tests/test_adjoint_cyl.py
+++ b/python/tests/test_adjoint_cyl.py
@@ -131,7 +131,8 @@ def test_adjoint_solver_cyl_n2f_fields(self):
S12_unperturbed = forward_simulation(p)
## compare objective results
- print("|Er|^2 -- adjoint solver: {}, traditional simulation: {}".format(adjsol_obj,S12_unperturbed))
+ print(f"|Er|^2 -- adjoint solver: {adjsol_obj}, traditional simulation: {S12_unperturbed}")
+
self.assertClose(adjsol_obj,S12_unperturbed,epsilon=1e-3)
## compute perturbed S12
@@ -142,7 +143,7 @@ def test_adjoint_solver_cyl_n2f_fields(self):
adjsol_grad = np.expand_dims(adjsol_grad,axis=1)
adj_scale = (dp[None,:]@adjsol_grad).flatten()
fd_grad = S12_perturbed-S12_unperturbed
- print("Directional derivative -- adjoint solver: {}, FD: {}".format(adj_scale,fd_grad))
+ print(f"Directional derivative -- adjoint solver: {adj_scale}, FD: {fd_grad}")
tol = 0.2 if mp.is_single_precision() else 0.1
self.assertClose(adj_scale,fd_grad,epsilon=tol)
diff --git a/python/tests/test_adjoint_jax.py b/python/tests/test_adjoint_jax.py
index 6513369a1..051209576 100644
--- a/python/tests/test_adjoint_jax.py
+++ b/python/tests/test_adjoint_jax.py
@@ -205,13 +205,8 @@ def loss_fn(x, excite_port_idx=0):
)
monitor_values = wrapped_meep([x])
s1p, s1m, s2m, s2p = monitor_values
- if excite_port_idx == 0:
- t = s2m / s1p
- else:
- t = s1m / s2p
- # Mean transmission vs wavelength
- t_mean = jnp.mean(jnp.square(jnp.abs(t)))
- return t_mean
+ t = s2m / s1p if excite_port_idx == 0 else s1m / s2p
+ return jnp.mean(jnp.square(jnp.abs(t)))
value, adjoint_grad = jax.value_and_grad(loss_fn)(
x, excite_port_idx=excite_port_idx)
diff --git a/python/tests/test_adjoint_solver.py b/python/tests/test_adjoint_solver.py
index f7db4d152..f9d8a9780 100644
--- a/python/tests/test_adjoint_solver.py
+++ b/python/tests/test_adjoint_solver.py
@@ -272,7 +272,8 @@ def test_DFT_fields(self):
unperturbed_grad = np.expand_dims(unperturbed_grad,axis=1)
adj_dd = (self.dp[None,:]@unperturbed_grad).flatten()
fnd_dd = perturbed_val-unperturbed_val
- print("directional derivative:, {} (adjoint solver), {} (finite difference)".format(adj_dd,fnd_dd))
+ print(f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)")
+
tol = 0.07 if mp.is_single_precision() else 0.006
self.assertClose(adj_dd,fnd_dd,epsilon=tol)
@@ -298,7 +299,8 @@ def test_eigenmode(self):
unperturbed_grad = np.expand_dims(unperturbed_grad,axis=1)
adj_dd = (self.dp[None,:]@unperturbed_grad).flatten()
fnd_dd = perturbed_val-unperturbed_val
- print("directional derivative:, {} (adjoint solver), {} (finite difference)".format(adj_dd,fnd_dd))
+ print(f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)")
+
tol = 0.04 if mp.is_single_precision() else 0.01
self.assertClose(adj_dd,fnd_dd,epsilon=tol)
@@ -324,7 +326,8 @@ def test_ldos(self):
unperturbed_grad = np.expand_dims(unperturbed_grad,axis=1)
adj_dd = (self.dp[None,:]@unperturbed_grad).flatten()
fnd_dd = perturbed_val-unperturbed_val
- print("directional derivative:, {} (adjoint solver), {} (finite difference)".format(adj_dd,fnd_dd))
+ print(f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)")
+
tol = 0.07 if mp.is_single_precision() else 0.006
self.assertClose(adj_dd,fnd_dd,epsilon=tol)
@@ -332,12 +335,12 @@ def test_ldos(self):
def test_gradient_backpropagation(self):
print("*** TESTING GRADIENT BACKPROPAGATION ***")
- for frequencies in [[self.fcen], [1/1.58, self.fcen, 1/1.53]]:
- # filter/thresholding parameters
- filter_radius = 0.21985
- eta = 0.49093
- beta = 4.0698
+ # filter/thresholding parameters
+ filter_radius = 0.21985
+ eta = 0.49093
+ beta = 4.0698
+ for frequencies in [[self.fcen], [1/1.58, self.fcen, 1/1.53]]:
mapped_p = self.mapping(self.p,filter_radius,eta,beta)
# compute objective value and its gradient for unperturbed design
@@ -372,7 +375,8 @@ def test_gradient_backpropagation(self):
unperturbed_grad_backprop = np.expand_dims(unperturbed_grad_backprop,axis=1)
adj_dd = (self.dp[None,:]@unperturbed_grad_backprop).flatten()
fnd_dd = perturbed_val-unperturbed_val
- print("directional derivative:, {} (adjoint solver), {} (finite difference)".format(adj_dd,fnd_dd))
+ print(f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)")
+
tol = 0.025 if mp.is_single_precision() else 0.01
self.assertClose(adj_dd,fnd_dd,epsilon=tol)
@@ -395,7 +399,8 @@ def test_complex_fields(self):
unperturbed_grad = np.expand_dims(unperturbed_grad,axis=1)
adj_dd = (self.dp[None,:]@unperturbed_grad).flatten()
fnd_dd = perturbed_val-unperturbed_val
- print("directional derivative:, {} (adjoint solver), {} (finite difference)".format(adj_dd,fnd_dd))
+ print(f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)")
+
tol = 0.06 if mp.is_single_precision() else 0.01
self.assertClose(adj_dd,fnd_dd,epsilon=tol)
@@ -418,7 +423,8 @@ def test_damping(self):
unperturbed_grad = np.expand_dims(unperturbed_grad,axis=1)
adj_dd = (self.dp[None,:]@unperturbed_grad).flatten()
fnd_dd = perturbed_val-unperturbed_val
- print("directional derivative:, {} (adjoint solver), {} (finite difference)".format(adj_dd,fnd_dd))
+ print(f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)")
+
tol = 0.06 if mp.is_single_precision() else 0.04
self.assertClose(adj_dd,fnd_dd,epsilon=tol)
@@ -460,7 +466,8 @@ def test_offdiagonal(self):
unperturbed_grad_backprop = np.expand_dims(unperturbed_grad_backprop,axis=1)
adj_dd = (self.dp[None,:]@unperturbed_grad_backprop).flatten()
fnd_dd = perturbed_val-unperturbed_val
- print("directional derivative:, {} (adjoint solver), {} (finite difference)".format(adj_dd,fnd_dd))
+ print(f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)")
+
tol = 0.1 if mp.is_single_precision() else 0.04
self.assertClose(adj_dd,fnd_dd,epsilon=tol)
diff --git a/python/tests/test_antenna_radiation.py b/python/tests/test_antenna_radiation.py
index 35a8958d8..44dade129 100644
--- a/python/tests/test_antenna_radiation.py
+++ b/python/tests/test_antenna_radiation.py
@@ -33,9 +33,7 @@ def radial_flux(self,sim,nearfield_box,r):
Px = np.real(E[:,1]*H[:,2]-E[:,2]*H[:,1]) # Ey*Hz-Ez*Hy
Py = np.real(E[:,2]*H[:,0]-E[:,0]*H[:,2]) # Ez*Hx-Ex*Hz
- Pr = np.sqrt(np.square(Px)+np.square(Py))
-
- return Pr
+ return np.sqrt(np.square(Px)+np.square(Py))
def free_space_radiation(self):
@@ -83,9 +81,7 @@ def free_space_radiation(self):
sim.run(until_after_sources=mp.stop_when_dft_decayed())
- Pr = self.radial_flux(sim,nearfield_box,self.r)
-
- return Pr
+ return self.radial_flux(sim,nearfield_box,self.r)
def pec_ground_plane_radiation(self):
@@ -143,9 +139,7 @@ def pec_ground_plane_radiation(self):
sim.run(until_after_sources=mp.stop_when_dft_decayed())
- Pr = self.radial_flux(sim,nearfield_box,self.r)
-
- return Pr
+ return self.radial_flux(sim,nearfield_box,self.r)
def test_pec_ground_plane(self):
diff --git a/python/tests/test_bend_flux.py b/python/tests/test_bend_flux.py
index 5f3eb3371..a8d4f4b08 100644
--- a/python/tests/test_bend_flux.py
+++ b/python/tests/test_bend_flux.py
@@ -29,18 +29,17 @@ def init(self, no_bend=False, gdsii=False):
mp.Vector3(-0.5 * sx - 5, wvg_ycen + 0.5 * w)]
geometry = [mp.Prism(no_bend_vertices, height, material=mp.Medium(epsilon=12))]
+ elif gdsii:
+ geometry = mp.get_GDSII_prisms(mp.Medium(epsilon=12), gdsii_file, 2, 0, height)
else:
- if gdsii:
- geometry = mp.get_GDSII_prisms(mp.Medium(epsilon=12), gdsii_file, 2, 0, height)
- else:
- bend_vertices = [mp.Vector3(-0.5 * sx, wvg_ycen - 0.5 * w),
- mp.Vector3(wvg_xcen + 0.5 * w, wvg_ycen - 0.5 * w),
- mp.Vector3(wvg_xcen + 0.5 * w, 0.5 * sy),
- mp.Vector3(wvg_xcen - 0.5 * w, 0.5 * sy),
- mp.Vector3(wvg_xcen - 0.5 * w, wvg_ycen + 0.5 * w),
- mp.Vector3(-0.5 * sx, wvg_ycen + 0.5 * w)]
-
- geometry = [mp.Prism(bend_vertices, height, material=mp.Medium(epsilon=12))]
+ bend_vertices = [mp.Vector3(-0.5 * sx, wvg_ycen - 0.5 * w),
+ mp.Vector3(wvg_xcen + 0.5 * w, wvg_ycen - 0.5 * w),
+ mp.Vector3(wvg_xcen + 0.5 * w, 0.5 * sy),
+ mp.Vector3(wvg_xcen - 0.5 * w, 0.5 * sy),
+ mp.Vector3(wvg_xcen - 0.5 * w, wvg_ycen + 0.5 * w),
+ mp.Vector3(-0.5 * sx, wvg_ycen + 0.5 * w)]
+
+ geometry = [mp.Prism(bend_vertices, height, material=mp.Medium(epsilon=12))]
fcen = 0.15
df = 0.1
diff --git a/python/tests/test_cavity_arrayslice.py b/python/tests/test_cavity_arrayslice.py
index 42f758b6f..a46d1db5c 100644
--- a/python/tests/test_cavity_arrayslice.py
+++ b/python/tests/test_cavity_arrayslice.py
@@ -27,11 +27,8 @@ def setUp(self):
geometry = [blk]
- for i in range(3):
- geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)))
-
- for i in range(3):
- geometry.append(mp.Cylinder(r, center=mp.Vector3(d / -2 - i)))
+ geometry.extend(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)) for i in range(3))
+ geometry.extend(mp.Cylinder(r, center=mp.Vector3(d / -2 - i)) for i in range(3))
sources = [mp.Source(mp.GaussianSource(0.25, fwidth=0.2), mp.Hz, mp.Vector3())]
diff --git a/python/tests/test_chunk_balancer.py b/python/tests/test_chunk_balancer.py
index 36a85f40c..00b0deebc 100644
--- a/python/tests/test_chunk_balancer.py
+++ b/python/tests/test_chunk_balancer.py
@@ -30,11 +30,8 @@ def __init__(self, *args, **kwargs):
def _structure_get_chunk_owners(self):
# Hacky workaround to make this test work on single-core systems
- proc_ids = []
- for leaf in bpu.enumerate_leaf_nodes(self.chunk_layout):
- # it seems that grid volumes are enumerated
- # in the same order as enumerate_leaf_nodes()
- proc_ids.append(leaf.proc_id)
+ proc_ids = [leaf.proc_id for leaf in bpu.enumerate_leaf_nodes(self.chunk_layout)]
+
return np.array(proc_ids)
def init_sim(self):
diff --git a/python/tests/test_conductivity.py b/python/tests/test_conductivity.py
index 2aa9a7616..9441db99a 100644
--- a/python/tests/test_conductivity.py
+++ b/python/tests/test_conductivity.py
@@ -75,7 +75,8 @@ def test_conductivity(self):
# compute the incident flux for a lossless waveguide
incident_flux1, incident_flux2 = self.wvg_flux(res, 0.)
self.assertAlmostEqual(incident_flux1/incident_flux2, 1., places=2)
- print("incident_flux:, {} (measured), 1.0 (expected)".format(incident_flux2/incident_flux1))
+ print(f"incident_flux:, {incident_flux2 / incident_flux1} (measured), 1.0 (expected)")
+
# compute the flux for a lossy waveguide
att_coeff = 37.46 # dB/cm
diff --git a/python/tests/test_cyl_ellipsoid.py b/python/tests/test_cyl_ellipsoid.py
index 330cfb8da..8ea760d6c 100644
--- a/python/tests/test_cyl_ellipsoid.py
+++ b/python/tests/test_cyl_ellipsoid.py
@@ -44,7 +44,7 @@ def init(self):
def print_stuff(sim_obj):
v = mp.Vector3(4.13, 3.75, 0)
p = self.sim.get_field_point(self.src_cmpt, v)
- print("t, Ez: {} {}+{}i".format(self.sim.round_time(), p.real, p.imag))
+ print(f"t, Ez: {self.sim.round_time()} {p.real}+{p.imag}i")
self.print_stuff = print_stuff
def run_simulation(self):
diff --git a/python/tests/test_dft_fields.py b/python/tests/test_dft_fields.py
index 3b190adbe..96b557c65 100644
--- a/python/tests/test_dft_fields.py
+++ b/python/tests/test_dft_fields.py
@@ -26,10 +26,8 @@ def init(self):
cell = mp.Vector3(self.sxy, self.sxy)
pml_layers = [mp.PML(self.dpml)]
- geometry = [
- mp.Cylinder(r + w, material=mp.Medium(epsilon=n * n)),
- mp.Cylinder(r, material=mp.vacuum),
- ]
+ geometry = [mp.Cylinder(r + w, material=mp.Medium(epsilon=n**2)), mp.Cylinder(r, material=mp.vacuum)]
+
self.fcen = 0.118
self.df = 0.1
diff --git a/python/tests/test_dispersive_eigenmode.py b/python/tests/test_dispersive_eigenmode.py
index 5fce1d96d..db9820ca0 100644
--- a/python/tests/test_dispersive_eigenmode.py
+++ b/python/tests/test_dispersive_eigenmode.py
@@ -66,8 +66,8 @@ def verify_output_and_slice(self,material,frequency):
self.assertAlmostEqual(n,n_slice, places=4)
# Check to make sure h5 output is working with frequency
- filename = os.path.join(self.temp_dir,
- sim.get_filename_prefix() + '-eps-000000.00.h5')
+ filename = os.path.join(self.temp_dir, f'{sim.get_filename_prefix()}-eps-000000.00.h5')
+
mp.output_epsilon(sim,frequency=frequency)
n_h5 = 0
mp.all_wait()
diff --git a/python/tests/test_divide_mpi_processes.py b/python/tests/test_divide_mpi_processes.py
index 574f0e834..7a46ab8e8 100644
--- a/python/tests/test_divide_mpi_processes.py
+++ b/python/tests/test_divide_mpi_processes.py
@@ -19,7 +19,7 @@ def test_divide_parallel_processes(self):
sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),
center=mp.Vector3(),
component=mp.Ez)]
-
+
symmetries = [mp.Mirror(mp.X),
mp.Mirror(mp.Y)]
@@ -29,7 +29,7 @@ def test_divide_parallel_processes(self):
symmetries=symmetries,
boundary_layers=pml_layers)
-
+
flux_box = self.sim.add_flux(fcen, 0, 1,
mp.FluxRegion(mp.Vector3(y=0.5*sxy), size=mp.Vector3(sxy)),
mp.FluxRegion(mp.Vector3(y=-0.5*sxy), size=mp.Vector3(sxy), weight=-1),
@@ -40,7 +40,7 @@ def test_divide_parallel_processes(self):
self.sim.run(until_after_sources=30)
tot_flux = mp.get_fluxes(flux_box)[0]
-
+
tot_fluxes = mp.merge_subgroup_data(tot_flux)
fcens = mp.merge_subgroup_data(fcen)
diff --git a/python/tests/test_dump_load.py b/python/tests/test_dump_load.py
index 744e0c4de..223c98ea6 100644
--- a/python/tests/test_dump_load.py
+++ b/python/tests/test_dump_load.py
@@ -21,12 +21,12 @@ class TestLoadDump(ApproxComparisonTestCase):
fname = fname_base + '-ez-000200.00.h5'
def setUp(self):
- print("Running {}".format(self._testMethodName))
+ print(f"Running {self._testMethodName}")
@classmethod
def setUpClass(cls):
cls.temp_dir = mp.make_output_directory()
- print("Saving temp files to dir: {}".format(cls.temp_dir))
+ print(f"Saving temp files to dir: {cls.temp_dir}")
@classmethod
def tearDownClass(cls):
diff --git a/python/tests/test_fragment_stats.py b/python/tests/test_fragment_stats.py
index 61055ab22..497744820 100644
--- a/python/tests/test_fragment_stats.py
+++ b/python/tests/test_fragment_stats.py
@@ -3,16 +3,7 @@
def make_dft_vecs(flx_reg=None, n2f_reg=None, frc_reg=None, fldc=None, flds=None, fldw=None, fld_cmp=None):
- dft_vecs = {
- 'flux_regions': flx_reg,
- 'n2f_regions': n2f_reg,
- 'force_regions': frc_reg,
- 'fields_center': fldc,
- 'fields_size': flds,
- 'fields_where': fldw,
- 'fields_components': fld_cmp
- }
- return dft_vecs
+ return {'flux_regions': flx_reg, 'n2f_regions': n2f_reg, 'force_regions': frc_reg, 'fields_center': fldc, 'fields_size': flds, 'fields_where': fldw, 'fields_components': fld_cmp}
def make_sim(cell, res, pml, dims, create_gv=True, k_point=False):
@@ -62,9 +53,7 @@ def get_fragment_stats(self, block_size, cell_size, dims, box_center=mp.Vector3(
center=dft_vecs['fields_center'], size=dft_vecs['fields_size'])
gv = sim._create_grid_volume(False)
- stats = sim._compute_fragment_stats(gv)
-
- return stats
+ return sim._compute_fragment_stats(gv)
def _test_1d(self, sym, pml=[]):
# A z=30 cell, with a size 10 block in the middle.
diff --git a/python/tests/test_gaussianbeam.py b/python/tests/test_gaussianbeam.py
index 862543e7e..acad564e1 100644
--- a/python/tests/test_gaussianbeam.py
+++ b/python/tests/test_gaussianbeam.py
@@ -49,7 +49,8 @@ def gaussian_beam(self, rot_angle):
Ez_beam_x0 = Ez_cell[np.squeeze(idx_x)[0],np.squeeze(idx_y)[0]]
frac = np.abs(Ez_beam_x0)**2 / np.amax(np.abs(Ez_cell)**2)
- print("ratio of the Gaussian beam energy at the focus over the maximum beam energy for the entire cell: {}".format(frac))
+ print(f"ratio of the Gaussian beam energy at the focus over the maximum beam energy for the entire cell: {frac}")
+
self.assertGreater(frac, 0.99)
diff --git a/python/tests/test_get_epsilon_grid.py b/python/tests/test_get_epsilon_grid.py
index 4e4d80822..b5b98191f 100644
--- a/python/tests/test_get_epsilon_grid.py
+++ b/python/tests/test_get_epsilon_grid.py
@@ -68,7 +68,7 @@ def test_get_epsilon_grid(self, pt, freq):
np.array([0]),
freq)
eps_pt = self.sim.get_epsilon_point(pt, freq)
- print("eps:, ({},{}), {}, {}".format(pt.x,pt.y,eps_grid,eps_pt))
+ print(f"eps:, ({pt.x},{pt.y}), {eps_grid}, {eps_pt}")
self.assertAlmostEqual(np.real(eps_grid), np.real(eps_pt), places=6)
self.assertAlmostEqual(np.imag(eps_grid), np.imag(eps_pt), places=6)
diff --git a/python/tests/test_holey_wvg_bands.py b/python/tests/test_holey_wvg_bands.py
index 1e51bef6b..648c0c392 100644
--- a/python/tests/test_holey_wvg_bands.py
+++ b/python/tests/test_holey_wvg_bands.py
@@ -39,7 +39,7 @@ def test_run_k_points(self):
(0.19335527231544278, 4.6649450258959025e-4)
]
- self.assertTrue(any(l for l in all_freqs))
+ self.assertTrue(any(all_freqs))
for (r, i), f in zip(expected, all_freqs[17:21][0]):
self.assertAlmostEqual(r, f.real)
self.assertAlmostEqual(i, f.imag)
diff --git a/python/tests/test_holey_wvg_cavity.py b/python/tests/test_holey_wvg_cavity.py
index a66998d28..4227074c6 100644
--- a/python/tests/test_holey_wvg_cavity.py
+++ b/python/tests/test_holey_wvg_cavity.py
@@ -26,9 +26,7 @@ def setUp(self):
geometry = [blk]
- for i in range(3):
- geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)))
-
+ geometry.extend(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)) for i in range(3))
for i in range(3):
geometry.append(mp.Cylinder(r, center=mp.Vector3(d / -2 - i)))
diff --git a/python/tests/test_kdom.py b/python/tests/test_kdom.py
index 0711831c1..f61618c3f 100644
--- a/python/tests/test_kdom.py
+++ b/python/tests/test_kdom.py
@@ -40,7 +40,7 @@ def run_kdom(self, theta, num_band):
EigenmodeData = sim.get_eigenmode(fcen, mp.X, mp.Volume(center=mp.Vector3(0.3*sx,0,0), size=mp.Vector3(0,sy,0)),
num_band, k, parity=eig_parity)
kdom = EigenmodeData.kdom
-
+
self.assertAlmostEqual(k.y,kdom.y,places=15)
def test_kdom(self):
diff --git a/python/tests/test_material_grid.py b/python/tests/test_material_grid.py
index c50d0dff2..7ffa3e54c 100644
--- a/python/tests/test_material_grid.py
+++ b/python/tests/test_material_grid.py
@@ -9,133 +9,129 @@
def compute_transmittance(matgrid_symmetry=False):
- resolution = 25
+ resolution = 25
- cell_size = mp.Vector3(6,6,0)
+ cell_size = mp.Vector3(6,6,0)
- boundary_layers = [mp.PML(thickness=1.0)]
+ boundary_layers = [mp.PML(thickness=1.0)]
- matgrid_size = mp.Vector3(2,2,0)
- matgrid_resolution = 2*resolution
+ matgrid_size = mp.Vector3(2,2,0)
+ matgrid_resolution = 2*resolution
- Nx, Ny = int(matgrid_size.x*matgrid_resolution), int(matgrid_size.y*matgrid_resolution)
+ Nx, Ny = int(matgrid_size.x*matgrid_resolution), int(matgrid_size.y*matgrid_resolution)
- # ensure reproducible results
- rng = np.random.RandomState(2069588)
+ # ensure reproducible results
+ rng = np.random.RandomState(2069588)
- w = rng.rand(Nx,Ny)
- weights = 0.5 * (w + np.fliplr(w)) if not matgrid_symmetry else w
+ w = rng.rand(Nx,Ny)
+ weights = w if matgrid_symmetry else 0.5 * (w + np.fliplr(w))
- matgrid = mp.MaterialGrid(mp.Vector3(Nx,Ny),
- mp.air,
- mp.Medium(index=3.5),
- weights=weights,
- do_averaging=False,
- grid_type='U_MEAN')
+ matgrid = mp.MaterialGrid(mp.Vector3(Nx,Ny),
+ mp.air,
+ mp.Medium(index=3.5),
+ weights=weights,
+ do_averaging=False,
+ grid_type='U_MEAN')
- geometry = [mp.Block(center=mp.Vector3(),
- size=mp.Vector3(mp.inf,1.0,mp.inf),
- material=mp.Medium(index=3.5)),
- mp.Block(center=mp.Vector3(),
- size=mp.Vector3(matgrid_size.x,matgrid_size.y,0),
- material=matgrid)]
+ geometry = [mp.Block(center=mp.Vector3(),
+ size=mp.Vector3(mp.inf,1.0,mp.inf),
+ material=mp.Medium(index=3.5)),
+ mp.Block(center=mp.Vector3(),
+ size=mp.Vector3(matgrid_size.x,matgrid_size.y,0),
+ material=matgrid)]
- if matgrid_symmetry:
- geometry.append(mp.Block(center=mp.Vector3(),
- size=mp.Vector3(matgrid_size.x,matgrid_size.y,0),
- material=matgrid,
- e2=mp.Vector3(y=-1)))
+ if matgrid_symmetry:
+ geometry.append(mp.Block(center=mp.Vector3(),
+ size=mp.Vector3(matgrid_size.x,matgrid_size.y,0),
+ material=matgrid,
+ e2=mp.Vector3(y=-1)))
- eig_parity = mp.ODD_Y + mp.EVEN_Z
+ eig_parity = mp.ODD_Y + mp.EVEN_Z
- fcen = 0.65
- df = 0.2*fcen
- sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen,fwidth=df),
- center=mp.Vector3(-2.0,0),
- size=mp.Vector3(0,4.0),
- eig_parity=eig_parity)]
+ fcen = 0.65
+ df = 0.2*fcen
+ sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen,fwidth=df),
+ center=mp.Vector3(-2.0,0),
+ size=mp.Vector3(0,4.0),
+ eig_parity=eig_parity)]
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=boundary_layers,
- sources=sources,
- geometry=geometry)
+ sim = mp.Simulation(resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=boundary_layers,
+ sources=sources,
+ geometry=geometry)
- mode_mon = sim.add_flux(fcen,
- 0,
- 1,
- mp.FluxRegion(center=mp.Vector3(2.0,0),
- size=mp.Vector3(0,4.0)))
+ mode_mon = sim.add_flux(fcen,
+ 0,
+ 1,
+ mp.FluxRegion(center=mp.Vector3(2.0,0),
+ size=mp.Vector3(0,4.0)))
- sim.run(until_after_sources=mp.stop_when_dft_decayed())
+ sim.run(until_after_sources=mp.stop_when_dft_decayed())
- mode_coeff = sim.get_eigenmode_coefficients(mode_mon,[1],eig_parity).alpha[0,:,0][0]
+ mode_coeff = sim.get_eigenmode_coefficients(mode_mon,[1],eig_parity).alpha[0,:,0][0]
- tran = np.power(np.abs(mode_coeff),2)
- print('tran:, {}, {}'.format("sym" if matgrid_symmetry else "nosym", tran))
+ tran = np.power(np.abs(mode_coeff),2)
+ print(f'tran:, {"sym" if matgrid_symmetry else "nosym"}, {tran}')
- return tran
+ return tran
def compute_resonant_mode_2d(res,default_mat=False):
- cell_size = mp.Vector3(1,1,0)
+ cell_size = mp.Vector3(1,1,0)
- rad = 0.301943
+ rad = 0.301943
- fcen = 0.3
- df = 0.2*fcen
- sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
- component=mp.Hz,
- center=mp.Vector3(-0.1057,0.2094,0))]
+ fcen = 0.3
+ df = 0.2*fcen
+ sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
+ component=mp.Hz,
+ center=mp.Vector3(-0.1057,0.2094,0))]
- k_point = mp.Vector3(0.3892,0.1597,0)
+ k_point = mp.Vector3(0.3892,0.1597,0)
- matgrid_size = mp.Vector3(1,1,0)
- matgrid_resolution = 1200
+ matgrid_size = mp.Vector3(1,1,0)
+ matgrid_resolution = 1200
- # for a fixed resolution, compute the number of grid points
- # necessary which are defined on the corners of the voxels
- Nx, Ny = int(matgrid_size.x*matgrid_resolution), int(matgrid_size.y*matgrid_resolution)
+ # for a fixed resolution, compute the number of grid points
+ # necessary which are defined on the corners of the voxels
+ Nx, Ny = int(matgrid_size.x*matgrid_resolution), int(matgrid_size.y*matgrid_resolution)
- x = np.linspace(-0.5*matgrid_size.x,0.5*matgrid_size.x,Nx)
- y = np.linspace(-0.5*matgrid_size.y,0.5*matgrid_size.y,Ny)
- xv, yv = np.meshgrid(x,y)
- weights = np.sqrt(np.square(xv) + np.square(yv)) < rad
- filtered_weights = gaussian_filter(weights,
- sigma=3.0,
- output=np.double)
+ x = np.linspace(-0.5*matgrid_size.x,0.5*matgrid_size.x,Nx)
+ y = np.linspace(-0.5*matgrid_size.y,0.5*matgrid_size.y,Ny)
+ xv, yv = np.meshgrid(x,y)
+ weights = np.sqrt(np.square(xv) + np.square(yv)) < rad
+ filtered_weights = gaussian_filter(weights,
+ sigma=3.0,
+ output=np.double)
- matgrid = mp.MaterialGrid(mp.Vector3(Nx,Ny),
- mp.air,
- mp.Medium(index=3.5),
- weights=filtered_weights,
- do_averaging=True,
- beta=1000,
- eta=0.5)
+ matgrid = mp.MaterialGrid(mp.Vector3(Nx,Ny),
+ mp.air,
+ mp.Medium(index=3.5),
+ weights=filtered_weights,
+ do_averaging=True,
+ beta=1000,
+ eta=0.5)
- geometry = [mp.Block(center=mp.Vector3(),
- size=mp.Vector3(matgrid_size.x,matgrid_size.y,0),
- material=matgrid)]
+ geometry = [mp.Block(center=mp.Vector3(),
+ size=mp.Vector3(matgrid_size.x,matgrid_size.y,0),
+ material=matgrid)]
- sim = mp.Simulation(resolution=res,
- cell_size=cell_size,
- default_material=matgrid if default_mat else mp.Medium(),
- geometry=geometry if not default_mat else [],
- sources=sources,
- k_point=k_point)
+ sim = mp.Simulation(resolution=res, cell_size=cell_size, default_material=matgrid if default_mat else mp.Medium(), geometry=[] if default_mat else geometry, sources=sources, k_point=k_point)
- h = mp.Harminv(mp.Hz, mp.Vector3(0.3718,-0.2076), fcen, df)
- sim.run(mp.after_sources(h),
- until_after_sources=200)
- try:
- for m in h.modes:
- print("harminv:, {}, {}, {}".format(res,m.freq,m.Q))
- freq = h.modes[0].freq
- except:
- raise RuntimeError("No resonant modes found.")
+ h = mp.Harminv(mp.Hz, mp.Vector3(0.3718,-0.2076), fcen, df)
+ sim.run(mp.after_sources(h),
+ until_after_sources=200)
+
+ try:
+ for m in h.modes:
+ print(f"harminv:, {res}, {m.freq}, {m.Q}")
+ freq = h.modes[0].freq
+ except:
+ raise RuntimeError("No resonant modes found.")
- return freq
+ return freq
def compute_resonant_mode_3d(use_matgrid=True):
@@ -203,7 +199,7 @@ def compute_resonant_mode_3d(use_matgrid=True):
try:
for m in h.modes:
- print("harminv:, {}, {}, {}".format(resolution,m.freq,m.Q))
+ print(f"harminv:, {resolution}, {m.freq}, {m.Q}")
freq = h.modes[0].freq
except:
raise RuntimeError("No resonant modes found.")
diff --git a/python/tests/test_mode_coeffs.py b/python/tests/test_mode_coeffs.py
index 076b6e530..8e42a73ee 100644
--- a/python/tests/test_mode_coeffs.py
+++ b/python/tests/test_mode_coeffs.py
@@ -95,7 +95,7 @@ def run_mode_coeffs(self, mode_num, kpoint_func, nf=1, resolution=15):
self.sim = sim
# test 1: coefficient of excited mode >> coeffs of all other modes
- self.assertTrue(TestPassed, msg="cfrel: {}, cbrel: {}".format(cfrel, cbrel))
+ self.assertTrue(TestPassed, msg=f"cfrel: {cfrel}, cbrel: {cbrel}")
# test 2: |mode coeff|^2 = power
self.assertAlmostEqual(mode_power / abs(c0**2), 1.0, places=1)
@@ -182,8 +182,8 @@ def test_reciprocity_kpoint(self):
direction=mp.NO_DIRECTION,
kpoint_func=lambda f,n: mp.Vector3(-1,0,0))
- print("S11:, {}, {}".format(res_fwd.alpha[0,0,1],res_bwd.alpha[0,0,0]))
- print("S21:, {}, {}".format(res_fwd.alpha[0,0,0],res_bwd.alpha[0,0,1]))
+ print(f"S11:, {res_fwd.alpha[0,0,1]}, {res_bwd.alpha[0,0,0]}")
+ print(f"S21:, {res_fwd.alpha[0,0,0]}, {res_bwd.alpha[0,0,1]}")
# |S11|^2
self.assertAlmostEqual(abs(res_fwd.alpha[0,0,1])**2, abs(res_bwd.alpha[0,0,0])**2, places=4)
@@ -235,8 +235,8 @@ def test_reciprocity_monitor(self):
[1],
eig_parity=mp.EVEN_Y+mp.ODD_Z)
- print("S11:, {}".format(res_fwd.alpha[0,0,1]))
- print("S21:, {}".format(res_fwd.alpha[0,0,0]))
+ print(f"S11:, {res_fwd.alpha[0,0,1]}")
+ print(f"S21:, {res_fwd.alpha[0,0,0]}")
sim.reset_meep()
@@ -267,8 +267,8 @@ def test_reciprocity_monitor(self):
[1],
eig_parity=mp.EVEN_Y+mp.ODD_Z)
- print("S12:, {}".format(res_bwd.alpha[0,0,1]))
- print("S22:, {}".format(res_bwd.alpha[0,0,0]))
+ print(f"S12:, {res_bwd.alpha[0,0,1]}")
+ print(f"S22:, {res_bwd.alpha[0,0,0]}")
# |S21|^2 = |S12|^2
self.assertAlmostEqual(abs(res_fwd.alpha[0,0,0])**2 / abs(res_bwd.alpha[0,0,1])**2, 1.00, places=2)
diff --git a/python/tests/test_mpb.py b/python/tests/test_mpb.py
index e3242cfff..0ddb79fcf 100644
--- a/python/tests/test_mpb.py
+++ b/python/tests/test_mpb.py
@@ -167,10 +167,7 @@ def test_list_split(self):
def test_first_brillouin_zone(self):
ms = self.init_solver()
- res = []
- for k in ms.k_points:
- res.append(ms.first_brillouin_zone(k))
-
+ res = [ms.first_brillouin_zone(k) for k in ms.k_points]
expected = [
mp.Vector3(0.0, 0.0, 0.0),
mp.Vector3(0.10000000000000003, 0.0, 0.0),
@@ -219,9 +216,9 @@ def check_fields_against_h5(self, ref_path, field, suffix=''):
with h5py.File(ref_path, 'r') as ref:
# Reshape the reference data into a component-wise 1d array like
# [x1,y1,z1,x2,y2,z2,etc.]
- ref_x = mp.complexarray(ref["x.r{}".format(suffix)][()], ref["x.i{}".format(suffix)][()])
- ref_y = mp.complexarray(ref["y.r{}".format(suffix)][()], ref["y.i{}".format(suffix)][()])
- ref_z = mp.complexarray(ref["z.r{}".format(suffix)][()], ref["z.i{}".format(suffix)][()])
+ ref_x = mp.complexarray(ref[f"x.r{suffix}"][()], ref[f"x.i{suffix}"][()])
+ ref_y = mp.complexarray(ref[f"y.r{suffix}"][()], ref[f"y.i{suffix}"][()])
+ ref_z = mp.complexarray(ref[f"z.r{suffix}"][()], ref[f"z.i{suffix}"][()])
ref_arr = np.zeros(np.prod(field.shape), dtype=np.complex128)
ref_arr[0::3] = ref_x.ravel()
@@ -370,12 +367,12 @@ def test_run_tm(self):
def _test_get_field(self, field):
ms = self.init_solver()
ms.run_te()
- get_field_func = getattr(ms, "get_{}field".format(field))
- fix_phase_func = getattr(mpb, "fix_{}field_phase".format(field))
+ get_field_func = getattr(ms, f"get_{field}field")
+ fix_phase_func = getattr(mpb, f"fix_{field}field_phase")
fix_phase_func(ms, ms.num_bands)
fields = get_field_func(ms.num_bands)
- ref_fname = "tutorial-{}.k16.b08.te.h5".format(field)
+ ref_fname = f"tutorial-{field}.k16.b08.te.h5"
ref_path = os.path.join(self.data_dir, ref_fname)
self.check_fields_against_h5(ref_path, fields)
@@ -400,7 +397,7 @@ def test_output_field_to_file(self):
ms.run_te()
ms.output_epsilon()
- res_path = self.filename_prefix + '-epsilon.h5'
+ res_path = f'{self.filename_prefix}-epsilon.h5'
self.compare_h5_files(data_path, res_path)
def test_compute_field_energy(self):
diff --git a/python/tests/test_prism.py b/python/tests/test_prism.py
index a66f32b5c..534f866a2 100644
--- a/python/tests/test_prism.py
+++ b/python/tests/test_prism.py
@@ -11,13 +11,13 @@ def nonconvex_marching_squares(self,idx,npts):
cell = mp.Vector3(10,10)
data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data'))
- vertices_file = os.path.join(data_dir, 'nonconvex_prism_vertices{}.npz'.format(idx))
+ vertices_file = os.path.join(data_dir, f'nonconvex_prism_vertices{idx}.npz')
vertices_obj = np.load(vertices_file)
## prism verticies precomputed from analytic "blob" shape using
## marching squares algorithm of skimage.measure.find_contours
## ref: https://github.com/NanoComp/meep/pull/1142
- vertices_data = vertices_obj["N{}".format(npts)]
+ vertices_data = vertices_obj[f"N{npts}"]
vertices = [mp.Vector3(v[0],v[1],0) for v in vertices_data]
geometry = [mp.Prism(vertices,
@@ -32,7 +32,7 @@ def nonconvex_marching_squares(self,idx,npts):
prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps)
- print("epsilon-sum:, {} (prism-msq)".format(abs(prism_eps)))
+ print(f"epsilon-sum:, {abs(prism_eps)} (prism-msq)")
return prism_eps
@@ -49,7 +49,7 @@ def convex_marching_squares(self,npts):
## prism vertices precomputed for a circle of radius 1.0 using
## marching squares algorithm of skimage.measure.find_contours
## ref: https://github.com/NanoComp/meep/issues/1060
- vertices_data = vertices_obj["N{}".format(npts)]
+ vertices_data = vertices_obj[f"N{npts}"]
vertices = [mp.Vector3(v[0],v[1],0) for v in vertices_data]
geometry = [mp.Prism(vertices,
@@ -79,7 +79,9 @@ def convex_marching_squares(self,npts):
cyl_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps)
- print("epsilon-sum:, {} (prism-msq), {} (cylinder), {} (relative error)".format(abs(prism_eps),abs(cyl_eps),abs((prism_eps-cyl_eps)/cyl_eps)))
+ print(
+ f"epsilon-sum:, {abs(prism_eps)} (prism-msq), {abs(cyl_eps)} (cylinder), {abs((prism_eps-cyl_eps)/cyl_eps)} (relative error)"
+ )
return abs((prism_eps-cyl_eps)/cyl_eps)
@@ -122,7 +124,9 @@ def convex_circle(self,npts,r,sym):
cyl_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps)
- print("epsilon-sum:, {} (prism-cyl), {} (cylinder), {} (relative error)".format(abs(prism_eps),abs(cyl_eps),abs((prism_eps-cyl_eps)/cyl_eps)))
+ print(
+ f"epsilon-sum:, {abs(prism_eps)} (prism-cyl), {abs(cyl_eps)} (cylinder), {abs((prism_eps-cyl_eps)/cyl_eps)} (relative error)"
+ )
return abs((prism_eps-cyl_eps)/cyl_eps)
@@ -142,7 +146,7 @@ def spiral_gds(self):
prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps)
- print("epsilon-sum:, {} (prism-gds)".format(abs(prism_eps)))
+ print(f"epsilon-sum:, {abs(prism_eps)} (prism-gds)")
return prism_eps
diff --git a/python/tests/test_refl_angular.py b/python/tests/test_refl_angular.py
index 0397051b4..1082fc5a4 100644
--- a/python/tests/test_refl_angular.py
+++ b/python/tests/test_refl_angular.py
@@ -34,11 +34,7 @@ def refl_angular(self, theta):
# wavevector (in source medium); plane of incidence is XZ
k = mp.Vector3(0,0,1).rotate(mp.Vector3(0,1,0),theta_r).scale(self.n1*self.fmin)
- if theta == 0:
- dimensions = 1
- else:
- dimensions = 3
-
+ dimensions = 1 if theta == 0 else 3
cell_size = mp.Vector3(z=self.sz)
pml_layers = [mp.PML(self.dpml)]
@@ -97,10 +93,7 @@ def refl_angular(self, theta):
Rs = -np.array(refl_flux)/np.array(empty_flux)
- thetas = []
- for i in range(self.nfreq):
- thetas.append(math.asin(k.x/(self.n1*freqs[i])))
-
+ thetas = [math.asin(k.x/(self.n1*freqs[i])) for i in range(self.nfreq)]
return freqs, thetas, Rs
@parameterized.parameterized.expand([(0,), (20.6,)])
diff --git a/python/tests/test_ring.py b/python/tests/test_ring.py
index 7970f23dc..6472f3347 100644
--- a/python/tests/test_ring.py
+++ b/python/tests/test_ring.py
@@ -21,7 +21,7 @@ def init(self):
dpml = 2
sxy = 2 * (r + w + pad + dpml)
- dielectric = mp.Medium(epsilon=n * n)
+ dielectric = mp.Medium(epsilon=n**2)
air = mp.Medium()
c1 = mp.Cylinder(r + w, material=dielectric)
diff --git a/python/tests/test_simulation.py b/python/tests/test_simulation.py
index 24d183467..af69f0620 100644
--- a/python/tests/test_simulation.py
+++ b/python/tests/test_simulation.py
@@ -20,7 +20,7 @@ class TestSimulation(unittest.TestCase):
fname = fname_base + '-ez-000200.00.h5'
def setUp(self):
- print("Running {}".format(self._testMethodName))
+ print(f"Running {self._testMethodName}")
@classmethod
def setUpClass(cls):
@@ -141,8 +141,8 @@ def test_at_time(self):
sim.use_output_directory(self.temp_dir)
sim.run(mp.at_time(100, mp.output_efield_z), until=200)
- fname = os.path.join(self.temp_dir,
- sim.get_filename_prefix() + '-ez-000100.00.h5')
+ fname = os.path.join(self.temp_dir, f'{sim.get_filename_prefix()}-ez-000100.00.h5')
+
self.assertTrue(os.path.exists(fname))
def test_after_sources_and_time(self):
@@ -162,8 +162,8 @@ def test_with_prefix(self):
sim.use_output_directory(self.temp_dir)
sim.run(mp.with_prefix('test_prefix-', mp.at_end(mp.output_efield_z)), until=200)
- fname = os.path.join(self.temp_dir, 'test_prefix-' + sim.get_filename_prefix() +
- '-ez-000200.00.h5')
+ fname = os.path.join(self.temp_dir, (f'test_prefix-{sim.get_filename_prefix()}' + '-ez-000200.00.h5'))
+
self.assertTrue(os.path.exists(fname))
def test_extra_materials(self):
@@ -598,7 +598,7 @@ def _check(med, expected, default=mp.Medium()):
else:
self.assertFalse(result)
- print("Estimated memory usage: {}".format(sim.get_estimated_memory_usage()))
+ print(f"Estimated memory usage: {sim.get_estimated_memory_usage()}")
def mat_func(p):
return mp.Medium()
diff --git a/python/tests/test_source.py b/python/tests/test_source.py
index ce397adcc..5006dac8a 100644
--- a/python/tests/test_source.py
+++ b/python/tests/test_source.py
@@ -98,9 +98,7 @@ def test_custom_source(self):
# Bump function
def my_src_func(t):
- if t > 0 and t < 2:
- return math.exp(-1 / (1 - ((t - 1)**2)))
- return 0j
+ return math.exp(-1 / (1 - ((t - 1)**2))) if t > 0 and t < 2 else 0j
sources = [mp.Source(src=mp.CustomSource(src_func=my_src_func, end_time=100),
component=mp.Ez, center=mp.Vector3(r + 0.1))]
diff --git a/python/tests/test_special_kz.py b/python/tests/test_special_kz.py
index 8c0e051b2..65f31fd2c 100644
--- a/python/tests/test_special_kz.py
+++ b/python/tests/test_special_kz.py
@@ -63,8 +63,7 @@ def refl_planar(self, theta, kz_2d):
refl_flux = mp.get_fluxes(refl)
- Rmeep = -refl_flux[0]/empty_flux[0]
- return Rmeep
+ return -refl_flux[0]/empty_flux[0]
def test_special_kz(self):
diff --git a/python/timing_measurements.py b/python/timing_measurements.py
index 08fc068b6..dd61e61e4 100644
--- a/python/timing_measurements.py
+++ b/python/timing_measurements.py
@@ -129,9 +129,8 @@ def new_from_simulation(
Returns:
the resulting `MeepTimingMeasurements`
"""
- measurements = {}
- for name, timing_id in TIMING_MEASUREMENT_IDS.items():
- measurements[name] = sim.time_spent_on(timing_id).tolist()
+ measurements = {name: sim.time_spent_on(timing_id).tolist() for name, timing_id in TIMING_MEASUREMENT_IDS.items()}
+
return cls(
measurements=measurements,
elapsed_time=elapsed_time,
diff --git a/python/verbosity_mgr.py b/python/verbosity_mgr.py
index 5b9fcc686..86832498f 100644
--- a/python/verbosity_mgr.py
+++ b/python/verbosity_mgr.py
@@ -63,7 +63,7 @@ def _init(self):
instance is created.
"""
self._master_verbosity = -1
- self._cvars = dict()
+ self._cvars = {}
@classmethod
def reset(cls):
@@ -152,7 +152,7 @@ def __int__(self):
return self.get()
def __repr__(self):
- return "Verbosity: level={}".format(self.get())
+ return f"Verbosity: level={self.get()}"
# Some comparison operators
def __gt__(self, o): return self.get() > o
diff --git a/python/visualization.py b/python/visualization.py
index 4d6d1eb10..b1c7e6f64 100644
--- a/python/visualization.py
+++ b/python/visualization.py
@@ -91,8 +91,7 @@ def filter_dict(dict_to_filter, func_with_kwargs):
# Python2 ...
filter_keys = inspect.getargspec(func_with_kwargs)[0]
- filtered_dict = {filter_key:dict_to_filter[filter_key] for filter_key in filter_keys if filter_key in dict_to_filter}
- return filtered_dict
+ return {filter_key: dict_to_filter[filter_key] for filter_key in filter_keys if filter_key in dict_to_filter}
# ------------------------------------------------------- #
# Routines to add legends to plot
@@ -108,15 +107,8 @@ def place_label(ax, label_text, x, y, centerx, centery, label_parameters=None):
alpha = label_parameters['label_alpha']
color = label_parameters['label_color']
- if x > centerx:
- xtext = -offset
- else:
- xtext = offset
- if y > centery:
- ytext = -offset
- else:
- ytext = offset
-
+ xtext = -offset if x > centerx else offset
+ ytext = -offset if y > centery else offset
ax.annotate(label_text, xy=(x, y), xytext=(xtext, ytext),
textcoords='offset points', ha='center', va='bottom',
bbox=dict(boxstyle='round,pad=0.2', fc=color, alpha=alpha),
@@ -154,9 +146,8 @@ def intersect_volume_volume(volume1, volume2):
L = np.max([L1,L2],axis=0)
# For single points we have to check manually
- if np.all(U-L == 0):
- if (not volume1.pt_in_volume(Vector3(*U))) or (not volume2.pt_in_volume(Vector3(*U))):
- return []
+ if np.all(U - L == 0) and ((not volume1.pt_in_volume(Vector3(*U))) or (not volume2.pt_in_volume(Vector3(*U)))):
+ return []
# Check for two volumes that don't intersect
if np.any(U-L < 0):
@@ -166,9 +157,7 @@ def intersect_volume_volume(volume1, volume2):
vertices = []
for x_vals in [L[0],U[0]]:
for y_vals in [L[1],U[1]]:
- for z_vals in [L[2],U[2]]:
- vertices.append(Vector3(x_vals,y_vals,z_vals))
-
+ vertices.extend(Vector3(x_vals,y_vals,z_vals) for z_vals in [L[2],U[2]])
# Remove any duplicate points caused by coplanar lines
vertices = [vertices[i] for i, x in enumerate(vertices) if x not in vertices[i+1:]]
@@ -191,11 +180,10 @@ def get_2D_dimensions(sim, output_plane):
plane_center, plane_size = (output_plane.center, output_plane.size)
elif sim.output_volume:
plane_center, plane_size = mp.get_center_and_size(sim.output_volume)
+ elif (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical:
+ plane_center, plane_size = (sim.geometry_center+mp.Vector3(sim.cell_size.x/2), sim.cell_size)
else:
- if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical:
- plane_center, plane_size = (sim.geometry_center+mp.Vector3(sim.cell_size.x/2), sim.cell_size)
- else:
- plane_center, plane_size = (sim.geometry_center, sim.cell_size)
+ plane_center, plane_size = (sim.geometry_center, sim.cell_size)
plane_volume = Volume(center=plane_center,size=plane_size)
if plane_size.x != 0 and plane_size.y != 0 and plane_size.z != 0:
@@ -389,11 +377,7 @@ def plot_eps(sim, ax, output_plane=None, eps_parameters=None, frequency=None):
sim_size,
sim.is_cylindrical)
- if eps_parameters['resolution']:
- grid_resolution = eps_parameters['resolution']
- else:
- grid_resolution = sim.resolution
-
+ grid_resolution = eps_parameters['resolution'] or sim.resolution
Nx = int((xmax - xmin) * grid_resolution + 1)
Ny = int((ymax - ymin) * grid_resolution + 1)
Nz = int((zmax - zmin) * grid_resolution + 1)
@@ -409,10 +393,8 @@ def plot_eps(sim, ax, output_plane=None, eps_parameters=None, frequency=None):
elif sim_size.y == 0:
# Plot x on x axis, z on y axis (XZ plane)
extent = [xmin, xmax, zmin, zmax]
- if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical:
- xlabel = 'R'
- else:
- xlabel = "X"
+ xlabel = 'R' if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical else "X"
+
ylabel = 'Z'
xtics = np.linspace(xmin, xmax, Nx)
ytics = np.array([sim_center.y])
@@ -586,51 +568,44 @@ def plot_fields(sim, ax=None, fields=None, output_plane=None, field_parameters=N
else:
field_parameters = dict(default_field_parameters, **field_parameters)
- # user specifies a field component
- if fields in [mp.Ex, mp.Ey, mp.Ez, mp.Er, mp.Ep, mp.Dx, mp.Dy, mp.Dz, mp.Hx, mp.Hy, mp.Hz]:
- # Get domain measurements
- sim_center, sim_size = get_2D_dimensions(sim, output_plane)
+ if fields not in [mp.Ex, mp.Ey, mp.Ez, mp.Er, mp.Ep, mp.Dx, mp.Dy, mp.Dz, mp.Hx, mp.Hy, mp.Hz]:
+ raise ValueError('Please specify a valid field component (mp.Ex, mp.Ey, ...')
- xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(sim_center,
- sim_size,
- sim.is_cylindrical)
- if sim_size.x == 0:
- # Plot y on x axis, z on y axis (YZ plane)
- extent = [ymin, ymax, zmin, zmax]
- xlabel = 'Y'
- ylabel = 'Z'
- elif sim_size.y == 0:
- # Plot x on x axis, z on y axis (XZ plane)
- extent = [xmin, xmax, zmin, zmax]
- if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical:
- xlabel = 'R'
- else:
- xlabel = "X"
- ylabel = 'Z'
- elif sim_size.z == 0:
- # Plot x on x axis, y on y axis (XY plane)
- extent = [xmin, xmax, ymin, ymax]
- xlabel = 'X'
- ylabel = 'Y'
- fields = sim.get_array(center=sim_center, size=sim_size, component=fields)
- else:
- raise ValueError('Please specify a valid field component (mp.Ex, mp.Ey, ...')
+ # Get domain measurements
+ sim_center, sim_size = get_2D_dimensions(sim, output_plane)
+
+ xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(sim_center,
+ sim_size,
+ sim.is_cylindrical)
+ if sim_size.x == 0:
+ # Plot y on x axis, z on y axis (YZ plane)
+ extent = [ymin, ymax, zmin, zmax]
+ xlabel = 'Y'
+ ylabel = 'Z'
+ elif sim_size.y == 0:
+ # Plot x on x axis, z on y axis (XZ plane)
+ extent = [xmin, xmax, zmin, zmax]
+ xlabel = 'R' if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical else "X"
+ ylabel = 'Z'
+ elif sim_size.z == 0:
+ # Plot x on x axis, y on y axis (XY plane)
+ extent = [xmin, xmax, ymin, ymax]
+ xlabel = 'X'
+ ylabel = 'Y'
+ fields = sim.get_array(center=sim_center, size=sim_size, component=fields)
fields = field_parameters['post_process'](fields)
if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical:
fields = np.flipud(fields)
else:
fields = np.rot90(fields)
- # Either plot the field, or return the array
- if ax:
- if mp.am_master():
- ax.imshow(fields, extent=extent, **filter_dict(field_parameters,ax.imshow))
- return ax
- else:
+ if not ax:
return fields
+ if mp.am_master():
+ ax.imshow(fields, extent=extent, **filter_dict(field_parameters,ax.imshow))
return ax
def plot2D(sim, ax=None, output_plane=None, fields=None, labels=False,
@@ -695,8 +670,7 @@ def plot3D(sim):
ztics = np.linspace(zmin, zmax, Nz)
eps_data = sim.get_epsilon_grid(xtics, ytics, ztics)
- s = mlab.contour3d(eps_data, colormap="YlGnBu")
- return s
+ return mlab.contour3d(eps_data, colormap="YlGnBu")
def visualize_chunks(sim):
if sim.structure is None:
@@ -1025,7 +999,7 @@ def to_jshtml(self,fps):
mode_dict = dict(once_checked='',
loop_checked='',
reflect_checked='')
- mode_dict[self.default_mode + '_checked'] = 'checked'
+ mode_dict[f'{self.default_mode}_checked'] = 'checked'
interval = 1000 // fps
From 6af8b4cb4d321e0b72b301dc7851ecd7bcb8089a Mon Sep 17 00:00:00 2001
From: Joaquin Matres <4514346+joamatab@users.noreply.github.com>
Date: Fri, 29 Jul 2022 16:10:12 +0200
Subject: [PATCH 02/12] format code with black
---
python/adjoint/__init__.py | 2 +-
python/adjoint/basis.py | 129 +-
python/adjoint/connectivity.py | 206 +-
python/adjoint/filter_source.py | 96 +-
python/adjoint/filters.py | 241 +-
python/adjoint/objective.py | 204 +-
python/adjoint/optimization_problem.py | 195 +-
python/adjoint/utils.py | 133 +-
python/adjoint/wrapper.py | 52 +-
python/binary_partition_utils.py | 88 +-
python/chunk_balancer.py | 92 +-
python/examples/3rd-harm-1d.ipynb | 161 +-
python/examples/3rd-harm-1d.py | 65 +-
python/examples/absorbed_power_density.ipynb | 121 +-
python/examples/absorbed_power_density.py | 130 +-
python/examples/absorber-1d.py | 42 +-
.../01-Introduction-checkpoint.ipynb | 158 +-
.../02-Waveguide_Bend-checkpoint.ipynb | 120 +-
...3-Filtered_Waveguide_Bend-checkpoint.ipynb | 283 ++-
.../04-Splitter-checkpoint.ipynb | 289 ++-
.../05-Near2Far-checkpoint.ipynb | 273 ++-
.../06-Near2Far-Epigraph-checkpoint.ipynb | 307 +--
.../Bend Minimax-checkpoint.ipynb | 299 ++-
.../01-Introduction.ipynb | 143 +-
.../02-Waveguide_Bend.ipynb | 120 +-
.../03-Filtered_Waveguide_Bend.ipynb | 286 ++-
.../adjoint_optimization/04-Splitter.ipynb | 294 ++-
.../adjoint_optimization/05-Near2Far.ipynb | 201 +-
.../06-Near2Far-Epigraph.ipynb | 307 +--
.../adjoint_optimization/Bend Minimax.ipynb | 302 ++-
.../ConnectivityConstraint.ipynb | 50 +-
.../adjoint_optimization/Fourier-Bend.ipynb | 253 ++-
python/examples/antenna-radiation.ipynb | 121 +-
python/examples/antenna-radiation.py | 145 +-
python/examples/antenna_pec_ground_plane.py | 229 +-
python/examples/bend-flux.ipynb | 104 +-
python/examples/bend-flux.py | 114 +-
python/examples/bent-waveguide.ipynb | 91 +-
python/examples/bent-waveguide.py | 52 +-
python/examples/binary_grating.ipynb | 314 +--
python/examples/binary_grating.py | 155 +-
python/examples/binary_grating_n2f.ipynb | 243 +-
python/examples/binary_grating_n2f.py | 249 +-
python/examples/binary_grating_oblique.ipynb | 183 +-
python/examples/binary_grating_oblique.py | 209 +-
python/examples/binary_grating_phasemap.ipynb | 181 +-
python/examples/binary_grating_phasemap.py | 267 ++-
python/examples/cavity-farfield.ipynb | 94 +-
python/examples/cavity-farfield.py | 144 +-
python/examples/cavity_arrayslice.py | 18 +-
python/examples/cherenkov-radiation.py | 40 +-
python/examples/chirped_pulse.py | 56 +-
python/examples/coupler.ipynb | 139 +-
python/examples/coupler.py | 109 +-
python/examples/cyl-ellipsoid.py | 32 +-
python/examples/cylinder_cross_section.ipynb | 148 +-
python/examples/cylinder_cross_section.py | 148 +-
.../examples/differential_cross_section.ipynb | 177 +-
python/examples/differential_cross_section.py | 193 +-
python/examples/diffracted_planewave.py | 296 +--
python/examples/eps_fit_lorentzian.py | 134 +-
python/examples/faraday-rotation.py | 80 +-
python/examples/finite_grating.ipynb | 168 +-
python/examples/finite_grating.py | 202 +-
python/examples/gaussian-beam.py | 54 +-
.../examples/grating2d_triangular_lattice.py | 128 +-
python/examples/holey-wvg-bands.ipynb | 104 +-
python/examples/holey-wvg-bands.py | 21 +-
python/examples/holey-wvg-cavity.ipynb | 221 +-
python/examples/holey-wvg-cavity.py | 123 +-
python/examples/material-dispersion.py | 10 +-
python/examples/metal-cavity-ldos.ipynb | 69 +-
python/examples/metal-cavity-ldos.py | 60 +-
python/examples/metasurface_lens.ipynb | 317 ++-
python/examples/metasurface_lens.py | 346 +--
python/examples/mie_scattering.ipynb | 196 +-
python/examples/mie_scattering.py | 198 +-
python/examples/mode-decomposition.ipynb | 141 +-
python/examples/mode-decomposition.py | 162 +-
python/examples/mpb_bragg.py | 18 +-
python/examples/mpb_bragg_sine.py | 12 +-
python/examples/mpb_data_analysis.py | 23 +-
python/examples/mpb_diamond.py | 27 +-
python/examples/mpb_hole_slab.py | 24 +-
python/examples/mpb_honey_rods.py | 37 +-
python/examples/mpb_line_defect.py | 24 +-
python/examples/mpb_sq_rods.py | 9 +-
python/examples/mpb_strip.py | 37 +-
python/examples/mpb_tri_holes.py | 19 +-
python/examples/mpb_tri_rods.py | 26 +-
python/examples/mpb_tutorial.py | 57 +-
python/examples/multilevel-atom.py | 75 +-
python/examples/oblique-planewave.ipynb | 54 +-
python/examples/oblique-planewave.py | 61 +-
python/examples/oblique-source.ipynb | 175 +-
python/examples/oblique-source.py | 108 +-
python/examples/parallel-wvgs-force.ipynb | 190 +-
python/examples/parallel-wvgs-force.py | 111 +-
python/examples/parallel-wvgs-mpb.py | 78 +-
python/examples/perturbation_theory.ipynb | 202 +-
python/examples/perturbation_theory.py | 207 +-
python/examples/perturbation_theory_2d.py | 251 ++-
python/examples/phase_in_material.py | 27 +-
python/examples/planar_cavity_ldos.py | 266 ++-
python/examples/polarization_grating.ipynb | 201 +-
python/examples/polarization_grating.py | 208 +-
python/examples/pw-source.py | 10 +-
python/examples/refl-angular-kz2d.py | 101 +-
python/examples/refl-angular.ipynb | 171 +-
python/examples/refl-angular.py | 110 +-
python/examples/refl-quartz.ipynb | 85 +-
python/examples/refl-quartz.py | 85 +-
python/examples/ring-cyl.py | 83 +-
python/examples/ring-mode-overlap.py | 28 +-
python/examples/ring.ipynb | 77 +-
python/examples/ring.py | 48 +-
python/examples/ring_gds.py | 128 +-
python/examples/solve-cw.ipynb | 119 +-
python/examples/solve-cw.py | 125 +-
python/examples/stochastic_emitter.ipynb | 171 +-
python/examples/stochastic_emitter.py | 135 +-
python/examples/stochastic_emitter_line.py | 146 +-
python/examples/straight-waveguide.ipynb | 38 +-
python/examples/straight-waveguide.py | 46 +-
python/examples/wvg-src.py | 36 +-
python/examples/zone_plate.ipynb | 176 +-
python/examples/zone_plate.py | 191 +-
python/geom.py | 443 ++--
python/materials.py | 1578 ++++++++-----
python/mpb_data.py | 137 +-
python/simulation.py | 2005 +++++++++++------
python/solver.py | 359 +--
python/source.py | 166 +-
python/tests/test_3rd_harm_1d.py | 39 +-
python/tests/test_absorber_1d.py | 38 +-
python/tests/test_adjoint_cyl.py | 150 +-
python/tests/test_adjoint_jax.py | 168 +-
python/tests/test_adjoint_solver.py | 634 +++---
python/tests/test_adjoint_utils.py | 43 +-
python/tests/test_antenna_radiation.py | 363 +--
python/tests/test_array_metadata.py | 106 +-
python/tests/test_bend_flux.py | 144 +-
python/tests/test_binary_grating.py | 600 ++---
python/tests/test_binary_partition_utils.py | 381 ++--
python/tests/test_cavity_arrayslice.py | 39 +-
python/tests/test_cavity_farfield.py | 88 +-
python/tests/test_chunk_balancer.py | 231 +-
python/tests/test_chunk_layout.py | 71 +-
python/tests/test_chunks.py | 95 +-
python/tests/test_conductivity.py | 117 +-
python/tests/test_cyl_ellipsoid.py | 39 +-
python/tests/test_dft_energy.py | 69 +-
python/tests/test_dft_fields.py | 59 +-
python/tests/test_diffracted_planewave.py | 284 +--
python/tests/test_dispersive_eigenmode.py | 101 +-
python/tests/test_divide_mpi_processes.py | 70 +-
python/tests/test_dump_load.py | 376 +++-
python/tests/test_eigfreq.py | 64 +-
python/tests/test_faraday_rotation.py | 98 +-
python/tests/test_field_functions.py | 45 +-
python/tests/test_force.py | 32 +-
python/tests/test_fragment_stats.py | 297 ++-
python/tests/test_gaussianbeam.py | 87 +-
python/tests/test_geom.py | 253 ++-
python/tests/test_get_epsilon_grid.py | 116 +-
python/tests/test_get_point.py | 180 +-
python/tests/test_holey_wvg_bands.py | 17 +-
python/tests/test_holey_wvg_cavity.py | 59 +-
python/tests/test_integrated_source.py | 31 +-
python/tests/test_kdom.py | 79 +-
python/tests/test_ldos.py | 270 ++-
python/tests/test_material_dispersion.py | 11 +-
python/tests/test_material_grid.py | 289 ++-
python/tests/test_materials_library.py | 41 +-
python/tests/test_medium_evaluations.py | 39 +-
python/tests/test_mode_coeffs.py | 304 ++-
python/tests/test_mode_decomposition.py | 740 +++---
python/tests/test_mpb.py | 1734 +++++++++-----
python/tests/test_multilevel_atom.py | 40 +-
python/tests/test_n2f_periodic.py | 106 +-
python/tests/test_oblique_source.py | 82 +-
python/tests/test_physical.py | 29 +-
python/tests/test_prism.py | 385 ++--
python/tests/test_pw_source.py | 19 +-
python/tests/test_refl_angular.py | 137 +-
python/tests/test_ring.py | 20 +-
python/tests/test_ring_cyl.py | 10 +-
python/tests/test_simulation.py | 440 +++-
python/tests/test_source.py | 166 +-
python/tests/test_special_kz.py | 215 +-
python/tests/test_timing_measurements.py | 9 +-
python/tests/test_user_defined_material.py | 69 +-
python/tests/test_verbosity_mgr.py | 22 +-
python/tests/test_visualization.py | 297 ++-
python/tests/test_wvg_src.py | 38 +-
python/tests/utils.py | 5 +-
python/timing_measurements.py | 119 +-
python/verbosity_mgr.py | 41 +-
python/visualization.py | 867 ++++---
199 files changed, 21033 insertions(+), 13125 deletions(-)
diff --git a/python/adjoint/__init__.py b/python/adjoint/__init__.py
index 949d3d689..a787e31e7 100644
--- a/python/adjoint/__init__.py
+++ b/python/adjoint/__init__.py
@@ -10,7 +10,7 @@
from .basis import BilinearInterpolationBasis
-from .optimization_problem import (OptimizationProblem)
+from .optimization_problem import OptimizationProblem
from .filter_source import FilteredSource
diff --git a/python/adjoint/basis.py b/python/adjoint/basis.py
index 937777d61..80ea14d64 100644
--- a/python/adjoint/basis.py
+++ b/python/adjoint/basis.py
@@ -3,23 +3,22 @@
from scipy import sparse
from abc import ABCMeta, abstractmethod
-ABC = ABCMeta('ABC', (object, ), {'__slots__':
- ()}) # compatible with Python 2 and 3
+ABC = ABCMeta("ABC", (object,), {"__slots__": ()}) # compatible with Python 2 and 3
-#----------------------------------------------------------------------
+# ----------------------------------------------------------------------
# Basis is the abstract base class from which classes describing specific
# basis sets should inherit.
-#----------------------------------------------------------------------
+# ----------------------------------------------------------------------
class Basis(ABC):
- """
- """
+ """ """
+
def __init__(
- self,
- rho_vector=None,
- volume=None,
- size=None,
- center=mp.Vector3(),
+ self,
+ rho_vector=None,
+ volume=None,
+ size=None,
+ center=mp.Vector3(),
):
self.volume = volume or mp.Volume(center=center, size=size)
self.rho_vector = rho_vector
@@ -32,13 +31,11 @@ def _f(p):
@abstractmethod
def get_basis_vjp(self):
- raise NotImplementedError(
- "derived class must implement get_basis_vjp method")
+ raise NotImplementedError("derived class must implement get_basis_vjp method")
@abstractmethod
def __call__(self, p=[0.0, 0.0]):
- raise NotImplementedError(
- "derived class must implement __call__() method")
+ raise NotImplementedError("derived class must implement __call__() method")
def set_rho_vector(self, rho_vector):
self.rho_vector = rho_vector
@@ -50,9 +47,10 @@ def set_rho_vector(self, rho_vector):
class BilinearInterpolationBasis(Basis):
- '''
+ """
Simple bilinear interpolation basis set.
- '''
+ """
+
def __init__(self, resolution, symmetry=None, **kwargs):
self.dim = 2
@@ -64,43 +62,60 @@ def __init__(self, resolution, symmetry=None, **kwargs):
self.Nx = int(resolution * self.volume.size.x / 2) + 1
self.rho_x = np.linspace(
self.volume.center.x,
- self.volume.center.x + self.volume.size.x / 2, self.Nx)
+ self.volume.center.x + self.volume.size.x / 2,
+ self.Nx,
+ )
self.mirror_X = True
else:
self.Nx = int(resolution * self.volume.size.x) + 1
self.rho_x = np.linspace(
self.volume.center.x - self.volume.size.x / 2,
- self.volume.center.x + self.volume.size.x / 2, self.Nx)
+ self.volume.center.x + self.volume.size.x / 2,
+ self.Nx,
+ )
self.mirror_X = False
if mp.Y in set(self.symmetry):
self.Ny = int(resolution * self.volume.size.y / 2) + 1
self.rho_y = np.linspace(
self.volume.center.y,
- self.volume.center.y + self.volume.size.y / 2, self.Ny)
+ self.volume.center.y + self.volume.size.y / 2,
+ self.Ny,
+ )
self.mirror_Y = True
else:
self.Ny = int(resolution * self.volume.size.y) + 1
self.rho_y = np.linspace(
self.volume.center.y - self.volume.size.y / 2,
- self.volume.center.y + self.volume.size.y / 2, self.Ny)
+ self.volume.center.y + self.volume.size.y / 2,
+ self.Ny,
+ )
self.mirror_Y = False
self.num_design_params = self.Nx * self.Ny
if self.rho_vector is None:
- self.rho_vector = np.ones((self.num_design_params, ))
+ self.rho_vector = np.ones((self.num_design_params,))
def __call__(self, p):
- x = 2 * self.volume.center.x - p.x if self.mirror_X and p.x < self.volume.center.x else p.x
- y = 2 * self.volume.center.y - p.y if self.mirror_Y and p.y < self.volume.center.y else p.y
+ x = (
+ 2 * self.volume.center.x - p.x
+ if self.mirror_X and p.x < self.volume.center.x
+ else p.x
+ )
+ y = (
+ 2 * self.volume.center.y - p.y
+ if self.mirror_Y and p.y < self.volume.center.y
+ else p.y
+ )
weights, interp_idx = self.get_bilinear_row(
- x, y, self.rho_x, self.rho_y) # ignore z coordinate
+ x, y, self.rho_x, self.rho_y
+ ) # ignore z coordinate
return np.dot(self.rho_vector[interp_idx], weights)
def get_basis_vjp(self, dJ_deps, design_grid):
- ''' get vector jacobian product of interpolator'''
+ """get vector jacobian product of interpolator"""
dg_Nx, dg_Ny, Nz, Nf = dJ_deps.shape # get important design grid dimensions
x_grid = design_grid.x
@@ -109,32 +124,37 @@ def get_basis_vjp(self, dJ_deps, design_grid):
# take care of symmetries
if self.mirror_X:
- dJ_deps = dJ_deps[int(dg_Nx / 2):, :, :, :] * 2
- x_grid = x_grid[int(dg_Nx / 2):]
+ dJ_deps = dJ_deps[int(dg_Nx / 2) :, :, :, :] * 2
+ x_grid = x_grid[int(dg_Nx / 2) :]
if self.mirror_Y:
- dJ_deps = dJ_deps[:, int(dg_Ny / 2):, :, :] * 2
- y_grid = y_grid[int(dg_Ny / 2):]
+ dJ_deps = dJ_deps[:, int(dg_Ny / 2) :, :, :] * 2
+ y_grid = y_grid[int(dg_Ny / 2) :]
dg_Nx, dg_Ny, Nz, Nf = dJ_deps.shape # recalculate
- Nx, Ny = self.rho_x.size, self.rho_y.size # get important interpolator dimensions
+ Nx, Ny = (
+ self.rho_x.size,
+ self.rho_y.size,
+ ) # get important interpolator dimensions
# same interpolation matrix for all frequencies and all coordinates in Z direction
- A = self.gen_interpolation_matrix(self.rho_x, self.rho_y, x_grid,
- y_grid, z_grid)
+ A = self.gen_interpolation_matrix(
+ self.rho_x, self.rho_y, x_grid, y_grid, z_grid
+ )
# TODO ditch the for loops
dJ_dp = np.zeros((Nx * Ny, Nf))
for fi in range(Nf):
for zi in range(Nz):
dJ_dp[:, fi] += np.matmul(
- dJ_deps[:, :, zi, fi].reshape(dg_Nx * dg_Ny, order='C'), A)
+ dJ_deps[:, :, zi, fi].reshape(dg_Nx * dg_Ny, order="C"), A
+ )
return dJ_dp
def get_bilinear_coefficients(self, x, x1, x2, y, y1, y2):
- '''
+ """
Calculates the bilinear interpolation coefficients for a single point at (x,y).
Assumes that the user already knows the four closest points and provides the corresponding
(x1,x2) and(y1,y2) coordinates.
- '''
+ """
b11 = ((x - x2) * (y - y2)) / ((x1 - x2) * (y1 - y2))
b12 = -((x - x2) * (y - y1)) / ((x1 - x2) * (y1 - y2))
b21 = -((x - x1) * (y - y2)) / ((x1 - x2) * (y1 - y2))
@@ -142,17 +162,17 @@ def get_bilinear_coefficients(self, x, x1, x2, y, y1, y2):
return [b11, b12, b21, b22]
def get_bilinear_row(self, rx, ry, rho_x, rho_y):
- '''
+ """
Calculates a vector of bilinear interpolation weights that can be used
in an inner product with the neighboring function values, or placed
inside of an interpolation matrix.
- '''
+ """
Nx = rho_x.size
Ny = rho_y.size
# binary search in x direction to get x1 and x2
- xi2 = np.searchsorted(rho_x, rx, side='left')
+ xi2 = np.searchsorted(rho_x, rx, side="left")
if xi2 <= 0: # extrapolation (be careful!)
xi1 = 0
xi2 = 1
@@ -166,7 +186,7 @@ def get_bilinear_row(self, rx, ry, rho_x, rho_y):
x2 = rho_x[xi2]
# binary search in y direction to get y1 and y2
- yi2 = np.searchsorted(rho_y, ry, side='left')
+ yi2 = np.searchsorted(rho_y, ry, side="left")
if yi2 <= 0: # extrapolation (be careful!)
yi1 = 0
yi2 = 1
@@ -183,10 +203,10 @@ def get_bilinear_row(self, rx, ry, rho_x, rho_y):
weights = self.get_bilinear_coefficients(rx, x1, x2, ry, y1, y2)
# get location of nearest neigbor interpolation points
- interp_idx = np.array([
- xi1 * Ny + yi1, xi1 * Ny + yi2, (xi2) * Ny + yi1, (xi2) * Ny + yi2
- ],
- dtype=np.int64)
+ interp_idx = np.array(
+ [xi1 * Ny + yi1, xi1 * Ny + yi2, (xi2) * Ny + yi1, (xi2) * Ny + yi2],
+ dtype=np.int64,
+ )
return weights, interp_idx
@@ -198,7 +218,7 @@ def gen_interpolation_matrix(
rho_y_interp,
rho_z_interp,
):
- '''
+ """
Generates a bilinear interpolation matrix.
Arguments:
@@ -209,7 +229,7 @@ def gen_interpolation_matrix(
Returns:
A .................... [N,M] sparse matrix - interpolation matrix
- '''
+ """
Nx = rho_x.size
Ny = rho_y.size
@@ -228,15 +248,18 @@ def gen_interpolation_matrix(
for rx in rho_x_interp:
for ry in rho_y_interp:
# get weights
- weights, interp_idx = self.get_bilinear_row(
- rx, ry, rho_x, rho_y)
+ weights, interp_idx = self.get_bilinear_row(rx, ry, rho_x, rho_y)
# populate sparse matrix vectors
- interp_weights[4 * ri:4 * (ri + 1)] = weights
- row_ind[4 * ri:4 * (ri + 1)] = np.array([ri, ri, ri, ri],
- dtype=np.int64)
- col_ind[4 * ri:4 * (ri + 1)] = interp_idx
+ interp_weights[4 * ri : 4 * (ri + 1)] = weights
+ row_ind[4 * ri : 4 * (ri + 1)] = np.array(
+ [ri, ri, ri, ri], dtype=np.int64
+ )
+ col_ind[4 * ri : 4 * (ri + 1)] = interp_idx
ri += 1
- return sparse.coo_matrix((interp_weights, (row_ind, col_ind)), shape=(output_dimension, input_dimension))
+ return sparse.coo_matrix(
+ (interp_weights, (row_ind, col_ind)),
+ shape=(output_dimension, input_dimension),
+ )
diff --git a/python/adjoint/connectivity.py b/python/adjoint/connectivity.py
index f3fe9a640..e8b631d79 100644
--- a/python/adjoint/connectivity.py
+++ b/python/adjoint/connectivity.py
@@ -9,77 +9,129 @@
from scipy.sparse.linalg import cg, spsolve
from scipy.sparse import kron, diags, csr_matrix, eye, csc_matrix, lil_matrix
+
class ConnectivityConstraint(object):
- def __init__(self, nx, ny, nz, k0=1000, zeta=0, sp_solver=cg, alpha=None, alpha0=None, thresh=0.1, p=2):
- #zeta is to prevent singularity when damping is zero; with damping, zeta should be zero
- #set ny=1 for 2D
- self.nx, self.ny, self.nz= nx, ny, nz
- self.n = nx*ny*nz
- self.m = nx*ny*(nz-1)
+ def __init__(
+ self,
+ nx,
+ ny,
+ nz,
+ k0=1000,
+ zeta=0,
+ sp_solver=cg,
+ alpha=None,
+ alpha0=None,
+ thresh=0.1,
+ p=2,
+ ):
+ # zeta is to prevent singularity when damping is zero; with damping, zeta should be zero
+ # set ny=1 for 2D
+ self.nx, self.ny, self.nz = nx, ny, nz
+ self.n = nx * ny * nz
+ self.m = nx * ny * (nz - 1)
self.solver = sp_solver
self.k0, self.zeta = k0, zeta
self.thresh = thresh
self.p = p
- #default alpha and alpha0
- self.alpha = alpha if alpha != None else 0.1*min(1/nx, 1/ny, 1/nz)
- self.alpha0 = alpha0 if alpha0 != None else -np.log(thresh)/min(nx, nz)
+ # default alpha and alpha0
+ self.alpha = alpha if alpha != None else 0.1 * min(1 / nx, 1 / ny, 1 / nz)
+ self.alpha0 = alpha0 if alpha0 != None else -np.log(thresh) / min(nx, nz)
def forward(self, rho_vector):
self.rho_vector = rho_vector
# gradient and -div operator
- gx = diags([-1,1], [0,1], shape=(self.nx-1, self.nx), format='csr')
+ gx = diags([-1, 1], [0, 1], shape=(self.nx - 1, self.nx), format="csr")
dx = gx.copy().transpose()
- gy = diags([-1,1], [0,1], shape=(self.ny-1, self.ny), format='csr')
+ gy = diags([-1, 1], [0, 1], shape=(self.ny - 1, self.ny), format="csr")
dy = gy.copy().transpose()
- gz = diags([1,-1], [0, -1], shape=(self.nz, self.nz), format='csr')
- dz = diags([1,-1], [0, 1], shape=(self.nz-1, self.nz), format='csr')
+ gz = diags([1, -1], [0, -1], shape=(self.nz, self.nz), format="csr")
+ dz = diags([1, -1], [0, 1], shape=(self.nz - 1, self.nz), format="csr")
# kron product for 2D
- Ix, Iy, Iz = eye(self.nx), eye(self.ny), eye(self.nz-1)
- self.gx, self.gy, self.gz = kron(Iz, kron(Iy, gx)), kron(Iz, kron(gy, Ix)), kron(gz, kron(Iy,Ix))
- self.dx, self.dy, self.dz = kron(Iz, kron(Iy, dx)), kron(Iz, kron(dy, Ix)), kron(dz, kron(Iy, Ix))
-
- #conductivity based on rho
+ Ix, Iy, Iz = eye(self.nx), eye(self.ny), eye(self.nz - 1)
+ self.gx, self.gy, self.gz = (
+ kron(Iz, kron(Iy, gx)),
+ kron(Iz, kron(gy, Ix)),
+ kron(gz, kron(Iy, Ix)),
+ )
+ self.dx, self.dy, self.dz = (
+ kron(Iz, kron(Iy, dx)),
+ kron(Iz, kron(dy, Ix)),
+ kron(dz, kron(Iy, Ix)),
+ )
+
+ # conductivity based on rho
rho_pad = np.reshape(rho_vector, (self.nz, self.ny, self.nx))
- rhox = np.array([0.5*(rho_pad[k, j, i]+rho_pad[k, j, i+1]) for k in range(self.nz-1) for j in range(self.ny) for i in range(self.nx-1)])
+ rhox = np.array(
+ [
+ 0.5 * (rho_pad[k, j, i] + rho_pad[k, j, i + 1])
+ for k in range(self.nz - 1)
+ for j in range(self.ny)
+ for i in range(self.nx - 1)
+ ]
+ )
self.rhox = rhox
- rhoy = np.array([0.5*(rho_pad[k, j, i]+rho_pad[k, j+1, i]) for k in range(self.nz-1) for j in range(self.ny-1) for i in range(self.nx)])
+ rhoy = np.array(
+ [
+ 0.5 * (rho_pad[k, j, i] + rho_pad[k, j + 1, i])
+ for k in range(self.nz - 1)
+ for j in range(self.ny - 1)
+ for i in range(self.nx)
+ ]
+ )
self.rhoy = rhoy
- rhoz = np.array([0.5*(rho_pad[k, j, i]+rho_pad[k+1, j, i]) for k in range(self.nz-1) for j in range(self.ny) for i in range(self.nx)])
- rhoz = np.insert(rhoz, [0]*self.nx*self.ny, 0)#0 outside first row
+ rhoz = np.array(
+ [
+ 0.5 * (rho_pad[k, j, i] + rho_pad[k + 1, j, i])
+ for k in range(self.nz - 1)
+ for j in range(self.ny)
+ for i in range(self.nx)
+ ]
+ )
+ rhoz = np.insert(rhoz, [0] * self.nx * self.ny, 0) # 0 outside first row
self.rhoz = rhoz
- kx, ky, kz = diags((self.zeta+(1-self.zeta)*rhox)*self.k0), diags((self.zeta+(1-self.zeta)*rhoy)*self.k0), diags((self.zeta+(1-self.zeta)*rhoz)*self.k0)
+ kx, ky, kz = (
+ diags((self.zeta + (1 - self.zeta) * rhox) * self.k0),
+ diags((self.zeta + (1 - self.zeta) * rhoy) * self.k0),
+ diags((self.zeta + (1 - self.zeta) * rhoz) * self.k0),
+ )
self.kx, self.ky, self.kz = kx, ky, kz
- #matrices in x, y, z
- self.Lx, self.Ly, self.Lz = self.dx * kx * self.gx, self.dy * ky * self.gy, self.dz * kz * self.gz
+ # matrices in x, y, z
+ self.Lx, self.Ly, self.Lz = (
+ self.dx * kx * self.gx,
+ self.dy * ky * self.gy,
+ self.dz * kz * self.gz,
+ )
# Dirichlet condition on the last row becomes term on the RHS
- Bz = csc_matrix(self.Lz)[:,-self.nx*self.ny:]
+ Bz = csc_matrix(self.Lz)[:, -self.nx * self.ny :]
rhs = -Bz.sum(axis=1)
- self.rhs=rhs
-
- #LHS operator after moving the boundary term to the RHS
- eq = self.Lz[:, :-self.nx*self.ny]+self.Lx+self.Ly
- self.eq=eq
- #add damping
- damping = self.k0*self.alpha**2*diags(1-rho_vector[:-self.nx*self.ny]) + diags([self.alpha0**2], shape=(self.m, self.m))
+ self.rhs = rhs
+
+ # LHS operator after moving the boundary term to the RHS
+ eq = self.Lz[:, : -self.nx * self.ny] + self.Lx + self.Ly
+ self.eq = eq
+ # add damping
+ damping = self.k0 * self.alpha**2 * diags(
+ 1 - rho_vector[: -self.nx * self.ny]
+ ) + diags([self.alpha0**2], shape=(self.m, self.m))
self.A = eq + damping
self.damping = damping
if self.solver == spsolve:
self.T = self.solver(csr_matrix(self.A), rhs)
else:
self.T, sinfo = self.solver(csr_matrix(self.A), rhs)
- #exclude last row of rho and calculate weighted average of temperature
- self.rho_vec = rho_vector[:-self.nx*self.ny]
+ # exclude last row of rho and calculate weighted average of temperature
+ self.rho_vec = rho_vector[: -self.nx * self.ny]
- self.Td_p = (1 - self.T)**self.p
- self.Td = (sum(self.Td_p * self.rho_vec)/sum(self.rho_vec))**(1/self.p)
+ self.Td_p = (1 - self.T) ** self.p
+ self.Td = (sum(self.Td_p * self.rho_vec) / sum(self.rho_vec)) ** (1 / self.p)
return self.Td
def adjoint(self):
- T_p1 = -(self.T-1) ** (self.p-1)
- dg_dT = self.Td**(1-self.p) * (T_p1*self.rho_vec)/sum(self.rho_vec)
+ T_p1 = -((self.T - 1) ** (self.p - 1))
+ dg_dT = self.Td ** (1 - self.p) * (T_p1 * self.rho_vec) / sum(self.rho_vec)
if self.solver == spsolve:
return self.solver(csr_matrix(self.A.transpose()), dg_dT)
aT, _ = self.solver(csr_matrix(self.A.transpose()), dg_dT)
@@ -87,55 +139,75 @@ def adjoint(self):
def calculate_grad(self):
dg_dp = np.zeros(self.n)
- dg_dp[:-self.nx*self.ny] = (self.Td_p*sum(self.rho_vec))/sum(self.rho_vec)**2
- dg_dp[:-self.nx*self.ny] = dg_dp[:-self.nx*self.ny] - sum(self.Td_p*self.rho_vec)/sum(self.rho_vec)**2
- dg_dp = self.Td ** (1-self.p) * dg_dp / self.p
+ dg_dp[: -self.nx * self.ny] = (self.Td_p * sum(self.rho_vec)) / sum(
+ self.rho_vec
+ ) ** 2
+ dg_dp[: -self.nx * self.ny] = (
+ dg_dp[: -self.nx * self.ny]
+ - sum(self.Td_p * self.rho_vec) / sum(self.rho_vec) ** 2
+ )
+ dg_dp = self.Td ** (1 - self.p) * dg_dp / self.p
dAx = lil_matrix((self.m, self.n))
- gxT = np.reshape(self.gx * self.T, (-1,1))
- drhox = kron(eye(self.nz-1), kron(eye(self.ny), diags([0.5,0.5], [0, 1], shape=[self.nx-1,self.nx])))
- dAx[:, :-self.nx*self.ny] = (1-self.zeta)*self.k0*lil_matrix(self.dx * drhox.multiply(gxT)) #element-wise product
+ gxT = np.reshape(self.gx * self.T, (-1, 1))
+ drhox = kron(
+ eye(self.nz - 1),
+ kron(eye(self.ny), diags([0.5, 0.5], [0, 1], shape=[self.nx - 1, self.nx])),
+ )
+ dAx[:, : -self.nx * self.ny] = (
+ (1 - self.zeta) * self.k0 * lil_matrix(self.dx * drhox.multiply(gxT))
+ ) # element-wise product
dAy = lil_matrix((self.m, self.n))
- gyT = np.reshape(self.gy * self.T, (-1,1))
- drhoy = kron(kron(eye(self.nz-1), diags([0.5,0.5], [0, 1], shape=[self.ny-1,self.ny])), eye(self.nx))
- dAy[:, :-self.nx*self.ny] = (1-self.zeta)*self.k0*lil_matrix(self.dy * drhoy.multiply(gyT)) #element-wise product
-
- Tz = np.pad(self.T, (0, self.nx*self.ny), 'constant', constant_values=1)
- gzTz = np.reshape(self.gz * Tz, (-1,1))
- drhoz = diags([0.5,0.5], [0, -1], shape=[self.nz,self.nz], format="lil")
- drhoz[0,0]=0
- drhoz = kron(drhoz,eye(self.nx*self.ny))
- dAz = (1-self.zeta)*self.k0*self.dz * drhoz.multiply(gzTz)
- d_damping = self.k0*self.alpha**2*diags(-self.T, shape=(self.m, self.n))
-
- self.grad = dg_dp + self.adjoint().reshape(1, -1) * csr_matrix(dAz + dAx + dAy + d_damping)
+ gyT = np.reshape(self.gy * self.T, (-1, 1))
+ drhoy = kron(
+ kron(
+ eye(self.nz - 1),
+ diags([0.5, 0.5], [0, 1], shape=[self.ny - 1, self.ny]),
+ ),
+ eye(self.nx),
+ )
+ dAy[:, : -self.nx * self.ny] = (
+ (1 - self.zeta) * self.k0 * lil_matrix(self.dy * drhoy.multiply(gyT))
+ ) # element-wise product
+
+ Tz = np.pad(self.T, (0, self.nx * self.ny), "constant", constant_values=1)
+ gzTz = np.reshape(self.gz * Tz, (-1, 1))
+ drhoz = diags([0.5, 0.5], [0, -1], shape=[self.nz, self.nz], format="lil")
+ drhoz[0, 0] = 0
+ drhoz = kron(drhoz, eye(self.nx * self.ny))
+ dAz = (1 - self.zeta) * self.k0 * self.dz * drhoz.multiply(gzTz)
+ d_damping = self.k0 * self.alpha**2 * diags(-self.T, shape=(self.m, self.n))
+
+ self.grad = dg_dp + self.adjoint().reshape(1, -1) * csr_matrix(
+ dAz + dAx + dAy + d_damping
+ )
return self.grad[0]
def __call__(self, rho_vector):
Td = self.forward(rho_vector)
grad = self.calculate_grad()
- return Td-self.thresh, grad
+ return Td - self.thresh, grad
def calculate_fd_grad(self, rho_vector, num, db=1e-4):
fdidx = np.random.choice(self.n, num)
fdgrad = []
for k in fdidx:
- rho_vector[k]+=db
+ rho_vector[k] += db
fp = self.forward(rho_vector)
- rho_vector[k]-=2*db
+ rho_vector[k] -= 2 * db
fm = self.forward(rho_vector)
- fdgrad.append((fp-fm)/(2*db))
- rho_vector[k]+=db
+ fdgrad.append((fp - fm) / (2 * db))
+ rho_vector[k] += db
return fdidx, fdgrad
def calculate_all_fd_grad(self, rho_vector, db=1e-4):
fdgrad = []
for k in range(self.n):
- rho_vector[k]+=db
+ rho_vector[k] += db
fp = self.forward(rho_vector)
- rho_vector[k]-=2*db
+ rho_vector[k] -= 2 * db
fm = self.forward(rho_vector)
- fdgrad.append((fp-fm)/(2*db))
- rho_vector[k]+=db
+ fdgrad.append((fp - fm) / (2 * db))
+ rho_vector[k] += db
return range(self.n), np.array(fdgrad)
diff --git a/python/adjoint/filter_source.py b/python/adjoint/filter_source.py
index 6c82cff27..15d0928bd 100644
--- a/python/adjoint/filter_source.py
+++ b/python/adjoint/filter_source.py
@@ -32,23 +32,29 @@ def __init__(
self.bf = [
lambda t, i=i: 0
- if t > self.T else (self.nuttall(t, self.center_frequencies) /
- (self.dt / np.sqrt(2 * np.pi)))[i]
+ if t > self.T
+ else (
+ self.nuttall(t, self.center_frequencies)
+ / (self.dt / np.sqrt(2 * np.pi))
+ )[i]
for i in range(len(self.center_frequencies))
]
self.time_src_bf = [
- CustomSource(src_func=bfi,
- center_frequency=center_frequency,
- is_integrated=False,
- end_time=self.T,
- fwidth=fwidth) for bfi in self.bf
+ CustomSource(
+ src_func=bfi,
+ center_frequency=center_frequency,
+ is_integrated=False,
+ end_time=self.T,
+ fwidth=fwidth,
+ )
+ for bfi in self.bf
]
if time_src:
# get the cutoff of the input signal
- signal_t = np.array([
- time_src.swigobj.current(ti, dt) for ti in self.t
- ]) # time domain signal
+ signal_t = np.array(
+ [time_src.swigobj.current(ti, dt) for ti in self.t]
+ ) # time domain signal
signal_dtft = self.dtft(signal_t, self.frequencies)
else:
signal_dtft = 1
@@ -60,38 +66,47 @@ def __init__(
self.nodes, self.err = self.estimate_impulse_response(H)
# initialize super
- super(FilteredSource, self).__init__(src_func=f,
- center_frequency=center_frequency,
- is_integrated=False,
- end_time=self.T,
- fwidth=fwidth)
+ super(FilteredSource, self).__init__(
+ src_func=f,
+ center_frequency=center_frequency,
+ is_integrated=False,
+ end_time=self.T,
+ fwidth=fwidth,
+ )
def cos_window_td(self, a, t, f0):
- cos_sum = np.sum([(-1)**k * a[k] * np.cos(2 * np.pi * t * k / self.T)
- for k in range(len(a))],
- axis=0)
+ cos_sum = np.sum(
+ [
+ (-1) ** k * a[k] * np.cos(2 * np.pi * t * k / self.T)
+ for k in range(len(a))
+ ],
+ axis=0,
+ )
return np.exp(-1j * 2 * np.pi * f0 * t) * (cos_sum)
def cos_window_fd(self, a, f, f0):
df = 1 / (self.N * self.dt)
cos_sum = a[0] * self.sinc(f, f0)
for k in range(1, len(a)):
- cos_sum += (-1)**k * a[k] / 2 * self.sinc(f, f0 - k * df) + (
- -1)**k * a[k] / 2 * self.sinc(f, f0 + k * df)
+ cos_sum += (-1) ** k * a[k] / 2 * self.sinc(f, f0 - k * df) + (-1) ** k * a[
+ k
+ ] / 2 * self.sinc(f, f0 + k * df)
return cos_sum
def sinc(self, f, f0):
- num = np.where(f == f0, self.N + 1,
- (1 - np.exp(1j * (self.N + 1) * (2 * np.pi) *
- (f - f0) * self.dt)))
- den = np.where(f == f0, 1,
- (1 - np.exp(1j * (2 * np.pi) * (f - f0) * self.dt)))
+ num = np.where(
+ f == f0,
+ self.N + 1,
+ (1 - np.exp(1j * (self.N + 1) * (2 * np.pi) * (f - f0) * self.dt)),
+ )
+ den = np.where(f == f0, 1, (1 - np.exp(1j * (2 * np.pi) * (f - f0) * self.dt)))
return num / den
def rect(self, t, f0):
n = np.rint((t) / self.dt)
- return np.where(n.any() < 0.0 or n.any() > self.N, 0,
- np.exp(-1j * 2 * np.pi * f0 * t))
+ return np.where(
+ n.any() < 0.0 or n.any() > self.N, 0, np.exp(-1j * 2 * np.pi * f0 * t)
+ )
def hann(self, t, f0):
a = [0.5, 0.5]
@@ -115,24 +130,30 @@ def nuttall_dtft(self, f, f0):
## C / f^3 where C is a constant and f is the frequency
def nuttall_bandwidth(self):
tol = 1e-7
- fwidth = 1/(self.N * self.dt)
- frq_inf = 10000*fwidth
+ fwidth = 1 / (self.N * self.dt)
+ frq_inf = 10000 * fwidth
na_dtft = self.nuttall_dtft(frq_inf, 0)
coeff = frq_inf**3 * np.abs(na_dtft)
na_dtft_max = self.nuttall_dtft(0, 0)
- bw = 2 * np.power(coeff / (tol * na_dtft_max), 1/3)
+ bw = 2 * np.power(coeff / (tol * na_dtft_max), 1 / 3)
return bw.real
def dtft(self, y, f):
- return np.matmul(
- np.exp(1j * 2 * np.pi * f[:, np.newaxis] * np.arange(y.size) *
- self.dt), y) * self.dt / np.sqrt(2 * np.pi)
+ return (
+ np.matmul(
+ np.exp(1j * 2 * np.pi * f[:, np.newaxis] * np.arange(y.size) * self.dt),
+ y,
+ )
+ * self.dt
+ / np.sqrt(2 * np.pi)
+ )
def __call__(self, t):
if t > self.T:
return 0
vec = self.nuttall(t, self.center_frequencies) / (
- self.dt / np.sqrt(2 * np.pi)) # compensate for meep dtft
+ self.dt / np.sqrt(2 * np.pi)
+ ) # compensate for meep dtft
return np.inner(vec, self.nodes)
def func(self):
@@ -145,9 +166,10 @@ def estimate_impulse_response(self, H):
# Use vandermonde matrix to calculate weights of each gaussian. Each window is centered at each frequency point.
# TODO: come up with a more sophisticated way to choose temporal window size and basis locations
# that will minimize l2 estimation error and the node weights (since matrix is ill-conditioned)
- vandermonde = self.nuttall_dtft(self.frequencies[:, np.newaxis],
- self.center_frequencies[np.newaxis, :])
+ vandermonde = self.nuttall_dtft(
+ self.frequencies[:, np.newaxis], self.center_frequencies[np.newaxis, :]
+ )
nodes = np.matmul(linalg.pinv(vandermonde), H.T)
H_hat = np.matmul(vandermonde, nodes)
- l2_err = np.sum(np.abs(H - H_hat.T)**2 / np.abs(H)**2)
+ l2_err = np.sum(np.abs(H - H_hat.T) ** 2 / np.abs(H) ** 2)
return nodes, l2_err
diff --git a/python/adjoint/filters.py b/python/adjoint/filters.py
index 703a1fc81..233269e81 100644
--- a/python/adjoint/filters.py
+++ b/python/adjoint/filters.py
@@ -8,24 +8,26 @@
from scipy import special
from scipy import signal
-def _proper_pad(x,n):
- '''
+
+def _proper_pad(x, n):
+ """
Parameters
----------
x : array_like (2D)
Input array. Must be 2D.
n : int
Total size to be padded to.
- '''
+ """
N = x.size
- k = n - (2*N-1)
- return np.concatenate((x,np.zeros((k,)),np.flipud(x[1:])))
+ k = n - (2 * N - 1)
+ return np.concatenate((x, np.zeros((k,)), np.flipud(x[1:])))
+
def _centered(arr, newshape):
- '''Helper function that reformats the padded array of the fft filter operation.
+ """Helper function that reformats the padded array of the fft filter operation.
Borrowed from scipy:
https://github.com/scipy/scipy/blob/v1.4.1/scipy/signal/signaltools.py#L263-L270
- '''
+ """
# Return the center newshape portion of the array.
newshape = np.asarray(newshape)
currshape = np.array(arr.shape)
@@ -34,6 +36,7 @@ def _centered(arr, newshape):
myslice = [slice(startind[k], endind[k]) for k in range(len(endind))]
return arr[tuple(myslice)]
+
def _edge_pad(arr, pad):
# fill sides
@@ -46,10 +49,17 @@ def _edge_pad(arr, pad):
top_left = npa.tile(arr[0, 0], (pad[0][0], pad[1][0])) # top left
top_right = npa.tile(arr[-1, 0], (pad[0][1], pad[1][0])) # top right
bottom_left = npa.tile(arr[0, -1], (pad[0][0], pad[1][1])) # bottom left
- bottom_right = npa.tile(arr[-1, -1],
- (pad[0][1], pad[1][1])) # bottom right
+ bottom_right = npa.tile(arr[-1, -1], (pad[0][1], pad[1][1])) # bottom right
+
+ return npa.concatenate(
+ (
+ npa.concatenate((top_left, top, top_right)),
+ npa.concatenate((left, arr, right)),
+ npa.concatenate((bottom_left, bottom, bottom_right)),
+ ),
+ axis=1,
+ )
- return npa.concatenate((npa.concatenate((top_left, top, top_right)), npa.concatenate((left, arr, right)), npa.concatenate((bottom_left, bottom, bottom_right))), axis=1)
def simple_2d_filter(x, h):
"""A simple 2d filter algorithm that is differentiable with autograd.
@@ -71,11 +81,14 @@ def simple_2d_filter(x, h):
The output of the 2d convolution.
"""
(kx, ky) = x.shape
- x = _edge_pad(x,((kx, kx), (ky, ky)))
- return _centered(npa.real(npa.fft.ifft2(npa.fft.fft2(x)*npa.fft.fft2(h))),(kx, ky))
+ x = _edge_pad(x, ((kx, kx), (ky, ky)))
+ return _centered(
+ npa.real(npa.fft.ifft2(npa.fft.fft2(x) * npa.fft.fft2(h))), (kx, ky)
+ )
+
def cylindrical_filter(x, radius, Lx, Ly, resolution):
- '''A uniform cylindrical filter [1]. Typically allows for sharper transitions.
+ """A uniform cylindrical filter [1]. Typically allows for sharper transitions.
Parameters
----------
@@ -99,19 +112,19 @@ def cylindrical_filter(x, radius, Lx, Ly, resolution):
----------
[1] Lazarov, B. S., Wang, F., & Sigmund, O. (2016). Length scale and manufacturability in
density-based topology optimization. Archive of Applied Mechanics, 86(1-2), 189-218.
- '''
- Nx = int(Lx*resolution)
- Ny = int(Ly*resolution)
- x = x.reshape(Nx, Ny) # Ensure the input is 2D
+ """
+ Nx = int(Lx * resolution)
+ Ny = int(Ly * resolution)
+ x = x.reshape(Nx, Ny) # Ensure the input is 2D
- xv = np.arange(0,Lx/2,1/resolution)
- yv = np.arange(0,Ly/2,1/resolution)
+ xv = np.arange(0, Lx / 2, 1 / resolution)
+ yv = np.arange(0, Ly / 2, 1 / resolution)
cylindrical = lambda a: np.where(a <= radius, 1, 0)
hx = cylindrical(xv)
hy = cylindrical(yv)
- h = np.outer(_proper_pad(hx,3*Nx),_proper_pad(hy,3*Ny))
+ h = np.outer(_proper_pad(hx, 3 * Nx), _proper_pad(hy, 3 * Ny))
# Normalize kernel
h = h / np.sum(h.flatten()) # Normalize the filter
@@ -121,7 +134,7 @@ def cylindrical_filter(x, radius, Lx, Ly, resolution):
def conic_filter(x, radius, Lx, Ly, resolution):
- '''A linear conic filter, also known as a "Hat" filter in the literature [1].
+ """A linear conic filter, also known as a "Hat" filter in the literature [1].
Parameters
----------
@@ -145,19 +158,19 @@ def conic_filter(x, radius, Lx, Ly, resolution):
----------
[1] Lazarov, B. S., Wang, F., & Sigmund, O. (2016). Length scale and manufacturability in
density-based topology optimization. Archive of Applied Mechanics, 86(1-2), 189-218.
- '''
- Nx = int(Lx*resolution)
- Ny = int(Ly*resolution)
- x = x.reshape(Nx, Ny) # Ensure the input is 2D
+ """
+ Nx = int(Lx * resolution)
+ Ny = int(Ly * resolution)
+ x = x.reshape(Nx, Ny) # Ensure the input is 2D
- xv = np.arange(0,Lx/2,1/resolution)
- yv = np.arange(0,Ly/2,1/resolution)
+ xv = np.arange(0, Lx / 2, 1 / resolution)
+ yv = np.arange(0, Ly / 2, 1 / resolution)
conic = lambda a: np.where(np.abs(a**2) <= radius**2, (1 - a / radius), 0)
hx = conic(xv)
hy = conic(yv)
- h = np.outer(_proper_pad(hx,3*Nx),_proper_pad(hy,3*Ny))
+ h = np.outer(_proper_pad(hx, 3 * Nx), _proper_pad(hy, 3 * Ny))
# Normalize kernel
h = h / np.sum(h.flatten()) # Normalize the filter
@@ -167,7 +180,7 @@ def conic_filter(x, radius, Lx, Ly, resolution):
def gaussian_filter(x, sigma, Lx, Ly, resolution):
- '''A simple gaussian filter of the form exp(-x **2 / sigma ** 2) [1].
+ """A simple gaussian filter of the form exp(-x **2 / sigma ** 2) [1].
Parameters
----------
@@ -191,19 +204,19 @@ def gaussian_filter(x, sigma, Lx, Ly, resolution):
----------
[1] Wang, E. W., Sell, D., Phan, T., & Fan, J. A. (2019). Robust design of
topology-optimized metasurfaces. Optical Materials Express, 9(2), 469-482.
- '''
- Nx = int(Lx*resolution)
- Ny = int(Ly*resolution)
- x = x.reshape(Nx, Ny) # Ensure the input is 2D
+ """
+ Nx = int(Lx * resolution)
+ Ny = int(Ly * resolution)
+ x = x.reshape(Nx, Ny) # Ensure the input is 2D
- xv = np.arange(0,Lx/2,1/resolution)
- yv = np.arange(0,Ly/2,1/resolution)
+ xv = np.arange(0, Lx / 2, 1 / resolution)
+ yv = np.arange(0, Ly / 2, 1 / resolution)
- gaussian = lambda a: np.exp(-a**2 / sigma**2)
+ gaussian = lambda a: np.exp(-(a**2) / sigma**2)
hx = gaussian(xv)
hy = gaussian(yv)
- h = np.outer(_proper_pad(hx,3*Nx),_proper_pad(hy,3*Ny))
+ h = np.outer(_proper_pad(hx, 3 * Nx), _proper_pad(hy, 3 * Ny))
# Normalize kernel
h = h / np.sum(h.flatten()) # Normalize the filter
@@ -211,14 +224,15 @@ def gaussian_filter(x, sigma, Lx, Ly, resolution):
# Filter the response
return simple_2d_filter(x, h)
-'''
+
+"""
# ------------------------------------------------------------------------------------ #
Erosion and dilation operators
-'''
+"""
def exponential_erosion(x, radius, beta, Lx, Ly, resolution):
- ''' Performs and exponential erosion operation.
+ """Performs and exponential erosion operation.
Parameters
----------
@@ -247,15 +261,18 @@ def exponential_erosion(x, radius, beta, Lx, Ly, resolution):
[2] Schevenels, M., & Sigmund, O. (2016). On the implementation and effectiveness of
morphological close-open and open-close filters for topology optimization. Structural
and Multidisciplinary Optimization, 54(1), 15-21.
- '''
+ """
x_hat = npa.exp(beta * (1 - x))
- return 1 - npa.log(
- cylindrical_filter(x_hat, radius, Lx, Ly, resolution).flatten()) / beta
+ return (
+ 1
+ - npa.log(cylindrical_filter(x_hat, radius, Lx, Ly, resolution).flatten())
+ / beta
+ )
def exponential_dilation(x, radius, beta, Lx, Ly, resolution):
- ''' Performs a exponential dilation operation.
+ """Performs a exponential dilation operation.
Parameters
----------
@@ -284,15 +301,16 @@ def exponential_dilation(x, radius, beta, Lx, Ly, resolution):
[2] Schevenels, M., & Sigmund, O. (2016). On the implementation and effectiveness of
morphological close-open and open-close filters for topology optimization. Structural
and Multidisciplinary Optimization, 54(1), 15-21.
- '''
+ """
x_hat = npa.exp(beta * x)
- return npa.log(
- cylindrical_filter(x_hat, radius, Lx, Ly, resolution).flatten()) / beta
+ return (
+ npa.log(cylindrical_filter(x_hat, radius, Lx, Ly, resolution).flatten()) / beta
+ )
def heaviside_erosion(x, radius, beta, Lx, Ly, resolution):
- ''' Performs a heaviside erosion operation.
+ """Performs a heaviside erosion operation.
Parameters
----------
@@ -319,14 +337,14 @@ def heaviside_erosion(x, radius, beta, Lx, Ly, resolution):
[1] Guest, J. K., Prévost, J. H., & Belytschko, T. (2004). Achieving minimum length scale in topology
optimization using nodal design variables and projection functions. International journal for
numerical methods in engineering, 61(2), 238-254.
- '''
+ """
x_hat = cylindrical_filter(x, radius, Lx, Ly, resolution).flatten()
return npa.exp(-beta * (1 - x_hat)) + npa.exp(-beta) * (1 - x_hat)
def heaviside_dilation(x, radius, beta, Lx, Ly, resolution):
- ''' Performs a heaviside dilation operation.
+ """Performs a heaviside dilation operation.
Parameters
----------
@@ -353,14 +371,14 @@ def heaviside_dilation(x, radius, beta, Lx, Ly, resolution):
[1] Guest, J. K., Prévost, J. H., & Belytschko, T. (2004). Achieving minimum length scale in topology
optimization using nodal design variables and projection functions. International journal for
numerical methods in engineering, 61(2), 238-254.
- '''
+ """
x_hat = cylindrical_filter(x, radius, Lx, Ly, resolution).flatten()
return 1 - npa.exp(-beta * x_hat) + npa.exp(-beta) * x_hat
def geometric_erosion(x, radius, alpha, Lx, Ly, resolution):
- ''' Performs a geometric erosion operation.
+ """Performs a geometric erosion operation.
Parameters
----------
@@ -386,14 +404,15 @@ def geometric_erosion(x, radius, alpha, Lx, Ly, resolution):
----------
[1] Svanberg, K., & Svärd, H. (2013). Density filters for topology optimization based on the
Pythagorean means. Structural and Multidisciplinary Optimization, 48(5), 859-875.
- '''
+ """
x_hat = npa.log(x + alpha)
- return npa.exp(cylindrical_filter(x_hat, radius, Lx, Ly,
- resolution)).flatten() - alpha
+ return (
+ npa.exp(cylindrical_filter(x_hat, radius, Lx, Ly, resolution)).flatten() - alpha
+ )
def geometric_dilation(x, radius, alpha, Lx, Ly, resolution):
- ''' Performs a geometric dilation operation.
+ """Performs a geometric dilation operation.
Parameters
----------
@@ -419,15 +438,18 @@ def geometric_dilation(x, radius, alpha, Lx, Ly, resolution):
----------
[1] Svanberg, K., & Svärd, H. (2013). Density filters for topology optimization based on the
Pythagorean means. Structural and Multidisciplinary Optimization, 48(5), 859-875.
- '''
+ """
x_hat = npa.log(1 - x + alpha)
- return -npa.exp(cylindrical_filter(x_hat, radius, Lx, Ly,
- resolution)).flatten() + alpha + 1
+ return (
+ -npa.exp(cylindrical_filter(x_hat, radius, Lx, Ly, resolution)).flatten()
+ + alpha
+ + 1
+ )
def harmonic_erosion(x, radius, alpha, Lx, Ly, resolution):
- ''' Performs a harmonic erosion operation.
+ """Performs a harmonic erosion operation.
Parameters
----------
@@ -453,15 +475,14 @@ def harmonic_erosion(x, radius, alpha, Lx, Ly, resolution):
----------
[1] Svanberg, K., & Svärd, H. (2013). Density filters for topology optimization based on the
Pythagorean means. Structural and Multidisciplinary Optimization, 48(5), 859-875.
- '''
+ """
x_hat = 1 / (x + alpha)
- return 1 / cylindrical_filter(x_hat, radius, Lx, Ly,
- resolution).flatten() - alpha
+ return 1 / cylindrical_filter(x_hat, radius, Lx, Ly, resolution).flatten() - alpha
def harmonic_dilation(x, radius, alpha, Lx, Ly, resolution):
- ''' Performs a harmonic dilation operation.
+ """Performs a harmonic dilation operation.
Parameters
----------
@@ -487,21 +508,22 @@ def harmonic_dilation(x, radius, alpha, Lx, Ly, resolution):
----------
[1] Svanberg, K., & Svärd, H. (2013). Density filters for topology optimization based on the
Pythagorean means. Structural and Multidisciplinary Optimization, 48(5), 859-875.
- '''
+ """
x_hat = 1 / (1 - x + alpha)
- return 1 - 1 / cylindrical_filter(x_hat, radius, Lx, Ly,
- resolution).flatten() + alpha
+ return (
+ 1 - 1 / cylindrical_filter(x_hat, radius, Lx, Ly, resolution).flatten() + alpha
+ )
-'''
+"""
# ------------------------------------------------------------------------------------ #
Projection filters
-'''
+"""
def tanh_projection(x, beta, eta):
- '''Projection filter that thresholds the input parameters between 0 and 1. Typically
+ """Projection filter that thresholds the input parameters between 0 and 1. Typically
the "strongest" projection.
Parameters
@@ -521,16 +543,15 @@ def tanh_projection(x, beta, eta):
----------
[1] Wang, F., Lazarov, B. S., & Sigmund, O. (2011). On projection methods, convergence and robust
formulations in topology optimization. Structural and Multidisciplinary Optimization, 43(6), 767-784.
- '''
+ """
- return (npa.tanh(beta * eta) +
- npa.tanh(beta *
- (x - eta))) / (npa.tanh(beta * eta) + npa.tanh(beta *
- (1 - eta)))
+ return (npa.tanh(beta * eta) + npa.tanh(beta * (x - eta))) / (
+ npa.tanh(beta * eta) + npa.tanh(beta * (1 - eta))
+ )
def heaviside_projection(x, beta, eta):
- '''Projection filter that thresholds the input parameters between 0 and 1.
+ """Projection filter that thresholds the input parameters between 0 and 1.
Parameters
----------
@@ -550,22 +571,25 @@ def heaviside_projection(x, beta, eta):
----------
[1] Lazarov, B. S., Wang, F., & Sigmund, O. (2016). Length scale and manufacturability in
density-based topology optimization. Archive of Applied Mechanics, 86(1-2), 189-218.
- '''
+ """
case1 = eta * npa.exp(-beta * (eta - x) / eta) - (eta - x) * npa.exp(-beta)
- case2 = 1 - (1 - eta) * npa.exp(-beta * (x - eta) /
- (1 - eta)) - (eta - x) * npa.exp(-beta)
+ case2 = (
+ 1
+ - (1 - eta) * npa.exp(-beta * (x - eta) / (1 - eta))
+ - (eta - x) * npa.exp(-beta)
+ )
return npa.where(x < eta, case1, case2)
-'''
+"""
# ------------------------------------------------------------------------------------ #
Length scale operations
-'''
+"""
def get_threshold_wang(delta, sigma):
- '''Calculates the threshold point according to the gaussian filter radius (`sigma`) and
+ """Calculates the threshold point according to the gaussian filter radius (`sigma`) and
the perturbation parameter (`sigma`) needed to ensure the proper length
scale and morphological transformation according to Wang et. al. [2].
@@ -587,13 +611,13 @@ def get_threshold_wang(delta, sigma):
photonic crystal waveguides with tailored dispersion properties. JOSA B, 28(3), 387-397.
[2] Wang, E. W., Sell, D., Phan, T., & Fan, J. A. (2019). Robust design of
topology-optimized metasurfaces. Optical Materials Express, 9(2), 469-482.
- '''
+ """
return 0.5 - special.erf(delta / sigma)
def get_eta_from_conic(b, R):
- ''' Extracts the eroded threshold point (`eta_e`) for a conic filter given the desired
+ """Extracts the eroded threshold point (`eta_e`) for a conic filter given the desired
minimum length (`b`) and the filter radius (`R`). This only works for conic filters.
Note that the units for `b` and `R` can be arbitrary so long as they are consistent.
@@ -622,7 +646,7 @@ def get_eta_from_conic(b, R):
Optimization, 43(6), 767-784.
[3] Lazarov, B. S., Wang, F., & Sigmund, O. (2016). Length scale and manufacturability in
density-based topology optimization. Archive of Applied Mechanics, 86(1-2), 189-218.
- '''
+ """
norm_length = b / R
if norm_length < 0:
@@ -668,11 +692,12 @@ def get_conic_radius_from_eta_e(b, eta_e):
return b / (2 - 2 * np.sqrt(1 - eta_e))
else:
raise ValueError(
- "The erosion threshold point (eta_e) must be between 0.5 and 1.")
+ "The erosion threshold point (eta_e) must be between 0.5 and 1."
+ )
def indicator_solid(x, c, filter_f, threshold_f, resolution):
- '''Calculates the indicator function for the void phase needed for minimum length optimization [1].
+ """Calculates the indicator function for the void phase needed for minimum length optimization [1].
Parameters
----------
@@ -696,13 +721,14 @@ def indicator_solid(x, c, filter_f, threshold_f, resolution):
----------
[1] Zhou, M., Lazarov, B. S., Wang, F., & Sigmund, O. (2015). Minimum length scale in topology optimization by
geometric constraints. Computer Methods in Applied Mechanics and Engineering, 293, 266-282.
- '''
+ """
filtered_field = filter_f(x)
design_field = threshold_f(filtered_field)
gradient_filtered_field = npa.gradient(filtered_field)
- grad_mag = (gradient_filtered_field[0] *
- resolution)**2 + (gradient_filtered_field[1] * resolution)**2
+ grad_mag = (gradient_filtered_field[0] * resolution) ** 2 + (
+ gradient_filtered_field[1] * resolution
+ ) ** 2
if grad_mag.ndim != 2:
raise ValueError(
"The gradient fields must be 2 dimensional. Check input array and filter functions."
@@ -711,7 +737,7 @@ def indicator_solid(x, c, filter_f, threshold_f, resolution):
def constraint_solid(x, c, eta_e, filter_f, threshold_f, resolution):
- '''Calculates the constraint function of the solid phase needed for minimum length optimization [1].
+ """Calculates the constraint function of the solid phase needed for minimum length optimization [1].
Parameters
----------
@@ -740,16 +766,17 @@ def constraint_solid(x, c, eta_e, filter_f, threshold_f, resolution):
----------
[1] Zhou, M., Lazarov, B. S., Wang, F., & Sigmund, O. (2015). Minimum length scale in topology optimization by
geometric constraints. Computer Methods in Applied Mechanics and Engineering, 293, 266-282.
- '''
+ """
filtered_field = filter_f(x)
- I_s = indicator_solid(x.reshape(filtered_field.shape), c, filter_f,
- threshold_f, resolution).flatten()
- return npa.mean(I_s * npa.minimum(filtered_field.flatten() - eta_e, 0)**2)
+ I_s = indicator_solid(
+ x.reshape(filtered_field.shape), c, filter_f, threshold_f, resolution
+ ).flatten()
+ return npa.mean(I_s * npa.minimum(filtered_field.flatten() - eta_e, 0) ** 2)
def indicator_void(x, c, filter_f, threshold_f, resolution):
- '''Calculates the indicator function for the void phase needed for minimum length optimization [1].
+ """Calculates the indicator function for the void phase needed for minimum length optimization [1].
Parameters
----------
@@ -773,13 +800,14 @@ def indicator_void(x, c, filter_f, threshold_f, resolution):
----------
[1] Zhou, M., Lazarov, B. S., Wang, F., & Sigmund, O. (2015). Minimum length scale in topology optimization by
geometric constraints. Computer Methods in Applied Mechanics and Engineering, 293, 266-282.
- '''
+ """
filtered_field = filter_f(x).reshape(x.shape)
design_field = threshold_f(filtered_field)
gradient_filtered_field = npa.gradient(filtered_field)
- grad_mag = (gradient_filtered_field[0] *
- resolution)**2 + (gradient_filtered_field[1] * resolution)**2
+ grad_mag = (gradient_filtered_field[0] * resolution) ** 2 + (
+ gradient_filtered_field[1] * resolution
+ ) ** 2
if grad_mag.ndim != 2:
raise ValueError(
"The gradient fields must be 2 dimensional. Check input array and filter functions."
@@ -788,7 +816,7 @@ def indicator_void(x, c, filter_f, threshold_f, resolution):
def constraint_void(x, c, eta_d, filter_f, threshold_f, resolution):
- '''Calculates the constraint function of the void phase needed for minimum length optimization [1].
+ """Calculates the constraint function of the void phase needed for minimum length optimization [1].
Parameters
----------
@@ -817,16 +845,17 @@ def constraint_void(x, c, eta_d, filter_f, threshold_f, resolution):
----------
[1] Zhou, M., Lazarov, B. S., Wang, F., & Sigmund, O. (2015). Minimum length scale in topology optimization by
geometric constraints. Computer Methods in Applied Mechanics and Engineering, 293, 266-282.
- '''
+ """
filtered_field = filter_f(x)
- I_v = indicator_void(x.reshape(filtered_field.shape), c, filter_f,
- threshold_f, resolution).flatten()
- return npa.mean(I_v * npa.minimum(eta_d - filtered_field.flatten(), 0)**2)
+ I_v = indicator_void(
+ x.reshape(filtered_field.shape), c, filter_f, threshold_f, resolution
+ ).flatten()
+ return npa.mean(I_v * npa.minimum(eta_d - filtered_field.flatten(), 0) ** 2)
def gray_indicator(x):
- '''Calculates a measure of "grayness" according to [1].
+ """Calculates a measure of "grayness" according to [1].
Lower numbers ( < 2%) indicate a good amount of binarization [1].
@@ -844,5 +873,5 @@ def gray_indicator(x):
----------
[1] Lazarov, B. S., Wang, F., & Sigmund, O. (2016). Length scale and manufacturability in
density-based topology optimization. Archive of Applied Mechanics, 86(1-2), 189-218.
- '''
+ """
return npa.mean(4 * x.flatten() * (1 - x.flatten())) * 100
diff --git a/python/adjoint/objective.py b/python/adjoint/objective.py
index 6194a22d5..64d940b42 100644
--- a/python/adjoint/objective.py
+++ b/python/adjoint/objective.py
@@ -7,7 +7,8 @@
from meep.simulation import py_v3_to_vec
from collections import namedtuple
-Grid = namedtuple('Grid', ['x', 'y', 'z', 'w'])
+Grid = namedtuple("Grid", ["x", "y", "z", "w"])
+
class ObjectiveQuantity(abc.ABC):
"""A differentiable objective quantity.
@@ -17,6 +18,7 @@ class ObjectiveQuantity(abc.ABC):
frequencies: the frequencies at which the objective quantity is evaluated.
num_freq: the number of frequencies at which the objective quantity is evaluated.
"""
+
def __init__(self, sim):
self.sim = sim
self._eval = None
@@ -48,7 +50,7 @@ def get_evaluation(self):
return self._eval
else:
raise RuntimeError(
- 'You must first run a forward simulation before requesting the evaluation of an objective quantity.'
+ "You must first run a forward simulation before requesting the evaluation of an objective quantity."
)
def _adj_src_scale(self, include_resolution=True):
@@ -68,23 +70,47 @@ def _adj_src_scale(self, include_resolution=True):
) # scaled frequency factor with discrete time derivative fix
# an ugly way to calcuate the scaled dtft of the forward source
- y = np.array([src.swigobj.current(t, dt)
- for t in np.arange(0, T, dt)]) # time domain signal
- fwd_dtft = np.matmul(
- np.exp(1j * 2 * np.pi * self._frequencies[:, np.newaxis] *
- np.arange(y.size) * dt), y) * dt / np.sqrt(
- 2 * np.pi) # dtft
+ y = np.array(
+ [src.swigobj.current(t, dt) for t in np.arange(0, T, dt)]
+ ) # time domain signal
+ fwd_dtft = (
+ np.matmul(
+ np.exp(
+ 1j
+ * 2
+ * np.pi
+ * self._frequencies[:, np.newaxis]
+ * np.arange(y.size)
+ * dt
+ ),
+ y,
+ )
+ * dt
+ / np.sqrt(2 * np.pi)
+ ) # dtft
# Interestingly, the real parts of the DTFT and fourier transform match, but the imaginary parts are very different...
- #fwd_dtft = src.fourier_transform(src.frequency)
- '''
+ # fwd_dtft = src.fourier_transform(src.frequency)
+ """
For some reason, there seems to be an additional phase
factor at the center frequency that needs to be applied
to *all* frequencies...
- '''
- src_center_dtft = np.matmul(
- np.exp(1j * 2 * np.pi * np.array([src.frequency])[:, np.newaxis] *
- np.arange(y.size) * dt), y) * dt / np.sqrt(2 * np.pi)
+ """
+ src_center_dtft = (
+ np.matmul(
+ np.exp(
+ 1j
+ * 2
+ * np.pi
+ * np.array([src.frequency])[:, np.newaxis]
+ * np.arange(y.size)
+ * dt
+ ),
+ y,
+ )
+ * dt
+ / np.sqrt(2 * np.pi)
+ )
adj_src_phase = np.exp(1j * np.angle(src_center_dtft)) * self.fwidth_scale
if self._frequencies.size == 1:
@@ -109,10 +135,11 @@ def _create_time_profile(self, fwidth_frac=0.1, adj_cutoff=5):
The user may specify a scalar valued objective function across multiple frequencies (e.g. MSE) in
which case we should check that all the frequencies fit in the specified bandwidth.
"""
- self.fwidth_scale = np.exp(-2j*np.pi*adj_cutoff/fwidth_frac)
+ self.fwidth_scale = np.exp(-2j * np.pi * adj_cutoff / fwidth_frac)
return mp.GaussianSource(
np.mean(self._frequencies),
- fwidth=fwidth_frac * np.mean(self._frequencies),cutoff=adj_cutoff
+ fwidth=fwidth_frac * np.mean(self._frequencies),
+ cutoff=adj_cutoff,
)
@@ -129,20 +156,24 @@ class EigenmodeCoefficient(ObjectiveQuantity):
specifying `kpoint_func`. When specified, this overrides the effect of
`forward` and should have a value of either 0 or 1.
"""
- def __init__(self,
- sim,
- volume,
- mode,
- forward=True,
- kpoint_func=None,
- kpoint_func_overlap_idx=0,
- decimation_factor=0,
- **kwargs):
+
+ def __init__(
+ self,
+ sim,
+ volume,
+ mode,
+ forward=True,
+ kpoint_func=None,
+ kpoint_func_overlap_idx=0,
+ decimation_factor=0,
+ **kwargs
+ ):
super().__init__(sim)
if kpoint_func_overlap_idx not in [0, 1]:
raise ValueError(
- '`kpoint_func_overlap_idx` should be either 0 or 1, but got %d'
- % (kpoint_func_overlap_idx, ))
+ "`kpoint_func_overlap_idx` should be either 0 or 1, but got %d"
+ % (kpoint_func_overlap_idx,)
+ )
self.volume = volume
self.mode = mode
self.forward = forward
@@ -174,13 +205,14 @@ def place_adjoint_source(self, dJ):
if self.kpoint_func:
eig_kpoint = -1 * self.kpoint_func(time_src.frequency, self.mode)
else:
- center_frequency = 0.5 * (np.min(self.frequencies) + np.max(
- self.frequencies))
+ center_frequency = 0.5 * (
+ np.min(self.frequencies) + np.max(self.frequencies)
+ )
direction = mp.Vector3(
- *(np.eye(3)[self._monitor.normal_direction] *
- np.abs(center_frequency)))
+ *(np.eye(3)[self._monitor.normal_direction] * np.abs(center_frequency))
+ )
eig_kpoint = -1 * direction if self.forward else direction
-
+
if self._frequencies.size == 1:
amp = da_dE * dJ * scale
src = time_src
@@ -211,10 +243,12 @@ def __call__(self):
kpoint_func = self.kpoint_func
overlap_idx = self.kpoint_func_overlap_idx
else:
- center_frequency = 0.5 * (np.min(self.frequencies) + np.max(
- self.frequencies))
- kpoint = mp.Vector3(*(np.eye(3)[self._monitor.normal_direction] *
- np.abs(center_frequency)))
+ center_frequency = 0.5 * (
+ np.min(self.frequencies) + np.max(self.frequencies)
+ )
+ kpoint = mp.Vector3(
+ *(np.eye(3)[self._monitor.normal_direction] * np.abs(center_frequency))
+ )
kpoint_func = lambda *not_used: kpoint if self.forward else -1 * kpoint
overlap_idx = 0
ob = self.sim.get_eigenmode_coefficients(
@@ -242,22 +276,32 @@ def __init__(self, sim, volume, component, yee_grid=False, decimation_factor=0):
def register_monitors(self, frequencies):
self._frequencies = np.asarray(frequencies)
self._monitor = self.sim.add_dft_fields(
- [self.component], self._frequencies, where=self.volume, yee_grid=self.yee_grid, decimation_factor=self.decimation_factor)
+ [self.component],
+ self._frequencies,
+ where=self.volume,
+ yee_grid=self.yee_grid,
+ decimation_factor=self.decimation_factor,
+ )
return self._monitor
def place_adjoint_source(self, dJ):
time_src = self._create_time_profile()
sources = []
- mon_size = self.sim.fields.dft_monitor_size(self._monitor.swigobj, self.volume.swigobj, self.component)
+ mon_size = self.sim.fields.dft_monitor_size(
+ self._monitor.swigobj, self.volume.swigobj, self.component
+ )
dJ = dJ.astype(np.complex128)
- if np.prod(mon_size)*self.num_freq != dJ.size and np.prod(mon_size)*self.num_freq**2 != dJ.size:
- raise ValueError('The format of J is incorrect!')
+ if (
+ np.prod(mon_size) * self.num_freq != dJ.size
+ and np.prod(mon_size) * self.num_freq**2 != dJ.size
+ ):
+ raise ValueError("The format of J is incorrect!")
# The objective function J is a vector. Each component corresponds to a frequency.
- if np.prod(mon_size)*self.num_freq**2 == dJ.size and self.num_freq > 1:
- dJ = np.sum(dJ,axis=1)
- '''The adjoint solver requires the objective function
+ if np.prod(mon_size) * self.num_freq**2 == dJ.size and self.num_freq > 1:
+ dJ = np.sum(dJ, axis=1)
+ """The adjoint solver requires the objective function
to be scalar valued with regard to objective arguments
and position, but the function may be vector valued
with regard to frequency. In this case, the Jacobian
@@ -265,28 +309,45 @@ def place_adjoint_source(self, dJ):
frequencies. Because of linearity, we can sum across the
second frequency dimension to calculate a frequency
scale factor for each point (rather than a scale vector).
- '''
+ """
- self.all_fouriersrcdata = self._monitor.swigobj.fourier_sourcedata(self.volume.swigobj, self.component, self.sim.fields, dJ)
+ self.all_fouriersrcdata = self._monitor.swigobj.fourier_sourcedata(
+ self.volume.swigobj, self.component, self.sim.fields, dJ
+ )
for fourier_data in self.all_fouriersrcdata:
amp_arr = np.array(fourier_data.amp_arr).reshape(-1, self.num_freq)
scale = amp_arr * self._adj_src_scale(include_resolution=False)
if self.num_freq == 1:
- sources += [mp.IndexedSource(time_src, fourier_data, scale[:,0], not self.yee_grid)]
+ sources += [
+ mp.IndexedSource(
+ time_src, fourier_data, scale[:, 0], not self.yee_grid
+ )
+ ]
else:
- src = FilteredSource(time_src.frequency,self._frequencies,scale,self.sim.fields.dt)
+ src = FilteredSource(
+ time_src.frequency, self._frequencies, scale, self.sim.fields.dt
+ )
(num_basis, num_pts) = src.nodes.shape
for basis_i in range(num_basis):
- sources += [mp.IndexedSource(src.time_src_bf[basis_i], fourier_data, src.nodes[basis_i], not self.yee_grid)]
+ sources += [
+ mp.IndexedSource(
+ src.time_src_bf[basis_i],
+ fourier_data,
+ src.nodes[basis_i],
+ not self.yee_grid,
+ )
+ ]
return sources
def __call__(self):
- self._eval = np.array([
- self.sim.get_dft_array(self._monitor, self.component, i)
- for i in range(self.num_freq)
- ])
+ self._eval = np.array(
+ [
+ self.sim.get_dft_array(self._monitor, self.component, i)
+ for i in range(self.num_freq)
+ ]
+ )
return self._eval
@@ -294,7 +355,7 @@ class Near2FarFields(ObjectiveQuantity):
def __init__(self, sim, Near2FarRegions, far_pts, decimation_factor=0):
super().__init__(sim)
self.Near2FarRegions = Near2FarRegions
- self.far_pts = far_pts #list of far pts
+ self.far_pts = far_pts # list of far pts
self._nfar_pts = len(far_pts)
self.decimation_factor = decimation_factor
@@ -322,7 +383,8 @@ def place_adjoint_source(self, dJ):
)
all_nearsrcdata = self._monitor.swigobj.near_sourcedata(
- far_pt_vec, farpt_list, self._nfar_pts, dJ)
+ far_pt_vec, farpt_list, self._nfar_pts, dJ
+ )
for near_data in all_nearsrcdata:
cur_comp = near_data.near_fd_comp
amp_arr = np.array(near_data.amp_arr).reshape(-1, self.num_freq)
@@ -349,12 +411,12 @@ def place_adjoint_source(self, dJ):
return sources
def __call__(self):
- self._eval = np.array([
- self.sim.get_farfield(self._monitor, far_pt)
- for far_pt in self.far_pts
- ]).reshape((self._nfar_pts, self.num_freq, 6))
+ self._eval = np.array(
+ [self.sim.get_farfield(self._monitor, far_pt) for far_pt in self.far_pts]
+ ).reshape((self._nfar_pts, self.num_freq, 6))
return self._eval
-
+
+
class LDOS(ObjectiveQuantity):
def __init__(self, sim, decimation_factor=0, **kwargs):
super().__init__(sim)
@@ -372,7 +434,9 @@ def place_adjoint_source(self, dJ):
dJ = np.sum(dJ, axis=1)
dJ = dJ.flatten()
sources = []
- forward_f_scale = np.array([self.ldos_scale/self.ldos_Jdata[k] for k in range(self.num_freq)])
+ forward_f_scale = np.array(
+ [self.ldos_scale / self.ldos_Jdata[k] for k in range(self.num_freq)]
+ )
if self._frequencies.size == 1:
amp = (dJ * self._adj_src_scale(False) * forward_f_scale)[0]
src = time_src
@@ -387,9 +451,25 @@ def place_adjoint_source(self, dJ):
amp = 1
for forward_src_i in self.forward_src:
if isinstance(forward_src_i, mp.EigenModeSource):
- src_i = mp.EigenModeSource(src, component=forward_src_i.component, eig_kpoint = forward_src_i.eig_kpoint, amplitude=amp, eig_band=forward_src_i.eig_band, size = forward_src_i.size,center=forward_src_i.center, **self.srckwarg)
+ src_i = mp.EigenModeSource(
+ src,
+ component=forward_src_i.component,
+ eig_kpoint=forward_src_i.eig_kpoint,
+ amplitude=amp,
+ eig_band=forward_src_i.eig_band,
+ size=forward_src_i.size,
+ center=forward_src_i.center,
+ **self.srckwarg,
+ )
else:
- src_i = mp.Source(src, component=forward_src_i.component, amplitude=amp, size = forward_src_i.size,center=forward_src_i.center, **self.srckwarg)
+ src_i = mp.Source(
+ src,
+ component=forward_src_i.component,
+ amplitude=amp,
+ size=forward_src_i.size,
+ center=forward_src_i.center,
+ **self.srckwarg,
+ )
if mp.is_electric(src_i.component):
src_i.amplitude *= -1
sources += [src_i]
diff --git a/python/adjoint/optimization_problem.py b/python/adjoint/optimization_problem.py
index 2d3d7b57d..7b026171c 100644
--- a/python/adjoint/optimization_problem.py
+++ b/python/adjoint/optimization_problem.py
@@ -5,6 +5,7 @@
from . import utils, DesignRegion, LDOS
+
class OptimizationProblem(object):
"""Top-level class in the MEEP adjoint module.
@@ -18,6 +19,7 @@ class OptimizationProblem(object):
This is done by the __call__ method.
"""
+
def __init__(
self,
simulation,
@@ -32,7 +34,7 @@ def __init__(
decimation_factor=0,
minimum_run_time=0,
maximum_run_time=None,
- finite_difference_step=utils.FD_DEFAULT
+ finite_difference_step=utils.FD_DEFAULT,
):
self.sim = simulation
@@ -49,9 +51,7 @@ def __init__(
else:
self.design_regions = [design_regions]
- self.num_design_params = [
- ni.num_design_params for ni in self.design_regions
- ]
+ self.num_design_params = [ni.num_design_params for ni in self.design_regions]
self.num_design_regions = len(self.design_regions)
# TODO typecheck frequency choices
@@ -79,15 +79,20 @@ def __init__(
self.fcen_idx = int(
np.argmin(
np.abs(
- np.asarray(self.frequencies) -
- np.mean(np.asarray(self.frequencies)))**
- 2)) # index of center frequency
+ np.asarray(self.frequencies)
+ - np.mean(np.asarray(self.frequencies))
+ )
+ ** 2
+ )
+ ) # index of center frequency
self.decay_by = decay_by
self.decimation_factor = decimation_factor
self.minimum_run_time = minimum_run_time
self.maximum_run_time = maximum_run_time
- self.finite_difference_step = finite_difference_step # step size used in Aᵤ computation
+ self.finite_difference_step = (
+ finite_difference_step # step size used in Aᵤ computation
+ )
# store sources for finite difference estimations
self.forward_sources = self.sim.sources
@@ -101,8 +106,7 @@ def __init__(
self.gradient = []
def __call__(self, rho_vector=None, need_value=True, need_gradient=True, beta=None):
- """Evaluate value and/or gradient of objective function.
- """
+ """Evaluate value and/or gradient of objective function."""
if rho_vector:
self.update_design(rho_vector=rho_vector, beta=beta)
@@ -127,7 +131,9 @@ def __call__(self, rho_vector=None, need_value=True, need_gradient=True, beta=No
print("Calculating gradient...")
self.calculate_gradient()
else:
- raise ValueError(f"Incorrect solver state detected: {self.current_state}")
+ raise ValueError(
+ f"Incorrect solver state detected: {self.current_state}"
+ )
return self.f0, self.gradient
@@ -140,6 +146,7 @@ def get_fdf_funcs(self):
f_func(beta) = objective function value for design variables beta
df_func(beta) = objective function gradient for design variables beta
"""
+
def _f(x=None):
(fq, _) = self.__call__(rho_vector=x, need_gradient=False)
return fq
@@ -158,7 +165,9 @@ def prepare_forward_run(self):
self.sim.change_sources(self.forward_sources)
# register user specified monitors
- self.forward_monitors = [m.register_monitors(self.frequencies) for m in self.objective_arguments]
+ self.forward_monitors = [
+ m.register_monitors(self.frequencies) for m in self.objective_arguments
+ ]
# register design region
self.forward_design_region_monitors = utils.install_design_region_monitors(
@@ -171,15 +180,18 @@ def forward_run(self):
# Forward run
if any(isinstance(m, LDOS) for m in self.objective_arguments):
- self.sim.run(mp.dft_ldos(self.frequencies), until_after_sources=mp.stop_when_dft_decayed(
- self.decay_by,
- self.minimum_run_time,
- self.maximum_run_time))
+ self.sim.run(
+ mp.dft_ldos(self.frequencies),
+ until_after_sources=mp.stop_when_dft_decayed(
+ self.decay_by, self.minimum_run_time, self.maximum_run_time
+ ),
+ )
else:
- self.sim.run(until_after_sources=mp.stop_when_dft_decayed(
- self.decay_by,
- self.minimum_run_time,
- self.maximum_run_time))
+ self.sim.run(
+ until_after_sources=mp.stop_when_dft_decayed(
+ self.decay_by, self.minimum_run_time, self.maximum_run_time
+ )
+ )
# record objective quantities from user specified monitors
self.results_list = [m() for m in self.objective_arguments]
@@ -199,12 +211,12 @@ def prepare_adjoint_run(self):
self.adjoint_sources = [[] for _ in range(len(self.objective_functions))]
for ar in range(len(self.objective_functions)):
for mi, m in enumerate(self.objective_arguments):
- dJ = jacobian(self.objective_functions[ar],
- mi)(*self.results_list)
+ dJ = jacobian(self.objective_functions[ar], mi)(*self.results_list)
# get gradient of objective w.r.t. monitor
if np.any(dJ):
self.adjoint_sources[ar] += m.place_adjoint_source(
- dJ) # place the appropriate adjoint sources
+ dJ
+ ) # place the appropriate adjoint sources
def adjoint_run(self):
# set up adjoint sources and monitors
@@ -216,7 +228,7 @@ def adjoint_run(self):
# flip the k point
if self.sim.k_point:
- self.sim.change_k_point(-1*self.sim.k_point)
+ self.sim.change_k_point(-1 * self.sim.k_point)
self.adjoint_design_region_monitors = []
for ar in range(len(self.objective_functions)):
@@ -228,46 +240,57 @@ def adjoint_run(self):
self.sim.change_sources(self.adjoint_sources[ar])
# register design dft fields
- self.adjoint_design_region_monitors.append(utils.install_design_region_monitors(
- self.sim, self.design_regions, self.frequencies, self.decimation_factor
- ))
+ self.adjoint_design_region_monitors.append(
+ utils.install_design_region_monitors(
+ self.sim,
+ self.design_regions,
+ self.frequencies,
+ self.decimation_factor,
+ )
+ )
self.sim._evaluate_dft_objects()
# Adjoint run
- self.sim.run(until_after_sources=mp.stop_when_dft_decayed(
- self.decay_by,
- self.minimum_run_time,
- self.maximum_run_time
- ))
+ self.sim.run(
+ until_after_sources=mp.stop_when_dft_decayed(
+ self.decay_by, self.minimum_run_time, self.maximum_run_time
+ )
+ )
# reset the m number
if utils._check_if_cylindrical(self.sim):
self.sim.m = -self.sim.m
# reset the k point
- if self.sim.k_point: self.sim.k_point *= -1
+ if self.sim.k_point:
+ self.sim.k_point *= -1
# update optimizer's state
self.current_state = "ADJ"
def calculate_gradient(self):
# Iterate through all design regions and calculate gradient
- self.gradient = [[
- dr.get_gradient(
- self.sim,
- self.adjoint_design_region_monitors[ar][dri],
- self.forward_design_region_monitors[dri],
- self.frequencies,
- self.finite_difference_step
- ) for dri, dr in enumerate(self.design_regions)
- ] for ar in range(len(self.objective_functions))]
+ self.gradient = [
+ [
+ dr.get_gradient(
+ self.sim,
+ self.adjoint_design_region_monitors[ar][dri],
+ self.forward_design_region_monitors[dri],
+ self.frequencies,
+ self.finite_difference_step,
+ )
+ for dri, dr in enumerate(self.design_regions)
+ ]
+ for ar in range(len(self.objective_functions))
+ ]
# Cleanup list of lists
if len(self.gradient) == 1:
self.gradient = self.gradient[0] # only one objective function
if len(self.gradient) == 1:
self.gradient = self.gradient[
- 0] # only one objective function and one design region
+ 0
+ ] # only one objective function and one design region
elif len(self.gradient[0]) == 1:
self.gradient = [
g[0] for g in self.gradient
@@ -282,7 +305,7 @@ def calculate_fd_gradient(
design_variables_idx=0,
filter=None,
):
- '''
+ """
Estimate central difference gradients.
Parameters
@@ -299,7 +322,7 @@ def calculate_fd_gradient(
fd_gradient ... : lists
[number of objective functions][number of gradients]
- '''
+ """
if filter is None:
filter = lambda x: x
if num_gradients < self.num_design_params[design_variables_idx]:
@@ -316,7 +339,7 @@ def calculate_fd_gradient(
"The requested number of gradients must be less than or equal to the total number of design parameters."
)
- assert db < 0.2, "The step size of finite difference is too large."
+ assert db < 0.2, "The step size of finite difference is too large."
# cleanup simulation object
self.sim.reset_meep()
@@ -327,9 +350,8 @@ def calculate_fd_gradient(
for k in fd_gradient_idx:
- b0 = np.ones((self.num_design_params[design_variables_idx], ))
- b0[:] = (self.design_regions[design_variables_idx].
- design_parameters.weights)
+ b0 = np.ones((self.num_design_params[design_variables_idx],))
+ b0[:] = self.design_regions[design_variables_idx].design_parameters.weights
# -------------------------------------------- #
# left function evaluation
# -------------------------------------------- #
@@ -337,22 +359,31 @@ def calculate_fd_gradient(
# assign new design vector
in_interior = True # b0[k] is not too close to the boundaries 0 and 1
- if b0[k] < db or b0[k]+db > 1: in_interior = False # b0[k] is too close to 0 or 1
+ if b0[k] < db or b0[k] + db > 1:
+ in_interior = False # b0[k] is too close to 0 or 1
- if b0[k] >= db: b0[k] -= db
- self.design_regions[design_variables_idx].update_design_parameters(
- b0)
+ if b0[k] >= db:
+ b0[k] -= db
+ self.design_regions[design_variables_idx].update_design_parameters(b0)
# initialize design monitors
- self.forward_monitors = [m.register_monitors(self.frequencies) for m in self.objective_arguments]
+ self.forward_monitors = [
+ m.register_monitors(self.frequencies) for m in self.objective_arguments
+ ]
if any(isinstance(m, LDOS) for m in self.objective_arguments):
- self.sim.run(mp.dft_ldos(self.frequencies), until_after_sources=mp.stop_when_energy_decayed(dt=1, decay_by=1e-11))
+ self.sim.run(
+ mp.dft_ldos(self.frequencies),
+ until_after_sources=mp.stop_when_energy_decayed(
+ dt=1, decay_by=1e-11
+ ),
+ )
else:
- self.sim.run(until_after_sources=mp.stop_when_dft_decayed(
- self.decay_by,
- self.minimum_run_time,
- self.maximum_run_time))
+ self.sim.run(
+ until_after_sources=mp.stop_when_dft_decayed(
+ self.decay_by, self.minimum_run_time, self.maximum_run_time
+ )
+ )
# record final objective function value
results_list = [m() for m in self.objective_arguments]
@@ -365,20 +396,27 @@ def calculate_fd_gradient(
# assign new design vector
b0[k] += 2 * db if in_interior else db
- self.design_regions[design_variables_idx].update_design_parameters(
- b0)
+ self.design_regions[design_variables_idx].update_design_parameters(b0)
# initialize design monitors
- self.forward_monitors = [m.register_monitors(self.frequencies) for m in self.objective_arguments]
+ self.forward_monitors = [
+ m.register_monitors(self.frequencies) for m in self.objective_arguments
+ ]
# add monitor used to track dft convergence
if any(isinstance(m, LDOS) for m in self.objective_arguments):
- self.sim.run(mp.dft_ldos(self.frequencies), until_after_sources=mp.stop_when_energy_decayed(dt=1, decay_by=1e-11))
+ self.sim.run(
+ mp.dft_ldos(self.frequencies),
+ until_after_sources=mp.stop_when_energy_decayed(
+ dt=1, decay_by=1e-11
+ ),
+ )
else:
- self.sim.run(until_after_sources=mp.stop_when_dft_decayed(
- self.decay_by,
- self.minimum_run_time,
- self.maximum_run_time))
+ self.sim.run(
+ until_after_sources=mp.stop_when_dft_decayed(
+ self.decay_by, self.minimum_run_time, self.maximum_run_time
+ )
+ )
# record final objective function value
results_list = [m() for m in self.objective_arguments]
@@ -387,10 +425,12 @@ def calculate_fd_gradient(
# -------------------------------------------- #
# estimate derivative
# -------------------------------------------- #
- fd_gradient.append([
- np.squeeze((fp[fi] - fm[fi]) / db / (2 if in_interior else 1))
- for fi in range(len(self.objective_functions))
- ])
+ fd_gradient.append(
+ [
+ np.squeeze((fp[fi] - fm[fi]) / db / (2 if in_interior else 1))
+ for fi in range(len(self.objective_functions))
+ ]
+ )
# Cleanup singleton dimensions
if len(fd_gradient) == 1:
@@ -416,14 +456,13 @@ def update_design(self, rho_vector, beta=None):
self.current_state = "INIT"
def get_objective_arguments(self):
- '''Return list of evaluated objective arguments.
- '''
+ """Return list of evaluated objective arguments."""
return [m.get_evaluation() for m in self.objective_arguments]
def plot2D(self, init_opt=False, **kwargs):
"""Produce a graphical visualization of the geometry and/or fields,
- as appropriately autodetermined based on the current state of
- progress.
+ as appropriately autodetermined based on the current state of
+ progress.
"""
if init_opt:
@@ -431,9 +470,11 @@ def plot2D(self, init_opt=False, **kwargs):
self.sim.plot2D(**kwargs)
+
def atleast_3d(*arys):
from numpy import array, asanyarray, newaxis
- '''
+
+ """
Modified version of numpy's `atleast_3d`
Keeps one dimensional array data in first dimension, as
@@ -455,7 +496,7 @@ def atleast_3d(*arys):
returned. For example, a 1-D array of shape ``(N,)`` becomes a view
of shape ``(N, 1, 1)``, and a 2-D array of shape ``(M, N)`` becomes a
view of shape ``(M, N, 1)``.
- '''
+ """
res = []
for ary in arys:
ary = asanyarray(ary)
diff --git a/python/adjoint/utils.py b/python/adjoint/utils.py
index 7d38a1bd4..0c6a461bc 100644
--- a/python/adjoint/utils.py
+++ b/python/adjoint/utils.py
@@ -21,14 +21,9 @@
# default finite difference step size when calculating Aᵤ
FD_DEFAULT = 1e-3
+
class DesignRegion(object):
- def __init__(
- self,
- design_parameters,
- volume=None,
- size=None,
- center=mp.Vector3()
- ):
+ def __init__(self, design_parameters, volume=None, size=None, center=mp.Vector3()):
self.volume = volume or mp.Volume(center=center, size=size)
self.size = self.volume.size
self.center = self.volume.center
@@ -38,35 +33,54 @@ def __init__(
def update_design_parameters(self, design_parameters):
self.design_parameters.update_weights(design_parameters)
- def update_beta(self,beta):
- self.design_parameters.beta=beta
+ def update_beta(self, beta):
+ self.design_parameters.beta = beta
- def get_gradient(self, sim, fields_a, fields_f, frequencies, finite_difference_step):
+ def get_gradient(
+ self, sim, fields_a, fields_f, frequencies, finite_difference_step
+ ):
num_freqs = onp.array(frequencies).size
- '''We have the option to linearly scale the gradients up front
+ """We have the option to linearly scale the gradients up front
using the scalegrad parameter (leftover from MPB API). Not
currently needed for any existing feature (but available for
- future use)'''
+ future use)"""
scalegrad = 1
grad = onp.zeros((num_freqs, self.num_design_params)) # preallocate
vol = sim._fit_volume_to_simulation(self.volume)
# compute the gradient
- mp._get_gradient(grad,scalegrad,
- fields_a[0].swigobj,fields_a[1].swigobj,fields_a[2].swigobj,
- fields_f[0].swigobj,fields_f[1].swigobj,fields_f[2].swigobj,
- sim.gv,vol.swigobj,onp.array(frequencies),
- sim.geps,finite_difference_step)
+ mp._get_gradient(
+ grad,
+ scalegrad,
+ fields_a[0].swigobj,
+ fields_a[1].swigobj,
+ fields_a[2].swigobj,
+ fields_f[0].swigobj,
+ fields_f[1].swigobj,
+ fields_f[2].swigobj,
+ sim.gv,
+ vol.swigobj,
+ onp.array(frequencies),
+ sim.geps,
+ finite_difference_step,
+ )
return onp.squeeze(grad).T
+
def _check_if_cylindrical(sim):
return sim.is_cylindrical or (sim.dimensions == mp.CYLINDRICAL)
+
def _compute_components(sim):
- return _ADJOINT_FIELD_COMPONENTS_CYL if _check_if_cylindrical(sim) else _ADJOINT_FIELD_COMPONENTS
+ return (
+ _ADJOINT_FIELD_COMPONENTS_CYL
+ if _check_if_cylindrical(sim)
+ else _ADJOINT_FIELD_COMPONENTS
+ )
+
def _make_at_least_nd(x: onp.ndarray, dims: int = 3) -> onp.ndarray:
"""Makes an array have at least the specified number of dimensions."""
- return onp.reshape(x, x.shape + onp.maximum(dims - x.ndim, 0) * (1, ))
+ return onp.reshape(x, x.shape + onp.maximum(dims - x.ndim, 0) * (1,))
def calculate_vjps(
@@ -77,7 +91,7 @@ def calculate_vjps(
adj_fields: List[List[onp.ndarray]],
design_variable_shapes: List[Tuple[int, ...]],
sum_freq_partials: bool = True,
- finite_difference_step: float = FD_DEFAULT
+ finite_difference_step: float = FD_DEFAULT,
) -> List[onp.ndarray]:
"""Calculates the VJP for a given set of forward and adjoint fields."""
vjps = [
@@ -87,7 +101,8 @@ def calculate_vjps(
fwd_fields[i],
frequencies,
finite_difference_step,
- ) for i, design_region in enumerate(design_regions)
+ )
+ for i, design_region in enumerate(design_regions)
]
if sum_freq_partials:
vjps = [
@@ -96,7 +111,7 @@ def calculate_vjps(
]
else:
vjps = [
- vjp.reshape(shape + (-1, ))
+ vjp.reshape(shape + (-1,))
for vjp, shape in zip(vjps, design_variable_shapes)
]
return vjps
@@ -118,7 +133,20 @@ def install_design_region_monitors(
decimation_factor: int = 0,
) -> List[mp.DftFields]:
"""Installs DFT field monitors at the design regions of the simulation."""
- return [[simulation.add_dft_fields([comp], frequencies, where=design_region.volume, yee_grid=True, decimation_factor=decimation_factor, persist=True) for comp in _compute_components(simulation)] for design_region in design_regions]
+ return [
+ [
+ simulation.add_dft_fields(
+ [comp],
+ frequencies,
+ where=design_region.volume,
+ yee_grid=True,
+ decimation_factor=decimation_factor,
+ persist=True,
+ )
+ for comp in _compute_components(simulation)
+ ]
+ for design_region in design_regions
+ ]
def gather_monitor_values(monitors: List[ObjectiveQuantity]) -> onp.ndarray:
@@ -175,8 +203,8 @@ def gather_design_region_fields(
def validate_and_update_design(
- design_regions: List[DesignRegion],
- design_variables: Iterable[onp.ndarray]) -> None:
+ design_regions: List[DesignRegion], design_variables: Iterable[onp.ndarray]
+) -> None:
"""Validate the design regions and variables.
In particular the design variable should be 1,2,3-D and the design region
@@ -190,18 +218,24 @@ def validate_and_update_design(
Raises:
ValueError if the validation of dimensions fails.
"""
- for i, (design_region,
- design_variable) in enumerate(zip(design_regions,
- design_variables)):
+ for i, (design_region, design_variable) in enumerate(
+ zip(design_regions, design_variables)
+ ):
if design_variable.ndim not in [1, 2, 3]:
- raise ValueError(f'Design variables should be 1D, 2D, or 3D, but the design variable at index {i} had a shape of {design_variable.shape}.')
+ raise ValueError(
+ f"Design variables should be 1D, 2D, or 3D, but the design variable at index {i} had a shape of {design_variable.shape}."
+ )
design_region_shape = tuple(
- int(x) for x in design_region.design_parameters.grid_size)
- design_variable_padded_shape = design_variable.shape + (1, ) * (
- 3 - design_variable.ndim)
+ int(x) for x in design_region.design_parameters.grid_size
+ )
+ design_variable_padded_shape = design_variable.shape + (1,) * (
+ 3 - design_variable.ndim
+ )
if design_variable_padded_shape != design_region_shape:
- raise ValueError(f'The design variable at index {i} with a shape of {design_variable.shape} is incompatible with the associated design region, which has a shape of {design_region_shape}.')
+ raise ValueError(
+ f"The design variable at index {i} with a shape of {design_variable.shape} is incompatible with the associated design region, which has a shape of {design_region_shape}."
+ )
design_variable = onp.asarray(design_variable, dtype=onp.float64)
# Update the design variable in Meep
@@ -209,25 +243,30 @@ def validate_and_update_design(
def create_adjoint_sources(
- monitors: Iterable[ObjectiveQuantity],
- monitor_values_grad: onp.ndarray) -> List[mp.Source]:
- monitor_values_grad = onp.asarray(monitor_values_grad,
- dtype=onp.complex64 if mp.is_single_precision() else onp.complex128)
+ monitors: Iterable[ObjectiveQuantity], monitor_values_grad: onp.ndarray
+) -> List[mp.Source]:
+ monitor_values_grad = onp.asarray(
+ monitor_values_grad,
+ dtype=onp.complex64 if mp.is_single_precision() else onp.complex128,
+ )
if not onp.any(monitor_values_grad):
raise RuntimeError(
- 'The gradient of all monitor values is zero, which '
- 'means that no adjoint sources can be placed to set '
- 'up an adjoint simulation in Meep. Possible causes '
- 'could be:\n\n'
- ' * the forward simulation was not run for long enough '
- 'to allow the input pulse(s) to reach the monitors'
- ' * the monitor values are disconnected from the '
- 'objective function output.')
+ "The gradient of all monitor values is zero, which "
+ "means that no adjoint sources can be placed to set "
+ "up an adjoint simulation in Meep. Possible causes "
+ "could be:\n\n"
+ " * the forward simulation was not run for long enough "
+ "to allow the input pulse(s) to reach the monitors"
+ " * the monitor values are disconnected from the "
+ "objective function output."
+ )
adjoint_sources = []
for monitor_idx, monitor in enumerate(monitors):
# `dj` for each monitor will have a shape of (num frequencies,)
- dj = onp.asarray(monitor_values_grad[monitor_idx],
- dtype=onp.complex64 if mp.is_single_precision() else onp.complex128)
+ dj = onp.asarray(
+ monitor_values_grad[monitor_idx],
+ dtype=onp.complex64 if mp.is_single_precision() else onp.complex128,
+ )
if onp.any(dj):
adjoint_sources += monitor.place_adjoint_source(dj)
assert adjoint_sources
diff --git a/python/adjoint/wrapper.py b/python/adjoint/wrapper.py
index 8ecd38a3f..f3e5144bc 100644
--- a/python/adjoint/wrapper.py
+++ b/python/adjoint/wrapper.py
@@ -90,6 +90,7 @@ class MeepJaxWrapper:
https://meep.readthedocs.io/en/latest/Python_User_Interface/#Simulation
for more information. The default is true.
"""
+
_log_fn = print
def __init__(
@@ -103,7 +104,7 @@ def __init__(
minimum_run_time: float = 0,
maximum_run_time: float = onp.inf,
until_after_sources: bool = True,
- finite_difference_step: float = utils.FD_DEFAULT
+ finite_difference_step: float = utils.FD_DEFAULT,
):
self.simulation = simulation
self.sources = sources
@@ -150,23 +151,27 @@ def _run_fwd_simulation(self, design_variables):
)
self.simulation.init_sim()
sim_run_args = {
- 'until_after_sources' if self.until_after_sources else 'until':
- mp.stop_when_dft_decayed(self.dft_threshold,self.minimum_run_time,self.maximum_run_time)
+ "until_after_sources"
+ if self.until_after_sources
+ else "until": mp.stop_when_dft_decayed(
+ self.dft_threshold, self.minimum_run_time, self.maximum_run_time
+ )
}
self.simulation.run(**sim_run_args)
monitor_values = utils.gather_monitor_values(self.monitors)
- return (jnp.asarray(monitor_values),
- fwd_design_region_monitors)
+ return (jnp.asarray(monitor_values), fwd_design_region_monitors)
def _run_adjoint_simulation(self, monitor_values_grad):
"""Runs adjoint simulation, returning design region fields."""
if not self.design_regions:
raise RuntimeError(
- 'An adjoint simulation was attempted when no design '
- 'regions are present.')
- adjoint_sources = utils.create_adjoint_sources(self.monitors,
- monitor_values_grad)
+ "An adjoint simulation was attempted when no design "
+ "regions are present."
+ )
+ adjoint_sources = utils.create_adjoint_sources(
+ self.monitors, monitor_values_grad
+ )
# TODO refactor with optimization_problem.py #
self.simulation.restart_fields()
self.simulation.clear_dft_monitors()
@@ -179,8 +184,11 @@ def _run_adjoint_simulation(self, monitor_values_grad):
)
self.simulation.init_sim()
sim_run_args = {
- 'until_after_sources' if self.until_after_sources else 'until':
- mp.stop_when_dft_decayed(self.dft_threshold,self.minimum_run_time,self.maximum_run_time)
+ "until_after_sources"
+ if self.until_after_sources
+ else "until": mp.stop_when_dft_decayed(
+ self.dft_threshold, self.minimum_run_time, self.maximum_run_time
+ )
}
self.simulation.run(**sim_run_args)
@@ -202,12 +210,12 @@ def _calculate_vjps(
adj_fields,
design_variable_shapes,
sum_freq_partials=sum_freq_partials,
- finite_difference_step=self.finite_difference_step
+ finite_difference_step=self.finite_difference_step,
)
- def _initialize_callable(
- self) -> Callable[[List[jnp.ndarray]], jnp.ndarray]:
+ def _initialize_callable(self) -> Callable[[List[jnp.ndarray]], jnp.ndarray]:
"""Initializes the callable JAX function and registers its VJP."""
+
@jax.custom_vjp
def simulate(design_variables: List[jnp.ndarray]) -> jnp.ndarray:
monitor_values, _ = self._run_fwd_simulation(design_variables)
@@ -216,17 +224,23 @@ def simulate(design_variables: List[jnp.ndarray]) -> jnp.ndarray:
def _simulate_fwd(design_variables):
"""Runs forward simulation, returning monitor values and fields."""
monitor_values, self.fwd_design_region_monitors = self._run_fwd_simulation(
- design_variables)
+ design_variables
+ )
design_variable_shapes = [x.shape for x in design_variables]
return monitor_values, (design_variable_shapes)
def _simulate_rev(res, monitor_values_grad):
"""Runs adjoint simulation, returning VJP of design wrt monitor values."""
design_variable_shapes = res
- self.adj_design_region_monitors = self._run_adjoint_simulation(monitor_values_grad)
- vjps = self._calculate_vjps(self.fwd_design_region_monitors, self.adj_design_region_monitors,
- design_variable_shapes)
- return ([jnp.asarray(vjp) for vjp in vjps], )
+ self.adj_design_region_monitors = self._run_adjoint_simulation(
+ monitor_values_grad
+ )
+ vjps = self._calculate_vjps(
+ self.fwd_design_region_monitors,
+ self.adj_design_region_monitors,
+ design_variable_shapes,
+ )
+ return ([jnp.asarray(vjp) for vjp in vjps],)
simulate.defvjp(_simulate_fwd, _simulate_rev)
diff --git a/python/binary_partition_utils.py b/python/binary_partition_utils.py
index 5fe73f492..fb3558a79 100644
--- a/python/binary_partition_utils.py
+++ b/python/binary_partition_utils.py
@@ -18,7 +18,8 @@ def is_leaf_node(partition: mp.BinaryPartition) -> bool:
def enumerate_leaf_nodes(
- partition: mp.BinaryPartition) -> Generator[mp.BinaryPartition, None, None]:
+ partition: mp.BinaryPartition,
+) -> Generator[mp.BinaryPartition, None, None]:
"""Enumerates all leaf nodes of a partition.
Args:
@@ -47,8 +48,9 @@ def partition_has_duplicate_proc_ids(partition: mp.BinaryPartition) -> bool:
return len(set(proc_ids)) != len(proc_ids)
-def get_total_weight(partition: mp.BinaryPartition,
- weights_by_proc_id: List[float]) -> float:
+def get_total_weight(
+ partition: mp.BinaryPartition, weights_by_proc_id: List[float]
+) -> float:
"""Computes the total weights contained within a BinaryPartition subtree.
Args:
@@ -62,7 +64,7 @@ def get_total_weight(partition: mp.BinaryPartition,
ValueError: if sim.chunk_layout includes nodes with duplicate proc_ids
"""
if partition_has_duplicate_proc_ids(partition):
- raise ValueError('Duplicate proc_ids found in chunk_layout!')
+ raise ValueError("Duplicate proc_ids found in chunk_layout!")
if partition.proc_id is not None:
return weights_by_proc_id[partition.proc_id]
elif partition.left is not None and partition.right is not None:
@@ -70,12 +72,12 @@ def get_total_weight(partition: mp.BinaryPartition,
right_weight = get_total_weight(partition.right, weights_by_proc_id)
return left_weight + right_weight
else:
- raise ValueError('Partition missing proc_id or left, right attributes!')
+ raise ValueError("Partition missing proc_id or left, right attributes!")
def get_left_right_total_weights(
- partition: mp.BinaryPartition,
- weights_by_proc_id: List[float]) -> Tuple[float, float]:
+ partition: mp.BinaryPartition, weights_by_proc_id: List[float]
+) -> Tuple[float, float]:
"""Computes the total weights contained in left and right subtrees.
Args:
@@ -94,7 +96,7 @@ def get_left_right_total_weights(
right_weight = get_total_weight(partition.right, weights_by_proc_id)
return (left_weight, right_weight)
else:
- raise ValueError('Partition missing left, right attributes!')
+ raise ValueError("Partition missing left, right attributes!")
def pixel_volume(grid_volume: mp.grid_volume) -> int:
@@ -114,9 +116,11 @@ def pixel_volume(grid_volume: mp.grid_volume) -> int:
return grid_volume.nx() * grid_volume.ny()
-def get_total_volume(partition: mp.BinaryPartition,
- chunk_volumes: Tuple[mp.grid_volume],
- chunk_owners: onp.ndarray) -> float:
+def get_total_volume(
+ partition: mp.BinaryPartition,
+ chunk_volumes: Tuple[mp.grid_volume],
+ chunk_owners: onp.ndarray,
+) -> float:
"""Computes the total pixel volume in a subtree from associated chunk volumes.
NOTE: If multiple chunks are owned by the same process, this function may
@@ -133,14 +137,15 @@ def get_total_volume(partition: mp.BinaryPartition,
Returns:
The total pixel volume occupied by all chunks owned by the partition.
"""
- my_grid_volumes = get_grid_volumes_in_tree(partition, chunk_volumes,
- chunk_owners)
+ my_grid_volumes = get_grid_volumes_in_tree(partition, chunk_volumes, chunk_owners)
return sum(pixel_volume(vol) for vol in my_grid_volumes)
def get_left_right_total_volumes(
- partition: mp.BinaryPartition, chunk_volumes: Tuple[mp.grid_volume],
- chunk_owners: onp.ndarray) -> Tuple[float, float]:
+ partition: mp.BinaryPartition,
+ chunk_volumes: Tuple[mp.grid_volume],
+ chunk_owners: onp.ndarray,
+) -> Tuple[float, float]:
"""Computes the total pixel volume in left and right subtrees.
Args:
@@ -159,16 +164,17 @@ def get_left_right_total_volumes(
"""
if partition.left is not None and partition.right is not None:
left_volume = get_total_volume(partition.left, chunk_volumes, chunk_owners)
- right_volume = get_total_volume(partition.right, chunk_volumes,
- chunk_owners)
+ right_volume = get_total_volume(partition.right, chunk_volumes, chunk_owners)
return (left_volume, right_volume)
else:
- raise ValueError('Partition missing left, right attributes!')
+ raise ValueError("Partition missing left, right attributes!")
-def get_grid_volumes_in_tree(partition: mp.BinaryPartition,
- chunk_volumes: Tuple[mp.grid_volume],
- chunk_owners: onp.ndarray) -> List[mp.grid_volume]:
+def get_grid_volumes_in_tree(
+ partition: mp.BinaryPartition,
+ chunk_volumes: Tuple[mp.grid_volume],
+ chunk_owners: onp.ndarray,
+) -> List[mp.grid_volume]:
"""Fetches a list of grid_volumes contained in a BinaryPartition subtree.
NOTE: If multiple chunks are owned by the same process, this function may
@@ -187,7 +193,7 @@ def get_grid_volumes_in_tree(partition: mp.BinaryPartition,
the partition. The list is not necessarily ordered by proc_id values.
"""
if partition_has_duplicate_proc_ids(partition):
- warnings.warn('Partition has duplicate proc_ids, overcounting possible!')
+ warnings.warn("Partition has duplicate proc_ids, overcounting possible!")
my_proc_ids = [node.proc_id for node in enumerate_leaf_nodes(partition)]
@@ -198,9 +204,11 @@ def get_grid_volumes_in_tree(partition: mp.BinaryPartition,
]
-def get_total_volume_per_process(partition: mp.BinaryPartition,
- chunk_volumes: Tuple[mp.grid_volume],
- chunk_owners: onp.ndarray) -> Dict[int, float]:
+def get_total_volume_per_process(
+ partition: mp.BinaryPartition,
+ chunk_volumes: Tuple[mp.grid_volume],
+ chunk_owners: onp.ndarray,
+) -> Dict[int, float]:
"""Computes the total pixel volume per process contained in a BinaryPartition.
Args:
@@ -217,15 +225,20 @@ def get_total_volume_per_process(partition: mp.BinaryPartition,
volumes_per_process = {}
leaf_nodes_in_tree = enumerate_leaf_nodes(partition)
for leaf in leaf_nodes_in_tree:
- total_volume = sum(pixel_volume(chunk_volumes[i]) for i, owner in enumerate(chunk_owners) if owner == leaf.proc_id)
+ total_volume = sum(
+ pixel_volume(chunk_volumes[i])
+ for i, owner in enumerate(chunk_owners)
+ if owner == leaf.proc_id
+ )
volumes_per_process[leaf.proc_id] = total_volume
return volumes_per_process
def get_box_ranges(
- partition: mp.BinaryPartition, chunk_volumes: Tuple[mp.grid_volume],
- chunk_owners: onp.ndarray
+ partition: mp.BinaryPartition,
+ chunk_volumes: Tuple[mp.grid_volume],
+ chunk_owners: onp.ndarray,
) -> Tuple[float, float, float, float, float, float]:
"""Gets the max and min x, y, z dimensions spanned by a partition.
@@ -268,12 +281,10 @@ def get_box_ranges(
xmaxs.append(vol.surroundings().get_max_corner().x())
ymaxs.append(vol.surroundings().get_max_corner().y())
zmaxs.append(vol.surroundings().get_max_corner().z())
- return (min(xmins), max(xmaxs), min(ymins), max(ymaxs), min(zmins),
- max(zmaxs))
+ return (min(xmins), max(xmaxs), min(ymins), max(ymaxs), min(zmins), max(zmaxs))
-def partitions_are_equal(bp1: mp.BinaryPartition,
- bp2: mp.BinaryPartition) -> bool:
+def partitions_are_equal(bp1: mp.BinaryPartition, bp2: mp.BinaryPartition) -> bool:
"""Determines if two partitions have all nodes with identical attributes.
Args:
@@ -286,10 +297,13 @@ def partitions_are_equal(bp1: mp.BinaryPartition,
if is_leaf_node(bp1) and is_leaf_node(bp2):
return bp1.proc_id == bp2.proc_id
elif (not is_leaf_node(bp1)) and (not is_leaf_node(bp2)):
- return all([
- bp1.split_dir == bp2.split_dir, bp1.split_pos == bp2.split_pos,
- partitions_are_equal(bp1.left, bp2.left),
- partitions_are_equal(bp1.right, bp2.right)
- ])
+ return all(
+ [
+ bp1.split_dir == bp2.split_dir,
+ bp1.split_pos == bp2.split_pos,
+ partitions_are_equal(bp1.left, bp2.left),
+ partitions_are_equal(bp1.right, bp2.right),
+ ]
+ )
else:
return False
diff --git a/python/chunk_balancer.py b/python/chunk_balancer.py
index d0816fd06..fe92ab4b1 100644
--- a/python/chunk_balancer.py
+++ b/python/chunk_balancer.py
@@ -25,7 +25,8 @@ class AbstractChunkBalancer(abc.ABC):
"""
def make_initial_chunk_layout(
- self, sim: mp.Simulation) -> Union[mp.BinaryPartition, None]:
+ self, sim: mp.Simulation
+ ) -> Union[mp.BinaryPartition, None]:
"""Generates an initial chunk layout based on expected compute costs.
Args:
@@ -66,21 +67,26 @@ def adjust_chunk_layout(self, sim: mp.Simulation, **kwargs) -> None:
timing_measurements = MeepTimingMeasurements.new_from_simulation(sim, -1)
- new_chunk_layout = self.compute_new_chunk_layout(timing_measurements,
- old_chunk_layout,
- chunk_volumes,
- chunk_owners, **kwargs)
+ new_chunk_layout = self.compute_new_chunk_layout(
+ timing_measurements,
+ old_chunk_layout,
+ chunk_volumes,
+ chunk_owners,
+ **kwargs,
+ )
sim.reset_meep()
sim.chunk_layout = new_chunk_layout
sim.init_sim()
@abc.abstractmethod
- def compute_new_chunk_layout(self,
- timing_measurements: MeepTimingMeasurements,
- old_partition: mp.BinaryPartition,
- chunk_volumes: Tuple[mp.grid_volume],
- chunk_owners: np.ndarray) -> mp.BinaryPartition:
+ def compute_new_chunk_layout(
+ self,
+ timing_measurements: MeepTimingMeasurements,
+ old_partition: mp.BinaryPartition,
+ chunk_volumes: Tuple[mp.grid_volume],
+ chunk_owners: np.ndarray,
+ ) -> mp.BinaryPartition:
"""Rebalances the partition to equalize simulation time for node's children.
Args:
@@ -123,14 +129,14 @@ def _validate_sim(self, sim: mp.Simulation):
"""
# Check that chunk_layout does not contain duplicate nodes for same process
if bpu.partition_has_duplicate_proc_ids(sim.chunk_layout):
- raise ValueError('Duplicate proc_ids found in chunk_layout!')
+ raise ValueError("Duplicate proc_ids found in chunk_layout!")
# Check that proc_ids in chunk_layout are assigned properly to grid owners
chunk_owners = sim.structure.get_chunk_owners()
- proc_ids = [
- node.proc_id for node in bpu.enumerate_leaf_nodes(sim.chunk_layout)
- ]
+ proc_ids = [node.proc_id for node in bpu.enumerate_leaf_nodes(sim.chunk_layout)]
if set(chunk_owners) != set(proc_ids):
- raise ValueError(f'Processes {set(proc_ids) - set(chunk_owners)} present in chunk_layout but not grid_owners!')
+ raise ValueError(
+ f"Processes {set(proc_ids) - set(chunk_owners)} present in chunk_layout but not grid_owners!"
+ )
class ChunkBalancer(AbstractChunkBalancer):
@@ -154,16 +160,16 @@ class ChunkBalancer(AbstractChunkBalancer):
"""
def compute_new_chunk_layout(
- self,
- timing_measurements: MeepTimingMeasurements,
- partition: mp.BinaryPartition,
- chunk_volumes: Tuple[mp.grid_volume],
- chunk_owners: np.ndarray,
- new_partition: Optional[mp.BinaryPartition] = None,
- new_partition_root: Optional[mp.BinaryPartition] = None,
- xyz_bounds: Optional[Tuple[float, float, float, float, float,
- float]] = None,
- sensitivity: float = 0.5) -> mp.BinaryPartition:
+ self,
+ timing_measurements: MeepTimingMeasurements,
+ partition: mp.BinaryPartition,
+ chunk_volumes: Tuple[mp.grid_volume],
+ chunk_owners: np.ndarray,
+ new_partition: Optional[mp.BinaryPartition] = None,
+ new_partition_root: Optional[mp.BinaryPartition] = None,
+ xyz_bounds: Optional[Tuple[float, float, float, float, float, float]] = None,
+ sensitivity: float = 0.5,
+ ) -> mp.BinaryPartition:
"""Rebalances the partition to equalize simulation time for node's children.
Args:
@@ -202,17 +208,17 @@ def compute_new_chunk_layout(
elif partition.split_dir == mp.Z:
_, _, _, _, d_min, d_max = xyz_bounds
else:
- raise ValueError('Split direction must be mp.X, mp.Y, or mp.Z!')
+ raise ValueError("Split direction must be mp.X, mp.Y, or mp.Z!")
- sim_times = list(
- self._compute_working_times_per_process(timing_measurements))
+ sim_times = list(self._compute_working_times_per_process(timing_measurements))
n_left = partition.left.numchunks()
n_right = partition.right.numchunks()
t_left, t_right = bpu.get_left_right_total_weights(partition, sim_times)
- v_left, v_right = bpu.get_left_right_total_volumes(partition, chunk_volumes,
- chunk_owners)
+ v_left, v_right = bpu.get_left_right_total_volumes(
+ partition, chunk_volumes, chunk_owners
+ )
v_left_new = v_left * t_right * n_left
v_right_new = v_right * t_left * n_right
@@ -221,8 +227,7 @@ def compute_new_chunk_layout(
old_split_pos = partition.split_pos
new_split_pos = (d_max - d_min) * split_frac + d_min
- new_split_pos = sensitivity * new_split_pos + (1 -
- sensitivity) * old_split_pos
+ new_split_pos = sensitivity * new_split_pos + (1 - sensitivity) * old_split_pos
# Adjust the split pos on new_partition. We can't modify the old partition
# because it could affect left/right volume ratios for subsequent calls
@@ -248,7 +253,8 @@ def compute_new_chunk_layout(
new_partition=new_partition.left,
new_partition_root=new_partition_root,
xyz_bounds=left_xyz_bounds,
- sensitivity=sensitivity)
+ sensitivity=sensitivity,
+ )
self.compute_new_chunk_layout(
timing_measurements,
partition.right,
@@ -257,24 +263,26 @@ def compute_new_chunk_layout(
new_partition=new_partition.right,
new_partition_root=new_partition_root,
xyz_bounds=right_xyz_bounds,
- sensitivity=sensitivity)
+ sensitivity=sensitivity,
+ )
return new_partition
def _compute_working_times_per_process(
- self, timing_measurements: MeepTimingMeasurements) -> np.ndarray:
+ self, timing_measurements: MeepTimingMeasurements
+ ) -> np.ndarray:
"""Computes the time spent by each MPI process actively working."""
time_sinks_to_include = [
- 'time_stepping',
- 'boundaries_copying',
- 'field_output',
- 'fourier_transform',
- 'mpb',
- 'near_to_farfield_transform',
+ "time_stepping",
+ "boundaries_copying",
+ "field_output",
+ "fourier_transform",
+ "mpb",
+ "near_to_farfield_transform",
]
- num_processes = len(timing_measurements.measurements['time_stepping'])
+ num_processes = len(timing_measurements.measurements["time_stepping"])
working_times = np.zeros(num_processes)
for category in time_sinks_to_include:
working_times += np.array(timing_measurements.measurements[category])
diff --git a/python/examples/3rd-harm-1d.ipynb b/python/examples/3rd-harm-1d.ipynb
index 715a97e31..c4b7fd017 100644
--- a/python/examples/3rd-harm-1d.ipynb
+++ b/python/examples/3rd-harm-1d.ipynb
@@ -35,6 +35,7 @@
"import meep as mp\n",
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
+ "\n",
"%matplotlib notebook"
]
},
@@ -51,12 +52,12 @@
"metadata": {},
"outputs": [],
"source": [
- "sz = 100 # size of cell in z direction\n",
- "fcen = 1 / 3.0 # center frequency of source\n",
- "df = fcen / 20.0 # frequency width of source\n",
- "amp = 1 # amplitude of source\n",
- "k = 10**-5 # Kerr susceptibility\n",
- "dpml = 1.0 # PML thickness"
+ "sz = 100 # size of cell in z direction\n",
+ "fcen = 1 / 3.0 # center frequency of source\n",
+ "df = fcen / 20.0 # frequency width of source\n",
+ "amp = 1 # amplitude of source\n",
+ "k = 10**-5 # Kerr susceptibility\n",
+ "dpml = 1.0 # PML thickness"
]
},
{
@@ -109,8 +110,12 @@
"metadata": {},
"outputs": [],
"source": [
- "sources = mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ex,\n",
- " center=mp.Vector3(0, 0, -0.5*sz + dpml), amplitude=amp)"
+ "sources = mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ex,\n",
+ " center=mp.Vector3(0, 0, -0.5 * sz + dpml),\n",
+ " amplitude=amp,\n",
+ ")"
]
},
{
@@ -130,16 +135,22 @@
"fmin = fcen / 2.0\n",
"fmax = fcen * 4\n",
"\n",
- "sim = mp.Simulation(cell_size=cell,\n",
- " geometry=[],\n",
- " sources=[sources],\n",
- " boundary_layers=[pml_layers],\n",
- " default_material=default_material,\n",
- " resolution=resolution,\n",
- " dimensions=dimensions)\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " geometry=[],\n",
+ " sources=[sources],\n",
+ " boundary_layers=[pml_layers],\n",
+ " default_material=default_material,\n",
+ " resolution=resolution,\n",
+ " dimensions=dimensions,\n",
+ ")\n",
"\n",
- "trans = sim.add_flux(0.5 * (fmin + fmax), fmax - fmin, nfreq,\n",
- " mp.FluxRegion(mp.Vector3(0, 0, 0.5*sz - dpml - 0.5)))"
+ "trans = sim.add_flux(\n",
+ " 0.5 * (fmin + fmax),\n",
+ " fmax - fmin,\n",
+ " nfreq,\n",
+ " mp.FluxRegion(mp.Vector3(0, 0, 0.5 * sz - dpml - 0.5)),\n",
+ ")"
]
},
{
@@ -178,8 +189,11 @@
}
],
"source": [
- "sim.run(until_after_sources=mp.stop_when_fields_decayed(\n",
- " 50, mp.Ex, mp.Vector3(0, 0, 0.5*sz - dpml - 0.5), 1e-6))"
+ "sim.run(\n",
+ " until_after_sources=mp.stop_when_fields_decayed(\n",
+ " 50, mp.Ex, mp.Vector3(0, 0, 0.5 * sz - dpml - 0.5), 1e-6\n",
+ " )\n",
+ ")"
]
},
{
@@ -212,10 +226,10 @@
"spectra = mp.get_fluxes(trans)\n",
"\n",
"plt.figure(dpi=150)\n",
- "plt.semilogy(freqs,spectra)\n",
+ "plt.semilogy(freqs, spectra)\n",
"plt.grid(True)\n",
- "plt.xlabel('Frequency')\n",
- "plt.ylabel('Transmitted Power (a.u.)')\n",
+ "plt.xlabel(\"Frequency\")\n",
+ "plt.ylabel(\"Transmitted Power (a.u.)\")\n",
"plt.show()"
]
},
@@ -234,40 +248,55 @@
"metadata": {},
"outputs": [],
"source": [
- "def run_chi3(k_pow,amp=1):\n",
- " k = 10**k_pow \n",
+ "def run_chi3(k_pow, amp=1):\n",
+ " k = 10**k_pow\n",
" default_material = mp.Medium(index=1, chi3=k)\n",
- " \n",
- " sources = mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ex,\n",
- " center=mp.Vector3(0, 0, -0.5*sz + dpml), amplitude=amp)\n",
- " \n",
- " sim = mp.Simulation(cell_size=cell,\n",
- " geometry=[],\n",
- " sources=[sources],\n",
- " boundary_layers=[pml_layers],\n",
- " default_material=default_material,\n",
- " resolution=resolution,\n",
- " dimensions=dimensions)\n",
"\n",
- " trans = sim.add_flux(0.5 * (fmin + fmax), fmax - fmin, nfreq,\n",
- " mp.FluxRegion(mp.Vector3(0, 0, 0.5*sz - dpml - 0.5)))\n",
- " \n",
+ " sources = mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ex,\n",
+ " center=mp.Vector3(0, 0, -0.5 * sz + dpml),\n",
+ " amplitude=amp,\n",
+ " )\n",
+ "\n",
+ " sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " geometry=[],\n",
+ " sources=[sources],\n",
+ " boundary_layers=[pml_layers],\n",
+ " default_material=default_material,\n",
+ " resolution=resolution,\n",
+ " dimensions=dimensions,\n",
+ " )\n",
+ "\n",
+ " trans = sim.add_flux(\n",
+ " 0.5 * (fmin + fmax),\n",
+ " fmax - fmin,\n",
+ " nfreq,\n",
+ " mp.FluxRegion(mp.Vector3(0, 0, 0.5 * sz - dpml - 0.5)),\n",
+ " )\n",
+ "\n",
" # Single frequency point at omega\n",
- " trans1 = sim.add_flux(fcen, 0, 1,\n",
- " mp.FluxRegion(mp.Vector3(0, 0, 0.5*sz - dpml - 0.5)))\n",
+ " trans1 = sim.add_flux(\n",
+ " fcen, 0, 1, mp.FluxRegion(mp.Vector3(0, 0, 0.5 * sz - dpml - 0.5))\n",
+ " )\n",
"\n",
" # Singel frequency point at 3omega\n",
- " trans3 = sim.add_flux(3 * fcen, 0, 1,\n",
- " mp.FluxRegion(mp.Vector3(0, 0, 0.5*sz - dpml - 0.5)))\n",
- " \n",
- " sim.run(until_after_sources=mp.stop_when_fields_decayed(\n",
- " 50, mp.Ex, mp.Vector3(0, 0, 0.5*sz - dpml - 0.5), 1e-6))\n",
- " \n",
+ " trans3 = sim.add_flux(\n",
+ " 3 * fcen, 0, 1, mp.FluxRegion(mp.Vector3(0, 0, 0.5 * sz - dpml - 0.5))\n",
+ " )\n",
+ "\n",
+ " sim.run(\n",
+ " until_after_sources=mp.stop_when_fields_decayed(\n",
+ " 50, mp.Ex, mp.Vector3(0, 0, 0.5 * sz - dpml - 0.5), 1e-6\n",
+ " )\n",
+ " )\n",
+ "\n",
" omega_flux = mp.get_fluxes(trans1)\n",
" omega3_flux = mp.get_fluxes(trans3)\n",
" freqs = mp.get_flux_freqs(trans)\n",
" spectra = mp.get_fluxes(trans)\n",
- " \n",
+ "\n",
" return freqs, spectra, omega_flux, omega3_flux"
]
},
@@ -355,13 +384,13 @@
}
],
"source": [
- "k_pow = [-3,-2,-1,0]\n",
+ "k_pow = [-3, -2, -1, 0]\n",
"freqs = []\n",
"spectra = []\n",
"for k_iter in k_pow:\n",
" freqs_iter, spectra_iter, omega_flux, omega3_flux = run_chi3(k_iter)\n",
" spectra.append(spectra_iter)\n",
- " freqs = freqs_iter # Each iteration will simulate over the same frequencies, so just remember the last set."
+ " freqs = freqs_iter # Each iteration will simulate over the same frequencies, so just remember the last set."
]
},
{
@@ -384,10 +413,10 @@
],
"source": [
"plt.figure(dpi=150)\n",
- "plt.semilogy(freqs,np.array(spectra).T)\n",
+ "plt.semilogy(freqs, np.array(spectra).T)\n",
"plt.grid(True)\n",
- "plt.xlabel('Frequency')\n",
- "plt.ylabel('Transmitted Power (a.u.)')\n",
+ "plt.xlabel(\"Frequency\")\n",
+ "plt.ylabel(\"Transmitted Power (a.u.)\")\n",
"plt.legend([\"$\\chi^{{(3)}} = 10^{{{}}}$\".format(i) for i in k_pow])\n",
"plt.show()"
]
@@ -432,7 +461,7 @@
],
"source": [
"_, _, omega_flux_cal, omega3_flux_cal = run_chi3(-16)\n",
- "print(\"Omega: {}, 3Omega: {}\".format(omega_flux_cal[0],omega3_flux_cal[0]))"
+ "print(\"Omega: {}, 3Omega: {}\".format(omega_flux_cal[0], omega3_flux_cal[0]))"
]
},
{
@@ -787,7 +816,7 @@
}
],
"source": [
- "pts = np.linspace(-6,0,20)\n",
+ "pts = np.linspace(-6, 0, 20)\n",
"_, _, omega_psd, omega3_psd = zip(*[run_chi3(k_iter) for k_iter in pts])"
]
},
@@ -810,15 +839,15 @@
}
],
"source": [
- "quad = (10 ** pts) ** 2\n",
+ "quad = (10**pts) ** 2\n",
"\n",
"plt.figure(dpi=150)\n",
- "plt.loglog(10 ** pts,np.array(omega_psd)/omega_flux_cal[0],'o-',label='$\\omega$')\n",
- "plt.loglog(10 ** pts,np.array(omega3_psd)/omega_flux_cal[0],'o-',label='$3\\omega$')\n",
- "plt.loglog(10**pts,quad,'k',label='quadratic line')\n",
+ "plt.loglog(10**pts, np.array(omega_psd) / omega_flux_cal[0], \"o-\", label=\"$\\omega$\")\n",
+ "plt.loglog(10**pts, np.array(omega3_psd) / omega_flux_cal[0], \"o-\", label=\"$3\\omega$\")\n",
+ "plt.loglog(10**pts, quad, \"k\", label=\"quadratic line\")\n",
"plt.grid(True)\n",
- "plt.xlabel('$\\chi^{(3)}$')\n",
- "plt.ylabel('Transmission/ Incident Power')\n",
+ "plt.xlabel(\"$\\chi^{(3)}$\")\n",
+ "plt.ylabel(\"Transmission/ Incident Power\")\n",
"plt.legend()\n",
"plt.show()"
]
@@ -879,11 +908,15 @@
}
],
"source": [
- "_, _, omega_flux_1, omega3_flux_1 = run_chi3(-3,1)\n",
- "_, _, omega_flux_2, omega3_flux_2 = run_chi3(-6,10)\n",
+ "_, _, omega_flux_1, omega3_flux_1 = run_chi3(-3, 1)\n",
+ "_, _, omega_flux_2, omega3_flux_2 = run_chi3(-6, 10)\n",
"\n",
- "print('-------------------------------')\n",
- "print(\"Difference between powers: {}%\".format(abs(omega3_flux_1[0]-omega3_flux_2[0])/omega3_flux_1[0] * 100))"
+ "print(\"-------------------------------\")\n",
+ "print(\n",
+ " \"Difference between powers: {}%\".format(\n",
+ " abs(omega3_flux_1[0] - omega3_flux_2[0]) / omega3_flux_1[0] * 100\n",
+ " )\n",
+ ")"
]
},
{
diff --git a/python/examples/3rd-harm-1d.py b/python/examples/3rd-harm-1d.py
index b6cbae498..9082e8bdf 100644
--- a/python/examples/3rd-harm-1d.py
+++ b/python/examples/3rd-harm-1d.py
@@ -6,14 +6,15 @@
import meep as mp
import argparse
+
def main(args):
- sz = 100 # size of cell in z direction
- fcen = 1 / 3.0 # center frequency of source
+ sz = 100 # size of cell in z direction
+ fcen = 1 / 3.0 # center frequency of source
df = fcen / 20.0 # frequency width of source
- amp = args.amp # amplitude of source
- k = 10**args.logk # Kerr susceptibility
- dpml = 1.0 # PML thickness
+ amp = args.amp # amplitude of source
+ k = 10**args.logk # Kerr susceptibility
+ dpml = 1.0 # PML thickness
# We'll use an explicitly 1d simulation. Setting dimensions=1 will actually
# result in faster execution than just using two no-size dimensions. However,
@@ -28,38 +29,54 @@ def main(args):
# and pass it to the Simulation constructor
default_material = mp.Medium(index=1, chi3=k)
- sources = mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ex,
- center=mp.Vector3(0, 0, -0.5*sz + dpml), amplitude=amp)
+ sources = mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ex,
+ center=mp.Vector3(0, 0, -0.5 * sz + dpml),
+ amplitude=amp,
+ )
# frequency range for flux calculation
nfreq = 400
fmin = fcen / 2.0
fmax = fcen * 4
- sim = mp.Simulation(cell_size=cell,
- geometry=[],
- sources=[sources],
- boundary_layers=[pml_layers],
- default_material=default_material,
- resolution=resolution,
- dimensions=dimensions)
+ sim = mp.Simulation(
+ cell_size=cell,
+ geometry=[],
+ sources=[sources],
+ boundary_layers=[pml_layers],
+ default_material=default_material,
+ resolution=resolution,
+ dimensions=dimensions,
+ )
# trans = sim.add_flux(0.5 * (fmin + fmax), fmax - fmin, nfreq,
# mp.FluxRegion(mp.Vector3(0, 0, 0.5*sz - dpml - 0.5)))
- trans1 = sim.add_flux(fcen, 0, 1,
- mp.FluxRegion(mp.Vector3(0, 0, 0.5*sz - dpml - 0.5)))
- trans3 = sim.add_flux(3 * fcen, 0, 1,
- mp.FluxRegion(mp.Vector3(0, 0, 0.5*sz - dpml - 0.5)))
+ trans1 = sim.add_flux(
+ fcen, 0, 1, mp.FluxRegion(mp.Vector3(0, 0, 0.5 * sz - dpml - 0.5))
+ )
+ trans3 = sim.add_flux(
+ 3 * fcen, 0, 1, mp.FluxRegion(mp.Vector3(0, 0, 0.5 * sz - dpml - 0.5))
+ )
- sim.run(until_after_sources=mp.stop_when_fields_decayed(
- 50, mp.Ex, mp.Vector3(0, 0, 0.5*sz - dpml - 0.5), 1e-6))
+ sim.run(
+ until_after_sources=mp.stop_when_fields_decayed(
+ 50, mp.Ex, mp.Vector3(0, 0, 0.5 * sz - dpml - 0.5), 1e-6
+ )
+ )
# sim.display_fluxes(trans)
- print(f"harmonics:, {k}, {amp}, {mp.get_fluxes(trans1)[0]}, {mp.get_fluxes(trans3)[0]}")
+ print(
+ f"harmonics:, {k}, {amp}, {mp.get_fluxes(trans1)[0]}, {mp.get_fluxes(trans3)[0]}"
+ )
+
-if __name__ == '__main__':
+if __name__ == "__main__":
parser = argparse.ArgumentParser()
- parser.add_argument('-amp', type=float, default=1.0, help='amplitude of source')
- parser.add_argument('-logk', type=float, default=0, help='logarithm of Kerr susceptibility')
+ parser.add_argument("-amp", type=float, default=1.0, help="amplitude of source")
+ parser.add_argument(
+ "-logk", type=float, default=0, help="logarithm of Kerr susceptibility"
+ )
args = parser.parse_args()
main(args)
diff --git a/python/examples/absorbed_power_density.ipynb b/python/examples/absorbed_power_density.ipynb
index d6188fb16..fbce592f8 100644
--- a/python/examples/absorbed_power_density.ipynb
+++ b/python/examples/absorbed_power_density.ipynb
@@ -187,60 +187,75 @@
"dpml = 1.0\n",
"pml_layers = [mp.PML(thickness=dpml)]\n",
"\n",
- "r = 1.0 # radius of cylinder\n",
+ "r = 1.0 # radius of cylinder\n",
"dair = 2.0 # air padding thickness\n",
"\n",
- "s = 2*(dpml+dair+r)\n",
- "cell_size = mp.Vector3(s,s)\n",
+ "s = 2 * (dpml + dair + r)\n",
+ "cell_size = mp.Vector3(s, s)\n",
"\n",
"wvl = 1.0\n",
- "fcen = 1/wvl\n",
+ "fcen = 1 / wvl\n",
"\n",
"# is_integrated=True necessary for any planewave source extending into PML\n",
- "sources = [mp.Source(mp.GaussianSource(fcen,fwidth=0.1*fcen,is_integrated=True),\n",
- " center=mp.Vector3(-0.5*s+dpml),\n",
- " size=mp.Vector3(0,s),\n",
- " component=mp.Ez)]\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=0.1 * fcen, is_integrated=True),\n",
+ " center=mp.Vector3(-0.5 * s + dpml),\n",
+ " size=mp.Vector3(0, s),\n",
+ " component=mp.Ez,\n",
+ " )\n",
+ "]\n",
"\n",
"symmetries = [mp.Mirror(mp.Y)]\n",
"\n",
- "geometry = [mp.Cylinder(material=SiO2,\n",
- " center=mp.Vector3(),\n",
- " radius=r,\n",
- " height=mp.inf)]\n",
+ "geometry = [mp.Cylinder(material=SiO2, center=mp.Vector3(), radius=r, height=mp.inf)]\n",
"\n",
- "sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " sources=sources,\n",
- " k_point=mp.Vector3(),\n",
- " symmetries=symmetries,\n",
- " geometry=geometry)\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=sources,\n",
+ " k_point=mp.Vector3(),\n",
+ " symmetries=symmetries,\n",
+ " geometry=geometry,\n",
+ ")\n",
"\n",
- "dft_fields = sim.add_dft_fields([mp.Dz,mp.Ez],\n",
- " fcen,0,1,\n",
- " center=mp.Vector3(),\n",
- " size=mp.Vector3(2*r,2*r),\n",
- " yee_grid=True)\n",
+ "dft_fields = sim.add_dft_fields(\n",
+ " [mp.Dz, mp.Ez],\n",
+ " fcen,\n",
+ " 0,\n",
+ " 1,\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(2 * r, 2 * r),\n",
+ " yee_grid=True,\n",
+ ")\n",
"\n",
"# closed box surrounding cylinder for computing total incoming flux\n",
- "flux_box = sim.add_flux(fcen, 0, 1,\n",
- " mp.FluxRegion(center=mp.Vector3(x=-r),size=mp.Vector3(0,2*r),weight=+1),\n",
- " mp.FluxRegion(center=mp.Vector3(x=+r),size=mp.Vector3(0,2*r),weight=-1),\n",
- " mp.FluxRegion(center=mp.Vector3(y=+r),size=mp.Vector3(2*r,0),weight=-1),\n",
- " mp.FluxRegion(center=mp.Vector3(y=-r),size=mp.Vector3(2*r,0),weight=+1))\n",
+ "flux_box = sim.add_flux(\n",
+ " fcen,\n",
+ " 0,\n",
+ " 1,\n",
+ " mp.FluxRegion(center=mp.Vector3(x=-r), size=mp.Vector3(0, 2 * r), weight=+1),\n",
+ " mp.FluxRegion(center=mp.Vector3(x=+r), size=mp.Vector3(0, 2 * r), weight=-1),\n",
+ " mp.FluxRegion(center=mp.Vector3(y=+r), size=mp.Vector3(2 * r, 0), weight=-1),\n",
+ " mp.FluxRegion(center=mp.Vector3(y=-r), size=mp.Vector3(2 * r, 0), weight=+1),\n",
+ ")\n",
"\n",
"sim.run(until_after_sources=100)\n",
"\n",
- "Dz = sim.get_dft_array(dft_fields,mp.Dz,0)\n",
- "Ez = sim.get_dft_array(dft_fields,mp.Ez,0)\n",
- "absorbed_power_density = 2*np.pi*fcen * np.imag(np.conj(Ez)*Dz)\n",
+ "Dz = sim.get_dft_array(dft_fields, mp.Dz, 0)\n",
+ "Ez = sim.get_dft_array(dft_fields, mp.Ez, 0)\n",
+ "absorbed_power_density = 2 * np.pi * fcen * np.imag(np.conj(Ez) * Dz)\n",
"\n",
- "dxy = 1/resolution**2\n",
- "absorbed_power = np.sum(absorbed_power_density)*dxy\n",
+ "dxy = 1 / resolution**2\n",
+ "absorbed_power = np.sum(absorbed_power_density) * dxy\n",
"absorbed_flux = mp.get_fluxes(flux_box)[0]\n",
- "err = abs(absorbed_power-absorbed_flux)/absorbed_flux\n",
- "print(\"flux:, {} (dft_fields), {} (dft_flux), {} (error)\".format(absorbed_power,absorbed_flux,err))"
+ "err = abs(absorbed_power - absorbed_flux) / absorbed_flux\n",
+ "print(\n",
+ " \"flux:, {} (dft_fields), {} (dft_flux), {} (error)\".format(\n",
+ " absorbed_power, absorbed_flux, err\n",
+ " )\n",
+ ")"
]
},
{
@@ -324,21 +339,29 @@
],
"source": [
"plt.figure()\n",
- "x = np.linspace(-r,r,Dz.shape[0])\n",
- "y = np.linspace(-r,r,Dz.shape[1])\n",
- "plt.pcolormesh(x,\n",
- " y,\n",
- " np.transpose(absorbed_power_density),\n",
- " cmap='inferno_r',\n",
- " shading='gouraud',\n",
- " vmin=0,\n",
- " vmax=np.amax(absorbed_power_density))\n",
+ "x = np.linspace(-r, r, Dz.shape[0])\n",
+ "y = np.linspace(-r, r, Dz.shape[1])\n",
+ "plt.pcolormesh(\n",
+ " x,\n",
+ " y,\n",
+ " np.transpose(absorbed_power_density),\n",
+ " cmap=\"inferno_r\",\n",
+ " shading=\"gouraud\",\n",
+ " vmin=0,\n",
+ " vmax=np.amax(absorbed_power_density),\n",
+ ")\n",
"plt.xlabel(\"x (μm)\")\n",
- "plt.xticks(np.linspace(-r,r,5))\n",
+ "plt.xticks(np.linspace(-r, r, 5))\n",
"plt.ylabel(\"y (μm)\")\n",
- "plt.yticks(np.linspace(-r,r,5))\n",
- "plt.gca().set_aspect('equal')\n",
- "plt.title(\"absorbed power density\" + \"\\n\" +\"SiO2 Labs(λ={} μm) = {:.2f} μm\".format(wvl,wvl/np.imag(np.sqrt(SiO2.epsilon(fcen)[0][0]))))\n",
+ "plt.yticks(np.linspace(-r, r, 5))\n",
+ "plt.gca().set_aspect(\"equal\")\n",
+ "plt.title(\n",
+ " \"absorbed power density\"\n",
+ " + \"\\n\"\n",
+ " + \"SiO2 Labs(λ={} μm) = {:.2f} μm\".format(\n",
+ " wvl, wvl / np.imag(np.sqrt(SiO2.epsilon(fcen)[0][0]))\n",
+ " )\n",
+ ")\n",
"plt.colorbar()"
]
}
diff --git a/python/examples/absorbed_power_density.py b/python/examples/absorbed_power_density.py
index 92947db8b..3bf34183d 100644
--- a/python/examples/absorbed_power_density.py
+++ b/python/examples/absorbed_power_density.py
@@ -1,6 +1,7 @@
import numpy as np
import matplotlib
-matplotlib.use('agg')
+
+matplotlib.use("agg")
import matplotlib.pyplot as plt
import meep as mp
@@ -11,81 +12,102 @@
dpml = 1.0
pml_layers = [mp.PML(thickness=dpml)]
-r = 1.0 # radius of cylinder
+r = 1.0 # radius of cylinder
dair = 2.0 # air padding thickness
-s = 2*(dpml+dair+r)
-cell_size = mp.Vector3(s,s)
+s = 2 * (dpml + dair + r)
+cell_size = mp.Vector3(s, s)
wvl = 1.0
-fcen = 1/wvl
+fcen = 1 / wvl
# is_integrated=True necessary for any planewave source extending into PML
-sources = [mp.Source(mp.GaussianSource(fcen,fwidth=0.1*fcen,is_integrated=True),
- center=mp.Vector3(-0.5*s+dpml),
- size=mp.Vector3(0,s),
- component=mp.Ez)]
+sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=0.1 * fcen, is_integrated=True),
+ center=mp.Vector3(-0.5 * s + dpml),
+ size=mp.Vector3(0, s),
+ component=mp.Ez,
+ )
+]
symmetries = [mp.Mirror(mp.Y)]
-geometry = [mp.Cylinder(material=SiO2,
- center=mp.Vector3(),
- radius=r,
- height=mp.inf)]
-
-sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- sources=sources,
- k_point=mp.Vector3(),
- symmetries=symmetries,
- geometry=geometry)
-
-dft_fields = sim.add_dft_fields([mp.Dz,mp.Ez],
- fcen,0,1,
- center=mp.Vector3(),
- size=mp.Vector3(2*r,2*r),
- yee_grid=True)
+geometry = [mp.Cylinder(material=SiO2, center=mp.Vector3(), radius=r, height=mp.inf)]
+
+sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ sources=sources,
+ k_point=mp.Vector3(),
+ symmetries=symmetries,
+ geometry=geometry,
+)
+
+dft_fields = sim.add_dft_fields(
+ [mp.Dz, mp.Ez],
+ fcen,
+ 0,
+ 1,
+ center=mp.Vector3(),
+ size=mp.Vector3(2 * r, 2 * r),
+ yee_grid=True,
+)
# closed box surrounding cylinder for computing total incoming flux
-flux_box = sim.add_flux(fcen, 0, 1,
- mp.FluxRegion(center=mp.Vector3(x=-r),size=mp.Vector3(0,2*r),weight=+1),
- mp.FluxRegion(center=mp.Vector3(x=+r),size=mp.Vector3(0,2*r),weight=-1),
- mp.FluxRegion(center=mp.Vector3(y=+r),size=mp.Vector3(2*r,0),weight=-1),
- mp.FluxRegion(center=mp.Vector3(y=-r),size=mp.Vector3(2*r,0),weight=+1))
+flux_box = sim.add_flux(
+ fcen,
+ 0,
+ 1,
+ mp.FluxRegion(center=mp.Vector3(x=-r), size=mp.Vector3(0, 2 * r), weight=+1),
+ mp.FluxRegion(center=mp.Vector3(x=+r), size=mp.Vector3(0, 2 * r), weight=-1),
+ mp.FluxRegion(center=mp.Vector3(y=+r), size=mp.Vector3(2 * r, 0), weight=-1),
+ mp.FluxRegion(center=mp.Vector3(y=-r), size=mp.Vector3(2 * r, 0), weight=+1),
+)
sim.run(until_after_sources=100)
-Dz = sim.get_dft_array(dft_fields,mp.Dz,0)
-Ez = sim.get_dft_array(dft_fields,mp.Ez,0)
-absorbed_power_density = 2*np.pi*fcen * np.imag(np.conj(Ez)*Dz)
+Dz = sim.get_dft_array(dft_fields, mp.Dz, 0)
+Ez = sim.get_dft_array(dft_fields, mp.Ez, 0)
+absorbed_power_density = 2 * np.pi * fcen * np.imag(np.conj(Ez) * Dz)
-dxy = 1/resolution**2
-absorbed_power = np.sum(absorbed_power_density)*dxy
+dxy = 1 / resolution**2
+absorbed_power = np.sum(absorbed_power_density) * dxy
absorbed_flux = mp.get_fluxes(flux_box)[0]
-err = abs(absorbed_power-absorbed_flux)/absorbed_flux
-print(f"flux:, {absorbed_power} (dft_fields), {absorbed_flux} (dft_flux), {err} (error)")
+err = abs(absorbed_power - absorbed_flux) / absorbed_flux
+print(
+ f"flux:, {absorbed_power} (dft_fields), {absorbed_flux} (dft_flux), {err} (error)"
+)
plt.figure()
sim.plot2D()
-plt.savefig('power_density_cell.png',dpi=150,bbox_inches='tight')
+plt.savefig("power_density_cell.png", dpi=150, bbox_inches="tight")
plt.figure()
-x = np.linspace(-r,r,Dz.shape[0])
-y = np.linspace(-r,r,Dz.shape[1])
-plt.pcolormesh(x,
- y,
- np.transpose(absorbed_power_density),
- cmap='inferno_r',
- shading='gouraud',
- vmin=0,
- vmax=np.amax(absorbed_power_density))
+x = np.linspace(-r, r, Dz.shape[0])
+y = np.linspace(-r, r, Dz.shape[1])
+plt.pcolormesh(
+ x,
+ y,
+ np.transpose(absorbed_power_density),
+ cmap="inferno_r",
+ shading="gouraud",
+ vmin=0,
+ vmax=np.amax(absorbed_power_density),
+)
plt.xlabel("x (μm)")
-plt.xticks(np.linspace(-r,r,5))
+plt.xticks(np.linspace(-r, r, 5))
plt.ylabel("y (μm)")
-plt.yticks(np.linspace(-r,r,5))
-plt.gca().set_aspect('equal')
-plt.title("absorbed power density" + "\n" +"SiO2 Labs(λ={} μm) = {:.2f} μm".format(wvl,wvl/np.imag(np.sqrt(SiO2.epsilon(fcen)[0][0]))))
+plt.yticks(np.linspace(-r, r, 5))
+plt.gca().set_aspect("equal")
+plt.title(
+ "absorbed power density"
+ + "\n"
+ + "SiO2 Labs(λ={} μm) = {:.2f} μm".format(
+ wvl, wvl / np.imag(np.sqrt(SiO2.epsilon(fcen)[0][0]))
+ )
+)
plt.colorbar()
-plt.savefig('power_density_map.png',dpi=150,bbox_inches='tight')
+plt.savefig("power_density_map.png", dpi=150, bbox_inches="tight")
diff --git a/python/examples/absorber-1d.py b/python/examples/absorber-1d.py
index b6ec258fa..606e01b80 100644
--- a/python/examples/absorber-1d.py
+++ b/python/examples/absorber-1d.py
@@ -10,29 +10,41 @@ def main(args):
resolution = 40
cell_size = mp.Vector3(z=10)
- boundary_layers = [mp.PML(1, direction=mp.Z) if args.pml else mp.Absorber(1, direction=mp.Z)]
-
- sources = [mp.Source(src=mp.GaussianSource(1 / 0.803, fwidth=0.1),
- center=mp.Vector3(),
- component=mp.Ex)]
+ boundary_layers = [
+ mp.PML(1, direction=mp.Z) if args.pml else mp.Absorber(1, direction=mp.Z)
+ ]
+
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(1 / 0.803, fwidth=0.1),
+ center=mp.Vector3(),
+ component=mp.Ex,
+ )
+ ]
def print_stuff(sim):
p = sim.get_field_point(mp.Ex, mp.Vector3())
print(f"ex:, {sim.meep_time()}, {p.real}")
- sim = mp.Simulation(cell_size=cell_size,
- resolution=resolution,
- dimensions=1,
- default_material=Al,
- boundary_layers=boundary_layers,
- sources=sources)
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ dimensions=1,
+ default_material=Al,
+ boundary_layers=boundary_layers,
+ sources=sources,
+ )
- sim.run(mp.at_every(10, print_stuff),
- until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(), 1e-6))
+ sim.run(
+ mp.at_every(10, print_stuff),
+ until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(), 1e-6),
+ )
-if __name__ == '__main__':
+if __name__ == "__main__":
parser = argparse.ArgumentParser()
- parser.add_argument('-pml', action='store_true', default=False, help='Use PML as boundary layer')
+ parser.add_argument(
+ "-pml", action="store_true", default=False, help="Use PML as boundary layer"
+ )
args = parser.parse_args()
main(args)
diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb
index 321cf70de..dfc36d0cd 100644
--- a/python/examples/adjoint_optimization/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb
+++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb
@@ -38,6 +38,7 @@
"import numpy as np\n",
"from autograd import numpy as npa\n",
"from matplotlib import pyplot as plt\n",
+ "\n",
"mp.quiet(quietval=True)\n",
"seed = 240\n",
"np.random.seed(seed)\n",
@@ -62,7 +63,7 @@
"\n",
"Sx = 6\n",
"Sy = 5\n",
- "cell_size = mp.Vector3(Sx,Sy)\n",
+ "cell_size = mp.Vector3(Sx, Sy)\n",
"\n",
"pml_layers = [mp.PML(1.0)]"
]
@@ -80,19 +81,23 @@
"metadata": {},
"outputs": [],
"source": [
- "fcen = 1/1.55\n",
+ "fcen = 1 / 1.55\n",
"width = 0.2\n",
"fwidth = width * fcen\n",
- "source_center = [-1,0,0]\n",
- "source_size = mp.Vector3(0,2,0)\n",
- "kpoint = mp.Vector3(1,0,0)\n",
- "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n",
- "source = [mp.EigenModeSource(src,\n",
- " eig_band = 1,\n",
- " direction=mp.NO_DIRECTION,\n",
- " eig_kpoint=kpoint,\n",
- " size = source_size,\n",
- " center=source_center)]"
+ "source_center = [-1, 0, 0]\n",
+ "source_size = mp.Vector3(0, 2, 0)\n",
+ "kpoint = mp.Vector3(1, 0, 0)\n",
+ "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n",
+ "source = [\n",
+ " mp.EigenModeSource(\n",
+ " src,\n",
+ " eig_band=1,\n",
+ " direction=mp.NO_DIRECTION,\n",
+ " eig_kpoint=kpoint,\n",
+ " size=source_size,\n",
+ " center=source_center,\n",
+ " )\n",
+ "]"
]
},
{
@@ -114,16 +119,29 @@
"Nx = design_region_resolution\n",
"Ny = design_region_resolution\n",
"\n",
- "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n",
- "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(1, 1, 0)))\n",
+ "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n",
+ "design_region = mpa.DesignRegion(\n",
+ " design_variables, volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(1, 1, 0))\n",
+ ")\n",
"\n",
"\n",
"geometry = [\n",
- " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2, 0.5, 0)), # horizontal waveguide\n",
- " mp.Block(center=mp.Vector3(y=Sy/4), material=Si, size=mp.Vector3(0.5, Sy/2, 0)), # vertical waveguide\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables), # design region\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n",
- " e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi/2), e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi/2))\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(x=-Sx / 4), material=Si, size=mp.Vector3(Sx / 2, 0.5, 0)\n",
+ " ), # horizontal waveguide\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(y=Sy / 4), material=Si, size=mp.Vector3(0.5, Sy / 2, 0)\n",
+ " ), # vertical waveguide\n",
+ " mp.Block(\n",
+ " center=design_region.center, size=design_region.size, material=design_variables\n",
+ " ), # design region\n",
+ " mp.Block(\n",
+ " center=design_region.center,\n",
+ " size=design_region.size,\n",
+ " material=design_variables,\n",
+ " e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi / 2),\n",
+ " e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi / 2),\n",
+ " ),\n",
"]"
]
},
@@ -141,10 +159,10 @@
"outputs": [],
"source": [
"def mapping(x):\n",
- " x = x.reshape(Nx,Ny)\n",
- " x = (npa.flipud(x) + x)/2 # left-right symmetry\n",
- " x = (npa.fliplr(x) + x)/2 # up-down symmetry\n",
- " x = (npa.rot90(x) + x) # 90-degree symmetry\n",
+ " x = x.reshape(Nx, Ny)\n",
+ " x = (npa.flipud(x) + x) / 2 # left-right symmetry\n",
+ " x = (npa.fliplr(x) + x) / 2 # up-down symmetry\n",
+ " x = npa.rot90(x) + x # 90-degree symmetry\n",
" return x"
]
},
@@ -161,12 +179,14 @@
"metadata": {},
"outputs": [],
"source": [
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " eps_averaging=False,\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " eps_averaging=False,\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -184,7 +204,9 @@
"metadata": {},
"outputs": [],
"source": [
- "TE0 = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(0,1,0),size=mp.Vector3(x=2)),mode=1)\n",
+ "TE0 = mpa.EigenmodeCoefficient(\n",
+ " sim, mp.Volume(center=mp.Vector3(0, 1, 0), size=mp.Vector3(x=2)), mode=1\n",
+ ")\n",
"ob_list = [TE0]"
]
},
@@ -224,9 +246,9 @@
" objective_arguments=ob_list,\n",
" design_regions=[design_region],\n",
" fcen=fcen,\n",
- " df = 0,\n",
- " nf = 1,\n",
- " decay_fields=[mp.Ez]\n",
+ " df=0,\n",
+ " nf=1,\n",
+ " decay_fields=[mp.Ez],\n",
")"
]
},
@@ -243,7 +265,7 @@
"metadata": {},
"outputs": [],
"source": [
- "x0 = np.random.rand(Nx*Ny)\n",
+ "x0 = np.random.rand(Nx * Ny)\n",
"opt.update_design([x0])"
]
},
@@ -273,7 +295,7 @@
}
],
"source": [
- "opt.plot2D(True,frequency=1/1.55)\n",
+ "opt.plot2D(True, frequency=1 / 1.55)\n",
"plt.show()"
]
},
@@ -342,7 +364,7 @@
],
"source": [
"plt.figure()\n",
- "plt.imshow(np.rot90(dJ_du.reshape(Nx,Ny)))"
+ "plt.imshow(np.rot90(dJ_du.reshape(Nx, Ny)))"
]
},
{
@@ -362,7 +384,7 @@
"source": [
"db = 1e-3\n",
"choose = 10\n",
- "g_discrete, idx = opt.calculate_fd_gradient(num_gradients=choose,db=db)"
+ "g_discrete, idx = opt.calculate_fd_gradient(num_gradients=choose, db=db)"
]
},
{
@@ -410,27 +432,31 @@
"min_g = np.min(g_discrete)\n",
"max_g = np.max(g_discrete)\n",
"\n",
- "fig = plt.figure(figsize=(12,6))\n",
+ "fig = plt.figure(figsize=(12, 6))\n",
"\n",
- "plt.subplot(1,2,1)\n",
- "plt.plot([min_g, max_g],[min_g, max_g],label='y=x comparison')\n",
- "plt.plot([min_g, max_g],[m*min_g+b, m*max_g+b],'--',label='Best fit')\n",
- "plt.plot(g_discrete,dJ_du[idx],'o',label='Adjoint comparison')\n",
- "plt.xlabel('Finite Difference Gradient')\n",
- "plt.ylabel('Adjoint Gradient')\n",
+ "plt.subplot(1, 2, 1)\n",
+ "plt.plot([min_g, max_g], [min_g, max_g], label=\"y=x comparison\")\n",
+ "plt.plot([min_g, max_g], [m * min_g + b, m * max_g + b], \"--\", label=\"Best fit\")\n",
+ "plt.plot(g_discrete, dJ_du[idx], \"o\", label=\"Adjoint comparison\")\n",
+ "plt.xlabel(\"Finite Difference Gradient\")\n",
+ "plt.ylabel(\"Adjoint Gradient\")\n",
"plt.legend()\n",
"plt.grid(True)\n",
"plt.axis(\"square\")\n",
"\n",
- "plt.subplot(1,2,2)\n",
- "rel_err = np.abs(np.squeeze(g_discrete) - np.squeeze(dJ_du[idx])) / np.abs(np.squeeze(g_discrete)) * 100\n",
- "plt.semilogy(g_discrete,rel_err,'o')\n",
+ "plt.subplot(1, 2, 2)\n",
+ "rel_err = (\n",
+ " np.abs(np.squeeze(g_discrete) - np.squeeze(dJ_du[idx]))\n",
+ " / np.abs(np.squeeze(g_discrete))\n",
+ " * 100\n",
+ ")\n",
+ "plt.semilogy(g_discrete, rel_err, \"o\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Finite Difference Gradient')\n",
- "plt.ylabel('Relative Error (%)')\n",
+ "plt.xlabel(\"Finite Difference Gradient\")\n",
+ "plt.ylabel(\"Relative Error (%)\")\n",
"\n",
"fig.tight_layout(rect=[0, 0.03, 1, 0.95])\n",
- "fig.suptitle('Resolution: {} Seed: {} Nx: {} Ny: {}'.format(resolution,seed,Nx,Ny))\n",
+ "fig.suptitle(\"Resolution: {} Seed: {} Nx: {} Ny: {}\".format(resolution, seed, Nx, Ny))\n",
"plt.show()"
]
},
@@ -460,7 +486,7 @@
"resolution = 20\n",
"opt.sim.resolution = resolution\n",
"f0, dJ_du = opt()\n",
- "g_discrete, idx = opt.calculate_fd_gradient(num_gradients=choose,db=db)"
+ "g_discrete, idx = opt.calculate_fd_gradient(num_gradients=choose, db=db)"
]
},
{
@@ -485,27 +511,31 @@
"min_g = np.min(g_discrete)\n",
"max_g = np.max(g_discrete)\n",
"\n",
- "fig = plt.figure(figsize=(12,6))\n",
+ "fig = plt.figure(figsize=(12, 6))\n",
"\n",
- "plt.subplot(1,2,1)\n",
- "plt.plot([min_g, max_g],[min_g, max_g],label='y=x comparison')\n",
- "plt.plot([min_g, max_g],[m*min_g+b, m*max_g+b],'--',label='Best fit')\n",
- "plt.plot(g_discrete,dJ_du[idx],'o',label='Adjoint comparison')\n",
- "plt.xlabel('Finite Difference Gradient')\n",
- "plt.ylabel('Adjoint Gradient')\n",
+ "plt.subplot(1, 2, 1)\n",
+ "plt.plot([min_g, max_g], [min_g, max_g], label=\"y=x comparison\")\n",
+ "plt.plot([min_g, max_g], [m * min_g + b, m * max_g + b], \"--\", label=\"Best fit\")\n",
+ "plt.plot(g_discrete, dJ_du[idx], \"o\", label=\"Adjoint comparison\")\n",
+ "plt.xlabel(\"Finite Difference Gradient\")\n",
+ "plt.ylabel(\"Adjoint Gradient\")\n",
"plt.legend()\n",
"plt.grid(True)\n",
"plt.axis(\"square\")\n",
"\n",
- "plt.subplot(1,2,2)\n",
- "rel_err = np.abs(np.squeeze(g_discrete) - np.squeeze(dJ_du[idx])) / np.abs(np.squeeze(g_discrete)) * 100\n",
- "plt.semilogy(g_discrete,rel_err,'o')\n",
+ "plt.subplot(1, 2, 2)\n",
+ "rel_err = (\n",
+ " np.abs(np.squeeze(g_discrete) - np.squeeze(dJ_du[idx]))\n",
+ " / np.abs(np.squeeze(g_discrete))\n",
+ " * 100\n",
+ ")\n",
+ "plt.semilogy(g_discrete, rel_err, \"o\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Finite Difference Gradient')\n",
- "plt.ylabel('Relative Error (%)')\n",
+ "plt.xlabel(\"Finite Difference Gradient\")\n",
+ "plt.ylabel(\"Relative Error (%)\")\n",
"\n",
"fig.tight_layout(rect=[0, 0.03, 1, 0.95])\n",
- "fig.suptitle('Resolution: {} Seed: {} Nx: {} Ny: {}'.format(resolution,seed,Nx,Ny))\n",
+ "fig.suptitle(\"Resolution: {} Seed: {} Nx: {} Ny: {}\".format(resolution, seed, Nx, Ny))\n",
"plt.show()"
]
},
diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/02-Waveguide_Bend-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/02-Waveguide_Bend-checkpoint.ipynb
index 5fed22162..4df3e0677 100644
--- a/python/examples/adjoint_optimization/.ipynb_checkpoints/02-Waveguide_Bend-checkpoint.ipynb
+++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/02-Waveguide_Bend-checkpoint.ipynb
@@ -31,6 +31,7 @@
"from autograd import numpy as npa\n",
"import nlopt\n",
"from matplotlib import pyplot as plt\n",
+ "\n",
"mp.verbosity(0)\n",
"Si = mp.Medium(index=3.4)\n",
"SiO2 = mp.Medium(index=1.44)"
@@ -53,66 +54,83 @@
"\n",
"Sx = 6\n",
"Sy = 5\n",
- "cell_size = mp.Vector3(Sx,Sy)\n",
+ "cell_size = mp.Vector3(Sx, Sy)\n",
"\n",
"pml_layers = [mp.PML(1.0)]\n",
"\n",
- "fcen = 1/1.55\n",
+ "fcen = 1 / 1.55\n",
"width = 0.2\n",
"fwidth = width * fcen\n",
- "source_center = [-1.5,0,0]\n",
- "source_size = mp.Vector3(0,2,0)\n",
- "kpoint = mp.Vector3(1,0,0)\n",
- "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n",
- "source = [mp.EigenModeSource(src,\n",
- " eig_band = 1,\n",
- " direction=mp.NO_DIRECTION,\n",
- " eig_kpoint=kpoint,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "source_center = [-1.5, 0, 0]\n",
+ "source_size = mp.Vector3(0, 2, 0)\n",
+ "kpoint = mp.Vector3(1, 0, 0)\n",
+ "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n",
+ "source = [\n",
+ " mp.EigenModeSource(\n",
+ " src,\n",
+ " eig_band=1,\n",
+ " direction=mp.NO_DIRECTION,\n",
+ " eig_kpoint=kpoint,\n",
+ " size=source_size,\n",
+ " center=source_center,\n",
+ " )\n",
+ "]\n",
"\n",
"design_region_resolution = 10\n",
"Nx = design_region_resolution\n",
"Ny = design_region_resolution\n",
"\n",
- "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n",
- "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(1, 1, 0)))\n",
+ "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n",
+ "design_region = mpa.DesignRegion(\n",
+ " design_variables, volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(1, 1, 0))\n",
+ ")\n",
"\n",
"\n",
"geometry = [\n",
- " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2, 0.5, 0)), # horizontal waveguide\n",
- " mp.Block(center=mp.Vector3(y=Sy/4), material=Si, size=mp.Vector3(0.5, Sy/2, 0)), # vertical waveguide\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables), # design region\n",
- " #mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(x=-Sx / 4), material=Si, size=mp.Vector3(Sx / 2, 0.5, 0)\n",
+ " ), # horizontal waveguide\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(y=Sy / 4), material=Si, size=mp.Vector3(0.5, Sy / 2, 0)\n",
+ " ), # vertical waveguide\n",
+ " mp.Block(\n",
+ " center=design_region.center, size=design_region.size, material=design_variables\n",
+ " ), # design region\n",
+ " # mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n",
" # e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi/2), e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi/2))\n",
- " # \n",
+ " #\n",
" # The commented lines above impose symmetry by overlapping design region with the same design variable. However,\n",
" # currently there is an issue of doing that; We give an alternative approach to impose symmetry in later tutorials.\n",
" # See https://github.com/NanoComp/meep/issues/1984 and https://github.com/NanoComp/meep/issues/2093\n",
- "\n",
"]\n",
"\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " eps_averaging=False,\n",
- " resolution=resolution)\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " eps_averaging=False,\n",
+ " resolution=resolution,\n",
+ ")\n",
"\n",
- "TE_top = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(0,1,0),size=mp.Vector3(x=2)),mode=1)\n",
+ "TE_top = mpa.EigenmodeCoefficient(\n",
+ " sim, mp.Volume(center=mp.Vector3(0, 1, 0), size=mp.Vector3(x=2)), mode=1\n",
+ ")\n",
"ob_list = [TE_top]\n",
"\n",
+ "\n",
"def J(alpha):\n",
" return npa.abs(alpha) ** 2\n",
"\n",
+ "\n",
"opt = mpa.OptimizationProblem(\n",
" simulation=sim,\n",
" objective_functions=J,\n",
" objective_arguments=ob_list,\n",
" design_regions=[design_region],\n",
" fcen=fcen,\n",
- " df = 0,\n",
- " nf = 1\n",
+ " df=0,\n",
+ " nf=1,\n",
")"
]
},
@@ -142,7 +160,7 @@
}
],
"source": [
- "x0 = 0.5*np.ones((Nx*Ny,))\n",
+ "x0 = 0.5 * np.ones((Nx * Ny,))\n",
"opt.update_design([x0])\n",
"\n",
"opt.plot2D(True)\n",
@@ -166,9 +184,11 @@
"source": [
"evaluation_history = []\n",
"sensitivity = [0]\n",
+ "\n",
+ "\n",
"def f(x, grad):\n",
" f0, dJ_du = opt([x])\n",
- " f0 = f0[0] # f0 is an array of length 1 \n",
+ " f0 = f0[0] # f0 is an array of length 1\n",
" if grad.size > 0:\n",
" grad[:] = np.squeeze(dJ_du)\n",
" evaluation_history.append(np.real(f0))\n",
@@ -236,10 +256,10 @@
"outputs": [],
"source": [
"plt.figure()\n",
- "plt.plot(evaluation_history,'o-')\n",
+ "plt.plot(evaluation_history, \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Iteration')\n",
- "plt.ylabel('FOM')\n",
+ "plt.xlabel(\"Iteration\")\n",
+ "plt.ylabel(\"FOM\")\n",
"plt.show()"
]
},
@@ -257,7 +277,11 @@
"outputs": [],
"source": [
"opt.update_design([x])\n",
- "opt.plot2D(True,plot_monitors_flag=False,output_plane=mp.Volume(center=(0,0,0),size=(2,2,0)))\n",
+ "opt.plot2D(\n",
+ " True,\n",
+ " plot_monitors_flag=False,\n",
+ " output_plane=mp.Volume(center=(0, 0, 0), size=(2, 2, 0)),\n",
+ ")\n",
"plt.axis(\"off\");"
]
},
@@ -276,11 +300,15 @@
"metadata": {},
"outputs": [],
"source": [
- "TE0 = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(-1,0,0),size=mp.Vector3(y=2)),mode=1)\n",
- "ob_list = [TE0,TE_top]\n",
+ "TE0 = mpa.EigenmodeCoefficient(\n",
+ " sim, mp.Volume(center=mp.Vector3(-1, 0, 0), size=mp.Vector3(y=2)), mode=1\n",
+ ")\n",
+ "ob_list = [TE0, TE_top]\n",
+ "\n",
+ "\n",
+ "def J(source, top):\n",
+ " return npa.abs(top / source) ** 2\n",
"\n",
- "def J(source,top):\n",
- " return npa.abs(top/source) ** 2\n",
"\n",
"opt.objective_functions = [J]\n",
"opt.objective_arguments = ob_list\n",
@@ -323,10 +351,10 @@
"outputs": [],
"source": [
"plt.figure()\n",
- "plt.plot(np.array(evaluation_history)*100,'o-')\n",
+ "plt.plot(np.array(evaluation_history) * 100, \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Iteration')\n",
- "plt.ylabel('Transmission (%)')\n",
+ "plt.xlabel(\"Iteration\")\n",
+ "plt.ylabel(\"Transmission (%)\")\n",
"plt.show()"
]
},
@@ -361,7 +389,11 @@
"outputs": [],
"source": [
"opt.update_design([x])\n",
- "opt.plot2D(True,plot_monitors_flag=False,output_plane=mp.Volume(center=(0,0,0),size=(2,2,0)))\n",
+ "opt.plot2D(\n",
+ " True,\n",
+ " plot_monitors_flag=False,\n",
+ " output_plane=mp.Volume(center=(0, 0, 0), size=(2, 2, 0)),\n",
+ ")\n",
"plt.axis(\"off\");"
]
},
@@ -378,7 +410,7 @@
"metadata": {},
"outputs": [],
"source": [
- "plt.imshow(np.rot90(np.squeeze(np.abs(sensitivity[0].reshape(Nx,Ny)))));"
+ "plt.imshow(np.rot90(np.squeeze(np.abs(sensitivity[0].reshape(Nx, Ny)))));"
]
}
],
diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/03-Filtered_Waveguide_Bend-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/03-Filtered_Waveguide_Bend-checkpoint.ipynb
index 049ea8d2e..18cf5784d 100644
--- a/python/examples/adjoint_optimization/.ipynb_checkpoints/03-Filtered_Waveguide_Bend-checkpoint.ipynb
+++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/03-Filtered_Waveguide_Bend-checkpoint.ipynb
@@ -38,6 +38,7 @@
"from matplotlib import pyplot as plt\n",
"from matplotlib.patches import Circle\n",
"from scipy import special, signal\n",
+ "\n",
"mp.verbosity(0)\n",
"Si = mp.Medium(index=3.4)\n",
"SiO2 = mp.Medium(index=1.44)"
@@ -66,7 +67,7 @@
"\n",
"resolution = 30\n",
"\n",
- "frequencies = 1/np.linspace(1.5,1.6,10)"
+ "frequencies = 1 / np.linspace(1.5, 1.6, 10)"
]
},
{
@@ -92,13 +93,15 @@
}
],
"source": [
- "minimum_length = 0.09 # minimum length scale (microns)\n",
- "eta_i = 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
- "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
- "eta_d = 1-eta_e # dilation design field thresholding point (between 0 and 1)\n",
- "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n",
+ "minimum_length = 0.09 # minimum length scale (microns)\n",
+ "eta_i = (\n",
+ " 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
+ ")\n",
+ "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
+ "eta_d = 1 - eta_e # dilation design field thresholding point (between 0 and 1)\n",
+ "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n",
"print(filter_radius)\n",
- "design_region_resolution = int(1*resolution)"
+ "design_region_resolution = int(1 * resolution)"
]
},
{
@@ -114,25 +117,29 @@
"metadata": {},
"outputs": [],
"source": [
- "Sx = 2*pml_size + 2*waveguide_length + design_region_width\n",
- "Sy = 2*pml_size + design_region_height + 0.5\n",
- "cell_size = mp.Vector3(Sx,Sy)\n",
+ "Sx = 2 * pml_size + 2 * waveguide_length + design_region_width\n",
+ "Sy = 2 * pml_size + design_region_height + 0.5\n",
+ "cell_size = mp.Vector3(Sx, Sy)\n",
"\n",
"pml_layers = [mp.PML(pml_size)]\n",
"\n",
- "fcen = 1/1.55\n",
+ "fcen = 1 / 1.55\n",
"width = 0.2\n",
"fwidth = width * fcen\n",
- "source_center = [-Sx/2 + pml_size + waveguide_length/3,0,0]\n",
- "source_size = mp.Vector3(0,Sy,0)\n",
- "kpoint = mp.Vector3(1,0,0)\n",
- "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n",
- "source = [mp.EigenModeSource(src,\n",
- " eig_band = 1,\n",
- " direction=mp.NO_DIRECTION,\n",
- " eig_kpoint=kpoint,\n",
- " size = source_size,\n",
- " center=source_center)]"
+ "source_center = [-Sx / 2 + pml_size + waveguide_length / 3, 0, 0]\n",
+ "source_size = mp.Vector3(0, Sy, 0)\n",
+ "kpoint = mp.Vector3(1, 0, 0)\n",
+ "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n",
+ "source = [\n",
+ " mp.EigenModeSource(\n",
+ " src,\n",
+ " eig_band=1,\n",
+ " direction=mp.NO_DIRECTION,\n",
+ " eig_kpoint=kpoint,\n",
+ " size=source_size,\n",
+ " center=source_center,\n",
+ " )\n",
+ "]"
]
},
{
@@ -148,11 +155,17 @@
"metadata": {},
"outputs": [],
"source": [
- "Nx = int(design_region_resolution*design_region_width)\n",
- "Ny = int(design_region_resolution*design_region_height)\n",
+ "Nx = int(design_region_resolution * design_region_width)\n",
+ "Ny = int(design_region_resolution * design_region_height)\n",
"\n",
- "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n",
- "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))"
+ "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n",
+ "design_region = mpa.DesignRegion(\n",
+ " design_variables,\n",
+ " volume=mp.Volume(\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(design_region_width, design_region_height, 0),\n",
+ " ),\n",
+ ")"
]
},
{
@@ -168,18 +181,20 @@
"metadata": {},
"outputs": [],
"source": [
- "x_g = np.linspace(-design_region_width/2,design_region_width/2,Nx)\n",
- "y_g = np.linspace(-design_region_height/2,design_region_height/2,Ny)\n",
- "X_g, Y_g = np.meshgrid(x_g,y_g,sparse=True,indexing='ij')\n",
+ "x_g = np.linspace(-design_region_width / 2, design_region_width / 2, Nx)\n",
+ "y_g = np.linspace(-design_region_height / 2, design_region_height / 2, Ny)\n",
+ "X_g, Y_g = np.meshgrid(x_g, y_g, sparse=True, indexing=\"ij\")\n",
"\n",
- "left_wg_mask = (X_g == -design_region_width/2) & (np.abs(Y_g) <= waveguide_width/2)\n",
- "top_wg_mask = (Y_g == design_region_width/2) & (np.abs(X_g) <= waveguide_width/2)\n",
+ "left_wg_mask = (X_g == -design_region_width / 2) & (np.abs(Y_g) <= waveguide_width / 2)\n",
+ "top_wg_mask = (Y_g == design_region_width / 2) & (np.abs(X_g) <= waveguide_width / 2)\n",
"Si_mask = left_wg_mask | top_wg_mask\n",
"\n",
- "border_mask = ((X_g == -design_region_width/2) | \n",
- " (X_g == design_region_width/2) | \n",
- " (Y_g == -design_region_height/2) | \n",
- " (Y_g == design_region_height/2))\n",
+ "border_mask = (\n",
+ " (X_g == -design_region_width / 2)\n",
+ " | (X_g == design_region_width / 2)\n",
+ " | (Y_g == -design_region_height / 2)\n",
+ " | (Y_g == design_region_height / 2)\n",
+ ")\n",
"SiO2_mask = border_mask.copy()\n",
"SiO2_mask[Si_mask] = False"
]
@@ -197,14 +212,20 @@
"metadata": {},
"outputs": [],
"source": [
- "def mapping(x,eta,beta):\n",
- " x = npa.where(Si_mask.flatten(),1,npa.where(SiO2_mask.flatten(),0,x))\n",
+ "def mapping(x, eta, beta):\n",
+ " x = npa.where(Si_mask.flatten(), 1, npa.where(SiO2_mask.flatten(), 0, x))\n",
" # filter\n",
- " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n",
- " \n",
+ " filtered_field = mpa.conic_filter(\n",
+ " x,\n",
+ " filter_radius,\n",
+ " design_region_width,\n",
+ " design_region_height,\n",
+ " design_region_resolution,\n",
+ " )\n",
+ "\n",
" # projection\n",
- " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n",
- " \n",
+ " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n",
+ "\n",
" # interpolate to actual materials\n",
" return projected_field.flatten()"
]
@@ -225,19 +246,32 @@
"outputs": [],
"source": [
"geometry = [\n",
- " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2, 0.5, 0)), # horizontal waveguide\n",
- " mp.Block(center=mp.Vector3(y=Sy/4), material=Si, size=mp.Vector3(0.5, Sy/2, 0)), # vertical waveguide\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables), # design region\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n",
- " e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi/2), e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi/2))\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(x=-Sx / 4), material=Si, size=mp.Vector3(Sx / 2, 0.5, 0)\n",
+ " ), # horizontal waveguide\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(y=Sy / 4), material=Si, size=mp.Vector3(0.5, Sy / 2, 0)\n",
+ " ), # vertical waveguide\n",
+ " mp.Block(\n",
+ " center=design_region.center, size=design_region.size, material=design_variables\n",
+ " ), # design region\n",
+ " mp.Block(\n",
+ " center=design_region.center,\n",
+ " size=design_region.size,\n",
+ " material=design_variables,\n",
+ " e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi / 2),\n",
+ " e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi / 2),\n",
+ " ),\n",
"]\n",
"\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=SiO2,\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=SiO2,\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -255,11 +289,27 @@
"source": [
"mode = 1\n",
"\n",
- "TE0 = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(x=-Sx/2 + pml_size + 2*waveguide_length/3),size=mp.Vector3(y=Sy)),mode)\n",
- "TE_top = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(0,Sx/2 - pml_size - 2*waveguide_length/3,0),size=mp.Vector3(x=Sx)),mode)\n",
- "ob_list = [TE0,TE_top]\n",
- "def J(source,top):\n",
- " power = npa.abs(top/source)\n",
+ "TE0 = mpa.EigenmodeCoefficient(\n",
+ " sim,\n",
+ " mp.Volume(\n",
+ " center=mp.Vector3(x=-Sx / 2 + pml_size + 2 * waveguide_length / 3),\n",
+ " size=mp.Vector3(y=Sy),\n",
+ " ),\n",
+ " mode,\n",
+ ")\n",
+ "TE_top = mpa.EigenmodeCoefficient(\n",
+ " sim,\n",
+ " mp.Volume(\n",
+ " center=mp.Vector3(0, Sx / 2 - pml_size - 2 * waveguide_length / 3, 0),\n",
+ " size=mp.Vector3(x=Sx),\n",
+ " ),\n",
+ " mode,\n",
+ ")\n",
+ "ob_list = [TE0, TE_top]\n",
+ "\n",
+ "\n",
+ "def J(source, top):\n",
+ " power = npa.abs(top / source)\n",
" return npa.mean(power)"
]
},
@@ -270,10 +320,10 @@
"outputs": [],
"source": [
"opt = mpa.OptimizationProblem(\n",
- " simulation = sim,\n",
- " objective_functions = J,\n",
- " objective_arguments = ob_list,\n",
- " design_regions = [design_region],\n",
+ " simulation=sim,\n",
+ " objective_functions=J,\n",
+ " objective_arguments=ob_list,\n",
+ " design_regions=[design_region],\n",
" frequencies=frequencies,\n",
")"
]
@@ -304,9 +354,9 @@
}
],
"source": [
- "rho_vector = np.random.rand(Nx*Ny)\n",
- "opt.update_design([mapping(rho_vector,eta_i,1e3)])\n",
- "opt.plot2D(True,output_plane=mp.Volume(center=(0,0,0),size=(3,3,0)))\n",
+ "rho_vector = np.random.rand(Nx * Ny)\n",
+ "opt.update_design([mapping(rho_vector, eta_i, 1e3)])\n",
+ "opt.plot2D(True, output_plane=mp.Volume(center=(0, 0, 0), size=(3, 3, 0)))\n",
"plt.show()"
]
},
@@ -339,19 +389,19 @@
"beta = 2048\n",
"\n",
"plt.figure()\n",
- "ax1 = plt.subplot(1,3,1)\n",
- "opt.update_design([mapping(rho_vector,0.498,beta)])\n",
- "opt.plot2D(True,ax=ax1,output_plane=mp.Volume(center=(0,0,0),size=(3,3,0)))\n",
+ "ax1 = plt.subplot(1, 3, 1)\n",
+ "opt.update_design([mapping(rho_vector, 0.498, beta)])\n",
+ "opt.plot2D(True, ax=ax1, output_plane=mp.Volume(center=(0, 0, 0), size=(3, 3, 0)))\n",
"plt.title(\"Dilation\")\n",
"\n",
- "ax2 = plt.subplot(1,3,2)\n",
- "opt.update_design([mapping(rho_vector,0.5,beta)])\n",
- "opt.plot2D(True,ax=ax2,output_plane=mp.Volume(center=(0,0,0),size=(3,3,0)))\n",
+ "ax2 = plt.subplot(1, 3, 2)\n",
+ "opt.update_design([mapping(rho_vector, 0.5, beta)])\n",
+ "opt.plot2D(True, ax=ax2, output_plane=mp.Volume(center=(0, 0, 0), size=(3, 3, 0)))\n",
"plt.title(\"Intermediate\")\n",
"\n",
- "ax3 = plt.subplot(1,3,3)\n",
- "opt.update_design([mapping(rho_vector,0.502,beta)])\n",
- "opt.plot2D(True,ax=ax3,output_plane=mp.Volume(center=(0,0,0),size=(3,3,0)))\n",
+ "ax3 = plt.subplot(1, 3, 3)\n",
+ "opt.update_design([mapping(rho_vector, 0.502, beta)])\n",
+ "opt.plot2D(True, ax=ax3, output_plane=mp.Volume(center=(0, 0, 0), size=(3, 3, 0)))\n",
"plt.title(\"Erosion\")\n",
"\n",
"plt.tight_layout()\n",
@@ -373,27 +423,36 @@
"source": [
"evaluation_history = []\n",
"cur_iter = [0]\n",
+ "\n",
+ "\n",
"def f(v, gradient, cur_beta):\n",
- " print(\"Current iteration: {}\".format(cur_iter[0]+1))\n",
- " \n",
- " f0, dJ_du = opt([mapping(v,eta_i,cur_beta)]) # compute objective and gradient\n",
- " \n",
+ " print(\"Current iteration: {}\".format(cur_iter[0] + 1))\n",
+ "\n",
+ " f0, dJ_du = opt([mapping(v, eta_i, cur_beta)]) # compute objective and gradient\n",
+ "\n",
" if gradient.size > 0:\n",
- " gradient[:] = tensor_jacobian_product(mapping,0)(v,eta_i,cur_beta,np.sum(dJ_du,axis=1)) # backprop\n",
- " \n",
- " \n",
+ " gradient[:] = tensor_jacobian_product(mapping, 0)(\n",
+ " v, eta_i, cur_beta, np.sum(dJ_du, axis=1)\n",
+ " ) # backprop\n",
+ "\n",
" evaluation_history.append(np.real(f0))\n",
- " \n",
+ "\n",
" plt.figure()\n",
" ax = plt.gca()\n",
- " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- " circ = Circle((2,2),minimum_length/2)\n",
+ " opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ " )\n",
+ " circ = Circle((2, 2), minimum_length / 2)\n",
" ax.add_patch(circ)\n",
- " ax.axis('off')\n",
+ " ax.axis(\"off\")\n",
" plt.show()\n",
- " \n",
+ "\n",
" cur_iter[0] = cur_iter[0] + 1\n",
- " \n",
+ "\n",
" return np.real(f0)"
]
},
@@ -1996,17 +2055,17 @@
],
"source": [
"algorithm = nlopt.LD_MMA\n",
- "n = Nx * Ny # number of parameters\n",
+ "n = Nx * Ny # number of parameters\n",
"\n",
"# Initial guess\n",
"x = np.ones((n,)) * 0.5\n",
- "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n",
- "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n",
+ "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n",
+ "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n",
"\n",
"# lower and upper bounds\n",
- "lb = np.zeros((Nx*Ny,))\n",
+ "lb = np.zeros((Nx * Ny,))\n",
"lb[Si_mask.flatten()] = 1\n",
- "ub = np.ones((Nx*Ny,))\n",
+ "ub = np.ones((Nx * Ny,))\n",
"ub[SiO2_mask.flatten()] = 0\n",
"\n",
"cur_beta = 4\n",
@@ -2017,10 +2076,10 @@
" solver = nlopt.opt(algorithm, n)\n",
" solver.set_lower_bounds(lb)\n",
" solver.set_upper_bounds(ub)\n",
- " solver.set_max_objective(lambda a,g: f(a,g,cur_beta))\n",
+ " solver.set_max_objective(lambda a, g: f(a, g, cur_beta))\n",
" solver.set_maxeval(update_factor)\n",
" x[:] = solver.optimize(x)\n",
- " cur_beta = cur_beta*beta_scale"
+ " cur_beta = cur_beta * beta_scale"
]
},
{
@@ -2050,10 +2109,10 @@
],
"source": [
"plt.figure()\n",
- "plt.plot(10*np.log10(evaluation_history),'o-')\n",
+ "plt.plot(10 * np.log10(evaluation_history), \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Iteration')\n",
- "plt.ylabel('Average Insertion Loss (dB)')\n",
+ "plt.xlabel(\"Iteration\")\n",
+ "plt.ylabel(\"Average Insertion Loss (dB)\")\n",
"plt.show()"
]
},
@@ -2083,13 +2142,19 @@
}
],
"source": [
- "opt.update_design([mapping(x,eta_i,cur_beta)])\n",
+ "opt.update_design([mapping(x, eta_i, cur_beta)])\n",
"plt.figure()\n",
"ax = plt.gca()\n",
- "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- "circ = Circle((2,2),minimum_length/2)\n",
+ "opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ ")\n",
+ "circ = Circle((2, 2), minimum_length / 2)\n",
"ax.add_patch(circ)\n",
- "ax.axis('off')\n",
+ "ax.axis(\"off\")\n",
"plt.show()"
]
},
@@ -2114,11 +2179,11 @@
}
],
"source": [
- "f0, dJ_du = opt([mapping(x,eta_i,cur_beta)],need_gradient = False)\n",
+ "f0, dJ_du = opt([mapping(x, eta_i, cur_beta)], need_gradient=False)\n",
"frequencies = opt.frequencies\n",
"source_coef, top_coef = opt.get_objective_arguments()\n",
"\n",
- "top_profile = np.abs(top_coef/source_coef) ** 2"
+ "top_profile = np.abs(top_coef / source_coef) ** 2"
]
},
{
@@ -2153,19 +2218,19 @@
],
"source": [
"plt.figure()\n",
- "plt.plot(1/frequencies,top_profile*100,'-o')\n",
+ "plt.plot(1 / frequencies, top_profile * 100, \"-o\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Wavelength (microns)')\n",
- "plt.ylabel('Transmission (%)')\n",
- "plt.ylim(98,100)\n",
+ "plt.xlabel(\"Wavelength (microns)\")\n",
+ "plt.ylabel(\"Transmission (%)\")\n",
+ "plt.ylim(98, 100)\n",
"plt.show()\n",
"\n",
"plt.figure()\n",
- "plt.plot(1/frequencies,10*np.log10(top_profile),'-o')\n",
+ "plt.plot(1 / frequencies, 10 * np.log10(top_profile), \"-o\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Wavelength (microns)')\n",
- "plt.ylabel('Insertion Loss (dB)')\n",
- "plt.ylim(-0.1,0)\n",
+ "plt.xlabel(\"Wavelength (microns)\")\n",
+ "plt.ylabel(\"Insertion Loss (dB)\")\n",
+ "plt.ylim(-0.1, 0)\n",
"plt.show()"
]
},
diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/04-Splitter-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/04-Splitter-checkpoint.ipynb
index f67d5f19a..3e68cbcca 100644
--- a/python/examples/adjoint_optimization/.ipynb_checkpoints/04-Splitter-checkpoint.ipynb
+++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/04-Splitter-checkpoint.ipynb
@@ -33,6 +33,7 @@
"from matplotlib import pyplot as plt\n",
"from matplotlib.patches import Circle\n",
"import nlopt\n",
+ "\n",
"seed = 240\n",
"np.random.seed(seed)\n",
"mp.quiet(quietval=True)\n",
@@ -63,13 +64,13 @@
"\n",
"minimum_length = 0.09\n",
"eta_e = 0.55\n",
- "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n",
+ "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n",
"eta_i = 0.5\n",
- "eta_d = 1-eta_e\n",
- "design_region_resolution = int(5*resolution)\n",
+ "eta_d = 1 - eta_e\n",
+ "design_region_resolution = int(5 * resolution)\n",
"\n",
- "frequencies = 1/np.linspace(1.5,1.6,10)\n",
- "#print(1/frequencies)"
+ "frequencies = 1 / np.linspace(1.5, 1.6, 10)\n",
+ "# print(1/frequencies)"
]
},
{
@@ -85,25 +86,29 @@
"metadata": {},
"outputs": [],
"source": [
- "Sx = 2*pml_size + 2*waveguide_length + design_region_width\n",
- "Sy = 2*pml_size + design_region_height + 0.5\n",
- "cell_size = mp.Vector3(Sx,Sy)\n",
+ "Sx = 2 * pml_size + 2 * waveguide_length + design_region_width\n",
+ "Sy = 2 * pml_size + design_region_height + 0.5\n",
+ "cell_size = mp.Vector3(Sx, Sy)\n",
"\n",
"pml_layers = [mp.PML(pml_size)]\n",
"\n",
- "fcen = 1/1.56\n",
+ "fcen = 1 / 1.56\n",
"width = 0.2\n",
"fwidth = width * fcen\n",
- "source_center = [-Sx/2 + pml_size + waveguide_length/3,0,0]\n",
- "source_size = mp.Vector3(0,2,0)\n",
- "kpoint = mp.Vector3(1,0,0)\n",
- "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n",
- "source = [mp.EigenModeSource(src,\n",
- " eig_band = 1,\n",
- " direction=mp.NO_DIRECTION,\n",
- " eig_kpoint=kpoint,\n",
- " size = source_size,\n",
- " center=source_center)]"
+ "source_center = [-Sx / 2 + pml_size + waveguide_length / 3, 0, 0]\n",
+ "source_size = mp.Vector3(0, 2, 0)\n",
+ "kpoint = mp.Vector3(1, 0, 0)\n",
+ "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n",
+ "source = [\n",
+ " mp.EigenModeSource(\n",
+ " src,\n",
+ " eig_band=1,\n",
+ " direction=mp.NO_DIRECTION,\n",
+ " eig_kpoint=kpoint,\n",
+ " size=source_size,\n",
+ " center=source_center,\n",
+ " )\n",
+ "]"
]
},
{
@@ -119,11 +124,17 @@
"metadata": {},
"outputs": [],
"source": [
- "Nx = int(design_region_resolution*design_region_width)\n",
- "Ny = int(design_region_resolution*design_region_height)\n",
+ "Nx = int(design_region_resolution * design_region_width)\n",
+ "Ny = int(design_region_resolution * design_region_height)\n",
"\n",
- "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n",
- "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))"
+ "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n",
+ "design_region = mpa.DesignRegion(\n",
+ " design_variables,\n",
+ " volume=mp.Volume(\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(design_region_width, design_region_height, 0),\n",
+ " ),\n",
+ ")"
]
},
{
@@ -139,13 +150,19 @@
"metadata": {},
"outputs": [],
"source": [
- "def mapping(x,eta,beta): \n",
+ "def mapping(x, eta, beta):\n",
" # filter\n",
- " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n",
- " \n",
+ " filtered_field = mpa.conic_filter(\n",
+ " x,\n",
+ " filter_radius,\n",
+ " design_region_width,\n",
+ " design_region_height,\n",
+ " design_region_resolution,\n",
+ " )\n",
+ "\n",
" # projection\n",
- " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n",
- " \n",
+ " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n",
+ "\n",
" # interpolate to actual materials\n",
" return projected_field.flatten()"
]
@@ -164,21 +181,27 @@
"outputs": [],
"source": [
"# Define spatial arrays used to generate bit masks\n",
- "x_g = np.linspace(-design_region_width/2,design_region_width/2,Nx)\n",
- "y_g = np.linspace(-design_region_height/2,design_region_height/2,Ny)\n",
- "X_g, Y_g = np.meshgrid(x_g,y_g,sparse=True,indexing='ij')\n",
+ "x_g = np.linspace(-design_region_width / 2, design_region_width / 2, Nx)\n",
+ "y_g = np.linspace(-design_region_height / 2, design_region_height / 2, Ny)\n",
+ "X_g, Y_g = np.meshgrid(x_g, y_g, sparse=True, indexing=\"ij\")\n",
"\n",
"# Define the core mask\n",
- "left_wg_mask = (X_g == -design_region_width/2) & (np.abs(Y_g) <= waveguide_width/2)\n",
- "top_right_wg_mask = (X_g == design_region_width/2) & (np.abs(Y_g + arm_separation/2) <= waveguide_width/2)\n",
- "bottom_right_wg_mask = (X_g == design_region_width/2) & (np.abs(Y_g - arm_separation/2) <= waveguide_width/2)\n",
+ "left_wg_mask = (X_g == -design_region_width / 2) & (np.abs(Y_g) <= waveguide_width / 2)\n",
+ "top_right_wg_mask = (X_g == design_region_width / 2) & (\n",
+ " np.abs(Y_g + arm_separation / 2) <= waveguide_width / 2\n",
+ ")\n",
+ "bottom_right_wg_mask = (X_g == design_region_width / 2) & (\n",
+ " np.abs(Y_g - arm_separation / 2) <= waveguide_width / 2\n",
+ ")\n",
"Si_mask = left_wg_mask | top_right_wg_mask | bottom_right_wg_mask\n",
"\n",
"# Define the cladding mask\n",
- "border_mask = ((X_g == -design_region_width/2) | \n",
- " (X_g == design_region_width/2) | \n",
- " (Y_g == -design_region_height/2) | \n",
- " (Y_g == design_region_height/2))\n",
+ "border_mask = (\n",
+ " (X_g == -design_region_width / 2)\n",
+ " | (X_g == design_region_width / 2)\n",
+ " | (Y_g == -design_region_height / 2)\n",
+ " | (Y_g == design_region_height / 2)\n",
+ ")\n",
"SiO2_mask = border_mask.copy()\n",
"SiO2_mask[Si_mask] = False"
]
@@ -197,20 +220,41 @@
"outputs": [],
"source": [
"geometry = [\n",
- " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2+1, waveguide_width, 0)), # left waveguide\n",
- " mp.Block(center=mp.Vector3(x=Sx/4, y=arm_separation/2), material=Si, size=mp.Vector3(Sx/2+1, waveguide_width, 0)), # top right waveguide\n",
- " mp.Block(center=mp.Vector3(x=Sx/4, y=-arm_separation/2), material=Si, size=mp.Vector3(Sx/2+1, waveguide_width, 0)), # bottom right waveguide\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables),\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e2=mp.Vector3(y=-1))\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(x=-Sx / 4),\n",
+ " material=Si,\n",
+ " size=mp.Vector3(Sx / 2 + 1, waveguide_width, 0),\n",
+ " ), # left waveguide\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(x=Sx / 4, y=arm_separation / 2),\n",
+ " material=Si,\n",
+ " size=mp.Vector3(Sx / 2 + 1, waveguide_width, 0),\n",
+ " ), # top right waveguide\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(x=Sx / 4, y=-arm_separation / 2),\n",
+ " material=Si,\n",
+ " size=mp.Vector3(Sx / 2 + 1, waveguide_width, 0),\n",
+ " ), # bottom right waveguide\n",
+ " mp.Block(\n",
+ " center=design_region.center, size=design_region.size, material=design_variables\n",
+ " ),\n",
+ " mp.Block(\n",
+ " center=design_region.center,\n",
+ " size=design_region.size,\n",
+ " material=design_variables,\n",
+ " e2=mp.Vector3(y=-1),\n",
+ " ),\n",
"]\n",
"\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " symmetries=[mp.Mirror(direction=mp.Y)],\n",
- " default_material=SiO2,\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " symmetries=[mp.Mirror(direction=mp.Y)],\n",
+ " default_material=SiO2,\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -228,20 +272,47 @@
"source": [
"mode = 1\n",
"\n",
- "TE0 = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(x=-Sx/2 + pml_size + 2*waveguide_length/3),size=mp.Vector3(y=1.5)),mode)\n",
- "TE_top = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(Sx/2 - pml_size - 2*waveguide_length/3,arm_separation/2,0),size=mp.Vector3(y=arm_separation)),mode)\n",
- "TE_bottom = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(Sx/2 - pml_size - 2*waveguide_length/3,-arm_separation/2,0),size=mp.Vector3(y=arm_separation)),mode)\n",
- "ob_list = [TE0,TE_top,TE_bottom]\n",
+ "TE0 = mpa.EigenmodeCoefficient(\n",
+ " sim,\n",
+ " mp.Volume(\n",
+ " center=mp.Vector3(x=-Sx / 2 + pml_size + 2 * waveguide_length / 3),\n",
+ " size=mp.Vector3(y=1.5),\n",
+ " ),\n",
+ " mode,\n",
+ ")\n",
+ "TE_top = mpa.EigenmodeCoefficient(\n",
+ " sim,\n",
+ " mp.Volume(\n",
+ " center=mp.Vector3(\n",
+ " Sx / 2 - pml_size - 2 * waveguide_length / 3, arm_separation / 2, 0\n",
+ " ),\n",
+ " size=mp.Vector3(y=arm_separation),\n",
+ " ),\n",
+ " mode,\n",
+ ")\n",
+ "TE_bottom = mpa.EigenmodeCoefficient(\n",
+ " sim,\n",
+ " mp.Volume(\n",
+ " center=mp.Vector3(\n",
+ " Sx / 2 - pml_size - 2 * waveguide_length / 3, -arm_separation / 2, 0\n",
+ " ),\n",
+ " size=mp.Vector3(y=arm_separation),\n",
+ " ),\n",
+ " mode,\n",
+ ")\n",
+ "ob_list = [TE0, TE_top, TE_bottom]\n",
+ "\n",
"\n",
- "def J(source,top,bottom):\n",
- " power = npa.abs(top/source) ** 2 + npa.abs(bottom/source) ** 2\n",
+ "def J(source, top, bottom):\n",
+ " power = npa.abs(top / source) ** 2 + npa.abs(bottom / source) ** 2\n",
" return npa.mean(power)\n",
"\n",
+ "\n",
"opt = mpa.OptimizationProblem(\n",
- " simulation = sim,\n",
- " objective_functions = J,\n",
- " objective_arguments = ob_list,\n",
- " design_regions = [design_region],\n",
+ " simulation=sim,\n",
+ " objective_functions=J,\n",
+ " objective_arguments=ob_list,\n",
+ " design_regions=[design_region],\n",
" frequencies=frequencies,\n",
")"
]
@@ -273,7 +344,13 @@
],
"source": [
"plt.figure()\n",
- "x0 = mapping(np.random.rand(Nx*Ny,),eta_i,128)\n",
+ "x0 = mapping(\n",
+ " np.random.rand(\n",
+ " Nx * Ny,\n",
+ " ),\n",
+ " eta_i,\n",
+ " 128,\n",
+ ")\n",
"opt.update_design([x0])\n",
"opt.plot2D(True)\n",
"plt.show()"
@@ -294,27 +371,37 @@
"source": [
"evaluation_history = []\n",
"cur_iter = [0]\n",
+ "\n",
+ "\n",
"def f(v, gradient, cur_beta):\n",
- " print(\"Current iteration: {}\".format(cur_iter[0]+1))\n",
- " \n",
- " f0, dJ_du = opt([mapping(v,eta_i,cur_beta)])\n",
- " \n",
+ " print(\"Current iteration: {}\".format(cur_iter[0] + 1))\n",
+ "\n",
+ " f0, dJ_du = opt([mapping(v, eta_i, cur_beta)])\n",
+ "\n",
" plt.figure()\n",
" ax = plt.gca()\n",
- " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- " circ = Circle((2,2),minimum_length/2)\n",
+ " opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ " )\n",
+ " circ = Circle((2, 2), minimum_length / 2)\n",
" ax.add_patch(circ)\n",
- " ax.axis('off')\n",
- " plt.savefig('media/splitter_{:03d}.png'.format(cur_iter[0]),dpi=300)\n",
+ " ax.axis(\"off\")\n",
+ " plt.savefig(\"media/splitter_{:03d}.png\".format(cur_iter[0]), dpi=300)\n",
" plt.show()\n",
- " \n",
+ "\n",
" if gradient.size > 0:\n",
- " gradient[:] = tensor_jacobian_product(mapping,0)(v,eta_i,cur_beta,np.sum(dJ_du,axis=1))\n",
- " \n",
+ " gradient[:] = tensor_jacobian_product(mapping, 0)(\n",
+ " v, eta_i, cur_beta, np.sum(dJ_du, axis=1)\n",
+ " )\n",
+ "\n",
" evaluation_history.append(np.max(np.real(f0)))\n",
- " \n",
+ "\n",
" cur_iter[0] = cur_iter[0] + 1\n",
- " \n",
+ "\n",
" return np.real(f0)"
]
},
@@ -1703,17 +1790,17 @@
],
"source": [
"algorithm = nlopt.LD_MMA\n",
- "n = Nx * Ny # number of parameters\n",
+ "n = Nx * Ny # number of parameters\n",
"\n",
"# Initial guess\n",
"x = np.ones((n,)) * 0.5\n",
- "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n",
- "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n",
+ "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n",
+ "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n",
"\n",
"# lower and upper bounds\n",
- "lb = np.zeros((Nx*Ny,))\n",
+ "lb = np.zeros((Nx * Ny,))\n",
"lb[Si_mask.flatten()] = 1\n",
- "ub = np.ones((Nx*Ny,))\n",
+ "ub = np.ones((Nx * Ny,))\n",
"ub[SiO2_mask.flatten()] = 0\n",
"\n",
"cur_beta = 4\n",
@@ -1721,16 +1808,16 @@
"num_betas = 6\n",
"update_factor = 12\n",
"for iters in range(num_betas):\n",
- " print(\"current beta: \",cur_beta)\n",
- " \n",
+ " print(\"current beta: \", cur_beta)\n",
+ "\n",
" solver = nlopt.opt(algorithm, n)\n",
" solver.set_lower_bounds(lb)\n",
" solver.set_upper_bounds(ub)\n",
- " solver.set_max_objective(lambda a,g: f(a,g,cur_beta))\n",
+ " solver.set_max_objective(lambda a, g: f(a, g, cur_beta))\n",
" solver.set_maxeval(update_factor)\n",
" solver.set_xtol_rel(1e-4)\n",
" x[:] = solver.optimize(x)\n",
- " cur_beta = cur_beta*beta_scale"
+ " cur_beta = cur_beta * beta_scale"
]
},
{
@@ -1760,10 +1847,10 @@
],
"source": [
"plt.figure()\n",
- "plt.plot(10*np.log10(0.5*np.array(evaluation_history)),'o-')\n",
+ "plt.plot(10 * np.log10(0.5 * np.array(evaluation_history)), \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Iteration')\n",
- "plt.ylabel('Mean Splitting Ratio (dB)')\n",
+ "plt.xlabel(\"Iteration\")\n",
+ "plt.ylabel(\"Mean Splitting Ratio (dB)\")\n",
"plt.show()"
]
},
@@ -1788,12 +1875,12 @@
}
],
"source": [
- "f0, dJ_du = opt([mapping(x,eta_i,cur_beta)],need_gradient = False)\n",
+ "f0, dJ_du = opt([mapping(x, eta_i, cur_beta)], need_gradient=False)\n",
"frequencies = opt.frequencies\n",
"source_coef, top_coef, bottom_ceof = opt.get_objective_arguments()\n",
"\n",
- "top_profile = np.abs(top_coef/source_coef) ** 2\n",
- "bottom_profile = np.abs(bottom_ceof/source_coef) ** 2"
+ "top_profile = np.abs(top_coef / source_coef) ** 2\n",
+ "bottom_profile = np.abs(bottom_ceof / source_coef) ** 2"
]
},
{
@@ -1816,13 +1903,13 @@
],
"source": [
"plt.figure()\n",
- "plt.plot(1/frequencies,top_profile*100,'-o' ,label = 'Top Arm')\n",
- "plt.plot(1/frequencies,bottom_profile*100,'--o',label = 'Bottom Arm')\n",
+ "plt.plot(1 / frequencies, top_profile * 100, \"-o\", label=\"Top Arm\")\n",
+ "plt.plot(1 / frequencies, bottom_profile * 100, \"--o\", label=\"Bottom Arm\")\n",
"plt.legend()\n",
"plt.grid(True)\n",
- "plt.xlabel('Wavelength (microns)')\n",
- "plt.ylabel('Splitting Ratio (%)')\n",
- "plt.ylim(48.5,50)\n",
+ "plt.xlabel(\"Wavelength (microns)\")\n",
+ "plt.ylabel(\"Splitting Ratio (%)\")\n",
+ "plt.ylim(48.5, 50)\n",
"plt.show()"
]
},
@@ -1852,13 +1939,19 @@
}
],
"source": [
- "opt.update_design([mapping(x,eta_i,cur_beta)])\n",
+ "opt.update_design([mapping(x, eta_i, cur_beta)])\n",
"plt.figure()\n",
"ax = plt.gca()\n",
- "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- "circ = Circle((2,2),minimum_length/2)\n",
+ "opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ ")\n",
+ "circ = Circle((2, 2), minimum_length / 2)\n",
"ax.add_patch(circ)\n",
- "ax.axis('off')\n",
+ "ax.axis(\"off\")\n",
"plt.show()"
]
},
diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/05-Near2Far-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/05-Near2Far-checkpoint.ipynb
index 3d6528ff8..bab3fce98 100644
--- a/python/examples/adjoint_optimization/.ipynb_checkpoints/05-Near2Far-checkpoint.ipynb
+++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/05-Near2Far-checkpoint.ipynb
@@ -24,6 +24,7 @@
"from matplotlib import pyplot as plt\n",
"from matplotlib.patches import Circle\n",
"from scipy import special, signal\n",
+ "\n",
"mp.verbosity(0)\n",
"Si = mp.Medium(index=3.4)\n",
"SiO2 = mp.Medium(index=1.44)"
@@ -49,69 +50,88 @@
"\n",
"resolution = 20\n",
"\n",
- "Sx = 2*pml_size + design_region_width\n",
- "Sy = 2*pml_size + design_region_height + 5\n",
- "cell_size = mp.Vector3(Sx,Sy)\n",
+ "Sx = 2 * pml_size + design_region_width\n",
+ "Sy = 2 * pml_size + design_region_height + 5\n",
+ "cell_size = mp.Vector3(Sx, Sy)\n",
"\n",
"nf = 2\n",
- "frequencies = np.array([1/1.5, 1/1.6])\n",
+ "frequencies = np.array([1 / 1.5, 1 / 1.6])\n",
"\n",
- "minimum_length = 0.09 # minimum length scale (microns)\n",
- "eta_i = 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
- "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
- "eta_d = 1-eta_e # dilation design field thresholding point (between 0 and 1)\n",
- "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n",
+ "minimum_length = 0.09 # minimum length scale (microns)\n",
+ "eta_i = (\n",
+ " 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
+ ")\n",
+ "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
+ "eta_d = 1 - eta_e # dilation design field thresholding point (between 0 and 1)\n",
+ "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n",
"design_region_resolution = int(resolution)\n",
"\n",
"pml_layers = [mp.PML(pml_size)]\n",
"\n",
- "fcen = 1/1.55\n",
+ "fcen = 1 / 1.55\n",
"width = 0.2\n",
"fwidth = width * fcen\n",
- "source_center = [0,-(design_region_height/2 + 1.5),0]\n",
- "source_size = mp.Vector3(design_region_width,0,0)\n",
- "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n",
- "source = [mp.Source(src,\n",
- " component=mp.Ez,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "source_center = [0, -(design_region_height / 2 + 1.5), 0]\n",
+ "source_size = mp.Vector3(design_region_width, 0, 0)\n",
+ "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n",
+ "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n",
+ "\n",
+ "Nx = int(design_region_resolution * design_region_width)\n",
+ "Ny = int(design_region_resolution * design_region_height)\n",
"\n",
- "Nx = int(design_region_resolution*design_region_width)\n",
- "Ny = int(design_region_resolution*design_region_height)\n",
+ "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n",
+ "design_region = mpa.DesignRegion(\n",
+ " design_variables,\n",
+ " volume=mp.Volume(\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(design_region_width, design_region_height, 0),\n",
+ " ),\n",
+ ")\n",
"\n",
- "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n",
- "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))\n",
"\n",
- "def mapping(x,eta,beta):\n",
+ "def mapping(x, eta, beta):\n",
"\n",
" # filter\n",
- " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n",
- " \n",
+ " filtered_field = mpa.conic_filter(\n",
+ " x,\n",
+ " filter_radius,\n",
+ " design_region_width,\n",
+ " design_region_height,\n",
+ " design_region_resolution,\n",
+ " )\n",
+ "\n",
" # projection\n",
- " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n",
- " \n",
- " projected_field = (npa.flipud(projected_field) + projected_field)/2 # left-right symmetry\n",
- " \n",
+ " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n",
+ "\n",
+ " projected_field = (\n",
+ " npa.flipud(projected_field) + projected_field\n",
+ " ) / 2 # left-right symmetry\n",
+ "\n",
" # interpolate to actual materials\n",
" return projected_field.flatten()\n",
"\n",
+ "\n",
"geometry = [\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables),\n",
- " #mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e1=mp.Vector3(x=-1))\n",
- " # \n",
+ " mp.Block(\n",
+ " center=design_region.center, size=design_region.size, material=design_variables\n",
+ " ),\n",
+ " # mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e1=mp.Vector3(x=-1))\n",
+ " #\n",
" # The commented lines above impose symmetry by overlapping design region with the same design variable. However,\n",
" # currently there is an issue of doing that; instead, we use an alternative approach to impose symmetry.\n",
" # See https://github.com/NanoComp/meep/issues/1984 and https://github.com/NanoComp/meep/issues/2093\n",
"]\n",
"kpoint = mp.Vector3()\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " k_point=kpoint,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=SiO2,\n",
- " symmetries=[mp.Mirror(direction=mp.X)],\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=kpoint,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=SiO2,\n",
+ " symmetries=[mp.Mirror(direction=mp.X)],\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -129,12 +149,20 @@
"metadata": {},
"outputs": [],
"source": [
- "far_x = [mp.Vector3(0,40,0)]\n",
- "NearRegions = [mp.Near2FarRegion(center=mp.Vector3(0,design_region_height/2+1.5), size=mp.Vector3(design_region_width,0), weight=+1)]\n",
- "FarFields = mpa.Near2FarFields(sim, NearRegions ,far_x)\n",
+ "far_x = [mp.Vector3(0, 40, 0)]\n",
+ "NearRegions = [\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(0, design_region_height / 2 + 1.5),\n",
+ " size=mp.Vector3(design_region_width, 0),\n",
+ " weight=+1,\n",
+ " )\n",
+ "]\n",
+ "FarFields = mpa.Near2FarFields(sim, NearRegions, far_x)\n",
"ob_list = [FarFields]\n",
+ "\n",
+ "\n",
"def J1(alpha):\n",
- " return -npa.abs(alpha[0,:,2])**2"
+ " return -npa.abs(alpha[0, :, 2]) ** 2"
]
},
{
@@ -144,10 +172,10 @@
"outputs": [],
"source": [
"opt = mpa.OptimizationProblem(\n",
- " simulation = sim,\n",
- " objective_functions = [J1],\n",
- " objective_arguments = ob_list,\n",
- " design_regions = [design_region],\n",
+ " simulation=sim,\n",
+ " objective_functions=[J1],\n",
+ " objective_arguments=ob_list,\n",
+ " design_regions=[design_region],\n",
" frequencies=frequencies,\n",
")\n",
"opt.plot2D(True)"
@@ -168,9 +196,11 @@
"source": [
"evaluation_history = []\n",
"cur_iter = [0]\n",
+ "\n",
+ "\n",
"def f(x, grad):\n",
- " t = x[0] # \"dummy\" parameter\n",
- " v = x[1:] # design parameters\n",
+ " t = x[0] # \"dummy\" parameter\n",
+ " v = x[1:] # design parameters\n",
" if grad.size > 0:\n",
" grad[0] = 1\n",
" grad[1:] = 0\n",
@@ -200,39 +230,49 @@
"metadata": {},
"outputs": [],
"source": [
- "def c(result,x,gradient,eta,beta):\n",
- " print(\"Current iteration: {}; current eta: {}, current beta: {}\".format(cur_iter[0],eta,beta))\n",
- " \n",
- " t = x[0] # dummy parameter\n",
- " v = x[1:] # design parameters\n",
+ "def c(result, x, gradient, eta, beta):\n",
+ " print(\n",
+ " \"Current iteration: {}; current eta: {}, current beta: {}\".format(\n",
+ " cur_iter[0], eta, beta\n",
+ " )\n",
+ " )\n",
+ "\n",
+ " t = x[0] # dummy parameter\n",
+ " v = x[1:] # design parameters\n",
"\n",
- " f0, dJ_du = opt([mapping(v,eta,beta)])\n",
+ " f0, dJ_du = opt([mapping(v, eta, beta)])\n",
"\n",
" # Backprop the gradients through our mapping function\n",
" my_grad = np.zeros(dJ_du.shape)\n",
- " for k in range(opt.nf): \n",
- " my_grad[:,k] = tensor_jacobian_product(mapping,0)(v,eta,beta,dJ_du[:,k])\n",
+ " for k in range(opt.nf):\n",
+ " my_grad[:, k] = tensor_jacobian_product(mapping, 0)(v, eta, beta, dJ_du[:, k])\n",
"\n",
" # Assign gradients\n",
" if gradient.size > 0:\n",
- " gradient[:,0] = -1 # gradient w.r.t. \"t\"\n",
- " gradient[:,1:] = my_grad.T # gradient w.r.t. each frequency objective\n",
- " \n",
+ " gradient[:, 0] = -1 # gradient w.r.t. \"t\"\n",
+ " gradient[:, 1:] = my_grad.T # gradient w.r.t. each frequency objective\n",
+ "\n",
" result[:] = np.real(f0) - t\n",
- " \n",
+ "\n",
" # store results\n",
" evaluation_history.append(np.real(f0))\n",
- " \n",
+ "\n",
" # visualize\n",
" plt.figure()\n",
" ax = plt.gca()\n",
- " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- " circ = Circle((2,2),minimum_length/2)\n",
+ " opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ " )\n",
+ " circ = Circle((2, 2), minimum_length / 2)\n",
" ax.add_patch(circ)\n",
- " ax.axis('off')\n",
+ " ax.axis(\"off\")\n",
" plt.show()\n",
- " \n",
- " cur_iter[0] = cur_iter[0] + 1\n"
+ "\n",
+ " cur_iter[0] = cur_iter[0] + 1"
]
},
{
@@ -249,19 +289,19 @@
"outputs": [],
"source": [
"algorithm = nlopt.LD_MMA\n",
- "n = Nx * Ny # number of parameters\n",
+ "n = Nx * Ny # number of parameters\n",
"\n",
"# Initial guess\n",
"x = np.ones((n,)) * 0.5\n",
"\n",
"# lower and upper bounds\n",
- "lb = np.zeros((Nx*Ny,))\n",
- "ub = np.ones((Nx*Ny,))\n",
+ "lb = np.zeros((Nx * Ny,))\n",
+ "ub = np.ones((Nx * Ny,))\n",
"\n",
"# insert dummy parameter bounds and variable\n",
- "x = np.insert(x,0,0) # our initial guess for the worst error\n",
- "lb = np.insert(lb,0,-np.inf)\n",
- "ub = np.insert(ub,0,0)\n",
+ "x = np.insert(x, 0, 0) # our initial guess for the worst error\n",
+ "lb = np.insert(lb, 0, -np.inf)\n",
+ "ub = np.insert(ub, 0, 0)\n",
"\n",
"cur_beta = 4\n",
"beta_scale = 2\n",
@@ -269,15 +309,17 @@
"update_factor = 12\n",
"ftol = 1e-5\n",
"for iters in range(num_betas):\n",
- " solver = nlopt.opt(algorithm, n+1)\n",
+ " solver = nlopt.opt(algorithm, n + 1)\n",
" solver.set_lower_bounds(lb)\n",
" solver.set_upper_bounds(ub)\n",
" solver.set_min_objective(f)\n",
" solver.set_maxeval(update_factor)\n",
" solver.set_ftol_rel(ftol)\n",
- " solver.add_inequality_mconstraint(lambda r,x,g: c(r,x,g,eta_i,cur_beta), np.array([1e-3]*nf))\n",
+ " solver.add_inequality_mconstraint(\n",
+ " lambda r, x, g: c(r, x, g, eta_i, cur_beta), np.array([1e-3] * nf)\n",
+ " )\n",
" x[:] = solver.optimize(x)\n",
- " cur_beta = cur_beta*beta_scale"
+ " cur_beta = cur_beta * beta_scale"
]
},
{
@@ -288,18 +330,18 @@
},
"outputs": [],
"source": [
- "lb = -np.min(evaluation_history,axis=1)\n",
- "ub = -np.max(evaluation_history,axis=1)\n",
- "mean = -np.mean(evaluation_history,axis=1)\n",
+ "lb = -np.min(evaluation_history, axis=1)\n",
+ "ub = -np.max(evaluation_history, axis=1)\n",
+ "mean = -np.mean(evaluation_history, axis=1)\n",
"\n",
"num_iters = lb.size\n",
"\n",
"plt.figure()\n",
- "plt.fill_between(np.arange(num_iters),ub,lb,alpha=0.3)\n",
- "plt.plot(mean,'o-')\n",
+ "plt.fill_between(np.arange(num_iters), ub, lb, alpha=0.3)\n",
+ "plt.plot(mean, \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Iteration')\n",
- "plt.ylabel('FOM')\n",
+ "plt.xlabel(\"Iteration\")\n",
+ "plt.ylabel(\"FOM\")\n",
"plt.show()"
]
},
@@ -316,13 +358,19 @@
"metadata": {},
"outputs": [],
"source": [
- "opt.update_design([mapping(x[1:],eta_i,cur_beta)])\n",
+ "opt.update_design([mapping(x[1:], eta_i, cur_beta)])\n",
"plt.figure()\n",
"ax = plt.gca()\n",
- "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- "circ = Circle((2,2),minimum_length/2)\n",
+ "opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ ")\n",
+ "circ = Circle((2, 2), minimum_length / 2)\n",
"ax.add_patch(circ)\n",
- "ax.axis('off')\n",
+ "ax.axis(\"off\")\n",
"plt.show()"
]
},
@@ -339,23 +387,22 @@
"metadata": {},
"outputs": [],
"source": [
- "opt.sim = mp.Simulation(cell_size=mp.Vector3(Sx,90),\n",
- " boundary_layers=pml_layers,\n",
- " k_point=kpoint,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=SiO2,\n",
- " resolution=resolution)\n",
- "src = mp.ContinuousSource(frequency=1/1.5,fwidth=fwidth)\n",
- "source = [mp.Source(src, component = mp.Ez,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "opt.sim = mp.Simulation(\n",
+ " cell_size=mp.Vector3(Sx, 90),\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=kpoint,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=SiO2,\n",
+ " resolution=resolution,\n",
+ ")\n",
+ "src = mp.ContinuousSource(frequency=1 / 1.5, fwidth=fwidth)\n",
+ "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n",
"opt.sim.change_sources(source)\n",
"\n",
"opt.sim.run(until=200)\n",
- "plt.figure(figsize=(10,20))\n",
- "opt.sim.plot2D(fields=mp.Ez)\n",
- "\n"
+ "plt.figure(figsize=(10, 20))\n",
+ "opt.sim.plot2D(fields=mp.Ez)"
]
},
{
@@ -364,21 +411,21 @@
"metadata": {},
"outputs": [],
"source": [
- "opt.sim = mp.Simulation(cell_size=mp.Vector3(Sx,90),\n",
- " boundary_layers=pml_layers,\n",
- " k_point=kpoint,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=SiO2,\n",
- " resolution=resolution)\n",
- "src = mp.ContinuousSource(frequency=1/1.6,fwidth=fwidth)\n",
- "source = [mp.Source(src, component = mp.Ez,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "opt.sim = mp.Simulation(\n",
+ " cell_size=mp.Vector3(Sx, 90),\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=kpoint,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=SiO2,\n",
+ " resolution=resolution,\n",
+ ")\n",
+ "src = mp.ContinuousSource(frequency=1 / 1.6, fwidth=fwidth)\n",
+ "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n",
"opt.sim.change_sources(source)\n",
"\n",
"opt.sim.run(until=200)\n",
- "plt.figure(figsize=(10,20))\n",
+ "plt.figure(figsize=(10, 20))\n",
"opt.sim.plot2D(fields=mp.Ez)"
]
},
diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/06-Near2Far-Epigraph-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/06-Near2Far-Epigraph-checkpoint.ipynb
index 3e552be49..f30f97f89 100644
--- a/python/examples/adjoint_optimization/.ipynb_checkpoints/06-Near2Far-Epigraph-checkpoint.ipynb
+++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/06-Near2Far-Epigraph-checkpoint.ipynb
@@ -32,6 +32,7 @@
"from matplotlib import pyplot as plt\n",
"from matplotlib.patches import Circle\n",
"from scipy import special, signal\n",
+ "\n",
"mp.verbosity(0)\n",
"Si = mp.Medium(index=3.4)\n",
"Air = mp.Medium(index=1.0)"
@@ -57,68 +58,87 @@
"\n",
"resolution = 30\n",
"\n",
- "Sx = 2*pml_size + design_region_width\n",
- "Sy = 2*pml_size + design_region_height + 5\n",
- "cell_size = mp.Vector3(Sx,Sy)\n",
+ "Sx = 2 * pml_size + design_region_width\n",
+ "Sy = 2 * pml_size + design_region_height + 5\n",
+ "cell_size = mp.Vector3(Sx, Sy)\n",
"\n",
"nf = 3\n",
- "frequencies = np.array([1/1.5, 1/1.55, 1/1.6])\n",
+ "frequencies = np.array([1 / 1.5, 1 / 1.55, 1 / 1.6])\n",
"\n",
- "minimum_length = 0.09 # minimum length scale (microns)\n",
- "eta_i = 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
- "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
- "eta_d = 1-eta_e # dilation design field thresholding point (between 0 and 1)\n",
- "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n",
+ "minimum_length = 0.09 # minimum length scale (microns)\n",
+ "eta_i = (\n",
+ " 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
+ ")\n",
+ "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
+ "eta_d = 1 - eta_e # dilation design field thresholding point (between 0 and 1)\n",
+ "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n",
"design_region_resolution = int(resolution)\n",
"\n",
"pml_layers = [mp.PML(pml_size)]\n",
"\n",
- "fcen = 1/1.55\n",
+ "fcen = 1 / 1.55\n",
"width = 0.2\n",
"fwidth = width * fcen\n",
- "source_center = [0,-(design_region_height/2 + 1.5),0]\n",
- "source_size = mp.Vector3(design_region_width,0,0)\n",
- "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n",
- "source = [mp.Source(src,\n",
- " component=mp.Ez,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "source_center = [0, -(design_region_height / 2 + 1.5), 0]\n",
+ "source_size = mp.Vector3(design_region_width, 0, 0)\n",
+ "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n",
+ "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n",
+ "\n",
+ "Nx = int(design_region_resolution * design_region_width)\n",
+ "Ny = int(design_region_resolution * design_region_height)\n",
"\n",
- "Nx = int(design_region_resolution*design_region_width)\n",
- "Ny = int(design_region_resolution*design_region_height)\n",
+ "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), Air, Si, grid_type=\"U_MEAN\")\n",
+ "design_region = mpa.DesignRegion(\n",
+ " design_variables,\n",
+ " volume=mp.Volume(\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(design_region_width, design_region_height, 0),\n",
+ " ),\n",
+ ")\n",
"\n",
- "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),Air,Si,grid_type='U_MEAN')\n",
- "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))\n",
"\n",
- "def mapping(x,eta,beta):\n",
+ "def mapping(x, eta, beta):\n",
"\n",
" # filter\n",
- " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n",
- " \n",
+ " filtered_field = mpa.conic_filter(\n",
+ " x,\n",
+ " filter_radius,\n",
+ " design_region_width,\n",
+ " design_region_height,\n",
+ " design_region_resolution,\n",
+ " )\n",
+ "\n",
" # projection\n",
- " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n",
- " \n",
- " projected_field = (npa.flipud(projected_field) + projected_field)/2 # left-right symmetry\n",
- " \n",
+ " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n",
+ "\n",
+ " projected_field = (\n",
+ " npa.flipud(projected_field) + projected_field\n",
+ " ) / 2 # left-right symmetry\n",
+ "\n",
" # interpolate to actual materials\n",
" return projected_field.flatten()\n",
"\n",
+ "\n",
"geometry = [\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables),\n",
- " #mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e1=mp.Vector3(x=-1))\n",
- " # \n",
+ " mp.Block(\n",
+ " center=design_region.center, size=design_region.size, material=design_variables\n",
+ " ),\n",
+ " # mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e1=mp.Vector3(x=-1))\n",
+ " #\n",
" # The commented lines above impose symmetry by overlapping design region with the same design variable. However,\n",
" # currently there is an issue of doing that; instead, we use an alternative approach to impose symmetry.\n",
" # See https://github.com/NanoComp/meep/issues/1984 and https://github.com/NanoComp/meep/issues/2093\n",
"]\n",
"kpoint = mp.Vector3()\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=Air,\n",
- " symmetries=[mp.Mirror(direction=mp.X)],\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=Air,\n",
+ " symmetries=[mp.Mirror(direction=mp.X)],\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -138,12 +158,20 @@
"metadata": {},
"outputs": [],
"source": [
- "far_x = [mp.Vector3(0,15,0)]\n",
- "NearRegions = [mp.Near2FarRegion(center=mp.Vector3(0,design_region_height/2+1.5), size=mp.Vector3(design_region_width,0), weight=+1)]\n",
- "FarFields = mpa.Near2FarFields(sim, NearRegions ,far_x)\n",
+ "far_x = [mp.Vector3(0, 15, 0)]\n",
+ "NearRegions = [\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(0, design_region_height / 2 + 1.5),\n",
+ " size=mp.Vector3(design_region_width, 0),\n",
+ " weight=+1,\n",
+ " )\n",
+ "]\n",
+ "FarFields = mpa.Near2FarFields(sim, NearRegions, far_x)\n",
"ob_list = [FarFields]\n",
+ "\n",
+ "\n",
"def J1(FF):\n",
- " return -npa.abs(FF[0,:,2])**2"
+ " return -npa.abs(FF[0, :, 2]) ** 2"
]
},
{
@@ -166,12 +194,12 @@
],
"source": [
"opt = mpa.OptimizationProblem(\n",
- " simulation = sim,\n",
- " objective_functions = [J1],\n",
- " objective_arguments = ob_list,\n",
- " design_regions = [design_region],\n",
+ " simulation=sim,\n",
+ " objective_functions=[J1],\n",
+ " objective_arguments=ob_list,\n",
+ " design_regions=[design_region],\n",
" frequencies=frequencies,\n",
- " maximum_run_time = 2000\n",
+ " maximum_run_time=2000,\n",
")\n",
"opt.plot2D(True)"
]
@@ -191,9 +219,11 @@
"source": [
"evaluation_history = []\n",
"cur_iter = [0]\n",
+ "\n",
+ "\n",
"def f(x, grad):\n",
- " t = x[0] # \"dummy\" parameter\n",
- " v = x[1:] # design parameters\n",
+ " t = x[0] # \"dummy\" parameter\n",
+ " v = x[1:] # design parameters\n",
" if grad.size > 0:\n",
" grad[0] = 1\n",
" grad[1:] = 0\n",
@@ -223,40 +253,50 @@
"metadata": {},
"outputs": [],
"source": [
- "def c(result,x,gradient,eta,beta):\n",
- " print(\"Current iteration: {}; current eta: {}, current beta: {}\".format(cur_iter[0],eta,beta))\n",
- " \n",
- " t = x[0] # dummy parameter\n",
- " v = x[1:] # design parameters\n",
+ "def c(result, x, gradient, eta, beta):\n",
+ " print(\n",
+ " \"Current iteration: {}; current eta: {}, current beta: {}\".format(\n",
+ " cur_iter[0], eta, beta\n",
+ " )\n",
+ " )\n",
+ "\n",
+ " t = x[0] # dummy parameter\n",
+ " v = x[1:] # design parameters\n",
"\n",
- " f0, dJ_du = opt([mapping(v,eta,beta)])\n",
+ " f0, dJ_du = opt([mapping(v, eta, beta)])\n",
"\n",
" # Backprop the gradients through our mapping function\n",
" my_grad = np.zeros(dJ_du.shape)\n",
- " for k in range(opt.nf): \n",
- " my_grad[:,k] = tensor_jacobian_product(mapping,0)(v,eta,beta,dJ_du[:,k]) \n",
- " #Note that we now backpropogate the gradients at individual frequencies\n",
+ " for k in range(opt.nf):\n",
+ " my_grad[:, k] = tensor_jacobian_product(mapping, 0)(v, eta, beta, dJ_du[:, k])\n",
+ " # Note that we now backpropogate the gradients at individual frequencies\n",
"\n",
" # Assign gradients\n",
" if gradient.size > 0:\n",
- " gradient[:,0] = -1 # gradient w.r.t. \"t\"\n",
- " gradient[:,1:] = my_grad.T # gradient w.r.t. each frequency objective\n",
- " \n",
+ " gradient[:, 0] = -1 # gradient w.r.t. \"t\"\n",
+ " gradient[:, 1:] = my_grad.T # gradient w.r.t. each frequency objective\n",
+ "\n",
" result[:] = np.real(f0) - t\n",
- " \n",
+ "\n",
" # store results\n",
" evaluation_history.append(np.real(f0))\n",
- " \n",
+ "\n",
" # visualize\n",
" plt.figure()\n",
" ax = plt.gca()\n",
- " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- " circ = Circle((2,2),minimum_length/2)\n",
+ " opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ " )\n",
+ " circ = Circle((2, 2), minimum_length / 2)\n",
" ax.add_patch(circ)\n",
- " ax.axis('off')\n",
+ " ax.axis(\"off\")\n",
" plt.show()\n",
- " \n",
- " cur_iter[0] = cur_iter[0] + 1\n"
+ "\n",
+ " cur_iter[0] = cur_iter[0] + 1"
]
},
{
@@ -1704,19 +1744,19 @@
],
"source": [
"algorithm = nlopt.LD_MMA\n",
- "n = Nx * Ny # number of parameters\n",
+ "n = Nx * Ny # number of parameters\n",
"\n",
"# Initial guess\n",
"x = np.ones((n,)) * 0.5\n",
"\n",
"# lower and upper bounds\n",
- "lb = np.zeros((Nx*Ny,))\n",
- "ub = np.ones((Nx*Ny,))\n",
+ "lb = np.zeros((Nx * Ny,))\n",
+ "ub = np.ones((Nx * Ny,))\n",
"\n",
"# insert dummy parameter bounds and variable\n",
- "x = np.insert(x,0,-1) # our initial guess for the worst error\n",
- "lb = np.insert(lb,0,-np.inf)\n",
- "ub = np.insert(ub,0,0)\n",
+ "x = np.insert(x, 0, -1) # our initial guess for the worst error\n",
+ "lb = np.insert(lb, 0, -np.inf)\n",
+ "ub = np.insert(ub, 0, 0)\n",
"\n",
"cur_beta = 4\n",
"beta_scale = 2\n",
@@ -1724,15 +1764,17 @@
"update_factor = 12\n",
"ftol = 1e-5\n",
"for iters in range(num_betas):\n",
- " solver = nlopt.opt(algorithm, n+1)\n",
+ " solver = nlopt.opt(algorithm, n + 1)\n",
" solver.set_lower_bounds(lb)\n",
" solver.set_upper_bounds(ub)\n",
" solver.set_min_objective(f)\n",
" solver.set_maxeval(update_factor)\n",
" solver.set_ftol_rel(ftol)\n",
- " solver.add_inequality_mconstraint(lambda r,x,g: c(r,x,g,eta_i,cur_beta), np.array([1e-3]*nf))\n",
+ " solver.add_inequality_mconstraint(\n",
+ " lambda r, x, g: c(r, x, g, eta_i, cur_beta), np.array([1e-3] * nf)\n",
+ " )\n",
" x[:] = solver.optimize(x)\n",
- " cur_beta = cur_beta*beta_scale"
+ " cur_beta = cur_beta * beta_scale"
]
},
{
@@ -1756,18 +1798,18 @@
}
],
"source": [
- "lb = -np.min(evaluation_history,axis=1)\n",
- "ub = -np.max(evaluation_history,axis=1)\n",
- "mean = -np.mean(evaluation_history,axis=1)\n",
+ "lb = -np.min(evaluation_history, axis=1)\n",
+ "ub = -np.max(evaluation_history, axis=1)\n",
+ "mean = -np.mean(evaluation_history, axis=1)\n",
"\n",
"num_iters = lb.size\n",
"\n",
"plt.figure()\n",
- "plt.fill_between(np.arange(num_iters),ub,lb,alpha=0.3)\n",
- "plt.plot(mean,'o-')\n",
+ "plt.fill_between(np.arange(num_iters), ub, lb, alpha=0.3)\n",
+ "plt.plot(mean, \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Iteration')\n",
- "plt.ylabel('FOM')\n",
+ "plt.xlabel(\"Iteration\")\n",
+ "plt.ylabel(\"FOM\")\n",
"plt.show()"
]
},
@@ -1797,13 +1839,19 @@
}
],
"source": [
- "opt.update_design([mapping(x[1:],eta_i,cur_beta)])\n",
+ "opt.update_design([mapping(x[1:], eta_i, cur_beta)])\n",
"plt.figure()\n",
"ax = plt.gca()\n",
- "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- "circ = Circle((2,2),minimum_length/2)\n",
+ "opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ ")\n",
+ "circ = Circle((2, 2), minimum_length / 2)\n",
"ax.add_patch(circ)\n",
- "ax.axis('off')\n",
+ "ax.axis(\"off\")\n",
"plt.show()"
]
},
@@ -1828,7 +1876,7 @@
}
],
"source": [
- "f0, dJ_du = opt([mapping(x[1:],eta_i,cur_beta//2)],need_gradient = False)\n",
+ "f0, dJ_du = opt([mapping(x[1:], eta_i, cur_beta // 2)], need_gradient=False)\n",
"frequencies = opt.frequencies"
]
},
@@ -1851,14 +1899,13 @@
}
],
"source": [
- "\n",
- "intensities = np.abs(opt.get_objective_arguments()[0][0,:,2])**2\n",
+ "intensities = np.abs(opt.get_objective_arguments()[0][0, :, 2]) ** 2\n",
"\n",
"plt.figure()\n",
- "plt.plot(1/frequencies,intensities,'-o')\n",
+ "plt.plot(1 / frequencies, intensities, \"-o\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Wavelength (microns)')\n",
- "plt.ylabel('|Ez|^2 Intensities')\n",
+ "plt.xlabel(\"Wavelength (microns)\")\n",
+ "plt.ylabel(\"|Ez|^2 Intensities\")\n",
"plt.show()"
]
},
@@ -1898,21 +1945,21 @@
}
],
"source": [
- "opt.sim = mp.Simulation(cell_size=mp.Vector3(Sx,40),\n",
- " boundary_layers=pml_layers,\n",
- " k_point=kpoint,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=Air,\n",
- " resolution=resolution)\n",
- "src = mp.ContinuousSource(frequency=1/1.5,fwidth=fwidth)\n",
- "source = [mp.Source(src, component = mp.Ez,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "opt.sim = mp.Simulation(\n",
+ " cell_size=mp.Vector3(Sx, 40),\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=kpoint,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=Air,\n",
+ " resolution=resolution,\n",
+ ")\n",
+ "src = mp.ContinuousSource(frequency=1 / 1.5, fwidth=fwidth)\n",
+ "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n",
"opt.sim.change_sources(source)\n",
"\n",
"opt.sim.run(until=200)\n",
- "plt.figure(figsize=(10,20))\n",
+ "plt.figure(figsize=(10, 20))\n",
"opt.sim.plot2D(fields=mp.Ez)"
]
},
@@ -1945,21 +1992,21 @@
}
],
"source": [
- "opt.sim = mp.Simulation(cell_size=mp.Vector3(Sx,40),\n",
- " boundary_layers=pml_layers,\n",
- " k_point=kpoint,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=Air,\n",
- " resolution=resolution)\n",
- "src = mp.ContinuousSource(frequency=1/1.55,fwidth=fwidth)\n",
- "source = [mp.Source(src, component = mp.Ez,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "opt.sim = mp.Simulation(\n",
+ " cell_size=mp.Vector3(Sx, 40),\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=kpoint,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=Air,\n",
+ " resolution=resolution,\n",
+ ")\n",
+ "src = mp.ContinuousSource(frequency=1 / 1.55, fwidth=fwidth)\n",
+ "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n",
"opt.sim.change_sources(source)\n",
"\n",
"opt.sim.run(until=200)\n",
- "plt.figure(figsize=(10,20))\n",
+ "plt.figure(figsize=(10, 20))\n",
"opt.sim.plot2D(fields=mp.Ez)"
]
},
@@ -1992,21 +2039,21 @@
}
],
"source": [
- "opt.sim = mp.Simulation(cell_size=mp.Vector3(Sx,40),\n",
- " boundary_layers=pml_layers,\n",
- " k_point=kpoint,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=Air,\n",
- " resolution=resolution)\n",
- "src = mp.ContinuousSource(frequency=1/1.6,fwidth=fwidth)\n",
- "source = [mp.Source(src, component = mp.Ez,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "opt.sim = mp.Simulation(\n",
+ " cell_size=mp.Vector3(Sx, 40),\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=kpoint,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=Air,\n",
+ " resolution=resolution,\n",
+ ")\n",
+ "src = mp.ContinuousSource(frequency=1 / 1.6, fwidth=fwidth)\n",
+ "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n",
"opt.sim.change_sources(source)\n",
"\n",
"opt.sim.run(until=200)\n",
- "plt.figure(figsize=(10,20))\n",
+ "plt.figure(figsize=(10, 20))\n",
"opt.sim.plot2D(fields=mp.Ez)"
]
},
diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/Bend Minimax-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/Bend Minimax-checkpoint.ipynb
index 15f9cbf0a..f84a6b0ec 100644
--- a/python/examples/adjoint_optimization/.ipynb_checkpoints/Bend Minimax-checkpoint.ipynb
+++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/Bend Minimax-checkpoint.ipynb
@@ -38,6 +38,7 @@
"from matplotlib import pyplot as plt\n",
"from matplotlib.patches import Circle\n",
"from scipy import special, signal\n",
+ "\n",
"mp.quiet(quietval=True)\n",
"Si = mp.Medium(index=3.4)\n",
"SiO2 = mp.Medium(index=1.44)"
@@ -75,82 +76,117 @@
"resolution = 30\n",
"\n",
"nf = 10\n",
- "frequencies = 1/np.linspace(1.5,1.6,nf)\n",
+ "frequencies = 1 / np.linspace(1.5, 1.6, nf)\n",
"\n",
- "minimum_length = 0.09 # minimum length scale (microns)\n",
- "eta_i = 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
- "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
- "eta_d = 1-eta_e # dilation design field thresholding point (between 0 and 1)\n",
- "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n",
+ "minimum_length = 0.09 # minimum length scale (microns)\n",
+ "eta_i = (\n",
+ " 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
+ ")\n",
+ "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
+ "eta_d = 1 - eta_e # dilation design field thresholding point (between 0 and 1)\n",
+ "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n",
"print(filter_radius)\n",
- "design_region_resolution = int(1*resolution)\n",
+ "design_region_resolution = int(1 * resolution)\n",
"\n",
- "Sx = 2*pml_size + 2*waveguide_length + design_region_width\n",
- "Sy = 2*pml_size + design_region_height + 0.5\n",
- "cell_size = mp.Vector3(Sx,Sy)\n",
+ "Sx = 2 * pml_size + 2 * waveguide_length + design_region_width\n",
+ "Sy = 2 * pml_size + design_region_height + 0.5\n",
+ "cell_size = mp.Vector3(Sx, Sy)\n",
"\n",
"pml_layers = [mp.PML(pml_size)]\n",
"\n",
- "fcen = 1/1.55\n",
+ "fcen = 1 / 1.55\n",
"width = 0.2\n",
"fwidth = width * fcen\n",
- "source_center = [-Sx/2 + pml_size + waveguide_length/3,0,0]\n",
- "source_size = mp.Vector3(0,Sy,0)\n",
- "kpoint = mp.Vector3(1,0,0)\n",
- "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n",
- "source = [mp.EigenModeSource(src,\n",
- " eig_band = 1,\n",
- " direction=mp.NO_DIRECTION,\n",
- " eig_kpoint=kpoint,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "source_center = [-Sx / 2 + pml_size + waveguide_length / 3, 0, 0]\n",
+ "source_size = mp.Vector3(0, Sy, 0)\n",
+ "kpoint = mp.Vector3(1, 0, 0)\n",
+ "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n",
+ "source = [\n",
+ " mp.EigenModeSource(\n",
+ " src,\n",
+ " eig_band=1,\n",
+ " direction=mp.NO_DIRECTION,\n",
+ " eig_kpoint=kpoint,\n",
+ " size=source_size,\n",
+ " center=source_center,\n",
+ " )\n",
+ "]\n",
"\n",
- "Nx = int(design_region_resolution*design_region_width)\n",
- "Ny = int(design_region_resolution*design_region_height)\n",
+ "Nx = int(design_region_resolution * design_region_width)\n",
+ "Ny = int(design_region_resolution * design_region_height)\n",
"\n",
- "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n",
- "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))\n",
+ "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n",
+ "design_region = mpa.DesignRegion(\n",
+ " design_variables,\n",
+ " volume=mp.Volume(\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(design_region_width, design_region_height, 0),\n",
+ " ),\n",
+ ")\n",
"\n",
- "x_g = np.linspace(-design_region_width/2,design_region_width/2,Nx)\n",
- "y_g = np.linspace(-design_region_height/2,design_region_height/2,Ny)\n",
- "X_g, Y_g = np.meshgrid(x_g,y_g,sparse=True,indexing='ij')\n",
+ "x_g = np.linspace(-design_region_width / 2, design_region_width / 2, Nx)\n",
+ "y_g = np.linspace(-design_region_height / 2, design_region_height / 2, Ny)\n",
+ "X_g, Y_g = np.meshgrid(x_g, y_g, sparse=True, indexing=\"ij\")\n",
"\n",
- "left_wg_mask = (X_g == -design_region_width/2) & (np.abs(Y_g) <= waveguide_width/2)\n",
- "top_wg_mask = (Y_g == design_region_width/2) & (np.abs(X_g) <= waveguide_width/2)\n",
+ "left_wg_mask = (X_g == -design_region_width / 2) & (np.abs(Y_g) <= waveguide_width / 2)\n",
+ "top_wg_mask = (Y_g == design_region_width / 2) & (np.abs(X_g) <= waveguide_width / 2)\n",
"Si_mask = left_wg_mask | top_wg_mask\n",
"\n",
- "border_mask = ((X_g == -design_region_width/2) | \n",
- " (X_g == design_region_width/2) | \n",
- " (Y_g == -design_region_height/2) | \n",
- " (Y_g == design_region_height/2))\n",
+ "border_mask = (\n",
+ " (X_g == -design_region_width / 2)\n",
+ " | (X_g == design_region_width / 2)\n",
+ " | (Y_g == -design_region_height / 2)\n",
+ " | (Y_g == design_region_height / 2)\n",
+ ")\n",
"SiO2_mask = border_mask.copy()\n",
"SiO2_mask[Si_mask] = False\n",
"\n",
- "def mapping(x,eta,beta):\n",
- " x = npa.where(Si_mask.flatten(),1,npa.where(SiO2_mask.flatten(),0,x))\n",
+ "\n",
+ "def mapping(x, eta, beta):\n",
+ " x = npa.where(Si_mask.flatten(), 1, npa.where(SiO2_mask.flatten(), 0, x))\n",
" # filter\n",
- " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n",
- " \n",
+ " filtered_field = mpa.conic_filter(\n",
+ " x,\n",
+ " filter_radius,\n",
+ " design_region_width,\n",
+ " design_region_height,\n",
+ " design_region_resolution,\n",
+ " )\n",
+ "\n",
" # projection\n",
- " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n",
- " \n",
+ " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n",
+ "\n",
" # interpolate to actual materials\n",
" return projected_field.flatten()\n",
"\n",
+ "\n",
"geometry = [\n",
- " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2, 0.5, 0)), # horizontal waveguide\n",
- " mp.Block(center=mp.Vector3(y=Sy/4), material=Si, size=mp.Vector3(0.5, Sy/2, 0)), # vertical waveguide\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables), # design region\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n",
- " e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi/2), e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi/2))\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(x=-Sx / 4), material=Si, size=mp.Vector3(Sx / 2, 0.5, 0)\n",
+ " ), # horizontal waveguide\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(y=Sy / 4), material=Si, size=mp.Vector3(0.5, Sy / 2, 0)\n",
+ " ), # vertical waveguide\n",
+ " mp.Block(\n",
+ " center=design_region.center, size=design_region.size, material=design_variables\n",
+ " ), # design region\n",
+ " mp.Block(\n",
+ " center=design_region.center,\n",
+ " size=design_region.size,\n",
+ " material=design_variables,\n",
+ " e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi / 2),\n",
+ " e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi / 2),\n",
+ " ),\n",
"]\n",
"\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=SiO2,\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=SiO2,\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -168,13 +204,28 @@
"source": [
"mode = 1\n",
"\n",
- "TE0 = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(x=-Sx/2 + pml_size + 2*waveguide_length/3),size=mp.Vector3(y=Sy)),mode)\n",
- "TE_top = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(0,Sx/2 - pml_size - 2*waveguide_length/3,0),size=mp.Vector3(x=Sx)),mode)\n",
- "ob_list = [TE0,TE_top]\n",
+ "TE0 = mpa.EigenmodeCoefficient(\n",
+ " sim,\n",
+ " mp.Volume(\n",
+ " center=mp.Vector3(x=-Sx / 2 + pml_size + 2 * waveguide_length / 3),\n",
+ " size=mp.Vector3(y=Sy),\n",
+ " ),\n",
+ " mode,\n",
+ ")\n",
+ "TE_top = mpa.EigenmodeCoefficient(\n",
+ " sim,\n",
+ " mp.Volume(\n",
+ " center=mp.Vector3(0, Sx / 2 - pml_size - 2 * waveguide_length / 3, 0),\n",
+ " size=mp.Vector3(x=Sx),\n",
+ " ),\n",
+ " mode,\n",
+ ")\n",
+ "ob_list = [TE0, TE_top]\n",
+ "\n",
"\n",
- "def J(source,top):\n",
- " power = npa.abs(top/source)\n",
- " return npa.abs(1-power)"
+ "def J(source, top):\n",
+ " power = npa.abs(top / source)\n",
+ " return npa.abs(1 - power)"
]
},
{
@@ -184,10 +235,10 @@
"outputs": [],
"source": [
"opt = mpa.OptimizationProblem(\n",
- " simulation = sim,\n",
- " objective_functions = J,\n",
- " objective_arguments = ob_list,\n",
- " design_regions = [design_region],\n",
+ " simulation=sim,\n",
+ " objective_functions=J,\n",
+ " objective_arguments=ob_list,\n",
+ " design_regions=[design_region],\n",
" frequencies=frequencies,\n",
")"
]
@@ -207,9 +258,11 @@
"source": [
"evaluation_history = []\n",
"cur_iter = [0]\n",
+ "\n",
+ "\n",
"def f(x, grad):\n",
- " t = x[0] # \"dummy\" parameter\n",
- " v = x[1:] # design parameters\n",
+ " t = x[0] # \"dummy\" parameter\n",
+ " v = x[1:] # design parameters\n",
" if grad.size > 0:\n",
" grad[0] = 1\n",
" grad[1:] = 0\n",
@@ -239,38 +292,48 @@
"metadata": {},
"outputs": [],
"source": [
- "def c(result,x,gradient,eta,beta):\n",
- " print(\"Current iteration: {}; current eta: {}, current beta: {}\".format(cur_iter[0],eta,beta))\n",
- " \n",
- " t = x[0] # dummy parameter\n",
- " v = x[1:] # design parameters\n",
+ "def c(result, x, gradient, eta, beta):\n",
+ " print(\n",
+ " \"Current iteration: {}; current eta: {}, current beta: {}\".format(\n",
+ " cur_iter[0], eta, beta\n",
+ " )\n",
+ " )\n",
+ "\n",
+ " t = x[0] # dummy parameter\n",
+ " v = x[1:] # design parameters\n",
+ "\n",
+ " f0, dJ_du = opt([mapping(v, eta, beta)])\n",
"\n",
- " f0, dJ_du = opt([mapping(v,eta,beta)])\n",
- " \n",
" # Backprop the gradients through our mapping function\n",
" my_grad = np.zeros(dJ_du.shape)\n",
- " for k in range(opt.nf): \n",
- " my_grad[:,k] = tensor_jacobian_product(mapping,0)(v,eta,beta,dJ_du[:,k])\n",
+ " for k in range(opt.nf):\n",
+ " my_grad[:, k] = tensor_jacobian_product(mapping, 0)(v, eta, beta, dJ_du[:, k])\n",
"\n",
" # Assign gradients\n",
" if gradient.size > 0:\n",
- " gradient[:,0] = -1 # gradient w.r.t. \"t\"\n",
- " gradient[:,1:] = my_grad.T # gradient w.r.t. each frequency objective\n",
- " \n",
+ " gradient[:, 0] = -1 # gradient w.r.t. \"t\"\n",
+ " gradient[:, 1:] = my_grad.T # gradient w.r.t. each frequency objective\n",
+ "\n",
" result[:] = np.real(f0) - t\n",
- " \n",
+ "\n",
" # store results\n",
" evaluation_history.append(np.real(f0))\n",
- " \n",
+ "\n",
" # visualize\n",
" plt.figure()\n",
" ax = plt.gca()\n",
- " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- " circ = Circle((2,2),minimum_length/2)\n",
+ " opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ " )\n",
+ " circ = Circle((2, 2), minimum_length / 2)\n",
" ax.add_patch(circ)\n",
- " ax.axis('off')\n",
+ " ax.axis(\"off\")\n",
" plt.show()\n",
- " \n",
+ "\n",
" cur_iter[0] = cur_iter[0] + 1"
]
},
@@ -1873,37 +1936,39 @@
],
"source": [
"algorithm = nlopt.LD_MMA\n",
- "n = Nx * Ny # number of parameters\n",
+ "n = Nx * Ny # number of parameters\n",
"\n",
"# Initial guess\n",
"x = np.ones((n,)) * 0.5\n",
- "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n",
- "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n",
+ "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n",
+ "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n",
"\n",
"# lower and upper bounds\n",
- "lb = np.zeros((Nx*Ny,))\n",
+ "lb = np.zeros((Nx * Ny,))\n",
"lb[Si_mask.flatten()] = 1\n",
- "ub = np.ones((Nx*Ny,))\n",
+ "ub = np.ones((Nx * Ny,))\n",
"ub[SiO2_mask.flatten()] = 0\n",
"\n",
"# insert dummy parameter bounds and variable\n",
- "x = np.insert(x,0,0.5) # our initial guess for the worst error\n",
- "lb = np.insert(lb,0,0) # we can't get less than 0 error!\n",
- "ub = np.insert(ub,0,1) # we can't get more than 1 error!\n",
+ "x = np.insert(x, 0, 0.5) # our initial guess for the worst error\n",
+ "lb = np.insert(lb, 0, 0) # we can't get less than 0 error!\n",
+ "ub = np.insert(ub, 0, 1) # we can't get more than 1 error!\n",
"\n",
"cur_beta = 4\n",
"beta_scale = 2\n",
"num_betas = 6\n",
"update_factor = 12\n",
"for iters in range(num_betas):\n",
- " solver = nlopt.opt(algorithm, n+1)\n",
+ " solver = nlopt.opt(algorithm, n + 1)\n",
" solver.set_lower_bounds(lb)\n",
" solver.set_upper_bounds(ub)\n",
" solver.set_min_objective(f)\n",
" solver.set_maxeval(update_factor)\n",
- " solver.add_inequality_mconstraint(lambda r,x,g: c(r,x,g,eta_i,cur_beta), np.array([1e-3]*nf))\n",
+ " solver.add_inequality_mconstraint(\n",
+ " lambda r, x, g: c(r, x, g, eta_i, cur_beta), np.array([1e-3] * nf)\n",
+ " )\n",
" x[:] = solver.optimize(x)\n",
- " cur_beta = cur_beta*beta_scale"
+ " cur_beta = cur_beta * beta_scale"
]
},
{
@@ -1932,18 +1997,20 @@
}
],
"source": [
- "lb = 1-np.min(evaluation_history,axis=1)\n",
- "ub = 1-np.max(evaluation_history,axis=1)\n",
- "mean = 1-np.mean(evaluation_history,axis=1)\n",
+ "lb = 1 - np.min(evaluation_history, axis=1)\n",
+ "ub = 1 - np.max(evaluation_history, axis=1)\n",
+ "mean = 1 - np.mean(evaluation_history, axis=1)\n",
"\n",
"num_iters = lb.size\n",
"\n",
"plt.figure()\n",
- "plt.fill_between(np.arange(1,num_iters+1),10*np.log10(lb),10*np.log10(ub),alpha=0.3)\n",
- "plt.plot(10*np.log10(mean),'o-')\n",
+ "plt.fill_between(\n",
+ " np.arange(1, num_iters + 1), 10 * np.log10(lb), 10 * np.log10(ub), alpha=0.3\n",
+ ")\n",
+ "plt.plot(10 * np.log10(mean), \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Iteration')\n",
- "plt.ylabel('Average Insertion Loss (dB)')\n",
+ "plt.xlabel(\"Iteration\")\n",
+ "plt.ylabel(\"Average Insertion Loss (dB)\")\n",
"plt.show()"
]
},
@@ -1973,13 +2040,19 @@
}
],
"source": [
- "opt.update_design([mapping(x[1:],eta_i,cur_beta)])\n",
+ "opt.update_design([mapping(x[1:], eta_i, cur_beta)])\n",
"plt.figure()\n",
"ax = plt.gca()\n",
- "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- "circ = Circle((2,2),minimum_length/2)\n",
+ "opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ ")\n",
+ "circ = Circle((2, 2), minimum_length / 2)\n",
"ax.add_patch(circ)\n",
- "ax.axis('off')\n",
+ "ax.axis(\"off\")\n",
"plt.show()"
]
},
@@ -2004,11 +2077,11 @@
}
],
"source": [
- "f0, dJ_du = opt([mapping(x[1:],eta_i,cur_beta)],need_gradient = False)\n",
+ "f0, dJ_du = opt([mapping(x[1:], eta_i, cur_beta)], need_gradient=False)\n",
"frequencies = opt.frequencies\n",
"source_coef, top_coef = opt.get_objective_arguments()\n",
"\n",
- "top_profile = np.abs(top_coef/source_coef) ** 2"
+ "top_profile = np.abs(top_coef / source_coef) ** 2"
]
},
{
@@ -2043,19 +2116,19 @@
],
"source": [
"plt.figure()\n",
- "plt.plot(1/frequencies,top_profile*100,'-o')\n",
+ "plt.plot(1 / frequencies, top_profile * 100, \"-o\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Wavelength (microns)')\n",
- "plt.ylabel('Transmission (%)')\n",
- "plt.ylim(98,100)\n",
+ "plt.xlabel(\"Wavelength (microns)\")\n",
+ "plt.ylabel(\"Transmission (%)\")\n",
+ "plt.ylim(98, 100)\n",
"plt.show()\n",
"\n",
"plt.figure()\n",
- "plt.plot(1/frequencies,10*np.log10(top_profile),'-o')\n",
+ "plt.plot(1 / frequencies, 10 * np.log10(top_profile), \"-o\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Wavelength (microns)')\n",
- "plt.ylabel('Insertion Loss (dB)')\n",
- "plt.ylim(-0.1,0)\n",
+ "plt.xlabel(\"Wavelength (microns)\")\n",
+ "plt.ylabel(\"Insertion Loss (dB)\")\n",
+ "plt.ylim(-0.1, 0)\n",
"plt.show()"
]
},
diff --git a/python/examples/adjoint_optimization/01-Introduction.ipynb b/python/examples/adjoint_optimization/01-Introduction.ipynb
index d40973f54..22771aa8f 100644
--- a/python/examples/adjoint_optimization/01-Introduction.ipynb
+++ b/python/examples/adjoint_optimization/01-Introduction.ipynb
@@ -34,6 +34,7 @@
"import numpy as np\n",
"from autograd import numpy as npa\n",
"from matplotlib import pyplot as plt\n",
+ "\n",
"mp.verbosity(0)\n",
"seed = 240\n",
"np.random.seed(seed)\n",
@@ -58,7 +59,7 @@
"\n",
"Sx = 6\n",
"Sy = 5\n",
- "cell_size = mp.Vector3(Sx,Sy)\n",
+ "cell_size = mp.Vector3(Sx, Sy)\n",
"\n",
"pml_layers = [mp.PML(1.0)]"
]
@@ -76,19 +77,23 @@
"metadata": {},
"outputs": [],
"source": [
- "fcen = 1/1.55\n",
+ "fcen = 1 / 1.55\n",
"width = 0.1\n",
"fwidth = width * fcen\n",
- "source_center = [-1,0,0]\n",
- "source_size = mp.Vector3(0,2,0)\n",
- "kpoint = mp.Vector3(1,0,0)\n",
- "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n",
- "source = [mp.EigenModeSource(src,\n",
- " eig_band = 1,\n",
- " direction=mp.NO_DIRECTION,\n",
- " eig_kpoint=kpoint,\n",
- " size = source_size,\n",
- " center=source_center)]"
+ "source_center = [-1, 0, 0]\n",
+ "source_size = mp.Vector3(0, 2, 0)\n",
+ "kpoint = mp.Vector3(1, 0, 0)\n",
+ "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n",
+ "source = [\n",
+ " mp.EigenModeSource(\n",
+ " src,\n",
+ " eig_band=1,\n",
+ " direction=mp.NO_DIRECTION,\n",
+ " eig_kpoint=kpoint,\n",
+ " size=source_size,\n",
+ " center=source_center,\n",
+ " )\n",
+ "]"
]
},
{
@@ -110,17 +115,25 @@
"Nx = design_region_resolution\n",
"Ny = design_region_resolution\n",
"\n",
- "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n",
- "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(1, 1, 0)))\n",
+ "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n",
+ "design_region = mpa.DesignRegion(\n",
+ " design_variables, volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(1, 1, 0))\n",
+ ")\n",
"\n",
"\n",
"geometry = [\n",
- " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2, 0.5, 0)), # horizontal waveguide\n",
- " mp.Block(center=mp.Vector3(y=Sy/4), material=Si, size=mp.Vector3(0.5, Sy/2, 0)), # vertical waveguide\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables), # design region\n",
- " #mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(x=-Sx / 4), material=Si, size=mp.Vector3(Sx / 2, 0.5, 0)\n",
+ " ), # horizontal waveguide\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(y=Sy / 4), material=Si, size=mp.Vector3(0.5, Sy / 2, 0)\n",
+ " ), # vertical waveguide\n",
+ " mp.Block(\n",
+ " center=design_region.center, size=design_region.size, material=design_variables\n",
+ " ), # design region\n",
+ " # mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n",
" # e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi/2), e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi/2))\n",
- " # \n",
+ " #\n",
" # The commented lines above impose symmetry by overlapping design region with the same design variable. However,\n",
" # currently there is an issue of doing that; We give an alternative approach to impose symmetry in later tutorials.\n",
" # See https://github.com/NanoComp/meep/issues/1984 and https://github.com/NanoComp/meep/issues/2093\n",
@@ -140,12 +153,14 @@
"metadata": {},
"outputs": [],
"source": [
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " eps_averaging=False,\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " eps_averaging=False,\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -163,7 +178,9 @@
"metadata": {},
"outputs": [],
"source": [
- "TE0 = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(0,1,0),size=mp.Vector3(x=2)),mode=1)\n",
+ "TE0 = mpa.EigenmodeCoefficient(\n",
+ " sim, mp.Volume(center=mp.Vector3(0, 1, 0), size=mp.Vector3(x=2)), mode=1\n",
+ ")\n",
"ob_list = [TE0]"
]
},
@@ -203,8 +220,8 @@
" objective_arguments=ob_list,\n",
" design_regions=[design_region],\n",
" fcen=fcen,\n",
- " df = 0,\n",
- " nf = 1,\n",
+ " df=0,\n",
+ " nf=1,\n",
")"
]
},
@@ -221,7 +238,7 @@
"metadata": {},
"outputs": [],
"source": [
- "x0 = np.random.rand(Nx*Ny)\n",
+ "x0 = np.random.rand(Nx * Ny)\n",
"opt.update_design([x0])"
]
},
@@ -259,7 +276,7 @@
}
],
"source": [
- "opt.plot2D(True,frequency=1/1.55)\n",
+ "opt.plot2D(True, frequency=1 / 1.55)\n",
"plt.show()"
]
},
@@ -328,7 +345,7 @@
],
"source": [
"plt.figure()\n",
- "plt.imshow(np.rot90(dJ_du.reshape(Nx,Ny)))"
+ "plt.imshow(np.rot90(dJ_du.reshape(Nx, Ny)))"
]
},
{
@@ -348,7 +365,7 @@
"source": [
"db = 1e-3\n",
"choose = 10\n",
- "g_discrete, idx = opt.calculate_fd_gradient(num_gradients=choose,db=db)"
+ "g_discrete, idx = opt.calculate_fd_gradient(num_gradients=choose, db=db)"
]
},
{
@@ -396,27 +413,31 @@
"min_g = np.min(g_discrete)\n",
"max_g = np.max(g_discrete)\n",
"\n",
- "fig = plt.figure(figsize=(12,6))\n",
+ "fig = plt.figure(figsize=(12, 6))\n",
"\n",
- "plt.subplot(1,2,1)\n",
- "plt.plot([min_g, max_g],[min_g, max_g],label='y=x comparison')\n",
- "plt.plot([min_g, max_g],[m*min_g+b, m*max_g+b],'--',label='Best fit')\n",
- "plt.plot(g_discrete,dJ_du[idx],'o',label='Adjoint comparison')\n",
- "plt.xlabel('Finite Difference Gradient')\n",
- "plt.ylabel('Adjoint Gradient')\n",
+ "plt.subplot(1, 2, 1)\n",
+ "plt.plot([min_g, max_g], [min_g, max_g], label=\"y=x comparison\")\n",
+ "plt.plot([min_g, max_g], [m * min_g + b, m * max_g + b], \"--\", label=\"Best fit\")\n",
+ "plt.plot(g_discrete, dJ_du[idx], \"o\", label=\"Adjoint comparison\")\n",
+ "plt.xlabel(\"Finite Difference Gradient\")\n",
+ "plt.ylabel(\"Adjoint Gradient\")\n",
"plt.legend()\n",
"plt.grid(True)\n",
"plt.axis(\"square\")\n",
"\n",
- "plt.subplot(1,2,2)\n",
- "rel_err = np.abs(np.squeeze(g_discrete) - np.squeeze(dJ_du[idx])) / np.abs(np.squeeze(g_discrete)) * 100\n",
- "plt.semilogy(g_discrete,rel_err,'o')\n",
+ "plt.subplot(1, 2, 2)\n",
+ "rel_err = (\n",
+ " np.abs(np.squeeze(g_discrete) - np.squeeze(dJ_du[idx]))\n",
+ " / np.abs(np.squeeze(g_discrete))\n",
+ " * 100\n",
+ ")\n",
+ "plt.semilogy(g_discrete, rel_err, \"o\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Finite Difference Gradient')\n",
- "plt.ylabel('Relative Error (%)')\n",
+ "plt.xlabel(\"Finite Difference Gradient\")\n",
+ "plt.ylabel(\"Relative Error (%)\")\n",
"\n",
"fig.tight_layout(rect=[0, 0.03, 1, 0.95])\n",
- "fig.suptitle('Resolution: {} Seed: {} Nx: {} Ny: {}'.format(resolution,seed,Nx,Ny))\n",
+ "fig.suptitle(\"Resolution: {} Seed: {} Nx: {} Ny: {}\".format(resolution, seed, Nx, Ny))\n",
"plt.show()"
]
},
@@ -446,7 +467,7 @@
"resolution = 30\n",
"opt.sim.resolution = resolution\n",
"f0, dJ_du = opt()\n",
- "g_discrete, idx = opt.calculate_fd_gradient(num_gradients=choose,db=db)"
+ "g_discrete, idx = opt.calculate_fd_gradient(num_gradients=choose, db=db)"
]
},
{
@@ -471,27 +492,31 @@
"min_g = np.min(g_discrete)\n",
"max_g = np.max(g_discrete)\n",
"\n",
- "fig = plt.figure(figsize=(12,6))\n",
+ "fig = plt.figure(figsize=(12, 6))\n",
"\n",
- "plt.subplot(1,2,1)\n",
- "plt.plot([min_g, max_g],[min_g, max_g],label='y=x comparison')\n",
- "plt.plot([min_g, max_g],[m*min_g+b, m*max_g+b],'--',label='Best fit')\n",
- "plt.plot(g_discrete,dJ_du[idx],'o',label='Adjoint comparison')\n",
- "plt.xlabel('Finite Difference Gradient')\n",
- "plt.ylabel('Adjoint Gradient')\n",
+ "plt.subplot(1, 2, 1)\n",
+ "plt.plot([min_g, max_g], [min_g, max_g], label=\"y=x comparison\")\n",
+ "plt.plot([min_g, max_g], [m * min_g + b, m * max_g + b], \"--\", label=\"Best fit\")\n",
+ "plt.plot(g_discrete, dJ_du[idx], \"o\", label=\"Adjoint comparison\")\n",
+ "plt.xlabel(\"Finite Difference Gradient\")\n",
+ "plt.ylabel(\"Adjoint Gradient\")\n",
"plt.legend()\n",
"plt.grid(True)\n",
"plt.axis(\"square\")\n",
"\n",
- "plt.subplot(1,2,2)\n",
- "rel_err = np.abs(np.squeeze(g_discrete) - np.squeeze(dJ_du[idx])) / np.abs(np.squeeze(g_discrete)) * 100\n",
- "plt.semilogy(g_discrete,rel_err,'o')\n",
+ "plt.subplot(1, 2, 2)\n",
+ "rel_err = (\n",
+ " np.abs(np.squeeze(g_discrete) - np.squeeze(dJ_du[idx]))\n",
+ " / np.abs(np.squeeze(g_discrete))\n",
+ " * 100\n",
+ ")\n",
+ "plt.semilogy(g_discrete, rel_err, \"o\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Finite Difference Gradient')\n",
- "plt.ylabel('Relative Error (%)')\n",
+ "plt.xlabel(\"Finite Difference Gradient\")\n",
+ "plt.ylabel(\"Relative Error (%)\")\n",
"\n",
"fig.tight_layout(rect=[0, 0.03, 1, 0.95])\n",
- "fig.suptitle('Resolution: {} Seed: {} Nx: {} Ny: {}'.format(resolution,seed,Nx,Ny))\n",
+ "fig.suptitle(\"Resolution: {} Seed: {} Nx: {} Ny: {}\".format(resolution, seed, Nx, Ny))\n",
"plt.show()"
]
},
diff --git a/python/examples/adjoint_optimization/02-Waveguide_Bend.ipynb b/python/examples/adjoint_optimization/02-Waveguide_Bend.ipynb
index 6ffc6cacd..750031271 100644
--- a/python/examples/adjoint_optimization/02-Waveguide_Bend.ipynb
+++ b/python/examples/adjoint_optimization/02-Waveguide_Bend.ipynb
@@ -31,6 +31,7 @@
"from autograd import numpy as npa\n",
"import nlopt\n",
"from matplotlib import pyplot as plt\n",
+ "\n",
"mp.verbosity(0)\n",
"Si = mp.Medium(index=3.4)\n",
"SiO2 = mp.Medium(index=1.44)"
@@ -53,66 +54,83 @@
"\n",
"Sx = 6\n",
"Sy = 5\n",
- "cell_size = mp.Vector3(Sx,Sy)\n",
+ "cell_size = mp.Vector3(Sx, Sy)\n",
"\n",
"pml_layers = [mp.PML(1.0)]\n",
"\n",
- "fcen = 1/1.55\n",
+ "fcen = 1 / 1.55\n",
"width = 0.2\n",
"fwidth = width * fcen\n",
- "source_center = [-1.5,0,0]\n",
- "source_size = mp.Vector3(0,2,0)\n",
- "kpoint = mp.Vector3(1,0,0)\n",
- "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n",
- "source = [mp.EigenModeSource(src,\n",
- " eig_band = 1,\n",
- " direction=mp.NO_DIRECTION,\n",
- " eig_kpoint=kpoint,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "source_center = [-1.5, 0, 0]\n",
+ "source_size = mp.Vector3(0, 2, 0)\n",
+ "kpoint = mp.Vector3(1, 0, 0)\n",
+ "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n",
+ "source = [\n",
+ " mp.EigenModeSource(\n",
+ " src,\n",
+ " eig_band=1,\n",
+ " direction=mp.NO_DIRECTION,\n",
+ " eig_kpoint=kpoint,\n",
+ " size=source_size,\n",
+ " center=source_center,\n",
+ " )\n",
+ "]\n",
"\n",
"design_region_resolution = 10\n",
"Nx = design_region_resolution\n",
"Ny = design_region_resolution\n",
"\n",
- "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n",
- "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(1, 1, 0)))\n",
+ "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n",
+ "design_region = mpa.DesignRegion(\n",
+ " design_variables, volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(1, 1, 0))\n",
+ ")\n",
"\n",
"\n",
"geometry = [\n",
- " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2, 0.5, 0)), # horizontal waveguide\n",
- " mp.Block(center=mp.Vector3(y=Sy/4), material=Si, size=mp.Vector3(0.5, Sy/2, 0)), # vertical waveguide\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables), # design region\n",
- " #mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(x=-Sx / 4), material=Si, size=mp.Vector3(Sx / 2, 0.5, 0)\n",
+ " ), # horizontal waveguide\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(y=Sy / 4), material=Si, size=mp.Vector3(0.5, Sy / 2, 0)\n",
+ " ), # vertical waveguide\n",
+ " mp.Block(\n",
+ " center=design_region.center, size=design_region.size, material=design_variables\n",
+ " ), # design region\n",
+ " # mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n",
" # e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi/2), e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi/2))\n",
- " # \n",
+ " #\n",
" # The commented lines above impose symmetry by overlapping design region with the same design variable. However,\n",
" # currently there is an issue of doing that; We give an alternative approach to impose symmetry in later tutorials.\n",
" # See https://github.com/NanoComp/meep/issues/1984 and https://github.com/NanoComp/meep/issues/2093\n",
- "\n",
"]\n",
"\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " eps_averaging=False,\n",
- " resolution=resolution)\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " eps_averaging=False,\n",
+ " resolution=resolution,\n",
+ ")\n",
"\n",
- "TE_top = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(0,1,0),size=mp.Vector3(x=2)),mode=1)\n",
+ "TE_top = mpa.EigenmodeCoefficient(\n",
+ " sim, mp.Volume(center=mp.Vector3(0, 1, 0), size=mp.Vector3(x=2)), mode=1\n",
+ ")\n",
"ob_list = [TE_top]\n",
"\n",
+ "\n",
"def J(alpha):\n",
" return npa.abs(alpha) ** 2\n",
"\n",
+ "\n",
"opt = mpa.OptimizationProblem(\n",
" simulation=sim,\n",
" objective_functions=J,\n",
" objective_arguments=ob_list,\n",
" design_regions=[design_region],\n",
" fcen=fcen,\n",
- " df = 0,\n",
- " nf = 1\n",
+ " df=0,\n",
+ " nf=1,\n",
")"
]
},
@@ -142,7 +160,7 @@
}
],
"source": [
- "x0 = 0.5*np.ones((Nx*Ny,))\n",
+ "x0 = 0.5 * np.ones((Nx * Ny,))\n",
"opt.update_design([x0])\n",
"\n",
"opt.plot2D(True)\n",
@@ -166,9 +184,11 @@
"source": [
"evaluation_history = []\n",
"sensitivity = [0]\n",
+ "\n",
+ "\n",
"def f(x, grad):\n",
" f0, dJ_du = opt([x])\n",
- " f0 = f0[0] # f0 is an array of length 1 \n",
+ " f0 = f0[0] # f0 is an array of length 1\n",
" if grad.size > 0:\n",
" grad[:] = np.squeeze(dJ_du)\n",
" evaluation_history.append(np.real(f0))\n",
@@ -277,10 +297,10 @@
],
"source": [
"plt.figure()\n",
- "plt.plot(evaluation_history,'o-')\n",
+ "plt.plot(evaluation_history, \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Iteration')\n",
- "plt.ylabel('FOM')\n",
+ "plt.xlabel(\"Iteration\")\n",
+ "plt.ylabel(\"FOM\")\n",
"plt.show()"
]
},
@@ -311,7 +331,11 @@
],
"source": [
"opt.update_design([x])\n",
- "opt.plot2D(True,plot_monitors_flag=False,output_plane=mp.Volume(center=(0,0,0),size=(2,2,0)))\n",
+ "opt.plot2D(\n",
+ " True,\n",
+ " plot_monitors_flag=False,\n",
+ " output_plane=mp.Volume(center=(0, 0, 0), size=(2, 2, 0)),\n",
+ ")\n",
"plt.axis(\"off\");"
]
},
@@ -330,11 +354,15 @@
"metadata": {},
"outputs": [],
"source": [
- "TE0 = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(-1,0,0),size=mp.Vector3(y=2)),mode=1)\n",
- "ob_list = [TE0,TE_top]\n",
+ "TE0 = mpa.EigenmodeCoefficient(\n",
+ " sim, mp.Volume(center=mp.Vector3(-1, 0, 0), size=mp.Vector3(y=2)), mode=1\n",
+ ")\n",
+ "ob_list = [TE0, TE_top]\n",
+ "\n",
+ "\n",
+ "def J(source, top):\n",
+ " return npa.abs(top / source) ** 2\n",
"\n",
- "def J(source,top):\n",
- " return npa.abs(top/source) ** 2\n",
"\n",
"opt.objective_functions = [J]\n",
"opt.objective_arguments = ob_list\n",
@@ -427,10 +455,10 @@
],
"source": [
"plt.figure()\n",
- "plt.plot(np.array(evaluation_history)*100,'o-')\n",
+ "plt.plot(np.array(evaluation_history) * 100, \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Iteration')\n",
- "plt.ylabel('Transmission (%)')\n",
+ "plt.xlabel(\"Iteration\")\n",
+ "plt.ylabel(\"Transmission (%)\")\n",
"plt.show()"
]
},
@@ -486,7 +514,11 @@
],
"source": [
"opt.update_design([x])\n",
- "opt.plot2D(True,plot_monitors_flag=False,output_plane=mp.Volume(center=(0,0,0),size=(2,2,0)))\n",
+ "opt.plot2D(\n",
+ " True,\n",
+ " plot_monitors_flag=False,\n",
+ " output_plane=mp.Volume(center=(0, 0, 0), size=(2, 2, 0)),\n",
+ ")\n",
"plt.axis(\"off\");"
]
},
@@ -516,7 +548,7 @@
}
],
"source": [
- "plt.imshow(np.rot90(np.squeeze(np.abs(sensitivity[0].reshape(Nx,Ny)))));"
+ "plt.imshow(np.rot90(np.squeeze(np.abs(sensitivity[0].reshape(Nx, Ny)))));"
]
}
],
diff --git a/python/examples/adjoint_optimization/03-Filtered_Waveguide_Bend.ipynb b/python/examples/adjoint_optimization/03-Filtered_Waveguide_Bend.ipynb
index b7f61e4f7..ba833ce4c 100644
--- a/python/examples/adjoint_optimization/03-Filtered_Waveguide_Bend.ipynb
+++ b/python/examples/adjoint_optimization/03-Filtered_Waveguide_Bend.ipynb
@@ -38,6 +38,7 @@
"from matplotlib import pyplot as plt\n",
"from matplotlib.patches import Circle\n",
"from scipy import special, signal\n",
+ "\n",
"mp.verbosity(0)\n",
"Si = mp.Medium(index=3.4)\n",
"SiO2 = mp.Medium(index=1.44)"
@@ -66,7 +67,7 @@
"\n",
"resolution = 20\n",
"\n",
- "frequencies = 1/np.linspace(1.5,1.6,10)"
+ "frequencies = 1 / np.linspace(1.5, 1.6, 10)"
]
},
{
@@ -92,13 +93,15 @@
}
],
"source": [
- "minimum_length = 0.09 # minimum length scale (microns)\n",
- "eta_i = 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
- "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
- "eta_d = 1-eta_e # dilation design field thresholding point (between 0 and 1)\n",
- "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n",
+ "minimum_length = 0.09 # minimum length scale (microns)\n",
+ "eta_i = (\n",
+ " 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
+ ")\n",
+ "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
+ "eta_d = 1 - eta_e # dilation design field thresholding point (between 0 and 1)\n",
+ "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n",
"print(filter_radius)\n",
- "design_region_resolution = int(1*resolution)"
+ "design_region_resolution = int(1 * resolution)"
]
},
{
@@ -114,25 +117,29 @@
"metadata": {},
"outputs": [],
"source": [
- "Sx = 2*pml_size + 2*waveguide_length + design_region_width\n",
- "Sy = 2*pml_size + design_region_height + 0.5\n",
- "cell_size = mp.Vector3(Sx,Sy)\n",
+ "Sx = 2 * pml_size + 2 * waveguide_length + design_region_width\n",
+ "Sy = 2 * pml_size + design_region_height + 0.5\n",
+ "cell_size = mp.Vector3(Sx, Sy)\n",
"\n",
"pml_layers = [mp.PML(pml_size)]\n",
"\n",
- "fcen = 1/1.55\n",
+ "fcen = 1 / 1.55\n",
"width = 0.1\n",
"fwidth = width * fcen\n",
- "source_center = [-Sx/2 + pml_size + waveguide_length/3,0,0]\n",
- "source_size = mp.Vector3(0,Sy,0)\n",
- "kpoint = mp.Vector3(1,0,0)\n",
- "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n",
- "source = [mp.EigenModeSource(src,\n",
- " eig_band = 1,\n",
- " direction=mp.NO_DIRECTION,\n",
- " eig_kpoint=kpoint,\n",
- " size = source_size,\n",
- " center=source_center)]"
+ "source_center = [-Sx / 2 + pml_size + waveguide_length / 3, 0, 0]\n",
+ "source_size = mp.Vector3(0, Sy, 0)\n",
+ "kpoint = mp.Vector3(1, 0, 0)\n",
+ "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n",
+ "source = [\n",
+ " mp.EigenModeSource(\n",
+ " src,\n",
+ " eig_band=1,\n",
+ " direction=mp.NO_DIRECTION,\n",
+ " eig_kpoint=kpoint,\n",
+ " size=source_size,\n",
+ " center=source_center,\n",
+ " )\n",
+ "]"
]
},
{
@@ -148,11 +155,17 @@
"metadata": {},
"outputs": [],
"source": [
- "Nx = int(design_region_resolution*design_region_width)\n",
- "Ny = int(design_region_resolution*design_region_height)\n",
+ "Nx = int(design_region_resolution * design_region_width)\n",
+ "Ny = int(design_region_resolution * design_region_height)\n",
"\n",
- "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n",
- "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))"
+ "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n",
+ "design_region = mpa.DesignRegion(\n",
+ " design_variables,\n",
+ " volume=mp.Volume(\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(design_region_width, design_region_height, 0),\n",
+ " ),\n",
+ ")"
]
},
{
@@ -168,18 +181,20 @@
"metadata": {},
"outputs": [],
"source": [
- "x_g = np.linspace(-design_region_width/2,design_region_width/2,Nx)\n",
- "y_g = np.linspace(-design_region_height/2,design_region_height/2,Ny)\n",
- "X_g, Y_g = np.meshgrid(x_g,y_g,sparse=True,indexing='ij')\n",
+ "x_g = np.linspace(-design_region_width / 2, design_region_width / 2, Nx)\n",
+ "y_g = np.linspace(-design_region_height / 2, design_region_height / 2, Ny)\n",
+ "X_g, Y_g = np.meshgrid(x_g, y_g, sparse=True, indexing=\"ij\")\n",
"\n",
- "left_wg_mask = (X_g == -design_region_width/2) & (np.abs(Y_g) <= waveguide_width/2)\n",
- "top_wg_mask = (Y_g == design_region_width/2) & (np.abs(X_g) <= waveguide_width/2)\n",
+ "left_wg_mask = (X_g == -design_region_width / 2) & (np.abs(Y_g) <= waveguide_width / 2)\n",
+ "top_wg_mask = (Y_g == design_region_width / 2) & (np.abs(X_g) <= waveguide_width / 2)\n",
"Si_mask = left_wg_mask | top_wg_mask\n",
"\n",
- "border_mask = ((X_g == -design_region_width/2) | \n",
- " (X_g == design_region_width/2) | \n",
- " (Y_g == -design_region_height/2) | \n",
- " (Y_g == design_region_height/2))\n",
+ "border_mask = (\n",
+ " (X_g == -design_region_width / 2)\n",
+ " | (X_g == design_region_width / 2)\n",
+ " | (Y_g == -design_region_height / 2)\n",
+ " | (Y_g == design_region_height / 2)\n",
+ ")\n",
"SiO2_mask = border_mask.copy()\n",
"SiO2_mask[Si_mask] = False"
]
@@ -197,17 +212,25 @@
"metadata": {},
"outputs": [],
"source": [
- "def mapping(x,eta,beta):\n",
- " x = npa.where(Si_mask.flatten(),1,npa.where(SiO2_mask.flatten(),0,x))\n",
- " \n",
+ "def mapping(x, eta, beta):\n",
+ " x = npa.where(Si_mask.flatten(), 1, npa.where(SiO2_mask.flatten(), 0, x))\n",
+ "\n",
" # filter\n",
- " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n",
- " \n",
+ " filtered_field = mpa.conic_filter(\n",
+ " x,\n",
+ " filter_radius,\n",
+ " design_region_width,\n",
+ " design_region_height,\n",
+ " design_region_resolution,\n",
+ " )\n",
+ "\n",
" # projection\n",
- " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n",
- " \n",
- " projected_field = (npa.rot90(projected_field.T, 2) + projected_field)/2 # 90-degree symmetry\n",
- " \n",
+ " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n",
+ "\n",
+ " projected_field = (\n",
+ " npa.rot90(projected_field.T, 2) + projected_field\n",
+ " ) / 2 # 90-degree symmetry\n",
+ "\n",
" # interpolate to actual materials\n",
" return projected_field.flatten()"
]
@@ -228,22 +251,30 @@
"outputs": [],
"source": [
"geometry = [\n",
- " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2, 0.5, 0)), # horizontal waveguide\n",
- " mp.Block(center=mp.Vector3(y=Sy/4), material=Si, size=mp.Vector3(0.5, Sy/2, 0)), # vertical waveguide\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables), # design region\n",
- " #mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(x=-Sx / 4), material=Si, size=mp.Vector3(Sx / 2, 0.5, 0)\n",
+ " ), # horizontal waveguide\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(y=Sy / 4), material=Si, size=mp.Vector3(0.5, Sy / 2, 0)\n",
+ " ), # vertical waveguide\n",
+ " mp.Block(\n",
+ " center=design_region.center, size=design_region.size, material=design_variables\n",
+ " ), # design region\n",
+ " # mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n",
" # e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi/2), e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi/2))\n",
- " # \n",
+ " #\n",
" # The commented lines above impose symmetry by overlapping design region with the same design variable. However,\n",
" # currently there is an issue of doing that; instead, we use an alternative approach to impose symmetry.\n",
" # See https://github.com/NanoComp/meep/issues/1984 and https://github.com/NanoComp/meep/issues/2093\n",
"]\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=SiO2,\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=SiO2,\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -261,11 +292,27 @@
"source": [
"mode = 1\n",
"\n",
- "TE0 = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(x=-Sx/2 + pml_size + 2*waveguide_length/3),size=mp.Vector3(y=Sy)),mode)\n",
- "TE_top = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(0,Sx/2 - pml_size - 2*waveguide_length/3,0),size=mp.Vector3(x=Sx)),mode)\n",
- "ob_list = [TE0,TE_top]\n",
- "def J(source,top):\n",
- " power = npa.abs(top/source)**2\n",
+ "TE0 = mpa.EigenmodeCoefficient(\n",
+ " sim,\n",
+ " mp.Volume(\n",
+ " center=mp.Vector3(x=-Sx / 2 + pml_size + 2 * waveguide_length / 3),\n",
+ " size=mp.Vector3(y=Sy),\n",
+ " ),\n",
+ " mode,\n",
+ ")\n",
+ "TE_top = mpa.EigenmodeCoefficient(\n",
+ " sim,\n",
+ " mp.Volume(\n",
+ " center=mp.Vector3(0, Sx / 2 - pml_size - 2 * waveguide_length / 3, 0),\n",
+ " size=mp.Vector3(x=Sx),\n",
+ " ),\n",
+ " mode,\n",
+ ")\n",
+ "ob_list = [TE0, TE_top]\n",
+ "\n",
+ "\n",
+ "def J(source, top):\n",
+ " power = npa.abs(top / source) ** 2\n",
" return npa.mean(power)"
]
},
@@ -276,10 +323,10 @@
"outputs": [],
"source": [
"opt = mpa.OptimizationProblem(\n",
- " simulation = sim,\n",
- " objective_functions = J,\n",
- " objective_arguments = ob_list,\n",
- " design_regions = [design_region],\n",
+ " simulation=sim,\n",
+ " objective_functions=J,\n",
+ " objective_arguments=ob_list,\n",
+ " design_regions=[design_region],\n",
" frequencies=frequencies,\n",
")"
]
@@ -310,9 +357,9 @@
}
],
"source": [
- "rho_vector = np.random.rand(Nx*Ny)\n",
- "opt.update_design([mapping(rho_vector,eta_i,1e3)])\n",
- "opt.plot2D(True,output_plane=mp.Volume(center=(0,0,0),size=(3,3,0)))\n",
+ "rho_vector = np.random.rand(Nx * Ny)\n",
+ "opt.update_design([mapping(rho_vector, eta_i, 1e3)])\n",
+ "opt.plot2D(True, output_plane=mp.Volume(center=(0, 0, 0), size=(3, 3, 0)))\n",
"plt.show()"
]
},
@@ -345,19 +392,19 @@
"beta = 2048\n",
"\n",
"plt.figure()\n",
- "ax1 = plt.subplot(1,3,1)\n",
- "opt.update_design([mapping(rho_vector,0.498,beta)])\n",
- "opt.plot2D(True,ax=ax1,output_plane=mp.Volume(center=(0,0,0),size=(3,3,0)))\n",
+ "ax1 = plt.subplot(1, 3, 1)\n",
+ "opt.update_design([mapping(rho_vector, 0.498, beta)])\n",
+ "opt.plot2D(True, ax=ax1, output_plane=mp.Volume(center=(0, 0, 0), size=(3, 3, 0)))\n",
"plt.title(\"Dilation\")\n",
"\n",
- "ax2 = plt.subplot(1,3,2)\n",
- "opt.update_design([mapping(rho_vector,0.5,beta)])\n",
- "opt.plot2D(True,ax=ax2,output_plane=mp.Volume(center=(0,0,0),size=(3,3,0)))\n",
+ "ax2 = plt.subplot(1, 3, 2)\n",
+ "opt.update_design([mapping(rho_vector, 0.5, beta)])\n",
+ "opt.plot2D(True, ax=ax2, output_plane=mp.Volume(center=(0, 0, 0), size=(3, 3, 0)))\n",
"plt.title(\"Intermediate\")\n",
"\n",
- "ax3 = plt.subplot(1,3,3)\n",
- "opt.update_design([mapping(rho_vector,0.502,beta)])\n",
- "opt.plot2D(True,ax=ax3,output_plane=mp.Volume(center=(0,0,0),size=(3,3,0)))\n",
+ "ax3 = plt.subplot(1, 3, 3)\n",
+ "opt.update_design([mapping(rho_vector, 0.502, beta)])\n",
+ "opt.plot2D(True, ax=ax3, output_plane=mp.Volume(center=(0, 0, 0), size=(3, 3, 0)))\n",
"plt.title(\"Erosion\")\n",
"\n",
"plt.tight_layout()\n",
@@ -379,27 +426,36 @@
"source": [
"evaluation_history = []\n",
"cur_iter = [0]\n",
+ "\n",
+ "\n",
"def f(v, gradient, cur_beta):\n",
- " print(\"Current iteration: {}\".format(cur_iter[0]+1))\n",
- " \n",
- " f0, dJ_du = opt([mapping(v,eta_i,cur_beta)]) # compute objective and gradient\n",
- " \n",
+ " print(\"Current iteration: {}\".format(cur_iter[0] + 1))\n",
+ "\n",
+ " f0, dJ_du = opt([mapping(v, eta_i, cur_beta)]) # compute objective and gradient\n",
+ "\n",
" if gradient.size > 0:\n",
- " gradient[:] = tensor_jacobian_product(mapping,0)(v,eta_i,cur_beta,np.sum(dJ_du,axis=1)) # backprop\n",
- " \n",
- " \n",
+ " gradient[:] = tensor_jacobian_product(mapping, 0)(\n",
+ " v, eta_i, cur_beta, np.sum(dJ_du, axis=1)\n",
+ " ) # backprop\n",
+ "\n",
" evaluation_history.append(np.real(f0))\n",
- " \n",
+ "\n",
" plt.figure()\n",
" ax = plt.gca()\n",
- " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- " circ = Circle((2,2),minimum_length/2)\n",
+ " opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ " )\n",
+ " circ = Circle((2, 2), minimum_length / 2)\n",
" ax.add_patch(circ)\n",
- " ax.axis('off')\n",
+ " ax.axis(\"off\")\n",
" plt.show()\n",
- " \n",
+ "\n",
" cur_iter[0] = cur_iter[0] + 1\n",
- " \n",
+ "\n",
" return np.real(f0)"
]
},
@@ -2002,17 +2058,17 @@
],
"source": [
"algorithm = nlopt.LD_MMA\n",
- "n = Nx * Ny # number of parameters\n",
+ "n = Nx * Ny # number of parameters\n",
"\n",
"# Initial guess\n",
"x = np.ones((n,)) * 0.5\n",
- "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n",
- "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n",
+ "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n",
+ "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n",
"\n",
"# lower and upper bounds\n",
- "lb = np.zeros((Nx*Ny,))\n",
+ "lb = np.zeros((Nx * Ny,))\n",
"lb[Si_mask.flatten()] = 1\n",
- "ub = np.ones((Nx*Ny,))\n",
+ "ub = np.ones((Nx * Ny,))\n",
"ub[SiO2_mask.flatten()] = 0\n",
"\n",
"cur_beta = 4\n",
@@ -2023,10 +2079,10 @@
" solver = nlopt.opt(algorithm, n)\n",
" solver.set_lower_bounds(lb)\n",
" solver.set_upper_bounds(ub)\n",
- " solver.set_max_objective(lambda a,g: f(a,g,cur_beta))\n",
+ " solver.set_max_objective(lambda a, g: f(a, g, cur_beta))\n",
" solver.set_maxeval(update_factor)\n",
" x[:] = solver.optimize(x)\n",
- " cur_beta = cur_beta*beta_scale"
+ " cur_beta = cur_beta * beta_scale"
]
},
{
@@ -2056,10 +2112,10 @@
],
"source": [
"plt.figure()\n",
- "plt.plot(10*np.log10(evaluation_history),'o-')\n",
+ "plt.plot(10 * np.log10(evaluation_history), \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Iteration')\n",
- "plt.ylabel('Average Insertion Loss (dB)')\n",
+ "plt.xlabel(\"Iteration\")\n",
+ "plt.ylabel(\"Average Insertion Loss (dB)\")\n",
"plt.show()"
]
},
@@ -2089,13 +2145,19 @@
}
],
"source": [
- "opt.update_design([mapping(x,eta_i,cur_beta)])\n",
+ "opt.update_design([mapping(x, eta_i, cur_beta)])\n",
"plt.figure()\n",
"ax = plt.gca()\n",
- "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- "circ = Circle((2,2),minimum_length/2)\n",
+ "opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ ")\n",
+ "circ = Circle((2, 2), minimum_length / 2)\n",
"ax.add_patch(circ)\n",
- "ax.axis('off')\n",
+ "ax.axis(\"off\")\n",
"plt.show()"
]
},
@@ -2120,11 +2182,11 @@
}
],
"source": [
- "f0, dJ_du = opt([mapping(x,eta_i,cur_beta//2)],need_gradient = False)\n",
+ "f0, dJ_du = opt([mapping(x, eta_i, cur_beta // 2)], need_gradient=False)\n",
"frequencies = opt.frequencies\n",
"source_coef, top_coef = opt.get_objective_arguments()\n",
"\n",
- "top_profile = np.abs(top_coef/source_coef) ** 2"
+ "top_profile = np.abs(top_coef / source_coef) ** 2"
]
},
{
@@ -2159,19 +2221,19 @@
],
"source": [
"plt.figure()\n",
- "plt.plot(1/frequencies,top_profile*100,'-o')\n",
+ "plt.plot(1 / frequencies, top_profile * 100, \"-o\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Wavelength (microns)')\n",
- "plt.ylabel('Transmission (%)')\n",
- "#plt.ylim(98,100)\n",
+ "plt.xlabel(\"Wavelength (microns)\")\n",
+ "plt.ylabel(\"Transmission (%)\")\n",
+ "# plt.ylim(98,100)\n",
"plt.show()\n",
"\n",
"plt.figure()\n",
- "plt.plot(1/frequencies,10*np.log10(top_profile),'-o')\n",
+ "plt.plot(1 / frequencies, 10 * np.log10(top_profile), \"-o\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Wavelength (microns)')\n",
- "plt.ylabel('Insertion Loss (dB)')\n",
- "#plt.ylim(-0.1,0)\n",
+ "plt.xlabel(\"Wavelength (microns)\")\n",
+ "plt.ylabel(\"Insertion Loss (dB)\")\n",
+ "# plt.ylim(-0.1,0)\n",
"plt.show()"
]
},
diff --git a/python/examples/adjoint_optimization/04-Splitter.ipynb b/python/examples/adjoint_optimization/04-Splitter.ipynb
index 4518401a7..ff4b04f57 100644
--- a/python/examples/adjoint_optimization/04-Splitter.ipynb
+++ b/python/examples/adjoint_optimization/04-Splitter.ipynb
@@ -41,6 +41,7 @@
"from matplotlib import pyplot as plt\n",
"from matplotlib.patches import Circle\n",
"import nlopt\n",
+ "\n",
"seed = 240\n",
"np.random.seed(seed)\n",
"mp.quiet(quietval=True)\n",
@@ -71,13 +72,13 @@
"\n",
"minimum_length = 0.09\n",
"eta_e = 0.55\n",
- "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n",
+ "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n",
"eta_i = 0.5\n",
- "eta_d = 1-eta_e\n",
- "design_region_resolution = int(5*resolution)\n",
+ "eta_d = 1 - eta_e\n",
+ "design_region_resolution = int(5 * resolution)\n",
"\n",
- "frequencies = 1/np.linspace(1.5,1.6,10)\n",
- "#print(1/frequencies)"
+ "frequencies = 1 / np.linspace(1.5, 1.6, 10)\n",
+ "# print(1/frequencies)"
]
},
{
@@ -93,25 +94,29 @@
"metadata": {},
"outputs": [],
"source": [
- "Sx = 2*pml_size + 2*waveguide_length + design_region_width\n",
- "Sy = 2*pml_size + design_region_height + 0.5\n",
- "cell_size = mp.Vector3(Sx,Sy)\n",
+ "Sx = 2 * pml_size + 2 * waveguide_length + design_region_width\n",
+ "Sy = 2 * pml_size + design_region_height + 0.5\n",
+ "cell_size = mp.Vector3(Sx, Sy)\n",
"\n",
"pml_layers = [mp.PML(pml_size)]\n",
"\n",
- "fcen = 1/1.56\n",
+ "fcen = 1 / 1.56\n",
"width = 0.2\n",
"fwidth = width * fcen\n",
- "source_center = [-Sx/2 + pml_size + waveguide_length/3,0,0]\n",
- "source_size = mp.Vector3(0,2,0)\n",
- "kpoint = mp.Vector3(1,0,0)\n",
- "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n",
- "source = [mp.EigenModeSource(src,\n",
- " eig_band = 1,\n",
- " direction=mp.NO_DIRECTION,\n",
- " eig_kpoint=kpoint,\n",
- " size = source_size,\n",
- " center=source_center)]"
+ "source_center = [-Sx / 2 + pml_size + waveguide_length / 3, 0, 0]\n",
+ "source_size = mp.Vector3(0, 2, 0)\n",
+ "kpoint = mp.Vector3(1, 0, 0)\n",
+ "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n",
+ "source = [\n",
+ " mp.EigenModeSource(\n",
+ " src,\n",
+ " eig_band=1,\n",
+ " direction=mp.NO_DIRECTION,\n",
+ " eig_kpoint=kpoint,\n",
+ " size=source_size,\n",
+ " center=source_center,\n",
+ " )\n",
+ "]"
]
},
{
@@ -127,11 +132,17 @@
"metadata": {},
"outputs": [],
"source": [
- "Nx = int(design_region_resolution*design_region_width)\n",
- "Ny = int(design_region_resolution*design_region_height)\n",
+ "Nx = int(design_region_resolution * design_region_width)\n",
+ "Ny = int(design_region_resolution * design_region_height)\n",
"\n",
- "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n",
- "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))"
+ "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n",
+ "design_region = mpa.DesignRegion(\n",
+ " design_variables,\n",
+ " volume=mp.Volume(\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(design_region_width, design_region_height, 0),\n",
+ " ),\n",
+ ")"
]
},
{
@@ -147,16 +158,24 @@
"metadata": {},
"outputs": [],
"source": [
- "def mapping(x,eta,beta):\n",
- " \n",
+ "def mapping(x, eta, beta):\n",
+ "\n",
" # filter\n",
- " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n",
- " \n",
+ " filtered_field = mpa.conic_filter(\n",
+ " x,\n",
+ " filter_radius,\n",
+ " design_region_width,\n",
+ " design_region_height,\n",
+ " design_region_resolution,\n",
+ " )\n",
+ "\n",
" # projection\n",
- " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n",
- " \n",
- " projected_field = (npa.fliplr(projected_field) + projected_field)/2 # up-down symmetry\n",
- " \n",
+ " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n",
+ "\n",
+ " projected_field = (\n",
+ " npa.fliplr(projected_field) + projected_field\n",
+ " ) / 2 # up-down symmetry\n",
+ "\n",
" # interpolate to actual materials\n",
" return projected_field.flatten()"
]
@@ -175,21 +194,27 @@
"outputs": [],
"source": [
"# Define spatial arrays used to generate bit masks\n",
- "x_g = np.linspace(-design_region_width/2,design_region_width/2,Nx)\n",
- "y_g = np.linspace(-design_region_height/2,design_region_height/2,Ny)\n",
- "X_g, Y_g = np.meshgrid(x_g,y_g,sparse=True,indexing='ij')\n",
+ "x_g = np.linspace(-design_region_width / 2, design_region_width / 2, Nx)\n",
+ "y_g = np.linspace(-design_region_height / 2, design_region_height / 2, Ny)\n",
+ "X_g, Y_g = np.meshgrid(x_g, y_g, sparse=True, indexing=\"ij\")\n",
"\n",
"# Define the core mask\n",
- "left_wg_mask = (X_g == -design_region_width/2) & (np.abs(Y_g) <= waveguide_width/2)\n",
- "top_right_wg_mask = (X_g == design_region_width/2) & (np.abs(Y_g + arm_separation/2) <= waveguide_width/2)\n",
- "bottom_right_wg_mask = (X_g == design_region_width/2) & (np.abs(Y_g - arm_separation/2) <= waveguide_width/2)\n",
+ "left_wg_mask = (X_g == -design_region_width / 2) & (np.abs(Y_g) <= waveguide_width / 2)\n",
+ "top_right_wg_mask = (X_g == design_region_width / 2) & (\n",
+ " np.abs(Y_g + arm_separation / 2) <= waveguide_width / 2\n",
+ ")\n",
+ "bottom_right_wg_mask = (X_g == design_region_width / 2) & (\n",
+ " np.abs(Y_g - arm_separation / 2) <= waveguide_width / 2\n",
+ ")\n",
"Si_mask = left_wg_mask | top_right_wg_mask | bottom_right_wg_mask\n",
"\n",
"# Define the cladding mask\n",
- "border_mask = ((X_g == -design_region_width/2) | \n",
- " (X_g == design_region_width/2) | \n",
- " (Y_g == -design_region_height/2) | \n",
- " (Y_g == design_region_height/2))\n",
+ "border_mask = (\n",
+ " (X_g == -design_region_width / 2)\n",
+ " | (X_g == design_region_width / 2)\n",
+ " | (Y_g == -design_region_height / 2)\n",
+ " | (Y_g == design_region_height / 2)\n",
+ ")\n",
"SiO2_mask = border_mask.copy()\n",
"SiO2_mask[Si_mask] = False"
]
@@ -208,24 +233,40 @@
"outputs": [],
"source": [
"geometry = [\n",
- " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2+1, waveguide_width, 0)), # left waveguide\n",
- " mp.Block(center=mp.Vector3(x=Sx/4, y=arm_separation/2), material=Si, size=mp.Vector3(Sx/2+1, waveguide_width, 0)), # top right waveguide\n",
- " mp.Block(center=mp.Vector3(x=Sx/4, y=-arm_separation/2), material=Si, size=mp.Vector3(Sx/2+1, waveguide_width, 0)), # bottom right waveguide\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables),\n",
- " #mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e2=mp.Vector3(y=-1))\n",
- " # \n",
+ " mp.Block(\n",
+ " center=mp.Vector3(x=-Sx / 4),\n",
+ " material=Si,\n",
+ " size=mp.Vector3(Sx / 2 + 1, waveguide_width, 0),\n",
+ " ), # left waveguide\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(x=Sx / 4, y=arm_separation / 2),\n",
+ " material=Si,\n",
+ " size=mp.Vector3(Sx / 2 + 1, waveguide_width, 0),\n",
+ " ), # top right waveguide\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(x=Sx / 4, y=-arm_separation / 2),\n",
+ " material=Si,\n",
+ " size=mp.Vector3(Sx / 2 + 1, waveguide_width, 0),\n",
+ " ), # bottom right waveguide\n",
+ " mp.Block(\n",
+ " center=design_region.center, size=design_region.size, material=design_variables\n",
+ " ),\n",
+ " # mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e2=mp.Vector3(y=-1))\n",
+ " #\n",
" # The commented line above impose symmetry by overlapping design region with the same design variable. However,\n",
" # currently there is an issue of doing that; instead, we use an alternative approach to impose symmetry.\n",
" # See https://github.com/NanoComp/meep/issues/1984 and https://github.com/NanoComp/meep/issues/2093\n",
"]\n",
"\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " symmetries=[mp.Mirror(direction=mp.Y)],\n",
- " default_material=SiO2,\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " symmetries=[mp.Mirror(direction=mp.Y)],\n",
+ " default_material=SiO2,\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -243,22 +284,49 @@
"source": [
"mode = 1\n",
"\n",
- "TE0 = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(x=-Sx/2 + pml_size + 2*waveguide_length/3),size=mp.Vector3(y=1.5)),mode)\n",
- "TE_top = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(Sx/2 - pml_size - 2*waveguide_length/3,arm_separation/2,0),size=mp.Vector3(y=arm_separation)),mode)\n",
- "TE_bottom = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(Sx/2 - pml_size - 2*waveguide_length/3,-arm_separation/2,0),size=mp.Vector3(y=arm_separation)),mode)\n",
- "ob_list = [TE0,TE_top,TE_bottom]\n",
+ "TE0 = mpa.EigenmodeCoefficient(\n",
+ " sim,\n",
+ " mp.Volume(\n",
+ " center=mp.Vector3(x=-Sx / 2 + pml_size + 2 * waveguide_length / 3),\n",
+ " size=mp.Vector3(y=1.5),\n",
+ " ),\n",
+ " mode,\n",
+ ")\n",
+ "TE_top = mpa.EigenmodeCoefficient(\n",
+ " sim,\n",
+ " mp.Volume(\n",
+ " center=mp.Vector3(\n",
+ " Sx / 2 - pml_size - 2 * waveguide_length / 3, arm_separation / 2, 0\n",
+ " ),\n",
+ " size=mp.Vector3(y=arm_separation),\n",
+ " ),\n",
+ " mode,\n",
+ ")\n",
+ "TE_bottom = mpa.EigenmodeCoefficient(\n",
+ " sim,\n",
+ " mp.Volume(\n",
+ " center=mp.Vector3(\n",
+ " Sx / 2 - pml_size - 2 * waveguide_length / 3, -arm_separation / 2, 0\n",
+ " ),\n",
+ " size=mp.Vector3(y=arm_separation),\n",
+ " ),\n",
+ " mode,\n",
+ ")\n",
+ "ob_list = [TE0, TE_top, TE_bottom]\n",
"\n",
- "def J(source,top,bottom):\n",
- " power = npa.abs(top/source) ** 2 + npa.abs(bottom/source) ** 2\n",
+ "\n",
+ "def J(source, top, bottom):\n",
+ " power = npa.abs(top / source) ** 2 + npa.abs(bottom / source) ** 2\n",
" return npa.mean(power)\n",
"\n",
+ "\n",
"opt = mpa.OptimizationProblem(\n",
- " simulation = sim,\n",
- " objective_functions = J,\n",
- " objective_arguments = ob_list,\n",
- " design_regions = [design_region],\n",
+ " simulation=sim,\n",
+ " objective_functions=J,\n",
+ " objective_arguments=ob_list,\n",
+ " design_regions=[design_region],\n",
" frequencies=frequencies,\n",
- " decay_by = 1e-5,\n",
+ " decay_by=1e-5,\n",
")"
]
},
@@ -289,7 +357,13 @@
],
"source": [
"plt.figure()\n",
- "x0 = mapping(np.random.rand(Nx*Ny,),eta_i,128)\n",
+ "x0 = mapping(\n",
+ " np.random.rand(\n",
+ " Nx * Ny,\n",
+ " ),\n",
+ " eta_i,\n",
+ " 128,\n",
+ ")\n",
"opt.update_design([x0])\n",
"opt.plot2D(True)\n",
"plt.show()"
@@ -310,26 +384,36 @@
"source": [
"evaluation_history = []\n",
"cur_iter = [0]\n",
+ "\n",
+ "\n",
"def f(v, gradient, cur_beta):\n",
- " print(\"Current iteration: {}\".format(cur_iter[0]+1))\n",
- " \n",
- " f0, dJ_du = opt([mapping(v,eta_i,cur_beta)])\n",
- " \n",
+ " print(\"Current iteration: {}\".format(cur_iter[0] + 1))\n",
+ "\n",
+ " f0, dJ_du = opt([mapping(v, eta_i, cur_beta)])\n",
+ "\n",
" plt.figure()\n",
" ax = plt.gca()\n",
- " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- " circ = Circle((2,2),minimum_length/2)\n",
+ " opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ " )\n",
+ " circ = Circle((2, 2), minimum_length / 2)\n",
" ax.add_patch(circ)\n",
- " ax.axis('off')\n",
+ " ax.axis(\"off\")\n",
" plt.show()\n",
- " \n",
+ "\n",
" if gradient.size > 0:\n",
- " gradient[:] = tensor_jacobian_product(mapping,0)(v,eta_i,cur_beta,np.sum(dJ_du,axis=1))\n",
- " \n",
+ " gradient[:] = tensor_jacobian_product(mapping, 0)(\n",
+ " v, eta_i, cur_beta, np.sum(dJ_du, axis=1)\n",
+ " )\n",
+ "\n",
" evaluation_history.append(np.max(np.real(f0)))\n",
- " \n",
+ "\n",
" cur_iter[0] = cur_iter[0] + 1\n",
- " \n",
+ "\n",
" return np.real(f0)"
]
},
@@ -1938,17 +2022,17 @@
],
"source": [
"algorithm = nlopt.LD_MMA\n",
- "n = Nx * Ny # number of parameters\n",
+ "n = Nx * Ny # number of parameters\n",
"\n",
"# Initial guess\n",
"x = np.ones((n,)) * 0.5\n",
- "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n",
- "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n",
+ "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n",
+ "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n",
"\n",
"# lower and upper bounds\n",
- "lb = np.zeros((Nx*Ny,))\n",
+ "lb = np.zeros((Nx * Ny,))\n",
"lb[Si_mask.flatten()] = 1\n",
- "ub = np.ones((Nx*Ny,))\n",
+ "ub = np.ones((Nx * Ny,))\n",
"ub[SiO2_mask.flatten()] = 0\n",
"\n",
"cur_beta = 4\n",
@@ -1956,15 +2040,15 @@
"num_betas = 6\n",
"update_factor = 12\n",
"for iters in range(num_betas):\n",
- " print(\"current beta: \",cur_beta)\n",
- " \n",
+ " print(\"current beta: \", cur_beta)\n",
+ "\n",
" solver = nlopt.opt(algorithm, n)\n",
" solver.set_lower_bounds(lb)\n",
" solver.set_upper_bounds(ub)\n",
- " solver.set_max_objective(lambda a,g: f(a,g,cur_beta))\n",
+ " solver.set_max_objective(lambda a, g: f(a, g, cur_beta))\n",
" solver.set_maxeval(update_factor)\n",
" x[:] = solver.optimize(x)\n",
- " cur_beta = cur_beta*beta_scale"
+ " cur_beta = cur_beta * beta_scale"
]
},
{
@@ -1994,10 +2078,10 @@
],
"source": [
"plt.figure()\n",
- "plt.plot(10*np.log10(0.5*np.array(evaluation_history)),'o-')\n",
+ "plt.plot(10 * np.log10(0.5 * np.array(evaluation_history)), \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Iteration')\n",
- "plt.ylabel('Mean Splitting Ratio (dB)')\n",
+ "plt.xlabel(\"Iteration\")\n",
+ "plt.ylabel(\"Mean Splitting Ratio (dB)\")\n",
"plt.show()"
]
},
@@ -2022,12 +2106,12 @@
}
],
"source": [
- "f0, dJ_du = opt([mapping(x,eta_i,cur_beta)],need_gradient = False)\n",
+ "f0, dJ_du = opt([mapping(x, eta_i, cur_beta)], need_gradient=False)\n",
"frequencies = opt.frequencies\n",
"source_coef, top_coef, bottom_ceof = opt.get_objective_arguments()\n",
"\n",
- "top_profile = np.abs(top_coef/source_coef) ** 2\n",
- "bottom_profile = np.abs(bottom_ceof/source_coef) ** 2"
+ "top_profile = np.abs(top_coef / source_coef) ** 2\n",
+ "bottom_profile = np.abs(bottom_ceof / source_coef) ** 2"
]
},
{
@@ -2050,13 +2134,13 @@
],
"source": [
"plt.figure()\n",
- "plt.plot(1/frequencies,top_profile*100,'-o' ,label = 'Top Arm')\n",
- "plt.plot(1/frequencies,bottom_profile*100,'--o',label = 'Bottom Arm')\n",
+ "plt.plot(1 / frequencies, top_profile * 100, \"-o\", label=\"Top Arm\")\n",
+ "plt.plot(1 / frequencies, bottom_profile * 100, \"--o\", label=\"Bottom Arm\")\n",
"plt.legend()\n",
"plt.grid(True)\n",
- "plt.xlabel('Wavelength (microns)')\n",
- "plt.ylabel('Splitting Ratio (%)')\n",
- "#plt.ylim(46.5,50)\n",
+ "plt.xlabel(\"Wavelength (microns)\")\n",
+ "plt.ylabel(\"Splitting Ratio (%)\")\n",
+ "# plt.ylim(46.5,50)\n",
"plt.show()"
]
},
@@ -2086,13 +2170,19 @@
}
],
"source": [
- "opt.update_design([mapping(x,eta_i,cur_beta)])\n",
+ "opt.update_design([mapping(x, eta_i, cur_beta)])\n",
"plt.figure()\n",
"ax = plt.gca()\n",
- "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- "circ = Circle((2,2),minimum_length/2)\n",
+ "opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ ")\n",
+ "circ = Circle((2, 2), minimum_length / 2)\n",
"ax.add_patch(circ)\n",
- "ax.axis('off')\n",
+ "ax.axis(\"off\")\n",
"plt.show()"
]
}
diff --git a/python/examples/adjoint_optimization/05-Near2Far.ipynb b/python/examples/adjoint_optimization/05-Near2Far.ipynb
index b1396e9b6..676d68bb5 100644
--- a/python/examples/adjoint_optimization/05-Near2Far.ipynb
+++ b/python/examples/adjoint_optimization/05-Near2Far.ipynb
@@ -32,6 +32,7 @@
"from matplotlib import pyplot as plt\n",
"from matplotlib.patches import Circle\n",
"from scipy import special, signal\n",
+ "\n",
"mp.verbosity(0)\n",
"Si = mp.Medium(index=3.4)\n",
"Air = mp.Medium(index=1.0)"
@@ -57,68 +58,87 @@
"\n",
"resolution = 30\n",
"\n",
- "Sx = 2*pml_size + design_region_width\n",
- "Sy = 2*pml_size + design_region_height + 5\n",
- "cell_size = mp.Vector3(Sx,Sy)\n",
+ "Sx = 2 * pml_size + design_region_width\n",
+ "Sy = 2 * pml_size + design_region_height + 5\n",
+ "cell_size = mp.Vector3(Sx, Sy)\n",
"\n",
"nf = 3\n",
- "frequencies = np.array([1/1.5, 1/1.55, 1/1.6])\n",
+ "frequencies = np.array([1 / 1.5, 1 / 1.55, 1 / 1.6])\n",
"\n",
- "minimum_length = 0.09 # minimum length scale (microns)\n",
- "eta_i = 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
- "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
- "eta_d = 1-eta_e # dilation design field thresholding point (between 0 and 1)\n",
- "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n",
+ "minimum_length = 0.09 # minimum length scale (microns)\n",
+ "eta_i = (\n",
+ " 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
+ ")\n",
+ "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
+ "eta_d = 1 - eta_e # dilation design field thresholding point (between 0 and 1)\n",
+ "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n",
"design_region_resolution = int(resolution)\n",
"\n",
"pml_layers = [mp.PML(pml_size)]\n",
"\n",
- "fcen = 1/1.55\n",
+ "fcen = 1 / 1.55\n",
"width = 0.2\n",
"fwidth = width * fcen\n",
- "source_center = [0,-(design_region_height/2 + 1.5),0]\n",
- "source_size = mp.Vector3(design_region_width,0,0)\n",
- "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n",
- "source = [mp.Source(src,\n",
- " component=mp.Ez,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "source_center = [0, -(design_region_height / 2 + 1.5), 0]\n",
+ "source_size = mp.Vector3(design_region_width, 0, 0)\n",
+ "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n",
+ "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n",
+ "\n",
+ "Nx = int(design_region_resolution * design_region_width)\n",
+ "Ny = int(design_region_resolution * design_region_height)\n",
"\n",
- "Nx = int(design_region_resolution*design_region_width)\n",
- "Ny = int(design_region_resolution*design_region_height)\n",
+ "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), Air, Si, grid_type=\"U_MEAN\")\n",
+ "design_region = mpa.DesignRegion(\n",
+ " design_variables,\n",
+ " volume=mp.Volume(\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(design_region_width, design_region_height, 0),\n",
+ " ),\n",
+ ")\n",
"\n",
- "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),Air,Si,grid_type='U_MEAN')\n",
- "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))\n",
"\n",
- "def mapping(x,eta,beta):\n",
+ "def mapping(x, eta, beta):\n",
"\n",
" # filter\n",
- " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n",
- " \n",
+ " filtered_field = mpa.conic_filter(\n",
+ " x,\n",
+ " filter_radius,\n",
+ " design_region_width,\n",
+ " design_region_height,\n",
+ " design_region_resolution,\n",
+ " )\n",
+ "\n",
" # projection\n",
- " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n",
- " \n",
- " projected_field = (npa.flipud(projected_field) + projected_field)/2 # left-right symmetry\n",
- " \n",
+ " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n",
+ "\n",
+ " projected_field = (\n",
+ " npa.flipud(projected_field) + projected_field\n",
+ " ) / 2 # left-right symmetry\n",
+ "\n",
" # interpolate to actual materials\n",
" return projected_field.flatten()\n",
"\n",
+ "\n",
"geometry = [\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables),\n",
- " #mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e1=mp.Vector3(x=-1))\n",
- " # \n",
+ " mp.Block(\n",
+ " center=design_region.center, size=design_region.size, material=design_variables\n",
+ " ),\n",
+ " # mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e1=mp.Vector3(x=-1))\n",
+ " #\n",
" # The commented lines above impose symmetry by overlapping design region with the same design variable. However,\n",
" # currently there is an issue of doing that; instead, we use an alternative approach to impose symmetry.\n",
" # See https://github.com/NanoComp/meep/issues/1984 and https://github.com/NanoComp/meep/issues/2093\n",
"]\n",
"kpoint = mp.Vector3()\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=Air,\n",
- " symmetries=[mp.Mirror(direction=mp.X)],\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=Air,\n",
+ " symmetries=[mp.Mirror(direction=mp.X)],\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -138,12 +158,20 @@
"metadata": {},
"outputs": [],
"source": [
- "far_x = [mp.Vector3(0,15,0)]\n",
- "NearRegions = [mp.Near2FarRegion(center=mp.Vector3(0,design_region_height/2+1.5), size=mp.Vector3(design_region_width,0), weight=+1)]\n",
- "FarFields = mpa.Near2FarFields(sim, NearRegions ,far_x)\n",
+ "far_x = [mp.Vector3(0, 15, 0)]\n",
+ "NearRegions = [\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(0, design_region_height / 2 + 1.5),\n",
+ " size=mp.Vector3(design_region_width, 0),\n",
+ " weight=+1,\n",
+ " )\n",
+ "]\n",
+ "FarFields = mpa.Near2FarFields(sim, NearRegions, far_x)\n",
"ob_list = [FarFields]\n",
+ "\n",
+ "\n",
"def J1(FF):\n",
- " return npa.mean(npa.abs(FF[0,:,2])**2)"
+ " return npa.mean(npa.abs(FF[0, :, 2]) ** 2)"
]
},
{
@@ -166,12 +194,12 @@
],
"source": [
"opt = mpa.OptimizationProblem(\n",
- " simulation = sim,\n",
- " objective_functions = [J1],\n",
- " objective_arguments = ob_list,\n",
- " design_regions = [design_region],\n",
+ " simulation=sim,\n",
+ " objective_functions=[J1],\n",
+ " objective_arguments=ob_list,\n",
+ " design_regions=[design_region],\n",
" frequencies=frequencies,\n",
- " maximum_run_time = 2000\n",
+ " maximum_run_time=2000,\n",
")\n",
"opt.plot2D(True)"
]
@@ -184,27 +212,36 @@
"source": [
"evaluation_history = []\n",
"cur_iter = [0]\n",
+ "\n",
+ "\n",
"def f(v, gradient, cur_beta):\n",
- " print(\"Current iteration: {}\".format(cur_iter[0]+1))\n",
- " \n",
- " f0, dJ_du = opt([mapping(v,eta_i,cur_beta)]) # compute objective and gradient\n",
- " \n",
+ " print(\"Current iteration: {}\".format(cur_iter[0] + 1))\n",
+ "\n",
+ " f0, dJ_du = opt([mapping(v, eta_i, cur_beta)]) # compute objective and gradient\n",
+ "\n",
" if gradient.size > 0:\n",
- " gradient[:] = tensor_jacobian_product(mapping,0)(v,eta_i,cur_beta,np.sum(dJ_du,axis=1)) # backprop\n",
- " \n",
- " \n",
+ " gradient[:] = tensor_jacobian_product(mapping, 0)(\n",
+ " v, eta_i, cur_beta, np.sum(dJ_du, axis=1)\n",
+ " ) # backprop\n",
+ "\n",
" evaluation_history.append(np.real(f0))\n",
- " \n",
+ "\n",
" plt.figure()\n",
" ax = plt.gca()\n",
- " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- " circ = Circle((2,2),minimum_length/2)\n",
+ " opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ " )\n",
+ " circ = Circle((2, 2), minimum_length / 2)\n",
" ax.add_patch(circ)\n",
- " ax.axis('off')\n",
+ " ax.axis(\"off\")\n",
" plt.show()\n",
- " \n",
+ "\n",
" cur_iter[0] = cur_iter[0] + 1\n",
- " \n",
+ "\n",
" return np.real(f0)"
]
},
@@ -1807,14 +1844,14 @@
],
"source": [
"algorithm = nlopt.LD_MMA\n",
- "n = Nx * Ny # number of parameters\n",
+ "n = Nx * Ny # number of parameters\n",
"\n",
"# Initial guess\n",
"x = np.ones((n,)) * 0.5\n",
"\n",
"# lower and upper bounds\n",
- "lb = np.zeros((Nx*Ny,))\n",
- "ub = np.ones((Nx*Ny,))\n",
+ "lb = np.zeros((Nx * Ny,))\n",
+ "ub = np.ones((Nx * Ny,))\n",
"\n",
"\n",
"cur_beta = 4\n",
@@ -1826,11 +1863,11 @@
" solver = nlopt.opt(algorithm, n)\n",
" solver.set_lower_bounds(lb)\n",
" solver.set_upper_bounds(ub)\n",
- " solver.set_max_objective(lambda a,g: f(a,g,cur_beta))\n",
+ " solver.set_max_objective(lambda a, g: f(a, g, cur_beta))\n",
" solver.set_maxeval(update_factor)\n",
" solver.set_ftol_rel(ftol)\n",
" x[:] = solver.optimize(x)\n",
- " cur_beta = cur_beta*beta_scale"
+ " cur_beta = cur_beta * beta_scale"
]
},
{
@@ -1854,14 +1891,12 @@
}
],
"source": [
- "\n",
- "\n",
"plt.figure()\n",
"\n",
- "plt.plot(evaluation_history,'o-')\n",
+ "plt.plot(evaluation_history, \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Iteration')\n",
- "plt.ylabel('FOM')\n",
+ "plt.xlabel(\"Iteration\")\n",
+ "plt.ylabel(\"FOM\")\n",
"plt.show()"
]
},
@@ -1891,13 +1926,19 @@
}
],
"source": [
- "opt.update_design([mapping(x,eta_i,cur_beta)])\n",
+ "opt.update_design([mapping(x, eta_i, cur_beta)])\n",
"plt.figure()\n",
"ax = plt.gca()\n",
- "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- "circ = Circle((2,2),minimum_length/2)\n",
+ "opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ ")\n",
+ "circ = Circle((2, 2), minimum_length / 2)\n",
"ax.add_patch(circ)\n",
- "ax.axis('off')\n",
+ "ax.axis(\"off\")\n",
"plt.show()"
]
},
@@ -1922,11 +1963,11 @@
}
],
"source": [
- "f0, dJ_du = opt([mapping(x,eta_i,cur_beta//2)],need_gradient = False)\n",
+ "f0, dJ_du = opt([mapping(x, eta_i, cur_beta // 2)], need_gradient=False)\n",
"frequencies = opt.frequencies\n",
"\n",
"\n",
- "intensities = np.abs(opt.get_objective_arguments()[0][0,:,2])**2"
+ "intensities = np.abs(opt.get_objective_arguments()[0][0, :, 2]) ** 2"
]
},
{
@@ -1948,13 +1989,11 @@
}
],
"source": [
- "\n",
- "\n",
"plt.figure()\n",
- "plt.plot(1/frequencies,intensities,'-o')\n",
+ "plt.plot(1 / frequencies, intensities, \"-o\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Wavelength (microns)')\n",
- "plt.ylabel('|Ez|^2 Intensities')\n",
+ "plt.xlabel(\"Wavelength (microns)\")\n",
+ "plt.ylabel(\"|Ez|^2 Intensities\")\n",
"plt.show()"
]
},
diff --git a/python/examples/adjoint_optimization/06-Near2Far-Epigraph.ipynb b/python/examples/adjoint_optimization/06-Near2Far-Epigraph.ipynb
index 3e552be49..f30f97f89 100644
--- a/python/examples/adjoint_optimization/06-Near2Far-Epigraph.ipynb
+++ b/python/examples/adjoint_optimization/06-Near2Far-Epigraph.ipynb
@@ -32,6 +32,7 @@
"from matplotlib import pyplot as plt\n",
"from matplotlib.patches import Circle\n",
"from scipy import special, signal\n",
+ "\n",
"mp.verbosity(0)\n",
"Si = mp.Medium(index=3.4)\n",
"Air = mp.Medium(index=1.0)"
@@ -57,68 +58,87 @@
"\n",
"resolution = 30\n",
"\n",
- "Sx = 2*pml_size + design_region_width\n",
- "Sy = 2*pml_size + design_region_height + 5\n",
- "cell_size = mp.Vector3(Sx,Sy)\n",
+ "Sx = 2 * pml_size + design_region_width\n",
+ "Sy = 2 * pml_size + design_region_height + 5\n",
+ "cell_size = mp.Vector3(Sx, Sy)\n",
"\n",
"nf = 3\n",
- "frequencies = np.array([1/1.5, 1/1.55, 1/1.6])\n",
+ "frequencies = np.array([1 / 1.5, 1 / 1.55, 1 / 1.6])\n",
"\n",
- "minimum_length = 0.09 # minimum length scale (microns)\n",
- "eta_i = 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
- "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
- "eta_d = 1-eta_e # dilation design field thresholding point (between 0 and 1)\n",
- "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n",
+ "minimum_length = 0.09 # minimum length scale (microns)\n",
+ "eta_i = (\n",
+ " 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
+ ")\n",
+ "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
+ "eta_d = 1 - eta_e # dilation design field thresholding point (between 0 and 1)\n",
+ "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n",
"design_region_resolution = int(resolution)\n",
"\n",
"pml_layers = [mp.PML(pml_size)]\n",
"\n",
- "fcen = 1/1.55\n",
+ "fcen = 1 / 1.55\n",
"width = 0.2\n",
"fwidth = width * fcen\n",
- "source_center = [0,-(design_region_height/2 + 1.5),0]\n",
- "source_size = mp.Vector3(design_region_width,0,0)\n",
- "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n",
- "source = [mp.Source(src,\n",
- " component=mp.Ez,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "source_center = [0, -(design_region_height / 2 + 1.5), 0]\n",
+ "source_size = mp.Vector3(design_region_width, 0, 0)\n",
+ "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n",
+ "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n",
+ "\n",
+ "Nx = int(design_region_resolution * design_region_width)\n",
+ "Ny = int(design_region_resolution * design_region_height)\n",
"\n",
- "Nx = int(design_region_resolution*design_region_width)\n",
- "Ny = int(design_region_resolution*design_region_height)\n",
+ "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), Air, Si, grid_type=\"U_MEAN\")\n",
+ "design_region = mpa.DesignRegion(\n",
+ " design_variables,\n",
+ " volume=mp.Volume(\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(design_region_width, design_region_height, 0),\n",
+ " ),\n",
+ ")\n",
"\n",
- "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),Air,Si,grid_type='U_MEAN')\n",
- "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))\n",
"\n",
- "def mapping(x,eta,beta):\n",
+ "def mapping(x, eta, beta):\n",
"\n",
" # filter\n",
- " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n",
- " \n",
+ " filtered_field = mpa.conic_filter(\n",
+ " x,\n",
+ " filter_radius,\n",
+ " design_region_width,\n",
+ " design_region_height,\n",
+ " design_region_resolution,\n",
+ " )\n",
+ "\n",
" # projection\n",
- " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n",
- " \n",
- " projected_field = (npa.flipud(projected_field) + projected_field)/2 # left-right symmetry\n",
- " \n",
+ " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n",
+ "\n",
+ " projected_field = (\n",
+ " npa.flipud(projected_field) + projected_field\n",
+ " ) / 2 # left-right symmetry\n",
+ "\n",
" # interpolate to actual materials\n",
" return projected_field.flatten()\n",
"\n",
+ "\n",
"geometry = [\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables),\n",
- " #mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e1=mp.Vector3(x=-1))\n",
- " # \n",
+ " mp.Block(\n",
+ " center=design_region.center, size=design_region.size, material=design_variables\n",
+ " ),\n",
+ " # mp.Block(center=design_region.center, size=design_region.size, material=design_variables, e1=mp.Vector3(x=-1))\n",
+ " #\n",
" # The commented lines above impose symmetry by overlapping design region with the same design variable. However,\n",
" # currently there is an issue of doing that; instead, we use an alternative approach to impose symmetry.\n",
" # See https://github.com/NanoComp/meep/issues/1984 and https://github.com/NanoComp/meep/issues/2093\n",
"]\n",
"kpoint = mp.Vector3()\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=Air,\n",
- " symmetries=[mp.Mirror(direction=mp.X)],\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=Air,\n",
+ " symmetries=[mp.Mirror(direction=mp.X)],\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -138,12 +158,20 @@
"metadata": {},
"outputs": [],
"source": [
- "far_x = [mp.Vector3(0,15,0)]\n",
- "NearRegions = [mp.Near2FarRegion(center=mp.Vector3(0,design_region_height/2+1.5), size=mp.Vector3(design_region_width,0), weight=+1)]\n",
- "FarFields = mpa.Near2FarFields(sim, NearRegions ,far_x)\n",
+ "far_x = [mp.Vector3(0, 15, 0)]\n",
+ "NearRegions = [\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(0, design_region_height / 2 + 1.5),\n",
+ " size=mp.Vector3(design_region_width, 0),\n",
+ " weight=+1,\n",
+ " )\n",
+ "]\n",
+ "FarFields = mpa.Near2FarFields(sim, NearRegions, far_x)\n",
"ob_list = [FarFields]\n",
+ "\n",
+ "\n",
"def J1(FF):\n",
- " return -npa.abs(FF[0,:,2])**2"
+ " return -npa.abs(FF[0, :, 2]) ** 2"
]
},
{
@@ -166,12 +194,12 @@
],
"source": [
"opt = mpa.OptimizationProblem(\n",
- " simulation = sim,\n",
- " objective_functions = [J1],\n",
- " objective_arguments = ob_list,\n",
- " design_regions = [design_region],\n",
+ " simulation=sim,\n",
+ " objective_functions=[J1],\n",
+ " objective_arguments=ob_list,\n",
+ " design_regions=[design_region],\n",
" frequencies=frequencies,\n",
- " maximum_run_time = 2000\n",
+ " maximum_run_time=2000,\n",
")\n",
"opt.plot2D(True)"
]
@@ -191,9 +219,11 @@
"source": [
"evaluation_history = []\n",
"cur_iter = [0]\n",
+ "\n",
+ "\n",
"def f(x, grad):\n",
- " t = x[0] # \"dummy\" parameter\n",
- " v = x[1:] # design parameters\n",
+ " t = x[0] # \"dummy\" parameter\n",
+ " v = x[1:] # design parameters\n",
" if grad.size > 0:\n",
" grad[0] = 1\n",
" grad[1:] = 0\n",
@@ -223,40 +253,50 @@
"metadata": {},
"outputs": [],
"source": [
- "def c(result,x,gradient,eta,beta):\n",
- " print(\"Current iteration: {}; current eta: {}, current beta: {}\".format(cur_iter[0],eta,beta))\n",
- " \n",
- " t = x[0] # dummy parameter\n",
- " v = x[1:] # design parameters\n",
+ "def c(result, x, gradient, eta, beta):\n",
+ " print(\n",
+ " \"Current iteration: {}; current eta: {}, current beta: {}\".format(\n",
+ " cur_iter[0], eta, beta\n",
+ " )\n",
+ " )\n",
+ "\n",
+ " t = x[0] # dummy parameter\n",
+ " v = x[1:] # design parameters\n",
"\n",
- " f0, dJ_du = opt([mapping(v,eta,beta)])\n",
+ " f0, dJ_du = opt([mapping(v, eta, beta)])\n",
"\n",
" # Backprop the gradients through our mapping function\n",
" my_grad = np.zeros(dJ_du.shape)\n",
- " for k in range(opt.nf): \n",
- " my_grad[:,k] = tensor_jacobian_product(mapping,0)(v,eta,beta,dJ_du[:,k]) \n",
- " #Note that we now backpropogate the gradients at individual frequencies\n",
+ " for k in range(opt.nf):\n",
+ " my_grad[:, k] = tensor_jacobian_product(mapping, 0)(v, eta, beta, dJ_du[:, k])\n",
+ " # Note that we now backpropogate the gradients at individual frequencies\n",
"\n",
" # Assign gradients\n",
" if gradient.size > 0:\n",
- " gradient[:,0] = -1 # gradient w.r.t. \"t\"\n",
- " gradient[:,1:] = my_grad.T # gradient w.r.t. each frequency objective\n",
- " \n",
+ " gradient[:, 0] = -1 # gradient w.r.t. \"t\"\n",
+ " gradient[:, 1:] = my_grad.T # gradient w.r.t. each frequency objective\n",
+ "\n",
" result[:] = np.real(f0) - t\n",
- " \n",
+ "\n",
" # store results\n",
" evaluation_history.append(np.real(f0))\n",
- " \n",
+ "\n",
" # visualize\n",
" plt.figure()\n",
" ax = plt.gca()\n",
- " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- " circ = Circle((2,2),minimum_length/2)\n",
+ " opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ " )\n",
+ " circ = Circle((2, 2), minimum_length / 2)\n",
" ax.add_patch(circ)\n",
- " ax.axis('off')\n",
+ " ax.axis(\"off\")\n",
" plt.show()\n",
- " \n",
- " cur_iter[0] = cur_iter[0] + 1\n"
+ "\n",
+ " cur_iter[0] = cur_iter[0] + 1"
]
},
{
@@ -1704,19 +1744,19 @@
],
"source": [
"algorithm = nlopt.LD_MMA\n",
- "n = Nx * Ny # number of parameters\n",
+ "n = Nx * Ny # number of parameters\n",
"\n",
"# Initial guess\n",
"x = np.ones((n,)) * 0.5\n",
"\n",
"# lower and upper bounds\n",
- "lb = np.zeros((Nx*Ny,))\n",
- "ub = np.ones((Nx*Ny,))\n",
+ "lb = np.zeros((Nx * Ny,))\n",
+ "ub = np.ones((Nx * Ny,))\n",
"\n",
"# insert dummy parameter bounds and variable\n",
- "x = np.insert(x,0,-1) # our initial guess for the worst error\n",
- "lb = np.insert(lb,0,-np.inf)\n",
- "ub = np.insert(ub,0,0)\n",
+ "x = np.insert(x, 0, -1) # our initial guess for the worst error\n",
+ "lb = np.insert(lb, 0, -np.inf)\n",
+ "ub = np.insert(ub, 0, 0)\n",
"\n",
"cur_beta = 4\n",
"beta_scale = 2\n",
@@ -1724,15 +1764,17 @@
"update_factor = 12\n",
"ftol = 1e-5\n",
"for iters in range(num_betas):\n",
- " solver = nlopt.opt(algorithm, n+1)\n",
+ " solver = nlopt.opt(algorithm, n + 1)\n",
" solver.set_lower_bounds(lb)\n",
" solver.set_upper_bounds(ub)\n",
" solver.set_min_objective(f)\n",
" solver.set_maxeval(update_factor)\n",
" solver.set_ftol_rel(ftol)\n",
- " solver.add_inequality_mconstraint(lambda r,x,g: c(r,x,g,eta_i,cur_beta), np.array([1e-3]*nf))\n",
+ " solver.add_inequality_mconstraint(\n",
+ " lambda r, x, g: c(r, x, g, eta_i, cur_beta), np.array([1e-3] * nf)\n",
+ " )\n",
" x[:] = solver.optimize(x)\n",
- " cur_beta = cur_beta*beta_scale"
+ " cur_beta = cur_beta * beta_scale"
]
},
{
@@ -1756,18 +1798,18 @@
}
],
"source": [
- "lb = -np.min(evaluation_history,axis=1)\n",
- "ub = -np.max(evaluation_history,axis=1)\n",
- "mean = -np.mean(evaluation_history,axis=1)\n",
+ "lb = -np.min(evaluation_history, axis=1)\n",
+ "ub = -np.max(evaluation_history, axis=1)\n",
+ "mean = -np.mean(evaluation_history, axis=1)\n",
"\n",
"num_iters = lb.size\n",
"\n",
"plt.figure()\n",
- "plt.fill_between(np.arange(num_iters),ub,lb,alpha=0.3)\n",
- "plt.plot(mean,'o-')\n",
+ "plt.fill_between(np.arange(num_iters), ub, lb, alpha=0.3)\n",
+ "plt.plot(mean, \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Iteration')\n",
- "plt.ylabel('FOM')\n",
+ "plt.xlabel(\"Iteration\")\n",
+ "plt.ylabel(\"FOM\")\n",
"plt.show()"
]
},
@@ -1797,13 +1839,19 @@
}
],
"source": [
- "opt.update_design([mapping(x[1:],eta_i,cur_beta)])\n",
+ "opt.update_design([mapping(x[1:], eta_i, cur_beta)])\n",
"plt.figure()\n",
"ax = plt.gca()\n",
- "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- "circ = Circle((2,2),minimum_length/2)\n",
+ "opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ ")\n",
+ "circ = Circle((2, 2), minimum_length / 2)\n",
"ax.add_patch(circ)\n",
- "ax.axis('off')\n",
+ "ax.axis(\"off\")\n",
"plt.show()"
]
},
@@ -1828,7 +1876,7 @@
}
],
"source": [
- "f0, dJ_du = opt([mapping(x[1:],eta_i,cur_beta//2)],need_gradient = False)\n",
+ "f0, dJ_du = opt([mapping(x[1:], eta_i, cur_beta // 2)], need_gradient=False)\n",
"frequencies = opt.frequencies"
]
},
@@ -1851,14 +1899,13 @@
}
],
"source": [
- "\n",
- "intensities = np.abs(opt.get_objective_arguments()[0][0,:,2])**2\n",
+ "intensities = np.abs(opt.get_objective_arguments()[0][0, :, 2]) ** 2\n",
"\n",
"plt.figure()\n",
- "plt.plot(1/frequencies,intensities,'-o')\n",
+ "plt.plot(1 / frequencies, intensities, \"-o\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Wavelength (microns)')\n",
- "plt.ylabel('|Ez|^2 Intensities')\n",
+ "plt.xlabel(\"Wavelength (microns)\")\n",
+ "plt.ylabel(\"|Ez|^2 Intensities\")\n",
"plt.show()"
]
},
@@ -1898,21 +1945,21 @@
}
],
"source": [
- "opt.sim = mp.Simulation(cell_size=mp.Vector3(Sx,40),\n",
- " boundary_layers=pml_layers,\n",
- " k_point=kpoint,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=Air,\n",
- " resolution=resolution)\n",
- "src = mp.ContinuousSource(frequency=1/1.5,fwidth=fwidth)\n",
- "source = [mp.Source(src, component = mp.Ez,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "opt.sim = mp.Simulation(\n",
+ " cell_size=mp.Vector3(Sx, 40),\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=kpoint,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=Air,\n",
+ " resolution=resolution,\n",
+ ")\n",
+ "src = mp.ContinuousSource(frequency=1 / 1.5, fwidth=fwidth)\n",
+ "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n",
"opt.sim.change_sources(source)\n",
"\n",
"opt.sim.run(until=200)\n",
- "plt.figure(figsize=(10,20))\n",
+ "plt.figure(figsize=(10, 20))\n",
"opt.sim.plot2D(fields=mp.Ez)"
]
},
@@ -1945,21 +1992,21 @@
}
],
"source": [
- "opt.sim = mp.Simulation(cell_size=mp.Vector3(Sx,40),\n",
- " boundary_layers=pml_layers,\n",
- " k_point=kpoint,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=Air,\n",
- " resolution=resolution)\n",
- "src = mp.ContinuousSource(frequency=1/1.55,fwidth=fwidth)\n",
- "source = [mp.Source(src, component = mp.Ez,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "opt.sim = mp.Simulation(\n",
+ " cell_size=mp.Vector3(Sx, 40),\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=kpoint,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=Air,\n",
+ " resolution=resolution,\n",
+ ")\n",
+ "src = mp.ContinuousSource(frequency=1 / 1.55, fwidth=fwidth)\n",
+ "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n",
"opt.sim.change_sources(source)\n",
"\n",
"opt.sim.run(until=200)\n",
- "plt.figure(figsize=(10,20))\n",
+ "plt.figure(figsize=(10, 20))\n",
"opt.sim.plot2D(fields=mp.Ez)"
]
},
@@ -1992,21 +2039,21 @@
}
],
"source": [
- "opt.sim = mp.Simulation(cell_size=mp.Vector3(Sx,40),\n",
- " boundary_layers=pml_layers,\n",
- " k_point=kpoint,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=Air,\n",
- " resolution=resolution)\n",
- "src = mp.ContinuousSource(frequency=1/1.6,fwidth=fwidth)\n",
- "source = [mp.Source(src, component = mp.Ez,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "opt.sim = mp.Simulation(\n",
+ " cell_size=mp.Vector3(Sx, 40),\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=kpoint,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=Air,\n",
+ " resolution=resolution,\n",
+ ")\n",
+ "src = mp.ContinuousSource(frequency=1 / 1.6, fwidth=fwidth)\n",
+ "source = [mp.Source(src, component=mp.Ez, size=source_size, center=source_center)]\n",
"opt.sim.change_sources(source)\n",
"\n",
"opt.sim.run(until=200)\n",
- "plt.figure(figsize=(10,20))\n",
+ "plt.figure(figsize=(10, 20))\n",
"opt.sim.plot2D(fields=mp.Ez)"
]
},
diff --git a/python/examples/adjoint_optimization/Bend Minimax.ipynb b/python/examples/adjoint_optimization/Bend Minimax.ipynb
index 1253d83df..ea883612e 100644
--- a/python/examples/adjoint_optimization/Bend Minimax.ipynb
+++ b/python/examples/adjoint_optimization/Bend Minimax.ipynb
@@ -38,6 +38,7 @@
"from matplotlib import pyplot as plt\n",
"from matplotlib.patches import Circle\n",
"from scipy import special, signal\n",
+ "\n",
"mp.verbosity(0)\n",
"Si = mp.Medium(index=3.4)\n",
"SiO2 = mp.Medium(index=1.44)"
@@ -75,89 +76,121 @@
"resolution = 20\n",
"\n",
"nf = 10\n",
- "frequencies = 1/np.linspace(1.5,1.6,nf)\n",
+ "frequencies = 1 / np.linspace(1.5, 1.6, nf)\n",
"\n",
- "minimum_length = 0.09 # minimum length scale (microns)\n",
- "eta_i = 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
- "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
- "eta_d = 1-eta_e # dilation design field thresholding point (between 0 and 1)\n",
- "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n",
+ "minimum_length = 0.09 # minimum length scale (microns)\n",
+ "eta_i = (\n",
+ " 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
+ ")\n",
+ "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
+ "eta_d = 1 - eta_e # dilation design field thresholding point (between 0 and 1)\n",
+ "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n",
"print(filter_radius)\n",
- "design_region_resolution = int(1*resolution)\n",
+ "design_region_resolution = int(1 * resolution)\n",
"\n",
- "Sx = 2*pml_size + 2*waveguide_length + design_region_width\n",
- "Sy = 2*pml_size + design_region_height + 0.5\n",
- "cell_size = mp.Vector3(Sx,Sy)\n",
+ "Sx = 2 * pml_size + 2 * waveguide_length + design_region_width\n",
+ "Sy = 2 * pml_size + design_region_height + 0.5\n",
+ "cell_size = mp.Vector3(Sx, Sy)\n",
"\n",
"pml_layers = [mp.PML(pml_size)]\n",
"\n",
- "fcen = 1/1.55\n",
+ "fcen = 1 / 1.55\n",
"width = 0.2\n",
"fwidth = width * fcen\n",
- "source_center = [-Sx/2 + pml_size + waveguide_length/3,0,0]\n",
- "source_size = mp.Vector3(0,Sy,0)\n",
- "kpoint = mp.Vector3(1,0,0)\n",
- "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n",
- "source = [mp.EigenModeSource(src,\n",
- " eig_band = 1,\n",
- " direction=mp.NO_DIRECTION,\n",
- " eig_kpoint=kpoint,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "source_center = [-Sx / 2 + pml_size + waveguide_length / 3, 0, 0]\n",
+ "source_size = mp.Vector3(0, Sy, 0)\n",
+ "kpoint = mp.Vector3(1, 0, 0)\n",
+ "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n",
+ "source = [\n",
+ " mp.EigenModeSource(\n",
+ " src,\n",
+ " eig_band=1,\n",
+ " direction=mp.NO_DIRECTION,\n",
+ " eig_kpoint=kpoint,\n",
+ " size=source_size,\n",
+ " center=source_center,\n",
+ " )\n",
+ "]\n",
"\n",
- "Nx = int(design_region_resolution*design_region_width)\n",
- "Ny = int(design_region_resolution*design_region_height)\n",
+ "Nx = int(design_region_resolution * design_region_width)\n",
+ "Ny = int(design_region_resolution * design_region_height)\n",
"\n",
- "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si,grid_type='U_MEAN')\n",
- "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))\n",
+ "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si, grid_type=\"U_MEAN\")\n",
+ "design_region = mpa.DesignRegion(\n",
+ " design_variables,\n",
+ " volume=mp.Volume(\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(design_region_width, design_region_height, 0),\n",
+ " ),\n",
+ ")\n",
"\n",
- "x_g = np.linspace(-design_region_width/2,design_region_width/2,Nx)\n",
- "y_g = np.linspace(-design_region_height/2,design_region_height/2,Ny)\n",
- "X_g, Y_g = np.meshgrid(x_g,y_g,sparse=True,indexing='ij')\n",
+ "x_g = np.linspace(-design_region_width / 2, design_region_width / 2, Nx)\n",
+ "y_g = np.linspace(-design_region_height / 2, design_region_height / 2, Ny)\n",
+ "X_g, Y_g = np.meshgrid(x_g, y_g, sparse=True, indexing=\"ij\")\n",
"\n",
- "left_wg_mask = (X_g == -design_region_width/2) & (np.abs(Y_g) <= waveguide_width/2)\n",
- "top_wg_mask = (Y_g == design_region_width/2) & (np.abs(X_g) <= waveguide_width/2)\n",
+ "left_wg_mask = (X_g == -design_region_width / 2) & (np.abs(Y_g) <= waveguide_width / 2)\n",
+ "top_wg_mask = (Y_g == design_region_width / 2) & (np.abs(X_g) <= waveguide_width / 2)\n",
"Si_mask = left_wg_mask | top_wg_mask\n",
"\n",
- "border_mask = ((X_g == -design_region_width/2) | \n",
- " (X_g == design_region_width/2) | \n",
- " (Y_g == -design_region_height/2) | \n",
- " (Y_g == design_region_height/2))\n",
+ "border_mask = (\n",
+ " (X_g == -design_region_width / 2)\n",
+ " | (X_g == design_region_width / 2)\n",
+ " | (Y_g == -design_region_height / 2)\n",
+ " | (Y_g == design_region_height / 2)\n",
+ ")\n",
"SiO2_mask = border_mask.copy()\n",
"SiO2_mask[Si_mask] = False\n",
"\n",
- "def mapping(x,eta,beta):\n",
- " x = npa.where(Si_mask.flatten(),1,npa.where(SiO2_mask.flatten(),0,x))\n",
- " \n",
+ "\n",
+ "def mapping(x, eta, beta):\n",
+ " x = npa.where(Si_mask.flatten(), 1, npa.where(SiO2_mask.flatten(), 0, x))\n",
+ "\n",
" # filter\n",
- " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n",
- " \n",
+ " filtered_field = mpa.conic_filter(\n",
+ " x,\n",
+ " filter_radius,\n",
+ " design_region_width,\n",
+ " design_region_height,\n",
+ " design_region_resolution,\n",
+ " )\n",
+ "\n",
" # projection\n",
- " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n",
- " \n",
- " projected_field = (npa.rot90(projected_field.T, 2) + projected_field)/2 # 90-degree symmetry\n",
- " \n",
+ " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n",
+ "\n",
+ " projected_field = (\n",
+ " npa.rot90(projected_field.T, 2) + projected_field\n",
+ " ) / 2 # 90-degree symmetry\n",
+ "\n",
" # interpolate to actual materials\n",
" return projected_field.flatten()\n",
"\n",
+ "\n",
"geometry = [\n",
- " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2, 0.5, 0)), # horizontal waveguide\n",
- " mp.Block(center=mp.Vector3(y=Sy/4), material=Si, size=mp.Vector3(0.5, Sy/2, 0)), # vertical waveguide\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables), # design region\n",
- " #mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(x=-Sx / 4), material=Si, size=mp.Vector3(Sx / 2, 0.5, 0)\n",
+ " ), # horizontal waveguide\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(y=Sy / 4), material=Si, size=mp.Vector3(0.5, Sy / 2, 0)\n",
+ " ), # vertical waveguide\n",
+ " mp.Block(\n",
+ " center=design_region.center, size=design_region.size, material=design_variables\n",
+ " ), # design region\n",
+ " # mp.Block(center=design_region.center, size=design_region.size, material=design_variables,\n",
" # e1=mp.Vector3(x=-1).rotate(mp.Vector3(z=1), np.pi/2), e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), np.pi/2))\n",
- " # \n",
+ " #\n",
" # The commented lines above impose symmetry by overlapping design region with the same design variable. However,\n",
" # currently there is an issue of doing that; instead, we use an alternative approach to impose symmetry.\n",
" # See https://github.com/NanoComp/meep/issues/1984 and https://github.com/NanoComp/meep/issues/2093\n",
"]\n",
"\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=SiO2,\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=SiO2,\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -175,13 +208,28 @@
"source": [
"mode = 1\n",
"\n",
- "TE0 = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(x=-Sx/2 + pml_size + 2*waveguide_length/3),size=mp.Vector3(y=Sy)),mode)\n",
- "TE_top = mpa.EigenmodeCoefficient(sim,mp.Volume(center=mp.Vector3(0,Sx/2 - pml_size - 2*waveguide_length/3,0),size=mp.Vector3(x=Sx)),mode)\n",
- "ob_list = [TE0,TE_top]\n",
+ "TE0 = mpa.EigenmodeCoefficient(\n",
+ " sim,\n",
+ " mp.Volume(\n",
+ " center=mp.Vector3(x=-Sx / 2 + pml_size + 2 * waveguide_length / 3),\n",
+ " size=mp.Vector3(y=Sy),\n",
+ " ),\n",
+ " mode,\n",
+ ")\n",
+ "TE_top = mpa.EigenmodeCoefficient(\n",
+ " sim,\n",
+ " mp.Volume(\n",
+ " center=mp.Vector3(0, Sx / 2 - pml_size - 2 * waveguide_length / 3, 0),\n",
+ " size=mp.Vector3(x=Sx),\n",
+ " ),\n",
+ " mode,\n",
+ ")\n",
+ "ob_list = [TE0, TE_top]\n",
"\n",
- "def J(source,top):\n",
- " power = npa.abs(top/source)**2\n",
- " return 1-power"
+ "\n",
+ "def J(source, top):\n",
+ " power = npa.abs(top / source) ** 2\n",
+ " return 1 - power"
]
},
{
@@ -191,10 +239,10 @@
"outputs": [],
"source": [
"opt = mpa.OptimizationProblem(\n",
- " simulation = sim,\n",
- " objective_functions = J,\n",
- " objective_arguments = ob_list,\n",
- " design_regions = [design_region],\n",
+ " simulation=sim,\n",
+ " objective_functions=J,\n",
+ " objective_arguments=ob_list,\n",
+ " design_regions=[design_region],\n",
" frequencies=frequencies,\n",
")"
]
@@ -214,9 +262,11 @@
"source": [
"evaluation_history = []\n",
"cur_iter = [0]\n",
+ "\n",
+ "\n",
"def f(x, grad):\n",
- " t = x[0] # \"dummy\" parameter\n",
- " v = x[1:] # design parameters\n",
+ " t = x[0] # \"dummy\" parameter\n",
+ " v = x[1:] # design parameters\n",
" if grad.size > 0:\n",
" grad[0] = 1\n",
" grad[1:] = 0\n",
@@ -246,38 +296,48 @@
"metadata": {},
"outputs": [],
"source": [
- "def c(result,x,gradient,eta,beta):\n",
- " print(\"Current iteration: {}; current eta: {}, current beta: {}\".format(cur_iter[0],eta,beta))\n",
- " \n",
- " t = x[0] # dummy parameter\n",
- " v = x[1:] # design parameters\n",
+ "def c(result, x, gradient, eta, beta):\n",
+ " print(\n",
+ " \"Current iteration: {}; current eta: {}, current beta: {}\".format(\n",
+ " cur_iter[0], eta, beta\n",
+ " )\n",
+ " )\n",
+ "\n",
+ " t = x[0] # dummy parameter\n",
+ " v = x[1:] # design parameters\n",
+ "\n",
+ " f0, dJ_du = opt([mapping(v, eta, beta)])\n",
"\n",
- " f0, dJ_du = opt([mapping(v,eta,beta)])\n",
- " \n",
" # Backprop the gradients through our mapping function\n",
" my_grad = np.zeros(dJ_du.shape)\n",
- " for k in range(opt.nf): \n",
- " my_grad[:,k] = tensor_jacobian_product(mapping,0)(v,eta,beta,dJ_du[:,k])\n",
+ " for k in range(opt.nf):\n",
+ " my_grad[:, k] = tensor_jacobian_product(mapping, 0)(v, eta, beta, dJ_du[:, k])\n",
"\n",
" # Assign gradients\n",
" if gradient.size > 0:\n",
- " gradient[:,0] = -1 # gradient w.r.t. \"t\"\n",
- " gradient[:,1:] = my_grad.T # gradient w.r.t. each frequency objective\n",
- " \n",
+ " gradient[:, 0] = -1 # gradient w.r.t. \"t\"\n",
+ " gradient[:, 1:] = my_grad.T # gradient w.r.t. each frequency objective\n",
+ "\n",
" result[:] = np.real(f0) - t\n",
- " \n",
+ "\n",
" # store results\n",
" evaluation_history.append(np.real(f0))\n",
- " \n",
+ "\n",
" # visualize\n",
" plt.figure()\n",
" ax = plt.gca()\n",
- " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- " circ = Circle((2,2),minimum_length/2)\n",
+ " opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ " )\n",
+ " circ = Circle((2, 2), minimum_length / 2)\n",
" ax.add_patch(circ)\n",
- " ax.axis('off')\n",
+ " ax.axis(\"off\")\n",
" plt.show()\n",
- " \n",
+ "\n",
" cur_iter[0] = cur_iter[0] + 1"
]
},
@@ -1880,37 +1940,39 @@
],
"source": [
"algorithm = nlopt.LD_MMA\n",
- "n = Nx * Ny # number of parameters\n",
+ "n = Nx * Ny # number of parameters\n",
"\n",
"# Initial guess\n",
"x = np.ones((n,)) * 0.5\n",
- "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n",
- "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n",
+ "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n",
+ "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n",
"\n",
"# lower and upper bounds\n",
- "lb = np.zeros((Nx*Ny,))\n",
+ "lb = np.zeros((Nx * Ny,))\n",
"lb[Si_mask.flatten()] = 1\n",
- "ub = np.ones((Nx*Ny,))\n",
+ "ub = np.ones((Nx * Ny,))\n",
"ub[SiO2_mask.flatten()] = 0\n",
"\n",
"# insert dummy parameter bounds and variable\n",
- "x = np.insert(x,0,0.5) # our initial guess for the worst error\n",
- "lb = np.insert(lb,0,0) # we can't get less than 0 error!\n",
- "ub = np.insert(ub,0,1) # we can't get more than 1 error!\n",
+ "x = np.insert(x, 0, 0.5) # our initial guess for the worst error\n",
+ "lb = np.insert(lb, 0, 0) # we can't get less than 0 error!\n",
+ "ub = np.insert(ub, 0, 1) # we can't get more than 1 error!\n",
"\n",
"cur_beta = 4\n",
"beta_scale = 2\n",
"num_betas = 6\n",
"update_factor = 12\n",
"for iters in range(num_betas):\n",
- " solver = nlopt.opt(algorithm, n+1)\n",
+ " solver = nlopt.opt(algorithm, n + 1)\n",
" solver.set_lower_bounds(lb)\n",
" solver.set_upper_bounds(ub)\n",
" solver.set_min_objective(f)\n",
" solver.set_maxeval(update_factor)\n",
- " solver.add_inequality_mconstraint(lambda r,x,g: c(r,x,g,eta_i,cur_beta), np.array([1e-6]*nf))\n",
+ " solver.add_inequality_mconstraint(\n",
+ " lambda r, x, g: c(r, x, g, eta_i, cur_beta), np.array([1e-6] * nf)\n",
+ " )\n",
" x[:] = solver.optimize(x)\n",
- " cur_beta = cur_beta*beta_scale"
+ " cur_beta = cur_beta * beta_scale"
]
},
{
@@ -1941,18 +2003,20 @@
}
],
"source": [
- "lb = 1-np.min(evaluation_history,axis=1)\n",
- "ub = 1-np.max(evaluation_history,axis=1)\n",
- "mean = 1-np.mean(evaluation_history,axis=1)\n",
+ "lb = 1 - np.min(evaluation_history, axis=1)\n",
+ "ub = 1 - np.max(evaluation_history, axis=1)\n",
+ "mean = 1 - np.mean(evaluation_history, axis=1)\n",
"\n",
"num_iters = lb.size\n",
"\n",
"plt.figure()\n",
- "plt.fill_between(np.arange(1,num_iters+1),10*np.log10(lb),10*np.log10(ub),alpha=0.3)\n",
- "plt.plot(10*np.log10(mean),'o-')\n",
+ "plt.fill_between(\n",
+ " np.arange(1, num_iters + 1), 10 * np.log10(lb), 10 * np.log10(ub), alpha=0.3\n",
+ ")\n",
+ "plt.plot(10 * np.log10(mean), \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Iteration')\n",
- "plt.ylabel('Average Insertion Loss (dB)')\n",
+ "plt.xlabel(\"Iteration\")\n",
+ "plt.ylabel(\"Average Insertion Loss (dB)\")\n",
"plt.show()"
]
},
@@ -1982,13 +2046,19 @@
}
],
"source": [
- "opt.update_design([mapping(x[1:],eta_i,cur_beta)])\n",
+ "opt.update_design([mapping(x[1:], eta_i, cur_beta)])\n",
"plt.figure()\n",
"ax = plt.gca()\n",
- "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- "circ = Circle((2,2),minimum_length/2)\n",
+ "opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ ")\n",
+ "circ = Circle((2, 2), minimum_length / 2)\n",
"ax.add_patch(circ)\n",
- "ax.axis('off')\n",
+ "ax.axis(\"off\")\n",
"plt.show()"
]
},
@@ -2013,11 +2083,11 @@
}
],
"source": [
- "f0, dJ_du = opt([mapping(x[1:],eta_i,cur_beta//2)],need_gradient = False)\n",
+ "f0, dJ_du = opt([mapping(x[1:], eta_i, cur_beta // 2)], need_gradient=False)\n",
"frequencies = opt.frequencies\n",
"source_coef, top_coef = opt.get_objective_arguments()\n",
"\n",
- "top_profile = np.abs(top_coef/source_coef) ** 2"
+ "top_profile = np.abs(top_coef / source_coef) ** 2"
]
},
{
@@ -2052,19 +2122,19 @@
],
"source": [
"plt.figure()\n",
- "plt.plot(1/frequencies,top_profile*100,'-o')\n",
+ "plt.plot(1 / frequencies, top_profile * 100, \"-o\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Wavelength (microns)')\n",
- "plt.ylabel('Transmission (%)')\n",
- "#plt.ylim(70,100)\n",
+ "plt.xlabel(\"Wavelength (microns)\")\n",
+ "plt.ylabel(\"Transmission (%)\")\n",
+ "# plt.ylim(70,100)\n",
"plt.show()\n",
"\n",
"plt.figure()\n",
- "plt.plot(1/frequencies,10*np.log10(top_profile),'-o')\n",
+ "plt.plot(1 / frequencies, 10 * np.log10(top_profile), \"-o\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Wavelength (microns)')\n",
- "plt.ylabel('Insertion Loss (dB)')\n",
- "#plt.ylim(-0.1,0)\n",
+ "plt.xlabel(\"Wavelength (microns)\")\n",
+ "plt.ylabel(\"Insertion Loss (dB)\")\n",
+ "# plt.ylim(-0.1,0)\n",
"plt.show()"
]
},
diff --git a/python/examples/adjoint_optimization/ConnectivityConstraint.ipynb b/python/examples/adjoint_optimization/ConnectivityConstraint.ipynb
index 56279b124..9978da26d 100644
--- a/python/examples/adjoint_optimization/ConnectivityConstraint.ipynb
+++ b/python/examples/adjoint_optimization/ConnectivityConstraint.ipynb
@@ -69,25 +69,25 @@
}
],
"source": [
- "nz, ny, nx =25, 1, 25\n",
- "c = mpa.ConnectivityConstraint(nx, ny, nz,sp_solver=cg)\n",
+ "nz, ny, nx = 25, 1, 25\n",
+ "c = mpa.ConnectivityConstraint(nx, ny, nz, sp_solver=cg)\n",
"\n",
- "r = np.zeros((nz, ny,nx))+0.0001\n",
- "r[:10,0, 8]=0.999\n",
- "r[7,0,5:20]=0.999\n",
- "r[5:,0, 18]=0.999\n",
- "r[7,0,11:16]=0.0001\n",
- "r[17:18,0,9:10]=0.999\n",
+ "r = np.zeros((nz, ny, nx)) + 0.0001\n",
+ "r[:10, 0, 8] = 0.999\n",
+ "r[7, 0, 5:20] = 0.999\n",
+ "r[5:, 0, 18] = 0.999\n",
+ "r[7, 0, 11:16] = 0.0001\n",
+ "r[17:18, 0, 9:10] = 0.999\n",
"\n",
- "r=r.flatten()#flatten the structure before pass in\n",
+ "r = r.flatten() # flatten the structure before pass in\n",
"f = c.forward(r)\n",
"ag = c.calculate_grad()\n",
"\n",
- "print(\"foward value\", f) \n",
+ "print(\"foward value\", f)\n",
"\n",
"plt.figure()\n",
"plt.pcolormesh(r.reshape((nz, nx)))\n",
- "plt.show()\n"
+ "plt.show()"
]
},
{
@@ -116,10 +116,12 @@
}
],
"source": [
- "#padding to show the side with Dirichlet BC\n",
- "fullT = np.pad(c.T, (0, c.nx*c.ny), 'constant', constant_values=1).reshape((nz, ny, nx)) \n",
+ "# padding to show the side with Dirichlet BC\n",
+ "fullT = np.pad(c.T, (0, c.nx * c.ny), \"constant\", constant_values=1).reshape(\n",
+ " (nz, ny, nx)\n",
+ ")\n",
"plt.figure()\n",
- "plt.contourf(fullT[:,0,:], 100, cmap=\"RdBu\")\n",
+ "plt.contourf(fullT[:, 0, :], 100, cmap=\"RdBu\")\n",
"plt.colorbar()\n",
"plt.show()"
]
@@ -213,29 +215,31 @@
}
],
"source": [
- "r = np.zeros((nz, ny,nx))+0.0001\n",
- "r[:10,0, 8]=0.999\n",
- "r[7,0,5:20]=0.999\n",
- "r[5:,0, 18]=0.999\n",
+ "r = np.zeros((nz, ny, nx)) + 0.0001\n",
+ "r[:10, 0, 8] = 0.999\n",
+ "r[7, 0, 5:20] = 0.999\n",
+ "r[5:, 0, 18] = 0.999\n",
"\n",
- "r=r.flatten()#flatten the structure before pass in\n",
+ "r = r.flatten() # flatten the structure before pass in\n",
"f = c.forward(r)\n",
"ag = c.calculate_grad()\n",
"\n",
- "print(\"foward value\", f) \n",
+ "print(\"foward value\", f)\n",
"\n",
"plt.figure()\n",
"plt.pcolormesh(r.reshape((nz, nx)))\n",
"plt.show()\n",
"\n",
- "fullT = np.pad(c.T, (0, c.nx*c.ny), 'constant', constant_values=1).reshape((nz, ny, nx)) \n",
+ "fullT = np.pad(c.T, (0, c.nx * c.ny), \"constant\", constant_values=1).reshape(\n",
+ " (nz, ny, nx)\n",
+ ")\n",
"plt.figure()\n",
- "plt.contourf(fullT[:,0,:], 100,cmap=\"RdBu\")\n",
+ "plt.contourf(fullT[:, 0, :], 100, cmap=\"RdBu\")\n",
"plt.colorbar()\n",
"plt.show()\n",
"\n",
"plt.figure()\n",
- "plt.contourf(ag.reshape((nz, nx)), 100,cmap=\"RdBu\")\n",
+ "plt.contourf(ag.reshape((nz, nx)), 100, cmap=\"RdBu\")\n",
"plt.colorbar()\n",
"plt.show()"
]
diff --git a/python/examples/adjoint_optimization/Fourier-Bend.ipynb b/python/examples/adjoint_optimization/Fourier-Bend.ipynb
index c1b1cc45d..d0ec785b0 100644
--- a/python/examples/adjoint_optimization/Fourier-Bend.ipynb
+++ b/python/examples/adjoint_optimization/Fourier-Bend.ipynb
@@ -25,6 +25,7 @@
"from matplotlib import pyplot as plt\n",
"from matplotlib.patches import Circle\n",
"from scipy import special, signal\n",
+ "\n",
"mp.quiet(quietval=True)\n",
"Si = mp.Medium(index=3.4)\n",
"SiO2 = mp.Medium(index=1.44)"
@@ -53,7 +54,7 @@
"\n",
"resolution = 40\n",
"\n",
- "frequencies = 1/np.linspace(1.5,1.6,3)"
+ "frequencies = 1 / np.linspace(1.5, 1.6, 3)"
]
},
{
@@ -70,13 +71,15 @@
}
],
"source": [
- "minimum_length = 0.09 # minimum length scale (microns)\n",
- "eta_i = 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
- "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
- "eta_d = 1-eta_e # dilation design field thresholding point (between 0 and 1)\n",
- "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length,eta_e)\n",
+ "minimum_length = 0.09 # minimum length scale (microns)\n",
+ "eta_i = (\n",
+ " 0.5 # blueprint (or intermediate) design field thresholding point (between 0 and 1)\n",
+ ")\n",
+ "eta_e = 0.55 # erosion design field thresholding point (between 0 and 1)\n",
+ "eta_d = 1 - eta_e # dilation design field thresholding point (between 0 and 1)\n",
+ "filter_radius = mpa.get_conic_radius_from_eta_e(minimum_length, eta_e)\n",
"print(filter_radius)\n",
- "design_region_resolution = int(1*resolution)"
+ "design_region_resolution = int(1 * resolution)"
]
},
{
@@ -85,25 +88,29 @@
"metadata": {},
"outputs": [],
"source": [
- "Sx = 2*pml_size + 2*waveguide_length + design_region_width + 2\n",
- "Sy = 2*pml_size + design_region_height + 2\n",
- "cell_size = mp.Vector3(Sx,Sy)\n",
+ "Sx = 2 * pml_size + 2 * waveguide_length + design_region_width + 2\n",
+ "Sy = 2 * pml_size + design_region_height + 2\n",
+ "cell_size = mp.Vector3(Sx, Sy)\n",
"\n",
"pml_layers = [mp.PML(pml_size)]\n",
"\n",
- "fcen = 1/1.55\n",
+ "fcen = 1 / 1.55\n",
"width = 0.2\n",
"fwidth = width * fcen\n",
- "source_center = [-Sx/2 + pml_size + waveguide_length/3,0,0]\n",
- "source_size = mp.Vector3(0,Sy,0)\n",
- "kpoint = mp.Vector3(1,0,0)\n",
- "src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)\n",
- "source = [mp.EigenModeSource(src,\n",
- " eig_band = 1,\n",
- " direction=mp.NO_DIRECTION,\n",
- " eig_kpoint=kpoint,\n",
- " size = source_size,\n",
- " center=source_center)]"
+ "source_center = [-Sx / 2 + pml_size + waveguide_length / 3, 0, 0]\n",
+ "source_size = mp.Vector3(0, Sy, 0)\n",
+ "kpoint = mp.Vector3(1, 0, 0)\n",
+ "src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)\n",
+ "source = [\n",
+ " mp.EigenModeSource(\n",
+ " src,\n",
+ " eig_band=1,\n",
+ " direction=mp.NO_DIRECTION,\n",
+ " eig_kpoint=kpoint,\n",
+ " size=source_size,\n",
+ " center=source_center,\n",
+ " )\n",
+ "]"
]
},
{
@@ -112,11 +119,17 @@
"metadata": {},
"outputs": [],
"source": [
- "Nx = int(design_region_resolution*design_region_width)\n",
- "Ny = int(design_region_resolution*design_region_height)\n",
+ "Nx = int(design_region_resolution * design_region_width)\n",
+ "Ny = int(design_region_resolution * design_region_height)\n",
"\n",
- "design_variables = mp.MaterialGrid(mp.Vector3(Nx,Ny),SiO2,Si)\n",
- "design_region = mpa.DesignRegion(design_variables,volume=mp.Volume(center=mp.Vector3(), size=mp.Vector3(design_region_width, design_region_height, 0)))"
+ "design_variables = mp.MaterialGrid(mp.Vector3(Nx, Ny), SiO2, Si)\n",
+ "design_region = mpa.DesignRegion(\n",
+ " design_variables,\n",
+ " volume=mp.Volume(\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(design_region_width, design_region_height, 0),\n",
+ " ),\n",
+ ")"
]
},
{
@@ -125,18 +138,20 @@
"metadata": {},
"outputs": [],
"source": [
- "x_g = np.linspace(-design_region_width/2,design_region_width/2,Nx)\n",
- "y_g = np.linspace(-design_region_height/2,design_region_height/2,Ny)\n",
- "X_g, Y_g = np.meshgrid(x_g,y_g,sparse=True,indexing='ij')\n",
+ "x_g = np.linspace(-design_region_width / 2, design_region_width / 2, Nx)\n",
+ "y_g = np.linspace(-design_region_height / 2, design_region_height / 2, Ny)\n",
+ "X_g, Y_g = np.meshgrid(x_g, y_g, sparse=True, indexing=\"ij\")\n",
"\n",
- "left_wg_mask = (X_g == -design_region_width/2) & (np.abs(Y_g) <= waveguide_width/2)\n",
- "top_wg_mask = (Y_g == design_region_width/2) & (np.abs(X_g) <= waveguide_width/2)\n",
+ "left_wg_mask = (X_g == -design_region_width / 2) & (np.abs(Y_g) <= waveguide_width / 2)\n",
+ "top_wg_mask = (Y_g == design_region_width / 2) & (np.abs(X_g) <= waveguide_width / 2)\n",
"Si_mask = left_wg_mask | top_wg_mask\n",
"\n",
- "border_mask = ((X_g == -design_region_width/2) | \n",
- " (X_g == design_region_width/2) | \n",
- " (Y_g == -design_region_height/2) | \n",
- " (Y_g == design_region_height/2))\n",
+ "border_mask = (\n",
+ " (X_g == -design_region_width / 2)\n",
+ " | (X_g == design_region_width / 2)\n",
+ " | (Y_g == -design_region_height / 2)\n",
+ " | (Y_g == design_region_height / 2)\n",
+ ")\n",
"SiO2_mask = border_mask.copy()\n",
"SiO2_mask[Si_mask] = False"
]
@@ -147,14 +162,20 @@
"metadata": {},
"outputs": [],
"source": [
- "def mapping(x,eta,beta):\n",
- " x = npa.where(Si_mask.flatten(),1,npa.where(SiO2_mask.flatten(),0,x))\n",
+ "def mapping(x, eta, beta):\n",
+ " x = npa.where(Si_mask.flatten(), 1, npa.where(SiO2_mask.flatten(), 0, x))\n",
" # filter\n",
- " filtered_field = mpa.conic_filter(x,filter_radius,design_region_width,design_region_height,design_region_resolution)\n",
- " \n",
+ " filtered_field = mpa.conic_filter(\n",
+ " x,\n",
+ " filter_radius,\n",
+ " design_region_width,\n",
+ " design_region_height,\n",
+ " design_region_resolution,\n",
+ " )\n",
+ "\n",
" # projection\n",
- " projected_field = mpa.tanh_projection(filtered_field,beta,eta)\n",
- " \n",
+ " projected_field = mpa.tanh_projection(filtered_field, beta, eta)\n",
+ "\n",
" # interpolate to actual materials\n",
" return projected_field.flatten()"
]
@@ -173,17 +194,25 @@
"outputs": [],
"source": [
"geometry = [\n",
- " mp.Block(center=mp.Vector3(x=-Sx/4), material=Si, size=mp.Vector3(Sx/2, 0.5, 0)), # horizontal waveguide\n",
- " mp.Block(center=mp.Vector3(y=Sy/4), material=Si, size=mp.Vector3(0.5, Sy/2, 0)), # vertical waveguide\n",
- " mp.Block(center=design_region.center, size=design_region.size, material=design_variables) # design region\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(x=-Sx / 4), material=Si, size=mp.Vector3(Sx / 2, 0.5, 0)\n",
+ " ), # horizontal waveguide\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(y=Sy / 4), material=Si, size=mp.Vector3(0.5, Sy / 2, 0)\n",
+ " ), # vertical waveguide\n",
+ " mp.Block(\n",
+ " center=design_region.center, size=design_region.size, material=design_variables\n",
+ " ), # design region\n",
"]\n",
"\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=source,\n",
- " default_material=SiO2,\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=source,\n",
+ " default_material=SiO2,\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -205,11 +234,20 @@
"metadata": {},
"outputs": [],
"source": [
- "Ez_top = mpa.FourierFields(sim,mp.Volume(center=mp.Vector3(0,Sy/2 - pml_size - 0.1 ,0),size=mp.Vector3(x=waveguide_width)),mp.Ez)\n",
+ "Ez_top = mpa.FourierFields(\n",
+ " sim,\n",
+ " mp.Volume(\n",
+ " center=mp.Vector3(0, Sy / 2 - pml_size - 0.1, 0),\n",
+ " size=mp.Vector3(x=waveguide_width),\n",
+ " ),\n",
+ " mp.Ez,\n",
+ ")\n",
"ob_list = [Ez_top]\n",
+ "\n",
+ "\n",
"def J(top):\n",
- " power = npa.abs(top[1,7])**2\n",
- " return power\n"
+ " power = npa.abs(top[1, 7]) ** 2\n",
+ " return power"
]
},
{
@@ -226,13 +264,13 @@
"outputs": [],
"source": [
"opt = mpa.OptimizationProblem(\n",
- " simulation = sim,\n",
- " objective_functions = J,\n",
- " objective_arguments = ob_list,\n",
- " design_regions = [design_region],\n",
+ " simulation=sim,\n",
+ " objective_functions=J,\n",
+ " objective_arguments=ob_list,\n",
+ " design_regions=[design_region],\n",
" frequencies=frequencies,\n",
- " decay_by = 1e-6,\n",
- " decay_fields=[mp.Ez]\n",
+ " decay_by=1e-6,\n",
+ " decay_fields=[mp.Ez],\n",
")"
]
},
@@ -255,8 +293,8 @@
}
],
"source": [
- "rho_vector = np.random.rand(Nx*Ny)\n",
- "opt.update_design([mapping(rho_vector,eta_i,1e3)])\n",
+ "rho_vector = np.random.rand(Nx * Ny)\n",
+ "opt.update_design([mapping(rho_vector, eta_i, 1e3)])\n",
"opt.plot2D(True)\n",
"plt.show()"
]
@@ -269,28 +307,37 @@
"source": [
"evaluation_history = []\n",
"cur_iter = [0]\n",
+ "\n",
+ "\n",
"def f(v, gradient, cur_beta):\n",
- " print(\"Current iteration: {}\".format(cur_iter[0]+1))\n",
- " \n",
- " f0, dJ_du = opt([mapping(v,eta_i,cur_beta)]) # compute objective and gradient\n",
- " \n",
+ " print(\"Current iteration: {}\".format(cur_iter[0] + 1))\n",
+ "\n",
+ " f0, dJ_du = opt([mapping(v, eta_i, cur_beta)]) # compute objective and gradient\n",
+ "\n",
" if gradient.size > 0:\n",
- " gradient[:] = tensor_jacobian_product(mapping,0)(v,eta_i,cur_beta,np.sum(dJ_du,axis=1)) # backprop\n",
- " \n",
- " \n",
+ " gradient[:] = tensor_jacobian_product(mapping, 0)(\n",
+ " v, eta_i, cur_beta, np.sum(dJ_du, axis=1)\n",
+ " ) # backprop\n",
+ "\n",
" evaluation_history.append(np.real(f0))\n",
- " \n",
+ "\n",
" plt.figure()\n",
" ax = plt.gca()\n",
- " opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- " circ = Circle((2,2),minimum_length/2)\n",
+ " opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ " )\n",
+ " circ = Circle((2, 2), minimum_length / 2)\n",
" ax.add_patch(circ)\n",
- " ax.axis('off')\n",
- " #plt.savefig('media/bend_{:03d}.png'.format(cur_iter[0]),dpi=300)\n",
+ " ax.axis(\"off\")\n",
+ " # plt.savefig('media/bend_{:03d}.png'.format(cur_iter[0]),dpi=300)\n",
" plt.show()\n",
- " \n",
+ "\n",
" cur_iter[0] = cur_iter[0] + 1\n",
- " \n",
+ "\n",
" return np.real(f0)"
]
},
@@ -2298,17 +2345,17 @@
],
"source": [
"algorithm = nlopt.LD_MMA\n",
- "n = Nx * Ny # number of parameters\n",
+ "n = Nx * Ny # number of parameters\n",
"\n",
"# Initial guess\n",
"x = np.ones((n,)) * 0.5\n",
- "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n",
- "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n",
+ "x[Si_mask.flatten()] = 1 # set the edges of waveguides to silicon\n",
+ "x[SiO2_mask.flatten()] = 0 # set the other edges to SiO2\n",
"\n",
"# lower and upper bounds\n",
- "lb = np.zeros((Nx*Ny,))\n",
+ "lb = np.zeros((Nx * Ny,))\n",
"lb[Si_mask.flatten()] = 1\n",
- "ub = np.ones((Nx*Ny,))\n",
+ "ub = np.ones((Nx * Ny,))\n",
"ub[SiO2_mask.flatten()] = 0\n",
"\n",
"cur_beta = 4\n",
@@ -2319,11 +2366,11 @@
" solver = nlopt.opt(algorithm, n)\n",
" solver.set_lower_bounds(lb)\n",
" solver.set_upper_bounds(ub)\n",
- " solver.set_max_objective(lambda a,g: f(a,g,cur_beta))\n",
+ " solver.set_max_objective(lambda a, g: f(a, g, cur_beta))\n",
" solver.set_maxeval(update_factor)\n",
" solver.set_xtol_rel(1e-4)\n",
" x[:] = solver.optimize(x)\n",
- " cur_beta = cur_beta*beta_scale"
+ " cur_beta = cur_beta * beta_scale"
]
},
{
@@ -2353,10 +2400,10 @@
],
"source": [
"plt.figure()\n",
- "plt.plot((evaluation_history),'o-')\n",
+ "plt.plot((evaluation_history), \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Iteration')\n",
- "plt.ylabel('FOM')\n",
+ "plt.xlabel(\"Iteration\")\n",
+ "plt.ylabel(\"FOM\")\n",
"plt.show()"
]
},
@@ -2379,13 +2426,19 @@
}
],
"source": [
- "opt.update_design([mapping(x,eta_i,cur_beta)])\n",
+ "opt.update_design([mapping(x, eta_i, cur_beta)])\n",
"plt.figure()\n",
"ax = plt.gca()\n",
- "opt.plot2D(False,ax=ax,plot_sources_flag=False,plot_monitors_flag=False,plot_boundaries_flag=False)\n",
- "circ = Circle((2,2),minimum_length/2)\n",
+ "opt.plot2D(\n",
+ " False,\n",
+ " ax=ax,\n",
+ " plot_sources_flag=False,\n",
+ " plot_monitors_flag=False,\n",
+ " plot_boundaries_flag=False,\n",
+ ")\n",
+ "circ = Circle((2, 2), minimum_length / 2)\n",
"ax.add_patch(circ)\n",
- "ax.axis('off')\n",
+ "ax.axis(\"off\")\n",
"plt.show()"
]
},
@@ -2415,10 +2468,10 @@
}
],
"source": [
- "f0, dJ_du = opt([mapping(x,eta_i,cur_beta)],need_gradient = False)\n",
+ "f0, dJ_du = opt([mapping(x, eta_i, cur_beta)], need_gradient=False)\n",
"Ez_coef = opt.get_objective_arguments()[0]\n",
"plt.figure()\n",
- "plt.plot(np.abs(Ez_coef[1,:])**2,'-o')\n",
+ "plt.plot(np.abs(Ez_coef[1, :]) ** 2, \"-o\")\n",
"plt.show()"
]
},
@@ -2451,16 +2504,20 @@
}
],
"source": [
- "src = mp.ContinuousSource(frequency=1/1.55,fwidth=fwidth)\n",
- "source = [mp.EigenModeSource(src,\n",
- " eig_band = 1,\n",
- " direction=mp.NO_DIRECTION,\n",
- " eig_kpoint=kpoint,\n",
- " size = source_size,\n",
- " center=source_center)]\n",
+ "src = mp.ContinuousSource(frequency=1 / 1.55, fwidth=fwidth)\n",
+ "source = [\n",
+ " mp.EigenModeSource(\n",
+ " src,\n",
+ " eig_band=1,\n",
+ " direction=mp.NO_DIRECTION,\n",
+ " eig_kpoint=kpoint,\n",
+ " size=source_size,\n",
+ " center=source_center,\n",
+ " )\n",
+ "]\n",
"opt.sim.change_sources(source)\n",
"opt.sim.run(until=500)\n",
- "opt.sim.plot2D(fields=mp.Ez)\n"
+ "opt.sim.plot2D(fields=mp.Ez)"
]
},
{
diff --git a/python/examples/antenna-radiation.ipynb b/python/examples/antenna-radiation.ipynb
index bf2498020..177d2fa83 100644
--- a/python/examples/antenna-radiation.ipynb
+++ b/python/examples/antenna-radiation.ipynb
@@ -53,44 +53,53 @@
"\n",
"sxy = 4\n",
"dpml = 1\n",
- "cell = mp.Vector3(sxy+2*dpml,sxy+2*dpml)\n",
+ "cell = mp.Vector3(sxy + 2 * dpml, sxy + 2 * dpml)\n",
"\n",
"pml_layers = [mp.PML(dpml)]\n",
"\n",
"fcen = 1.0\n",
"df = 0.4\n",
"src_cmpt = mp.Ey\n",
- "sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=df),\n",
- " center=mp.Vector3(),\n",
- " component=src_cmpt)]\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " src=mp.GaussianSource(fcen, fwidth=df), center=mp.Vector3(), component=src_cmpt\n",
+ " )\n",
+ "]\n",
"\n",
"if src_cmpt == mp.Ex:\n",
- " symmetries = [mp.Mirror(mp.X,phase=-1),\n",
- " mp.Mirror(mp.Y,phase=+1)]\n",
+ " symmetries = [mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=+1)]\n",
"elif src_cmpt == mp.Ey:\n",
- " symmetries = [mp.Mirror(mp.X,phase=+1),\n",
- " mp.Mirror(mp.Y,phase=-1)]\n",
+ " symmetries = [mp.Mirror(mp.X, phase=+1), mp.Mirror(mp.Y, phase=-1)]\n",
"elif src_cmpt == mp.Ez:\n",
- " symmetries = [mp.Mirror(mp.X,phase=+1),\n",
- " mp.Mirror(mp.Y,phase=+1)]\n",
+ " symmetries = [mp.Mirror(mp.X, phase=+1), mp.Mirror(mp.Y, phase=+1)]\n",
"\n",
- "sim = mp.Simulation(cell_size=cell,\n",
- " resolution=resolution,\n",
- " sources=sources,\n",
- " symmetries=symmetries,\n",
- " boundary_layers=pml_layers)\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " resolution=resolution,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ " boundary_layers=pml_layers,\n",
+ ")\n",
"\n",
- "nearfield_box = sim.add_near2far(fcen, 0, 1,\n",
- " mp.Near2FarRegion(mp.Vector3(y=0.5*sxy), size=mp.Vector3(sxy)),\n",
- " mp.Near2FarRegion(mp.Vector3(y=-0.5*sxy), size=mp.Vector3(sxy), weight=-1),\n",
- " mp.Near2FarRegion(mp.Vector3(0.5*sxy), size=mp.Vector3(y=sxy)),\n",
- " mp.Near2FarRegion(mp.Vector3(-0.5*sxy), size=mp.Vector3(y=sxy), weight=-1))\n",
+ "nearfield_box = sim.add_near2far(\n",
+ " fcen,\n",
+ " 0,\n",
+ " 1,\n",
+ " mp.Near2FarRegion(mp.Vector3(y=0.5 * sxy), size=mp.Vector3(sxy)),\n",
+ " mp.Near2FarRegion(mp.Vector3(y=-0.5 * sxy), size=mp.Vector3(sxy), weight=-1),\n",
+ " mp.Near2FarRegion(mp.Vector3(0.5 * sxy), size=mp.Vector3(y=sxy)),\n",
+ " mp.Near2FarRegion(mp.Vector3(-0.5 * sxy), size=mp.Vector3(y=sxy), weight=-1),\n",
+ ")\n",
"\n",
- "flux_box = sim.add_flux(fcen, 0, 1,\n",
- " mp.FluxRegion(mp.Vector3(y=0.5*sxy), size=mp.Vector3(sxy)),\n",
- " mp.FluxRegion(mp.Vector3(y=-0.5*sxy), size=mp.Vector3(sxy), weight=-1),\n",
- " mp.FluxRegion(mp.Vector3(0.5*sxy), size=mp.Vector3(y=sxy)),\n",
- " mp.FluxRegion(mp.Vector3(-0.5*sxy), size=mp.Vector3(y=sxy), weight=-1))"
+ "flux_box = sim.add_flux(\n",
+ " fcen,\n",
+ " 0,\n",
+ " 1,\n",
+ " mp.FluxRegion(mp.Vector3(y=0.5 * sxy), size=mp.Vector3(sxy)),\n",
+ " mp.FluxRegion(mp.Vector3(y=-0.5 * sxy), size=mp.Vector3(sxy), weight=-1),\n",
+ " mp.FluxRegion(mp.Vector3(0.5 * sxy), size=mp.Vector3(y=sxy)),\n",
+ " mp.FluxRegion(mp.Vector3(-0.5 * sxy), size=mp.Vector3(y=sxy), weight=-1),\n",
+ ")"
]
},
{
@@ -155,7 +164,9 @@
}
],
"source": [
- "sim.run(until_after_sources=mp.stop_when_fields_decayed(50, src_cmpt, mp.Vector3(), 1e-8))"
+ "sim.run(\n",
+ " until_after_sources=mp.stop_when_fields_decayed(50, src_cmpt, mp.Vector3(), 1e-8)\n",
+ ")"
]
},
{
@@ -187,12 +198,24 @@
"metadata": {},
"outputs": [],
"source": [
- "r = 1000/fcen # half side length of far-field square box OR radius of far-field circle\n",
- "res_ff = 1 # resolution of far fields (points/μm)\n",
- "far_flux_box = (nearfield_box.flux(mp.Y, mp.Volume(center=mp.Vector3(y=r), size=mp.Vector3(2*r)), res_ff)[0]\n",
- " - nearfield_box.flux(mp.Y, mp.Volume(center=mp.Vector3(y=-r), size=mp.Vector3(2*r)), res_ff)[0]\n",
- " + nearfield_box.flux(mp.X, mp.Volume(center=mp.Vector3(r), size=mp.Vector3(y=2*r)), res_ff)[0]\n",
- " - nearfield_box.flux(mp.X, mp.Volume(center=mp.Vector3(-r), size=mp.Vector3(y=2*r)), res_ff)[0])"
+ "r = (\n",
+ " 1000 / fcen\n",
+ ") # half side length of far-field square box OR radius of far-field circle\n",
+ "res_ff = 1 # resolution of far fields (points/μm)\n",
+ "far_flux_box = (\n",
+ " nearfield_box.flux(\n",
+ " mp.Y, mp.Volume(center=mp.Vector3(y=r), size=mp.Vector3(2 * r)), res_ff\n",
+ " )[0]\n",
+ " - nearfield_box.flux(\n",
+ " mp.Y, mp.Volume(center=mp.Vector3(y=-r), size=mp.Vector3(2 * r)), res_ff\n",
+ " )[0]\n",
+ " + nearfield_box.flux(\n",
+ " mp.X, mp.Volume(center=mp.Vector3(r), size=mp.Vector3(y=2 * r)), res_ff\n",
+ " )[0]\n",
+ " - nearfield_box.flux(\n",
+ " mp.X, mp.Volume(center=mp.Vector3(-r), size=mp.Vector3(y=2 * r)), res_ff\n",
+ " )[0]\n",
+ ")"
]
},
{
@@ -216,25 +239,25 @@
}
],
"source": [
- "npts = 100 # number of points in [0,2*pi) range of angles\n",
- "angles = 2*math.pi/npts*np.arange(npts)\n",
+ "npts = 100 # number of points in [0,2*pi) range of angles\n",
+ "angles = 2 * math.pi / npts * np.arange(npts)\n",
"\n",
- "E = np.zeros((npts,3),dtype=np.complex128)\n",
- "H = np.zeros((npts,3),dtype=np.complex128)\n",
+ "E = np.zeros((npts, 3), dtype=np.complex128)\n",
+ "H = np.zeros((npts, 3), dtype=np.complex128)\n",
"for n in range(npts):\n",
- " ff = sim.get_farfield(nearfield_box,\n",
- " mp.Vector3(r*math.cos(angles[n]),\n",
- " r*math.sin(angles[n])))\n",
- " E[n,:] = [np.conj(ff[j]) for j in range(3)]\n",
- " H[n,:] = [ff[j+3] for j in range(3)]\n",
+ " ff = sim.get_farfield(\n",
+ " nearfield_box, mp.Vector3(r * math.cos(angles[n]), r * math.sin(angles[n]))\n",
+ " )\n",
+ " E[n, :] = [np.conj(ff[j]) for j in range(3)]\n",
+ " H[n, :] = [ff[j + 3] for j in range(3)]\n",
"\n",
- "Px = np.real(np.multiply(E[:,1],H[:,2])-np.multiply(E[:,2],H[:,1]))\n",
- "Py = np.real(np.multiply(E[:,2],H[:,0])-np.multiply(E[:,0],H[:,2]))\n",
- "Pr = np.sqrt(np.square(Px)+np.square(Py))\n",
+ "Px = np.real(np.multiply(E[:, 1], H[:, 2]) - np.multiply(E[:, 2], H[:, 1]))\n",
+ "Py = np.real(np.multiply(E[:, 2], H[:, 0]) - np.multiply(E[:, 0], H[:, 2]))\n",
+ "Pr = np.sqrt(np.square(Px) + np.square(Py))\n",
"\n",
- "far_flux_circle = np.sum(Pr)*2*np.pi*r/len(Pr)\n",
+ "far_flux_circle = np.sum(Pr) * 2 * np.pi * r / len(Pr)\n",
"\n",
- "print(\"flux:, {:.6f}, {:.6f}, {:.6f}\".format(near_flux,far_flux_box,far_flux_circle))"
+ "print(\"flux:, {:.6f}, {:.6f}, {:.6f}\".format(near_flux, far_flux_box, far_flux_circle))"
]
},
{
@@ -266,10 +289,10 @@
],
"source": [
"plt.figure(dpi=200)\n",
- "ax = plt.subplot(111, projection='polar')\n",
- "ax.plot(angles,Pr/max(Pr),'b-')\n",
+ "ax = plt.subplot(111, projection=\"polar\")\n",
+ "ax.plot(angles, Pr / max(Pr), \"b-\")\n",
"ax.set_rmax(1)\n",
- "ax.set_rticks([0,0.5,1])\n",
+ "ax.set_rticks([0, 0.5, 1])\n",
"ax.grid(True)\n",
"ax.set_rlabel_position(22)"
]
diff --git a/python/examples/antenna-radiation.py b/python/examples/antenna-radiation.py
index 9d6ea4cb1..83b9b09ac 100644
--- a/python/examples/antenna-radiation.py
+++ b/python/examples/antenna-radiation.py
@@ -8,109 +8,108 @@
sxy = 4
dpml = 1
-cell = mp.Vector3(sxy+2*dpml,sxy+2*dpml)
+cell = mp.Vector3(sxy + 2 * dpml, sxy + 2 * dpml)
pml_layers = [mp.PML(dpml)]
fcen = 1.0
df = 0.4
src_cmpt = mp.Ez
-sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=df),
- center=mp.Vector3(),
- component=src_cmpt)]
+sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=df), center=mp.Vector3(), component=src_cmpt
+ )
+]
if src_cmpt == mp.Ex:
- symmetries = [mp.Mirror(mp.X,phase=-1),
- mp.Mirror(mp.Y,phase=+1)]
+ symmetries = [mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=+1)]
elif src_cmpt == mp.Ey:
- symmetries = [mp.Mirror(mp.X,phase=+1),
- mp.Mirror(mp.Y,phase=-1)]
+ symmetries = [mp.Mirror(mp.X, phase=+1), mp.Mirror(mp.Y, phase=-1)]
elif src_cmpt == mp.Ez:
- symmetries = [mp.Mirror(mp.X,phase=+1),
- mp.Mirror(mp.Y,phase=+1)]
-
-sim = mp.Simulation(cell_size=cell,
- resolution=resolution,
- sources=sources,
- symmetries=symmetries,
- boundary_layers=pml_layers)
-
-nearfield_box = sim.add_near2far(fcen, 0, 1,
- mp.Near2FarRegion(center=mp.Vector3(0,+0.5*sxy),
- size=mp.Vector3(sxy,0)),
- mp.Near2FarRegion(center=mp.Vector3(0,-0.5*sxy),
- size=mp.Vector3(sxy,0),
- weight=-1),
- mp.Near2FarRegion(center=mp.Vector3(+0.5*sxy,0),
- size=mp.Vector3(0,sxy)),
- mp.Near2FarRegion(center=mp.Vector3(-0.5*sxy,0),
- size=mp.Vector3(0,sxy),
- weight=-1))
-
-flux_box = sim.add_flux(fcen, 0, 1,
- mp.FluxRegion(center=mp.Vector3(0,+0.5*sxy),
- size=mp.Vector3(sxy,0)),
- mp.FluxRegion(center=mp.Vector3(0,-0.5*sxy),
- size=mp.Vector3(sxy,0),
- weight=-1),
- mp.FluxRegion(center=mp.Vector3(+0.5*sxy,0),
- size=mp.Vector3(0,sxy)),
- mp.FluxRegion(center=mp.Vector3(-0.5*sxy,0),
- size=mp.Vector3(0,sxy),
- weight=-1))
+ symmetries = [mp.Mirror(mp.X, phase=+1), mp.Mirror(mp.Y, phase=+1)]
+
+sim = mp.Simulation(
+ cell_size=cell,
+ resolution=resolution,
+ sources=sources,
+ symmetries=symmetries,
+ boundary_layers=pml_layers,
+)
+
+nearfield_box = sim.add_near2far(
+ fcen,
+ 0,
+ 1,
+ mp.Near2FarRegion(center=mp.Vector3(0, +0.5 * sxy), size=mp.Vector3(sxy, 0)),
+ mp.Near2FarRegion(
+ center=mp.Vector3(0, -0.5 * sxy), size=mp.Vector3(sxy, 0), weight=-1
+ ),
+ mp.Near2FarRegion(center=mp.Vector3(+0.5 * sxy, 0), size=mp.Vector3(0, sxy)),
+ mp.Near2FarRegion(
+ center=mp.Vector3(-0.5 * sxy, 0), size=mp.Vector3(0, sxy), weight=-1
+ ),
+)
+
+flux_box = sim.add_flux(
+ fcen,
+ 0,
+ 1,
+ mp.FluxRegion(center=mp.Vector3(0, +0.5 * sxy), size=mp.Vector3(sxy, 0)),
+ mp.FluxRegion(center=mp.Vector3(0, -0.5 * sxy), size=mp.Vector3(sxy, 0), weight=-1),
+ mp.FluxRegion(center=mp.Vector3(+0.5 * sxy, 0), size=mp.Vector3(0, sxy)),
+ mp.FluxRegion(center=mp.Vector3(-0.5 * sxy, 0), size=mp.Vector3(0, sxy), weight=-1),
+)
sim.run(until_after_sources=mp.stop_when_dft_decayed())
near_flux = mp.get_fluxes(flux_box)[0]
# half side length of far-field square box OR radius of far-field circle
-r = 1000/fcen
+r = 1000 / fcen
# resolution of far fields (points/μm)
res_ff = 1
-far_flux_box = (nearfield_box.flux(mp.Y,
- mp.Volume(center=mp.Vector3(y=r),
- size=mp.Vector3(2*r)),
- res_ff)[0] -
- nearfield_box.flux(mp.Y,
- mp.Volume(center=mp.Vector3(y=-r),
- size=mp.Vector3(2*r)),
- res_ff)[0] +
- nearfield_box.flux(mp.X,
- mp.Volume(center=mp.Vector3(r),
- size=mp.Vector3(y=2*r)),
- res_ff)[0] -
- nearfield_box.flux(mp.X,
- mp.Volume(center=mp.Vector3(-r),
- size=mp.Vector3(y=2*r)),
- res_ff)[0])
+far_flux_box = (
+ nearfield_box.flux(
+ mp.Y, mp.Volume(center=mp.Vector3(y=r), size=mp.Vector3(2 * r)), res_ff
+ )[0]
+ - nearfield_box.flux(
+ mp.Y, mp.Volume(center=mp.Vector3(y=-r), size=mp.Vector3(2 * r)), res_ff
+ )[0]
+ + nearfield_box.flux(
+ mp.X, mp.Volume(center=mp.Vector3(r), size=mp.Vector3(y=2 * r)), res_ff
+ )[0]
+ - nearfield_box.flux(
+ mp.X, mp.Volume(center=mp.Vector3(-r), size=mp.Vector3(y=2 * r)), res_ff
+ )[0]
+)
npts = 100 # number of points in [0,2*pi) range of angles
-angles = 2*math.pi/npts*np.arange(npts)
+angles = 2 * math.pi / npts * np.arange(npts)
-E = np.zeros((npts,3),dtype=np.complex128)
-H = np.zeros((npts,3),dtype=np.complex128)
+E = np.zeros((npts, 3), dtype=np.complex128)
+H = np.zeros((npts, 3), dtype=np.complex128)
for n in range(npts):
- ff = sim.get_farfield(nearfield_box,
- mp.Vector3(r*math.cos(angles[n]),
- r*math.sin(angles[n])))
- E[n,:] = [np.conj(ff[j]) for j in range(3)]
- H[n,:] = [ff[j+3] for j in range(3)]
+ ff = sim.get_farfield(
+ nearfield_box, mp.Vector3(r * math.cos(angles[n]), r * math.sin(angles[n]))
+ )
+ E[n, :] = [np.conj(ff[j]) for j in range(3)]
+ H[n, :] = [ff[j + 3] for j in range(3)]
-Px = np.real(E[:,1]*H[:,2]-E[:,2]*H[:,1])
-Py = np.real(E[:,2]*H[:,0]-E[:,0]*H[:,2])
-Pr = np.sqrt(np.square(Px)+np.square(Py))
+Px = np.real(E[:, 1] * H[:, 2] - E[:, 2] * H[:, 1])
+Py = np.real(E[:, 2] * H[:, 0] - E[:, 0] * H[:, 2])
+Pr = np.sqrt(np.square(Px) + np.square(Py))
# integrate the radial flux over the circle circumference
-far_flux_circle = np.sum(Pr)*2*np.pi*r/len(Pr)
+far_flux_circle = np.sum(Pr) * 2 * np.pi * r / len(Pr)
-print("flux:, {:.6f}, {:.6f}, {:.6f}".format(near_flux,far_flux_box,far_flux_circle))
+print("flux:, {:.6f}, {:.6f}, {:.6f}".format(near_flux, far_flux_box, far_flux_circle))
-ax = plt.subplot(111, projection='polar')
-ax.plot(angles,Pr/max(Pr),'b-')
+ax = plt.subplot(111, projection="polar")
+ax.plot(angles, Pr / max(Pr), "b-")
ax.set_rmax(1)
-ax.set_rticks([0,0.5,1])
+ax.set_rticks([0, 0.5, 1])
ax.grid(True)
ax.set_rlabel_position(22)
plt.show()
diff --git a/python/examples/antenna_pec_ground_plane.py b/python/examples/antenna_pec_ground_plane.py
index d02af9760..cdd26c4ff 100644
--- a/python/examples/antenna_pec_ground_plane.py
+++ b/python/examples/antenna_pec_ground_plane.py
@@ -7,90 +7,95 @@
import math
import numpy as np
import matplotlib
-matplotlib.use('agg')
+
+matplotlib.use("agg")
import matplotlib.pyplot as plt
resolution = 200 # pixels/um
-n = 1.2 # refractive index of surrounding medium
-h = 1.25 # height of antenna (point dipole source) above ground plane
-wvl = 0.65 # vacuum wavelength
-r = 1000*wvl # radius of far-field circle
-npts = 50 # number of points in [0,pi/2) range of angles
+n = 1.2 # refractive index of surrounding medium
+h = 1.25 # height of antenna (point dipole source) above ground plane
+wvl = 0.65 # vacuum wavelength
+r = 1000 * wvl # radius of far-field circle
+npts = 50 # number of points in [0,pi/2) range of angles
-angles = 0.5*math.pi/npts*np.arange(npts)
+angles = 0.5 * math.pi / npts * np.arange(npts)
-def radial_flux(sim,nearfield_box,r):
- E = np.zeros((npts,3),dtype=np.complex128)
- H = np.zeros((npts,3),dtype=np.complex128)
+def radial_flux(sim, nearfield_box, r):
+ E = np.zeros((npts, 3), dtype=np.complex128)
+ H = np.zeros((npts, 3), dtype=np.complex128)
for n in range(npts):
- ff = sim.get_farfield(nearfield_box,
- mp.Vector3(r*math.sin(angles[n]),
- r*math.cos(angles[n])))
- E[n,:] = [np.conj(ff[j]) for j in range(3)]
- H[n,:] = [ff[j+3] for j in range(3)]
+ ff = sim.get_farfield(
+ nearfield_box, mp.Vector3(r * math.sin(angles[n]), r * math.cos(angles[n]))
+ )
+ E[n, :] = [np.conj(ff[j]) for j in range(3)]
+ H[n, :] = [ff[j + 3] for j in range(3)]
- Px = np.real(E[:,1]*H[:,2]-E[:,2]*H[:,1]) # Ey*Hz-Ez*Hy
- Py = np.real(E[:,2]*H[:,0]-E[:,0]*H[:,2]) # Ez*Hx-Ex*Hz
- return np.sqrt(np.square(Px)+np.square(Py))
+ Px = np.real(E[:, 1] * H[:, 2] - E[:, 2] * H[:, 1]) # Ey*Hz-Ez*Hy
+ Py = np.real(E[:, 2] * H[:, 0] - E[:, 0] * H[:, 2]) # Ez*Hx-Ex*Hz
+ return np.sqrt(np.square(Px) + np.square(Py))
def free_space_radiation(src_cmpt):
sxy = 4
dpml = 1
- cell_size = mp.Vector3(sxy+2*dpml,sxy+2*dpml)
+ cell_size = mp.Vector3(sxy + 2 * dpml, sxy + 2 * dpml)
pml_layers = [mp.PML(dpml)]
- fcen = 1/wvl
- sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),
- center=mp.Vector3(),
- component=src_cmpt)]
+ fcen = 1 / wvl
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ center=mp.Vector3(),
+ component=src_cmpt,
+ )
+ ]
if src_cmpt == mp.Hz:
- symmetries = [mp.Mirror(mp.X,phase=-1),
- mp.Mirror(mp.Y,phase=-1)]
+ symmetries = [mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=-1)]
elif src_cmpt == mp.Ez:
- symmetries = [mp.Mirror(mp.X,phase=+1),
- mp.Mirror(mp.Y,phase=+1)]
+ symmetries = [mp.Mirror(mp.X, phase=+1), mp.Mirror(mp.Y, phase=+1)]
else:
symmetries = []
- sim = mp.Simulation(cell_size=cell_size,
- resolution=resolution,
- sources=sources,
- symmetries=symmetries,
- boundary_layers=pml_layers,
- default_material=mp.Medium(index=n))
-
- nearfield_box = sim.add_near2far(fcen,
- 0,
- 1,
- mp.Near2FarRegion(center=mp.Vector3(0,+0.5*sxy),
- size=mp.Vector3(sxy,0)),
- mp.Near2FarRegion(center=mp.Vector3(0,-0.5*sxy),
- size=mp.Vector3(sxy,0),
- weight=-1),
- mp.Near2FarRegion(center=mp.Vector3(+0.5*sxy,0),
- size=mp.Vector3(0,sxy)),
- mp.Near2FarRegion(center=mp.Vector3(-0.5*sxy,0),
- size=mp.Vector3(0,sxy),
- weight=-1))
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ sources=sources,
+ symmetries=symmetries,
+ boundary_layers=pml_layers,
+ default_material=mp.Medium(index=n),
+ )
+
+ nearfield_box = sim.add_near2far(
+ fcen,
+ 0,
+ 1,
+ mp.Near2FarRegion(center=mp.Vector3(0, +0.5 * sxy), size=mp.Vector3(sxy, 0)),
+ mp.Near2FarRegion(
+ center=mp.Vector3(0, -0.5 * sxy), size=mp.Vector3(sxy, 0), weight=-1
+ ),
+ mp.Near2FarRegion(center=mp.Vector3(+0.5 * sxy, 0), size=mp.Vector3(0, sxy)),
+ mp.Near2FarRegion(
+ center=mp.Vector3(-0.5 * sxy, 0), size=mp.Vector3(0, sxy), weight=-1
+ ),
+ )
sim.run(until_after_sources=mp.stop_when_dft_decayed())
- return radial_flux(sim,nearfield_box,r)
+ return radial_flux(sim, nearfield_box, r)
def pec_ground_plane_radiation(src_cmpt=mp.Hz):
- L = 8.0 # length of non-PML region
+ L = 8.0 # length of non-PML region
dpml = 1.0 # thickness of PML
- sxy = dpml+L+dpml
- cell_size = mp.Vector3(sxy,sxy,0)
+ sxy = dpml + L + dpml
+ cell_size = mp.Vector3(sxy, sxy, 0)
boundary_layers = [mp.PML(dpml)]
- fcen = 1/wvl
+ fcen = 1 / wvl
# The near-to-far field transformation feature only supports
# homogeneous media which means it cannot explicitly take into
@@ -101,51 +106,61 @@ def pec_ground_plane_radiation(src_cmpt=mp.Hz):
# equivalent to a PEC boundary condition on one side.
# Note: This setup means that the radiation pattern can only
# be measured in the top half above the dipole.
- sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),
- component=src_cmpt,
- center=mp.Vector3(0,+h)),
- mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),
- component=src_cmpt,
- center=mp.Vector3(0,-h),
- amplitude=-1 if src_cmpt==mp.Ez else +1)]
-
- symmetries = [mp.Mirror(direction=mp.X,
- phase=+1 if src_cmpt==mp.Ez else -1),
- mp.Mirror(direction=mp.Y,
- phase=-1 if src_cmpt==mp.Ez else +1)]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=boundary_layers,
- sources=sources,
- symmetries=symmetries,
- default_material=mp.Medium(index=n))
-
- nearfield_box = sim.add_near2far(fcen,
- 0,
- 1,
- mp.Near2FarRegion(center=mp.Vector3(0,2*h),
- size=mp.Vector3(2*h,0),
- weight=+1),
- mp.Near2FarRegion(center=mp.Vector3(0,-2*h),
- size=mp.Vector3(2*h,0),
- weight=-1),
- mp.Near2FarRegion(center=mp.Vector3(h,0),
- size=mp.Vector3(0,4*h),
- weight=+1),
- mp.Near2FarRegion(center=mp.Vector3(-h,0),
- size=mp.Vector3(0,4*h),
- weight=-1))
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ component=src_cmpt,
+ center=mp.Vector3(0, +h),
+ ),
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ component=src_cmpt,
+ center=mp.Vector3(0, -h),
+ amplitude=-1 if src_cmpt == mp.Ez else +1,
+ ),
+ ]
+
+ symmetries = [
+ mp.Mirror(direction=mp.X, phase=+1 if src_cmpt == mp.Ez else -1),
+ mp.Mirror(direction=mp.Y, phase=-1 if src_cmpt == mp.Ez else +1),
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=boundary_layers,
+ sources=sources,
+ symmetries=symmetries,
+ default_material=mp.Medium(index=n),
+ )
+
+ nearfield_box = sim.add_near2far(
+ fcen,
+ 0,
+ 1,
+ mp.Near2FarRegion(
+ center=mp.Vector3(0, 2 * h), size=mp.Vector3(2 * h, 0), weight=+1
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(0, -2 * h), size=mp.Vector3(2 * h, 0), weight=-1
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(h, 0), size=mp.Vector3(0, 4 * h), weight=+1
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(-h, 0), size=mp.Vector3(0, 4 * h), weight=-1
+ ),
+ )
sim.plot2D()
- plt.savefig('antenna_pec_ground_plane.png',bbox_inches='tight')
+ plt.savefig("antenna_pec_ground_plane.png", bbox_inches="tight")
sim.run(until_after_sources=mp.stop_when_dft_decayed())
- return radial_flux(sim,nearfield_box,r)
+ return radial_flux(sim, nearfield_box, r)
-if __name__ == '__main__':
+if __name__ == "__main__":
src_cmpt = mp.Ez # TM/P: Hz or TE/S: Ez
Pr_fsp = free_space_radiation(src_cmpt)
Pr_pec = pec_ground_plane_radiation(src_cmpt)
@@ -156,23 +171,27 @@ def pec_ground_plane_radiation(src_cmpt=mp.Hz):
# as derived in Section 6.2 "Two-Element Array" of
# Antenna Theory: Analysis and Design, Fourth Edition
# (2016) by C.A. Balanis.
- k = 2*np.pi/(wvl/n) # wavevector in free space
- Pr_theory = np.zeros(npts,)
- for i,ang in enumerate(angles):
- Pr_theory[i] = Pr_fsp[i] * 2*np.sin(k*h*np.cos(ang))
+ k = 2 * np.pi / (wvl / n) # wavevector in free space
+ Pr_theory = np.zeros(
+ npts,
+ )
+ for i, ang in enumerate(angles):
+ Pr_theory[i] = Pr_fsp[i] * 2 * np.sin(k * h * np.cos(ang))
- Pr_pec_norm = Pr_pec/np.max(Pr_pec)
- Pr_theory_norm = (Pr_theory/max(Pr_theory))**2
+ Pr_pec_norm = Pr_pec / np.max(Pr_pec)
+ Pr_theory_norm = (Pr_theory / max(Pr_theory)) ** 2
plt.figure()
- plt.plot(np.degrees(angles),Pr_pec_norm,'b-',label='Meep')
- plt.plot(np.degrees(angles),Pr_theory_norm,'r-',label='theory')
- plt.xlabel('angle (degrees)')
- plt.ylabel('radial flux (normalized by maximum flux)')
- plt.title(f"antenna with {'E' if src_cmpt==mp.Ez else r'H'}$_z$ polarization above PEC ground plane")
-
- plt.axis([0,90,0,1.0])
+ plt.plot(np.degrees(angles), Pr_pec_norm, "b-", label="Meep")
+ plt.plot(np.degrees(angles), Pr_theory_norm, "r-", label="theory")
+ plt.xlabel("angle (degrees)")
+ plt.ylabel("radial flux (normalized by maximum flux)")
+ plt.title(
+ f"antenna with {'E' if src_cmpt==mp.Ez else r'H'}$_z$ polarization above PEC ground plane"
+ )
+
+ plt.axis([0, 90, 0, 1.0])
plt.legend()
- plt.savefig('radiation_pattern.png',bbox_inches='tight')
+ plt.savefig("radiation_pattern.png", bbox_inches="tight")
- print("norm:, {:.6f}".format(np.linalg.norm(Pr_pec_norm-Pr_theory_norm)))
+ print("norm:, {:.6f}".format(np.linalg.norm(Pr_pec_norm - Pr_theory_norm)))
diff --git a/python/examples/bend-flux.ipynb b/python/examples/bend-flux.ipynb
index df16d007f..bf9a54c7e 100644
--- a/python/examples/bend-flux.ipynb
+++ b/python/examples/bend-flux.ipynb
@@ -34,11 +34,11 @@
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
- "resolution = 10 # pixels/um\n",
+ "resolution = 10 # pixels/um\n",
"\n",
"sx = 16 # size of cell in X direction\n",
"sy = 32 # size of cell in Y direction\n",
- "cell = mp.Vector3(sx,sy,0)\n",
+ "cell = mp.Vector3(sx, sy, 0)\n",
"\n",
"dpml = 1.0\n",
"pml_layers = [mp.PML(dpml)]"
@@ -58,7 +58,7 @@
"outputs": [],
"source": [
"pad = 4 # padding distance between waveguide and cell edge\n",
- "w = 1 # width of waveguide"
+ "w = 1 # width of waveguide"
]
},
{
@@ -74,8 +74,8 @@
"metadata": {},
"outputs": [],
"source": [
- "wvg_xcen = 0.5*(sx-w-2*pad) # x center of horiz. wvg\n",
- "wvg_ycen = -0.5*(sy-w-2*pad) # y center of vert. wvg"
+ "wvg_xcen = 0.5 * (sx - w - 2 * pad) # x center of horiz. wvg\n",
+ "wvg_ycen = -0.5 * (sy - w - 2 * pad) # y center of vert. wvg"
]
},
{
@@ -91,9 +91,13 @@
"metadata": {},
"outputs": [],
"source": [
- "geometry = [mp.Block(size=mp.Vector3(mp.inf,w,mp.inf),\n",
- " center=mp.Vector3(0,wvg_ycen,0),\n",
- " material=mp.Medium(epsilon=12))]"
+ "geometry = [\n",
+ " mp.Block(\n",
+ " size=mp.Vector3(mp.inf, w, mp.inf),\n",
+ " center=mp.Vector3(0, wvg_ycen, 0),\n",
+ " material=mp.Medium(epsilon=12),\n",
+ " )\n",
+ "]"
]
},
{
@@ -110,11 +114,15 @@
"outputs": [],
"source": [
"fcen = 0.15 # pulse center frequency\n",
- "df = 0.1 # pulse width (in frequency)\n",
- "sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),\n",
- " component=mp.Ez,\n",
- " center=mp.Vector3(-0.5*sx+dpml,wvg_ycen,0),\n",
- " size=mp.Vector3(0,w,0))]"
+ "df = 0.1 # pulse width (in frequency)\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ez,\n",
+ " center=mp.Vector3(-0.5 * sx + dpml, wvg_ycen, 0),\n",
+ " size=mp.Vector3(0, w, 0),\n",
+ " )\n",
+ "]"
]
},
{
@@ -156,25 +164,31 @@
}
],
"source": [
- "sim = mp.Simulation(cell_size=cell,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=sources,\n",
- " resolution=resolution)\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=sources,\n",
+ " resolution=resolution,\n",
+ ")\n",
"\n",
"nfreq = 100 # number of frequencies at which to compute flux\n",
"\n",
"# reflected flux\n",
- "refl_fr = mp.FluxRegion(center=mp.Vector3(-0.5*sx+dpml+0.5,wvg_ycen,0), size=mp.Vector3(0,2*w,0)) \n",
+ "refl_fr = mp.FluxRegion(\n",
+ " center=mp.Vector3(-0.5 * sx + dpml + 0.5, wvg_ycen, 0), size=mp.Vector3(0, 2 * w, 0)\n",
+ ")\n",
"refl = sim.add_flux(fcen, df, nfreq, refl_fr)\n",
"\n",
"# transmitted flux\n",
- "tran_fr = mp.FluxRegion(center=mp.Vector3(0.5*sx-dpml,wvg_ycen,0), size=mp.Vector3(0,2*w,0))\n",
+ "tran_fr = mp.FluxRegion(\n",
+ " center=mp.Vector3(0.5 * sx - dpml, wvg_ycen, 0), size=mp.Vector3(0, 2 * w, 0)\n",
+ ")\n",
"tran = sim.add_flux(fcen, df, nfreq, tran_fr)\n",
"\n",
"plt.figure(dpi=150)\n",
"sim.plot2D()\n",
- "plt.show()\n"
+ "plt.show()"
]
},
{
@@ -206,9 +220,9 @@
}
],
"source": [
- "pt = mp.Vector3(0.5*sx-dpml-0.5,wvg_ycen)\n",
+ "pt = mp.Vector3(0.5 * sx - dpml - 0.5, wvg_ycen)\n",
"\n",
- "sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ez,pt,1e-3))\n",
+ "sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, pt, 1e-3))\n",
"\n",
"# for normalization run, save flux fields data for reflection plane\n",
"straight_refl_data = sim.get_flux_data(refl)"
@@ -284,25 +298,39 @@
"source": [
"sim.reset_meep()\n",
"\n",
- "geometry = [mp.Block(mp.Vector3(sx-pad,w,mp.inf), center=mp.Vector3(-0.5*pad,wvg_ycen), material=mp.Medium(epsilon=12)),\n",
- " mp.Block(mp.Vector3(w,sy-pad,mp.inf), center=mp.Vector3(wvg_xcen,0.5*pad), material=mp.Medium(epsilon=12))]\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " mp.Vector3(sx - pad, w, mp.inf),\n",
+ " center=mp.Vector3(-0.5 * pad, wvg_ycen),\n",
+ " material=mp.Medium(epsilon=12),\n",
+ " ),\n",
+ " mp.Block(\n",
+ " mp.Vector3(w, sy - pad, mp.inf),\n",
+ " center=mp.Vector3(wvg_xcen, 0.5 * pad),\n",
+ " material=mp.Medium(epsilon=12),\n",
+ " ),\n",
+ "]\n",
"\n",
- "sim = mp.Simulation(cell_size=cell,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=sources,\n",
- " resolution=resolution)\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=sources,\n",
+ " resolution=resolution,\n",
+ ")\n",
"\n",
"# reflected flux\n",
"refl = sim.add_flux(fcen, df, nfreq, refl_fr)\n",
"\n",
- "tran_fr = mp.FluxRegion(center=mp.Vector3(wvg_xcen,0.5*sy-dpml-0.5,0), size=mp.Vector3(2*w,0,0))\n",
+ "tran_fr = mp.FluxRegion(\n",
+ " center=mp.Vector3(wvg_xcen, 0.5 * sy - dpml - 0.5, 0), size=mp.Vector3(2 * w, 0, 0)\n",
+ ")\n",
"tran = sim.add_flux(fcen, df, nfreq, tran_fr)\n",
"\n",
"# for normal run, load negated fields to subtract incident from refl. fields\n",
"sim.load_minus_flux_data(refl, straight_refl_data)\n",
"\n",
- "pt = mp.Vector3(wvg_xcen,0.5*sy-dpml-0.5)\n",
+ "pt = mp.Vector3(wvg_xcen, 0.5 * sy - dpml - 0.5)\n",
"\n",
"sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, pt, 1e-3))\n",
"\n",
@@ -346,15 +374,15 @@
"Rs = []\n",
"Ts = []\n",
"for i in range(nfreq):\n",
- " wl = np.append(wl, 1/flux_freqs[i])\n",
- " Rs = np.append(Rs,-bend_refl_flux[i]/straight_tran_flux[i])\n",
- " Ts = np.append(Ts,bend_tran_flux[i]/straight_tran_flux[i]) \n",
+ " wl = np.append(wl, 1 / flux_freqs[i])\n",
+ " Rs = np.append(Rs, -bend_refl_flux[i] / straight_tran_flux[i])\n",
+ " Ts = np.append(Ts, bend_tran_flux[i] / straight_tran_flux[i])\n",
"\n",
"if mp.am_master():\n",
" plt.figure(dpi=150)\n",
- " plt.plot(wl,Rs,'bo-',label='reflectance')\n",
- " plt.plot(wl,Ts,'ro-',label='transmittance')\n",
- " plt.plot(wl,1-Rs-Ts,'go-',label='loss')\n",
+ " plt.plot(wl, Rs, \"bo-\", label=\"reflectance\")\n",
+ " plt.plot(wl, Ts, \"ro-\", label=\"transmittance\")\n",
+ " plt.plot(wl, 1 - Rs - Ts, \"go-\", label=\"loss\")\n",
" plt.axis([5.0, 10.0, 0, 1])\n",
" plt.xlabel(\"wavelength (μm)\")\n",
" plt.legend(loc=\"upper right\")\n",
diff --git a/python/examples/bend-flux.py b/python/examples/bend-flux.py
index 0b788fd3b..66bebed80 100644
--- a/python/examples/bend-flux.py
+++ b/python/examples/bend-flux.py
@@ -7,51 +7,65 @@
import numpy as np
import matplotlib.pyplot as plt
-resolution = 10 # pixels/um
+resolution = 10 # pixels/um
sx = 16 # size of cell in X direction
sy = 32 # size of cell in Y direction
-cell = mp.Vector3(sx,sy,0)
+cell = mp.Vector3(sx, sy, 0)
dpml = 1.0
pml_layers = [mp.PML(dpml)]
pad = 4 # padding distance between waveguide and cell edge
-w = 1 # width of waveguide
+w = 1 # width of waveguide
-wvg_xcen = 0.5*(sx-w-2*pad) # x center of vert. wvg
-wvg_ycen = -0.5*(sy-w-2*pad) # y center of horiz. wvg
+wvg_xcen = 0.5 * (sx - w - 2 * pad) # x center of vert. wvg
+wvg_ycen = -0.5 * (sy - w - 2 * pad) # y center of horiz. wvg
-geometry = [mp.Block(size=mp.Vector3(mp.inf,w,mp.inf),
- center=mp.Vector3(0,wvg_ycen,0),
- material=mp.Medium(epsilon=12))]
+geometry = [
+ mp.Block(
+ size=mp.Vector3(mp.inf, w, mp.inf),
+ center=mp.Vector3(0, wvg_ycen, 0),
+ material=mp.Medium(epsilon=12),
+ )
+]
fcen = 0.15 # pulse center frequency
-df = 0.1 # pulse width (in frequency)
-sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
- component=mp.Ez,
- center=mp.Vector3(-0.5*sx+dpml,wvg_ycen,0),
- size=mp.Vector3(0,w,0))]
-
-sim = mp.Simulation(cell_size=cell,
- boundary_layers=pml_layers,
- geometry=geometry,
- sources=sources,
- resolution=resolution)
+df = 0.1 # pulse width (in frequency)
+sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=mp.Vector3(-0.5 * sx + dpml, wvg_ycen, 0),
+ size=mp.Vector3(0, w, 0),
+ )
+]
+
+sim = mp.Simulation(
+ cell_size=cell,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ sources=sources,
+ resolution=resolution,
+)
nfreq = 100 # number of frequencies at which to compute flux
# reflected flux
-refl_fr = mp.FluxRegion(center=mp.Vector3(-0.5*sx+dpml+0.5,wvg_ycen,0),size=mp.Vector3(0,2*w,0))
-refl = sim.add_flux(fcen,df,nfreq,refl_fr)
+refl_fr = mp.FluxRegion(
+ center=mp.Vector3(-0.5 * sx + dpml + 0.5, wvg_ycen, 0), size=mp.Vector3(0, 2 * w, 0)
+)
+refl = sim.add_flux(fcen, df, nfreq, refl_fr)
# transmitted flux
-tran_fr = mp.FluxRegion(center=mp.Vector3(0.5*sx-dpml,wvg_ycen,0),size=mp.Vector3(0,2*w,0))
-tran = sim.add_flux(fcen,df,nfreq,tran_fr)
+tran_fr = mp.FluxRegion(
+ center=mp.Vector3(0.5 * sx - dpml, wvg_ycen, 0), size=mp.Vector3(0, 2 * w, 0)
+)
+tran = sim.add_flux(fcen, df, nfreq, tran_fr)
-pt = mp.Vector3(0.5*sx-dpml-0.5,wvg_ycen)
+pt = mp.Vector3(0.5 * sx - dpml - 0.5, wvg_ycen)
-sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ez,pt,1e-3))
+sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, pt, 1e-3))
# for normalization run, save flux fields data for reflection plane
straight_refl_data = sim.get_flux_data(refl)
@@ -61,25 +75,39 @@
sim.reset_meep()
-geometry = [mp.Block(mp.Vector3(sx-pad,w,mp.inf),center=mp.Vector3(-0.5*pad,wvg_ycen),material=mp.Medium(epsilon=12)),
- mp.Block(mp.Vector3(w,sy-pad,mp.inf),center=mp.Vector3(wvg_xcen,0.5*pad),material=mp.Medium(epsilon=12))]
-
-sim = mp.Simulation(cell_size=cell,
- boundary_layers=pml_layers,
- geometry=geometry,
- sources=sources,
- resolution=resolution)
+geometry = [
+ mp.Block(
+ mp.Vector3(sx - pad, w, mp.inf),
+ center=mp.Vector3(-0.5 * pad, wvg_ycen),
+ material=mp.Medium(epsilon=12),
+ ),
+ mp.Block(
+ mp.Vector3(w, sy - pad, mp.inf),
+ center=mp.Vector3(wvg_xcen, 0.5 * pad),
+ material=mp.Medium(epsilon=12),
+ ),
+]
+
+sim = mp.Simulation(
+ cell_size=cell,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ sources=sources,
+ resolution=resolution,
+)
# reflected flux
refl = sim.add_flux(fcen, df, nfreq, refl_fr)
-tran_fr = mp.FluxRegion(center=mp.Vector3(wvg_xcen,0.5*sy-dpml-0.5,0),size=mp.Vector3(2*w,0,0))
-tran = sim.add_flux(fcen,df,nfreq,tran_fr)
+tran_fr = mp.FluxRegion(
+ center=mp.Vector3(wvg_xcen, 0.5 * sy - dpml - 0.5, 0), size=mp.Vector3(2 * w, 0, 0)
+)
+tran = sim.add_flux(fcen, df, nfreq, tran_fr)
# for normal run, load negated fields to subtract incident from refl. fields
-sim.load_minus_flux_data(refl,straight_refl_data)
+sim.load_minus_flux_data(refl, straight_refl_data)
-pt = mp.Vector3(wvg_xcen,0.5*sy-dpml-0.5)
+pt = mp.Vector3(wvg_xcen, 0.5 * sy - dpml - 0.5)
sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, pt, 1e-3))
@@ -92,15 +120,15 @@
Rs = []
Ts = []
for i in range(nfreq):
- wl = np.append(wl, 1/flux_freqs[i])
- Rs = np.append(Rs,-bend_refl_flux[i]/straight_tran_flux[i])
- Ts = np.append(Ts,bend_tran_flux[i]/straight_tran_flux[i])
+ wl = np.append(wl, 1 / flux_freqs[i])
+ Rs = np.append(Rs, -bend_refl_flux[i] / straight_tran_flux[i])
+ Ts = np.append(Ts, bend_tran_flux[i] / straight_tran_flux[i])
if mp.am_master():
plt.figure()
- plt.plot(wl,Rs,'bo-',label='reflectance')
- plt.plot(wl,Ts,'ro-',label='transmittance')
- plt.plot(wl,1-Rs-Ts,'go-',label='loss')
+ plt.plot(wl, Rs, "bo-", label="reflectance")
+ plt.plot(wl, Ts, "ro-", label="transmittance")
+ plt.plot(wl, 1 - Rs - Ts, "go-", label="loss")
plt.axis([5.0, 10.0, 0, 1])
plt.xlabel("wavelength (μm)")
plt.legend(loc="upper right")
diff --git a/python/examples/bent-waveguide.ipynb b/python/examples/bent-waveguide.ipynb
index ca9d4e5d0..f03241857 100644
--- a/python/examples/bent-waveguide.ipynb
+++ b/python/examples/bent-waveguide.ipynb
@@ -34,6 +34,7 @@
"from matplotlib import pyplot as plt\n",
"import numpy as np\n",
"from IPython.display import Video\n",
+ "\n",
"%matplotlib inline"
]
},
@@ -50,13 +51,19 @@
"metadata": {},
"outputs": [],
"source": [
- "cell = mp.Vector3(16,16,0)\n",
- "geometry = [mp.Block(mp.Vector3(12,1,mp.inf),\n",
- " center=mp.Vector3(-2.5,-3.5),\n",
- " material=mp.Medium(epsilon=12)),\n",
- " mp.Block(mp.Vector3(1,12,mp.inf),\n",
- " center=mp.Vector3(3.5,2),\n",
- " material=mp.Medium(epsilon=12))]\n",
+ "cell = mp.Vector3(16, 16, 0)\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " mp.Vector3(12, 1, mp.inf),\n",
+ " center=mp.Vector3(-2.5, -3.5),\n",
+ " material=mp.Medium(epsilon=12),\n",
+ " ),\n",
+ " mp.Block(\n",
+ " mp.Vector3(1, 12, mp.inf),\n",
+ " center=mp.Vector3(3.5, 2),\n",
+ " material=mp.Medium(epsilon=12),\n",
+ " ),\n",
+ "]\n",
"pml_layers = [mp.PML(1.0)]\n",
"resolution = 10"
]
@@ -81,10 +88,14 @@
"metadata": {},
"outputs": [],
"source": [
- "sources = [mp.Source(mp.ContinuousSource(wavelength=2*(11**0.5), width=20),\n",
- " component=mp.Ez,\n",
- " center=mp.Vector3(-7,-3.5),\n",
- " size=mp.Vector3(0,1))]"
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.ContinuousSource(wavelength=2 * (11**0.5), width=20),\n",
+ " component=mp.Ez,\n",
+ " center=mp.Vector3(-7, -3.5),\n",
+ " size=mp.Vector3(0, 1),\n",
+ " )\n",
+ "]"
]
},
{
@@ -100,11 +111,13 @@
"metadata": {},
"outputs": [],
"source": [
- "sim = mp.Simulation(cell_size=cell,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=sources,\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=sources,\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -141,7 +154,7 @@
],
"source": [
"f = plt.figure(dpi=150)\n",
- "sim.plot2D(ax = f.gca())\n",
+ "sim.plot2D(ax=f.gca())\n",
"plt.show()"
]
},
@@ -169,7 +182,7 @@
"source": [
"f = plt.figure(dpi=150)\n",
"Animate = mp.Animate2D(sim, fields=mp.Ez, f=f, realtime=False, normalize=True)\n",
- "sim.run(mp.at_every(0.5,Animate),until=100)\n",
+ "sim.run(mp.at_every(0.5, Animate), until=100)\n",
"plt.close()"
]
},
@@ -204,7 +217,7 @@
"source": [
"filename = \"media/bent_waveguide.mp4\"\n",
"fps = 10\n",
- "Animate.to_mp4(fps,filename)\n",
+ "Animate.to_mp4(fps, filename)\n",
"Video(filename)"
]
},
@@ -253,16 +266,22 @@
],
"source": [
"sim.reset_meep()\n",
- "cell = mp.Vector3(16,40,0)\n",
- "geometry = [mp.Block(mp.Vector3(12,1,mp.inf),\n",
- " center=mp.Vector3(-2.5,-3.5),\n",
- " material=mp.Medium(epsilon=12)),\n",
- " mp.Block(mp.Vector3(1,42,mp.inf),\n",
- " center=mp.Vector3(3.5,17),\n",
- " material=mp.Medium(epsilon=12))]\n",
+ "cell = mp.Vector3(16, 40, 0)\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " mp.Vector3(12, 1, mp.inf),\n",
+ " center=mp.Vector3(-2.5, -3.5),\n",
+ " material=mp.Medium(epsilon=12),\n",
+ " ),\n",
+ " mp.Block(\n",
+ " mp.Vector3(1, 42, mp.inf),\n",
+ " center=mp.Vector3(3.5, 17),\n",
+ " material=mp.Medium(epsilon=12),\n",
+ " ),\n",
+ "]\n",
"sim.cell_size = cell\n",
"sim.geometry = geometry\n",
- "sim.geometry_center = mp.Vector3(0,12,0)\n",
+ "sim.geometry_center = mp.Vector3(0, 12, 0)\n",
"\n",
"sim.run(until=400)\n",
"\n",
@@ -314,18 +333,22 @@
"source": [
"vals = []\n",
"\n",
+ "\n",
"def get_slice(sim):\n",
- " vals.append(sim.get_array(center=mp.Vector3(0,-3.5), size=mp.Vector3(16,0), component=mp.Ez))\n",
+ " vals.append(\n",
+ " sim.get_array(\n",
+ " center=mp.Vector3(0, -3.5), size=mp.Vector3(16, 0), component=mp.Ez\n",
+ " )\n",
+ " )\n",
+ "\n",
"\n",
"sim.reset_meep()\n",
- "sim.run(mp.at_beginning(mp.output_epsilon),\n",
- " mp.at_every(0.6, get_slice),\n",
- " until=200)\n",
+ "sim.run(mp.at_beginning(mp.output_epsilon), mp.at_every(0.6, get_slice), until=200)\n",
"\n",
"plt.figure(dpi=150)\n",
- "plt.imshow(vals, interpolation='spline36', cmap='RdBu')\n",
- "plt.axis('off')\n",
- "plt.show()\n"
+ "plt.imshow(vals, interpolation=\"spline36\", cmap=\"RdBu\")\n",
+ "plt.axis(\"off\")\n",
+ "plt.show()"
]
}
],
diff --git a/python/examples/bent-waveguide.py b/python/examples/bent-waveguide.py
index 17d465c83..1faaad84e 100644
--- a/python/examples/bent-waveguide.py
+++ b/python/examples/bent-waveguide.py
@@ -5,27 +5,41 @@
import meep as mp
-cell = mp.Vector3(16,16,0)
-geometry = [mp.Block(mp.Vector3(12,1,mp.inf),
- center=mp.Vector3(-2.5,-3.5),
- material=mp.Medium(epsilon=12)),
- mp.Block(mp.Vector3(1,12,mp.inf),
- center=mp.Vector3(3.5,2),
- material=mp.Medium(epsilon=12))]
+cell = mp.Vector3(16, 16, 0)
+geometry = [
+ mp.Block(
+ mp.Vector3(12, 1, mp.inf),
+ center=mp.Vector3(-2.5, -3.5),
+ material=mp.Medium(epsilon=12),
+ ),
+ mp.Block(
+ mp.Vector3(1, 12, mp.inf),
+ center=mp.Vector3(3.5, 2),
+ material=mp.Medium(epsilon=12),
+ ),
+]
pml_layers = [mp.PML(1.0)]
resolution = 10
-sources = [mp.Source(mp.ContinuousSource(wavelength=2*(11**0.5), width=20),
- component=mp.Ez,
- center=mp.Vector3(-7,-3.5),
- size=mp.Vector3(0,1))]
+sources = [
+ mp.Source(
+ mp.ContinuousSource(wavelength=2 * (11**0.5), width=20),
+ component=mp.Ez,
+ center=mp.Vector3(-7, -3.5),
+ size=mp.Vector3(0, 1),
+ )
+]
-sim = mp.Simulation(cell_size=cell,
- boundary_layers=pml_layers,
- geometry=geometry,
- sources=sources,
- resolution=resolution)
+sim = mp.Simulation(
+ cell_size=cell,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ sources=sources,
+ resolution=resolution,
+)
-sim.run(mp.at_beginning(mp.output_epsilon),
- mp.to_appended("ez", mp.at_every(0.6, mp.output_efield_z)),
- until=200)
+sim.run(
+ mp.at_beginning(mp.output_epsilon),
+ mp.to_appended("ez", mp.at_every(0.6, mp.output_efield_z)),
+ until=200,
+)
diff --git a/python/examples/binary_grating.ipynb b/python/examples/binary_grating.ipynb
index 670528df6..a49b08fe1 100644
--- a/python/examples/binary_grating.ipynb
+++ b/python/examples/binary_grating.ipynb
@@ -80,46 +80,57 @@
"source": [
"fused_quartz = mp.Medium(index=1.5)\n",
"\n",
- "resolution = 50 # pixels/μm\n",
+ "resolution = 50 # pixels/μm\n",
"\n",
- "dpml = 1.0 # PML thickness\n",
- "dsub = 3.0 # substrate thickness\n",
- "dpad = 3.0 # padding between grating and PML\n",
- "gp = 10.0 # grating period\n",
- "gh = 0.5 # grating height\n",
- "gdc = 0.5 # grating duty cycle\n",
+ "dpml = 1.0 # PML thickness\n",
+ "dsub = 3.0 # substrate thickness\n",
+ "dpad = 3.0 # padding between grating and PML\n",
+ "gp = 10.0 # grating period\n",
+ "gh = 0.5 # grating height\n",
+ "gdc = 0.5 # grating duty cycle\n",
"\n",
- "sx = dpml+dsub+gh+dpad+dpml\n",
+ "sx = dpml + dsub + gh + dpad + dpml\n",
"sy = gp\n",
"\n",
- "cell_size = mp.Vector3(sx,sy,0)\n",
- "pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]\n",
- "\n",
- "wvl_min = 0.4 # min wavelength\n",
- "wvl_max = 0.6 # max wavelength\n",
- "fmin = 1/wvl_max # min frequency\n",
- "fmax = 1/wvl_min # max frequency\n",
- "fcen = 0.5*(fmin+fmax) # center frequency\n",
- "df = fmax-fmin # frequency width\n",
- "\n",
- "src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub)\n",
- "sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt, size=mp.Vector3(y=sy))]\n",
- "\n",
- "k_point = mp.Vector3(0,0,0)\n",
- "\n",
- "symmetries=[mp.Mirror(mp.Y)]\n",
- "\n",
- "sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " k_point=k_point,\n",
- " default_material=fused_quartz,\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
+ "cell_size = mp.Vector3(sx, sy, 0)\n",
+ "pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]\n",
+ "\n",
+ "wvl_min = 0.4 # min wavelength\n",
+ "wvl_max = 0.6 # max wavelength\n",
+ "fmin = 1 / wvl_max # min frequency\n",
+ "fmax = 1 / wvl_min # max frequency\n",
+ "fcen = 0.5 * (fmin + fmax) # center frequency\n",
+ "df = fmax - fmin # frequency width\n",
+ "\n",
+ "src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub)\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ez,\n",
+ " center=src_pt,\n",
+ " size=mp.Vector3(y=sy),\n",
+ " )\n",
+ "]\n",
+ "\n",
+ "k_point = mp.Vector3(0, 0, 0)\n",
+ "\n",
+ "symmetries = [mp.Mirror(mp.Y)]\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=k_point,\n",
+ " default_material=fused_quartz,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ ")\n",
"\n",
"nfreq = 21\n",
- "mon_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad)\n",
- "flux_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy)))\n",
+ "mon_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad)\n",
+ "flux_mon = sim.add_flux(\n",
+ " fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy))\n",
+ ")\n",
"\n",
"f = plt.figure(dpi=120)\n",
"sim.plot2D(ax=f.gca())\n",
@@ -203,18 +214,32 @@
"source": [
"sim.reset_meep()\n",
"\n",
- "geometry = [mp.Block(material=fused_quartz, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub))),\n",
- " mp.Block(material=fused_quartz, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh))]\n",
- "\n",
- "sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " k_point=k_point,\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
- "\n",
- "mode_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy)))\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " material=fused_quartz,\n",
+ " size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),\n",
+ " center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)),\n",
+ " ),\n",
+ " mp.Block(\n",
+ " material=fused_quartz,\n",
+ " size=mp.Vector3(gh, gdc * gp, mp.inf),\n",
+ " center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh),\n",
+ " ),\n",
+ "]\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " k_point=k_point,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ ")\n",
+ "\n",
+ "mode_mon = sim.add_flux(\n",
+ " fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy))\n",
+ ")\n",
"\n",
"f2 = plt.figure(dpi=120)\n",
"sim.plot2D(ax=f2.gca())\n",
@@ -270,7 +295,9 @@
"freqs = mp.get_eigenmode_freqs(mode_mon)\n",
"\n",
"nmode = 10\n",
- "res = sim.get_eigenmode_coefficients(mode_mon, range(1,nmode+1), eig_parity=mp.ODD_Z+mp.EVEN_Y)\n",
+ "res = sim.get_eigenmode_coefficients(\n",
+ " mode_mon, range(1, nmode + 1), eig_parity=mp.ODD_Z + mp.EVEN_Y\n",
+ ")\n",
"coeffs = res.alpha\n",
"kdom = res.kdom\n",
"\n",
@@ -279,13 +306,13 @@
"mode_tran = []\n",
"\n",
"for nm in range(nmode):\n",
- " for nf in range(nfreq):\n",
- " mode_wvl.append(1/freqs[nf])\n",
- " mode_angle.append(math.degrees(math.acos(kdom[nm*nfreq+nf].x/freqs[nf])))\n",
- " tran = abs(coeffs[nm,nf,0])**2/input_flux[nf]\n",
- " mode_tran.append(0.5*tran if nm != 0 else tran)\n",
+ " for nf in range(nfreq):\n",
+ " mode_wvl.append(1 / freqs[nf])\n",
+ " mode_angle.append(math.degrees(math.acos(kdom[nm * nfreq + nf].x / freqs[nf])))\n",
+ " tran = abs(coeffs[nm, nf, 0]) ** 2 / input_flux[nf]\n",
+ " mode_tran.append(0.5 * tran if nm != 0 else tran)\n",
"\n",
- "tran_max = round(max(mode_tran),1)"
+ "tran_max = round(max(mode_tran), 1)"
]
},
{
@@ -317,22 +344,24 @@
],
"source": [
"plt.figure(dpi=200)\n",
- "plt.pcolormesh(np.reshape(mode_wvl,(nmode,nfreq)),\n",
- " np.reshape(mode_angle,(nmode,nfreq)),\n",
- " np.reshape(mode_tran,(nmode,nfreq)),\n",
- " cmap='Blues',\n",
- " shading='flat',\n",
- " vmin=0,\n",
- " vmax=tran_max)\n",
+ "plt.pcolormesh(\n",
+ " np.reshape(mode_wvl, (nmode, nfreq)),\n",
+ " np.reshape(mode_angle, (nmode, nfreq)),\n",
+ " np.reshape(mode_tran, (nmode, nfreq)),\n",
+ " cmap=\"Blues\",\n",
+ " shading=\"flat\",\n",
+ " vmin=0,\n",
+ " vmax=tran_max,\n",
+ ")\n",
"plt.axis([min(mode_wvl), max(mode_wvl), min(mode_angle), max(mode_angle)])\n",
"plt.xlabel(\"wavelength (μm)\")\n",
"plt.ylabel(\"diffraction angle (degrees)\")\n",
- "plt.xticks([t for t in np.linspace(wvl_min,wvl_max,3)])\n",
- "plt.yticks([t for t in range(0,35,5)])\n",
+ "plt.xticks([t for t in np.linspace(wvl_min, wvl_max, 3)])\n",
+ "plt.yticks([t for t in range(0, 35, 5)])\n",
"plt.title(\"transmittance of diffraction orders\")\n",
"cbar = plt.colorbar()\n",
- "cbar.set_ticks([t for t in np.arange(0,tran_max+0.1,0.1)])\n",
- "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in np.arange(0,tran_max+0.1,0.1)])"
+ "cbar.set_ticks([t for t in np.arange(0, tran_max + 0.1, 0.1)])\n",
+ "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in np.arange(0, tran_max + 0.1, 0.1)])"
]
},
{
@@ -413,46 +442,57 @@
"source": [
"from meep.materials import fused_quartz\n",
"\n",
- "resolution = 50 # pixels/μm\n",
+ "resolution = 50 # pixels/μm\n",
"\n",
- "dpml = 1.0 # PML thickness\n",
- "dsub = 3.0 # substrate thickness\n",
- "dpad = 3.0 # padding between grating and PML\n",
- "gp = 10.0 # grating period\n",
- "gh = 0.5 # grating height\n",
- "gdc = 0.5 # grating duty cycle\n",
+ "dpml = 1.0 # PML thickness\n",
+ "dsub = 3.0 # substrate thickness\n",
+ "dpad = 3.0 # padding between grating and PML\n",
+ "gp = 10.0 # grating period\n",
+ "gh = 0.5 # grating height\n",
+ "gdc = 0.5 # grating duty cycle\n",
"\n",
- "sx = dpml+dsub+gh+dpad+dpml\n",
+ "sx = dpml + dsub + gh + dpad + dpml\n",
"sy = gp\n",
"\n",
- "cell_size = mp.Vector3(sx,sy,0)\n",
- "pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]\n",
- "\n",
- "wvl_min = 0.4 # min wavelength\n",
- "wvl_max = 0.6 # max wavelength\n",
- "fmin = 1/wvl_max # min frequency\n",
- "fmax = 1/wvl_min # max frequency\n",
- "fcen = 0.5*(fmin+fmax) # center frequency\n",
- "df = fmax-fmin # frequency width\n",
- "\n",
- "src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub)\n",
- "sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt, size=mp.Vector3(y=sy))]\n",
- "\n",
- "k_point = mp.Vector3(0,0,0)\n",
- "\n",
- "symmetries=[mp.Mirror(mp.Y)]\n",
- "\n",
- "sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " k_point=k_point,\n",
- " default_material=fused_quartz,\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
+ "cell_size = mp.Vector3(sx, sy, 0)\n",
+ "pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]\n",
+ "\n",
+ "wvl_min = 0.4 # min wavelength\n",
+ "wvl_max = 0.6 # max wavelength\n",
+ "fmin = 1 / wvl_max # min frequency\n",
+ "fmax = 1 / wvl_min # max frequency\n",
+ "fcen = 0.5 * (fmin + fmax) # center frequency\n",
+ "df = fmax - fmin # frequency width\n",
+ "\n",
+ "src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub)\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ez,\n",
+ " center=src_pt,\n",
+ " size=mp.Vector3(y=sy),\n",
+ " )\n",
+ "]\n",
+ "\n",
+ "k_point = mp.Vector3(0, 0, 0)\n",
+ "\n",
+ "symmetries = [mp.Mirror(mp.Y)]\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=k_point,\n",
+ " default_material=fused_quartz,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ ")\n",
"\n",
"nfreq = 21\n",
- "mon_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad)\n",
- "flux_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy)))\n",
+ "mon_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad)\n",
+ "flux_mon = sim.add_flux(\n",
+ " fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy))\n",
+ ")\n",
"\n",
"sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9))\n",
"\n",
@@ -460,25 +500,41 @@
"\n",
"sim.reset_meep()\n",
"\n",
- "geometry = [mp.Block(material=fused_quartz, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub))),\n",
- " mp.Block(material=fused_quartz, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh))]\n",
- "\n",
- "sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " k_point=k_point,\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
- "\n",
- "mode_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy)))\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " material=fused_quartz,\n",
+ " size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),\n",
+ " center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)),\n",
+ " ),\n",
+ " mp.Block(\n",
+ " material=fused_quartz,\n",
+ " size=mp.Vector3(gh, gdc * gp, mp.inf),\n",
+ " center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh),\n",
+ " ),\n",
+ "]\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " k_point=k_point,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ ")\n",
+ "\n",
+ "mode_mon = sim.add_flux(\n",
+ " fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy))\n",
+ ")\n",
"\n",
"sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9))\n",
"\n",
"freqs = mp.get_eigenmode_freqs(mode_mon)\n",
"\n",
"nmode = 10\n",
- "res = sim.get_eigenmode_coefficients(mode_mon, range(1,nmode+1), eig_parity=mp.ODD_Z+mp.EVEN_Y)\n",
+ "res = sim.get_eigenmode_coefficients(\n",
+ " mode_mon, range(1, nmode + 1), eig_parity=mp.ODD_Z + mp.EVEN_Y\n",
+ ")\n",
"coeffs = res.alpha\n",
"kdom = res.kdom\n",
"\n",
@@ -487,31 +543,33 @@
"mode_tran = []\n",
"\n",
"for nm in range(nmode):\n",
- " for nf in range(nfreq):\n",
- " mode_wvl.append(1/freqs[nf])\n",
- " mode_angle.append(math.degrees(math.acos(kdom[nm*nfreq+nf].x/freqs[nf])))\n",
- " tran = abs(coeffs[nm,nf,0])**2/input_flux[nf]\n",
- " mode_tran.append(0.5*tran if nm != 0 else tran)\n",
+ " for nf in range(nfreq):\n",
+ " mode_wvl.append(1 / freqs[nf])\n",
+ " mode_angle.append(math.degrees(math.acos(kdom[nm * nfreq + nf].x / freqs[nf])))\n",
+ " tran = abs(coeffs[nm, nf, 0]) ** 2 / input_flux[nf]\n",
+ " mode_tran.append(0.5 * tran if nm != 0 else tran)\n",
"\n",
- "tran_max = round(max(mode_tran),1)\n",
+ "tran_max = round(max(mode_tran), 1)\n",
"\n",
"plt.figure(dpi=200)\n",
- "plt.pcolormesh(np.reshape(mode_wvl,(nmode,nfreq)),\n",
- " np.reshape(mode_angle,(nmode,nfreq)),\n",
- " np.reshape(mode_tran,(nmode,nfreq)),\n",
- " cmap='Blues',\n",
- " shading='flat',\n",
- " vmin=0,\n",
- " vmax=tran_max)\n",
+ "plt.pcolormesh(\n",
+ " np.reshape(mode_wvl, (nmode, nfreq)),\n",
+ " np.reshape(mode_angle, (nmode, nfreq)),\n",
+ " np.reshape(mode_tran, (nmode, nfreq)),\n",
+ " cmap=\"Blues\",\n",
+ " shading=\"flat\",\n",
+ " vmin=0,\n",
+ " vmax=tran_max,\n",
+ ")\n",
"plt.axis([min(mode_wvl), max(mode_wvl), min(mode_angle), max(mode_angle)])\n",
"plt.xlabel(\"wavelength (μm)\")\n",
"plt.ylabel(\"diffraction angle (degrees)\")\n",
- "plt.xticks([t for t in np.linspace(wvl_min,wvl_max,3)])\n",
- "plt.yticks([t for t in range(0,35,5)])\n",
+ "plt.xticks([t for t in np.linspace(wvl_min, wvl_max, 3)])\n",
+ "plt.yticks([t for t in range(0, 35, 5)])\n",
"plt.title(\"transmittance of diffraction orders\")\n",
"cbar = plt.colorbar()\n",
- "cbar.set_ticks([t for t in np.arange(0,tran_max+0.1,0.1)])\n",
- "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in np.arange(0,tran_max+0.1,0.1)])"
+ "cbar.set_ticks([t for t in np.arange(0, tran_max + 0.1, 0.1)])\n",
+ "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in np.arange(0, tran_max + 0.1, 0.1)])"
]
},
{
diff --git a/python/examples/binary_grating.py b/python/examples/binary_grating.py
index fcba5dbb7..74fb36992 100644
--- a/python/examples/binary_grating.py
+++ b/python/examples/binary_grating.py
@@ -5,48 +5,59 @@
import numpy as np
import matplotlib.pyplot as plt
-resolution = 60 # pixels/μm
+resolution = 60 # pixels/μm
-dpml = 1.0 # PML thickness
-dsub = 3.0 # substrate thickness
-dpad = 3.0 # padding between grating and PML
-gp = 10.0 # grating period
-gh = 0.5 # grating height
-gdc = 0.5 # grating duty cycle
+dpml = 1.0 # PML thickness
+dsub = 3.0 # substrate thickness
+dpad = 3.0 # padding between grating and PML
+gp = 10.0 # grating period
+gh = 0.5 # grating height
+gdc = 0.5 # grating duty cycle
-sx = dpml+dsub+gh+dpad+dpml
+sx = dpml + dsub + gh + dpad + dpml
sy = gp
-cell_size = mp.Vector3(sx,sy,0)
-pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]
+cell_size = mp.Vector3(sx, sy, 0)
+pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]
-wvl_min = 0.4 # min wavelength
-wvl_max = 0.6 # max wavelength
-fmin = 1/wvl_max # min frequency
-fmax = 1/wvl_min # max frequency
-fcen = 0.5*(fmin+fmax) # center frequency
-df = fmax-fmin # frequency width
+wvl_min = 0.4 # min wavelength
+wvl_max = 0.6 # max wavelength
+fmin = 1 / wvl_max # min frequency
+fmax = 1 / wvl_min # max frequency
+fcen = 0.5 * (fmin + fmax) # center frequency
+df = fmax - fmin # frequency width
-src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub,0,0)
-sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt, size=mp.Vector3(0,sy,0))]
+src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub, 0, 0)
+sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=src_pt,
+ size=mp.Vector3(0, sy, 0),
+ )
+]
-k_point = mp.Vector3(0,0,0)
+k_point = mp.Vector3(0, 0, 0)
glass = mp.Medium(index=1.5)
-symmetries=[mp.Mirror(mp.Y)]
+symmetries = [mp.Mirror(mp.Y)]
-sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- k_point=k_point,
- default_material=glass,
- sources=sources,
- symmetries=symmetries)
+sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ k_point=k_point,
+ default_material=glass,
+ sources=sources,
+ symmetries=symmetries,
+)
nfreq = 21
-mon_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad,0,0)
-flux_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0,sy,0)))
+mon_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad, 0, 0)
+flux_mon = sim.add_flux(
+ fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0, sy, 0))
+)
sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9))
@@ -54,25 +65,41 @@
sim.reset_meep()
-geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub),0,0)),
- mp.Block(material=glass, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,0,0))]
-
-sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- geometry=geometry,
- k_point=k_point,
- sources=sources,
- symmetries=symmetries)
-
-mode_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0,sy,0)))
+geometry = [
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),
+ center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub), 0, 0),
+ ),
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(gh, gdc * gp, mp.inf),
+ center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh, 0, 0),
+ ),
+]
+
+sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ k_point=k_point,
+ sources=sources,
+ symmetries=symmetries,
+)
+
+mode_mon = sim.add_flux(
+ fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0, sy, 0))
+)
sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9))
freqs = mp.get_eigenmode_freqs(mode_mon)
nmode = 10
-res = sim.get_eigenmode_coefficients(mode_mon, range(1,nmode+1), eig_parity=mp.ODD_Z+mp.EVEN_Y)
+res = sim.get_eigenmode_coefficients(
+ mode_mon, range(1, nmode + 1), eig_parity=mp.ODD_Z + mp.EVEN_Y
+)
coeffs = res.alpha
kdom = res.kdom
@@ -81,30 +108,36 @@
mode_tran = []
for nm in range(nmode):
- for nf in range(nfreq):
- mode_wvl.append(1/freqs[nf])
- mode_angle.append(math.degrees(math.acos(kdom[nm*nfreq+nf].x/freqs[nf])))
- tran = abs(coeffs[nm,nf,0])**2/input_flux[nf]
- mode_tran.append(0.5*tran if nm != 0 else tran)
- print("grating{}:, {:.5f}, {:.2f}, {:.8f}".format(nm,mode_wvl[-1],mode_angle[-1],mode_tran[-1]))
-
-tran_max = round(max(mode_tran),1)
+ for nf in range(nfreq):
+ mode_wvl.append(1 / freqs[nf])
+ mode_angle.append(math.degrees(math.acos(kdom[nm * nfreq + nf].x / freqs[nf])))
+ tran = abs(coeffs[nm, nf, 0]) ** 2 / input_flux[nf]
+ mode_tran.append(0.5 * tran if nm != 0 else tran)
+ print(
+ "grating{}:, {:.5f}, {:.2f}, {:.8f}".format(
+ nm, mode_wvl[-1], mode_angle[-1], mode_tran[-1]
+ )
+ )
+
+tran_max = round(max(mode_tran), 1)
plt.figure()
-plt.pcolormesh(np.reshape(mode_wvl,(nmode,nfreq)),
- np.reshape(mode_angle,(nmode,nfreq)),
- np.reshape(mode_tran,(nmode,nfreq)),
- cmap='Blues',
- shading='nearest',
- vmin=0,
- vmax=tran_max)
+plt.pcolormesh(
+ np.reshape(mode_wvl, (nmode, nfreq)),
+ np.reshape(mode_angle, (nmode, nfreq)),
+ np.reshape(mode_tran, (nmode, nfreq)),
+ cmap="Blues",
+ shading="nearest",
+ vmin=0,
+ vmax=tran_max,
+)
plt.axis([min(mode_wvl), max(mode_wvl), min(mode_angle), max(mode_angle)])
plt.xlabel("wavelength (μm)")
plt.ylabel("diffraction angle (degrees)")
-plt.xticks(list(np.arange(0.4,0.7,0.1)))
-plt.yticks(list(range(0,35,5)))
+plt.xticks(list(np.arange(0.4, 0.7, 0.1)))
+plt.yticks(list(range(0, 35, 5)))
plt.title("transmittance of diffraction orders")
cbar = plt.colorbar()
-cbar.set_ticks(list(np.arange(0,tran_max+0.1,0.1)))
-cbar.set_ticklabels(["{:.1f}".format(t) for t in np.arange(0,tran_max+0.1,0.1)])
+cbar.set_ticks(list(np.arange(0, tran_max + 0.1, 0.1)))
+cbar.set_ticklabels(["{:.1f}".format(t) for t in np.arange(0, tran_max + 0.1, 0.1)])
plt.show()
diff --git a/python/examples/binary_grating_n2f.ipynb b/python/examples/binary_grating_n2f.ipynb
index 771b5c682..892af4622 100644
--- a/python/examples/binary_grating_n2f.ipynb
+++ b/python/examples/binary_grating_n2f.ipynb
@@ -229,123 +229,190 @@
"from numpy import linalg as LA\n",
"import matplotlib.pyplot as plt\n",
"\n",
- "resolution = 25 # pixels/μm\n",
+ "resolution = 25 # pixels/μm\n",
"\n",
- "dpml = 1.0 # PML thickness\n",
- "dsub = 3.0 # substrate thickness\n",
- "dpad = 3.0 # padding between grating and PML\n",
- "gp = 10.0 # grating period\n",
- "gh = 0.5 # grating height\n",
- "gdc = 0.5 # grating duty cycle\n",
+ "dpml = 1.0 # PML thickness\n",
+ "dsub = 3.0 # substrate thickness\n",
+ "dpad = 3.0 # padding between grating and PML\n",
+ "gp = 10.0 # grating period\n",
+ "gh = 0.5 # grating height\n",
+ "gdc = 0.5 # grating duty cycle\n",
"\n",
- "nperiods = 10 # number of unit cells in finite periodic grating\n",
+ "nperiods = 10 # number of unit cells in finite periodic grating\n",
"\n",
- "ff_distance = 1e8 # far-field distance from near-field monitor\n",
- "ff_angle = 20 # far-field cone angle\n",
- "ff_npts = 500 # number of far-field points\n",
+ "ff_distance = 1e8 # far-field distance from near-field monitor\n",
+ "ff_angle = 20 # far-field cone angle\n",
+ "ff_npts = 500 # number of far-field points\n",
"\n",
- "ff_length = ff_distance*math.tan(math.radians(ff_angle))\n",
- "ff_res = ff_npts/ff_length\n",
+ "ff_length = ff_distance * math.tan(math.radians(ff_angle))\n",
+ "ff_res = ff_npts / ff_length\n",
"\n",
- "sx = dpml+dsub+gh+dpad+dpml\n",
+ "sx = dpml + dsub + gh + dpad + dpml\n",
"cell_size = mp.Vector3(sx)\n",
"\n",
- "pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]\n",
+ "pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]\n",
"\n",
"symmetries = [mp.Mirror(mp.Y)]\n",
"\n",
- "wvl_min = 0.4 # min wavelength\n",
- "wvl_max = 0.6 # max wavelength\n",
- "fmin = 1/wvl_max # min frequency\n",
- "fmax = 1/wvl_min # max frequency\n",
- "fcen = 0.5*(fmin+fmax) # center frequency\n",
- "df = fmax-fmin # frequency width\n",
+ "wvl_min = 0.4 # min wavelength\n",
+ "wvl_max = 0.6 # max wavelength\n",
+ "fmin = 1 / wvl_max # min frequency\n",
+ "fmax = 1 / wvl_min # max frequency\n",
+ "fcen = 0.5 * (fmin + fmax) # center frequency\n",
+ "df = fmax - fmin # frequency width\n",
"\n",
- "src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub)\n",
- "sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt)]\n",
+ "src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub)\n",
+ "sources = [\n",
+ " mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt)\n",
+ "]\n",
"\n",
"k_point = mp.Vector3()\n",
"\n",
"glass = mp.Medium(index=1.5)\n",
"\n",
- "sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " k_point=k_point,\n",
- " default_material=glass,\n",
- " sources=sources)\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=k_point,\n",
+ " default_material=glass,\n",
+ " sources=sources,\n",
+ ")\n",
"\n",
"nfreq = 21\n",
- "n2f_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad)\n",
+ "n2f_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad)\n",
"n2f_obj = sim.add_near2far(fcen, df, nfreq, mp.Near2FarRegion(center=n2f_pt))\n",
"\n",
"sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, n2f_pt, 1e-9))\n",
"\n",
- "ff_source = sim.get_farfields(n2f_obj, ff_res, center=mp.Vector3(ff_distance,0.5*ff_length), size=mp.Vector3(y=ff_length))\n",
+ "ff_source = sim.get_farfields(\n",
+ " n2f_obj,\n",
+ " ff_res,\n",
+ " center=mp.Vector3(ff_distance, 0.5 * ff_length),\n",
+ " size=mp.Vector3(y=ff_length),\n",
+ ")\n",
"\n",
"sim.reset_meep()\n",
"\n",
"### unit cell with periodic boundaries\n",
"\n",
"sy = gp\n",
- "cell_size = mp.Vector3(sx,sy)\n",
- "\n",
- "sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt, size=mp.Vector3(y=sy))]\n",
- "\n",
- "geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub))),\n",
- " mp.Block(material=glass, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh))]\n",
- "\n",
- "sim = mp.Simulation(resolution=resolution,\n",
- " split_chunks_evenly=True,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " k_point=k_point,\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
- "\n",
- "n2f_obj = sim.add_near2far(fcen, df, nfreq, mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy)), nperiods=nperiods)\n",
+ "cell_size = mp.Vector3(sx, sy)\n",
+ "\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ez,\n",
+ " center=src_pt,\n",
+ " size=mp.Vector3(y=sy),\n",
+ " )\n",
+ "]\n",
+ "\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " material=glass,\n",
+ " size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),\n",
+ " center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)),\n",
+ " ),\n",
+ " mp.Block(\n",
+ " material=glass,\n",
+ " size=mp.Vector3(gh, gdc * gp, mp.inf),\n",
+ " center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh),\n",
+ " ),\n",
+ "]\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " split_chunks_evenly=True,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " k_point=k_point,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ ")\n",
+ "\n",
+ "n2f_obj = sim.add_near2far(\n",
+ " fcen,\n",
+ " df,\n",
+ " nfreq,\n",
+ " mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy)),\n",
+ " nperiods=nperiods,\n",
+ ")\n",
"\n",
"sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, n2f_pt, 1e-9))\n",
"\n",
- "ff_unitcell = sim.get_farfields(n2f_obj, ff_res, center=mp.Vector3(ff_distance,0.5*ff_length), size=mp.Vector3(y=ff_length))\n",
+ "ff_unitcell = sim.get_farfields(\n",
+ " n2f_obj,\n",
+ " ff_res,\n",
+ " center=mp.Vector3(ff_distance, 0.5 * ff_length),\n",
+ " size=mp.Vector3(y=ff_length),\n",
+ ")\n",
"\n",
"sim.reset_meep()\n",
"\n",
"### finite periodic grating with flat surface termination extending into PML\n",
"\n",
- "num_cells = 2*nperiods+1\n",
- "sy = dpml+num_cells*gp+dpml\n",
- "cell_size = mp.Vector3(sx,sy)\n",
+ "num_cells = 2 * nperiods + 1\n",
+ "sy = dpml + num_cells * gp + dpml\n",
+ "cell_size = mp.Vector3(sx, sy)\n",
"\n",
"pml_layers = [mp.PML(thickness=dpml)]\n",
"\n",
- "sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt, size=mp.Vector3(y=sy-2*dpml))]\n",
- "\n",
- "geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub)))]\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ez,\n",
+ " center=src_pt,\n",
+ " size=mp.Vector3(y=sy - 2 * dpml),\n",
+ " )\n",
+ "]\n",
+ "\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " material=glass,\n",
+ " size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),\n",
+ " center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)),\n",
+ " )\n",
+ "]\n",
"\n",
"for j in range(num_cells):\n",
- " geometry.append(mp.Block(material=glass,\n",
- " size=mp.Vector3(gh,gdc*gp,mp.inf),\n",
- " center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,-0.5*sy+dpml+(j+0.5)*gp)))\n",
- "\n",
- "sim = mp.Simulation(resolution=resolution,\n",
- " split_chunks_evenly=True, \n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " k_point=k_point,\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
- "\n",
- "n2f_obj = sim.add_near2far(fcen, df, nfreq, mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy-2*dpml)))\n",
+ " geometry.append(\n",
+ " mp.Block(\n",
+ " material=glass,\n",
+ " size=mp.Vector3(gh, gdc * gp, mp.inf),\n",
+ " center=mp.Vector3(\n",
+ " -0.5 * sx + dpml + dsub + 0.5 * gh, -0.5 * sy + dpml + (j + 0.5) * gp\n",
+ " ),\n",
+ " )\n",
+ " )\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " split_chunks_evenly=True,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " k_point=k_point,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ ")\n",
+ "\n",
+ "n2f_obj = sim.add_near2far(\n",
+ " fcen, df, nfreq, mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy - 2 * dpml))\n",
+ ")\n",
"\n",
"sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, n2f_pt, 1e-9))\n",
"\n",
- "ff_supercell = sim.get_farfields(n2f_obj, ff_res, center=mp.Vector3(ff_distance,0.5*ff_length), size=mp.Vector3(y=ff_length))\n",
+ "ff_supercell = sim.get_farfields(\n",
+ " n2f_obj,\n",
+ " ff_res,\n",
+ " center=mp.Vector3(ff_distance, 0.5 * ff_length),\n",
+ " size=mp.Vector3(y=ff_length),\n",
+ ")\n",
"\n",
- "norm_err = LA.norm(ff_unitcell['Ez']-ff_supercell['Ez'])/nperiods\n",
- "print(\"error:, {}, {}\".format(nperiods,norm_err))"
+ "norm_err = LA.norm(ff_unitcell[\"Ez\"] - ff_supercell[\"Ez\"]) / nperiods\n",
+ "print(\"error:, {}, {}\".format(nperiods, norm_err))"
]
},
{
@@ -375,35 +442,35 @@
],
"source": [
"freqs = mp.get_near2far_freqs(n2f_obj)\n",
- "wvl = np.divide(1,freqs)\n",
- "ff_lengths = np.linspace(0,ff_length,ff_npts)\n",
- "angles = [math.degrees(math.atan(f)) for f in ff_lengths/ff_distance]\n",
+ "wvl = np.divide(1, freqs)\n",
+ "ff_lengths = np.linspace(0, ff_length, ff_npts)\n",
+ "angles = [math.degrees(math.atan(f)) for f in ff_lengths / ff_distance]\n",
"\n",
"wvl_slice = 0.5\n",
- "idx_slice = np.where(np.asarray(freqs) == 1/wvl_slice)[0][0]\n",
+ "idx_slice = np.where(np.asarray(freqs) == 1 / wvl_slice)[0][0]\n",
"\n",
- "rel_enh = np.absolute(ff_unitcell['Ez'])**2/np.absolute(ff_source['Ez'])**2\n",
+ "rel_enh = np.absolute(ff_unitcell[\"Ez\"]) ** 2 / np.absolute(ff_source[\"Ez\"]) ** 2\n",
"\n",
"plt.figure(dpi=150)\n",
"\n",
- "plt.subplot(1,2,1)\n",
- "plt.pcolormesh(wvl,angles,rel_enh,cmap='Blues',shading='flat')\n",
- "plt.axis([wvl_min,wvl_max,0,ff_angle])\n",
+ "plt.subplot(1, 2, 1)\n",
+ "plt.pcolormesh(wvl, angles, rel_enh, cmap=\"Blues\", shading=\"flat\")\n",
+ "plt.axis([wvl_min, wvl_max, 0, ff_angle])\n",
"plt.xlabel(\"wavelength (μm)\")\n",
"plt.ylabel(\"angle (degrees)\")\n",
- "plt.grid(linewidth=0.5,linestyle='--')\n",
- "plt.xticks([t for t in np.arange(wvl_min,wvl_max+0.1,0.1)])\n",
- "plt.yticks([t for t in range(0,ff_angle+1,10)])\n",
+ "plt.grid(linewidth=0.5, linestyle=\"--\")\n",
+ "plt.xticks([t for t in np.arange(wvl_min, wvl_max + 0.1, 0.1)])\n",
+ "plt.yticks([t for t in range(0, ff_angle + 1, 10)])\n",
"plt.title(\"far-field spectra\")\n",
"\n",
- "plt.subplot(1,2,2)\n",
- "plt.plot(angles,rel_enh[:,idx_slice],'bo-')\n",
- "plt.xlim(0,ff_angle)\n",
+ "plt.subplot(1, 2, 2)\n",
+ "plt.plot(angles, rel_enh[:, idx_slice], \"bo-\")\n",
+ "plt.xlim(0, ff_angle)\n",
"plt.ylim(0)\n",
- "plt.xticks([t for t in range(0,ff_angle+1,10)])\n",
+ "plt.xticks([t for t in range(0, ff_angle + 1, 10)])\n",
"plt.xlabel(\"angle (degrees)\")\n",
"plt.ylabel(\"relative enhancement\")\n",
- "plt.grid(axis='x',linewidth=0.5,linestyle='--')\n",
+ "plt.grid(axis=\"x\", linewidth=0.5, linestyle=\"--\")\n",
"plt.title(\"f.-f. spectra @ λ = {:.1} μm\".format(wvl_slice))\n",
"\n",
"plt.tight_layout(pad=0.5)\n",
diff --git a/python/examples/binary_grating_n2f.py b/python/examples/binary_grating_n2f.py
index 8ad39fdbb..f1b41450f 100644
--- a/python/examples/binary_grating_n2f.py
+++ b/python/examples/binary_grating_n2f.py
@@ -6,160 +6,221 @@
from numpy import linalg as LA
import matplotlib.pyplot as plt
-resolution = 25 # pixels/μm
+resolution = 25 # pixels/μm
-dpml = 1.0 # PML thickness
-dsub = 3.0 # substrate thickness
-dpad = 3.0 # padding between grating and PML
-gp = 10.0 # grating period
-gh = 0.5 # grating height
-gdc = 0.5 # grating duty cycle
+dpml = 1.0 # PML thickness
+dsub = 3.0 # substrate thickness
+dpad = 3.0 # padding between grating and PML
+gp = 10.0 # grating period
+gh = 0.5 # grating height
+gdc = 0.5 # grating duty cycle
-nperiods = 10 # number of unit cells in finite periodic grating
+nperiods = 10 # number of unit cells in finite periodic grating
-ff_distance = 1e8 # far-field distance from near-field monitor
-ff_angle = 20 # far-field cone angle
-ff_npts = 500 # number of far-field points
+ff_distance = 1e8 # far-field distance from near-field monitor
+ff_angle = 20 # far-field cone angle
+ff_npts = 500 # number of far-field points
-ff_length = ff_distance*math.tan(math.radians(ff_angle))
-ff_res = ff_npts/ff_length
+ff_length = ff_distance * math.tan(math.radians(ff_angle))
+ff_res = ff_npts / ff_length
-sx = dpml+dsub+gh+dpad+dpml
+sx = dpml + dsub + gh + dpad + dpml
cell_size = mp.Vector3(sx)
-pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]
+pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]
symmetries = [mp.Mirror(mp.Y)]
-wvl_min = 0.4 # min wavelength
-wvl_max = 0.6 # max wavelength
-fmin = 1/wvl_max # min frequency
-fmax = 1/wvl_min # max frequency
-fcen = 0.5*(fmin+fmax) # center frequency
-df = fmax-fmin # frequency width
+wvl_min = 0.4 # min wavelength
+wvl_max = 0.6 # max wavelength
+fmin = 1 / wvl_max # min frequency
+fmax = 1 / wvl_min # max frequency
+fcen = 0.5 * (fmin + fmax) # center frequency
+df = fmax - fmin # frequency width
-src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub)
-sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt)]
+src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub)
+sources = [
+ mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt)
+]
k_point = mp.Vector3()
glass = mp.Medium(index=1.5)
-sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- k_point=k_point,
- default_material=glass,
- sources=sources)
+sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ k_point=k_point,
+ default_material=glass,
+ sources=sources,
+)
nfreq = 21
-n2f_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad)
+n2f_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad)
n2f_obj = sim.add_near2far(fcen, df, nfreq, mp.Near2FarRegion(center=n2f_pt))
sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, n2f_pt, 1e-9))
-ff_source = sim.get_farfields(n2f_obj, ff_res, center=mp.Vector3(ff_distance,0.5*ff_length), size=mp.Vector3(y=ff_length))
+ff_source = sim.get_farfields(
+ n2f_obj,
+ ff_res,
+ center=mp.Vector3(ff_distance, 0.5 * ff_length),
+ size=mp.Vector3(y=ff_length),
+)
sim.reset_meep()
### unit cell with periodic boundaries
sy = gp
-cell_size = mp.Vector3(sx,sy)
-
-sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df, is_integrated=True),
- component=mp.Ez,
- center=src_pt,
- size=mp.Vector3(y=sy))]
-
-geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub))),
- mp.Block(material=glass, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh))]
-
-sim = mp.Simulation(resolution=resolution,
- split_chunks_evenly=True,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- geometry=geometry,
- k_point=k_point,
- sources=sources,
- symmetries=symmetries)
-
-n2f_obj = sim.add_near2far(fcen, df, nfreq, mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy)), nperiods=nperiods)
+cell_size = mp.Vector3(sx, sy)
+
+sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df, is_integrated=True),
+ component=mp.Ez,
+ center=src_pt,
+ size=mp.Vector3(y=sy),
+ )
+]
+
+geometry = [
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),
+ center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)),
+ ),
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(gh, gdc * gp, mp.inf),
+ center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh),
+ ),
+]
+
+sim = mp.Simulation(
+ resolution=resolution,
+ split_chunks_evenly=True,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ k_point=k_point,
+ sources=sources,
+ symmetries=symmetries,
+)
+
+n2f_obj = sim.add_near2far(
+ fcen,
+ df,
+ nfreq,
+ mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy)),
+ nperiods=nperiods,
+)
sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, n2f_pt, 1e-9))
-ff_unitcell = sim.get_farfields(n2f_obj, ff_res, center=mp.Vector3(ff_distance,0.5*ff_length), size=mp.Vector3(y=ff_length))
+ff_unitcell = sim.get_farfields(
+ n2f_obj,
+ ff_res,
+ center=mp.Vector3(ff_distance, 0.5 * ff_length),
+ size=mp.Vector3(y=ff_length),
+)
sim.reset_meep()
### finite periodic grating with flat surface termination extending into PML
-num_cells = 2*nperiods+1
-sy = dpml+num_cells*gp+dpml
-cell_size = mp.Vector3(sx,sy)
+num_cells = 2 * nperiods + 1
+sy = dpml + num_cells * gp + dpml
+cell_size = mp.Vector3(sx, sy)
pml_layers = [mp.PML(thickness=dpml)]
-sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df, is_integrated=True),
- component=mp.Ez,
- center=src_pt,
- size=mp.Vector3(y=sy))]
-
-geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub)))]
+sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df, is_integrated=True),
+ component=mp.Ez,
+ center=src_pt,
+ size=mp.Vector3(y=sy),
+ )
+]
+
+geometry = [
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),
+ center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)),
+ )
+]
for j in range(num_cells):
- geometry.append(mp.Block(material=glass,
- size=mp.Vector3(gh,gdc*gp,mp.inf),
- center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,-0.5*sy+dpml+(j+0.5)*gp)))
-
-sim = mp.Simulation(resolution=resolution,
- split_chunks_evenly=True,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- geometry=geometry,
- k_point=k_point,
- sources=sources,
- symmetries=symmetries)
-
-n2f_obj = sim.add_near2far(fcen, df, nfreq, mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy-2*dpml)))
+ geometry.append(
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(gh, gdc * gp, mp.inf),
+ center=mp.Vector3(
+ -0.5 * sx + dpml + dsub + 0.5 * gh, -0.5 * sy + dpml + (j + 0.5) * gp
+ ),
+ )
+ )
+
+sim = mp.Simulation(
+ resolution=resolution,
+ split_chunks_evenly=True,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ k_point=k_point,
+ sources=sources,
+ symmetries=symmetries,
+)
+
+n2f_obj = sim.add_near2far(
+ fcen, df, nfreq, mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy - 2 * dpml))
+)
sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, n2f_pt, 1e-9))
-ff_supercell = sim.get_farfields(n2f_obj, ff_res, center=mp.Vector3(ff_distance,0.5*ff_length), size=mp.Vector3(y=ff_length))
+ff_supercell = sim.get_farfields(
+ n2f_obj,
+ ff_res,
+ center=mp.Vector3(ff_distance, 0.5 * ff_length),
+ size=mp.Vector3(y=ff_length),
+)
-norm_err = LA.norm(ff_unitcell['Ez']-ff_supercell['Ez'])/nperiods
-print("error:, {}, {}".format(nperiods,norm_err))
+norm_err = LA.norm(ff_unitcell["Ez"] - ff_supercell["Ez"]) / nperiods
+print("error:, {}, {}".format(nperiods, norm_err))
freqs = mp.get_near2far_freqs(n2f_obj)
-wvl = np.divide(1,freqs)
-ff_lengths = np.linspace(0,ff_length,ff_npts)
-angles = [math.degrees(math.atan(f)) for f in ff_lengths/ff_distance]
+wvl = np.divide(1, freqs)
+ff_lengths = np.linspace(0, ff_length, ff_npts)
+angles = [math.degrees(math.atan(f)) for f in ff_lengths / ff_distance]
wvl_slice = 0.5
-idx_slice = np.where(np.asarray(freqs) == 1/wvl_slice)[0][0]
+idx_slice = np.where(np.asarray(freqs) == 1 / wvl_slice)[0][0]
-rel_enh = np.absolute(ff_unitcell['Ez'])**2/np.absolute(ff_source['Ez'])**2
+rel_enh = np.absolute(ff_unitcell["Ez"]) ** 2 / np.absolute(ff_source["Ez"]) ** 2
plt.figure(dpi=150)
-plt.subplot(1,2,1)
-plt.pcolormesh(wvl,angles,rel_enh,cmap='Blues',shading='flat')
-plt.axis([wvl_min,wvl_max,0,ff_angle])
+plt.subplot(1, 2, 1)
+plt.pcolormesh(wvl, angles, rel_enh, cmap="Blues", shading="flat")
+plt.axis([wvl_min, wvl_max, 0, ff_angle])
plt.xlabel("wavelength (μm)")
plt.ylabel("angle (degrees)")
-plt.grid(linewidth=0.5,linestyle='--')
-plt.xticks([t for t in np.arange(wvl_min,wvl_max+0.1,0.1)])
-plt.yticks([t for t in range(0,ff_angle+1,10)])
+plt.grid(linewidth=0.5, linestyle="--")
+plt.xticks([t for t in np.arange(wvl_min, wvl_max + 0.1, 0.1)])
+plt.yticks([t for t in range(0, ff_angle + 1, 10)])
plt.title("far-field spectra")
-plt.subplot(1,2,2)
-plt.plot(angles,rel_enh[:,idx_slice],'bo-')
-plt.xlim(0,ff_angle)
+plt.subplot(1, 2, 2)
+plt.plot(angles, rel_enh[:, idx_slice], "bo-")
+plt.xlim(0, ff_angle)
plt.ylim(0)
-plt.xticks([t for t in range(0,ff_angle+1,10)])
+plt.xticks([t for t in range(0, ff_angle + 1, 10)])
plt.xlabel("angle (degrees)")
plt.ylabel("relative enhancement")
-plt.grid(axis='x',linewidth=0.5,linestyle='--')
+plt.grid(axis="x", linewidth=0.5, linestyle="--")
plt.title("f.-f. spectra @ λ = {:.1} μm".format(wvl_slice))
plt.tight_layout(pad=0.5)
diff --git a/python/examples/binary_grating_oblique.ipynb b/python/examples/binary_grating_oblique.ipynb
index 494b44cb5..8454e37f7 100644
--- a/python/examples/binary_grating_oblique.ipynb
+++ b/python/examples/binary_grating_oblique.ipynb
@@ -61,20 +61,20 @@
"metadata": {},
"outputs": [],
"source": [
- "resolution = 50 # pixels/μm\n",
+ "resolution = 50 # pixels/μm\n",
"\n",
- "dpml = 1.0 # PML thickness\n",
- "dsub = 3.0 # substrate thickness\n",
- "dpad = 3.0 # length of padding between grating and PML\n",
- "gp = 10.0 # grating period\n",
- "gh = 0.5 # grating height\n",
- "gdc = 0.5 # grating duty cycle\n",
+ "dpml = 1.0 # PML thickness\n",
+ "dsub = 3.0 # substrate thickness\n",
+ "dpad = 3.0 # length of padding between grating and PML\n",
+ "gp = 10.0 # grating period\n",
+ "gh = 0.5 # grating height\n",
+ "gdc = 0.5 # grating duty cycle\n",
"\n",
- "sx = dpml+dsub+gh+dpad+dpml\n",
+ "sx = dpml + dsub + gh + dpad + dpml\n",
"sy = gp\n",
"\n",
- "cell_size = mp.Vector3(sx,sy,0)\n",
- "pml_layers = [mp.PML(thickness=dpml,direction=mp.X)] "
+ "cell_size = mp.Vector3(sx, sy, 0)\n",
+ "pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]"
]
},
{
@@ -93,34 +93,41 @@
"ng = 1.5\n",
"glass = mp.Medium(index=ng)\n",
"\n",
- "wvl = 0.5 # center wavelength\n",
- "fcen = 1/wvl # center frequency\n",
- "df = 0.05*fcen # frequency width\n",
+ "wvl = 0.5 # center wavelength\n",
+ "fcen = 1 / wvl # center frequency\n",
+ "df = 0.05 * fcen # frequency width\n",
"\n",
"# rotation angle of incident planewave; counter clockwise (CCW) about Z axis, 0 degrees along +X axis\n",
"theta_in = math.radians(10.7)\n",
"\n",
"# k (in source medium) with correct length (plane of incidence: XY)\n",
- "k = mp.Vector3(fcen*ng).rotate(mp.Vector3(z=1), theta_in)\n",
+ "k = mp.Vector3(fcen * ng).rotate(mp.Vector3(z=1), theta_in)\n",
"\n",
"symmetries = []\n",
"eig_parity = mp.ODD_Z\n",
"if theta_in == 0:\n",
- " k = mp.Vector3(0,0,0)\n",
- " symmetries = [mp.Mirror(mp.Y)]\n",
- " eig_parity += mp.EVEN_Y\n",
+ " k = mp.Vector3(0, 0, 0)\n",
+ " symmetries = [mp.Mirror(mp.Y)]\n",
+ " eig_parity += mp.EVEN_Y\n",
"\n",
- "def pw_amp(k,x0):\n",
- " def _pw_amp(x):\n",
- " return cmath.exp(1j*2*math.pi*k.dot(x+x0))\n",
- " return _pw_amp\n",
"\n",
- "src_pt = mp.Vector3(-0.5*sx+dpml+0.3*dsub,0,0)\n",
- "sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),\n",
- " component=mp.Ez,\n",
- " center=src_pt,\n",
- " size=mp.Vector3(0,sy,0),\n",
- " amp_func=pw_amp(k,src_pt))]"
+ "def pw_amp(k, x0):\n",
+ " def _pw_amp(x):\n",
+ " return cmath.exp(1j * 2 * math.pi * k.dot(x + x0))\n",
+ "\n",
+ " return _pw_amp\n",
+ "\n",
+ "\n",
+ "src_pt = mp.Vector3(-0.5 * sx + dpml + 0.3 * dsub, 0, 0)\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ez,\n",
+ " center=src_pt,\n",
+ " size=mp.Vector3(0, sy, 0),\n",
+ " amp_func=pw_amp(k, src_pt),\n",
+ " )\n",
+ "]"
]
},
{
@@ -136,16 +143,20 @@
"metadata": {},
"outputs": [],
"source": [
- "sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " k_point=k,\n",
- " default_material=glass,\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=k,\n",
+ " default_material=glass,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ ")\n",
"\n",
- "refl_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub,0,0)\n",
- "refl_flux = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=refl_pt, size=mp.Vector3(0,sy,0)))"
+ "refl_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub, 0, 0)\n",
+ "refl_flux = sim.add_flux(\n",
+ " fcen, 0, 1, mp.FluxRegion(center=refl_pt, size=mp.Vector3(0, sy, 0))\n",
+ ")"
]
},
{
@@ -229,22 +240,38 @@
"source": [
"sim.reset_meep()\n",
"\n",
- "geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub),0,0)),\n",
- " mp.Block(material=glass, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,0,0))]\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " material=glass,\n",
+ " size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),\n",
+ " center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub), 0, 0),\n",
+ " ),\n",
+ " mp.Block(\n",
+ " material=glass,\n",
+ " size=mp.Vector3(gh, gdc * gp, mp.inf),\n",
+ " center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh, 0, 0),\n",
+ " ),\n",
+ "]\n",
"\n",
- "sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " k_point=k,\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " k_point=k,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ ")\n",
"\n",
- "refl_flux = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=refl_pt, size=mp.Vector3(0,sy,0)))\n",
- "sim.load_minus_flux_data(refl_flux,input_flux_data)\n",
+ "refl_flux = sim.add_flux(\n",
+ " fcen, 0, 1, mp.FluxRegion(center=refl_pt, size=mp.Vector3(0, sy, 0))\n",
+ ")\n",
+ "sim.load_minus_flux_data(refl_flux, input_flux_data)\n",
"\n",
- "tran_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad,0,0)\n",
- "tran_flux = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0,sy,0)))"
+ "tran_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad, 0, 0)\n",
+ "tran_flux = sim.add_flux(\n",
+ " fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, sy, 0))\n",
+ ")"
]
},
{
@@ -345,23 +372,31 @@
],
"source": [
"# Calculate the number of reflected orders\n",
- "nm_r = np.floor((fcen*ng-k.y)*gp)-np.ceil((-fcen*ng-k.y)*gp) # number of reflected orders\n",
+ "nm_r = np.floor((fcen * ng - k.y) * gp) - np.ceil(\n",
+ " (-fcen * ng - k.y) * gp\n",
+ ") # number of reflected orders\n",
"if theta_in == 0:\n",
- " nm_r = nm_r/2 # since eig_parity removes degeneracy in y-direction\n",
+ " nm_r = nm_r / 2 # since eig_parity removes degeneracy in y-direction\n",
"nm_r = int(nm_r)\n",
"\n",
"# Extract the coefficients for the reflected orders\n",
- "res = sim.get_eigenmode_coefficients(refl_flux, range(1,nm_r+1), eig_parity=eig_parity)\n",
+ "res = sim.get_eigenmode_coefficients(\n",
+ " refl_flux, range(1, nm_r + 1), eig_parity=eig_parity\n",
+ ")\n",
"r_coeffs = res.alpha\n",
"\n",
"# Calculate the number of transmitted orders\n",
- "nm_t = np.floor((fcen-k.y)*gp)-np.ceil((-fcen-k.y)*gp) # number of transmitted orders\n",
+ "nm_t = np.floor((fcen - k.y) * gp) - np.ceil(\n",
+ " (-fcen - k.y) * gp\n",
+ ") # number of transmitted orders\n",
"if theta_in == 0:\n",
- " nm_t = nm_t/2 # since eig_parity removes degeneracy in y-direction\n",
+ " nm_t = nm_t / 2 # since eig_parity removes degeneracy in y-direction\n",
"nm_t = int(nm_t)\n",
"\n",
"# Extract the coefficients for the transmitted orders\n",
- "res = sim.get_eigenmode_coefficients(tran_flux, range(1,nm_t+1), eig_parity=eig_parity)\n",
+ "res = sim.get_eigenmode_coefficients(\n",
+ " tran_flux, range(1, nm_t + 1), eig_parity=eig_parity\n",
+ ")\n",
"t_coeffs = res.alpha"
]
},
@@ -391,20 +426,30 @@
}
],
"source": [
- "r_angle = np.squeeze([math.degrees(np.sign(r_kdom.y)*math.acos(r_kdom.x/(ng*fcen))) for r_kdom in res.kdom])\n",
- "Rmode = abs(r_coeffs[:,0,1])**2/input_flux[0]\n",
+ "r_angle = np.squeeze(\n",
+ " [\n",
+ " math.degrees(np.sign(r_kdom.y) * math.acos(r_kdom.x / (ng * fcen)))\n",
+ " for r_kdom in res.kdom\n",
+ " ]\n",
+ ")\n",
+ "Rmode = abs(r_coeffs[:, 0, 1]) ** 2 / input_flux[0]\n",
"idx_r = np.argsort(r_angle)\n",
"\n",
- "t_angle = np.squeeze([math.degrees(np.sign(t_kdom.y)*math.acos(t_kdom.x/fcen)) for t_kdom in res.kdom])\n",
- "Tmode = abs(t_coeffs[:,0,0])**2/input_flux[0]\n",
+ "t_angle = np.squeeze(\n",
+ " [\n",
+ " math.degrees(np.sign(t_kdom.y) * math.acos(t_kdom.x / fcen))\n",
+ " for t_kdom in res.kdom\n",
+ " ]\n",
+ ")\n",
+ "Tmode = abs(t_coeffs[:, 0, 0]) ** 2 / input_flux[0]\n",
"idx_t = np.argsort(t_angle)\n",
"\n",
"plt.figure(dpi=150)\n",
- "plt.plot(r_angle[idx_r],Rmode[idx_r], 'o-',color='blue',label='Reflection')\n",
- "plt.plot(t_angle[idx_t],Tmode[idx_t], 'o-',color='red',label='Transmission')\n",
+ "plt.plot(r_angle[idx_r], Rmode[idx_r], \"o-\", color=\"blue\", label=\"Reflection\")\n",
+ "plt.plot(t_angle[idx_t], Tmode[idx_t], \"o-\", color=\"red\", label=\"Transmission\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Diffraction Angle (degrees)')\n",
- "plt.ylabel('Relative Power (au)')\n",
+ "plt.xlabel(\"Diffraction Angle (degrees)\")\n",
+ "plt.ylabel(\"Relative Power (au)\")\n",
"plt.legend()\n",
"plt.show()"
]
@@ -431,12 +476,16 @@
}
],
"source": [
- "print(\"mode-coeff:, {:.6f}, {:.6f}, {:.6f}\".format(np.sum(Rmode),np.sum(Tmode),np.sum(Rmode)+np.sum(Tmode)))\n",
+ "print(\n",
+ " \"mode-coeff:, {:.6f}, {:.6f}, {:.6f}\".format(\n",
+ " np.sum(Rmode), np.sum(Tmode), np.sum(Rmode) + np.sum(Tmode)\n",
+ " )\n",
+ ")\n",
"r_flux = mp.get_fluxes(refl_flux)\n",
"t_flux = mp.get_fluxes(tran_flux)\n",
- "Rflux = -r_flux[0]/input_flux[0]\n",
- "Tflux = t_flux[0]/input_flux[0]\n",
- "print(\"poynting-flux:, {:.6f}, {:.6f}, {:.6f}\".format(Rflux,Tflux,Rflux+Tflux))"
+ "Rflux = -r_flux[0] / input_flux[0]\n",
+ "Tflux = t_flux[0] / input_flux[0]\n",
+ "print(\"poynting-flux:, {:.6f}, {:.6f}, {:.6f}\".format(Rflux, Tflux, Rflux + Tflux))"
]
}
],
diff --git a/python/examples/binary_grating_oblique.py b/python/examples/binary_grating_oblique.py
index 0214b6318..e4644c8fe 100644
--- a/python/examples/binary_grating_oblique.py
+++ b/python/examples/binary_grating_oblique.py
@@ -5,139 +5,176 @@
import cmath
import numpy as np
-resolution = 50 # pixels/μm
+resolution = 50 # pixels/μm
-dpml = 1.0 # PML thickness
-dsub = 3.0 # substrate thickness
-dpad = 3.0 # length of padding between grating and PML
-gp = 10.0 # grating period
-gh = 0.5 # grating height
-gdc = 0.5 # grating duty cycle
+dpml = 1.0 # PML thickness
+dsub = 3.0 # substrate thickness
+dpad = 3.0 # length of padding between grating and PML
+gp = 10.0 # grating period
+gh = 0.5 # grating height
+gdc = 0.5 # grating duty cycle
-sx = dpml+dsub+gh+dpad+dpml
+sx = dpml + dsub + gh + dpad + dpml
sy = gp
-cell_size = mp.Vector3(sx,sy,0)
-pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]
+cell_size = mp.Vector3(sx, sy, 0)
+pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]
-wvl = 0.5 # center wavelength
-fcen = 1/wvl # center frequency
-df = 0.05*fcen # frequency width
+wvl = 0.5 # center wavelength
+fcen = 1 / wvl # center frequency
+df = 0.05 * fcen # frequency width
ng = 1.5
glass = mp.Medium(index=ng)
use_cw_solver = False # CW solver or time stepping?
-tol = 1e-6 # CW solver tolerance
-max_iters = 2000 # CW solver max iterations
-L = 10 # CW solver L
+tol = 1e-6 # CW solver tolerance
+max_iters = 2000 # CW solver max iterations
+L = 10 # CW solver L
# rotation angle of incident planewave; counter clockwise (CCW) about Z axis, 0 degrees along +X axis
theta_in = math.radians(10.7)
# k (in source medium) with correct length (plane of incidence: XY)
-k = mp.Vector3(fcen*ng).rotate(mp.Vector3(z=1), theta_in)
+k = mp.Vector3(fcen * ng).rotate(mp.Vector3(z=1), theta_in)
symmetries = []
eig_parity = mp.ODD_Z
if theta_in == 0:
- k = mp.Vector3(0,0,0)
- symmetries = [mp.Mirror(mp.Y)]
- eig_parity += mp.EVEN_Y
-
-def pw_amp(k,x0):
- def _pw_amp(x):
- return cmath.exp(1j*2*math.pi*k.dot(x+x0))
- return _pw_amp
-
-src_pt = mp.Vector3(-0.5*sx+dpml+0.3*dsub,0,0)
-sources = [mp.Source(mp.ContinuousSource(fcen,fwidth=df) if use_cw_solver else mp.GaussianSource(fcen,fwidth=df),
- component=mp.Ez,
- center=src_pt,
- size=mp.Vector3(0,sy,0),
- amp_func=pw_amp(k,src_pt))]
-
-sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- k_point=k,
- default_material=glass,
- sources=sources,
- symmetries=symmetries)
-
-refl_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub,0,0)
-refl_flux = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=refl_pt, size=mp.Vector3(0,sy,0)))
+ k = mp.Vector3(0, 0, 0)
+ symmetries = [mp.Mirror(mp.Y)]
+ eig_parity += mp.EVEN_Y
+
+
+def pw_amp(k, x0):
+ def _pw_amp(x):
+ return cmath.exp(1j * 2 * math.pi * k.dot(x + x0))
+
+ return _pw_amp
+
+
+src_pt = mp.Vector3(-0.5 * sx + dpml + 0.3 * dsub, 0, 0)
+sources = [
+ mp.Source(
+ mp.ContinuousSource(fcen, fwidth=df)
+ if use_cw_solver
+ else mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=src_pt,
+ size=mp.Vector3(0, sy, 0),
+ amp_func=pw_amp(k, src_pt),
+ )
+]
+
+sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ k_point=k,
+ default_material=glass,
+ sources=sources,
+ symmetries=symmetries,
+)
+
+refl_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub, 0, 0)
+refl_flux = sim.add_flux(
+ fcen, 0, 1, mp.FluxRegion(center=refl_pt, size=mp.Vector3(0, sy, 0))
+)
if use_cw_solver:
- sim.init_sim()
- sim.solve_cw(tol, max_iters, L)
+ sim.init_sim()
+ sim.solve_cw(tol, max_iters, L)
else:
- sim.run(until_after_sources=100)
+ sim.run(until_after_sources=100)
input_flux = mp.get_fluxes(refl_flux)
input_flux_data = sim.get_flux_data(refl_flux)
sim.reset_meep()
-geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub),0,0)),
- mp.Block(material=glass, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,0,0))]
-
-sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- geometry=geometry,
- k_point=k,
- sources=sources,
- symmetries=symmetries)
-
-refl_flux = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=refl_pt, size=mp.Vector3(0,sy,0)))
-sim.load_minus_flux_data(refl_flux,input_flux_data)
-
-tran_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad,0,0)
-tran_flux = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0,sy,0)))
+geometry = [
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),
+ center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub), 0, 0),
+ ),
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(gh, gdc * gp, mp.inf),
+ center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh, 0, 0),
+ ),
+]
+
+sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ k_point=k,
+ sources=sources,
+ symmetries=symmetries,
+)
+
+refl_flux = sim.add_flux(
+ fcen, 0, 1, mp.FluxRegion(center=refl_pt, size=mp.Vector3(0, sy, 0))
+)
+sim.load_minus_flux_data(refl_flux, input_flux_data)
+
+tran_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad, 0, 0)
+tran_flux = sim.add_flux(
+ fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, sy, 0))
+)
if use_cw_solver:
- sim.init_sim()
- sim.solve_cw(tol, max_iters, L)
+ sim.init_sim()
+ sim.solve_cw(tol, max_iters, L)
else:
- sim.run(until_after_sources=200)
+ sim.run(until_after_sources=200)
-nm_r = np.floor((fcen*ng-k.y)*gp)-np.ceil((-fcen*ng-k.y)*gp) # number of reflected orders
+nm_r = np.floor((fcen * ng - k.y) * gp) - np.ceil(
+ (-fcen * ng - k.y) * gp
+) # number of reflected orders
if theta_in == 0:
- nm_r = nm_r/2 # since eig_parity removes degeneracy in y-direction
+ nm_r = nm_r / 2 # since eig_parity removes degeneracy in y-direction
nm_r = int(nm_r)
-res = sim.get_eigenmode_coefficients(refl_flux, range(1,nm_r+1), eig_parity=eig_parity)
+res = sim.get_eigenmode_coefficients(
+ refl_flux, range(1, nm_r + 1), eig_parity=eig_parity
+)
r_coeffs = res.alpha
Rsum = 0
for nm in range(nm_r):
- r_kdom = res.kdom[nm]
- Rmode = abs(r_coeffs[nm,0,1])**2/input_flux[0]
- r_angle = np.sign(r_kdom.y)*math.acos(r_kdom.x/(ng*fcen))
- print("refl:, {:2d}, {:6.2f}, {:.8f}".format(nm,math.degrees(r_angle),Rmode))
- Rsum += Rmode
-
-nm_t = np.floor((fcen-k.y)*gp)-np.ceil((-fcen-k.y)*gp) # number of transmitted orders
+ r_kdom = res.kdom[nm]
+ Rmode = abs(r_coeffs[nm, 0, 1]) ** 2 / input_flux[0]
+ r_angle = np.sign(r_kdom.y) * math.acos(r_kdom.x / (ng * fcen))
+ print("refl:, {:2d}, {:6.2f}, {:.8f}".format(nm, math.degrees(r_angle), Rmode))
+ Rsum += Rmode
+
+nm_t = np.floor((fcen - k.y) * gp) - np.ceil(
+ (-fcen - k.y) * gp
+) # number of transmitted orders
if theta_in == 0:
- nm_t = nm_t/2 # since eig_parity removes degeneracy in y-direction
+ nm_t = nm_t / 2 # since eig_parity removes degeneracy in y-direction
nm_t = int(nm_t)
-res = sim.get_eigenmode_coefficients(tran_flux, range(1,nm_t+1), eig_parity=eig_parity)
+res = sim.get_eigenmode_coefficients(
+ tran_flux, range(1, nm_t + 1), eig_parity=eig_parity
+)
t_coeffs = res.alpha
Tsum = 0
for nm in range(nm_t):
- t_kdom = res.kdom[nm]
- Tmode = abs(t_coeffs[nm,0,0])**2/input_flux[0]
- t_angle = np.sign(t_kdom.y)*math.acos(t_kdom.x/fcen)
- print("tran:, {:2d}, {:6.2f}, {:.8f}".format(nm,math.degrees(t_angle),Tmode))
- Tsum += Tmode
+ t_kdom = res.kdom[nm]
+ Tmode = abs(t_coeffs[nm, 0, 0]) ** 2 / input_flux[0]
+ t_angle = np.sign(t_kdom.y) * math.acos(t_kdom.x / fcen)
+ print("tran:, {:2d}, {:6.2f}, {:.8f}".format(nm, math.degrees(t_angle), Tmode))
+ Tsum += Tmode
-print("mode-coeff:, {:11.6f}, {:.6f}, {:.6f}".format(Rsum,Tsum,Rsum+Tsum))
+print("mode-coeff:, {:11.6f}, {:.6f}, {:.6f}".format(Rsum, Tsum, Rsum + Tsum))
r_flux = mp.get_fluxes(refl_flux)
t_flux = mp.get_fluxes(tran_flux)
-Rflux = -r_flux[0]/input_flux[0]
-Tflux = t_flux[0]/input_flux[0]
-print("poynting-flux:, {:.6f}, {:.6f}, {:.6f}".format(Rflux,Tflux,Rflux+Tflux))
+Rflux = -r_flux[0] / input_flux[0]
+Tflux = t_flux[0] / input_flux[0]
+print("poynting-flux:, {:.6f}, {:.6f}, {:.6f}".format(Rflux, Tflux, Rflux + Tflux))
diff --git a/python/examples/binary_grating_phasemap.ipynb b/python/examples/binary_grating_phasemap.ipynb
index f160cb571..295e97635 100644
--- a/python/examples/binary_grating_phasemap.ipynb
+++ b/python/examples/binary_grating_phasemap.ipynb
@@ -756,85 +756,114 @@
"import numpy.matlib\n",
"import matplotlib.pyplot as plt\n",
"\n",
- "resolution = 50 # pixels/μm\n",
+ "resolution = 50 # pixels/μm\n",
"\n",
- "dpml = 1.0 # PML thickness\n",
- "dsub = 3.0 # substrate thickness\n",
- "dpad = 3.0 # padding between grating and PML\n",
+ "dpml = 1.0 # PML thickness\n",
+ "dsub = 3.0 # substrate thickness\n",
+ "dpad = 3.0 # padding between grating and PML\n",
"\n",
- "wvl_min = 0.4 # min wavelength\n",
- "wvl_max = 0.6 # max wavelength\n",
- "fmin = 1/wvl_max # min frequency\n",
- "fmax = 1/wvl_min # max frequency\n",
- "fcen = 0.5*(fmin+fmax) # center frequency\n",
- "df = fmax-fmin # frequency width\n",
- "nfreq = 21 # number of frequency bins\n",
+ "wvl_min = 0.4 # min wavelength\n",
+ "wvl_max = 0.6 # max wavelength\n",
+ "fmin = 1 / wvl_max # min frequency\n",
+ "fmax = 1 / wvl_min # max frequency\n",
+ "fcen = 0.5 * (fmin + fmax) # center frequency\n",
+ "df = fmax - fmin # frequency width\n",
+ "nfreq = 21 # number of frequency bins\n",
"\n",
- "k_point = mp.Vector3(0,0,0)\n",
+ "k_point = mp.Vector3(0, 0, 0)\n",
"\n",
"glass = mp.Medium(index=1.5)\n",
"\n",
- "def grating(gp,gh,gdc,oddz):\n",
- " sx = dpml+dsub+gh+dpad+dpml\n",
- " sy = gp\n",
"\n",
- " cell_size = mp.Vector3(sx,sy,0)\n",
- " pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]\n",
+ "def grating(gp, gh, gdc, oddz):\n",
+ " sx = dpml + dsub + gh + dpad + dpml\n",
+ " sy = gp\n",
"\n",
- " src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub,0,0)\n",
- " sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez if oddz else mp.Hz, center=src_pt, size=mp.Vector3(0,sy,0))]\n",
+ " cell_size = mp.Vector3(sx, sy, 0)\n",
+ " pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]\n",
"\n",
- " symmetries=[mp.Mirror(mp.Y, phase=+1 if oddz else -1)]\n",
- " \n",
- " sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " k_point=k_point,\n",
- " default_material=glass,\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
+ " src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub, 0, 0)\n",
+ " sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ez if oddz else mp.Hz,\n",
+ " center=src_pt,\n",
+ " size=mp.Vector3(0, sy, 0),\n",
+ " )\n",
+ " ]\n",
"\n",
- " mon_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad,0,0)\n",
- " flux_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0,sy,0)))\n",
+ " symmetries = [mp.Mirror(mp.Y, phase=+1 if oddz else -1)]\n",
"\n",
- " sim.run(until_after_sources=100)\n",
+ " sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=k_point,\n",
+ " default_material=glass,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ " )\n",
"\n",
- " input_flux = mp.get_fluxes(flux_mon)\n",
+ " mon_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad, 0, 0)\n",
+ " flux_mon = sim.add_flux(\n",
+ " fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0, sy, 0))\n",
+ " )\n",
"\n",
- " sim.reset_meep()\n",
+ " sim.run(until_after_sources=100)\n",
"\n",
- " geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub),0,0)),\n",
- " mp.Block(material=glass, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,0,0))]\n",
+ " input_flux = mp.get_fluxes(flux_mon)\n",
"\n",
- " sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " k_point=k_point,\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
+ " sim.reset_meep()\n",
"\n",
- " mode_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0,sy,0)))\n",
+ " geometry = [\n",
+ " mp.Block(\n",
+ " material=glass,\n",
+ " size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),\n",
+ " center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub), 0, 0),\n",
+ " ),\n",
+ " mp.Block(\n",
+ " material=glass,\n",
+ " size=mp.Vector3(gh, gdc * gp, mp.inf),\n",
+ " center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh, 0, 0),\n",
+ " ),\n",
+ " ]\n",
"\n",
- " sim.run(until_after_sources=300)\n",
+ " sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " k_point=k_point,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ " )\n",
"\n",
- " freqs = mp.get_eigenmode_freqs(mode_mon)\n",
- " res = sim.get_eigenmode_coefficients(mode_mon, [1], eig_parity=mp.ODD_Z+mp.EVEN_Y if oddz else mp.EVEN_Z+mp.ODD_Y)\n",
- " coeffs = res.alpha\n",
+ " mode_mon = sim.add_flux(\n",
+ " fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0, sy, 0))\n",
+ " )\n",
"\n",
- " mode_wvl = [1/freqs[nf] for nf in range(nfreq)]\n",
- " mode_tran = [abs(coeffs[0,nf,0])**2/input_flux[nf] for nf in range(nfreq)]\n",
- " mode_phase = [np.angle(coeffs[0,nf,0]) for nf in range(nfreq)]\n",
+ " sim.run(until_after_sources=300)\n",
+ "\n",
+ " freqs = mp.get_eigenmode_freqs(mode_mon)\n",
+ " res = sim.get_eigenmode_coefficients(\n",
+ " mode_mon, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y if oddz else mp.EVEN_Z + mp.ODD_Y\n",
+ " )\n",
+ " coeffs = res.alpha\n",
+ "\n",
+ " mode_wvl = [1 / freqs[nf] for nf in range(nfreq)]\n",
+ " mode_tran = [abs(coeffs[0, nf, 0]) ** 2 / input_flux[nf] for nf in range(nfreq)]\n",
+ " mode_phase = [np.angle(coeffs[0, nf, 0]) for nf in range(nfreq)]\n",
+ "\n",
+ " return mode_wvl, mode_tran, mode_phase\n",
"\n",
- " return mode_wvl, mode_tran, mode_phase\n",
"\n",
"gp = 0.35\n",
- "gh = 0.6 \n",
- "gdc = np.linspace(0.1,1.0,10)\n",
- "mode_tran = np.empty((gdc.size,nfreq))\n",
- "mode_phase = np.empty((gdc.size,nfreq))\n",
+ "gh = 0.6\n",
+ "gdc = np.linspace(0.1, 1.0, 10)\n",
+ "mode_tran = np.empty((gdc.size, nfreq))\n",
+ "mode_phase = np.empty((gdc.size, nfreq))\n",
"for n in range(gdc.size):\n",
- " mode_wvl, mode_tran[n,:], mode_phase[n,:] = grating(gp,gh,gdc[n],True)"
+ " mode_wvl, mode_tran[n, :], mode_phase[n, :] = grating(gp, gh, gdc[n], True)"
]
},
{
@@ -866,29 +895,45 @@
],
"source": [
"plt.figure(dpi=150)\n",
- "plt.subplot(1,2,1)\n",
- "plt.pcolormesh(mode_wvl, gdc, mode_tran, cmap='hot_r', shading='gouraud', vmin=0, vmax=mode_tran.max())\n",
+ "plt.subplot(1, 2, 1)\n",
+ "plt.pcolormesh(\n",
+ " mode_wvl,\n",
+ " gdc,\n",
+ " mode_tran,\n",
+ " cmap=\"hot_r\",\n",
+ " shading=\"gouraud\",\n",
+ " vmin=0,\n",
+ " vmax=mode_tran.max(),\n",
+ ")\n",
"plt.axis([wvl_min, wvl_max, gdc[0], gdc[-1]])\n",
"plt.xlabel(\"wavelength (μm)\")\n",
- "plt.xticks([t for t in np.linspace(wvl_min,wvl_max,3)])\n",
+ "plt.xticks([t for t in np.linspace(wvl_min, wvl_max, 3)])\n",
"plt.ylabel(\"grating duty cycle\")\n",
- "plt.yticks([t for t in np.arange(gdc[0],gdc[-1]+0.1,0.1)])\n",
+ "plt.yticks([t for t in np.arange(gdc[0], gdc[-1] + 0.1, 0.1)])\n",
"plt.title(\"transmittance\")\n",
"cbar = plt.colorbar()\n",
- "cbar.set_ticks([t for t in np.arange(0,1.2,0.2)])\n",
- "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in np.linspace(0,1,6)])\n",
+ "cbar.set_ticks([t for t in np.arange(0, 1.2, 0.2)])\n",
+ "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in np.linspace(0, 1, 6)])\n",
"\n",
- "plt.subplot(1,2,2)\n",
- "plt.pcolormesh(mode_wvl, gdc, mode_phase, cmap='RdBu', shading='gouraud', vmin=mode_phase.min(), vmax=mode_phase.max())\n",
+ "plt.subplot(1, 2, 2)\n",
+ "plt.pcolormesh(\n",
+ " mode_wvl,\n",
+ " gdc,\n",
+ " mode_phase,\n",
+ " cmap=\"RdBu\",\n",
+ " shading=\"gouraud\",\n",
+ " vmin=mode_phase.min(),\n",
+ " vmax=mode_phase.max(),\n",
+ ")\n",
"plt.axis([wvl_min, wvl_max, gdc[0], gdc[-1]])\n",
"plt.xlabel(\"wavelength (μm)\")\n",
- "plt.xticks([t for t in np.linspace(wvl_min,wvl_max,3)])\n",
+ "plt.xticks([t for t in np.linspace(wvl_min, wvl_max, 3)])\n",
"plt.ylabel(\"grating duty cycle\")\n",
- "plt.yticks([t for t in np.arange(gdc[0],gdc[-1]+0.1,0.1)])\n",
+ "plt.yticks([t for t in np.arange(gdc[0], gdc[-1] + 0.1, 0.1)])\n",
"plt.title(\"phase (radians)\")\n",
"cbar = plt.colorbar()\n",
- "cbar.set_ticks([t for t in range(-3,4)])\n",
- "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in range(-3,4)])\n",
+ "cbar.set_ticks([t for t in range(-3, 4)])\n",
+ "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in range(-3, 4)])\n",
"\n",
"plt.subplots_adjust(wspace=0.5)"
]
diff --git a/python/examples/binary_grating_phasemap.py b/python/examples/binary_grating_phasemap.py
index c2d5688dd..6f23df160 100644
--- a/python/examples/binary_grating_phasemap.py
+++ b/python/examples/binary_grating_phasemap.py
@@ -6,116 +6,169 @@
import numpy.matlib
import argparse
-resolution = 60 # pixels/μm
+resolution = 60 # pixels/μm
-dpml = 1.0 # PML thickness
-dsub = 3.0 # substrate thickness
-dpad = 3.0 # padding between grating and PML
+dpml = 1.0 # PML thickness
+dsub = 3.0 # substrate thickness
+dpad = 3.0 # padding between grating and PML
-wvl_min = 0.4 # min wavelength
-wvl_max = 0.6 # max wavelength
-fmin = 1/wvl_max # min frequency
-fmax = 1/wvl_min # max frequency
-fcen = 0.5*(fmin+fmax) # center frequency
-df = fmax-fmin # frequency width
-nfreq = 21 # number of frequency bins
+wvl_min = 0.4 # min wavelength
+wvl_max = 0.6 # max wavelength
+fmin = 1 / wvl_max # min frequency
+fmax = 1 / wvl_min # max frequency
+fcen = 0.5 * (fmin + fmax) # center frequency
+df = fmax - fmin # frequency width
+nfreq = 21 # number of frequency bins
-k_point = mp.Vector3(0,0,0)
+k_point = mp.Vector3(0, 0, 0)
glass = mp.Medium(index=1.5)
-def grating(gp,gh,gdc,oddz):
- sx = dpml+dsub+gh+dpad+dpml
- sy = gp
-
- cell_size = mp.Vector3(sx,sy,0)
- pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]
-
- src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub,0,0)
- sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez if oddz else mp.Hz, center=src_pt, size=mp.Vector3(0,sy,0))]
-
- symmetries=[mp.Mirror(mp.Y, phase=+1 if oddz else -1)]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- k_point=k_point,
- default_material=glass,
- sources=sources,
- symmetries=symmetries)
-
- mon_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad,0,0)
- flux_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0,sy,0)))
-
- sim.run(until_after_sources=100)
-
- input_flux = mp.get_fluxes(flux_mon)
-
- sim.reset_meep()
-
- geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub),0,0)),
- mp.Block(material=glass, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,0,0))]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- geometry=geometry,
- k_point=k_point,
- sources=sources,
- symmetries=symmetries)
-
- mode_mon = sim.add_flux(fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0,sy,0)))
-
- sim.run(until_after_sources=300)
-
- freqs = mp.get_eigenmode_freqs(mode_mon)
- res = sim.get_eigenmode_coefficients(mode_mon, [1], eig_parity=mp.ODD_Z+mp.EVEN_Y if oddz else mp.EVEN_Z+mp.ODD_Y)
- coeffs = res.alpha
-
- mode_wvl = [1/freqs[nf] for nf in range(nfreq)]
- mode_tran = [abs(coeffs[0,nf,0])**2/input_flux[nf] for nf in range(nfreq)]
- mode_phase = [np.angle(coeffs[0,nf,0]) for nf in range(nfreq)]
-
- return mode_wvl, mode_tran, mode_phase
-
-if __name__ == '__main__':
- parser = argparse.ArgumentParser()
- parser.add_argument('-gp', type=float, default=0.35, help='grating periodicity (default: 0.35 μm)')
- parser.add_argument('-gh', type=float, default=0.6, help='grating height (default: 0.6 μm)')
- parser.add_argument('-oddz', action='store_true', default=False, help='oddz? (default: False)')
- args = parser.parse_args()
-
- gdc = np.arange(0.1,1.0,0.1)
- mode_tran = np.empty((gdc.size,nfreq))
- mode_phase = np.empty((gdc.size,nfreq))
- for n in range(gdc.size):
- mode_wvl, mode_tran[n,:], mode_phase[n,:] = grating(args.gp,args.gh,gdc[n],args.oddz)
-
- plt.figure(dpi=150)
-
- plt.subplot(1,2,1)
- plt.pcolormesh(mode_wvl, gdc, mode_tran, cmap='hot_r', shading='gouraud', vmin=0, vmax=mode_tran.max())
- plt.axis([wvl_min, wvl_max, gdc[0], gdc[-1]])
- plt.xlabel("wavelength (μm)")
- plt.xticks(list(np.arange(wvl_min,wvl_max+0.1,0.1)))
- plt.ylabel("grating duty cycle")
- plt.yticks(list(np.arange(gdc[0],gdc[-1]+0.1,0.1)))
- plt.title("transmittance")
- cbar = plt.colorbar()
- cbar.set_ticks(list(np.arange(0,1.2,0.2)))
- cbar.set_ticklabels(["{:.1f}".format(t) for t in np.arange(0,1.2,0.2)])
-
- plt.subplot(1,2,2)
- plt.pcolormesh(mode_wvl, gdc, mode_phase, cmap='RdBu', shading='gouraud', vmin=mode_phase.min(), vmax=mode_phase.max())
- plt.axis([wvl_min, wvl_max, gdc[0], gdc[-1]])
- plt.xlabel("wavelength (μm)")
- plt.xticks(list(np.arange(wvl_min,wvl_max+0.1,0.1)))
- plt.ylabel("grating duty cycle")
- plt.yticks(list(np.arange(gdc[0],gdc[-1]+0.1,0.1)))
- plt.title("phase (radians)")
- cbar = plt.colorbar()
- cbar.set_ticks(list(range(-3,4)))
- cbar.set_ticklabels(["{:.1f}".format(t) for t in range(-3,4)])
-
- plt.tight_layout()
- plt.show()
+
+def grating(gp, gh, gdc, oddz):
+ sx = dpml + dsub + gh + dpad + dpml
+ sy = gp
+
+ cell_size = mp.Vector3(sx, sy, 0)
+ pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]
+
+ src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub, 0, 0)
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez if oddz else mp.Hz,
+ center=src_pt,
+ size=mp.Vector3(0, sy, 0),
+ )
+ ]
+
+ symmetries = [mp.Mirror(mp.Y, phase=+1 if oddz else -1)]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ k_point=k_point,
+ default_material=glass,
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ mon_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad, 0, 0)
+ flux_mon = sim.add_flux(
+ fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0, sy, 0))
+ )
+
+ sim.run(until_after_sources=100)
+
+ input_flux = mp.get_fluxes(flux_mon)
+
+ sim.reset_meep()
+
+ geometry = [
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),
+ center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub), 0, 0),
+ ),
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(gh, gdc * gp, mp.inf),
+ center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh, 0, 0),
+ ),
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ k_point=k_point,
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ mode_mon = sim.add_flux(
+ fcen, df, nfreq, mp.FluxRegion(center=mon_pt, size=mp.Vector3(0, sy, 0))
+ )
+
+ sim.run(until_after_sources=300)
+
+ freqs = mp.get_eigenmode_freqs(mode_mon)
+ res = sim.get_eigenmode_coefficients(
+ mode_mon, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y if oddz else mp.EVEN_Z + mp.ODD_Y
+ )
+ coeffs = res.alpha
+
+ mode_wvl = [1 / freqs[nf] for nf in range(nfreq)]
+ mode_tran = [abs(coeffs[0, nf, 0]) ** 2 / input_flux[nf] for nf in range(nfreq)]
+ mode_phase = [np.angle(coeffs[0, nf, 0]) for nf in range(nfreq)]
+
+ return mode_wvl, mode_tran, mode_phase
+
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ "-gp", type=float, default=0.35, help="grating periodicity (default: 0.35 μm)"
+ )
+ parser.add_argument(
+ "-gh", type=float, default=0.6, help="grating height (default: 0.6 μm)"
+ )
+ parser.add_argument(
+ "-oddz", action="store_true", default=False, help="oddz? (default: False)"
+ )
+ args = parser.parse_args()
+
+ gdc = np.arange(0.1, 1.0, 0.1)
+ mode_tran = np.empty((gdc.size, nfreq))
+ mode_phase = np.empty((gdc.size, nfreq))
+ for n in range(gdc.size):
+ mode_wvl, mode_tran[n, :], mode_phase[n, :] = grating(
+ args.gp, args.gh, gdc[n], args.oddz
+ )
+
+ plt.figure(dpi=150)
+
+ plt.subplot(1, 2, 1)
+ plt.pcolormesh(
+ mode_wvl,
+ gdc,
+ mode_tran,
+ cmap="hot_r",
+ shading="gouraud",
+ vmin=0,
+ vmax=mode_tran.max(),
+ )
+ plt.axis([wvl_min, wvl_max, gdc[0], gdc[-1]])
+ plt.xlabel("wavelength (μm)")
+ plt.xticks(list(np.arange(wvl_min, wvl_max + 0.1, 0.1)))
+ plt.ylabel("grating duty cycle")
+ plt.yticks(list(np.arange(gdc[0], gdc[-1] + 0.1, 0.1)))
+ plt.title("transmittance")
+ cbar = plt.colorbar()
+ cbar.set_ticks(list(np.arange(0, 1.2, 0.2)))
+ cbar.set_ticklabels(["{:.1f}".format(t) for t in np.arange(0, 1.2, 0.2)])
+
+ plt.subplot(1, 2, 2)
+ plt.pcolormesh(
+ mode_wvl,
+ gdc,
+ mode_phase,
+ cmap="RdBu",
+ shading="gouraud",
+ vmin=mode_phase.min(),
+ vmax=mode_phase.max(),
+ )
+ plt.axis([wvl_min, wvl_max, gdc[0], gdc[-1]])
+ plt.xlabel("wavelength (μm)")
+ plt.xticks(list(np.arange(wvl_min, wvl_max + 0.1, 0.1)))
+ plt.ylabel("grating duty cycle")
+ plt.yticks(list(np.arange(gdc[0], gdc[-1] + 0.1, 0.1)))
+ plt.title("phase (radians)")
+ cbar = plt.colorbar()
+ cbar.set_ticks(list(range(-3, 4)))
+ cbar.set_ticklabels(["{:.1f}".format(t) for t in range(-3, 4)])
+
+ plt.tight_layout()
+ plt.show()
diff --git a/python/examples/cavity-farfield.ipynb b/python/examples/cavity-farfield.ipynb
index 08ea67ee1..2314b9090 100644
--- a/python/examples/cavity-farfield.ipynb
+++ b/python/examples/cavity-farfield.ipynb
@@ -178,53 +178,74 @@
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
- "resolution = 20 # pixels/μm\n",
+ "resolution = 20 # pixels/μm\n",
"\n",
- "eps = 13 # dielectric constant of waveguide\n",
- "w = 1.2 # width of waveguide\n",
- "r = 0.36 # radius of holes\n",
- "d = 1.4 # defect spacing (ordinary spacing = 1)\n",
- "N = 3 # number of holes on either side of defect\n",
+ "eps = 13 # dielectric constant of waveguide\n",
+ "w = 1.2 # width of waveguide\n",
+ "r = 0.36 # radius of holes\n",
+ "d = 1.4 # defect spacing (ordinary spacing = 1)\n",
+ "N = 3 # number of holes on either side of defect\n",
"\n",
- "sy = 6 # size of cell in y direction (perpendicular to wvg.)\n",
- "pad = 2 # padding between last hole and PML edge\n",
- "dpml = 1 # PML thickness\n",
- "sx = 2*(pad+dpml+N)+d-1 # size of cell in x direction\n",
+ "sy = 6 # size of cell in y direction (perpendicular to wvg.)\n",
+ "pad = 2 # padding between last hole and PML edge\n",
+ "dpml = 1 # PML thickness\n",
+ "sx = 2 * (pad + dpml + N) + d - 1 # size of cell in x direction\n",
"\n",
"cell = mp.Vector3(sx, sy, 0)\n",
"pml_layers = mp.PML(dpml)\n",
"\n",
- "geometry = [mp.Block(center=mp.Vector3(),\n",
- " size=mp.Vector3(mp.inf, w, mp.inf),\n",
- " material=mp.Medium(epsilon=eps))]\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(mp.inf, w, mp.inf),\n",
+ " material=mp.Medium(epsilon=eps),\n",
+ " )\n",
+ "]\n",
"\n",
"for i in range(N):\n",
- " geometry.append(mp.Cylinder(r, center=mp.Vector3(0.5*d+i)))\n",
- " geometry.append(mp.Cylinder(r, center=mp.Vector3(-0.5*d-i)))\n",
+ " geometry.append(mp.Cylinder(r, center=mp.Vector3(0.5 * d + i)))\n",
+ " geometry.append(mp.Cylinder(r, center=mp.Vector3(-0.5 * d - i)))\n",
"\n",
- "fcen = 0.25 # pulse center frequency\n",
- "df = 0.2 # pulse width (in frequency)\n",
+ "fcen = 0.25 # pulse center frequency\n",
+ "df = 0.2 # pulse width (in frequency)\n",
"\n",
- "sources = mp.Source(src=mp.GaussianSource(fcen, fwidth=df), component=mp.Hz, center=mp.Vector3())\n",
+ "sources = mp.Source(\n",
+ " src=mp.GaussianSource(fcen, fwidth=df), component=mp.Hz, center=mp.Vector3()\n",
+ ")\n",
"\n",
- "symmetries = [mp.Mirror(mp.X, phase=-1),\n",
- " mp.Mirror(mp.Y, phase=-1)]\n",
+ "symmetries = [mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=-1)]\n",
"\n",
- "sim = mp.Simulation(cell_size=cell,\n",
- " geometry=geometry,\n",
- " sources=[sources],\n",
- " symmetries=symmetries,\n",
- " boundary_layers=[pml_layers],\n",
- " resolution=resolution)\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " geometry=geometry,\n",
+ " sources=[sources],\n",
+ " symmetries=symmetries,\n",
+ " boundary_layers=[pml_layers],\n",
+ " resolution=resolution,\n",
+ ")\n",
"\n",
"d1 = 0.2\n",
"\n",
- "nearfield = sim.add_near2far(fcen, 0, 1,\n",
- " mp.Near2FarRegion(mp.Vector3(y=0.5*w+d1), size=mp.Vector3(sx-2*dpml)),\n",
- " mp.Near2FarRegion(mp.Vector3(-0.5*sx+dpml,0.5*w+0.5*d1), size=mp.Vector3(y=d1), weight=-1.0),\n",
- " mp.Near2FarRegion(mp.Vector3(0.5*sx-dpml,0.5*w+0.5*d1), size=mp.Vector3(y=d1)))\n",
+ "nearfield = sim.add_near2far(\n",
+ " fcen,\n",
+ " 0,\n",
+ " 1,\n",
+ " mp.Near2FarRegion(mp.Vector3(y=0.5 * w + d1), size=mp.Vector3(sx - 2 * dpml)),\n",
+ " mp.Near2FarRegion(\n",
+ " mp.Vector3(-0.5 * sx + dpml, 0.5 * w + 0.5 * d1),\n",
+ " size=mp.Vector3(y=d1),\n",
+ " weight=-1.0,\n",
+ " ),\n",
+ " mp.Near2FarRegion(\n",
+ " mp.Vector3(0.5 * sx - dpml, 0.5 * w + 0.5 * d1), size=mp.Vector3(y=d1)\n",
+ " ),\n",
+ ")\n",
"\n",
- "sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Hz, mp.Vector3(0.12,-0.37), 1e-8))"
+ "sim.run(\n",
+ " until_after_sources=mp.stop_when_fields_decayed(\n",
+ " 50, mp.Hz, mp.Vector3(0.12, -0.37), 1e-8\n",
+ " )\n",
+ ")"
]
},
{
@@ -259,11 +280,16 @@
"d2 = 20\n",
"h = 4\n",
"\n",
- "ff = sim.get_farfields(nearfield, resolution, center=mp.Vector3(y=0.5*w+d2+0.5*h), size=mp.Vector3(sx-2*dpml,h))\n",
+ "ff = sim.get_farfields(\n",
+ " nearfield,\n",
+ " resolution,\n",
+ " center=mp.Vector3(y=0.5 * w + d2 + 0.5 * h),\n",
+ " size=mp.Vector3(sx - 2 * dpml, h),\n",
+ ")\n",
"\n",
"plt.figure(dpi=200)\n",
- "plt.imshow(np.rot90(np.real(ff['Hz']),1),cmap='RdBu')\n",
- "plt.axis('off')"
+ "plt.imshow(np.rot90(np.real(ff[\"Hz\"]), 1), cmap=\"RdBu\")\n",
+ "plt.axis(\"off\")"
]
}
],
diff --git a/python/examples/cavity-farfield.py b/python/examples/cavity-farfield.py
index 46ee7624e..f7a061355 100644
--- a/python/examples/cavity-farfield.py
+++ b/python/examples/cavity-farfield.py
@@ -1,34 +1,39 @@
import meep as mp
import numpy as np
import matplotlib
-matplotlib.use('agg')
+
+matplotlib.use("agg")
import matplotlib.pyplot as plt
-resolution = 20 # pixels/μm
+resolution = 20 # pixels/μm
-fcen = 0.25 # pulse center frequency
-df = 0.2 # pulse width (in frequency)
+fcen = 0.25 # pulse center frequency
+df = 0.2 # pulse width (in frequency)
-eps = 13 # dielectric constant of waveguide
-w = 1.2 # width of waveguide
-r = 0.36 # radius of holes
-d = 1.4 # defect spacing (ordinary spacing = 1)
-N = 3 # number of holes on either side of defect
+eps = 13 # dielectric constant of waveguide
+w = 1.2 # width of waveguide
+r = 0.36 # radius of holes
+d = 1.4 # defect spacing (ordinary spacing = 1)
+N = 3 # number of holes on either side of defect
-dpad = 32 # padding between last hole and PML edge
-dpml = 0.5/(fcen-0.5*df) # PML thickness (> half the largest wavelength)
-sx = 2*(dpad+dpml+N) + d - 1 # size of cell in x direction
+dpad = 32 # padding between last hole and PML edge
+dpml = 0.5 / (fcen - 0.5 * df) # PML thickness (> half the largest wavelength)
+sx = 2 * (dpad + dpml + N) + d - 1 # size of cell in x direction
-d1 = 0.2 # y-distance from waveguide edge to near2far surface
-d2 = 2.0 # y-distance from near2far surface to far-field line
-sy = w + 2*(d1+d2+dpml) # size of cell in y direction (perpendicular to wvg.)
+d1 = 0.2 # y-distance from waveguide edge to near2far surface
+d2 = 2.0 # y-distance from near2far surface to far-field line
+sy = w + 2 * (d1 + d2 + dpml) # size of cell in y direction (perpendicular to wvg.)
-cell = mp.Vector3(sx,sy,0)
+cell = mp.Vector3(sx, sy, 0)
-geometry = [mp.Block(center=mp.Vector3(),
- size=mp.Vector3(mp.inf, w, mp.inf),
- material=mp.Medium(epsilon=eps))]
+geometry = [
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(mp.inf, w, mp.inf),
+ material=mp.Medium(epsilon=eps),
+ )
+]
for i in range(N):
geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)))
@@ -36,29 +41,36 @@
pml_layers = [mp.PML(dpml)]
-sources = [mp.Source(src=mp.GaussianSource(fcen, fwidth=df),
- component=mp.Hz,
- center=mp.Vector3())]
-
-symmetries = [mp.Mirror(mp.X, phase=-1),
- mp.Mirror(mp.Y, phase=-1)]
-
-sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- sources=sources,
- symmetries=symmetries,
- boundary_layers=pml_layers,
- resolution=resolution)
+sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=df), component=mp.Hz, center=mp.Vector3()
+ )
+]
+
+symmetries = [mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=-1)]
+
+sim = mp.Simulation(
+ cell_size=cell,
+ geometry=geometry,
+ sources=sources,
+ symmetries=symmetries,
+ boundary_layers=pml_layers,
+ resolution=resolution,
+)
nearfield = sim.add_near2far(
- fcen, 0, 1,
- mp.Near2FarRegion(mp.Vector3(0, 0.5*w + d1),
- size=mp.Vector3(sx - 2*dpml)),
- mp.Near2FarRegion(mp.Vector3(-0.5*sx + dpml, 0.5*w + 0.5*d1),
- size=mp.Vector3(0, d1),
- weight=-1.0),
- mp.Near2FarRegion(mp.Vector3(0.5*sx - dpml, 0.5*w + 0.5*d1),
- size=mp.Vector3(0, d1)),
+ fcen,
+ 0,
+ 1,
+ mp.Near2FarRegion(mp.Vector3(0, 0.5 * w + d1), size=mp.Vector3(sx - 2 * dpml)),
+ mp.Near2FarRegion(
+ mp.Vector3(-0.5 * sx + dpml, 0.5 * w + 0.5 * d1),
+ size=mp.Vector3(0, d1),
+ weight=-1.0,
+ ),
+ mp.Near2FarRegion(
+ mp.Vector3(0.5 * sx - dpml, 0.5 * w + 0.5 * d1), size=mp.Vector3(0, d1)
+ ),
)
mon = sim.add_dft_fields(
@@ -66,49 +78,57 @@
fcen,
0,
1,
- center=mp.Vector3(0, 0.5*w + d1 + d2),
- size=mp.Vector3(sx - 2*(dpad+dpml), 0)
+ center=mp.Vector3(0, 0.5 * w + d1 + d2),
+ size=mp.Vector3(sx - 2 * (dpad + dpml), 0),
)
sim.run(until_after_sources=mp.stop_when_dft_decayed())
sim.plot2D()
if mp.am_master():
- plt.savefig(f'cavity_farfield_plot2D_dpad{dpad}_{d1}_{d2}.png',bbox_inches='tight',dpi=150)
+ plt.savefig(
+ f"cavity_farfield_plot2D_dpad{dpad}_{d1}_{d2}.png", bbox_inches="tight", dpi=150
+ )
Hz_mon = sim.get_dft_array(mon, mp.Hz, 0)
-(x,y,z,w) = sim.get_array_metadata(dft_cell=mon)
+(x, y, z, w) = sim.get_array_metadata(dft_cell=mon)
ff = []
for xc in x:
- ff_pt = sim.get_farfield(nearfield, mp.Vector3(xc,y[0]))
+ ff_pt = sim.get_farfield(nearfield, mp.Vector3(xc, y[0]))
ff.append(ff_pt[5])
ff = np.array(ff)
if mp.am_master():
plt.figure()
- plt.subplot(1,3,1)
- plt.plot(np.real(Hz_mon),'bo-',label='DFT')
- plt.plot(np.real(ff),'ro-',label='N2F')
+ plt.subplot(1, 3, 1)
+ plt.plot(np.real(Hz_mon), "bo-", label="DFT")
+ plt.plot(np.real(ff), "ro-", label="N2F")
plt.legend()
- plt.xlabel('$x$ (μm)')
- plt.ylabel('real(Hz)')
+ plt.xlabel("$x$ (μm)")
+ plt.ylabel("real(Hz)")
- plt.subplot(1,3,2)
- plt.plot(np.imag(Hz_mon),'bo-',label='DFT')
- plt.plot(np.imag(ff),'ro-',label='N2F')
+ plt.subplot(1, 3, 2)
+ plt.plot(np.imag(Hz_mon), "bo-", label="DFT")
+ plt.plot(np.imag(ff), "ro-", label="N2F")
plt.legend()
- plt.xlabel('$x$ (μm)')
- plt.ylabel('imag(Hz)')
+ plt.xlabel("$x$ (μm)")
+ plt.ylabel("imag(Hz)")
- plt.subplot(1,3,3)
- plt.plot(np.abs(Hz_mon),'bo-',label='DFT')
- plt.plot(np.abs(ff),'ro-',label='N2F')
+ plt.subplot(1, 3, 3)
+ plt.plot(np.abs(Hz_mon), "bo-", label="DFT")
+ plt.plot(np.abs(ff), "ro-", label="N2F")
plt.legend()
- plt.xlabel('$x$ (μm)')
- plt.ylabel('|Hz|')
+ plt.xlabel("$x$ (μm)")
+ plt.ylabel("|Hz|")
- plt.suptitle(f'comparison of near2far and actual DFT fields\n dpad={dpad}, d1={d1}, d2={d2}')
+ plt.suptitle(
+ f"comparison of near2far and actual DFT fields\n dpad={dpad}, d1={d1}, d2={d2}"
+ )
plt.subplots_adjust(wspace=0.6)
- plt.savefig(f'test_Hz_dft_vs_n2f_res{resolution}_dpad{dpad}_d1{d1}_d2{d2}.png',bbox_inches='tight',dpi=150)
+ plt.savefig(
+ f"test_Hz_dft_vs_n2f_res{resolution}_dpad{dpad}_d1{d1}_d2{d2}.png",
+ bbox_inches="tight",
+ dpi=150,
+ )
diff --git a/python/examples/cavity_arrayslice.py b/python/examples/cavity_arrayslice.py
index 863fce44e..7e7627531 100644
--- a/python/examples/cavity_arrayslice.py
+++ b/python/examples/cavity_arrayslice.py
@@ -18,23 +18,23 @@
cell = mp.Vector3(sx, sy, 0)
-blk = mp.Block(size=mp.Vector3(mp.inf, w, mp.inf),
- material=mp.Medium(epsilon=eps))
+blk = mp.Block(size=mp.Vector3(mp.inf, w, mp.inf), material=mp.Medium(epsilon=eps))
geometry = [blk]
geometry.extend(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)) for i in range(3))
geometry.extend(mp.Cylinder(r, center=mp.Vector3(d / -2 - i)) for i in range(3))
-sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- sources=[],
- boundary_layers=[mp.PML(dpml)],
- resolution=20)
+sim = mp.Simulation(
+ cell_size=cell,
+ geometry=geometry,
+ sources=[],
+ boundary_layers=[mp.PML(dpml)],
+ resolution=20,
+)
# add sources
-sim.sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df),
- mp.Hz, mp.Vector3())]
+sim.sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Hz, mp.Vector3())]
# run until sources are finished (and no later)
sim._run_sources_until(0, [])
diff --git a/python/examples/cherenkov-radiation.py b/python/examples/cherenkov-radiation.py
index f6f165376..f2f17b5db 100644
--- a/python/examples/cherenkov-radiation.py
+++ b/python/examples/cherenkov-radiation.py
@@ -4,26 +4,38 @@
sx = 60
sy = 60
-cell_size = mp.Vector3(sx,sy,0)
+cell_size = mp.Vector3(sx, sy, 0)
dpml = 1.0
pml_layers = [mp.PML(thickness=dpml)]
-v = 0.7 # velocity of point charge
+v = 0.7 # velocity of point charge
symmetries = [mp.Mirror(direction=mp.Y)]
-sim = mp.Simulation(resolution=10,
- cell_size=cell_size,
- default_material=mp.Medium(index=1.5),
- symmetries=symmetries,
- boundary_layers=pml_layers)
+sim = mp.Simulation(
+ resolution=10,
+ cell_size=cell_size,
+ default_material=mp.Medium(index=1.5),
+ symmetries=symmetries,
+ boundary_layers=pml_layers,
+)
-def move_source(sim):
- sim.change_sources([mp.Source(mp.ContinuousSource(frequency=1e-10),
- component=mp.Ex,
- center=mp.Vector3(-0.5*sx+dpml+v*sim.meep_time()))])
-sim.run(move_source,
- mp.at_every(2, mp.output_png(mp.Hz, "-vZc dkbluered -M 1")),
- until=sx/v)
+def move_source(sim):
+ sim.change_sources(
+ [
+ mp.Source(
+ mp.ContinuousSource(frequency=1e-10),
+ component=mp.Ex,
+ center=mp.Vector3(-0.5 * sx + dpml + v * sim.meep_time()),
+ )
+ ]
+ )
+
+
+sim.run(
+ move_source,
+ mp.at_every(2, mp.output_png(mp.Hz, "-vZc dkbluered -M 1")),
+ until=sx / v,
+)
diff --git a/python/examples/chirped_pulse.py b/python/examples/chirped_pulse.py
index b768b6ab1..57064bf18 100644
--- a/python/examples/chirped_pulse.py
+++ b/python/examples/chirped_pulse.py
@@ -6,31 +6,43 @@
resolution = 40
dpml = 2
-pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]
+pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]
sx = 40
sy = 6
-cell_size = mp.Vector3(sx+2*dpml,sy)
+cell_size = mp.Vector3(sx + 2 * dpml, sy)
v0 = 1.0 # pulse center frequency
-a = 0.2 # Gaussian envelope half-width
+a = 0.2 # Gaussian envelope half-width
b = -0.5 # linear chirp rate (positive: up-chirp, negative: down-chirp)
-t0 = 15 # peak time
-
-chirp = lambda t: np.exp(1j*2*np.pi*v0*(t-t0)) * np.exp(-a*(t-t0)**2+1j*b*(t-t0)**2)
-
-sources = [mp.Source(src=mp.CustomSource(src_func=chirp),
- center=mp.Vector3(-0.5*sx),
- size=mp.Vector3(y=sy),
- component=mp.Ez)]
-
-sim = mp.Simulation(cell_size=cell_size,
- boundary_layers=pml_layers,
- resolution=resolution,
- k_point=mp.Vector3(),
- sources=sources,
- symmetries=[mp.Mirror(mp.Y)])
-
-sim.run(mp.in_volume(mp.Volume(center=mp.Vector3(), size=mp.Vector3(sx,sy)),
- mp.at_every(2.7, mp.output_efield_z)),
- until=t0+50)
+t0 = 15 # peak time
+
+chirp = lambda t: np.exp(1j * 2 * np.pi * v0 * (t - t0)) * np.exp(
+ -a * (t - t0) ** 2 + 1j * b * (t - t0) ** 2
+)
+
+sources = [
+ mp.Source(
+ src=mp.CustomSource(src_func=chirp),
+ center=mp.Vector3(-0.5 * sx),
+ size=mp.Vector3(y=sy),
+ component=mp.Ez,
+ )
+]
+
+sim = mp.Simulation(
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ resolution=resolution,
+ k_point=mp.Vector3(),
+ sources=sources,
+ symmetries=[mp.Mirror(mp.Y)],
+)
+
+sim.run(
+ mp.in_volume(
+ mp.Volume(center=mp.Vector3(), size=mp.Vector3(sx, sy)),
+ mp.at_every(2.7, mp.output_efield_z),
+ ),
+ until=t0 + 50,
+)
diff --git a/python/examples/coupler.ipynb b/python/examples/coupler.ipynb
index 8e4df35df..47de7645e 100644
--- a/python/examples/coupler.ipynb
+++ b/python/examples/coupler.ipynb
@@ -878,11 +878,11 @@
"import numpy\n",
"import matplotlib.pyplot as plt\n",
"\n",
- "res = 25 # pixels/μm\n",
- "three_d = False # 3d calculation?\n",
- "d = 0.12 # branch separation\n",
+ "res = 25 # pixels/μm\n",
+ "three_d = False # 3d calculation?\n",
+ "d = 0.12 # branch separation\n",
"\n",
- "gdsII_file = 'coupler.gds'\n",
+ "gdsII_file = \"coupler.gds\"\n",
"CELL_LAYER = 0\n",
"PORT1_LAYER = 1\n",
"PORT2_LAYER = 2\n",
@@ -898,24 +898,28 @@
"t_air = 0.78\n",
"\n",
"dpml = 1\n",
- "cell_thickness = dpml+t_oxide+t_Si+t_air+dpml\n",
+ "cell_thickness = dpml + t_oxide + t_Si + t_air + dpml\n",
"\n",
"oxide = mp.Medium(epsilon=2.25)\n",
- "silicon=mp.Medium(epsilon=12)\n",
+ "silicon = mp.Medium(epsilon=12)\n",
"\n",
"lcen = 1.55\n",
- "fcen = 1/lcen\n",
- "df = 0.2*fcen\n",
+ "fcen = 1 / lcen\n",
+ "df = 0.2 * fcen\n",
"\n",
- "cell_zmax = 0.5*cell_thickness if three_d else 0\n",
- "cell_zmin = -0.5*cell_thickness if three_d else 0\n",
- "si_zmax = 0.5*t_Si if three_d else 10\n",
- "si_zmin = -0.5*t_Si if three_d else -10\n",
+ "cell_zmax = 0.5 * cell_thickness if three_d else 0\n",
+ "cell_zmin = -0.5 * cell_thickness if three_d else 0\n",
+ "si_zmax = 0.5 * t_Si if three_d else 10\n",
+ "si_zmin = -0.5 * t_Si if three_d else -10\n",
"\n",
"# read cell size, volumes for source region and flux monitors,\n",
"# and coupler geometry from GDSII file\n",
- "upper_branch = mp.get_GDSII_prisms(silicon, gdsII_file, UPPER_BRANCH_LAYER, si_zmin, si_zmax)\n",
- "lower_branch = mp.get_GDSII_prisms(silicon, gdsII_file, LOWER_BRANCH_LAYER, si_zmin, si_zmax)\n",
+ "upper_branch = mp.get_GDSII_prisms(\n",
+ " silicon, gdsII_file, UPPER_BRANCH_LAYER, si_zmin, si_zmax\n",
+ ")\n",
+ "lower_branch = mp.get_GDSII_prisms(\n",
+ " silicon, gdsII_file, LOWER_BRANCH_LAYER, si_zmin, si_zmax\n",
+ ")\n",
"\n",
"cell = mp.GDSII_vol(gdsII_file, CELL_LAYER, cell_zmin, cell_zmax)\n",
"p1 = mp.GDSII_vol(gdsII_file, PORT1_LAYER, si_zmin, si_zmax)\n",
@@ -926,14 +930,14 @@
"\n",
"# displace upper and lower branches of coupler (as well as source and flux regions)\n",
"if d != default_d:\n",
- " delta_y = 0.5*(d-default_d)\n",
+ " delta_y = 0.5 * (d - default_d)\n",
" delta = mp.Vector3(y=delta_y)\n",
" p1.center += delta\n",
" p2.center -= delta\n",
" p3.center += delta\n",
" p4.center -= delta\n",
" src_vol.center += delta\n",
- " cell.size += 2*delta\n",
+ " cell.size += 2 * delta\n",
" for np in range(len(lower_branch)):\n",
" lower_branch[np].center -= delta\n",
" for nv in range(len(lower_branch[np].vertices)):\n",
@@ -943,26 +947,32 @@
" for nv in range(len(upper_branch[np].vertices)):\n",
" upper_branch[np].vertices[nv] += delta\n",
"\n",
- "geometry = upper_branch+lower_branch\n",
+ "geometry = upper_branch + lower_branch\n",
"\n",
"if three_d:\n",
- " oxide_center = mp.Vector3(z=-0.5*t_oxide)\n",
- " oxide_size = mp.Vector3(cell.size.x,cell.size.y,t_oxide)\n",
+ " oxide_center = mp.Vector3(z=-0.5 * t_oxide)\n",
+ " oxide_size = mp.Vector3(cell.size.x, cell.size.y, t_oxide)\n",
" oxide_layer = [mp.Block(material=oxide, center=oxide_center, size=oxide_size)]\n",
- " geometry = geometry+oxide_layer\n",
+ " geometry = geometry + oxide_layer\n",
"\n",
- "sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen,fwidth=df),\n",
- " size=src_vol.size,\n",
- " center=src_vol.center,\n",
- " eig_band=1,\n",
- " eig_parity=mp.NO_PARITY if three_d else mp.EVEN_Y+mp.ODD_Z,\n",
- " eig_match_freq=True)]\n",
+ "sources = [\n",
+ " mp.EigenModeSource(\n",
+ " src=mp.GaussianSource(fcen, fwidth=df),\n",
+ " size=src_vol.size,\n",
+ " center=src_vol.center,\n",
+ " eig_band=1,\n",
+ " eig_parity=mp.NO_PARITY if three_d else mp.EVEN_Y + mp.ODD_Z,\n",
+ " eig_match_freq=True,\n",
+ " )\n",
+ "]\n",
"\n",
- "sim = mp.Simulation(resolution=res,\n",
- " cell_size=cell.size,\n",
- " boundary_layers=[mp.PML(dpml)],\n",
- " sources=sources,\n",
- " geometry=geometry)\n",
+ "sim = mp.Simulation(\n",
+ " resolution=res,\n",
+ " cell_size=cell.size,\n",
+ " boundary_layers=[mp.PML(dpml)],\n",
+ " sources=sources,\n",
+ " geometry=geometry,\n",
+ ")\n",
"\n",
"mode1 = sim.add_mode_monitor(fcen, 0, 1, mp.ModeRegion(volume=p1))\n",
"mode2 = sim.add_mode_monitor(fcen, 0, 1, mp.ModeRegion(volume=p2))\n",
@@ -1007,17 +1017,25 @@
],
"source": [
"# S parameters\n",
- "p1_coeff = sim.get_eigenmode_coefficients(mode1, [1], eig_parity=mp.NO_PARITY if three_d else mp.EVEN_Y+mp.ODD_Z).alpha[0,0,0]\n",
- "p2_coeff = sim.get_eigenmode_coefficients(mode2, [1], eig_parity=mp.NO_PARITY if three_d else mp.EVEN_Y+mp.ODD_Z).alpha[0,0,1]\n",
- "p3_coeff = sim.get_eigenmode_coefficients(mode3, [1], eig_parity=mp.NO_PARITY if three_d else mp.EVEN_Y+mp.ODD_Z).alpha[0,0,0]\n",
- "p4_coeff = sim.get_eigenmode_coefficients(mode4, [1], eig_parity=mp.NO_PARITY if three_d else mp.EVEN_Y+mp.ODD_Z).alpha[0,0,0]\n",
+ "p1_coeff = sim.get_eigenmode_coefficients(\n",
+ " mode1, [1], eig_parity=mp.NO_PARITY if three_d else mp.EVEN_Y + mp.ODD_Z\n",
+ ").alpha[0, 0, 0]\n",
+ "p2_coeff = sim.get_eigenmode_coefficients(\n",
+ " mode2, [1], eig_parity=mp.NO_PARITY if three_d else mp.EVEN_Y + mp.ODD_Z\n",
+ ").alpha[0, 0, 1]\n",
+ "p3_coeff = sim.get_eigenmode_coefficients(\n",
+ " mode3, [1], eig_parity=mp.NO_PARITY if three_d else mp.EVEN_Y + mp.ODD_Z\n",
+ ").alpha[0, 0, 0]\n",
+ "p4_coeff = sim.get_eigenmode_coefficients(\n",
+ " mode4, [1], eig_parity=mp.NO_PARITY if three_d else mp.EVEN_Y + mp.ODD_Z\n",
+ ").alpha[0, 0, 0]\n",
"\n",
"# transmittance\n",
- "p2_trans = abs(p2_coeff)**2/abs(p1_coeff)**2\n",
- "p3_trans = abs(p3_coeff)**2/abs(p1_coeff)**2\n",
- "p4_trans = abs(p4_coeff)**2/abs(p1_coeff)**2\n",
+ "p2_trans = abs(p2_coeff) ** 2 / abs(p1_coeff) ** 2\n",
+ "p3_trans = abs(p3_coeff) ** 2 / abs(p1_coeff) ** 2\n",
+ "p4_trans = abs(p4_coeff) ** 2 / abs(p1_coeff) ** 2\n",
"\n",
- "print(\"trans:, {:.2f}, {:.6f}, {:.6f}, {:.6f}\".format(d,p2_trans,p3_trans,p4_trans))"
+ "print(\"trans:, {:.2f}, {:.6f}, {:.6f}, {:.6f}\".format(d, p2_trans, p3_trans, p4_trans))"
]
},
{
@@ -1913,28 +1931,41 @@
"source": [
"sim.reset_meep()\n",
"\n",
- "sources = [mp.EigenModeSource(src=mp.ContinuousSource(fcen,fwidth=df),\n",
- " size=src_vol.size,\n",
- " center=src_vol.center,\n",
- " eig_band=1,\n",
- " eig_parity=mp.EVEN_Y+mp.ODD_Z,\n",
- " eig_match_freq=True)]\n",
+ "sources = [\n",
+ " mp.EigenModeSource(\n",
+ " src=mp.ContinuousSource(fcen, fwidth=df),\n",
+ " size=src_vol.size,\n",
+ " center=src_vol.center,\n",
+ " eig_band=1,\n",
+ " eig_parity=mp.EVEN_Y + mp.ODD_Z,\n",
+ " eig_match_freq=True,\n",
+ " )\n",
+ "]\n",
"\n",
- "sim = mp.Simulation(resolution=res,\n",
- " cell_size=cell.size,\n",
- " boundary_layers=[mp.PML(dpml)],\n",
- " sources=sources,\n",
- " geometry=geometry)\n",
+ "sim = mp.Simulation(\n",
+ " resolution=res,\n",
+ " cell_size=cell.size,\n",
+ " boundary_layers=[mp.PML(dpml)],\n",
+ " sources=sources,\n",
+ " geometry=geometry,\n",
+ ")\n",
"\n",
- "sim.run(until=400) # arbitrary long run time to ensure that fields have reached steady state\n",
+ "sim.run(\n",
+ " until=400\n",
+ ") # arbitrary long run time to ensure that fields have reached steady state\n",
"\n",
"eps_data = sim.get_epsilon()\n",
"ez_data = numpy.real(sim.get_efield_z())\n",
"\n",
"plt.figure(dpi=200)\n",
- "plt.imshow(numpy.transpose(eps_data), interpolation='spline36', cmap='binary')\n",
- "plt.imshow(numpy.flipud(numpy.transpose(ez_data)), interpolation='spline36', cmap='RdBu', alpha=0.9)\n",
- "plt.axis('off')\n",
+ "plt.imshow(numpy.transpose(eps_data), interpolation=\"spline36\", cmap=\"binary\")\n",
+ "plt.imshow(\n",
+ " numpy.flipud(numpy.transpose(ez_data)),\n",
+ " interpolation=\"spline36\",\n",
+ " cmap=\"RdBu\",\n",
+ " alpha=0.9,\n",
+ ")\n",
+ "plt.axis(\"off\")\n",
"plt.show()"
]
},
diff --git a/python/examples/coupler.py b/python/examples/coupler.py
index b141681f9..3e2c4dfd3 100644
--- a/python/examples/coupler.py
+++ b/python/examples/coupler.py
@@ -1,7 +1,7 @@
import meep as mp
import argparse
-gdsII_file = 'coupler.gds'
+gdsII_file = "coupler.gds"
CELL_LAYER = 0
PORT1_LAYER = 1
PORT2_LAYER = 2
@@ -17,24 +17,29 @@
t_air = 0.78
dpml = 1
-cell_thickness = dpml+t_oxide+t_Si+t_air+dpml
+cell_thickness = dpml + t_oxide + t_Si + t_air + dpml
oxide = mp.Medium(epsilon=2.25)
silicon = mp.Medium(epsilon=12)
-fcen = 1/1.55
-df = 0.2*fcen
+fcen = 1 / 1.55
+df = 0.2 * fcen
+
def main(args):
- cell_zmax = 0.5*cell_thickness if args.three_d else 0
- cell_zmin = -0.5*cell_thickness if args.three_d else 0
- si_zmax = 0.5*t_Si if args.three_d else 10
- si_zmin = -0.5*t_Si if args.three_d else -10
+ cell_zmax = 0.5 * cell_thickness if args.three_d else 0
+ cell_zmin = -0.5 * cell_thickness if args.three_d else 0
+ si_zmax = 0.5 * t_Si if args.three_d else 10
+ si_zmin = -0.5 * t_Si if args.three_d else -10
# read cell size, volumes for source region and flux monitors,
# and coupler geometry from GDSII file
- upper_branch = mp.get_GDSII_prisms(silicon, gdsII_file, UPPER_BRANCH_LAYER, si_zmin, si_zmax)
- lower_branch = mp.get_GDSII_prisms(silicon, gdsII_file, LOWER_BRANCH_LAYER, si_zmin, si_zmax)
+ upper_branch = mp.get_GDSII_prisms(
+ silicon, gdsII_file, UPPER_BRANCH_LAYER, si_zmin, si_zmax
+ )
+ lower_branch = mp.get_GDSII_prisms(
+ silicon, gdsII_file, LOWER_BRANCH_LAYER, si_zmin, si_zmax
+ )
cell = mp.GDSII_vol(gdsII_file, CELL_LAYER, cell_zmin, cell_zmax)
p1 = mp.GDSII_vol(gdsII_file, PORT1_LAYER, si_zmin, si_zmax)
@@ -45,14 +50,14 @@ def main(args):
# displace upper and lower branches of coupler (as well as source and flux regions)
if args.d != default_d:
- delta_y = 0.5*(args.d-default_d)
+ delta_y = 0.5 * (args.d - default_d)
delta = mp.Vector3(y=delta_y)
p1.center += delta
p2.center -= delta
p3.center += delta
p4.center -= delta
src_vol.center += delta
- cell.size += 2*delta
+ cell.size += 2 * delta
for np in range(len(lower_branch)):
lower_branch[np].center -= delta
for nv in range(len(lower_branch[np].vertices)):
@@ -62,23 +67,29 @@ def main(args):
for nv in range(len(upper_branch[np].vertices)):
upper_branch[np].vertices[nv] += delta
- geometry = upper_branch+lower_branch
+ geometry = upper_branch + lower_branch
if args.three_d:
- oxide_center = mp.Vector3(z=-0.5*t_oxide)
- oxide_size = mp.Vector3(cell.size.x,cell.size.y,t_oxide)
+ oxide_center = mp.Vector3(z=-0.5 * t_oxide)
+ oxide_size = mp.Vector3(cell.size.x, cell.size.y, t_oxide)
oxide_layer = [mp.Block(material=oxide, center=oxide_center, size=oxide_size)]
- geometry = geometry+oxide_layer
-
- sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen,fwidth=df),
- volume=src_vol,
- eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y+mp.ODD_Z)]
-
- sim = mp.Simulation(resolution=args.res,
- cell_size=cell.size,
- boundary_layers=[mp.PML(dpml)],
- sources=sources,
- geometry=geometry)
+ geometry = geometry + oxide_layer
+
+ sources = [
+ mp.EigenModeSource(
+ src=mp.GaussianSource(fcen, fwidth=df),
+ volume=src_vol,
+ eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y + mp.ODD_Z,
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=args.res,
+ cell_size=cell.size,
+ boundary_layers=[mp.PML(dpml)],
+ sources=sources,
+ geometry=geometry,
+ )
mode1 = sim.add_mode_monitor(fcen, 0, 1, mp.ModeRegion(volume=p1))
mode2 = sim.add_mode_monitor(fcen, 0, 1, mp.ModeRegion(volume=p2))
@@ -88,22 +99,44 @@ def main(args):
sim.run(until_after_sources=100)
# S parameters
- p1_coeff = sim.get_eigenmode_coefficients(mode1, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y+mp.ODD_Z).alpha[0,0,0]
- p2_coeff = sim.get_eigenmode_coefficients(mode2, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y+mp.ODD_Z).alpha[0,0,1]
- p3_coeff = sim.get_eigenmode_coefficients(mode3, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y+mp.ODD_Z).alpha[0,0,0]
- p4_coeff = sim.get_eigenmode_coefficients(mode4, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y+mp.ODD_Z).alpha[0,0,0]
+ p1_coeff = sim.get_eigenmode_coefficients(
+ mode1, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y + mp.ODD_Z
+ ).alpha[0, 0, 0]
+ p2_coeff = sim.get_eigenmode_coefficients(
+ mode2, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y + mp.ODD_Z
+ ).alpha[0, 0, 1]
+ p3_coeff = sim.get_eigenmode_coefficients(
+ mode3, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y + mp.ODD_Z
+ ).alpha[0, 0, 0]
+ p4_coeff = sim.get_eigenmode_coefficients(
+ mode4, [1], eig_parity=mp.NO_PARITY if args.three_d else mp.EVEN_Y + mp.ODD_Z
+ ).alpha[0, 0, 0]
# transmittance
- p2_trans = abs(p2_coeff)**2/abs(p1_coeff)**2
- p3_trans = abs(p3_coeff)**2/abs(p1_coeff)**2
- p4_trans = abs(p4_coeff)**2/abs(p1_coeff)**2
+ p2_trans = abs(p2_coeff) ** 2 / abs(p1_coeff) ** 2
+ p3_trans = abs(p3_coeff) ** 2 / abs(p1_coeff) ** 2
+ p4_trans = abs(p4_coeff) ** 2 / abs(p1_coeff) ** 2
+
+ print(
+ "trans:, {:.2f}, {:.6f}, {:.6f}, {:.6f}".format(
+ args.d, p2_trans, p3_trans, p4_trans
+ )
+ )
- print("trans:, {:.2f}, {:.6f}, {:.6f}, {:.6f}".format(args.d,p2_trans,p3_trans,p4_trans))
-if __name__ == '__main__':
+if __name__ == "__main__":
parser = argparse.ArgumentParser()
- parser.add_argument('-res', type=int, default=50, help='resolution (default: 50 pixels/um)')
- parser.add_argument('-d', type=float, default=0.1, help='branch separation (default: 0.1 um)')
- parser.add_argument('--three_d', action='store_true', default=False, help='3d calculation? (default: False)')
+ parser.add_argument(
+ "-res", type=int, default=50, help="resolution (default: 50 pixels/um)"
+ )
+ parser.add_argument(
+ "-d", type=float, default=0.1, help="branch separation (default: 0.1 um)"
+ )
+ parser.add_argument(
+ "--three_d",
+ action="store_true",
+ default=False,
+ help="3d calculation? (default: False)",
+ )
args = parser.parse_args()
main(args)
diff --git a/python/examples/cyl-ellipsoid.py b/python/examples/cyl-ellipsoid.py
index 8a727163e..cf4be178f 100644
--- a/python/examples/cyl-ellipsoid.py
+++ b/python/examples/cyl-ellipsoid.py
@@ -9,7 +9,9 @@ def main():
e = mp.Ellipsoid(size=mp.Vector3(1, 2, mp.inf))
src_cmpt = mp.Hz
- sources = mp.Source(src=mp.GaussianSource(1, fwidth=0.1), component=src_cmpt, center=mp.Vector3())
+ sources = mp.Source(
+ src=mp.GaussianSource(1, fwidth=0.1), component=src_cmpt, center=mp.Vector3()
+ )
if src_cmpt == mp.Ez:
symmetries = [mp.Mirror(mp.X), mp.Mirror(mp.Y)]
@@ -17,26 +19,30 @@ def main():
if src_cmpt == mp.Hz:
symmetries = [mp.Mirror(mp.X, -1), mp.Mirror(mp.Y, -1)]
- sim = mp.Simulation(cell_size=mp.Vector3(10, 10),
- geometry=[c, e],
- boundary_layers=[mp.PML(1.0)],
- sources=[sources],
- symmetries=symmetries,
- resolution=100)
+ sim = mp.Simulation(
+ cell_size=mp.Vector3(10, 10),
+ geometry=[c, e],
+ boundary_layers=[mp.PML(1.0)],
+ sources=[sources],
+ symmetries=symmetries,
+ resolution=100,
+ )
def print_stuff(sim_obj):
v = mp.Vector3(4.13, 3.75, 0)
p = sim.get_field_point(src_cmpt, v)
print(f"t, Ez: {sim.round_time()} {p.real}+{p.imag}i")
- sim.run(mp.at_beginning(mp.output_epsilon),
- mp.at_every(0.25, print_stuff),
- mp.at_end(print_stuff),
- mp.at_end(mp.output_efield_z),
- until=23)
+ sim.run(
+ mp.at_beginning(mp.output_epsilon),
+ mp.at_every(0.25, print_stuff),
+ mp.at_end(print_stuff),
+ mp.at_end(mp.output_efield_z),
+ until=23,
+ )
print("stopped at meep time = {}".format(sim.round_time()))
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/python/examples/cylinder_cross_section.ipynb b/python/examples/cylinder_cross_section.ipynb
index e0dad84e6..991295a92 100644
--- a/python/examples/cylinder_cross_section.ipynb
+++ b/python/examples/cylinder_cross_section.ipynb
@@ -115,47 +115,67 @@
"r = 0.7 # radius of cylinder\n",
"h = 2.3 # height of cylinder\n",
"\n",
- "wvl_min = 2*np.pi*r/10\n",
- "wvl_max = 2*np.pi*r/2\n",
+ "wvl_min = 2 * np.pi * r / 10\n",
+ "wvl_max = 2 * np.pi * r / 2\n",
"\n",
- "frq_min = 1/wvl_max\n",
- "frq_max = 1/wvl_min\n",
- "frq_cen = 0.5*(frq_min+frq_max)\n",
- "dfrq = frq_max-frq_min\n",
+ "frq_min = 1 / wvl_max\n",
+ "frq_max = 1 / wvl_min\n",
+ "frq_cen = 0.5 * (frq_min + frq_max)\n",
+ "dfrq = frq_max - frq_min\n",
"nfrq = 100\n",
"\n",
"## at least 8 pixels per smallest wavelength, i.e. np.floor(8/wvl_min)\n",
"resolution = 25\n",
"\n",
- "dpml = 0.5*wvl_max\n",
- "dair = 1.0*wvl_max\n",
+ "dpml = 0.5 * wvl_max\n",
+ "dair = 1.0 * wvl_max\n",
"\n",
"pml_layers = [mp.PML(thickness=dpml)]\n",
"\n",
- "sr = r+dair+dpml\n",
- "sz = dpml+dair+h+dair+dpml\n",
- "cell_size = mp.Vector3(sr,0,sz)\n",
- "\n",
- "sources = [mp.Source(mp.GaussianSource(frq_cen,fwidth=dfrq,is_integrated=True),\n",
- " component=mp.Er,\n",
- " center=mp.Vector3(0.5*sr,0,-0.5*sz+dpml),\n",
- " size=mp.Vector3(sr)),\n",
- " mp.Source(mp.GaussianSource(frq_cen,fwidth=dfrq,is_integrated=True),\n",
- " component=mp.Ep,\n",
- " center=mp.Vector3(0.5*sr,0,-0.5*sz+dpml),\n",
- " size=mp.Vector3(sr),\n",
- " amplitude=-1j)]\n",
- "\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " resolution=resolution,\n",
- " sources=sources,\n",
- " dimensions=mp.CYLINDRICAL,\n",
- " m=-1)\n",
- "\n",
- "box_z1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(0.5*r,0,-0.5*h),size=mp.Vector3(r)))\n",
- "box_z2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(0.5*r,0,+0.5*h),size=mp.Vector3(r)))\n",
- "box_r = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(r),size=mp.Vector3(z=h)))\n",
+ "sr = r + dair + dpml\n",
+ "sz = dpml + dair + h + dair + dpml\n",
+ "cell_size = mp.Vector3(sr, 0, sz)\n",
+ "\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(frq_cen, fwidth=dfrq, is_integrated=True),\n",
+ " component=mp.Er,\n",
+ " center=mp.Vector3(0.5 * sr, 0, -0.5 * sz + dpml),\n",
+ " size=mp.Vector3(sr),\n",
+ " ),\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(frq_cen, fwidth=dfrq, is_integrated=True),\n",
+ " component=mp.Ep,\n",
+ " center=mp.Vector3(0.5 * sr, 0, -0.5 * sz + dpml),\n",
+ " size=mp.Vector3(sr),\n",
+ " amplitude=-1j,\n",
+ " ),\n",
+ "]\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " resolution=resolution,\n",
+ " sources=sources,\n",
+ " dimensions=mp.CYLINDRICAL,\n",
+ " m=-1,\n",
+ ")\n",
+ "\n",
+ "box_z1 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(0.5 * r, 0, -0.5 * h), size=mp.Vector3(r)),\n",
+ ")\n",
+ "box_z2 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(0.5 * r, 0, +0.5 * h), size=mp.Vector3(r)),\n",
+ ")\n",
+ "box_r = sim.add_flux(\n",
+ " frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(r), size=mp.Vector3(z=h))\n",
+ ")\n",
"\n",
"sim.run(until_after_sources=10)\n",
"\n",
@@ -169,21 +189,39 @@
"sim.reset_meep()\n",
"\n",
"n_cyl = 2.0\n",
- "geometry = [mp.Block(material=mp.Medium(index=n_cyl),\n",
- " center=mp.Vector3(0.5*r),\n",
- " size=mp.Vector3(r,0,h))]\n",
- "\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " geometry=geometry,\n",
- " boundary_layers=pml_layers,\n",
- " resolution=resolution,\n",
- " sources=sources,\n",
- " dimensions=mp.CYLINDRICAL,\n",
- " m=-1)\n",
- "\n",
- "box_z1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(0.5*r,0,-0.5*h),size=mp.Vector3(r)))\n",
- "box_z2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(0.5*r,0,+0.5*h),size=mp.Vector3(r)))\n",
- "box_r = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(r),size=mp.Vector3(z=h)))\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " material=mp.Medium(index=n_cyl),\n",
+ " center=mp.Vector3(0.5 * r),\n",
+ " size=mp.Vector3(r, 0, h),\n",
+ " )\n",
+ "]\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " geometry=geometry,\n",
+ " boundary_layers=pml_layers,\n",
+ " resolution=resolution,\n",
+ " sources=sources,\n",
+ " dimensions=mp.CYLINDRICAL,\n",
+ " m=-1,\n",
+ ")\n",
+ "\n",
+ "box_z1 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(0.5 * r, 0, -0.5 * h), size=mp.Vector3(r)),\n",
+ ")\n",
+ "box_z2 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(0.5 * r, 0, +0.5 * h), size=mp.Vector3(r)),\n",
+ ")\n",
+ "box_r = sim.add_flux(\n",
+ " frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(r), size=mp.Vector3(z=h))\n",
+ ")\n",
"\n",
"sim.load_minus_flux_data(box_z1, box_z1_data)\n",
"sim.load_minus_flux_data(box_z2, box_z2_data)\n",
@@ -195,16 +233,16 @@
"box_z2_flux = mp.get_fluxes(box_z2)\n",
"box_r_flux = mp.get_fluxes(box_r)\n",
"\n",
- "scatt_flux = np.asarray(box_z1_flux)-np.asarray(box_z2_flux)-np.asarray(box_r_flux)\n",
- "intensity = np.asarray(box_z1_flux0)/(np.pi*r**2)\n",
- "scatt_cross_section = np.divide(-scatt_flux,intensity)\n",
+ "scatt_flux = np.asarray(box_z1_flux) - np.asarray(box_z2_flux) - np.asarray(box_r_flux)\n",
+ "intensity = np.asarray(box_z1_flux0) / (np.pi * r**2)\n",
+ "scatt_cross_section = np.divide(-scatt_flux, intensity)\n",
"\n",
"plt.figure(dpi=150)\n",
- "plt.loglog(2*np.pi*r*np.asarray(freqs),scatt_cross_section,'bo-')\n",
- "plt.grid(True,which=\"both\",ls=\"-\")\n",
- "plt.xlabel('(cylinder circumference)/wavelength, 2πr/λ')\n",
- "plt.ylabel('scattering cross section, σ')\n",
- "plt.title('Scattering Cross Section of a Lossless Dielectric Cylinder')\n",
+ "plt.loglog(2 * np.pi * r * np.asarray(freqs), scatt_cross_section, \"bo-\")\n",
+ "plt.grid(True, which=\"both\", ls=\"-\")\n",
+ "plt.xlabel(\"(cylinder circumference)/wavelength, 2πr/λ\")\n",
+ "plt.ylabel(\"scattering cross section, σ\")\n",
+ "plt.title(\"Scattering Cross Section of a Lossless Dielectric Cylinder\")\n",
"plt.tight_layout()\n",
"plt.show()"
]
diff --git a/python/examples/cylinder_cross_section.py b/python/examples/cylinder_cross_section.py
index 73960e545..489ce3ff1 100644
--- a/python/examples/cylinder_cross_section.py
+++ b/python/examples/cylinder_cross_section.py
@@ -5,47 +5,67 @@
r = 0.7 # radius of cylinder
h = 2.3 # height of cylinder
-wvl_min = 2*np.pi*r/10
-wvl_max = 2*np.pi*r/2
+wvl_min = 2 * np.pi * r / 10
+wvl_max = 2 * np.pi * r / 2
-frq_min = 1/wvl_max
-frq_max = 1/wvl_min
-frq_cen = 0.5*(frq_min+frq_max)
-dfrq = frq_max-frq_min
+frq_min = 1 / wvl_max
+frq_max = 1 / wvl_min
+frq_cen = 0.5 * (frq_min + frq_max)
+dfrq = frq_max - frq_min
nfrq = 100
## at least 8 pixels per smallest wavelength, i.e. np.floor(8/wvl_min)
resolution = 25
-dpml = 0.5*wvl_max
-dair = 1.0*wvl_max
+dpml = 0.5 * wvl_max
+dair = 1.0 * wvl_max
pml_layers = [mp.PML(thickness=dpml)]
-sr = r+dair+dpml
-sz = dpml+dair+h+dair+dpml
-cell_size = mp.Vector3(sr,0,sz)
-
-sources = [mp.Source(mp.GaussianSource(frq_cen,fwidth=dfrq,is_integrated=True),
- component=mp.Er,
- center=mp.Vector3(0.5*sr,0,-0.5*sz+dpml),
- size=mp.Vector3(sr)),
- mp.Source(mp.GaussianSource(frq_cen,fwidth=dfrq,is_integrated=True),
- component=mp.Ep,
- center=mp.Vector3(0.5*sr,0,-0.5*sz+dpml),
- size=mp.Vector3(sr),
- amplitude=-1j)]
-
-sim = mp.Simulation(cell_size=cell_size,
- boundary_layers=pml_layers,
- resolution=resolution,
- sources=sources,
- dimensions=mp.CYLINDRICAL,
- m=-1)
-
-box_z1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(0.5*r,0,-0.5*h),size=mp.Vector3(r)))
-box_z2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(0.5*r,0,+0.5*h),size=mp.Vector3(r)))
-box_r = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(r),size=mp.Vector3(z=h)))
+sr = r + dair + dpml
+sz = dpml + dair + h + dair + dpml
+cell_size = mp.Vector3(sr, 0, sz)
+
+sources = [
+ mp.Source(
+ mp.GaussianSource(frq_cen, fwidth=dfrq, is_integrated=True),
+ component=mp.Er,
+ center=mp.Vector3(0.5 * sr, 0, -0.5 * sz + dpml),
+ size=mp.Vector3(sr),
+ ),
+ mp.Source(
+ mp.GaussianSource(frq_cen, fwidth=dfrq, is_integrated=True),
+ component=mp.Ep,
+ center=mp.Vector3(0.5 * sr, 0, -0.5 * sz + dpml),
+ size=mp.Vector3(sr),
+ amplitude=-1j,
+ ),
+]
+
+sim = mp.Simulation(
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ resolution=resolution,
+ sources=sources,
+ dimensions=mp.CYLINDRICAL,
+ m=-1,
+)
+
+box_z1 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(0.5 * r, 0, -0.5 * h), size=mp.Vector3(r)),
+)
+box_z2 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(0.5 * r, 0, +0.5 * h), size=mp.Vector3(r)),
+)
+box_r = sim.add_flux(
+ frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(r), size=mp.Vector3(z=h))
+)
sim.run(until_after_sources=10)
@@ -59,21 +79,39 @@
sim.reset_meep()
n_cyl = 2.0
-geometry = [mp.Block(material=mp.Medium(index=n_cyl),
- center=mp.Vector3(0.5*r),
- size=mp.Vector3(r,0,h))]
-
-sim = mp.Simulation(cell_size=cell_size,
- geometry=geometry,
- boundary_layers=pml_layers,
- resolution=resolution,
- sources=sources,
- dimensions=mp.CYLINDRICAL,
- m=-1)
-
-box_z1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(0.5*r,0,-0.5*h),size=mp.Vector3(r)))
-box_z2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(0.5*r,0,+0.5*h),size=mp.Vector3(r)))
-box_r = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(r),size=mp.Vector3(z=h)))
+geometry = [
+ mp.Block(
+ material=mp.Medium(index=n_cyl),
+ center=mp.Vector3(0.5 * r),
+ size=mp.Vector3(r, 0, h),
+ )
+]
+
+sim = mp.Simulation(
+ cell_size=cell_size,
+ geometry=geometry,
+ boundary_layers=pml_layers,
+ resolution=resolution,
+ sources=sources,
+ dimensions=mp.CYLINDRICAL,
+ m=-1,
+)
+
+box_z1 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(0.5 * r, 0, -0.5 * h), size=mp.Vector3(r)),
+)
+box_z2 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(0.5 * r, 0, +0.5 * h), size=mp.Vector3(r)),
+)
+box_r = sim.add_flux(
+ frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(r), size=mp.Vector3(z=h))
+)
sim.load_minus_flux_data(box_z1, box_z1_data)
sim.load_minus_flux_data(box_z2, box_z2_data)
@@ -85,16 +123,16 @@
box_z2_flux = mp.get_fluxes(box_z2)
box_r_flux = mp.get_fluxes(box_r)
-scatt_flux = np.asarray(box_z1_flux)-np.asarray(box_z2_flux)-np.asarray(box_r_flux)
-intensity = np.asarray(box_z1_flux0)/(np.pi*r**2)
-scatt_cross_section = np.divide(-scatt_flux,intensity)
+scatt_flux = np.asarray(box_z1_flux) - np.asarray(box_z2_flux) - np.asarray(box_r_flux)
+intensity = np.asarray(box_z1_flux0) / (np.pi * r**2)
+scatt_cross_section = np.divide(-scatt_flux, intensity)
if mp.am_master():
plt.figure(dpi=150)
- plt.loglog(2*np.pi*r*np.asarray(freqs),scatt_cross_section,'bo-')
- plt.grid(True,which="both",ls="-")
- plt.xlabel('(cylinder circumference)/wavelength, 2πr/λ')
- plt.ylabel('scattering cross section, σ')
- plt.title('Scattering Cross Section of a Lossless Dielectric Cylinder')
+ plt.loglog(2 * np.pi * r * np.asarray(freqs), scatt_cross_section, "bo-")
+ plt.grid(True, which="both", ls="-")
+ plt.xlabel("(cylinder circumference)/wavelength, 2πr/λ")
+ plt.ylabel("scattering cross section, σ")
+ plt.title("Scattering Cross Section of a Lossless Dielectric Cylinder")
plt.tight_layout()
plt.savefig("cylinder_cross_section.png")
diff --git a/python/examples/differential_cross_section.ipynb b/python/examples/differential_cross_section.ipynb
index 12f091350..e26b07def 100644
--- a/python/examples/differential_cross_section.ipynb
+++ b/python/examples/differential_cross_section.ipynb
@@ -312,44 +312,72 @@
"\n",
"frq_cen = 1.0\n",
"\n",
- "resolution = 20 # pixels/um\n",
+ "resolution = 20 # pixels/um\n",
"\n",
"dpml = 0.5\n",
- "dair = 1.5 # at least 0.5/frq_cen padding between source and near-field monitor\n",
+ "dair = 1.5 # at least 0.5/frq_cen padding between source and near-field monitor\n",
"\n",
"pml_layers = [mp.PML(thickness=dpml)]\n",
"\n",
- "s = 2*(dpml+dair+r)\n",
- "cell_size = mp.Vector3(s,s,s)\n",
+ "s = 2 * (dpml + dair + r)\n",
+ "cell_size = mp.Vector3(s, s, s)\n",
"\n",
"# circularly-polarized source with propagation axis along x\n",
"# is_integrated=True necessary for any planewave source extending into PML\n",
- "sources = [mp.Source(mp.GaussianSource(frq_cen,fwidth=0.2*frq_cen,is_integrated=True),\n",
- " center=mp.Vector3(-0.5*s+dpml),\n",
- " size=mp.Vector3(0,s,s),\n",
- " component=mp.Ez),\n",
- " mp.Source(mp.GaussianSource(frq_cen,fwidth=0.2*frq_cen,is_integrated=True),\n",
- " center=mp.Vector3(-0.5*s+dpml),\n",
- " size=mp.Vector3(0,s,s),\n",
- " component=mp.Ey,\n",
- " amplitude=1j)]\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(frq_cen, fwidth=0.2 * frq_cen, is_integrated=True),\n",
+ " center=mp.Vector3(-0.5 * s + dpml),\n",
+ " size=mp.Vector3(0, s, s),\n",
+ " component=mp.Ez,\n",
+ " ),\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(frq_cen, fwidth=0.2 * frq_cen, is_integrated=True),\n",
+ " center=mp.Vector3(-0.5 * s + dpml),\n",
+ " size=mp.Vector3(0, s, s),\n",
+ " component=mp.Ey,\n",
+ " amplitude=1j,\n",
+ " ),\n",
+ "]\n",
"\n",
- "sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " sources=sources,\n",
- " k_point=mp.Vector3())\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=sources,\n",
+ " k_point=mp.Vector3(),\n",
+ ")\n",
"\n",
- "box_flux = sim.add_flux(frq_cen, 0, 1,\n",
- " mp.FluxRegion(center=mp.Vector3(x=-2*r),size=mp.Vector3(0,4*r,4*r)))\n",
+ "box_flux = sim.add_flux(\n",
+ " frq_cen,\n",
+ " 0,\n",
+ " 1,\n",
+ " mp.FluxRegion(center=mp.Vector3(x=-2 * r), size=mp.Vector3(0, 4 * r, 4 * r)),\n",
+ ")\n",
"\n",
- "nearfield_box = sim.add_near2far(frq_cen, 0, 1,\n",
- " mp.Near2FarRegion(center=mp.Vector3(x=-2*r),size=mp.Vector3(0,4*r,4*r),weight=+1),\n",
- " mp.Near2FarRegion(center=mp.Vector3(x=+2*r),size=mp.Vector3(0,4*r,4*r),weight=-1),\n",
- " mp.Near2FarRegion(center=mp.Vector3(y=-2*r),size=mp.Vector3(4*r,0,4*r),weight=+1),\n",
- " mp.Near2FarRegion(center=mp.Vector3(y=+2*r),size=mp.Vector3(4*r,0,4*r),weight=-1),\n",
- " mp.Near2FarRegion(center=mp.Vector3(z=-2*r),size=mp.Vector3(4*r,4*r,0),weight=+1),\n",
- " mp.Near2FarRegion(center=mp.Vector3(z=+2*r),size=mp.Vector3(4*r,4*r,0),weight=-1))\n",
+ "nearfield_box = sim.add_near2far(\n",
+ " frq_cen,\n",
+ " 0,\n",
+ " 1,\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(x=-2 * r), size=mp.Vector3(0, 4 * r, 4 * r), weight=+1\n",
+ " ),\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(x=+2 * r), size=mp.Vector3(0, 4 * r, 4 * r), weight=-1\n",
+ " ),\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(y=-2 * r), size=mp.Vector3(4 * r, 0, 4 * r), weight=+1\n",
+ " ),\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(y=+2 * r), size=mp.Vector3(4 * r, 0, 4 * r), weight=-1\n",
+ " ),\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(z=-2 * r), size=mp.Vector3(4 * r, 4 * r, 0), weight=+1\n",
+ " ),\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(z=+2 * r), size=mp.Vector3(4 * r, 4 * r, 0), weight=-1\n",
+ " ),\n",
+ ")\n",
"\n",
"sim.run(until_after_sources=10)\n",
"\n",
@@ -359,54 +387,85 @@
"sim.reset_meep()\n",
"\n",
"n_sphere = 2.0\n",
- "geometry = [mp.Sphere(material=mp.Medium(index=n_sphere),\n",
- " center=mp.Vector3(),\n",
- " radius=r)]\n",
+ "geometry = [\n",
+ " mp.Sphere(material=mp.Medium(index=n_sphere), center=mp.Vector3(), radius=r)\n",
+ "]\n",
"\n",
- "sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " sources=sources,\n",
- " k_point=mp.Vector3(),\n",
- " geometry=geometry)\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=sources,\n",
+ " k_point=mp.Vector3(),\n",
+ " geometry=geometry,\n",
+ ")\n",
"\n",
- "nearfield_box = sim.add_near2far(frq_cen, 0, 1,\n",
- " mp.Near2FarRegion(center=mp.Vector3(x=-2*r),size=mp.Vector3(0,4*r,4*r),weight=+1),\n",
- " mp.Near2FarRegion(center=mp.Vector3(x=+2*r),size=mp.Vector3(0,4*r,4*r),weight=-1),\n",
- " mp.Near2FarRegion(center=mp.Vector3(y=-2*r),size=mp.Vector3(4*r,0,4*r),weight=+1),\n",
- " mp.Near2FarRegion(center=mp.Vector3(y=+2*r),size=mp.Vector3(4*r,0,4*r),weight=-1),\n",
- " mp.Near2FarRegion(center=mp.Vector3(z=-2*r),size=mp.Vector3(4*r,4*r,0),weight=+1),\n",
- " mp.Near2FarRegion(center=mp.Vector3(z=+2*r),size=mp.Vector3(4*r,4*r,0),weight=-1))\n",
+ "nearfield_box = sim.add_near2far(\n",
+ " frq_cen,\n",
+ " 0,\n",
+ " 1,\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(x=-2 * r), size=mp.Vector3(0, 4 * r, 4 * r), weight=+1\n",
+ " ),\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(x=+2 * r), size=mp.Vector3(0, 4 * r, 4 * r), weight=-1\n",
+ " ),\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(y=-2 * r), size=mp.Vector3(4 * r, 0, 4 * r), weight=+1\n",
+ " ),\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(y=+2 * r), size=mp.Vector3(4 * r, 0, 4 * r), weight=-1\n",
+ " ),\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(z=-2 * r), size=mp.Vector3(4 * r, 4 * r, 0), weight=+1\n",
+ " ),\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(z=+2 * r), size=mp.Vector3(4 * r, 4 * r, 0), weight=-1\n",
+ " ),\n",
+ ")\n",
"\n",
"sim.load_minus_near2far_data(nearfield_box, nearfield_box_data)\n",
"\n",
"sim.run(until_after_sources=100)\n",
"\n",
- "npts = 100 # number of points in [0,pi) range of polar angles to sample far fields along semi-circle\n",
- "angles = np.pi/npts*np.arange(npts)\n",
+ "npts = 100 # number of points in [0,pi) range of polar angles to sample far fields along semi-circle\n",
+ "angles = np.pi / npts * np.arange(npts)\n",
"\n",
- "ff_r = 10000*r # radius of far-field semi-circle\n",
+ "ff_r = 10000 * r # radius of far-field semi-circle\n",
"\n",
- "E = np.zeros((npts,3),dtype=np.complex128)\n",
- "H = np.zeros((npts,3),dtype=np.complex128)\n",
+ "E = np.zeros((npts, 3), dtype=np.complex128)\n",
+ "H = np.zeros((npts, 3), dtype=np.complex128)\n",
"for n in range(npts):\n",
- " ff = sim.get_farfield(nearfield_box, ff_r*mp.Vector3(np.cos(angles[n]),0,np.sin(angles[n])))\n",
- " E[n,:] = [np.conj(ff[j]) for j in range(3)]\n",
- " H[n,:] = [ff[j+3] for j in range(3)]\n",
+ " ff = sim.get_farfield(\n",
+ " nearfield_box, ff_r * mp.Vector3(np.cos(angles[n]), 0, np.sin(angles[n]))\n",
+ " )\n",
+ " E[n, :] = [np.conj(ff[j]) for j in range(3)]\n",
+ " H[n, :] = [ff[j + 3] for j in range(3)]\n",
"\n",
"# compute Poynting flux Pr in the radial direction. At large r,\n",
"# all of the flux is radial so we can simply compute the magnitude of the Poynting vector.\n",
- "Px = np.real(np.multiply(E[:,1],H[:,2])-np.multiply(E[:,2],H[:,1]))\n",
- "Py = np.real(np.multiply(E[:,2],H[:,0])-np.multiply(E[:,0],H[:,2]))\n",
- "Pz = np.real(np.multiply(E[:,0],H[:,1])-np.multiply(E[:,1],H[:,0]))\n",
- "Pr = np.sqrt(np.square(Px)+np.square(Py)+np.square(Pz))\n",
+ "Px = np.real(np.multiply(E[:, 1], H[:, 2]) - np.multiply(E[:, 2], H[:, 1]))\n",
+ "Py = np.real(np.multiply(E[:, 2], H[:, 0]) - np.multiply(E[:, 0], H[:, 2]))\n",
+ "Pz = np.real(np.multiply(E[:, 0], H[:, 1]) - np.multiply(E[:, 1], H[:, 0]))\n",
+ "Pr = np.sqrt(np.square(Px) + np.square(Py) + np.square(Pz))\n",
"\n",
- "intensity = input_flux/(4*r)**2\n",
+ "intensity = input_flux / (4 * r) ** 2\n",
"diff_cross_section = ff_r**2 * Pr / intensity\n",
- "scatt_cross_section_meep = 2*np.pi * np.sum(diff_cross_section * np.sin(angles)) * np.pi/npts # trapezoidal rule integration\n",
- "scatt_cross_section_theory = ps.MieQ(n_sphere,1000/frq_cen,2*r*1000,asDict=True,asCrossSection=True)['Csca']*1e-6 # units of um^2\n",
+ "scatt_cross_section_meep = (\n",
+ " 2 * np.pi * np.sum(diff_cross_section * np.sin(angles)) * np.pi / npts\n",
+ ") # trapezoidal rule integration\n",
+ "scatt_cross_section_theory = (\n",
+ " ps.MieQ(n_sphere, 1000 / frq_cen, 2 * r * 1000, asDict=True, asCrossSection=True)[\n",
+ " \"Csca\"\n",
+ " ]\n",
+ " * 1e-6\n",
+ ") # units of um^2\n",
"\n",
- "print(\"scatt:, {:.16f}, {:.16f}\".format(scatt_cross_section_meep,scatt_cross_section_theory))"
+ "print(\n",
+ " \"scatt:, {:.16f}, {:.16f}\".format(\n",
+ " scatt_cross_section_meep, scatt_cross_section_theory\n",
+ " )\n",
+ ")"
]
},
{
diff --git a/python/examples/differential_cross_section.py b/python/examples/differential_cross_section.py
index 74c5e14b7..33f597ada 100644
--- a/python/examples/differential_cross_section.py
+++ b/python/examples/differential_cross_section.py
@@ -7,44 +7,72 @@
frq_cen = 1.0
-resolution = 20 # pixels/um
+resolution = 20 # pixels/um
dpml = 0.5
-dair = 1.5 # at least 0.5/frq_cen padding between source and near-field monitor
+dair = 1.5 # at least 0.5/frq_cen padding between source and near-field monitor
pml_layers = [mp.PML(thickness=dpml)]
-s = 2*(dpml+dair+r)
-cell_size = mp.Vector3(s,s,s)
+s = 2 * (dpml + dair + r)
+cell_size = mp.Vector3(s, s, s)
# circularly-polarized source with propagation axis along x
# is_integrated=True necessary for any planewave source extending into PML
-sources = [mp.Source(mp.GaussianSource(frq_cen,fwidth=0.2*frq_cen,is_integrated=True),
- center=mp.Vector3(-0.5*s+dpml),
- size=mp.Vector3(0,s,s),
- component=mp.Ez),
- mp.Source(mp.GaussianSource(frq_cen,fwidth=0.2*frq_cen,is_integrated=True),
- center=mp.Vector3(-0.5*s+dpml),
- size=mp.Vector3(0,s,s),
- component=mp.Ey,
- amplitude=1j)]
-
-sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- sources=sources,
- k_point=mp.Vector3())
-
-box_flux = sim.add_flux(frq_cen, 0, 1,
- mp.FluxRegion(center=mp.Vector3(x=-2*r),size=mp.Vector3(0,4*r,4*r)))
-
-nearfield_box = sim.add_near2far(frq_cen, 0, 1,
- mp.Near2FarRegion(center=mp.Vector3(x=-2*r),size=mp.Vector3(0,4*r,4*r),weight=+1),
- mp.Near2FarRegion(center=mp.Vector3(x=+2*r),size=mp.Vector3(0,4*r,4*r),weight=-1),
- mp.Near2FarRegion(center=mp.Vector3(y=-2*r),size=mp.Vector3(4*r,0,4*r),weight=+1),
- mp.Near2FarRegion(center=mp.Vector3(y=+2*r),size=mp.Vector3(4*r,0,4*r),weight=-1),
- mp.Near2FarRegion(center=mp.Vector3(z=-2*r),size=mp.Vector3(4*r,4*r,0),weight=+1),
- mp.Near2FarRegion(center=mp.Vector3(z=+2*r),size=mp.Vector3(4*r,4*r,0),weight=-1))
+sources = [
+ mp.Source(
+ mp.GaussianSource(frq_cen, fwidth=0.2 * frq_cen, is_integrated=True),
+ center=mp.Vector3(-0.5 * s + dpml),
+ size=mp.Vector3(0, s, s),
+ component=mp.Ez,
+ ),
+ mp.Source(
+ mp.GaussianSource(frq_cen, fwidth=0.2 * frq_cen, is_integrated=True),
+ center=mp.Vector3(-0.5 * s + dpml),
+ size=mp.Vector3(0, s, s),
+ component=mp.Ey,
+ amplitude=1j,
+ ),
+]
+
+sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ sources=sources,
+ k_point=mp.Vector3(),
+)
+
+box_flux = sim.add_flux(
+ frq_cen,
+ 0,
+ 1,
+ mp.FluxRegion(center=mp.Vector3(x=-2 * r), size=mp.Vector3(0, 4 * r, 4 * r)),
+)
+
+nearfield_box = sim.add_near2far(
+ frq_cen,
+ 0,
+ 1,
+ mp.Near2FarRegion(
+ center=mp.Vector3(x=-2 * r), size=mp.Vector3(0, 4 * r, 4 * r), weight=+1
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(x=+2 * r), size=mp.Vector3(0, 4 * r, 4 * r), weight=-1
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(y=-2 * r), size=mp.Vector3(4 * r, 0, 4 * r), weight=+1
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(y=+2 * r), size=mp.Vector3(4 * r, 0, 4 * r), weight=-1
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(z=-2 * r), size=mp.Vector3(4 * r, 4 * r, 0), weight=+1
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(z=+2 * r), size=mp.Vector3(4 * r, 4 * r, 0), weight=-1
+ ),
+)
sim.run(until_after_sources=10)
@@ -54,49 +82,80 @@
sim.reset_meep()
n_sphere = 2.0
-geometry = [mp.Sphere(material=mp.Medium(index=n_sphere),
- center=mp.Vector3(),
- radius=r)]
-
-sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- sources=sources,
- k_point=mp.Vector3(),
- geometry=geometry)
-
-nearfield_box = sim.add_near2far(frq_cen, 0, 1,
- mp.Near2FarRegion(center=mp.Vector3(x=-2*r),size=mp.Vector3(0,4*r,4*r),weight=+1),
- mp.Near2FarRegion(center=mp.Vector3(x=+2*r),size=mp.Vector3(0,4*r,4*r),weight=-1),
- mp.Near2FarRegion(center=mp.Vector3(y=-2*r),size=mp.Vector3(4*r,0,4*r),weight=+1),
- mp.Near2FarRegion(center=mp.Vector3(y=+2*r),size=mp.Vector3(4*r,0,4*r),weight=-1),
- mp.Near2FarRegion(center=mp.Vector3(z=-2*r),size=mp.Vector3(4*r,4*r,0),weight=+1),
- mp.Near2FarRegion(center=mp.Vector3(z=+2*r),size=mp.Vector3(4*r,4*r,0),weight=-1))
+geometry = [
+ mp.Sphere(material=mp.Medium(index=n_sphere), center=mp.Vector3(), radius=r)
+]
+
+sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ sources=sources,
+ k_point=mp.Vector3(),
+ geometry=geometry,
+)
+
+nearfield_box = sim.add_near2far(
+ frq_cen,
+ 0,
+ 1,
+ mp.Near2FarRegion(
+ center=mp.Vector3(x=-2 * r), size=mp.Vector3(0, 4 * r, 4 * r), weight=+1
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(x=+2 * r), size=mp.Vector3(0, 4 * r, 4 * r), weight=-1
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(y=-2 * r), size=mp.Vector3(4 * r, 0, 4 * r), weight=+1
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(y=+2 * r), size=mp.Vector3(4 * r, 0, 4 * r), weight=-1
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(z=-2 * r), size=mp.Vector3(4 * r, 4 * r, 0), weight=+1
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(z=+2 * r), size=mp.Vector3(4 * r, 4 * r, 0), weight=-1
+ ),
+)
sim.load_minus_near2far_data(nearfield_box, nearfield_box_data)
sim.run(until_after_sources=100)
-npts = 100 # number of points in [0,pi) range of polar angles to sample far fields along semi-circle
-angles = np.pi/npts*np.arange(npts)
+npts = 100 # number of points in [0,pi) range of polar angles to sample far fields along semi-circle
+angles = np.pi / npts * np.arange(npts)
-ff_r = 10000*r # radius of far-field semi-circle
+ff_r = 10000 * r # radius of far-field semi-circle
-E = np.zeros((npts,3),dtype=np.complex128)
-H = np.zeros((npts,3),dtype=np.complex128)
+E = np.zeros((npts, 3), dtype=np.complex128)
+H = np.zeros((npts, 3), dtype=np.complex128)
for n in range(npts):
- ff = sim.get_farfield(nearfield_box, ff_r*mp.Vector3(np.cos(angles[n]),0,np.sin(angles[n])))
- E[n,:] = [np.conj(ff[j]) for j in range(3)]
- H[n,:] = [ff[j+3] for j in range(3)]
-
-Px = np.real(np.multiply(E[:,1],H[:,2])-np.multiply(E[:,2],H[:,1]))
-Py = np.real(np.multiply(E[:,2],H[:,0])-np.multiply(E[:,0],H[:,2]))
-Pz = np.real(np.multiply(E[:,0],H[:,1])-np.multiply(E[:,1],H[:,0]))
-Pr = np.sqrt(np.square(Px)+np.square(Py)+np.square(Pz))
-
-intensity = input_flux/(4*r)**2
+ ff = sim.get_farfield(
+ nearfield_box, ff_r * mp.Vector3(np.cos(angles[n]), 0, np.sin(angles[n]))
+ )
+ E[n, :] = [np.conj(ff[j]) for j in range(3)]
+ H[n, :] = [ff[j + 3] for j in range(3)]
+
+Px = np.real(np.multiply(E[:, 1], H[:, 2]) - np.multiply(E[:, 2], H[:, 1]))
+Py = np.real(np.multiply(E[:, 2], H[:, 0]) - np.multiply(E[:, 0], H[:, 2]))
+Pz = np.real(np.multiply(E[:, 0], H[:, 1]) - np.multiply(E[:, 1], H[:, 0]))
+Pr = np.sqrt(np.square(Px) + np.square(Py) + np.square(Pz))
+
+intensity = input_flux / (4 * r) ** 2
diff_cross_section = ff_r**2 * Pr / intensity
-scatt_cross_section_meep = 2*np.pi * np.sum(np.multiply(diff_cross_section,np.sin(angles))) * np.pi/npts
-scatt_cross_section_theory = ps.MieQ(n_sphere,1000/frq_cen,2*r*1000,asDict=True,asCrossSection=True)['Csca']*1e-6 # units of um^2
-
-print("scatt:, {:.16f} (meep), {:.16f} (theory)".format(scatt_cross_section_meep,scatt_cross_section_theory))
+scatt_cross_section_meep = (
+ 2 * np.pi * np.sum(np.multiply(diff_cross_section, np.sin(angles))) * np.pi / npts
+)
+scatt_cross_section_theory = (
+ ps.MieQ(n_sphere, 1000 / frq_cen, 2 * r * 1000, asDict=True, asCrossSection=True)[
+ "Csca"
+ ]
+ * 1e-6
+) # units of um^2
+
+print(
+ "scatt:, {:.16f} (meep), {:.16f} (theory)".format(
+ scatt_cross_section_meep, scatt_cross_section_theory
+ )
+)
diff --git a/python/examples/diffracted_planewave.py b/python/examples/diffracted_planewave.py
index c9a059db9..ce5409e47 100644
--- a/python/examples/diffracted_planewave.py
+++ b/python/examples/diffracted_planewave.py
@@ -10,143 +10,171 @@
import cmath
import numpy as np
+
def binary_grating_diffraction(gp, gh, gdc, theta):
- resolution = 50 # pixels/μm
+ resolution = 50 # pixels/μm
- dpml = 1.0 # PML thickness
- dsub = 3.0 # substrate thickness
- dpad = 3.0 # length of padding between grating and PML
-
- sx = dpml+dsub+gh+dpad+dpml
- sy = gp
-
- cell_size = mp.Vector3(sx,sy,0)
- pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]
-
- wvl = 0.5 # center wavelength
- fcen = 1/wvl # center frequency
- df = 0.05*fcen # frequency width
-
- ng = 1.5
- glass = mp.Medium(index=ng)
-
- # rotation angle of incident planewave; counter clockwise (CCW) about Z axis, 0 degrees along +X axis
- theta_in = math.radians(theta)
-
- eig_parity = mp.EVEN_Z
-
- # k (in source medium) with correct length (plane of incidence: XY)
- k = mp.Vector3(fcen*ng).rotate(mp.Vector3(z=1), theta_in)
-
- symmetries = []
- if theta_in == 0:
- k = mp.Vector3()
- eig_parity += mp.ODD_Y
- symmetries = [mp.Mirror(direction=mp.Y,phase=-1)]
-
- def pw_amp(k,x0):
- def _pw_amp(x):
- return cmath.exp(1j*2*math.pi*k.dot(x+x0))
- return _pw_amp
-
- src_pt = mp.Vector3(-0.5*sx+dpml,0,0)
- sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
- component=mp.Hz,
- center=src_pt,
- size=mp.Vector3(0,sy,0),
- amp_func=pw_amp(k,src_pt))]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- k_point=k,
- default_material=glass,
- sources=sources,
- symmetries=symmetries)
-
- tran_pt = mp.Vector3(0.5*sx-dpml,0,0)
- tran_mon = sim.add_flux(fcen, 0, 1,
- mp.FluxRegion(center=tran_pt, size=mp.Vector3(0,sy,0)))
-
- sim.run(until_after_sources=50)
-
- input_flux = mp.get_fluxes(tran_mon)
-
- sim.reset_meep()
-
- geometry = [mp.Block(material=glass,
- size=mp.Vector3(dpml+dsub,mp.inf,mp.inf),
- center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub),0,0)),
- mp.Block(material=glass,
- size=mp.Vector3(gh,gdc*gp,mp.inf),
- center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,0,0))]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- geometry=geometry,
- k_point=k,
- sources=sources,
- symmetries=symmetries)
-
- tran_mon = sim.add_mode_monitor(fcen, 0, 1,
- mp.FluxRegion(center=tran_pt, size=mp.Vector3(0,sy,0)))
-
- sim.run(until_after_sources=100)
-
- # number of (non-evanescent) transmitted orders
- nm_t = np.floor((fcen-k.y)*gp)-np.ceil((-fcen-k.y)*gp)
- if theta_in == 0:
- nm_t = nm_t/2
- nm_t = int(nm_t)+1
-
- bands = range(1,nm_t+1)
-
- if theta_in == 0:
- orders = range(0,nm_t)
- else:
- orders = range(int(np.ceil((-fcen-k.y)*gp)),int(np.floor((fcen-k.y)*gp))+1)
-
- eig_sum = 0
- dp_sum = 0
-
- for band,order in zip(bands,orders):
- res = sim.get_eigenmode_coefficients(tran_mon, [band], eig_parity=eig_parity)
- if res is not None:
- tran_eig = abs(res.alpha[0,0,0])**2/input_flux[0]
- if theta_in == 0:
- tran_eig = 0.5*tran_eig
- else:
- tran_eig = 0
- eig_sum += tran_eig
-
- res = sim.get_eigenmode_coefficients(tran_mon, mp.DiffractedPlanewave((0,order,0),mp.Vector3(0,1,0),0,1))
- if res is not None:
- tran_dp = abs(res.alpha[0,0,0])**2/input_flux[0]
- if (theta_in == 0) and (order == 0):
- tran_dp = 0.5*tran_dp
- else:
- tran_dp = 0
- dp_sum += tran_dp
+ dpml = 1.0 # PML thickness
+ dsub = 3.0 # substrate thickness
+ dpad = 3.0 # length of padding between grating and PML
+
+ sx = dpml + dsub + gh + dpad + dpml
+ sy = gp
+
+ cell_size = mp.Vector3(sx, sy, 0)
+ pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]
+
+ wvl = 0.5 # center wavelength
+ fcen = 1 / wvl # center frequency
+ df = 0.05 * fcen # frequency width
+
+ ng = 1.5
+ glass = mp.Medium(index=ng)
+
+ # rotation angle of incident planewave; counter clockwise (CCW) about Z axis, 0 degrees along +X axis
+ theta_in = math.radians(theta)
+
+ eig_parity = mp.EVEN_Z
+
+ # k (in source medium) with correct length (plane of incidence: XY)
+ k = mp.Vector3(fcen * ng).rotate(mp.Vector3(z=1), theta_in)
+
+ symmetries = []
+ if theta_in == 0:
+ k = mp.Vector3()
+ eig_parity += mp.ODD_Y
+ symmetries = [mp.Mirror(direction=mp.Y, phase=-1)]
+
+ def pw_amp(k, x0):
+ def _pw_amp(x):
+ return cmath.exp(1j * 2 * math.pi * k.dot(x + x0))
+
+ return _pw_amp
+
+ src_pt = mp.Vector3(-0.5 * sx + dpml, 0, 0)
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Hz,
+ center=src_pt,
+ size=mp.Vector3(0, sy, 0),
+ amp_func=pw_amp(k, src_pt),
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ k_point=k,
+ default_material=glass,
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ tran_pt = mp.Vector3(0.5 * sx - dpml, 0, 0)
+ tran_mon = sim.add_flux(
+ fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, sy, 0))
+ )
+
+ sim.run(until_after_sources=50)
+
+ input_flux = mp.get_fluxes(tran_mon)
+
+ sim.reset_meep()
+
+ geometry = [
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),
+ center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub), 0, 0),
+ ),
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(gh, gdc * gp, mp.inf),
+ center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh, 0, 0),
+ ),
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ k_point=k,
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ tran_mon = sim.add_mode_monitor(
+ fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, sy, 0))
+ )
+
+ sim.run(until_after_sources=100)
+
+ # number of (non-evanescent) transmitted orders
+ nm_t = np.floor((fcen - k.y) * gp) - np.ceil((-fcen - k.y) * gp)
+ if theta_in == 0:
+ nm_t = nm_t / 2
+ nm_t = int(nm_t) + 1
+
+ bands = range(1, nm_t + 1)
if theta_in == 0:
- err = abs(tran_eig-tran_dp)/tran_eig
- print("tran:, {:2d}, {:.8f}, {:2d}, {:.8f}, {:.8f}".format(band,tran_eig,order,tran_dp,err))
+ orders = range(0, nm_t)
else:
- print("tran:, {:2d}, {:.8f}, {:2d}, {:.8f}".format(band,tran_eig,order,tran_dp))
-
- flux = mp.get_fluxes(tran_mon)
- t_flux = flux[0]/input_flux[0]
- if (theta_in == 0):
- t_flux = 0.5*t_flux
-
- err = abs(dp_sum-t_flux)/t_flux
- print("flux:, {:.8f}, {:.8f}, {:.8f}, {:.8f}".format(eig_sum,
- dp_sum,
- t_flux,
- err))
-
-if __name__ == '__main__':
- binary_grating_diffraction(2.6,0.4,0.3,0)
- binary_grating_diffraction(3.7,0.6,0.4,13.5)
+ orders = range(
+ int(np.ceil((-fcen - k.y) * gp)), int(np.floor((fcen - k.y) * gp)) + 1
+ )
+
+ eig_sum = 0
+ dp_sum = 0
+
+ for band, order in zip(bands, orders):
+ res = sim.get_eigenmode_coefficients(tran_mon, [band], eig_parity=eig_parity)
+ if res is not None:
+ tran_eig = abs(res.alpha[0, 0, 0]) ** 2 / input_flux[0]
+ if theta_in == 0:
+ tran_eig = 0.5 * tran_eig
+ else:
+ tran_eig = 0
+ eig_sum += tran_eig
+
+ res = sim.get_eigenmode_coefficients(
+ tran_mon, mp.DiffractedPlanewave((0, order, 0), mp.Vector3(0, 1, 0), 0, 1)
+ )
+ if res is not None:
+ tran_dp = abs(res.alpha[0, 0, 0]) ** 2 / input_flux[0]
+ if (theta_in == 0) and (order == 0):
+ tran_dp = 0.5 * tran_dp
+ else:
+ tran_dp = 0
+ dp_sum += tran_dp
+
+ if theta_in == 0:
+ err = abs(tran_eig - tran_dp) / tran_eig
+ print(
+ "tran:, {:2d}, {:.8f}, {:2d}, {:.8f}, {:.8f}".format(
+ band, tran_eig, order, tran_dp, err
+ )
+ )
+ else:
+ print(
+ "tran:, {:2d}, {:.8f}, {:2d}, {:.8f}".format(
+ band, tran_eig, order, tran_dp
+ )
+ )
+
+ flux = mp.get_fluxes(tran_mon)
+ t_flux = flux[0] / input_flux[0]
+ if theta_in == 0:
+ t_flux = 0.5 * t_flux
+
+ err = abs(dp_sum - t_flux) / t_flux
+ print("flux:, {:.8f}, {:.8f}, {:.8f}, {:.8f}".format(eig_sum, dp_sum, t_flux, err))
+
+
+if __name__ == "__main__":
+ binary_grating_diffraction(2.6, 0.4, 0.3, 0)
+ binary_grating_diffraction(3.7, 0.6, 0.4, 13.5)
diff --git a/python/examples/eps_fit_lorentzian.py b/python/examples/eps_fit_lorentzian.py
index bbae3076c..4d3de9833 100644
--- a/python/examples/eps_fit_lorentzian.py
+++ b/python/examples/eps_fit_lorentzian.py
@@ -5,94 +5,105 @@
import nlopt
import numpy as np
import matplotlib
-matplotlib.use('agg')
+
+matplotlib.use("agg")
import matplotlib.pyplot as plt
import meep as mp
def lorentzfunc(p, x):
"""Return the complex ε profile given a set of Lorentzian parameters p
- (σ_0, ω_0, γ_0, σ_1, ω_1, γ_1, ...) for a set of frequencies x.
+ (σ_0, ω_0, γ_0, σ_1, ω_1, γ_1, ...) for a set of frequencies x.
"""
N = len(p) // 3
y = np.zeros(len(x))
for n in range(N):
- A_n = p[3*n+0]
- x_n = p[3*n+1]
- g_n = p[3*n+2]
- y = y + A_n/(np.square(x_n) - np.square(x) - 1j*x*g_n)
+ A_n = p[3 * n + 0]
+ x_n = p[3 * n + 1]
+ g_n = p[3 * n + 2]
+ y = y + A_n / (np.square(x_n) - np.square(x) - 1j * x * g_n)
return y
+
def lorentzerr(p, x, y, grad):
"""Return the error (or residual or loss funnction) as the L2 norm
- of the difference of ε(p,x) and y over a set of frequencies x as
- well as the gradient of this error with respect to each Lorentzian
- polarizability parameter in p and saving the result in grad.
+ of the difference of ε(p,x) and y over a set of frequencies x as
+ well as the gradient of this error with respect to each Lorentzian
+ polarizability parameter in p and saving the result in grad.
"""
N = len(p) // 3
yp = lorentzfunc(p, x)
val = np.sum(np.square(abs(y - yp)))
for n in range(N):
- A_n = p[3*n+0]
- x_n = p[3*n+1]
- g_n = p[3*n+2]
- d = 1 / (np.square(x_n) - np.square(x) - 1j*x*g_n)
+ A_n = p[3 * n + 0]
+ x_n = p[3 * n + 1]
+ g_n = p[3 * n + 2]
+ d = 1 / (np.square(x_n) - np.square(x) - 1j * x * g_n)
if grad.size > 0:
- grad[3*n+0] = 2 * np.real(np.dot(np.conj(yp - y), d))
- grad[3*n+1] = -4 * x_n * A_n * np.real(np.dot(np.conj(yp - y), np.square(d)))
- grad[3*n+2] = -2 * A_n * np.imag(np.dot(np.conj(yp - y), x * np.square(d)))
+ grad[3 * n + 0] = 2 * np.real(np.dot(np.conj(yp - y), d))
+ grad[3 * n + 1] = (
+ -4 * x_n * A_n * np.real(np.dot(np.conj(yp - y), np.square(d)))
+ )
+ grad[3 * n + 2] = (
+ -2 * A_n * np.imag(np.dot(np.conj(yp - y), x * np.square(d)))
+ )
return val
+
def lorentzfit(p0, x, y, alg=nlopt.LD_LBFGS, tol=1e-25, maxeval=10000):
"""Return the optimal Lorentzian polarizability parameters and error
- which minimize the error in ε(p0,x) relative to y for an initial
- set of Lorentzian polarizability parameters p0 over a set of
- frequencies x using the NLopt algorithm alg for a relative
- tolerance tol and a maximum number of iterations maxeval.
+ which minimize the error in ε(p0,x) relative to y for an initial
+ set of Lorentzian polarizability parameters p0 over a set of
+ frequencies x using the NLopt algorithm alg for a relative
+ tolerance tol and a maximum number of iterations maxeval.
"""
opt = nlopt.opt(alg, len(p0))
opt.set_ftol_rel(tol)
opt.set_maxeval(maxeval)
opt.set_lower_bounds(np.zeros(len(p0)))
- opt.set_upper_bounds(float('inf')*np.ones(len(p0)))
+ opt.set_upper_bounds(float("inf") * np.ones(len(p0)))
opt.set_min_objective(lambda p, grad: lorentzerr(p, x, y, grad))
local_opt = nlopt.opt(nlopt.LD_LBFGS, len(p0))
local_opt.set_ftol_rel(1e-10)
local_opt.set_xtol_rel(1e-8)
opt.set_local_optimizer(local_opt)
- popt = opt.optimize(p0);
+ popt = opt.optimize(p0)
minf = opt.last_optimum_value()
return popt, minf
# format of input data file is three comma-separated columns:
# wavelength (nm), real(n), complex(n)
-mydata = np.genfromtxt('mymaterial.csv',delimiter=',')
-n = mydata[:,1] + 1j*mydata[:,2]
-eps_inf = 1.1 # should be >= 1.0 for stability and chosen such that np.amin(np.real(eps)) is ~1.0
+mydata = np.genfromtxt("mymaterial.csv", delimiter=",")
+n = mydata[:, 1] + 1j * mydata[:, 2]
+eps_inf = 1.1 # should be >= 1.0 for stability and chosen such that np.amin(np.real(eps)) is ~1.0
eps = np.square(n) - eps_inf
-wl = mydata[:,0]
-wl_min = 399 # minimum wavelength (units of nm)
-wl_max = 701 # maximum wavelength (units of nm)
+wl = mydata[:, 0]
+wl_min = 399 # minimum wavelength (units of nm)
+wl_max = 701 # maximum wavelength (units of nm)
start_idx = np.where(wl > wl_min)
idx_start = start_idx[0][0]
end_idx = np.where(wl < wl_max)
-idx_end = end_idx[0][-1]+1
-freqs = 1000/wl # units of 1/μm
+idx_end = end_idx[0][-1] + 1
+freqs = 1000 / wl # units of 1/μm
freqs_reduced = freqs[idx_start:idx_end]
wl_reduced = wl[idx_start:idx_end]
eps_reduced = eps[idx_start:idx_end]
num_lorentzians = 2
-num_repeat = 30 # number of times to repeat local optimization with random initial values
-ps = np.zeros((num_repeat,3*num_lorentzians))
+num_repeat = (
+ 30 # number of times to repeat local optimization with random initial values
+)
+ps = np.zeros((num_repeat, 3 * num_lorentzians))
mins = np.zeros(num_repeat)
for m in range(num_repeat):
# specify Lorentzian polarizability terms each consisting of three parameters (σ_0, ω_0, γ_0)
# with random initial values
# note: for the case of no absorption, set γ (every third parameter) to zero
- p_rand = [10**(np.random.random()) for _ in range(3*num_lorentzians)]
- ps[m,:], mins[m] = lorentzfit(p_rand, freqs_reduced, eps_reduced, nlopt.LD_MMA, 1e-25, 50000)
+ p_rand = [10 ** (np.random.random()) for _ in range(3 * num_lorentzians)]
+ ps[m, :], mins[m] = lorentzfit(
+ p_rand, freqs_reduced, eps_reduced, nlopt.LD_MMA, 1e-25, 50000
+ )
print(f"iteration{m}:, {ps[m,:]}, {mins[m]}")
# find the best performing set of parameters
@@ -104,42 +115,49 @@ def lorentzfit(p0, x, y, alg=nlopt.LD_LBFGS, tol=1e-25, maxeval=10000):
E_susceptibilities = []
for n in range(num_lorentzians):
- mymaterial_freq = ps[idx_opt][0][3*n+1]
- mymaterial_gamma = ps[idx_opt][0][3*n+2]
+ mymaterial_freq = ps[idx_opt][0][3 * n + 1]
+ mymaterial_gamma = ps[idx_opt][0][3 * n + 2]
if mymaterial_freq == 0:
- mymaterial_sigma = ps[idx_opt][0][3*n+0]
- E_susceptibilities.append(mp.DrudeSusceptibility(frequency=1.0,
- gamma=mymaterial_gamma,
- sigma=mymaterial_sigma))
+ mymaterial_sigma = ps[idx_opt][0][3 * n + 0]
+ E_susceptibilities.append(
+ mp.DrudeSusceptibility(
+ frequency=1.0, gamma=mymaterial_gamma, sigma=mymaterial_sigma
+ )
+ )
else:
- mymaterial_sigma = ps[idx_opt][0][3*n+0] / mymaterial_freq**2
- E_susceptibilities.append(mp.LorentzianSusceptibility(frequency=mymaterial_freq,
- gamma=mymaterial_gamma,
- sigma=mymaterial_sigma))
+ mymaterial_sigma = ps[idx_opt][0][3 * n + 0] / mymaterial_freq**2
+ E_susceptibilities.append(
+ mp.LorentzianSusceptibility(
+ frequency=mymaterial_freq,
+ gamma=mymaterial_gamma,
+ sigma=mymaterial_sigma,
+ )
+ )
-mymaterial = mp.Medium(epsilon=eps_inf,
- E_susceptibilities=E_susceptibilities)
+mymaterial = mp.Medium(epsilon=eps_inf, E_susceptibilities=E_susceptibilities)
# plot the fit and the actual data for comparison
mymaterial_eps = [mymaterial.epsilon(f)[0][0] for f in freqs_reduced]
-plt.subplot(1,2,1)
-plt.plot(wl_reduced,np.real(eps_reduced),'bo-',label='actual')
-plt.plot(wl_reduced,np.real(mymaterial_eps),'ro-',label='fit')
-plt.xlabel('wavelength (nm)')
-plt.ylabel(r'real($\epsilon$)')
+plt.subplot(1, 2, 1)
+plt.plot(wl_reduced, np.real(eps_reduced), "bo-", label="actual")
+plt.plot(wl_reduced, np.real(mymaterial_eps), "ro-", label="fit")
+plt.xlabel("wavelength (nm)")
+plt.ylabel(r"real($\epsilon$)")
plt.legend()
-plt.subplot(1,2,2)
-plt.plot(wl_reduced,np.imag(eps_reduced),'bo-',label='actual')
-plt.plot(wl_reduced,np.imag(mymaterial_eps),'ro-',label='fit')
-plt.xlabel('wavelength (nm)')
-plt.ylabel(r'imag($\epsilon$)')
+plt.subplot(1, 2, 2)
+plt.plot(wl_reduced, np.imag(eps_reduced), "bo-", label="actual")
+plt.plot(wl_reduced, np.imag(mymaterial_eps), "ro-", label="fit")
+plt.xlabel("wavelength (nm)")
+plt.ylabel(r"imag($\epsilon$)")
plt.legend()
-plt.suptitle('Comparison of Actual Material Data and Fit using Drude-Lorentzian Susceptibility')
+plt.suptitle(
+ "Comparison of Actual Material Data and Fit using Drude-Lorentzian Susceptibility"
+)
plt.subplots_adjust(wspace=0.3)
-plt.savefig('eps_fit_sample.png',dpi=150,bbox_inches='tight')
+plt.savefig("eps_fit_sample.png", dpi=150, bbox_inches="tight")
diff --git a/python/examples/faraday-rotation.py b/python/examples/faraday-rotation.py
index 449c18b10..426744939 100644
--- a/python/examples/faraday-rotation.py
+++ b/python/examples/faraday-rotation.py
@@ -3,14 +3,17 @@
import meep as mp
## Parameters for a gyrotropic Lorentzian medium
-epsn = 1.5 # background permittivity
-f0 = 1.0 # natural frequency
-gamma = 1e-6 # damping rate
-sn = 0.1 # sigma parameter
-b0 = 0.15 # magnitude of bias vector
+epsn = 1.5 # background permittivity
+f0 = 1.0 # natural frequency
+gamma = 1e-6 # damping rate
+sn = 0.1 # sigma parameter
+b0 = 0.15 # magnitude of bias vector
-susc = [mp.GyrotropicLorentzianSusceptibility(frequency=f0, gamma=gamma, sigma=sn,
- bias=mp.Vector3(0, 0, b0))]
+susc = [
+ mp.GyrotropicLorentzianSusceptibility(
+ frequency=f0, gamma=gamma, sigma=sn, bias=mp.Vector3(0, 0, b0)
+ )
+]
mat = mp.Medium(epsilon=epsn, mu=1, E_susceptibilities=susc)
## Set up and run the Meep simulation:
@@ -20,12 +23,22 @@
fsrc, src_z = 0.8, -8.5
pml_layers = [mp.PML(thickness=1.0, direction=mp.Z)]
-sources = [mp.Source(mp.ContinuousSource(frequency=fsrc),
- component=mp.Ex, center=mp.Vector3(0, 0, src_z))]
+sources = [
+ mp.Source(
+ mp.ContinuousSource(frequency=fsrc),
+ component=mp.Ex,
+ center=mp.Vector3(0, 0, src_z),
+ )
+]
-sim = mp.Simulation(cell_size=cell, geometry=[], sources=sources,
- boundary_layers=pml_layers,
- default_material=mat, resolution=50)
+sim = mp.Simulation(
+ cell_size=cell,
+ geometry=[],
+ sources=sources,
+ boundary_layers=pml_layers,
+ default_material=mat,
+ resolution=50,
+)
sim.run(until=tmax)
## Plot results:
@@ -35,35 +48,38 @@
ex_data = sim.get_efield_x().real
ey_data = sim.get_efield_y().real
-z = np.linspace(-L/2, L/2, len(ex_data))
+z = np.linspace(-L / 2, L / 2, len(ex_data))
plt.figure(1)
-plt.plot(z, ex_data, label='Ex')
-plt.plot(z, ey_data, label='Ey')
-plt.xlim(-L/2, L/2); plt.xlabel('z')
+plt.plot(z, ex_data, label="Ex")
+plt.plot(z, ey_data, label="Ey")
+plt.xlim(-L / 2, L / 2)
+plt.xlabel("z")
plt.legend()
## Comparison with analytic result:
-dfsq = (f0**2 - 1j*fsrc*gamma - fsrc**2)
-eperp = epsn + sn * f0**2 * dfsq / (dfsq**2 - (fsrc*b0)**2)
-eta = sn * f0**2 * fsrc * b0 / (dfsq**2 - (fsrc*b0)**2)
+dfsq = f0**2 - 1j * fsrc * gamma - fsrc**2
+eperp = epsn + sn * f0**2 * dfsq / (dfsq**2 - (fsrc * b0) ** 2)
+eta = sn * f0**2 * fsrc * b0 / (dfsq**2 - (fsrc * b0) ** 2)
-k_gyro = 2*np.pi*fsrc * np.sqrt(0.5*(eperp - np.sqrt(eperp**2 - eta**2)))
+k_gyro = 2 * np.pi * fsrc * np.sqrt(0.5 * (eperp - np.sqrt(eperp**2 - eta**2)))
Ex_theory = 0.37 * np.cos(k_gyro * (z - src_z)).real
Ey_theory = 0.37 * np.sin(k_gyro * (z - src_z)).real
plt.figure(2)
-plt.subplot(2,1,1)
-plt.plot(z, ex_data, label='Ex (MEEP)')
-plt.plot(z, Ex_theory, 'k--')
-plt.plot(z, -Ex_theory, 'k--', label='Ex envelope (theory)')
-plt.xlim(-L/2, L/2); plt.xlabel('z')
-plt.legend(loc='lower right')
+plt.subplot(2, 1, 1)
+plt.plot(z, ex_data, label="Ex (MEEP)")
+plt.plot(z, Ex_theory, "k--")
+plt.plot(z, -Ex_theory, "k--", label="Ex envelope (theory)")
+plt.xlim(-L / 2, L / 2)
+plt.xlabel("z")
+plt.legend(loc="lower right")
-plt.subplot(2,1,2)
-plt.plot(z, ey_data, label='Ey (MEEP)')
-plt.plot(z, Ey_theory, 'k--')
-plt.plot(z, -Ey_theory, 'k--', label='Ey envelope (theory)')
-plt.xlim(-L/2, L/2); plt.xlabel('z')
-plt.legend(loc='lower right')
+plt.subplot(2, 1, 2)
+plt.plot(z, ey_data, label="Ey (MEEP)")
+plt.plot(z, Ey_theory, "k--")
+plt.plot(z, -Ey_theory, "k--", label="Ey envelope (theory)")
+plt.xlim(-L / 2, L / 2)
+plt.xlabel("z")
+plt.legend(loc="lower right")
plt.tight_layout()
plt.show()
diff --git a/python/examples/finite_grating.ipynb b/python/examples/finite_grating.ipynb
index e60714631..2f6600f25 100644
--- a/python/examples/finite_grating.ipynb
+++ b/python/examples/finite_grating.ipynb
@@ -138,21 +138,21 @@
"# False: plot the diffraction spectra based on a 1d cross section of the scattered fields\n",
"field_profile = True\n",
"\n",
- "resolution = 50 # pixels/μm\n",
+ "resolution = 50 # pixels/μm\n",
"\n",
- "dpml = 1.0 # PML thickness\n",
- "dsub = 2.0 # substrate thickness\n",
- "dpad = 1.0 # flat-surface padding\n",
- "gp = 1.0 # grating periodicity\n",
- "gh = 0.5 # grating height\n",
- "gdc = 0.5 # grating duty cycle\n",
- "num_cells = 5 # number of grating unit cells\n",
+ "dpml = 1.0 # PML thickness\n",
+ "dsub = 2.0 # substrate thickness\n",
+ "dpad = 1.0 # flat-surface padding\n",
+ "gp = 1.0 # grating periodicity\n",
+ "gh = 0.5 # grating height\n",
+ "gdc = 0.5 # grating duty cycle\n",
+ "num_cells = 5 # number of grating unit cells\n",
"\n",
"# air region thickness adjacent to grating\n",
"dair = 10 if field_profile else dpad\n",
"\n",
- "wvl = 0.5 # center wavelength\n",
- "fcen = 1/wvl # center frequency\n",
+ "wvl = 0.5 # center wavelength\n",
+ "fcen = 1 / wvl # center frequency\n",
"\n",
"k_point = mp.Vector3()\n",
"\n",
@@ -160,32 +160,49 @@
"\n",
"pml_layers = [mp.PML(thickness=dpml)]\n",
"\n",
- "symmetries=[mp.Mirror(mp.Y)]\n",
- "\n",
- "sx = dpml+dsub+gh+dair+dpml\n",
- "sy = dpml+dpad+num_cells*gp+dpad+dpml\n",
- "cell_size = mp.Vector3(sx,sy)\n",
- "\n",
- "src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub)\n",
- "sources = [mp.Source(mp.GaussianSource(fcen,fwidth=0.2*fcen),\n",
- " component=mp.Ez,\n",
- " center=src_pt,\n",
- " size=mp.Vector3(y=sy))]\n",
- "\n",
- "geometry = [mp.Block(material=glass,\n",
- " size=mp.Vector3(dpml+dsub,mp.inf,mp.inf),\n",
- " center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub)))]\n",
- "\n",
- "sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " k_point=k_point,\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
- "\n",
- "mon_pt = mp.Vector3(0.5*sx-dpml-0.5*dair)\n",
- "near_fields = sim.add_dft_fields([mp.Ez], fcen, 0, 1, center=mon_pt, size=mp.Vector3(dair if field_profile else 0,sy-2*dpml))\n",
+ "symmetries = [mp.Mirror(mp.Y)]\n",
+ "\n",
+ "sx = dpml + dsub + gh + dair + dpml\n",
+ "sy = dpml + dpad + num_cells * gp + dpad + dpml\n",
+ "cell_size = mp.Vector3(sx, sy)\n",
+ "\n",
+ "src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub)\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=0.2 * fcen),\n",
+ " component=mp.Ez,\n",
+ " center=src_pt,\n",
+ " size=mp.Vector3(y=sy),\n",
+ " )\n",
+ "]\n",
+ "\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " material=glass,\n",
+ " size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),\n",
+ " center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)),\n",
+ " )\n",
+ "]\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " k_point=k_point,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ ")\n",
+ "\n",
+ "mon_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dair)\n",
+ "near_fields = sim.add_dft_fields(\n",
+ " [mp.Ez],\n",
+ " fcen,\n",
+ " 0,\n",
+ " 1,\n",
+ " center=mon_pt,\n",
+ " size=mp.Vector3(dair if field_profile else 0, sy - 2 * dpml),\n",
+ ")\n",
"\n",
"sim.run(until_after_sources=100)\n",
"\n",
@@ -194,19 +211,35 @@
"sim.reset_meep()\n",
"\n",
"for j in range(num_cells):\n",
- " geometry.append(mp.Block(material=glass,\n",
- " size=mp.Vector3(gh,gdc*gp,mp.inf),\n",
- " center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,-0.5*sy+dpml+dpad+(j+0.5)*gp)))\n",
- "\n",
- "sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " k_point=k_point,\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
- "\n",
- "near_fields = sim.add_dft_fields([mp.Ez], fcen, 0, 1, center=mon_pt, size=mp.Vector3(dair if field_profile else 0,sy-2*dpml))\n",
+ " geometry.append(\n",
+ " mp.Block(\n",
+ " material=glass,\n",
+ " size=mp.Vector3(gh, gdc * gp, mp.inf),\n",
+ " center=mp.Vector3(\n",
+ " -0.5 * sx + dpml + dsub + 0.5 * gh,\n",
+ " -0.5 * sy + dpml + dpad + (j + 0.5) * gp,\n",
+ " ),\n",
+ " )\n",
+ " )\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " k_point=k_point,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ ")\n",
+ "\n",
+ "near_fields = sim.add_dft_fields(\n",
+ " [mp.Ez],\n",
+ " fcen,\n",
+ " 0,\n",
+ " 1,\n",
+ " center=mon_pt,\n",
+ " size=mp.Vector3(dair if field_profile else 0, sy - 2 * dpml),\n",
+ ")\n",
"\n",
"sim.run(until_after_sources=100)"
]
@@ -232,39 +265,48 @@
"source": [
"grating_dft = sim.get_dft_array(near_fields, mp.Ez, 0)\n",
"\n",
- "scattered_field = grating_dft-flat_dft\n",
- "scattered_amplitude = np.abs(scattered_field)**2\n",
+ "scattered_field = grating_dft - flat_dft\n",
+ "scattered_amplitude = np.abs(scattered_field) ** 2\n",
"\n",
- "[x,y,z,w] = sim.get_array_metadata(dft_cell=near_fields)\n",
+ "[x, y, z, w] = sim.get_array_metadata(dft_cell=near_fields)\n",
"\n",
"if field_profile:\n",
" plt.figure(dpi=150)\n",
- " plt.pcolormesh(x,y,np.rot90(scattered_amplitude),cmap='inferno',shading='gouraud',vmin=0,vmax=scattered_amplitude.max())\n",
- " plt.gca().set_aspect('equal')\n",
- " plt.xlabel('x (μm)')\n",
- " plt.ylabel('y (μm)')\n",
+ " plt.pcolormesh(\n",
+ " x,\n",
+ " y,\n",
+ " np.rot90(scattered_amplitude),\n",
+ " cmap=\"inferno\",\n",
+ " shading=\"gouraud\",\n",
+ " vmin=0,\n",
+ " vmax=scattered_amplitude.max(),\n",
+ " )\n",
+ " plt.gca().set_aspect(\"equal\")\n",
+ " plt.xlabel(\"x (μm)\")\n",
+ " plt.ylabel(\"y (μm)\")\n",
" # ensure that the height of the colobar matches that of the plot\n",
" from mpl_toolkits.axes_grid1 import make_axes_locatable\n",
+ "\n",
" divider = make_axes_locatable(plt.gca())\n",
" cax = divider.append_axes(\"right\", size=\"5%\", pad=0.05)\n",
" plt.colorbar(cax=cax)\n",
" plt.tight_layout()\n",
" plt.show()\n",
"else:\n",
- " ky = np.fft.fftshift(np.fft.fftfreq(len(scattered_field), 1/resolution))\n",
+ " ky = np.fft.fftshift(np.fft.fftfreq(len(scattered_field), 1 / resolution))\n",
" FT_scattered_field = np.fft.fftshift(np.fft.fft(scattered_field))\n",
" plt.figure(dpi=150)\n",
" plt.subplots_adjust(hspace=0.3)\n",
"\n",
- " plt.subplot(2,1,1)\n",
- " plt.plot(y,scattered_amplitude,'bo-')\n",
+ " plt.subplot(2, 1, 1)\n",
+ " plt.plot(y, scattered_amplitude, \"bo-\")\n",
" plt.xlabel(\"y (μm)\")\n",
" plt.ylabel(\"field amplitude\")\n",
"\n",
- " plt.subplot(2,1,2)\n",
- " plt.plot(ky,np.abs(FT_scattered_field)**2,'ro-')\n",
- " plt.gca().ticklabel_format(axis='y',style='sci',scilimits=(0,0))\n",
- " plt.xlabel(r'wavevector k$_y$, 2π (μm)$^{-1}$')\n",
+ " plt.subplot(2, 1, 2)\n",
+ " plt.plot(ky, np.abs(FT_scattered_field) ** 2, \"ro-\")\n",
+ " plt.gca().ticklabel_format(axis=\"y\", style=\"sci\", scilimits=(0, 0))\n",
+ " plt.xlabel(r\"wavevector k$_y$, 2π (μm)$^{-1}$\")\n",
" plt.ylabel(\"Fourier transform\")\n",
" plt.gca().set_xlim([-3, 3])\n",
"\n",
diff --git a/python/examples/finite_grating.py b/python/examples/finite_grating.py
index 1129410e2..36be29976 100644
--- a/python/examples/finite_grating.py
+++ b/python/examples/finite_grating.py
@@ -7,21 +7,21 @@
# False: plot the diffraction spectra based on a 1d cross section of the scattered fields
field_profile = True
-resolution = 50 # pixels/μm
+resolution = 50 # pixels/μm
-dpml = 1.0 # PML thickness
-dsub = 2.0 # substrate thickness
-dpad = 1.0 # flat-surface padding
-gp = 1.0 # grating periodicity
-gh = 0.5 # grating height
-gdc = 0.5 # grating duty cycle
-num_cells = 5 # number of grating unit cells
+dpml = 1.0 # PML thickness
+dsub = 2.0 # substrate thickness
+dpad = 1.0 # flat-surface padding
+gp = 1.0 # grating periodicity
+gh = 0.5 # grating height
+gdc = 0.5 # grating duty cycle
+num_cells = 5 # number of grating unit cells
# air region thickness adjacent to grating
dair = 10 if field_profile else dpad
-wvl = 0.5 # center wavelength
-fcen = 1/wvl # center frequency
+wvl = 0.5 # center wavelength
+fcen = 1 / wvl # center frequency
k_point = mp.Vector3()
@@ -29,32 +29,49 @@
pml_layers = [mp.PML(thickness=dpml)]
-symmetries=[mp.Mirror(mp.Y)]
+symmetries = [mp.Mirror(mp.Y)]
-sx = dpml+dsub+gh+dair+dpml
-sy = dpml+dpad+num_cells*gp+dpad+dpml
-cell_size = mp.Vector3(sx,sy)
+sx = dpml + dsub + gh + dair + dpml
+sy = dpml + dpad + num_cells * gp + dpad + dpml
+cell_size = mp.Vector3(sx, sy)
-src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub)
-sources = [mp.Source(mp.GaussianSource(fcen,fwidth=0.2*fcen,is_integrated=True),
- component=mp.Ez,
- center=src_pt,
- size=mp.Vector3(y=sy))]
+src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub)
+sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=0.2 * fcen, is_integrated=True),
+ component=mp.Ez,
+ center=src_pt,
+ size=mp.Vector3(y=sy),
+ )
+]
-geometry = [mp.Block(material=glass,
- size=mp.Vector3(dpml+dsub,mp.inf,mp.inf),
- center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub)))]
-
-sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- geometry=geometry,
- k_point=k_point,
- sources=sources,
- symmetries=symmetries)
-
-mon_pt = mp.Vector3(0.5*sx-dpml-0.5*dair)
-near_fields = sim.add_dft_fields([mp.Ez], fcen, 0, 1, center=mon_pt, size=mp.Vector3(dair if field_profile else 0,sy-2*dpml))
+geometry = [
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),
+ center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)),
+ )
+]
+
+sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ k_point=k_point,
+ sources=sources,
+ symmetries=symmetries,
+)
+
+mon_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dair)
+near_fields = sim.add_dft_fields(
+ [mp.Ez],
+ fcen,
+ 0,
+ 1,
+ center=mon_pt,
+ size=mp.Vector3(dair if field_profile else 0, sy - 2 * dpml),
+)
sim.run(until_after_sources=100)
@@ -66,61 +83,82 @@
mp.Block(
material=glass,
size=mp.Vector3(gh, gdc * gp, mp.inf),
- center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh, -0.5 * sy +
- dpml + dpad + (j + 0.5) * gp))
- for j in range(num_cells))
-sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- geometry=geometry,
- k_point=k_point,
- sources=sources,
- symmetries=symmetries)
-
-near_fields = sim.add_dft_fields([mp.Ez], fcen, 0, 1, center=mon_pt, size=mp.Vector3(dair if field_profile else 0,sy-2*dpml))
+ center=mp.Vector3(
+ -0.5 * sx + dpml + dsub + 0.5 * gh, -0.5 * sy + dpml + dpad + (j + 0.5) * gp
+ ),
+ )
+ for j in range(num_cells)
+)
+sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ k_point=k_point,
+ sources=sources,
+ symmetries=symmetries,
+)
+
+near_fields = sim.add_dft_fields(
+ [mp.Ez],
+ fcen,
+ 0,
+ 1,
+ center=mon_pt,
+ size=mp.Vector3(dair if field_profile else 0, sy - 2 * dpml),
+)
sim.run(until_after_sources=100)
grating_dft = sim.get_dft_array(near_fields, mp.Ez, 0)
-scattered_field = grating_dft-flat_dft
-scattered_amplitude = np.abs(scattered_field)**2
+scattered_field = grating_dft - flat_dft
+scattered_amplitude = np.abs(scattered_field) ** 2
-[x,y,z,w] = sim.get_array_metadata(dft_cell=near_fields)
+[x, y, z, w] = sim.get_array_metadata(dft_cell=near_fields)
if field_profile:
- if mp.am_master():
- plt.figure(dpi=150)
- plt.pcolormesh(x,y,np.rot90(scattered_amplitude),cmap='inferno',shading='gouraud',vmin=0,vmax=scattered_amplitude.max())
- plt.gca().set_aspect('equal')
- plt.xlabel('x (μm)')
- plt.ylabel('y (μm)')
-
- # ensure that the height of the colobar matches that of the plot
- from mpl_toolkits.axes_grid1 import make_axes_locatable
- divider = make_axes_locatable(plt.gca())
- cax = divider.append_axes("right", size="5%", pad=0.05)
- plt.colorbar(cax=cax)
- plt.tight_layout()
- plt.show()
+ if mp.am_master():
+ plt.figure(dpi=150)
+ plt.pcolormesh(
+ x,
+ y,
+ np.rot90(scattered_amplitude),
+ cmap="inferno",
+ shading="gouraud",
+ vmin=0,
+ vmax=scattered_amplitude.max(),
+ )
+ plt.gca().set_aspect("equal")
+ plt.xlabel("x (μm)")
+ plt.ylabel("y (μm)")
+
+ # ensure that the height of the colobar matches that of the plot
+ from mpl_toolkits.axes_grid1 import make_axes_locatable
+
+ divider = make_axes_locatable(plt.gca())
+ cax = divider.append_axes("right", size="5%", pad=0.05)
+ plt.colorbar(cax=cax)
+ plt.tight_layout()
+ plt.show()
else:
- ky = np.fft.fftshift(np.fft.fftfreq(len(scattered_field), 1/resolution))
- FT_scattered_field = np.fft.fftshift(np.fft.fft(scattered_field))
- if mp.am_master():
- plt.figure(dpi=150)
- plt.subplots_adjust(hspace=0.3)
-
- plt.subplot(2,1,1)
- plt.plot(y,scattered_amplitude,'bo-')
- plt.xlabel("y (μm)")
- plt.ylabel("field amplitude")
-
- plt.subplot(2,1,2)
- plt.plot(ky,np.abs(FT_scattered_field)**2,'ro-')
- plt.gca().ticklabel_format(axis='y',style='sci',scilimits=(0,0))
- plt.xlabel(r'wavevector k$_y$, 2π (μm)$^{-1}$')
- plt.ylabel("Fourier transform")
- plt.gca().set_xlim([-3, 3])
-
- plt.tight_layout(pad=1.0)
- plt.show()
+ ky = np.fft.fftshift(np.fft.fftfreq(len(scattered_field), 1 / resolution))
+ FT_scattered_field = np.fft.fftshift(np.fft.fft(scattered_field))
+ if mp.am_master():
+ plt.figure(dpi=150)
+ plt.subplots_adjust(hspace=0.3)
+
+ plt.subplot(2, 1, 1)
+ plt.plot(y, scattered_amplitude, "bo-")
+ plt.xlabel("y (μm)")
+ plt.ylabel("field amplitude")
+
+ plt.subplot(2, 1, 2)
+ plt.plot(ky, np.abs(FT_scattered_field) ** 2, "ro-")
+ plt.gca().ticklabel_format(axis="y", style="sci", scilimits=(0, 0))
+ plt.xlabel(r"wavevector k$_y$, 2π (μm)$^{-1}$")
+ plt.ylabel("Fourier transform")
+ plt.gca().set_xlim([-3, 3])
+
+ plt.tight_layout(pad=1.0)
+ plt.show()
diff --git a/python/examples/gaussian-beam.py b/python/examples/gaussian-beam.py
index 0d794a4fa..eeb6a13ec 100644
--- a/python/examples/gaussian-beam.py
+++ b/python/examples/gaussian-beam.py
@@ -3,40 +3,52 @@
import meep as mp
import math
import matplotlib
-matplotlib.use('agg')
+
+matplotlib.use("agg")
import matplotlib.pyplot as plt
s = 14
resolution = 50
dpml = 2
-cell_size = mp.Vector3(s,s)
+cell_size = mp.Vector3(s, s)
boundary_layers = [mp.PML(thickness=dpml)]
-beam_x0 = mp.Vector3(0,3.0) # beam focus (relative to source center)
+beam_x0 = mp.Vector3(0, 3.0) # beam focus (relative to source center)
rot_angle = 0 # CCW rotation angle about z axis (0: +y axis)
-beam_kdir = mp.Vector3(0,1,0).rotate(mp.Vector3(0,0,1),math.radians(rot_angle)) # beam propagation direction
+beam_kdir = mp.Vector3(0, 1, 0).rotate(
+ mp.Vector3(0, 0, 1), math.radians(rot_angle)
+) # beam propagation direction
beam_w0 = 0.8 # beam waist radius
-beam_E0 = mp.Vector3(0,0,1)
+beam_E0 = mp.Vector3(0, 0, 1)
fcen = 1
-sources = [mp.GaussianBeamSource(src=mp.ContinuousSource(fcen),
- center=mp.Vector3(0,-0.5*s+dpml+1.0),
- size=mp.Vector3(s),
- beam_x0=beam_x0,
- beam_kdir=beam_kdir,
- beam_w0=beam_w0,
- beam_E0=beam_E0)]
-
-sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=boundary_layers,
- sources=sources)
+sources = [
+ mp.GaussianBeamSource(
+ src=mp.ContinuousSource(fcen),
+ center=mp.Vector3(0, -0.5 * s + dpml + 1.0),
+ size=mp.Vector3(s),
+ beam_x0=beam_x0,
+ beam_kdir=beam_kdir,
+ beam_w0=beam_w0,
+ beam_E0=beam_E0,
+ )
+]
+
+sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=boundary_layers,
+ sources=sources,
+)
sim.run(until=20)
-sim.plot2D(fields=mp.Ez,
- output_plane=mp.Volume(center=mp.Vector3(),
- size=mp.Vector3(s-2*dpml,s-2*dpml)))
+sim.plot2D(
+ fields=mp.Ez,
+ output_plane=mp.Volume(
+ center=mp.Vector3(), size=mp.Vector3(s - 2 * dpml, s - 2 * dpml)
+ ),
+)
-plt.savefig(f'Ez_angle{rot_angle}.png', bbox_inches='tight', pad_inches=0)
+plt.savefig(f"Ez_angle{rot_angle}.png", bbox_inches="tight", pad_inches=0)
diff --git a/python/examples/grating2d_triangular_lattice.py b/python/examples/grating2d_triangular_lattice.py
index 6ea00dc7a..61ce7ed8b 100644
--- a/python/examples/grating2d_triangular_lattice.py
+++ b/python/examples/grating2d_triangular_lattice.py
@@ -13,7 +13,7 @@
glass = mp.Medium(index=ng)
wvl = 0.5 # wavelength
-fcen = 1/wvl
+fcen = 1 / wvl
# rectangular supercell
sx = 1.0
@@ -25,63 +25,83 @@
hcyl = 0.5 # cylinder height
rcyl = 0.1 # cylinder radius
-sz = dpml+dsub+hcyl+dair+dpml
+sz = dpml + dsub + hcyl + dair + dpml
-cell_size = mp.Vector3(sx,sy,sz)
+cell_size = mp.Vector3(sx, sy, sz)
-boundary_layers = [mp.PML(thickness=dpml,direction=mp.Z)]
+boundary_layers = [mp.PML(thickness=dpml, direction=mp.Z)]
# periodic boundary conditions
k_point = mp.Vector3()
-src_pt = mp.Vector3(0,0,-0.5*sz+dpml)
-sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.1*fcen),
- size=mp.Vector3(sx,sy,0),
- center=src_pt,
- component=mp.Ex)]
-
-substrate = [mp.Block(size=mp.Vector3(mp.inf,mp.inf,dpml+dsub),
- center=mp.Vector3(0,0,-0.5*sz+0.5*(dpml+dsub)),
- material=glass)]
-
-cyl_grating = [mp.Cylinder(center=mp.Vector3(0,0,-0.5*sz+dpml+dsub+0.5*hcyl),
- radius=rcyl,
- height=hcyl,
- material=glass),
- mp.Cylinder(center=mp.Vector3(0.5*sx,0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl),
- radius=rcyl,
- height=hcyl,
- material=glass),
- mp.Cylinder(center=mp.Vector3(-0.5*sx,0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl),
- radius=rcyl,
- height=hcyl,
- material=glass),
- mp.Cylinder(center=mp.Vector3(-0.5*sx,-0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl),
- radius=rcyl,
- height=hcyl,
- material=glass),
- mp.Cylinder(center=mp.Vector3(0.5*sx,-0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl),
- radius=rcyl,
- height=hcyl,
- material=glass)]
+src_pt = mp.Vector3(0, 0, -0.5 * sz + dpml)
+sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=0.1 * fcen),
+ size=mp.Vector3(sx, sy, 0),
+ center=src_pt,
+ component=mp.Ex,
+ )
+]
+
+substrate = [
+ mp.Block(
+ size=mp.Vector3(mp.inf, mp.inf, dpml + dsub),
+ center=mp.Vector3(0, 0, -0.5 * sz + 0.5 * (dpml + dsub)),
+ material=glass,
+ )
+]
+
+cyl_grating = [
+ mp.Cylinder(
+ center=mp.Vector3(0, 0, -0.5 * sz + dpml + dsub + 0.5 * hcyl),
+ radius=rcyl,
+ height=hcyl,
+ material=glass,
+ ),
+ mp.Cylinder(
+ center=mp.Vector3(0.5 * sx, 0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl),
+ radius=rcyl,
+ height=hcyl,
+ material=glass,
+ ),
+ mp.Cylinder(
+ center=mp.Vector3(-0.5 * sx, 0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl),
+ radius=rcyl,
+ height=hcyl,
+ material=glass,
+ ),
+ mp.Cylinder(
+ center=mp.Vector3(-0.5 * sx, -0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl),
+ radius=rcyl,
+ height=hcyl,
+ material=glass,
+ ),
+ mp.Cylinder(
+ center=mp.Vector3(0.5 * sx, -0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl),
+ radius=rcyl,
+ height=hcyl,
+ material=glass,
+ ),
+]
geometry = substrate + cyl_grating
-sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- sources=sources,
- geometry=geometry,
- boundary_layers=boundary_layers,
- k_point=k_point)
+sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ sources=sources,
+ geometry=geometry,
+ boundary_layers=boundary_layers,
+ k_point=k_point,
+)
-tran_pt = mp.Vector3(0,0,0.5*sz-dpml)
-tran_flux = sim.add_mode_monitor(fcen,
- 0,
- 1,
- mp.ModeRegion(center=tran_pt,
- size=mp.Vector3(sx,sy,0)))
+tran_pt = mp.Vector3(0, 0, 0.5 * sz - dpml)
+tran_flux = sim.add_mode_monitor(
+ fcen, 0, 1, mp.ModeRegion(center=tran_pt, size=mp.Vector3(sx, sy, 0))
+)
-sim.run(until_after_sources=mp.stop_when_fields_decayed(20,mp.Ex,src_pt,1e-6))
+sim.run(until_after_sources=mp.stop_when_fields_decayed(20, mp.Ex, src_pt, 1e-6))
# diffraction order of unit cell (triangular lattice)
mx = 0
@@ -92,14 +112,12 @@
# only even orders should produce nonzero power
nx = mx
for ny in range(4):
- kz2 = fcen**2-(nx/sx)**2-(ny/sy)**2
+ kz2 = fcen**2 - (nx / sx) ** 2 - (ny / sy) ** 2
if kz2 > 0:
- res = sim.get_eigenmode_coefficients(tran_flux,
- mp.DiffractedPlanewave((nx,ny,0),
- mp.Vector3(0,1,0),
- 1,
- 0))
+ res = sim.get_eigenmode_coefficients(
+ tran_flux, mp.DiffractedPlanewave((nx, ny, 0), mp.Vector3(0, 1, 0), 1, 0)
+ )
t_coeffs = res.alpha
- tran = abs(t_coeffs[0,0,0])**2
+ tran = abs(t_coeffs[0, 0, 0]) ** 2
- print("order:, {}, {}, {:.5f}".format(nx,ny,tran))
+ print("order:, {}, {}, {:.5f}".format(nx, ny, tran))
diff --git a/python/examples/holey-wvg-bands.ipynb b/python/examples/holey-wvg-bands.ipynb
index 8af8e0a94..9ed14d556 100644
--- a/python/examples/holey-wvg-bands.ipynb
+++ b/python/examples/holey-wvg-bands.ipynb
@@ -33,6 +33,7 @@
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"from IPython.display import Video\n",
+ "\n",
"%matplotlib notebook"
]
},
@@ -50,21 +51,21 @@
"outputs": [],
"source": [
"# Some parameters to describe the geometry:\n",
- "eps = 13 # dielectric constant of waveguide\n",
- "w = 1.2 # width of waveguide\n",
- "r = 0.36 # radius of holes\n",
+ "eps = 13 # dielectric constant of waveguide\n",
+ "w = 1.2 # width of waveguide\n",
+ "r = 0.36 # radius of holes\n",
"\n",
"# The cell dimensions\n",
- "sy = 12 # size of cell in y direction (perpendicular to wvg.)\n",
- "dpml = 1 # PML thickness (y direction only!)\n",
+ "sy = 12 # size of cell in y direction (perpendicular to wvg.)\n",
+ "dpml = 1 # PML thickness (y direction only!)\n",
"cell = mp.Vector3(1, sy)\n",
"\n",
"b = mp.Block(size=mp.Vector3(1e20, w, 1e20), material=mp.Medium(epsilon=eps))\n",
"c = mp.Cylinder(radius=r)\n",
"\n",
- "geometry = [b,c]\n",
+ "geometry = [b, c]\n",
"\n",
- "resolution=20"
+ "resolution = 20"
]
},
{
@@ -99,10 +100,15 @@
"outputs": [],
"source": [
"fcen = 0.25 # pulse center frequency\n",
- "df = 1.5 # pulse freq. width: large df = short impulse\n",
+ "df = 1.5 # pulse freq. width: large df = short impulse\n",
"\n",
- "s = [mp.Source(src=mp.GaussianSource(fcen, fwidth=df), component=mp.Hz,\n",
- " center=mp.Vector3(0.1234,0))]"
+ "s = [\n",
+ " mp.Source(\n",
+ " src=mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Hz,\n",
+ " center=mp.Vector3(0.1234, 0),\n",
+ " )\n",
+ "]"
]
},
{
@@ -162,12 +168,14 @@
}
],
"source": [
- "sim = mp.Simulation(cell_size=cell,\n",
- " geometry=geometry,\n",
- " boundary_layers=pml_layers,\n",
- " sources=s,\n",
- " symmetries=sym,\n",
- " resolution=resolution)\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " geometry=geometry,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=s,\n",
+ " symmetries=sym,\n",
+ " resolution=resolution,\n",
+ ")\n",
"f = plt.figure(dpi=150)\n",
"sim.plot2D(ax=f.gca())\n",
"plt.show()"
@@ -210,8 +218,10 @@
"kx = 0.4\n",
"sim.k_point = mp.Vector3(kx)\n",
"\n",
- "sim.run(mp.after_sources(mp.Harminv(mp.Hz, mp.Vector3(0.1234), fcen, df)),\n",
- " until_after_sources=300)"
+ "sim.run(\n",
+ " mp.after_sources(mp.Harminv(mp.Hz, mp.Vector3(0.1234), fcen, df)),\n",
+ " until_after_sources=300,\n",
+ ")"
]
},
{
@@ -263,18 +273,18 @@
],
"source": [
"kx = [k.x for k in kpts]\n",
- "fig = plt.figure(dpi=100,figsize=(5,5))\n",
+ "fig = plt.figure(dpi=100, figsize=(5, 5))\n",
"ax = plt.subplot(111)\n",
"for i in range(len(all_freqs)):\n",
" for ii in range(len(all_freqs[i])):\n",
- " plt.scatter(kx[i],np.real(all_freqs[i][ii]),color='b')\n",
+ " plt.scatter(kx[i], np.real(all_freqs[i][ii]), color=\"b\")\n",
"\n",
- "ax.fill_between(kx, kx, 1.0, interpolate=True, color='gray', alpha = 0.3)\n",
- "plt.xlim(0,0.5)\n",
- "plt.ylim(0,1)\n",
+ "ax.fill_between(kx, kx, 1.0, interpolate=True, color=\"gray\", alpha=0.3)\n",
+ "plt.xlim(0, 0.5)\n",
+ "plt.ylim(0, 1)\n",
"plt.grid(True)\n",
- "plt.xlabel('$k_x(2\\pi)$')\n",
- "plt.ylabel('$\\omega(2\\pi c)$')\n",
+ "plt.xlabel(\"$k_x(2\\pi)$\")\n",
+ "plt.ylabel(\"$\\omega(2\\pi c)$\")\n",
"plt.tight_layout()\n",
"plt.show()"
]
@@ -314,19 +324,26 @@
"outputs": [],
"source": [
"def run_sim(kx, omega, filename):\n",
- " s = [mp.Source(src=mp.GaussianSource(omega, fwidth=0.01), component=mp.Hz,\n",
- " center=mp.Vector3(0.1234,0))]\n",
- " sim = mp.Simulation(cell_size=cell,\n",
- " geometry=geometry,\n",
- " boundary_layers=pml_layers,\n",
- " sources=s,\n",
- " symmetries=sym,\n",
- " k_point = mp.Vector3(kx),\n",
- " resolution=resolution)\n",
+ " s = [\n",
+ " mp.Source(\n",
+ " src=mp.GaussianSource(omega, fwidth=0.01),\n",
+ " component=mp.Hz,\n",
+ " center=mp.Vector3(0.1234, 0),\n",
+ " )\n",
+ " ]\n",
+ " sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " geometry=geometry,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=s,\n",
+ " symmetries=sym,\n",
+ " k_point=mp.Vector3(kx),\n",
+ " resolution=resolution,\n",
+ " )\n",
" f = plt.figure(dpi=100)\n",
- " animate = mp.Animate2D(sim,fields=mp.Hz,f=f,normalize=True,realtime=False)\n",
- " sim.run(mp.at_every(5,animate),until_after_sources=1)\n",
- " animate.to_mp4(10,filename)\n",
+ " animate = mp.Animate2D(sim, fields=mp.Hz, f=f, normalize=True, realtime=False)\n",
+ " sim.run(mp.at_every(5, animate), until_after_sources=1)\n",
+ " animate.to_mp4(10, filename)\n",
" plt.close()"
]
},
@@ -459,11 +476,13 @@
}
],
"source": [
- "kx = [0.4,0.4,0.1,0.3,0.25]\n",
- "omega = [0.1896,0.3175,0.4811,0.8838,0.2506]\n",
- "filename = ['media/holey-wvg-bands-{}-{}.mp4'.format(k,om) for (k,om) in zip (kx,omega)]\n",
- "for (k,om,fn) in zip(kx,omega,filename):\n",
- " run_sim(*[k,om,fn])"
+ "kx = [0.4, 0.4, 0.1, 0.3, 0.25]\n",
+ "omega = [0.1896, 0.3175, 0.4811, 0.8838, 0.2506]\n",
+ "filename = [\n",
+ " \"media/holey-wvg-bands-{}-{}.mp4\".format(k, om) for (k, om) in zip(kx, omega)\n",
+ "]\n",
+ "for (k, om, fn) in zip(kx, omega, filename):\n",
+ " run_sim(*[k, om, fn])"
]
},
{
@@ -544,6 +563,7 @@
],
"source": [
"import IPython\n",
+ "\n",
"for i in range(len(filename)):\n",
" IPython.display.display(IPython.display.Video(filename[i]))"
]
diff --git a/python/examples/holey-wvg-bands.py b/python/examples/holey-wvg-bands.py
index d56cc420e..456793bdf 100644
--- a/python/examples/holey-wvg-bands.py
+++ b/python/examples/holey-wvg-bands.py
@@ -30,13 +30,22 @@ def main():
fcen = 0.25 # pulse center frequency
df = 1.5 # pulse freq. width: large df = short impulse
- s = mp.Source(src=mp.GaussianSource(fcen, fwidth=df), component=mp.Hz,
- center=mp.Vector3(0.1234))
+ s = mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Hz,
+ center=mp.Vector3(0.1234),
+ )
sym = mp.Mirror(direction=mp.Y, phase=-1)
- sim = mp.Simulation(cell_size=cell, geometry=[b, c], sources=[s], symmetries=[sym],
- boundary_layers=[mp.PML(dpml, direction=mp.Y)], resolution=20)
+ sim = mp.Simulation(
+ cell_size=cell,
+ geometry=[b, c],
+ sources=[s],
+ symmetries=[sym],
+ boundary_layers=[mp.PML(dpml, direction=mp.Y)],
+ resolution=20,
+ )
if kx := False:
sim.k_point = mp.Vector3(kx)
@@ -44,7 +53,7 @@ def main():
sim.run(
mp.at_beginning(mp.output_epsilon),
mp.after_sources(mp.Harminv(mp.Hz, mp.Vector3(0.1234), fcen, df)),
- until_after_sources=300
+ until_after_sources=300,
)
sim.run(mp.at_every(1 / fcen / 20, mp.output_hfield_z), until=1 / fcen)
@@ -55,5 +64,5 @@ def main():
sim.run_k_points(300, mp.interpolate(k_interp, [mp.Vector3(), mp.Vector3(0.5)]))
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/python/examples/holey-wvg-cavity.ipynb b/python/examples/holey-wvg-cavity.ipynb
index 1e58e242b..393bb3187 100644
--- a/python/examples/holey-wvg-cavity.ipynb
+++ b/python/examples/holey-wvg-cavity.ipynb
@@ -34,6 +34,7 @@
"import numpy as np\n",
"from matplotlib import pyplot as plt\n",
"from IPython.display import Video\n",
+ "\n",
"%matplotlib notebook"
]
},
@@ -50,17 +51,17 @@
"metadata": {},
"outputs": [],
"source": [
- "resolution = 20 # pixels/um\n",
+ "resolution = 20 # pixels/um\n",
"\n",
- "eps = 13 # dielectric constant of waveguide\n",
- "w = 1.2 # width of waveguide\n",
- "r = 0.36 # radius of holes\n",
- "d = 1.4 # defect spacing (ordinary spacing = 1)\n",
- "N = 3 # number of holes on either side of defect\n",
+ "eps = 13 # dielectric constant of waveguide\n",
+ "w = 1.2 # width of waveguide\n",
+ "r = 0.36 # radius of holes\n",
+ "d = 1.4 # defect spacing (ordinary spacing = 1)\n",
+ "N = 3 # number of holes on either side of defect\n",
"\n",
- "sy = 6 # size of cell in y direction (perpendicular to wvg.)\n",
- "pad = 2 # padding between last hole and PML edge\n",
- "dpml = 1 # PML thickness"
+ "sy = 6 # size of cell in y direction (perpendicular to wvg.)\n",
+ "pad = 2 # padding between last hole and PML edge\n",
+ "dpml = 1 # PML thickness"
]
},
{
@@ -76,7 +77,7 @@
"metadata": {},
"outputs": [],
"source": [
- "sx = 2*(pad+dpml+N)+d-1 # size of cell in x direction"
+ "sx = 2 * (pad + dpml + N) + d - 1 # size of cell in x direction"
]
},
{
@@ -92,7 +93,7 @@
"metadata": {},
"outputs": [],
"source": [
- "cell = mp.Vector3(sx,sy,0)"
+ "cell = mp.Vector3(sx, sy, 0)"
]
},
{
@@ -108,12 +109,12 @@
"metadata": {},
"outputs": [],
"source": [
- "blk = mp.Block(size=mp.Vector3(mp.inf,w,mp.inf), material=mp.Medium(epsilon=eps))\n",
+ "blk = mp.Block(size=mp.Vector3(mp.inf, w, mp.inf), material=mp.Medium(epsilon=eps))\n",
"geometry = [blk]\n",
"\n",
"for i in range(N):\n",
- " geometry.append(mp.Cylinder(r, center=mp.Vector3(d/2+i)))\n",
- " geometry.append(mp.Cylinder(r, center=mp.Vector3(-(d/2+i))))"
+ " geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)))\n",
+ " geometry.append(mp.Cylinder(r, center=mp.Vector3(-(d / 2 + i))))"
]
},
{
@@ -147,8 +148,8 @@
"metadata": {},
"outputs": [],
"source": [
- "fcen = 0.25 # pulse center frequency\n",
- "df = 0.2 # pulse frequency width"
+ "fcen = 0.25 # pulse center frequency\n",
+ "df = 0.2 # pulse frequency width"
]
},
{
@@ -164,10 +165,14 @@
"metadata": {},
"outputs": [],
"source": [
- "src = [mp.Source(mp.GaussianSource(fcen, fwidth=df),\n",
- " component=mp.Ey,\n",
- " center=mp.Vector3(-0.5*sx+dpml),\n",
- " size=mp.Vector3(0,w))]"
+ "src = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ey,\n",
+ " center=mp.Vector3(-0.5 * sx + dpml),\n",
+ " size=mp.Vector3(0, w),\n",
+ " )\n",
+ "]"
]
},
{
@@ -199,12 +204,14 @@
"metadata": {},
"outputs": [],
"source": [
- "sim = mp.Simulation(cell_size=cell,\n",
- " geometry=geometry,\n",
- " boundary_layers=pml_layers,\n",
- " sources=src,\n",
- " symmetries=sym,\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " geometry=geometry,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=src,\n",
+ " symmetries=sym,\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -220,10 +227,11 @@
"metadata": {},
"outputs": [],
"source": [
- "freg = mp.FluxRegion(center=mp.Vector3(0.5*sx-dpml-0.5),\n",
- " size=mp.Vector3(0,2*w))\n",
+ "freg = mp.FluxRegion(\n",
+ " center=mp.Vector3(0.5 * sx - dpml - 0.5), size=mp.Vector3(0, 2 * w)\n",
+ ")\n",
"\n",
- "nfreq = 500 # number of frequencies at which to compute flux\n",
+ "nfreq = 500 # number of frequencies at which to compute flux\n",
"\n",
"# transmitted flux\n",
"trans = sim.add_flux(fcen, df, nfreq, freg)"
@@ -336,10 +344,14 @@
],
"source": [
"f = plt.figure(dpi=150)\n",
- "animate = mp.Animate2D(sim,f=f,fields=mp.Hz,realtime=False,normalize=True)\n",
+ "animate = mp.Animate2D(sim, f=f, fields=mp.Hz, realtime=False, normalize=True)\n",
"\n",
- "sim.run(mp.during_sources(mp.at_every(0.4, animate)),\n",
- " until_after_sources=mp.stop_when_fields_decayed(50, mp.Ey, mp.Vector3(0.5*sx-dpml-0.5), 1e-3))\n",
+ "sim.run(\n",
+ " mp.during_sources(mp.at_every(0.4, animate)),\n",
+ " until_after_sources=mp.stop_when_fields_decayed(\n",
+ " 50, mp.Ey, mp.Vector3(0.5 * sx - dpml - 0.5), 1e-3\n",
+ " ),\n",
+ ")\n",
"plt.close()"
]
},
@@ -372,8 +384,8 @@
}
],
"source": [
- "filename = 'media/hole-wvg-cavity.mp4'\n",
- "animate.to_mp4(10,filename)\n",
+ "filename = \"media/hole-wvg-cavity.mp4\"\n",
+ "animate.to_mp4(10, filename)\n",
"Video(filename)"
]
},
@@ -392,35 +404,46 @@
"metadata": {},
"outputs": [],
"source": [
- "def sim_cavity(N=3,sy=6):\n",
- " sx = 2*(pad+dpml+N)+d-1 # size of cell in x direction\n",
- " cell = mp.Vector3(sx,sy,0)\n",
- " blk = mp.Block(size=mp.Vector3(mp.inf,w,mp.inf), material=mp.Medium(epsilon=eps))\n",
+ "def sim_cavity(N=3, sy=6):\n",
+ " sx = 2 * (pad + dpml + N) + d - 1 # size of cell in x direction\n",
+ " cell = mp.Vector3(sx, sy, 0)\n",
+ " blk = mp.Block(size=mp.Vector3(mp.inf, w, mp.inf), material=mp.Medium(epsilon=eps))\n",
" geometry = [blk]\n",
"\n",
" for i in range(N):\n",
- " geometry.append(mp.Cylinder(r, center=mp.Vector3(d/2+i)))\n",
- " geometry.append(mp.Cylinder(r, center=mp.Vector3(-(d/2+i))))\n",
- " \n",
- " src = [mp.Source(mp.GaussianSource(fcen, fwidth=df),\n",
- " component=mp.Ey,\n",
- " center=mp.Vector3(-0.5*sx+dpml),\n",
- " size=mp.Vector3(0,w))]\n",
- " \n",
- " sim = mp.Simulation(cell_size=cell,\n",
- " geometry=geometry,\n",
- " boundary_layers=pml_layers,\n",
- " sources=src,\n",
- " symmetries=sym,\n",
- " resolution=resolution)\n",
- " \n",
- " freg = mp.FluxRegion(center=mp.Vector3(0.5*sx-dpml-0.5),\n",
- " size=mp.Vector3(0,2*w))\n",
+ " geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)))\n",
+ " geometry.append(mp.Cylinder(r, center=mp.Vector3(-(d / 2 + i))))\n",
+ "\n",
+ " src = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ey,\n",
+ " center=mp.Vector3(-0.5 * sx + dpml),\n",
+ " size=mp.Vector3(0, w),\n",
+ " )\n",
+ " ]\n",
+ "\n",
+ " sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " geometry=geometry,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=src,\n",
+ " symmetries=sym,\n",
+ " resolution=resolution,\n",
+ " )\n",
+ "\n",
+ " freg = mp.FluxRegion(\n",
+ " center=mp.Vector3(0.5 * sx - dpml - 0.5), size=mp.Vector3(0, 2 * w)\n",
+ " )\n",
" nfreq = 500\n",
" trans = sim.add_flux(fcen, df, nfreq, freg)\n",
- " \n",
- " sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ey, mp.Vector3(0.5*sx-dpml-0.5), 1e-3))\n",
- " \n",
+ "\n",
+ " sim.run(\n",
+ " until_after_sources=mp.stop_when_fields_decayed(\n",
+ " 50, mp.Ey, mp.Vector3(0.5 * sx - dpml - 0.5), 1e-3\n",
+ " )\n",
+ " )\n",
+ "\n",
" freqs = mp.get_flux_freqs(trans)\n",
" psd = mp.get_fluxes(trans)\n",
"\n",
@@ -502,8 +525,8 @@
}
],
"source": [
- "freqs_wg, psd_wg = sim_cavity(N=0) # simple waveguide\n",
- "freqs_cav, psd_cav = sim_cavity() # cavity"
+ "freqs_wg, psd_wg = sim_cavity(N=0) # simple waveguide\n",
+ "freqs_cav, psd_cav = sim_cavity() # cavity"
]
},
{
@@ -525,17 +548,17 @@
}
],
"source": [
- "fig = plt.figure(figsize=(11,6),dpi=100)\n",
+ "fig = plt.figure(figsize=(11, 6), dpi=100)\n",
"ax = fig.add_subplot(111)\n",
- "plt.plot(freqs_cav,np.array(psd_cav)/np.array(psd_wg),'o-')\n",
+ "plt.plot(freqs_cav, np.array(psd_cav) / np.array(psd_wg), \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('Frequency')\n",
- "plt.ylabel('Transmission')\n",
+ "plt.xlabel(\"Frequency\")\n",
+ "plt.ylabel(\"Transmission\")\n",
"\n",
"ax2 = fig.add_axes([0.52, 0.6, 0.2, 0.25])\n",
- "plt.plot(freqs_cav,np.array(psd_cav)/np.array(psd_wg),'o-')\n",
- "plt.xlim(0.23,0.24)\n",
- "plt.ylim(0,0.8)\n",
+ "plt.plot(freqs_cav, np.array(psd_cav) / np.array(psd_wg), \"o-\")\n",
+ "plt.xlim(0.23, 0.24)\n",
+ "plt.ylim(0, 0.8)\n",
"plt.grid(True)"
]
},
@@ -567,27 +590,29 @@
"metadata": {},
"outputs": [],
"source": [
- "def sim_cavity(N=3,sy=6,fcen=0.25,df=0.2):\n",
- " sx = 2*(pad+dpml+N)+d-1 # size of cell in x direction\n",
- " cell = mp.Vector3(sx,sy,0)\n",
- " blk = mp.Block(size=mp.Vector3(mp.inf,w,mp.inf), material=mp.Medium(epsilon=eps))\n",
+ "def sim_cavity(N=3, sy=6, fcen=0.25, df=0.2):\n",
+ " sx = 2 * (pad + dpml + N) + d - 1 # size of cell in x direction\n",
+ " cell = mp.Vector3(sx, sy, 0)\n",
+ " blk = mp.Block(size=mp.Vector3(mp.inf, w, mp.inf), material=mp.Medium(epsilon=eps))\n",
" geometry = [blk]\n",
"\n",
" for i in range(N):\n",
- " geometry.append(mp.Cylinder(r, center=mp.Vector3(d/2+i)))\n",
- " geometry.append(mp.Cylinder(r, center=mp.Vector3(-(d/2+i))))\n",
- " \n",
+ " geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)))\n",
+ " geometry.append(mp.Cylinder(r, center=mp.Vector3(-(d / 2 + i))))\n",
+ "\n",
" src = [mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Hz, mp.Vector3(0))]\n",
- " \n",
+ "\n",
" sym = [mp.Mirror(mp.Y, phase=-1), mp.Mirror(mp.X, phase=-1)]\n",
- " \n",
- " sim = mp.Simulation(cell_size=cell,\n",
- " geometry=geometry,\n",
- " boundary_layers=pml_layers,\n",
- " sources=src,\n",
- " symmetries=sym,\n",
- " resolution=resolution)\n",
- " \n",
+ "\n",
+ " sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " geometry=geometry,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=src,\n",
+ " symmetries=sym,\n",
+ " resolution=resolution,\n",
+ " )\n",
+ "\n",
" return sim"
]
},
@@ -676,13 +701,12 @@
],
"source": [
"h = mp.Harminv(mp.Hz, mp.Vector3(), fcen, df)\n",
- "sim.run(mp.after_sources(h),\n",
- " until_after_sources=400)\n",
+ "sim.run(mp.after_sources(h), until_after_sources=400)\n",
"\n",
"f = plt.figure(dpi=150)\n",
- "animate = mp.Animate2D(sim,f=f,fields=mp.Hz,realtime=False,normalize=True)\n",
+ "animate = mp.Animate2D(sim, f=f, fields=mp.Hz, realtime=False, normalize=True)\n",
"\n",
- "sim.run(mp.at_every(1/fcen/20, animate), until=1/fcen)\n",
+ "sim.run(mp.at_every(1 / fcen / 20, animate), until=1 / fcen)\n",
"plt.close()"
]
},
@@ -715,8 +739,8 @@
}
],
"source": [
- "filename = 'media/hole-wvg-cavity-res.mp4'\n",
- "animate.to_mp4(10,filename)\n",
+ "filename = \"media/hole-wvg-cavity-res.mp4\"\n",
+ "animate.to_mp4(10, filename)\n",
"Video(filename)"
]
},
@@ -745,7 +769,7 @@
"Q = [m.Q for m in h.modes]\n",
"\n",
"for fiter, qiter in zip(f, Q):\n",
- " print(f'Resonant frequency: {fiter}, Q: {qiter}') "
+ " print(f\"Resonant frequency: {fiter}, Q: {qiter}\")"
]
},
{
@@ -1072,14 +1096,13 @@
}
],
"source": [
- "N_vec = np.arange(2,16,2)\n",
+ "N_vec = np.arange(2, 16, 2)\n",
"f = []\n",
"Q = []\n",
"for N in N_vec:\n",
" sim = sim_cavity(N=N)\n",
" h = mp.Harminv(mp.Hz, mp.Vector3(), fcen, df)\n",
- " sim.run(mp.after_sources(h),\n",
- " until_after_sources=400)\n",
+ " sim.run(mp.after_sources(h), until_after_sources=400)\n",
" f.append([m.freq for m in h.modes])\n",
" Q.append([m.Q for m in h.modes])"
]
@@ -1105,7 +1128,7 @@
],
"source": [
"for fiter, qiter in zip(f, Q):\n",
- " print(f'Resonant frequency: {fiter}, Q: {qiter}') "
+ " print(f\"Resonant frequency: {fiter}, Q: {qiter}\")"
]
},
{
@@ -1141,10 +1164,10 @@
" Q_fund[i] = Q[i][int(idx[i])]\n",
"\n",
"plt.figure(dpi=150)\n",
- "plt.semilogy(N_vec,Q_fund,'o-')\n",
+ "plt.semilogy(N_vec, Q_fund, \"o-\")\n",
"plt.grid(True)\n",
- "plt.xlabel('N (# of periods)')\n",
- "plt.ylabel('Q')\n",
+ "plt.xlabel(\"N (# of periods)\")\n",
+ "plt.ylabel(\"Q\")\n",
"plt.show()"
]
},
@@ -1245,7 +1268,7 @@
}
],
"source": [
- "sim = sim_cavity(N=16,sy=12,fcen=0.328227374843021,df=0.1)\n",
+ "sim = sim_cavity(N=16, sy=12, fcen=0.328227374843021, df=0.1)\n",
"sim.run(until_after_sources=600)"
]
},
@@ -1269,7 +1292,7 @@
],
"source": [
"f = plt.figure(dpi=150)\n",
- "sim.plot2D(ax=f.gca(),fields=mp.Hz)\n",
+ "sim.plot2D(ax=f.gca(), fields=mp.Hz)\n",
"plt.show()"
]
},
diff --git a/python/examples/holey-wvg-cavity.py b/python/examples/holey-wvg-cavity.py
index 34f28bd58..0868401e4 100644
--- a/python/examples/holey-wvg-cavity.py
+++ b/python/examples/holey-wvg-cavity.py
@@ -12,84 +12,119 @@
import argparse
import meep as mp
+
def main(args):
- resolution = 20 # pixels/um
+ resolution = 20 # pixels/um
- eps = 13 # dielectric constant of waveguide
- w = 1.2 # width of waveguide
- r = 0.36 # radius of holes
- d = 1.4 # defect spacing (ordinary spacing = 1)
- N = args.N # number of holes on either side of defect
+ eps = 13 # dielectric constant of waveguide
+ w = 1.2 # width of waveguide
+ r = 0.36 # radius of holes
+ d = 1.4 # defect spacing (ordinary spacing = 1)
+ N = args.N # number of holes on either side of defect
sy = args.sy # size of cell in y direction (perpendicular to wvg.)
- pad = 2 # padding between last hole and PML edge
- dpml = 1 # PML thickness
+ pad = 2 # padding between last hole and PML edge
+ dpml = 1 # PML thickness
- sx = 2*(pad+dpml+N)+d-1 # size of cell in x direction
+ sx = 2 * (pad + dpml + N) + d - 1 # size of cell in x direction
- cell = mp.Vector3(sx,sy,0)
+ cell = mp.Vector3(sx, sy, 0)
- blk = mp.Block(size=mp.Vector3(mp.inf,w,mp.inf),
- material=mp.Medium(epsilon=eps))
+ blk = mp.Block(size=mp.Vector3(mp.inf, w, mp.inf), material=mp.Medium(epsilon=eps))
geometry = [blk]
for i in range(N):
- geometry.append(mp.Cylinder(r, center=mp.Vector3(d/2+i)))
- geometry.append(mp.Cylinder(r, center=mp.Vector3(-(d/2+i))))
+ geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)))
+ geometry.append(mp.Cylinder(r, center=mp.Vector3(-(d / 2 + i))))
fcen = args.fcen # pulse center frequency
- df = args.df # pulse frequency width
- sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- sources=[],
- boundary_layers=[mp.PML(dpml)],
- resolution=20)
+ df = args.df # pulse frequency width
+ sim = mp.Simulation(
+ cell_size=cell,
+ geometry=geometry,
+ sources=[],
+ boundary_layers=[mp.PML(dpml)],
+ resolution=20,
+ )
if args.resonant_modes:
- sim.sources.append(mp.Source(mp.GaussianSource(fcen, fwidth=df),
- component=mp.Hz,
- center=mp.Vector3()))
+ sim.sources.append(
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df), component=mp.Hz, center=mp.Vector3()
+ )
+ )
sim.symmetries.append(mp.Mirror(mp.Y, phase=-1))
sim.symmetries.append(mp.Mirror(mp.X, phase=-1))
- sim.run(mp.at_beginning(mp.output_epsilon),
- mp.after_sources(mp.Harminv(mp.Hz, mp.Vector3(), fcen, df)),
- until_after_sources=400)
+ sim.run(
+ mp.at_beginning(mp.output_epsilon),
+ mp.after_sources(mp.Harminv(mp.Hz, mp.Vector3(), fcen, df)),
+ until_after_sources=400,
+ )
- sim.run(mp.at_every(1/fcen/20, mp.output_hfield_z), until=1/fcen)
+ sim.run(mp.at_every(1 / fcen / 20, mp.output_hfield_z), until=1 / fcen)
else:
- sim.sources.append(mp.Source(mp.GaussianSource(fcen, fwidth=df),
- component=mp.Ey,
- center=mp.Vector3(-0.5*sx+dpml),
- size=mp.Vector3(0,w)))
+ sim.sources.append(
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ey,
+ center=mp.Vector3(-0.5 * sx + dpml),
+ size=mp.Vector3(0, w),
+ )
+ )
sim.symmetries.append(mp.Mirror(mp.Y, phase=-1))
- freg = mp.FluxRegion(center=mp.Vector3(0.5*sx-dpml-0.5),
- size=mp.Vector3(0,2*w))
+ freg = mp.FluxRegion(
+ center=mp.Vector3(0.5 * sx - dpml - 0.5), size=mp.Vector3(0, 2 * w)
+ )
- nfreq = 500 # number of frequencies at which to compute flux
+ nfreq = 500 # number of frequencies at which to compute flux
# transmitted flux
trans = sim.add_flux(fcen, df, nfreq, freg)
vol = mp.Volume(mp.Vector3(), size=mp.Vector3(sx))
- sim.run(mp.at_beginning(mp.output_epsilon),
- mp.during_sources(mp.in_volume(vol, mp.to_appended("hz-slice", mp.at_every(0.4, mp.output_hfield_z)))),
- until_after_sources=mp.stop_when_fields_decayed(50, mp.Ey, mp.Vector3(0.5*sx-dpml-0.5), 1e-3))
+ sim.run(
+ mp.at_beginning(mp.output_epsilon),
+ mp.during_sources(
+ mp.in_volume(
+ vol,
+ mp.to_appended("hz-slice", mp.at_every(0.4, mp.output_hfield_z)),
+ )
+ ),
+ until_after_sources=mp.stop_when_fields_decayed(
+ 50, mp.Ey, mp.Vector3(0.5 * sx - dpml - 0.5), 1e-3
+ ),
+ )
sim.display_fluxes(trans) # print out the flux spectrum
-if __name__ == '__main__':
+
+if __name__ == "__main__":
parser = argparse.ArgumentParser()
- parser.add_argument('-r', '--resonant_modes', action='store_true', default=False,
- help="Compute resonant modes. Default is transmission spectrum.")
- parser.add_argument('-N', type=int, default=3, help='number of holes on either side of defect')
- parser.add_argument('-sy', type=int, default=6, help='size of cell in y direction (perpendicular to wvg.)')
- parser.add_argument('-fcen', type=float, default=0.25, help='pulse center frequency')
- parser.add_argument('-df', type=float, default=0.2, help='pulse frequency width')
+ parser.add_argument(
+ "-r",
+ "--resonant_modes",
+ action="store_true",
+ default=False,
+ help="Compute resonant modes. Default is transmission spectrum.",
+ )
+ parser.add_argument(
+ "-N", type=int, default=3, help="number of holes on either side of defect"
+ )
+ parser.add_argument(
+ "-sy",
+ type=int,
+ default=6,
+ help="size of cell in y direction (perpendicular to wvg.)",
+ )
+ parser.add_argument(
+ "-fcen", type=float, default=0.25, help="pulse center frequency"
+ )
+ parser.add_argument("-df", type=float, default=0.2, help="pulse frequency width")
args = parser.parse_args()
main(args)
diff --git a/python/examples/material-dispersion.py b/python/examples/material-dispersion.py
index 10acd16cc..860a81886 100644
--- a/python/examples/material-dispersion.py
+++ b/python/examples/material-dispersion.py
@@ -18,7 +18,7 @@
susceptibilities = [
mp.LorentzianSusceptibility(frequency=1.1, gamma=1e-5, sigma=0.5),
- mp.LorentzianSusceptibility(frequency=0.5, gamma=0.1, sigma=2e-5)
+ mp.LorentzianSusceptibility(frequency=0.5, gamma=0.1, sigma=2e-5),
]
default_material = mp.Medium(epsilon=2.25, E_susceptibilities=susceptibilities)
@@ -26,7 +26,9 @@
fcen = 1.0
df = 2.0
-sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=mp.Vector3())]
+sources = [
+ mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=mp.Vector3())
+]
kmin = 0.3
kmax = 2.2
@@ -39,11 +41,11 @@
geometry=[],
sources=sources,
default_material=default_material,
- resolution=resolution
+ resolution=resolution,
)
all_freqs = sim.run_k_points(200, kpts) # a list of lists of frequencies
for fs, kx in zip(all_freqs, [v.x for v in kpts]):
for f in fs:
- print("eps:, {:.6g}, {:.6g}, {:.6g}".format(f.real, f.imag, (kx / f)**2))
+ print("eps:, {:.6g}, {:.6g}, {:.6g}".format(f.real, f.imag, (kx / f) ** 2))
diff --git a/python/examples/metal-cavity-ldos.ipynb b/python/examples/metal-cavity-ldos.ipynb
index 6de91e4da..9f488cc65 100644
--- a/python/examples/metal-cavity-ldos.ipynb
+++ b/python/examples/metal-cavity-ldos.ipynb
@@ -34,37 +34,46 @@
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
+ "\n",
"def metal_cavity(w):\n",
" resolution = 50\n",
" sxy = 2\n",
" dpml = 1\n",
- " sxy = sxy+2*dpml\n",
- " cell = mp.Vector3(sxy,sxy)\n",
+ " sxy = sxy + 2 * dpml\n",
+ " cell = mp.Vector3(sxy, sxy)\n",
"\n",
" pml_layers = [mp.PML(dpml)]\n",
" a = 1\n",
" t = 0.1\n",
- " geometry = [mp.Block(mp.Vector3(a+2*t,a+2*t,mp.inf), material=mp.metal),\n",
- " mp.Block(mp.Vector3(a,a,mp.inf), material=mp.air)]\n",
- "\n",
- " geometry.append(mp.Block(center=mp.Vector3(a/2),\n",
- " size=mp.Vector3(2*t,w,mp.inf),\n",
- " material=mp.air))\n",
- "\n",
- " fcen = math.sqrt(0.5)/a\n",
+ " geometry = [\n",
+ " mp.Block(mp.Vector3(a + 2 * t, a + 2 * t, mp.inf), material=mp.metal),\n",
+ " mp.Block(mp.Vector3(a, a, mp.inf), material=mp.air),\n",
+ " ]\n",
+ "\n",
+ " geometry.append(\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(a / 2), size=mp.Vector3(2 * t, w, mp.inf), material=mp.air\n",
+ " )\n",
+ " )\n",
+ "\n",
+ " fcen = math.sqrt(0.5) / a\n",
" df = 0.2\n",
- " sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=df),\n",
- " component=mp.Ez,\n",
- " center=mp.Vector3())]\n",
+ " sources = [\n",
+ " mp.Source(\n",
+ " src=mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=mp.Vector3()\n",
+ " )\n",
+ " ]\n",
"\n",
" symmetries = [mp.Mirror(mp.Y)]\n",
"\n",
- " sim = mp.Simulation(cell_size=cell,\n",
- " geometry=geometry,\n",
- " boundary_layers=pml_layers,\n",
- " sources=sources,\n",
- " symmetries=symmetries,\n",
- " resolution=resolution)\n",
+ " sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " geometry=geometry,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ " resolution=resolution,\n",
+ " )\n",
"\n",
" h = mp.Harminv(mp.Ez, mp.Vector3(), fcen, df)\n",
" sim.run(mp.after_sources(h), until_after_sources=500)\n",
@@ -72,13 +81,13 @@
" m = h.modes[0]\n",
" f = m.freq\n",
" Q = m.Q\n",
- " Vmode = 0.25*a*a\n",
+ " Vmode = 0.25 * a * a\n",
" ldos_1 = Q / Vmode / (2 * math.pi * f * math.pi * 0.5)\n",
- " \n",
+ "\n",
" sim.reset_meep()\n",
- " \n",
- " T = 2*Q*(1/f)\n",
- " sim.run(mp.dft_ldos(f,0,1), until_after_sources=T)\n",
+ "\n",
+ " T = 2 * Q * (1 / f)\n",
+ " sim.run(mp.dft_ldos(f, 0, 1), until_after_sources=T)\n",
" ldos_2 = sim.ldos_data[0]\n",
"\n",
" return ldos_1, ldos_2"
@@ -99,13 +108,13 @@
"metadata": {},
"outputs": [],
"source": [
- "ws = np.arange(0.2,0.5,0.1)\n",
+ "ws = np.arange(0.2, 0.5, 0.1)\n",
"ldos_1 = np.zeros(len(ws))\n",
"ldos_2 = np.zeros(len(ws))\n",
"\n",
"for j in range(len(ws)):\n",
" ldos_1[j], ldos_2[j] = metal_cavity(ws[j])\n",
- " print(\"ldos:, {}, {}\".format(ldos_1[j],ldos_2[2]))"
+ " print(\"ldos:, {}, {}\".format(ldos_1[j], ldos_2[2]))"
]
},
{
@@ -115,10 +124,10 @@
"outputs": [],
"source": [
"plt.figure(dpi=150)\n",
- "plt.semilogy(1/ws,ldos_1,'bo-',label=\"2Q/(πωV)\")\n",
- "plt.semilogy(1/ws,ldos_2,'rs-',label=\"LDOS\")\n",
- "plt.xlabel('a/w')\n",
- "plt.ylabel('2Q/(πωW) or LDOS')\n",
+ "plt.semilogy(1 / ws, ldos_1, \"bo-\", label=\"2Q/(πωV)\")\n",
+ "plt.semilogy(1 / ws, ldos_2, \"rs-\", label=\"LDOS\")\n",
+ "plt.xlabel(\"a/w\")\n",
+ "plt.ylabel(\"2Q/(πωW) or LDOS\")\n",
"plt.show()"
]
},
diff --git a/python/examples/metal-cavity-ldos.py b/python/examples/metal-cavity-ldos.py
index 97b6a2c45..3f67eff78 100644
--- a/python/examples/metal-cavity-ldos.py
+++ b/python/examples/metal-cavity-ldos.py
@@ -5,37 +5,46 @@
import numpy as np
import matplotlib.pyplot as plt
+
def metal_cavity(w):
resolution = 50
sxy = 2
dpml = 1
- sxy += 2*dpml
- cell = mp.Vector3(sxy,sxy)
+ sxy += 2 * dpml
+ cell = mp.Vector3(sxy, sxy)
pml_layers = [mp.PML(dpml)]
a = 1
t = 0.1
- geometry = [mp.Block(mp.Vector3(a+2*t,a+2*t,mp.inf), material=mp.metal),
- mp.Block(mp.Vector3(a,a,mp.inf), material=mp.air)]
+ geometry = [
+ mp.Block(mp.Vector3(a + 2 * t, a + 2 * t, mp.inf), material=mp.metal),
+ mp.Block(mp.Vector3(a, a, mp.inf), material=mp.air),
+ ]
- geometry.append(mp.Block(center=mp.Vector3(a/2),
- size=mp.Vector3(2*t,w,mp.inf),
- material=mp.air))
+ geometry.append(
+ mp.Block(
+ center=mp.Vector3(a / 2), size=mp.Vector3(2 * t, w, mp.inf), material=mp.air
+ )
+ )
- fcen = math.sqrt(0.5)/a
+ fcen = math.sqrt(0.5) / a
df = 0.2
- sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=df),
- component=mp.Ez,
- center=mp.Vector3())]
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=mp.Vector3()
+ )
+ ]
symmetries = [mp.Mirror(mp.Y)]
- sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- boundary_layers=pml_layers,
- sources=sources,
- symmetries=symmetries,
- resolution=resolution)
+ sim = mp.Simulation(
+ cell_size=cell,
+ geometry=geometry,
+ boundary_layers=pml_layers,
+ sources=sources,
+ symmetries=symmetries,
+ resolution=resolution,
+ )
h = mp.Harminv(mp.Ez, mp.Vector3(), fcen, df)
sim.run(mp.after_sources(h), until_after_sources=500)
@@ -43,18 +52,19 @@ def metal_cavity(w):
m = h.modes[0]
f = m.freq
Q = m.Q
- Vmode = 0.25*a*a
+ Vmode = 0.25 * a * a
ldos_1 = Q / Vmode / (2 * math.pi * f * math.pi * 0.5)
sim.reset_meep()
- T = 2*Q*(1/f)
- sim.run(mp.dft_ldos(f,0,1), until_after_sources=T)
+ T = 2 * Q * (1 / f)
+ sim.run(mp.dft_ldos(f, 0, 1), until_after_sources=T)
ldos_2 = sim.ldos_data[0]
return ldos_1, ldos_2
-ws = np.arange(0.2,0.5,0.1)
+
+ws = np.arange(0.2, 0.5, 0.1)
ldos_1 = np.zeros(len(ws))
ldos_2 = np.zeros(len(ws))
@@ -63,8 +73,8 @@ def metal_cavity(w):
print(f"ldos:, {ldos_1[j]}, {ldos_2[2]}")
plt.figure(dpi=150)
-plt.semilogy(1/ws,ldos_1,'bo-',label="2Q/(πωV)")
-plt.semilogy(1/ws,ldos_2,'rs-',label="LDOS")
-plt.xlabel('a/w')
-plt.ylabel('2Q/(πωW) or LDOS')
+plt.semilogy(1 / ws, ldos_1, "bo-", label="2Q/(πωV)")
+plt.semilogy(1 / ws, ldos_2, "rs-", label="LDOS")
+plt.xlabel("a/w")
+plt.ylabel("2Q/(πωW) or LDOS")
plt.show()
diff --git a/python/examples/metasurface_lens.ipynb b/python/examples/metasurface_lens.ipynb
index a855f3b82..7fb38949a 100644
--- a/python/examples/metasurface_lens.ipynb
+++ b/python/examples/metasurface_lens.ipynb
@@ -26,114 +26,163 @@
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
- "resolution = 50 # pixels/μm\n",
+ "resolution = 50 # pixels/μm\n",
"\n",
- "dpml = 1.0 # PML thickness\n",
- "dsub = 2.0 # substrate thickness\n",
- "dpad = 2.0 # padding between grating and PML\n",
+ "dpml = 1.0 # PML thickness\n",
+ "dsub = 2.0 # substrate thickness\n",
+ "dpad = 2.0 # padding between grating and PML\n",
"\n",
- "lcen = 0.5 # center wavelength\n",
- "fcen = 1/lcen # center frequency\n",
- "df = 0.2*fcen # frequency width\n",
+ "lcen = 0.5 # center wavelength\n",
+ "fcen = 1 / lcen # center frequency\n",
+ "df = 0.2 * fcen # frequency width\n",
"\n",
- "focal_length = 200 # focal length of metalens\n",
- "spot_length = 100 # far field line length\n",
- "ff_res = 10 # far field resolution (points/μm)\n",
+ "focal_length = 200 # focal length of metalens\n",
+ "spot_length = 100 # far field line length\n",
+ "ff_res = 10 # far field resolution (points/μm)\n",
"\n",
- "k_point = mp.Vector3(0,0,0)\n",
+ "k_point = mp.Vector3(0, 0, 0)\n",
"\n",
"glass = mp.Medium(index=1.5)\n",
"\n",
- "pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]\n",
+ "pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]\n",
"\n",
- "symmetries=[mp.Mirror(mp.Y)]\n",
+ "symmetries = [mp.Mirror(mp.Y)]\n",
"\n",
- "def grating(gp,gh,gdc_list):\n",
- " sx = dpml+dsub+gh+dpad+dpml\n",
- " src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub)\n",
- " mon_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad)\n",
- " geometry = [mp.Block(material=glass,\n",
- " size=mp.Vector3(dpml+dsub,mp.inf,mp.inf),\n",
- " center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub)))]\n",
"\n",
- " num_cells = len(gdc_list)\n",
- " if num_cells == 1:\n",
- " sy = gp\n",
- " cell_size = mp.Vector3(sx,sy)\n",
+ "def grating(gp, gh, gdc_list):\n",
+ " sx = dpml + dsub + gh + dpad + dpml\n",
+ " src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub)\n",
+ " mon_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad)\n",
+ " geometry = [\n",
+ " mp.Block(\n",
+ " material=glass,\n",
+ " size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),\n",
+ " center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)),\n",
+ " )\n",
+ " ]\n",
"\n",
- " sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df),\n",
- " component=mp.Ez,\n",
- " center=src_pt,\n",
- " size=mp.Vector3(y=sy))]\n",
+ " num_cells = len(gdc_list)\n",
+ " if num_cells == 1:\n",
+ " sy = gp\n",
+ " cell_size = mp.Vector3(sx, sy)\n",
"\n",
- " sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " k_point=k_point,\n",
- " default_material=glass,\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
+ " sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ez,\n",
+ " center=src_pt,\n",
+ " size=mp.Vector3(y=sy),\n",
+ " )\n",
+ " ]\n",
"\n",
- " flux_obj = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy)))\n",
+ " sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=k_point,\n",
+ " default_material=glass,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ " )\n",
"\n",
- " sim.run(until_after_sources=50)\n",
- " \n",
- " input_flux = mp.get_fluxes(flux_obj)\n",
- " \n",
- " sim.reset_meep()\n",
+ " flux_obj = sim.add_flux(\n",
+ " fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy))\n",
+ " )\n",
"\n",
- " geometry.append(mp.Block(material=glass, size=mp.Vector3(gh,gdc_list[0]*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh)))\n",
+ " sim.run(until_after_sources=50)\n",
"\n",
- " sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " k_point=k_point,\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
+ " input_flux = mp.get_fluxes(flux_obj)\n",
"\n",
- " flux_obj = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy)))\n",
+ " sim.reset_meep()\n",
"\n",
- " sim.run(until_after_sources=200)\n",
- " \n",
- " freqs = mp.get_eigenmode_freqs(flux_obj)\n",
- " res = sim.get_eigenmode_coefficients(flux_obj, [1], eig_parity=mp.ODD_Z+mp.EVEN_Y)\n",
- " coeffs = res.alpha\n",
+ " geometry.append(\n",
+ " mp.Block(\n",
+ " material=glass,\n",
+ " size=mp.Vector3(gh, gdc_list[0] * gp, mp.inf),\n",
+ " center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh),\n",
+ " )\n",
+ " )\n",
"\n",
- " mode_tran = abs(coeffs[0,0,0])**2/input_flux[0]\n",
- " mode_phase = np.angle(coeffs[0,0,0])\n",
- " if mode_phase > 0:\n",
- " mode_phase -= 2*np.pi\n",
- " \n",
- " return mode_tran, mode_phase\n",
- " \n",
- " else: \n",
- " sy = num_cells*gp\n",
- " cell_size = mp.Vector3(sx,sy)\n",
+ " sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " k_point=k_point,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ " )\n",
"\n",
- " sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df),\n",
- " component=mp.Ez,\n",
- " center=src_pt,\n",
- " size=mp.Vector3(y=sy))]\n",
+ " flux_obj = sim.add_flux(\n",
+ " fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy))\n",
+ " )\n",
"\n",
- " for j in range(num_cells):\n",
- " geometry.append(mp.Block(material=glass,\n",
- " size=mp.Vector3(gh,gdc_list[j]*gp,mp.inf),\n",
- " center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh,-0.5*sy+(j+0.5)*gp)))\n",
+ " sim.run(until_after_sources=200)\n",
"\n",
- " sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " k_point=k_point,\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
+ " freqs = mp.get_eigenmode_freqs(flux_obj)\n",
+ " res = sim.get_eigenmode_coefficients(\n",
+ " flux_obj, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y\n",
+ " )\n",
+ " coeffs = res.alpha\n",
"\n",
- " n2f_obj = sim.add_near2far(fcen, 0, 1, mp.Near2FarRegion(center=mon_pt, size=mp.Vector3(y=sy)))\n",
+ " mode_tran = abs(coeffs[0, 0, 0]) ** 2 / input_flux[0]\n",
+ " mode_phase = np.angle(coeffs[0, 0, 0])\n",
+ " if mode_phase > 0:\n",
+ " mode_phase -= 2 * np.pi\n",
"\n",
- " sim.run(until_after_sources=100)\n",
- " \n",
- " return abs(sim.get_farfields(n2f_obj, ff_res, center=mp.Vector3(-0.5*sx+dpml+dsub+gh+focal_length), size=mp.Vector3(spot_length))['Ez'])**2"
+ " return mode_tran, mode_phase\n",
+ "\n",
+ " else:\n",
+ " sy = num_cells * gp\n",
+ " cell_size = mp.Vector3(sx, sy)\n",
+ "\n",
+ " sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ez,\n",
+ " center=src_pt,\n",
+ " size=mp.Vector3(y=sy),\n",
+ " )\n",
+ " ]\n",
+ "\n",
+ " for j in range(num_cells):\n",
+ " geometry.append(\n",
+ " mp.Block(\n",
+ " material=glass,\n",
+ " size=mp.Vector3(gh, gdc_list[j] * gp, mp.inf),\n",
+ " center=mp.Vector3(\n",
+ " -0.5 * sx + dpml + dsub + 0.5 * gh, -0.5 * sy + (j + 0.5) * gp\n",
+ " ),\n",
+ " )\n",
+ " )\n",
+ "\n",
+ " sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " k_point=k_point,\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ " )\n",
+ "\n",
+ " n2f_obj = sim.add_near2far(\n",
+ " fcen, 0, 1, mp.Near2FarRegion(center=mon_pt, size=mp.Vector3(y=sy))\n",
+ " )\n",
+ "\n",
+ " sim.run(until_after_sources=100)\n",
+ "\n",
+ " return (\n",
+ " abs(\n",
+ " sim.get_farfields(\n",
+ " n2f_obj,\n",
+ " ff_res,\n",
+ " center=mp.Vector3(-0.5 * sx + dpml + dsub + gh + focal_length),\n",
+ " size=mp.Vector3(spot_length),\n",
+ " )[\"Ez\"]\n",
+ " )\n",
+ " ** 2\n",
+ " )"
]
},
{
@@ -1080,14 +1129,14 @@
}
],
"source": [
- "gp = 0.3 # grating periodicity\n",
- "gh = 1.8 # grating height\n",
- "gdc = np.linspace(0.1,0.9,30) # grating duty cycle\n",
+ "gp = 0.3 # grating periodicity\n",
+ "gh = 1.8 # grating height\n",
+ "gdc = np.linspace(0.1, 0.9, 30) # grating duty cycle\n",
"\n",
"mode_tran = np.empty((gdc.size))\n",
"mode_phase = np.empty((gdc.size))\n",
"for n in range(gdc.size):\n",
- " mode_tran[n], mode_phase[n] = grating(gp,gh,[gdc[n]])"
+ " mode_tran[n], mode_phase[n] = grating(gp, gh, [gdc[n]])"
]
},
{
@@ -1110,23 +1159,23 @@
],
"source": [
"plt.figure(dpi=200)\n",
- "plt.subplot(1,2,1)\n",
- "plt.plot(gdc, mode_tran, 'bo-')\n",
- "plt.xlim(gdc[0],gdc[-1])\n",
- "plt.xticks([t for t in np.linspace(0.1,0.9,5)])\n",
+ "plt.subplot(1, 2, 1)\n",
+ "plt.plot(gdc, mode_tran, \"bo-\")\n",
+ "plt.xlim(gdc[0], gdc[-1])\n",
+ "plt.xticks([t for t in np.linspace(0.1, 0.9, 5)])\n",
"plt.xlabel(\"grating duty cycle\")\n",
- "plt.ylim(0.96,1.00)\n",
- "plt.yticks([t for t in np.linspace(0.96,1.00,5)])\n",
+ "plt.ylim(0.96, 1.00)\n",
+ "plt.yticks([t for t in np.linspace(0.96, 1.00, 5)])\n",
"plt.title(\"transmittance\")\n",
"\n",
- "plt.subplot(1,2,2)\n",
- "plt.plot(gdc, mode_phase, 'rs-')\n",
+ "plt.subplot(1, 2, 2)\n",
+ "plt.plot(gdc, mode_phase, \"rs-\")\n",
"plt.grid(True)\n",
- "plt.xlim(gdc[0],gdc[-1])\n",
- "plt.xticks([t for t in np.linspace(0.1,0.9,5)])\n",
+ "plt.xlim(gdc[0], gdc[-1])\n",
+ "plt.xticks([t for t in np.linspace(0.1, 0.9, 5)])\n",
"plt.xlabel(\"grating duty cycle\")\n",
- "plt.ylim(-2*np.pi,0)\n",
- "plt.yticks([t for t in np.linspace(-6,0,7)])\n",
+ "plt.ylim(-2 * np.pi, 0)\n",
+ "plt.yticks([t for t in np.linspace(-6, 0, 7)])\n",
"plt.title(\"phase (radians)\")\n",
"\n",
"plt.tight_layout(pad=0.5)\n",
@@ -1478,27 +1527,39 @@
}
],
"source": [
- "gdc_new = np.linspace(0.16,0.65,500)\n",
+ "gdc_new = np.linspace(0.16, 0.65, 500)\n",
"mode_phase_interp = np.interp(gdc_new, gdc, mode_phase)\n",
- "print(\"phase-range:, {:.6f}\".format(mode_phase_interp.max()-mode_phase_interp.min()))\n",
+ "print(\"phase-range:, {:.6f}\".format(mode_phase_interp.max() - mode_phase_interp.min()))\n",
"\n",
"phase_tol = 1e-2\n",
- "num_cells = [100,200,400]\n",
- "ff_nc = np.empty((spot_length*ff_res,len(num_cells)))\n",
+ "num_cells = [100, 200, 400]\n",
+ "ff_nc = np.empty((spot_length * ff_res, len(num_cells)))\n",
"\n",
"for k in range(len(num_cells)):\n",
- " gdc_list = []\n",
- " for j in range(-num_cells[k],num_cells[k]+1):\n",
- " phase_local = 2*np.pi/lcen * (focal_length-((j*gp)**2 + focal_length**2)**0.5) # local phase at the center of the j'th unit cell\n",
- " phase_mod = phase_local % (-2*np.pi) # restrict phase to [-2*pi,0]\n",
- " if phase_mod > mode_phase_interp.max():\n",
- " phase_mod = mode_phase_interp.max()\n",
- " if phase_mod < mode_phase_interp.min():\n",
- " phase_mod = mode_phase_interp.min()\n",
- " idx = np.transpose(np.nonzero(np.logical_and(mode_phase_interp > phase_mod-phase_tol, mode_phase_interp < phase_mod+phase_tol))).ravel()\n",
- " gdc_list.append(gdc_new[idx[0]])\n",
+ " gdc_list = []\n",
+ " for j in range(-num_cells[k], num_cells[k] + 1):\n",
+ " phase_local = (\n",
+ " 2\n",
+ " * np.pi\n",
+ " / lcen\n",
+ " * (focal_length - ((j * gp) ** 2 + focal_length**2) ** 0.5)\n",
+ " ) # local phase at the center of the j'th unit cell\n",
+ " phase_mod = phase_local % (-2 * np.pi) # restrict phase to [-2*pi,0]\n",
+ " if phase_mod > mode_phase_interp.max():\n",
+ " phase_mod = mode_phase_interp.max()\n",
+ " if phase_mod < mode_phase_interp.min():\n",
+ " phase_mod = mode_phase_interp.min()\n",
+ " idx = np.transpose(\n",
+ " np.nonzero(\n",
+ " np.logical_and(\n",
+ " mode_phase_interp > phase_mod - phase_tol,\n",
+ " mode_phase_interp < phase_mod + phase_tol,\n",
+ " )\n",
+ " )\n",
+ " ).ravel()\n",
+ " gdc_list.append(gdc_new[idx[0]])\n",
"\n",
- " ff_nc[:,k] = grating(gp,gh,gdc_list)"
+ " ff_nc[:, k] = grating(gp, gh, gdc_list)"
]
},
{
@@ -1531,15 +1592,25 @@
}
],
"source": [
- "x = np.linspace(focal_length-0.5*spot_length,focal_length+0.5*spot_length,ff_res*spot_length)\n",
+ "x = np.linspace(\n",
+ " focal_length - 0.5 * spot_length,\n",
+ " focal_length + 0.5 * spot_length,\n",
+ " ff_res * spot_length,\n",
+ ")\n",
"plt.figure(dpi=200)\n",
- "plt.semilogy(x,abs(ff_nc[:,0])**2,'bo-',label='num_cells = {}'.format(2*num_cells[0]+1))\n",
- "plt.semilogy(x,abs(ff_nc[:,1])**2,'ro-',label='num_cells = {}'.format(2*num_cells[1]+1))\n",
- "plt.semilogy(x,abs(ff_nc[:,2])**2,'go-',label='num_cells = {}'.format(2*num_cells[2]+1))\n",
- "plt.xlabel('x coordinate (μm)')\n",
- "plt.ylabel(r'energy density of far-field electric fields, |E$_z$|$^2$')\n",
- "plt.title('focusing properties of a binary-grating metasurface lens')\n",
- "plt.legend(loc='upper right')\n",
+ "plt.semilogy(\n",
+ " x, abs(ff_nc[:, 0]) ** 2, \"bo-\", label=\"num_cells = {}\".format(2 * num_cells[0] + 1)\n",
+ ")\n",
+ "plt.semilogy(\n",
+ " x, abs(ff_nc[:, 1]) ** 2, \"ro-\", label=\"num_cells = {}\".format(2 * num_cells[1] + 1)\n",
+ ")\n",
+ "plt.semilogy(\n",
+ " x, abs(ff_nc[:, 2]) ** 2, \"go-\", label=\"num_cells = {}\".format(2 * num_cells[2] + 1)\n",
+ ")\n",
+ "plt.xlabel(\"x coordinate (μm)\")\n",
+ "plt.ylabel(r\"energy density of far-field electric fields, |E$_z$|$^2$\")\n",
+ "plt.title(\"focusing properties of a binary-grating metasurface lens\")\n",
+ "plt.legend(loc=\"upper right\")\n",
"plt.tight_layout()\n",
"plt.show()"
]
diff --git a/python/examples/metasurface_lens.py b/python/examples/metasurface_lens.py
index 771d4fb9f..71451d6f3 100644
--- a/python/examples/metasurface_lens.py
+++ b/python/examples/metasurface_lens.py
@@ -5,182 +5,242 @@
import matplotlib.pyplot as plt
-resolution = 50 # pixels/μm
+resolution = 50 # pixels/μm
-dpml = 1.0 # PML thickness
-dsub = 2.0 # substrate thickness
-dpad = 2.0 # padding between grating and PML
+dpml = 1.0 # PML thickness
+dsub = 2.0 # substrate thickness
+dpad = 2.0 # padding between grating and PML
-lcen = 0.5 # center wavelength
-fcen = 1/lcen # center frequency
-df = 0.2*fcen # frequency width
+lcen = 0.5 # center wavelength
+fcen = 1 / lcen # center frequency
+df = 0.2 * fcen # frequency width
-focal_length = 200 # focal length of metalens
-spot_length = 100 # far field line length
-ff_res = 10 # far field resolution (points/μm)
+focal_length = 200 # focal length of metalens
+spot_length = 100 # far field line length
+ff_res = 10 # far field resolution (points/μm)
-k_point = mp.Vector3(0,0,0)
+k_point = mp.Vector3(0, 0, 0)
glass = mp.Medium(index=1.5)
-pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]
+pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]
-symmetries=[mp.Mirror(mp.Y)]
+symmetries = [mp.Mirror(mp.Y)]
-def grating(gp,gh,gdc_list):
- sx = dpml+dsub+gh+dpad+dpml
- src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub)
- mon_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad)
- geometry = [mp.Block(material=glass,
- size=mp.Vector3(dpml+dsub,mp.inf,mp.inf),
- center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub)))]
- num_cells = len(gdc_list)
- if num_cells == 1:
- sy = gp
- cell_size = mp.Vector3(sx,sy,0)
-
- sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df),
- component=mp.Ez,
- center=src_pt,
- size=mp.Vector3(y=sy))]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- k_point=k_point,
- default_material=glass,
- sources=sources,
- symmetries=symmetries)
-
- flux_obj = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy)))
-
- sim.run(until_after_sources=50)
-
- input_flux = mp.get_fluxes(flux_obj)
-
- sim.reset_meep()
-
- geometry.append(mp.Block(material=glass, size=mp.Vector3(gh,gdc_list[0]*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh)))
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- geometry=geometry,
- k_point=k_point,
- sources=sources,
- symmetries=symmetries)
-
- flux_obj = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy)))
-
- sim.run(until_after_sources=200)
-
- freqs = mp.get_eigenmode_freqs(flux_obj)
- res = sim.get_eigenmode_coefficients(flux_obj, [1], eig_parity=mp.ODD_Z+mp.EVEN_Y)
- coeffs = res.alpha
-
- mode_tran = abs(coeffs[0,0,0])**2/input_flux[0]
- mode_phase = np.angle(coeffs[0,0,0])
- if mode_phase > 0:
- mode_phase -= 2*np.pi
-
- return mode_tran, mode_phase
-
- else:
- sy = num_cells*gp
- cell_size = mp.Vector3(sx,sy,0)
-
- sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df),
- component=mp.Ez,
- center=src_pt,
- size=mp.Vector3(y=sy))]
-
- geometry.extend(
+def grating(gp, gh, gdc_list):
+ sx = dpml + dsub + gh + dpad + dpml
+ src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub)
+ mon_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad)
+ geometry = [
mp.Block(
material=glass,
- size=mp.Vector3(gh, gdc_list[j] * gp, mp.inf),
- center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh, -0.5 * sy +
- (j + 0.5) * gp)) for j in range(num_cells))
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- geometry=geometry,
- k_point=k_point,
- sources=sources,
- symmetries=symmetries)
-
- n2f_obj = sim.add_near2far(fcen, 0, 1, mp.Near2FarRegion(center=mon_pt, size=mp.Vector3(y=sy)))
-
- sim.run(until_after_sources=500)
-
- return abs(sim.get_farfields(n2f_obj, ff_res, center=mp.Vector3(-0.5*sx+dpml+dsub+gh+focal_length), size=mp.Vector3(spot_length))['Ez'])**2
-
-
-gp = 0.3 # grating periodicity
-gh = 1.8 # grating height
-gdc = np.linspace(0.1,0.9,30) # grating duty cycle
+ size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),
+ center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)),
+ )
+ ]
+
+ num_cells = len(gdc_list)
+ if num_cells == 1:
+ sy = gp
+ cell_size = mp.Vector3(sx, sy, 0)
+
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=src_pt,
+ size=mp.Vector3(y=sy),
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ k_point=k_point,
+ default_material=glass,
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ flux_obj = sim.add_flux(
+ fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy))
+ )
+
+ sim.run(until_after_sources=50)
+
+ input_flux = mp.get_fluxes(flux_obj)
+
+ sim.reset_meep()
+
+ geometry.append(
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(gh, gdc_list[0] * gp, mp.inf),
+ center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh),
+ )
+ )
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ k_point=k_point,
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ flux_obj = sim.add_flux(
+ fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy))
+ )
+
+ sim.run(until_after_sources=200)
+
+ freqs = mp.get_eigenmode_freqs(flux_obj)
+ res = sim.get_eigenmode_coefficients(
+ flux_obj, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y
+ )
+ coeffs = res.alpha
+
+ mode_tran = abs(coeffs[0, 0, 0]) ** 2 / input_flux[0]
+ mode_phase = np.angle(coeffs[0, 0, 0])
+ if mode_phase > 0:
+ mode_phase -= 2 * np.pi
+
+ return mode_tran, mode_phase
+
+ else:
+ sy = num_cells * gp
+ cell_size = mp.Vector3(sx, sy, 0)
+
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=src_pt,
+ size=mp.Vector3(y=sy),
+ )
+ ]
+
+ geometry.extend(
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(gh, gdc_list[j] * gp, mp.inf),
+ center=mp.Vector3(
+ -0.5 * sx + dpml + dsub + 0.5 * gh, -0.5 * sy + (j + 0.5) * gp
+ ),
+ )
+ for j in range(num_cells)
+ )
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ k_point=k_point,
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ n2f_obj = sim.add_near2far(
+ fcen, 0, 1, mp.Near2FarRegion(center=mon_pt, size=mp.Vector3(y=sy))
+ )
+
+ sim.run(until_after_sources=500)
+
+ return (
+ abs(
+ sim.get_farfields(
+ n2f_obj,
+ ff_res,
+ center=mp.Vector3(-0.5 * sx + dpml + dsub + gh + focal_length),
+ size=mp.Vector3(spot_length),
+ )["Ez"]
+ )
+ ** 2
+ )
+
+
+gp = 0.3 # grating periodicity
+gh = 1.8 # grating height
+gdc = np.linspace(0.1, 0.9, 30) # grating duty cycle
mode_tran = np.empty((gdc.size))
mode_phase = np.empty((gdc.size))
for n in range(gdc.size):
- mode_tran[n], mode_phase[n] = grating(gp,gh,[gdc[n]])
+ mode_tran[n], mode_phase[n] = grating(gp, gh, [gdc[n]])
plt.figure(dpi=200)
-plt.subplot(1,2,1)
-plt.plot(gdc, mode_tran, 'bo-')
-plt.xlim(gdc[0],gdc[-1])
-plt.xticks(list(np.linspace(0.1,0.9,5)))
+plt.subplot(1, 2, 1)
+plt.plot(gdc, mode_tran, "bo-")
+plt.xlim(gdc[0], gdc[-1])
+plt.xticks(list(np.linspace(0.1, 0.9, 5)))
plt.xlabel("grating duty cycle")
-plt.ylim(0.96,1.00)
-plt.yticks(list(np.linspace(0.96,1.00,5)))
+plt.ylim(0.96, 1.00)
+plt.yticks(list(np.linspace(0.96, 1.00, 5)))
plt.title("transmittance")
-plt.subplot(1,2,2)
-plt.plot(gdc, mode_phase, 'rs-')
+plt.subplot(1, 2, 2)
+plt.plot(gdc, mode_phase, "rs-")
plt.grid(True)
-plt.xlim(gdc[0],gdc[-1])
-plt.xticks(list(np.linspace(0.1,0.9,5)))
+plt.xlim(gdc[0], gdc[-1])
+plt.xticks(list(np.linspace(0.1, 0.9, 5)))
plt.xlabel("grating duty cycle")
-plt.ylim(-2*np.pi,0)
-plt.yticks(list(np.linspace(-6,0,7)))
+plt.ylim(-2 * np.pi, 0)
+plt.yticks(list(np.linspace(-6, 0, 7)))
plt.title("phase (radians)")
plt.tight_layout(pad=0.5)
plt.show()
-gdc_new = np.linspace(0.16,0.65,500)
+gdc_new = np.linspace(0.16, 0.65, 500)
mode_phase_interp = np.interp(gdc_new, gdc, mode_phase)
-print("phase-range:, {:.6f}".format(mode_phase_interp.max()-mode_phase_interp.min()))
+print("phase-range:, {:.6f}".format(mode_phase_interp.max() - mode_phase_interp.min()))
phase_tol = 1e-2
-num_cells = [100,200,400]
-ff_nc = np.empty((spot_length*ff_res,len(num_cells)))
+num_cells = [100, 200, 400]
+ff_nc = np.empty((spot_length * ff_res, len(num_cells)))
for k in range(len(num_cells)):
- gdc_list = []
- for j in range(-num_cells[k],num_cells[k]+1):
- phase_local = 2*np.pi/lcen * (focal_length-((j*gp)**2 + focal_length**2)**0.5) # local phase at the center of the j'th unit cell
- phase_mod = phase_local % (-2*np.pi) # restrict phase to [-2*pi,0]
- if phase_mod > mode_phase_interp.max():
- phase_mod = mode_phase_interp.max()
- if phase_mod < mode_phase_interp.min():
- phase_mod = mode_phase_interp.min()
- idx = np.transpose(np.nonzero(np.logical_and(mode_phase_interp > phase_mod-phase_tol, mode_phase_interp < phase_mod+phase_tol)))
- gdc_list.append(gdc_new[idx[0][0]])
-
- ff_nc[:,k] = grating(gp,gh,gdc_list)
-
-x = np.linspace(focal_length-0.5*spot_length,focal_length+0.5*spot_length,ff_res*spot_length)
+ gdc_list = []
+ for j in range(-num_cells[k], num_cells[k] + 1):
+ phase_local = (
+ 2
+ * np.pi
+ / lcen
+ * (focal_length - ((j * gp) ** 2 + focal_length**2) ** 0.5)
+ ) # local phase at the center of the j'th unit cell
+ phase_mod = phase_local % (-2 * np.pi) # restrict phase to [-2*pi,0]
+ if phase_mod > mode_phase_interp.max():
+ phase_mod = mode_phase_interp.max()
+ if phase_mod < mode_phase_interp.min():
+ phase_mod = mode_phase_interp.min()
+ idx = np.transpose(
+ np.nonzero(
+ np.logical_and(
+ mode_phase_interp > phase_mod - phase_tol,
+ mode_phase_interp < phase_mod + phase_tol,
+ )
+ )
+ )
+ gdc_list.append(gdc_new[idx[0][0]])
+
+ ff_nc[:, k] = grating(gp, gh, gdc_list)
+
+x = np.linspace(
+ focal_length - 0.5 * spot_length,
+ focal_length + 0.5 * spot_length,
+ ff_res * spot_length,
+)
plt.figure(dpi=200)
-plt.semilogy(
- x, abs(ff_nc[:, 0])**2, 'bo-', label=f'num_cells = {2*num_cells[0] + 1}')
-plt.semilogy(
- x, abs(ff_nc[:, 1])**2, 'ro-', label=f'num_cells = {2*num_cells[1] + 1}')
-plt.semilogy(
- x, abs(ff_nc[:, 2])**2, 'go-', label=f'num_cells = {2*num_cells[2] + 1}')
-plt.xlabel('x coordinate (μm)')
-plt.ylabel(r'energy density of far-field electric fields, |E$_z$|$^2$')
-plt.title('focusing properties of a binary-grating metasurface lens')
-plt.legend(loc='upper right')
+plt.semilogy(x, abs(ff_nc[:, 0]) ** 2, "bo-", label=f"num_cells = {2*num_cells[0] + 1}")
+plt.semilogy(x, abs(ff_nc[:, 1]) ** 2, "ro-", label=f"num_cells = {2*num_cells[1] + 1}")
+plt.semilogy(x, abs(ff_nc[:, 2]) ** 2, "go-", label=f"num_cells = {2*num_cells[2] + 1}")
+plt.xlabel("x coordinate (μm)")
+plt.ylabel(r"energy density of far-field electric fields, |E$_z$|$^2$")
+plt.title("focusing properties of a binary-grating metasurface lens")
+plt.legend(loc="upper right")
plt.tight_layout()
plt.show()
diff --git a/python/examples/mie_scattering.ipynb b/python/examples/mie_scattering.ipynb
index d6b2790a2..65050ed7a 100644
--- a/python/examples/mie_scattering.ipynb
+++ b/python/examples/mie_scattering.ipynb
@@ -24,48 +24,83 @@
"\n",
"r = 1.0 # radius of sphere\n",
"\n",
- "wvl_min = 2*np.pi*r/10\n",
- "wvl_max = 2*np.pi*r/2\n",
+ "wvl_min = 2 * np.pi * r / 10\n",
+ "wvl_max = 2 * np.pi * r / 2\n",
"\n",
- "frq_min = 1/wvl_max\n",
- "frq_max = 1/wvl_min\n",
- "frq_cen = 0.5*(frq_min+frq_max)\n",
- "dfrq = frq_max-frq_min\n",
+ "frq_min = 1 / wvl_max\n",
+ "frq_max = 1 / wvl_min\n",
+ "frq_cen = 0.5 * (frq_min + frq_max)\n",
+ "dfrq = frq_max - frq_min\n",
"nfrq = 100\n",
"\n",
"## at least 8 pixels per smallest wavelength, i.e. np.floor(8/wvl_min)\n",
"resolution = 25\n",
"\n",
- "dpml = 0.5*wvl_max\n",
- "dair = 0.5*wvl_max\n",
+ "dpml = 0.5 * wvl_max\n",
+ "dair = 0.5 * wvl_max\n",
"\n",
"pml_layers = [mp.PML(thickness=dpml)]\n",
"\n",
- "symmetries = [mp.Mirror(mp.Y),\n",
- " mp.Mirror(mp.Z,phase=-1)]\n",
+ "symmetries = [mp.Mirror(mp.Y), mp.Mirror(mp.Z, phase=-1)]\n",
"\n",
- "s = 2*(dpml+dair+r)\n",
- "cell_size = mp.Vector3(s,s,s)\n",
+ "s = 2 * (dpml + dair + r)\n",
+ "cell_size = mp.Vector3(s, s, s)\n",
"\n",
"# is_integrated=True necessary for any planewave source extending into PML\n",
- "sources = [mp.Source(mp.GaussianSource(frq_cen,fwidth=dfrq,is_integrated=True),\n",
- " center=mp.Vector3(-0.5*s+dpml),\n",
- " size=mp.Vector3(0,s,s),\n",
- " component=mp.Ez)]\n",
- "\n",
- "sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " sources=sources,\n",
- " k_point=mp.Vector3(),\n",
- " symmetries=symmetries)\n",
- "\n",
- "box_x1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(x=-r),size=mp.Vector3(0,2*r,2*r)))\n",
- "box_x2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(x=+r),size=mp.Vector3(0,2*r,2*r)))\n",
- "box_y1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(y=-r),size=mp.Vector3(2*r,0,2*r)))\n",
- "box_y2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(y=+r),size=mp.Vector3(2*r,0,2*r)))\n",
- "box_z1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(z=-r),size=mp.Vector3(2*r,2*r,0)))\n",
- "box_z2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(z=+r),size=mp.Vector3(2*r,2*r,0)))\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(frq_cen, fwidth=dfrq, is_integrated=True),\n",
+ " center=mp.Vector3(-0.5 * s + dpml),\n",
+ " size=mp.Vector3(0, s, s),\n",
+ " component=mp.Ez,\n",
+ " )\n",
+ "]\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=sources,\n",
+ " k_point=mp.Vector3(),\n",
+ " symmetries=symmetries,\n",
+ ")\n",
+ "\n",
+ "box_x1 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(x=-r), size=mp.Vector3(0, 2 * r, 2 * r)),\n",
+ ")\n",
+ "box_x2 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(x=+r), size=mp.Vector3(0, 2 * r, 2 * r)),\n",
+ ")\n",
+ "box_y1 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(y=-r), size=mp.Vector3(2 * r, 0, 2 * r)),\n",
+ ")\n",
+ "box_y2 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(y=+r), size=mp.Vector3(2 * r, 0, 2 * r)),\n",
+ ")\n",
+ "box_z1 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(z=-r), size=mp.Vector3(2 * r, 2 * r, 0)),\n",
+ ")\n",
+ "box_z2 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(z=+r), size=mp.Vector3(2 * r, 2 * r, 0)),\n",
+ ")\n",
"\n",
"sim.run(until_after_sources=10)\n",
"\n",
@@ -82,24 +117,56 @@
"sim.reset_meep()\n",
"\n",
"n_sphere = 2.0\n",
- "geometry = [mp.Sphere(material=mp.Medium(index=n_sphere),\n",
- " center=mp.Vector3(),\n",
- " radius=r)]\n",
- "\n",
- "sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " sources=sources,\n",
- " k_point=mp.Vector3(),\n",
- " symmetries=symmetries,\n",
- " geometry=geometry)\n",
- "\n",
- "box_x1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(x=-r),size=mp.Vector3(0,2*r,2*r)))\n",
- "box_x2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(x=+r),size=mp.Vector3(0,2*r,2*r)))\n",
- "box_y1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(y=-r),size=mp.Vector3(2*r,0,2*r)))\n",
- "box_y2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(y=+r),size=mp.Vector3(2*r,0,2*r)))\n",
- "box_z1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(z=-r),size=mp.Vector3(2*r,2*r,0)))\n",
- "box_z2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(z=+r),size=mp.Vector3(2*r,2*r,0)))\n",
+ "geometry = [\n",
+ " mp.Sphere(material=mp.Medium(index=n_sphere), center=mp.Vector3(), radius=r)\n",
+ "]\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=sources,\n",
+ " k_point=mp.Vector3(),\n",
+ " symmetries=symmetries,\n",
+ " geometry=geometry,\n",
+ ")\n",
+ "\n",
+ "box_x1 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(x=-r), size=mp.Vector3(0, 2 * r, 2 * r)),\n",
+ ")\n",
+ "box_x2 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(x=+r), size=mp.Vector3(0, 2 * r, 2 * r)),\n",
+ ")\n",
+ "box_y1 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(y=-r), size=mp.Vector3(2 * r, 0, 2 * r)),\n",
+ ")\n",
+ "box_y2 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(y=+r), size=mp.Vector3(2 * r, 0, 2 * r)),\n",
+ ")\n",
+ "box_z1 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(z=-r), size=mp.Vector3(2 * r, 2 * r, 0)),\n",
+ ")\n",
+ "box_z2 = sim.add_flux(\n",
+ " frq_cen,\n",
+ " dfrq,\n",
+ " nfrq,\n",
+ " mp.FluxRegion(center=mp.Vector3(z=+r), size=mp.Vector3(2 * r, 2 * r, 0)),\n",
+ ")\n",
"\n",
"sim.load_minus_flux_data(box_x1, box_x1_data)\n",
"sim.load_minus_flux_data(box_x2, box_x2_data)\n",
@@ -117,11 +184,20 @@
"box_z1_flux = mp.get_fluxes(box_z1)\n",
"box_z2_flux = mp.get_fluxes(box_z2)\n",
"\n",
- "scatt_flux = np.asarray(box_x1_flux)-np.asarray(box_x2_flux)+np.asarray(box_y1_flux)-np.asarray(box_y2_flux)+np.asarray(box_z1_flux)-np.asarray(box_z2_flux)\n",
- "intensity = np.asarray(box_x1_flux0)/(2*r)**2\n",
- "scatt_cross_section = np.divide(scatt_flux,intensity)\n",
- "scatt_eff_meep = scatt_cross_section*-1/(np.pi*r**2)\n",
- "scatt_eff_theory = [ps.MieQ(n_sphere,1000/f,2*r*1000,asDict=True)['Qsca'] for f in freqs]"
+ "scatt_flux = (\n",
+ " np.asarray(box_x1_flux)\n",
+ " - np.asarray(box_x2_flux)\n",
+ " + np.asarray(box_y1_flux)\n",
+ " - np.asarray(box_y2_flux)\n",
+ " + np.asarray(box_z1_flux)\n",
+ " - np.asarray(box_z2_flux)\n",
+ ")\n",
+ "intensity = np.asarray(box_x1_flux0) / (2 * r) ** 2\n",
+ "scatt_cross_section = np.divide(scatt_flux, intensity)\n",
+ "scatt_eff_meep = scatt_cross_section * -1 / (np.pi * r**2)\n",
+ "scatt_eff_theory = [\n",
+ " ps.MieQ(n_sphere, 1000 / f, 2 * r * 1000, asDict=True)[\"Qsca\"] for f in freqs\n",
+ "]"
]
},
{
@@ -140,13 +216,13 @@
"outputs": [],
"source": [
"plt.figure(dpi=150)\n",
- "plt.loglog(2*np.pi*r*np.asarray(freqs),scatt_eff_meep,'bo-',label='Meep')\n",
- "plt.loglog(2*np.pi*r*np.asarray(freqs),scatt_eff_theory,'ro-',label='theory')\n",
- "plt.grid(True,which=\"both\",ls=\"-\")\n",
- "plt.xlabel('(sphere circumference)/wavelength, 2πr/λ')\n",
- "plt.ylabel('scattering efficiency, σ/πr$^{2}$')\n",
- "plt.legend(loc='upper right')\n",
- "plt.title('Mie Scattering of a Lossless Dielectric Sphere')\n",
+ "plt.loglog(2 * np.pi * r * np.asarray(freqs), scatt_eff_meep, \"bo-\", label=\"Meep\")\n",
+ "plt.loglog(2 * np.pi * r * np.asarray(freqs), scatt_eff_theory, \"ro-\", label=\"theory\")\n",
+ "plt.grid(True, which=\"both\", ls=\"-\")\n",
+ "plt.xlabel(\"(sphere circumference)/wavelength, 2πr/λ\")\n",
+ "plt.ylabel(\"scattering efficiency, σ/πr$^{2}$\")\n",
+ "plt.legend(loc=\"upper right\")\n",
+ "plt.title(\"Mie Scattering of a Lossless Dielectric Sphere\")\n",
"plt.tight_layout()\n",
"plt.show()"
]
diff --git a/python/examples/mie_scattering.py b/python/examples/mie_scattering.py
index 33a674a1e..3dc54cdca 100644
--- a/python/examples/mie_scattering.py
+++ b/python/examples/mie_scattering.py
@@ -5,48 +5,83 @@
r = 1.0 # radius of sphere
-wvl_min = 2*np.pi*r/10
-wvl_max = 2*np.pi*r/2
+wvl_min = 2 * np.pi * r / 10
+wvl_max = 2 * np.pi * r / 2
-frq_min = 1/wvl_max
-frq_max = 1/wvl_min
-frq_cen = 0.5*(frq_min+frq_max)
-dfrq = frq_max-frq_min
+frq_min = 1 / wvl_max
+frq_max = 1 / wvl_min
+frq_cen = 0.5 * (frq_min + frq_max)
+dfrq = frq_max - frq_min
nfrq = 100
## at least 8 pixels per smallest wavelength, i.e. np.floor(8/wvl_min)
resolution = 25
-dpml = 0.5*wvl_max
-dair = 0.5*wvl_max
+dpml = 0.5 * wvl_max
+dair = 0.5 * wvl_max
pml_layers = [mp.PML(thickness=dpml)]
-symmetries = [mp.Mirror(mp.Y),
- mp.Mirror(mp.Z,phase=-1)]
+symmetries = [mp.Mirror(mp.Y), mp.Mirror(mp.Z, phase=-1)]
-s = 2*(dpml+dair+r)
-cell_size = mp.Vector3(s,s,s)
+s = 2 * (dpml + dair + r)
+cell_size = mp.Vector3(s, s, s)
# is_integrated=True necessary for any planewave source extending into PML
-sources = [mp.Source(mp.GaussianSource(frq_cen,fwidth=dfrq,is_integrated=True),
- center=mp.Vector3(-0.5*s+dpml),
- size=mp.Vector3(0,s,s),
- component=mp.Ez)]
-
-sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- sources=sources,
- k_point=mp.Vector3(),
- symmetries=symmetries)
-
-box_x1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(x=-r),size=mp.Vector3(0,2*r,2*r)))
-box_x2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(x=+r),size=mp.Vector3(0,2*r,2*r)))
-box_y1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(y=-r),size=mp.Vector3(2*r,0,2*r)))
-box_y2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(y=+r),size=mp.Vector3(2*r,0,2*r)))
-box_z1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(z=-r),size=mp.Vector3(2*r,2*r,0)))
-box_z2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(z=+r),size=mp.Vector3(2*r,2*r,0)))
+sources = [
+ mp.Source(
+ mp.GaussianSource(frq_cen, fwidth=dfrq, is_integrated=True),
+ center=mp.Vector3(-0.5 * s + dpml),
+ size=mp.Vector3(0, s, s),
+ component=mp.Ez,
+ )
+]
+
+sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ sources=sources,
+ k_point=mp.Vector3(),
+ symmetries=symmetries,
+)
+
+box_x1 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(x=-r), size=mp.Vector3(0, 2 * r, 2 * r)),
+)
+box_x2 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(x=+r), size=mp.Vector3(0, 2 * r, 2 * r)),
+)
+box_y1 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(y=-r), size=mp.Vector3(2 * r, 0, 2 * r)),
+)
+box_y2 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(y=+r), size=mp.Vector3(2 * r, 0, 2 * r)),
+)
+box_z1 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(z=-r), size=mp.Vector3(2 * r, 2 * r, 0)),
+)
+box_z2 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(z=+r), size=mp.Vector3(2 * r, 2 * r, 0)),
+)
sim.run(until_after_sources=10)
@@ -63,24 +98,56 @@
sim.reset_meep()
n_sphere = 2.0
-geometry = [mp.Sphere(material=mp.Medium(index=n_sphere),
- center=mp.Vector3(),
- radius=r)]
-
-sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- sources=sources,
- k_point=mp.Vector3(),
- symmetries=symmetries,
- geometry=geometry)
-
-box_x1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(x=-r),size=mp.Vector3(0,2*r,2*r)))
-box_x2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(x=+r),size=mp.Vector3(0,2*r,2*r)))
-box_y1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(y=-r),size=mp.Vector3(2*r,0,2*r)))
-box_y2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(y=+r),size=mp.Vector3(2*r,0,2*r)))
-box_z1 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(z=-r),size=mp.Vector3(2*r,2*r,0)))
-box_z2 = sim.add_flux(frq_cen, dfrq, nfrq, mp.FluxRegion(center=mp.Vector3(z=+r),size=mp.Vector3(2*r,2*r,0)))
+geometry = [
+ mp.Sphere(material=mp.Medium(index=n_sphere), center=mp.Vector3(), radius=r)
+]
+
+sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ sources=sources,
+ k_point=mp.Vector3(),
+ symmetries=symmetries,
+ geometry=geometry,
+)
+
+box_x1 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(x=-r), size=mp.Vector3(0, 2 * r, 2 * r)),
+)
+box_x2 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(x=+r), size=mp.Vector3(0, 2 * r, 2 * r)),
+)
+box_y1 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(y=-r), size=mp.Vector3(2 * r, 0, 2 * r)),
+)
+box_y2 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(y=+r), size=mp.Vector3(2 * r, 0, 2 * r)),
+)
+box_z1 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(z=-r), size=mp.Vector3(2 * r, 2 * r, 0)),
+)
+box_z2 = sim.add_flux(
+ frq_cen,
+ dfrq,
+ nfrq,
+ mp.FluxRegion(center=mp.Vector3(z=+r), size=mp.Vector3(2 * r, 2 * r, 0)),
+)
sim.load_minus_flux_data(box_x1, box_x1_data)
sim.load_minus_flux_data(box_x2, box_x2_data)
@@ -98,20 +165,31 @@
box_z1_flux = mp.get_fluxes(box_z1)
box_z2_flux = mp.get_fluxes(box_z2)
-scatt_flux = np.asarray(box_x1_flux)-np.asarray(box_x2_flux)+np.asarray(box_y1_flux)-np.asarray(box_y2_flux)+np.asarray(box_z1_flux)-np.asarray(box_z2_flux)
-intensity = np.asarray(box_x1_flux0)/(2*r)**2
-scatt_cross_section = np.divide(scatt_flux,intensity)
-scatt_eff_meep = scatt_cross_section*-1/(np.pi*r**2)
-scatt_eff_theory = [ps.MieQ(n_sphere,1000/f,2*r*1000,asDict=True)['Qsca'] for f in freqs]
+scatt_flux = (
+ np.asarray(box_x1_flux)
+ - np.asarray(box_x2_flux)
+ + np.asarray(box_y1_flux)
+ - np.asarray(box_y2_flux)
+ + np.asarray(box_z1_flux)
+ - np.asarray(box_z2_flux)
+)
+intensity = np.asarray(box_x1_flux0) / (2 * r) ** 2
+scatt_cross_section = np.divide(scatt_flux, intensity)
+scatt_eff_meep = scatt_cross_section * -1 / (np.pi * r**2)
+scatt_eff_theory = [
+ ps.MieQ(n_sphere, 1000 / f, 2 * r * 1000, asDict=True)["Qsca"] for f in freqs
+]
if mp.am_master():
plt.figure(dpi=150)
- plt.loglog(2*np.pi*r*np.asarray(freqs),scatt_eff_meep,'bo-',label='Meep')
- plt.loglog(2*np.pi*r*np.asarray(freqs),scatt_eff_theory,'ro-',label='theory')
- plt.grid(True,which="both",ls="-")
- plt.xlabel('(sphere circumference)/wavelength, 2πr/λ')
- plt.ylabel('scattering efficiency, σ/πr$^{2}$')
- plt.legend(loc='upper right')
- plt.title('Mie Scattering of a Lossless Dielectric Sphere')
+ plt.loglog(2 * np.pi * r * np.asarray(freqs), scatt_eff_meep, "bo-", label="Meep")
+ plt.loglog(
+ 2 * np.pi * r * np.asarray(freqs), scatt_eff_theory, "ro-", label="theory"
+ )
+ plt.grid(True, which="both", ls="-")
+ plt.xlabel("(sphere circumference)/wavelength, 2πr/λ")
+ plt.ylabel("scattering efficiency, σ/πr$^{2}$")
+ plt.legend(loc="upper right")
+ plt.title("Mie Scattering of a Lossless Dielectric Sphere")
plt.tight_layout()
plt.savefig("mie_scattering.png")
diff --git a/python/examples/mode-decomposition.ipynb b/python/examples/mode-decomposition.ipynb
index 3c97872ea..ee0a2f252 100644
--- a/python/examples/mode-decomposition.ipynb
+++ b/python/examples/mode-decomposition.ipynb
@@ -396,28 +396,27 @@
"import meep as mp\n",
"import matplotlib.pyplot as plt\n",
"\n",
- "resolution = 25 # pixels/μm\n",
+ "resolution = 25 # pixels/μm\n",
"\n",
- "w1 = 1.0 # width of waveguide 1\n",
- "w2 = 2.0 # width of waveguide 2\n",
- "Lw = 10.0 # length of waveguides 1 and 2\n",
+ "w1 = 1.0 # width of waveguide 1\n",
+ "w2 = 2.0 # width of waveguide 2\n",
+ "Lw = 10.0 # length of waveguides 1 and 2\n",
"\n",
"# lengths of waveguide taper\n",
"Lts = [2**m for m in range(4)]\n",
"\n",
- "dair = 3.0 # length of air region\n",
- "dpml_x = 6.0 # length of PML in x direction\n",
- "dpml_y = 2.0 # length of PML in y direction\n",
+ "dair = 3.0 # length of air region\n",
+ "dpml_x = 6.0 # length of PML in x direction\n",
+ "dpml_y = 2.0 # length of PML in y direction\n",
"\n",
- "sy = dpml_y+dair+w2+dair+dpml_y\n",
+ "sy = dpml_y + dair + w2 + dair + dpml_y\n",
"\n",
"Si = mp.Medium(epsilon=12.0)\n",
"\n",
- "boundary_layers = [mp.PML(dpml_x,direction=mp.X),\n",
- " mp.PML(dpml_y,direction=mp.Y)]\n",
+ "boundary_layers = [mp.PML(dpml_x, direction=mp.X), mp.PML(dpml_y, direction=mp.Y)]\n",
"\n",
- "lcen = 6.67 # mode wavelength\n",
- "fcen = 1/lcen # mode frequency\n",
+ "lcen = 6.67 # mode wavelength\n",
+ "fcen = 1 / lcen # mode frequency\n",
"\n",
"symmetries = [mp.Mirror(mp.Y)]\n",
"\n",
@@ -425,35 +424,45 @@
"R_flux = []\n",
"\n",
"for Lt in Lts:\n",
- " sx = dpml_x+Lw+Lt+Lw+dpml_x\n",
- " cell_size = mp.Vector3(sx,sy,0)\n",
+ " sx = dpml_x + Lw + Lt + Lw + dpml_x\n",
+ " cell_size = mp.Vector3(sx, sy, 0)\n",
"\n",
- " src_pt = mp.Vector3(-0.5*sx+dpml_x+0.2*Lw)\n",
- " sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),\n",
- " center=src_pt,\n",
- " size=mp.Vector3(y=sy-2*dpml_y),\n",
- " eig_match_freq=True,\n",
- " eig_parity=mp.ODD_Z+mp.EVEN_Y)]\n",
+ " src_pt = mp.Vector3(-0.5 * sx + dpml_x + 0.2 * Lw)\n",
+ " sources = [\n",
+ " mp.EigenModeSource(\n",
+ " src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),\n",
+ " center=src_pt,\n",
+ " size=mp.Vector3(y=sy - 2 * dpml_y),\n",
+ " eig_match_freq=True,\n",
+ " eig_parity=mp.ODD_Z + mp.EVEN_Y,\n",
+ " )\n",
+ " ]\n",
"\n",
" # straight waveguide\n",
- " vertices = [mp.Vector3(-0.5*sx-1,0.5*w1),\n",
- " mp.Vector3(0.5*sx+1,0.5*w1),\n",
- " mp.Vector3(0.5*sx+1,-0.5*w1),\n",
- " mp.Vector3(-0.5*sx-1,-0.5*w1)]\n",
+ " vertices = [\n",
+ " mp.Vector3(-0.5 * sx - 1, 0.5 * w1),\n",
+ " mp.Vector3(0.5 * sx + 1, 0.5 * w1),\n",
+ " mp.Vector3(0.5 * sx + 1, -0.5 * w1),\n",
+ " mp.Vector3(-0.5 * sx - 1, -0.5 * w1),\n",
+ " ]\n",
"\n",
- " sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=boundary_layers,\n",
- " geometry=[mp.Prism(vertices,height=mp.inf,material=Si)],\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
+ " sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=boundary_layers,\n",
+ " geometry=[mp.Prism(vertices, height=mp.inf, material=Si)],\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ " )\n",
"\n",
- " mon_pt = mp.Vector3(-0.5*sx+dpml_x+0.7*Lw)\n",
- " flux = sim.add_flux(fcen,0,1,mp.FluxRegion(center=mon_pt,size=mp.Vector3(y=sy-2*dpml_y)))\n",
+ " mon_pt = mp.Vector3(-0.5 * sx + dpml_x + 0.7 * Lw)\n",
+ " flux = sim.add_flux(\n",
+ " fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy - 2 * dpml_y))\n",
+ " )\n",
"\n",
- " sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ez,mon_pt,1e-9))\n",
+ " sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9))\n",
"\n",
- " res = sim.get_eigenmode_coefficients(flux,[1],eig_parity=mp.ODD_Z+mp.EVEN_Y)\n",
+ " res = sim.get_eigenmode_coefficients(flux, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y)\n",
" incident_coeffs = res.alpha\n",
" incident_flux = mp.get_fluxes(flux)\n",
" incident_flux_data = sim.get_flux_data(flux)\n",
@@ -461,34 +470,42 @@
" sim.reset_meep()\n",
"\n",
" # linear taper\n",
- " vertices = [mp.Vector3(-0.5*sx-1,0.5*w1),\n",
- " mp.Vector3(-0.5*Lt,0.5*w1),\n",
- " mp.Vector3(0.5*Lt,0.5*w2),\n",
- " mp.Vector3(0.5*sx+1,0.5*w2),\n",
- " mp.Vector3(0.5*sx+1,-0.5*w2),\n",
- " mp.Vector3(0.5*Lt,-0.5*w2),\n",
- " mp.Vector3(-0.5*Lt,-0.5*w1),\n",
- " mp.Vector3(-0.5*sx-1,-0.5*w1)]\n",
+ " vertices = [\n",
+ " mp.Vector3(-0.5 * sx - 1, 0.5 * w1),\n",
+ " mp.Vector3(-0.5 * Lt, 0.5 * w1),\n",
+ " mp.Vector3(0.5 * Lt, 0.5 * w2),\n",
+ " mp.Vector3(0.5 * sx + 1, 0.5 * w2),\n",
+ " mp.Vector3(0.5 * sx + 1, -0.5 * w2),\n",
+ " mp.Vector3(0.5 * Lt, -0.5 * w2),\n",
+ " mp.Vector3(-0.5 * Lt, -0.5 * w1),\n",
+ " mp.Vector3(-0.5 * sx - 1, -0.5 * w1),\n",
+ " ]\n",
"\n",
- " sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=boundary_layers,\n",
- " geometry=[mp.Prism(vertices,height=mp.inf,material=Si)],\n",
- " sources=sources,\n",
- " symmetries=symmetries)\n",
+ " sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=boundary_layers,\n",
+ " geometry=[mp.Prism(vertices, height=mp.inf, material=Si)],\n",
+ " sources=sources,\n",
+ " symmetries=symmetries,\n",
+ " )\n",
"\n",
- " flux = sim.add_flux(fcen,0,1,mp.FluxRegion(center=mon_pt,size=mp.Vector3(y=sy-2*dpml_y)))\n",
- " sim.load_minus_flux_data(flux,incident_flux_data)\n",
+ " flux = sim.add_flux(\n",
+ " fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy - 2 * dpml_y))\n",
+ " )\n",
+ " sim.load_minus_flux_data(flux, incident_flux_data)\n",
"\n",
- " sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ez,mon_pt,1e-9))\n",
+ " sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9))\n",
"\n",
- " res2 = sim.get_eigenmode_coefficients(flux,[1],eig_parity=mp.ODD_Z+mp.EVEN_Y)\n",
+ " res2 = sim.get_eigenmode_coefficients(flux, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y)\n",
" taper_coeffs = res2.alpha\n",
" taper_flux = mp.get_fluxes(flux)\n",
"\n",
- " R_coeffs.append(abs(taper_coeffs[0,0,1])**2/abs(incident_coeffs[0,0,0])**2)\n",
- " R_flux.append(-taper_flux[0]/incident_flux[0])\n",
- " print(\"refl:, {}, {:.8f}, {:.8f}\".format(Lt,R_coeffs[-1],R_flux[-1]))"
+ " R_coeffs.append(\n",
+ " abs(taper_coeffs[0, 0, 1]) ** 2 / abs(incident_coeffs[0, 0, 0]) ** 2\n",
+ " )\n",
+ " R_flux.append(-taper_flux[0] / incident_flux[0])\n",
+ " print(\"refl:, {}, {:.8f}, {:.8f}\".format(Lt, R_coeffs[-1], R_flux[-1]))"
]
},
{
@@ -518,12 +535,14 @@
],
"source": [
"plt.figure(dpi=200)\n",
- "plt.loglog(Lts,R_coeffs,'bo-',label='mode decomposition')\n",
- "plt.loglog(Lts,R_flux,'ro-',label='Poynting flux')\n",
- "plt.loglog(Lts,[0.005/Lt**2 for Lt in Lts],'k-',label=r'quadratic reference (1/Lt$^2$)')\n",
- "plt.legend(loc='upper right')\n",
- "plt.xlabel('taper length Lt (μm)')\n",
- "plt.ylabel('reflectance')\n",
+ "plt.loglog(Lts, R_coeffs, \"bo-\", label=\"mode decomposition\")\n",
+ "plt.loglog(Lts, R_flux, \"ro-\", label=\"Poynting flux\")\n",
+ "plt.loglog(\n",
+ " Lts, [0.005 / Lt**2 for Lt in Lts], \"k-\", label=r\"quadratic reference (1/Lt$^2$)\"\n",
+ ")\n",
+ "plt.legend(loc=\"upper right\")\n",
+ "plt.xlabel(\"taper length Lt (μm)\")\n",
+ "plt.ylabel(\"reflectance\")\n",
"plt.show()"
]
},
diff --git a/python/examples/mode-decomposition.py b/python/examples/mode-decomposition.py
index 6663c68fd..60492ec58 100644
--- a/python/examples/mode-decomposition.py
+++ b/python/examples/mode-decomposition.py
@@ -3,28 +3,27 @@
import meep as mp
import matplotlib.pyplot as plt
-resolution = 25 # pixels/μm
+resolution = 25 # pixels/μm
-w1 = 1.0 # width of waveguide 1
-w2 = 2.0 # width of waveguide 2
-Lw = 10.0 # length of waveguides 1 and 2
+w1 = 1.0 # width of waveguide 1
+w2 = 2.0 # width of waveguide 2
+Lw = 10.0 # length of waveguides 1 and 2
# lengths of waveguide taper
Lts = [2**m for m in range(4)]
-dair = 3.0 # length of air region
-dpml_x = 6.0 # length of PML in x direction
-dpml_y = 2.0 # length of PML in y direction
+dair = 3.0 # length of air region
+dpml_x = 6.0 # length of PML in x direction
+dpml_y = 2.0 # length of PML in y direction
-sy = dpml_y+dair+w2+dair+dpml_y
+sy = dpml_y + dair + w2 + dair + dpml_y
Si = mp.Medium(epsilon=12.0)
-boundary_layers = [mp.PML(dpml_x,direction=mp.X),
- mp.PML(dpml_y,direction=mp.Y)]
+boundary_layers = [mp.PML(dpml_x, direction=mp.X), mp.PML(dpml_y, direction=mp.Y)]
-lcen = 6.67 # mode wavelength
-fcen = 1/lcen # mode frequency
+lcen = 6.67 # mode wavelength
+fcen = 1 / lcen # mode frequency
symmetries = [mp.Mirror(mp.Y)]
@@ -32,35 +31,45 @@
R_flux = []
for Lt in Lts:
- sx = dpml_x+Lw+Lt+Lw+dpml_x
- cell_size = mp.Vector3(sx,sy,0)
-
- src_pt = mp.Vector3(-0.5*sx+dpml_x+0.2*Lw)
- sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),
- center=src_pt,
- size=mp.Vector3(y=sy-2*dpml_y),
- eig_match_freq=True,
- eig_parity=mp.ODD_Z+mp.EVEN_Y)]
+ sx = dpml_x + Lw + Lt + Lw + dpml_x
+ cell_size = mp.Vector3(sx, sy, 0)
+
+ src_pt = mp.Vector3(-0.5 * sx + dpml_x + 0.2 * Lw)
+ sources = [
+ mp.EigenModeSource(
+ src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ center=src_pt,
+ size=mp.Vector3(y=sy - 2 * dpml_y),
+ eig_match_freq=True,
+ eig_parity=mp.ODD_Z + mp.EVEN_Y,
+ )
+ ]
# straight waveguide
- vertices = [mp.Vector3(-0.5*sx-1,0.5*w1),
- mp.Vector3(0.5*sx+1,0.5*w1),
- mp.Vector3(0.5*sx+1,-0.5*w1),
- mp.Vector3(-0.5*sx-1,-0.5*w1)]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=boundary_layers,
- geometry=[mp.Prism(vertices,height=mp.inf,material=Si)],
- sources=sources,
- symmetries=symmetries)
-
- mon_pt = mp.Vector3(-0.5*sx+dpml_x+0.7*Lw)
- flux = sim.add_flux(fcen,0,1,mp.FluxRegion(center=mon_pt,size=mp.Vector3(y=sy-2*dpml_y)))
-
- sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ez,mon_pt,1e-9))
-
- res = sim.get_eigenmode_coefficients(flux,[1],eig_parity=mp.ODD_Z+mp.EVEN_Y)
+ vertices = [
+ mp.Vector3(-0.5 * sx - 1, 0.5 * w1),
+ mp.Vector3(0.5 * sx + 1, 0.5 * w1),
+ mp.Vector3(0.5 * sx + 1, -0.5 * w1),
+ mp.Vector3(-0.5 * sx - 1, -0.5 * w1),
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=boundary_layers,
+ geometry=[mp.Prism(vertices, height=mp.inf, material=Si)],
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ mon_pt = mp.Vector3(-0.5 * sx + dpml_x + 0.7 * Lw)
+ flux = sim.add_flux(
+ fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy - 2 * dpml_y))
+ )
+
+ sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9))
+
+ res = sim.get_eigenmode_coefficients(flux, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y)
incident_coeffs = res.alpha
incident_flux = mp.get_fluxes(flux)
incident_flux_data = sim.get_flux_data(flux)
@@ -68,42 +77,55 @@
sim.reset_meep()
# linear taper
- vertices = [mp.Vector3(-0.5*sx-1,0.5*w1),
- mp.Vector3(-0.5*Lt,0.5*w1),
- mp.Vector3(0.5*Lt,0.5*w2),
- mp.Vector3(0.5*sx+1,0.5*w2),
- mp.Vector3(0.5*sx+1,-0.5*w2),
- mp.Vector3(0.5*Lt,-0.5*w2),
- mp.Vector3(-0.5*Lt,-0.5*w1),
- mp.Vector3(-0.5*sx-1,-0.5*w1)]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=boundary_layers,
- geometry=[mp.Prism(vertices,height=mp.inf,material=Si)],
- sources=sources,
- symmetries=symmetries)
-
- flux = sim.add_flux(fcen,0,1,mp.FluxRegion(center=mon_pt,size=mp.Vector3(y=sy-2*dpml_y)))
- sim.load_minus_flux_data(flux,incident_flux_data)
-
- sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ez,mon_pt,1e-9))
-
- res2 = sim.get_eigenmode_coefficients(flux,[1],eig_parity=mp.ODD_Z+mp.EVEN_Y)
+ vertices = [
+ mp.Vector3(-0.5 * sx - 1, 0.5 * w1),
+ mp.Vector3(-0.5 * Lt, 0.5 * w1),
+ mp.Vector3(0.5 * Lt, 0.5 * w2),
+ mp.Vector3(0.5 * sx + 1, 0.5 * w2),
+ mp.Vector3(0.5 * sx + 1, -0.5 * w2),
+ mp.Vector3(0.5 * Lt, -0.5 * w2),
+ mp.Vector3(-0.5 * Lt, -0.5 * w1),
+ mp.Vector3(-0.5 * sx - 1, -0.5 * w1),
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=boundary_layers,
+ geometry=[mp.Prism(vertices, height=mp.inf, material=Si)],
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ flux = sim.add_flux(
+ fcen, 0, 1, mp.FluxRegion(center=mon_pt, size=mp.Vector3(y=sy - 2 * dpml_y))
+ )
+ sim.load_minus_flux_data(flux, incident_flux_data)
+
+ sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mon_pt, 1e-9))
+
+ res2 = sim.get_eigenmode_coefficients(flux, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y)
taper_coeffs = res2.alpha
taper_flux = mp.get_fluxes(flux)
- R_coeffs.append(abs(taper_coeffs[0,0,1])**2/abs(incident_coeffs[0,0,0])**2)
- R_flux.append(-taper_flux[0]/incident_flux[0])
- print("refl:, {}, {:.8f}, {:.8f}".format(Lt,R_coeffs[-1],R_flux[-1]))
+ R_coeffs.append(
+ abs(taper_coeffs[0, 0, 1]) ** 2 / abs(incident_coeffs[0, 0, 0]) ** 2
+ )
+ R_flux.append(-taper_flux[0] / incident_flux[0])
+ print("refl:, {}, {:.8f}, {:.8f}".format(Lt, R_coeffs[-1], R_flux[-1]))
if mp.am_master():
plt.figure()
- plt.loglog(Lts,R_coeffs,'bo-',label='mode decomposition')
- plt.loglog(Lts,R_flux,'ro-',label='Poynting flux')
- plt.loglog(Lts,[0.005/Lt**2 for Lt in Lts],'k-',label=r'quadratic reference (1/Lt$^2$)')
- plt.legend(loc='upper right')
- plt.xlabel('taper length Lt (μm)')
- plt.ylabel('reflectance')
+ plt.loglog(Lts, R_coeffs, "bo-", label="mode decomposition")
+ plt.loglog(Lts, R_flux, "ro-", label="Poynting flux")
+ plt.loglog(
+ Lts,
+ [0.005 / Lt**2 for Lt in Lts],
+ "k-",
+ label=r"quadratic reference (1/Lt$^2$)",
+ )
+ plt.legend(loc="upper right")
+ plt.xlabel("taper length Lt (μm)")
+ plt.ylabel("reflectance")
plt.show()
diff --git a/python/examples/mpb_bragg.py b/python/examples/mpb_bragg.py
index 8cfd8bf76..d8c503950 100644
--- a/python/examples/mpb_bragg.py
+++ b/python/examples/mpb_bragg.py
@@ -12,8 +12,13 @@
geometry_lattice = mp.Lattice(size=mp.Vector3(1)) # 1d cell
default_material = mp.Medium(index=n_lo)
-geometry = mp.Cylinder(material=mp.Medium(index=n_hi), center=mp.Vector3(), axis=mp.Vector3(1),
- radius=mp.inf, height=w_hi)
+geometry = mp.Cylinder(
+ material=mp.Medium(index=n_hi),
+ center=mp.Vector3(),
+ axis=mp.Vector3(1),
+ radius=mp.inf,
+ height=w_hi,
+)
kx = 0.5
k_points = [mp.Vector3(kx)]
@@ -27,12 +32,15 @@
geometry_lattice=geometry_lattice,
geometry=[geometry],
resolution=resolution,
- default_material=default_material
+ default_material=default_material,
)
def main():
- ms.run_tm(mpb.output_hfield_y) # note that TM and TE bands are degenerate, so we only need TM
+ ms.run_tm(
+ mpb.output_hfield_y
+ ) # note that TM and TE bands are degenerate, so we only need TM
+
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/python/examples/mpb_bragg_sine.py b/python/examples/mpb_bragg_sine.py
index e0a52098b..606b7a7a4 100644
--- a/python/examples/mpb_bragg_sine.py
+++ b/python/examples/mpb_bragg_sine.py
@@ -16,8 +16,11 @@
# * (1 + cos(2*pi*x))
# This is periodic, and also has inversion symmetry.
def eps_func(p):
- return mp.Medium(index=index_min + 0.5 * (index_max - index_min) *
- (1 + math.cos(2 * math.pi * p.x)))
+ return mp.Medium(
+ index=index_min
+ + 0.5 * (index_max - index_min) * (1 + math.cos(2 * math.pi * p.x))
+ )
+
geometry_lattice = mp.Lattice(size=mp.Vector3(1)) # 1d cell
@@ -34,7 +37,7 @@ def eps_func(p):
k_points=k_points,
geometry_lattice=geometry_lattice,
resolution=resolution,
- default_material=default_material
+ default_material=default_material,
)
@@ -42,5 +45,6 @@ def main():
# the TM and TE bands are degenerate, so we only need TM:
ms.run_tm()
-if __name__ == '__main__':
+
+if __name__ == "__main__":
main()
diff --git a/python/examples/mpb_data_analysis.py b/python/examples/mpb_data_analysis.py
index 4a338aab5..8893f6133 100644
--- a/python/examples/mpb_data_analysis.py
+++ b/python/examples/mpb_data_analysis.py
@@ -21,8 +21,11 @@ def tri_rods():
def get_efields(tr_ms, band):
efields.append(tr_ms.get_efield(band))
- tr_ms.run_tm(mpb.output_at_kpoint(mp.Vector3(1 / -3, 1 / 3), mpb.fix_efield_phase,
- get_efields))
+ tr_ms.run_tm(
+ mpb.output_at_kpoint(
+ mp.Vector3(1 / -3, 1 / 3), mpb.fix_efield_phase, get_efields
+ )
+ )
# Create an MPBData instance to transform the efields
md = mpb.MPBData(rectify=True, resolution=32, periods=3)
@@ -36,21 +39,21 @@ def get_efields(tr_ms, band):
tr_ms.run_te()
eps = tr_ms.get_epsilon()
- plt.imshow(eps.T, interpolation='spline36', cmap='binary')
- plt.axis('off')
+ plt.imshow(eps.T, interpolation="spline36", cmap="binary")
+ plt.axis("off")
plt.show()
md = mpb.MPBData(rectify=True, resolution=32, periods=3)
rectangular_data = md.convert(eps)
- plt.imshow(rectangular_data.T, interpolation='spline36', cmap='binary')
- plt.axis('off')
+ plt.imshow(rectangular_data.T, interpolation="spline36", cmap="binary")
+ plt.axis("off")
plt.show()
for i, f in enumerate(converted):
plt.subplot(331 + i)
- plt.contour(rectangular_data.T, cmap='binary')
- plt.imshow(np.real(f).T, interpolation='spline36', cmap='RdBu', alpha=0.9)
- plt.axis('off')
+ plt.contour(rectangular_data.T, cmap="binary")
+ plt.imshow(np.real(f).T, interpolation="spline36", cmap="RdBu", alpha=0.9)
+ plt.axis("off")
plt.show()
@@ -72,6 +75,6 @@ def get_dpwr(ms, band):
# TODO: Plot
-if __name__ == '__main__':
+if __name__ == "__main__":
tri_rods()
diamond()
diff --git a/python/examples/mpb_diamond.py b/python/examples/mpb_diamond.py
index b97fbdf50..818f6141f 100644
--- a/python/examples/mpb_diamond.py
+++ b/python/examples/mpb_diamond.py
@@ -10,19 +10,19 @@
basis_size=mp.Vector3(sqrt_half, sqrt_half, sqrt_half),
basis1=mp.Vector3(0, 1, 1),
basis2=mp.Vector3(1, 0, 1),
- basis3=mp.Vector3(1, 1)
+ basis3=mp.Vector3(1, 1),
)
# Corners of the irreducible Brillouin zone for the fcc lattice,
# in a canonical order:
vlist = [
- mp.Vector3(0, 0.5, 0.5), # X
- mp.Vector3(0, 0.625, 0.375), # U
- mp.Vector3(0, 0.5, 0), # L
- mp.Vector3(0, 0, 0), # Gamma
- mp.Vector3(0, 0.5, 0.5), # X
- mp.Vector3(0.25, 0.75, 0.5), # W
- mp.Vector3(0.375, 0.75, 0.375) # K
+ mp.Vector3(0, 0.5, 0.5), # X
+ mp.Vector3(0, 0.625, 0.375), # U
+ mp.Vector3(0, 0.5, 0), # L
+ mp.Vector3(0, 0, 0), # Gamma
+ mp.Vector3(0, 0.5, 0.5), # X
+ mp.Vector3(0.25, 0.75, 0.5), # W
+ mp.Vector3(0.375, 0.75, 0.375), # K
]
k_points = mp.interpolate(4, vlist)
@@ -34,8 +34,10 @@
diel = mp.Medium(epsilon=eps)
# A diamond lattice has two "atoms" per unit cell:
-geometry = [mp.Sphere(r, center=mp.Vector3(0.125, 0.125, 0.125), material=diel),
- mp.Sphere(r, center=mp.Vector3(-0.125, -0.125, -0.125), material=diel)]
+geometry = [
+ mp.Sphere(r, center=mp.Vector3(0.125, 0.125, 0.125), material=diel),
+ mp.Sphere(r, center=mp.Vector3(-0.125, -0.125, -0.125), material=diel),
+]
# (A simple fcc lattice would have only one sphere/object at the origin.)
@@ -49,7 +51,7 @@
geometry=geometry,
resolution=resolution,
num_bands=num_bands,
- mesh_size=mesh_size
+ mesh_size=mesh_size,
)
@@ -57,5 +59,6 @@ def main():
# run calculation, outputting electric_field energy density at the U point:
ms.run(mpb.output_at_kpoint(mp.Vector3(0, 0.625, 0.375), mpb.output_dpwr))
-if __name__ == '__main__':
+
+if __name__ == "__main__":
main()
diff --git a/python/examples/mpb_hole_slab.py b/python/examples/mpb_hole_slab.py
index 385e8d41a..88ba31528 100644
--- a/python/examples/mpb_hole_slab.py
+++ b/python/examples/mpb_hole_slab.py
@@ -23,15 +23,20 @@
supercell_h = 4 # height of the supercell
# triangular lattice with vertical supercell:
-geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1, supercell_h),
- basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
- basis2=mp.Vector3(math.sqrt(3) / 2, -0.5))
+geometry_lattice = mp.Lattice(
+ size=mp.Vector3(1, 1, supercell_h),
+ basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
+ basis2=mp.Vector3(math.sqrt(3) / 2, -0.5),
+)
geometry = [
- mp.Block(material=mp.Medium(epsilon=loweps), center=mp.Vector3(z=0.25 * supercell_h),
- size=mp.Vector3(mp.inf, mp.inf, 0.5 * supercell_h)),
+ mp.Block(
+ material=mp.Medium(epsilon=loweps),
+ center=mp.Vector3(z=0.25 * supercell_h),
+ size=mp.Vector3(mp.inf, mp.inf, 0.5 * supercell_h),
+ ),
mp.Block(material=mp.Medium(epsilon=eps), size=mp.Vector3(mp.inf, mp.inf, h)),
- mp.Cylinder(r, material=mp.air, height=supercell_h)
+ mp.Cylinder(r, material=mp.air, height=supercell_h),
]
# 1st Brillouin zone of a triangular lattice:
@@ -40,7 +45,7 @@
K = mp.Vector3(1 / -3, 1 / 3)
only_K = False # run with only_K=true to only do this k_point
-k_interp = 4 # the number of k points to interpolate
+k_interp = 4 # the number of k points to interpolate
k_points = [K] if only_K else mp.interpolate(k_interp, [Gamma, M, K, Gamma])
resolution = mp.Vector3(32, 32, 16)
num_bands = 9
@@ -50,7 +55,7 @@
geometry=geometry,
resolution=resolution,
num_bands=num_bands,
- k_points=k_points
+ k_points=k_points,
)
@@ -65,5 +70,6 @@ def main():
ms.display_eigensolver_stats()
-if __name__ == '__main__':
+
+if __name__ == "__main__":
main()
diff --git a/python/examples/mpb_honey_rods.py b/python/examples/mpb_honey_rods.py
index b24c6cc28..445642d6e 100644
--- a/python/examples/mpb_honey_rods.py
+++ b/python/examples/mpb_honey_rods.py
@@ -13,23 +13,35 @@
eps = 12 # the rod dielectric constant
# triangular lattice:
-geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1),
- basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
- basis2=mp.Vector3(math.sqrt(3) / 2, -0.5))
+geometry_lattice = mp.Lattice(
+ size=mp.Vector3(1, 1),
+ basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
+ basis2=mp.Vector3(math.sqrt(3) / 2, -0.5),
+)
# Two rods per unit cell, at the correct positions to form a honeycomb
# lattice, and arranged to have inversion symmetry:
-geometry = [mp.Cylinder(r, center=mp.Vector3(1 / 6, 1 / 6), height=mp.inf,
- material=mp.Medium(epsilon=eps)),
- mp.Cylinder(r, center=mp.Vector3(1 / -6, 1 / -6), height=mp.inf,
- material=mp.Medium(epsilon=eps))]
+geometry = [
+ mp.Cylinder(
+ r,
+ center=mp.Vector3(1 / 6, 1 / 6),
+ height=mp.inf,
+ material=mp.Medium(epsilon=eps),
+ ),
+ mp.Cylinder(
+ r,
+ center=mp.Vector3(1 / -6, 1 / -6),
+ height=mp.inf,
+ material=mp.Medium(epsilon=eps),
+ ),
+]
# The k_points list, for the Brillouin zone of a triangular lattice:
k_points = [
- mp.Vector3(), # Gamma
- mp.Vector3(y=0.5), # M
+ mp.Vector3(), # Gamma
+ mp.Vector3(y=0.5), # M
mp.Vector3(1 / -3, 1 / 3), # K
- mp.Vector3() # Gamma
+ mp.Vector3(), # Gamma
]
k_interp = 4 # number of k_points to interpolate
@@ -43,7 +55,7 @@
geometry=geometry,
k_points=k_points,
resolution=resolution,
- num_bands=num_bands
+ num_bands=num_bands,
)
@@ -51,11 +63,12 @@ def main():
ms.run_tm()
ms.run_te()
+
# Since there is a complete gap, we could instead see it just by using:
# run()
# The gap is between bands 12 and 13 in this case. (Note that there is
# a false gap between bands 2 and 3, which disappears as you increase the
# k_point resolution.)
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/python/examples/mpb_line_defect.py b/python/examples/mpb_line_defect.py
index fcbb69752..8799cb4c1 100644
--- a/python/examples/mpb_line_defect.py
+++ b/python/examples/mpb_line_defect.py
@@ -13,9 +13,11 @@
supercell_y = 7 # the (odd) number of lateral supercell periods
-geometry_lattice = mp.Lattice(size=mp.Vector3(1, supercell_y),
- basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
- basis2=mp.Vector3(math.sqrt(3) / 2, -0.5))
+geometry_lattice = mp.Lattice(
+ size=mp.Vector3(1, supercell_y),
+ basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
+ basis2=mp.Vector3(math.sqrt(3) / 2, -0.5),
+)
eps = 12 # the dielectric constant of the rods
r = 0.2 # the rod radius in the bulk crystal
@@ -29,7 +31,9 @@
geometry += [mp.Cylinder(r, material=mp.air)]
Gamma = mp.Vector3()
-K_prime = mp.lattice_to_reciprocal(mp.Vector3(0.5), geometry_lattice) # edge of Brillouin zone.
+K_prime = mp.lattice_to_reciprocal(
+ mp.Vector3(0.5), geometry_lattice
+) # edge of Brillouin zone.
k_points = mp.interpolate(4, [Gamma, K_prime])
# the bigger the supercell, the more bands you need to compute to get
@@ -44,7 +48,7 @@
geometry=geometry,
k_points=k_points,
num_bands=num_bands,
- resolution=resolution
+ resolution=resolution,
)
@@ -53,8 +57,12 @@ def main():
# band. (In general, the guided mode in such an air defect may have
# exited the gap by the time it reaches the edge of the Brillouin
# zone at K_prime.)
- ms.run_tm(mpb.output_at_kpoint(k_points[len(k_points) // 2]), ms.fix_efield_phase,
- mpb.output_efield_z)
+ ms.run_tm(
+ mpb.output_at_kpoint(k_points[len(k_points) // 2]),
+ ms.fix_efield_phase,
+ mpb.output_efield_z,
+ )
+
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/python/examples/mpb_sq_rods.py b/python/examples/mpb_sq_rods.py
index d78c2fd8e..78ee0b3e0 100644
--- a/python/examples/mpb_sq_rods.py
+++ b/python/examples/mpb_sq_rods.py
@@ -32,7 +32,7 @@
geometry=geometry,
k_points=k_points,
resolution=resolution,
- num_bands=num_bands
+ num_bands=num_bands,
)
@@ -41,9 +41,12 @@ def main():
t0 = time.time()
ms.run_te()
ms.run_tm()
- print("total time for both TE and TM bands: {:.2f} seconds".format(time.time() - t0))
+ print(
+ "total time for both TE and TM bands: {:.2f} seconds".format(time.time() - t0)
+ )
ms.display_eigensolver_stats()
-if __name__ == '__main__':
+
+if __name__ == "__main__":
main()
diff --git a/python/examples/mpb_strip.py b/python/examples/mpb_strip.py
index fd918fdcd..f14ead8b4 100644
--- a/python/examples/mpb_strip.py
+++ b/python/examples/mpb_strip.py
@@ -28,9 +28,14 @@
geometry_lattice = mp.Lattice(size=mp.Vector3(0, sc_y, sc_z))
# define the 2d blocks for the strip and substrate
-geometry = [mp.Block(size=mp.Vector3(mp.inf, mp.inf, 0.5 * (sc_z - h)),
- center=mp.Vector3(z=0.25 * (sc_z + h)), material=SiO2),
- mp.Block(size=mp.Vector3(mp.inf, w, h), material=Si)]
+geometry = [
+ mp.Block(
+ size=mp.Vector3(mp.inf, mp.inf, 0.5 * (sc_z - h)),
+ center=mp.Vector3(z=0.25 * (sc_z + h)),
+ material=SiO2,
+ ),
+ mp.Block(size=mp.Vector3(mp.inf, w, h), material=Si),
+]
# The k (i.e. beta, i.e. propagation constant) points to look at, in
# units of 2*pi/um. We'll look at num_k points from k_min to k_max.
@@ -46,7 +51,7 @@
# is the corresponding column in the output if you grep for "freqs:".)
num_bands = 4
-filename_prefix = 'strip-' # use this prefix for output files
+filename_prefix = "strip-" # use this prefix for output files
ms = mpb.ModeSolver(
geometry_lattice=geometry_lattice,
@@ -54,7 +59,7 @@
k_points=k_points,
resolution=resolution,
num_bands=num_bands,
- filename_prefix=filename_prefix
+ filename_prefix=filename_prefix,
)
@@ -75,9 +80,21 @@ def main():
omega = 1 / 1.55 # frequency corresponding to 1.55um
# Output the x component of the Poynting vector for num_bands bands at omega
- ms.find_k(mp.NO_PARITY, omega, 1, num_bands, mp.Vector3(1), 1e-3, omega * 3.45,
- omega * 0.1, omega * 4, mpb.output_poynting_x, mpb.display_yparities,
- mpb.display_group_velocities)
-
-if __name__ == '__main__':
+ ms.find_k(
+ mp.NO_PARITY,
+ omega,
+ 1,
+ num_bands,
+ mp.Vector3(1),
+ 1e-3,
+ omega * 3.45,
+ omega * 0.1,
+ omega * 4,
+ mpb.output_poynting_x,
+ mpb.display_yparities,
+ mpb.display_group_velocities,
+ )
+
+
+if __name__ == "__main__":
main()
diff --git a/python/examples/mpb_tri_holes.py b/python/examples/mpb_tri_holes.py
index 9c89b8bb8..113d0c7dd 100644
--- a/python/examples/mpb_tri_holes.py
+++ b/python/examples/mpb_tri_holes.py
@@ -11,17 +11,19 @@
# first, define the lattice vectors and k-points for a triangular lattice:
-geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1),
- basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
- basis2=mp.Vector3(math.sqrt(3) / 2, -0.5))
+geometry_lattice = mp.Lattice(
+ size=mp.Vector3(1, 1),
+ basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
+ basis2=mp.Vector3(math.sqrt(3) / 2, -0.5),
+)
kz = 0 # use non-zero kz to consider vertical propagation
k_points = [
- mp.Vector3(z=kz), # Gamma
- mp.Vector3(0, 0.5, kz), # M
+ mp.Vector3(z=kz), # Gamma
+ mp.Vector3(0, 0.5, kz), # M
mp.Vector3(1 / -3, 1 / 3, kz), # K
- mp.Vector3(z=kz) # Gamma
+ mp.Vector3(z=kz), # Gamma
]
k_interp = 4
@@ -44,7 +46,7 @@
k_points=k_points,
default_material=default_material,
resolution=resolution,
- num_bands=num_bands
+ num_bands=num_bands,
)
@@ -55,5 +57,6 @@ def main():
else:
ms.run() # if kz != 0 there are no purely te and tm bands
-if __name__ == '__main__':
+
+if __name__ == "__main__":
main()
diff --git a/python/examples/mpb_tri_rods.py b/python/examples/mpb_tri_rods.py
index 0052cae88..f7d4a79db 100644
--- a/python/examples/mpb_tri_rods.py
+++ b/python/examples/mpb_tri_rods.py
@@ -10,17 +10,19 @@
num_bands = 8
-geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1),
- basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
- basis2=mp.Vector3(math.sqrt(3) / 2, -0.5))
+geometry_lattice = mp.Lattice(
+ size=mp.Vector3(1, 1),
+ basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
+ basis2=mp.Vector3(math.sqrt(3) / 2, -0.5),
+)
geometry = [mp.Cylinder(0.2, material=mp.Medium(epsilon=12))]
k_points = [
- mp.Vector3(), # Gamma
- mp.Vector3(y=0.5), # M
+ mp.Vector3(), # Gamma
+ mp.Vector3(y=0.5), # M
mp.Vector3(1 / -3, 1 / 3), # K
- mp.Vector3(), # Gamma
+ mp.Vector3(), # Gamma
]
k_points = mp.interpolate(4, k_points)
@@ -32,14 +34,18 @@
geometry_lattice=geometry_lattice,
k_points=k_points,
resolution=resolution,
- num_bands=num_bands
+ num_bands=num_bands,
)
def main():
- ms.run_tm(mpb.output_at_kpoint(mp.Vector3(1 / -3, 1 / 3), mpb.fix_efield_phase,
- mpb.output_efield_z))
+ ms.run_tm(
+ mpb.output_at_kpoint(
+ mp.Vector3(1 / -3, 1 / 3), mpb.fix_efield_phase, mpb.output_efield_z
+ )
+ )
ms.run_te()
-if __name__ == '__main__':
+
+if __name__ == "__main__":
main()
diff --git a/python/examples/mpb_tutorial.py b/python/examples/mpb_tutorial.py
index bc3ceb99f..33734e400 100644
--- a/python/examples/mpb_tutorial.py
+++ b/python/examples/mpb_tutorial.py
@@ -11,26 +11,31 @@ def print_heading(h):
stars = "*" * 10
print("{0} {1} {0}".format(stars, h))
+
# Our First Band Structure
print_heading("Square lattice of rods in air")
num_bands = 8
-k_points = [mp.Vector3(), # Gamma
- mp.Vector3(0.5), # X
- mp.Vector3(0.5, 0.5), # M
- mp.Vector3()] # Gamma
+k_points = [
+ mp.Vector3(), # Gamma
+ mp.Vector3(0.5), # X
+ mp.Vector3(0.5, 0.5), # M
+ mp.Vector3(),
+] # Gamma
k_points = mp.interpolate(4, k_points)
geometry = [mp.Cylinder(0.2, material=mp.Medium(epsilon=12))]
geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1))
resolution = 32
-ms = mpb.ModeSolver(num_bands=num_bands,
- k_points=k_points,
- geometry=geometry,
- geometry_lattice=geometry_lattice,
- resolution=resolution)
+ms = mpb.ModeSolver(
+ num_bands=num_bands,
+ k_points=k_points,
+ geometry=geometry,
+ geometry_lattice=geometry_lattice,
+ resolution=resolution,
+)
print_heading("Square lattice of rods: TE bands")
ms.run_te()
@@ -48,21 +53,25 @@ def print_heading(h):
print_heading("Triangular lattice of rods in air")
-ms.geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1),
- basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
- basis2=mp.Vector3(math.sqrt(3) / 2, -0.5))
+ms.geometry_lattice = mp.Lattice(
+ size=mp.Vector3(1, 1),
+ basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
+ basis2=mp.Vector3(math.sqrt(3) / 2, -0.5),
+)
-ms.k_points = [mp.Vector3(), # Gamma
- mp.Vector3(y=0.5), # M
- mp.Vector3(-1 / 3, 1 / 3), # K
- mp.Vector3()] # Gamma
+ms.k_points = [
+ mp.Vector3(), # Gamma
+ mp.Vector3(y=0.5), # M
+ mp.Vector3(-1 / 3, 1 / 3), # K
+ mp.Vector3(),
+] # Gamma
ms.k_points = mp.interpolate(4, k_points)
ms.run_tm()
# Maximizing the First TM Gap
-print_heading('Maximizing the first TM gap')
+print_heading("Maximizing the first TM gap")
def first_tm_gap(r):
@@ -70,10 +79,13 @@ def first_tm_gap(r):
ms.run_tm()
return -1 * ms.retrieve_gap(1)
+
ms.num_bands = 2
ms.mesh_size = 7
-result = minimize_scalar(first_tm_gap, method='bounded', bounds=[0.1, 0.5], options={'xatol': 0.1})
+result = minimize_scalar(
+ first_tm_gap, method="bounded", bounds=[0.1, 0.5], options={"xatol": 0.1}
+)
print(f"radius at maximum: {result.x}")
print(f"gap size at maximum: {result.fun * -1}")
@@ -81,7 +93,7 @@ def first_tm_gap(r):
# A Complete 2D Gap with an Anisotropic Dielectric
-print_heading('Anisotropic complete 2d gap')
+print_heading("Anisotropic complete 2d gap")
ms.geometry = [mp.Cylinder(0.3, material=mp.Medium(epsilon_diag=mp.Vector3(1, 1, 12)))]
@@ -91,7 +103,7 @@ def first_tm_gap(r):
# Finding a Point-defect State
-print_heading('5x5 point defect')
+print_heading("5x5 point defect")
ms.geometry_lattice = mp.Lattice(size=mp.Vector3(5, 5))
ms.geometry = [mp.Cylinder(0.2, material=mp.Medium(epsilon=12))]
@@ -112,7 +124,7 @@ def first_tm_gap(r):
c = mp.Cylinder(1.0, material=mp.air)
print(f"energy in cylinder: {ms.compute_energy_in_objects([c])}")
-print_heading('5x5 point defect, targeted solver')
+print_heading("5x5 point defect, targeted solver")
ms.num_bands = 1 # only need to compute a single band, now!
ms.target_freq = (0.2812 + 0.4174) / 2
@@ -121,7 +133,7 @@ def first_tm_gap(r):
# Tuning the Point-defect Mode
-print_heading('Tuning the 5x5 point defect')
+print_heading("Tuning the 5x5 point defect")
old_geometry = ms.geometry # save the 5x5 grid with a missing rod
@@ -133,6 +145,7 @@ def rootfun(eps):
print(f"epsilon = {eps} gives freq. = {ms.get_freqs()[0]}")
return ms.get_freqs()[0] - 0.314159 # return 1st band freq. - 0.314159
+
rooteps = ridder(rootfun, 1, 12)
print(f"root (value of epsilon) is at: {rooteps}")
diff --git a/python/examples/multilevel-atom.py b/python/examples/multilevel-atom.py
index 87a6f231d..1a9aea6e2 100644
--- a/python/examples/multilevel-atom.py
+++ b/python/examples/multilevel-atom.py
@@ -7,10 +7,10 @@
# Cavity definitions
resolution = 400
-ncav = 1.5 # cavity refractive index
-Lcav = 1 # cavity length
-dpad = 1 # padding thickness
-dpml = 1 # PML thickness
+ncav = 1.5 # cavity refractive index
+Lcav = 1 # cavity length
+dpad = 1 # padding thickness
+dpml = 1 # PML thickness
sz = Lcav + dpad + dpml
cell_size = mp.Vector3(z=sz)
dimensions = 1
@@ -24,15 +24,17 @@
# These different conventions can cause a bit of confusion when comparing against SALT, so here we perform
# this transformation explicitly.
-omega_a = 40 # omega_a in SALT
-freq_21 = omega_a/(2*math.pi) # emission frequency (units of 2πc/a)
+omega_a = 40 # omega_a in SALT
+freq_21 = omega_a / (2 * math.pi) # emission frequency (units of 2πc/a)
-gamma_perp = 4 # HWHM in angular frequency, SALT
-gamma_21 = (2*gamma_perp)/(2*math.pi) # FWHM emission linewidth in sec^-1 (units of 2πc/a)
+gamma_perp = 4 # HWHM in angular frequency, SALT
+gamma_21 = (2 * gamma_perp) / (
+ 2 * math.pi
+) # FWHM emission linewidth in sec^-1 (units of 2πc/a)
# Note that 2*pi*gamma_21 = 2*gamma_perp in SALT.
-theta = 1 # theta, the off-diagonal dipole matrix element, in SALT
-sigma_21 = 2*theta*theta*omega_a # dipole coupling strength (hbar = 1)
+theta = 1 # theta, the off-diagonal dipole matrix element, in SALT
+sigma_21 = 2 * theta * theta * omega_a # dipole coupling strength (hbar = 1)
# The gain medium in MEEP is allowed to have an arbitrary number of levels, and is not
# restricted to a two-level gain medium, as it simulates the populations of every individual
@@ -55,32 +57,49 @@
# Gain medium pump and decay rates are specified in units of c/a.
-rate_21 = 0.005 # non-radiative rate (units of c/a)
-N0 = 37 # initial population density of ground state
-Rp = 0.0051 # pumping rate of ground to excited state
+rate_21 = 0.005 # non-radiative rate (units of c/a)
+N0 = 37 # initial population density of ground state
+Rp = 0.0051 # pumping rate of ground to excited state
# so for example, these parameters have D_0 (SALT) = 0.0693.
# Make the actual medium in MEEP:
-transitions = [mp.Transition(1, 2, pumping_rate=Rp, frequency=freq_21, gamma=gamma_21,
- sigma_diag=mp.Vector3(sigma_21,0,0)),
- mp.Transition(2, 1, transition_rate=rate_21)]
+transitions = [
+ mp.Transition(
+ 1,
+ 2,
+ pumping_rate=Rp,
+ frequency=freq_21,
+ gamma=gamma_21,
+ sigma_diag=mp.Vector3(sigma_21, 0, 0),
+ ),
+ mp.Transition(2, 1, transition_rate=rate_21),
+]
ml_atom = mp.MultilevelAtom(sigma=1, transitions=transitions, initial_populations=[N0])
two_level = mp.Medium(index=ncav, E_susceptibilities=[ml_atom])
# Specify the cavity geometry:
-geometry = [mp.Block(center=mp.Vector3(z=-0.5*sz+0.5*Lcav),
- size=mp.Vector3(mp.inf,mp.inf,Lcav), material=two_level)]
-
-sim = mp.Simulation(cell_size=cell_size,
- resolution=resolution,
- boundary_layers=pml_layers,
- geometry=geometry,
- dimensions=dimensions)
+geometry = [
+ mp.Block(
+ center=mp.Vector3(z=-0.5 * sz + 0.5 * Lcav),
+ size=mp.Vector3(mp.inf, mp.inf, Lcav),
+ material=two_level,
+ )
+]
+
+sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ dimensions=dimensions,
+)
sim.init_sim()
+
def field_func(p):
- return 1 if p.z==-0.5*sz + 0.5*Lcav else 0
+ return 1 if p.z == -0.5 * sz + 0.5 * Lcav else 0
+
sim.fields.initialize_field(mp.Ex, field_func)
@@ -89,8 +108,12 @@ def field_func(p):
# Note that the total number of time steps run is endt*resolution*2. This is the origin of the extra
# factor of 2 in the definition of dt in fieldfft_meep.m.
+
def print_field(sim):
- fp = sim.get_field_point(mp.Ex, mp.Vector3(z=(-0.5 * sz) + Lcav + (0.5 * dpad))).real
+ fp = sim.get_field_point(
+ mp.Ex, mp.Vector3(z=(-0.5 * sz) + Lcav + (0.5 * dpad))
+ ).real
print(f"field:, {sim.meep_time()}, {fp}")
+
sim.run(mp.after_time(endt - 250, print_field), until=endt)
diff --git a/python/examples/oblique-planewave.ipynb b/python/examples/oblique-planewave.ipynb
index 75efcdad6..4083cccc3 100644
--- a/python/examples/oblique-planewave.ipynb
+++ b/python/examples/oblique-planewave.ipynb
@@ -53,40 +53,46 @@
"metadata": {},
"outputs": [],
"source": [
- "def run_sim(rot_angle = 0):\n",
+ "def run_sim(rot_angle=0):\n",
"\n",
- " resolution = 50 # pixels/μm\n",
+ " resolution = 50 # pixels/μm\n",
"\n",
- " cell_size = mp.Vector3(14,10,0)\n",
+ " cell_size = mp.Vector3(14, 10, 0)\n",
"\n",
- " pml_layers = [mp.PML(thickness=2,direction=mp.X)]\n",
+ " pml_layers = [mp.PML(thickness=2, direction=mp.X)]\n",
"\n",
- " fsrc = 1.0 # frequency of planewave (wavelength = 1/fsrc)\n",
+ " fsrc = 1.0 # frequency of planewave (wavelength = 1/fsrc)\n",
"\n",
- " n = 1.5 # refractive index of homogeneous material\n",
+ " n = 1.5 # refractive index of homogeneous material\n",
" default_material = mp.Medium(index=n)\n",
"\n",
- " k_point = mp.Vector3(fsrc*n).rotate(mp.Vector3(z=1), rot_angle)\n",
+ " k_point = mp.Vector3(fsrc * n).rotate(mp.Vector3(z=1), rot_angle)\n",
"\n",
- " sources = [mp.EigenModeSource(src=mp.ContinuousSource(fsrc),\n",
- " center=mp.Vector3(),\n",
- " size=mp.Vector3(y=10),\n",
- " direction=mp.AUTOMATIC if rot_angle == 0 else mp.NO_DIRECTION,\n",
- " eig_kpoint=k_point,\n",
- " eig_band=1,\n",
- " eig_parity=mp.EVEN_Y+mp.ODD_Z if rot_angle == 0 else mp.ODD_Z,\n",
- " eig_match_freq=True)]\n",
+ " sources = [\n",
+ " mp.EigenModeSource(\n",
+ " src=mp.ContinuousSource(fsrc),\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(y=10),\n",
+ " direction=mp.AUTOMATIC if rot_angle == 0 else mp.NO_DIRECTION,\n",
+ " eig_kpoint=k_point,\n",
+ " eig_band=1,\n",
+ " eig_parity=mp.EVEN_Y + mp.ODD_Z if rot_angle == 0 else mp.ODD_Z,\n",
+ " eig_match_freq=True,\n",
+ " )\n",
+ " ]\n",
"\n",
- " sim = mp.Simulation(cell_size=cell_size,\n",
- " resolution=resolution,\n",
- " boundary_layers=pml_layers,\n",
- " sources=sources,\n",
- " k_point=k_point,\n",
- " default_material=default_material,\n",
- " symmetries=[mp.Mirror(mp.Y)] if rot_angle == 0 else [])\n",
+ " sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " resolution=resolution,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=sources,\n",
+ " k_point=k_point,\n",
+ " default_material=default_material,\n",
+ " symmetries=[mp.Mirror(mp.Y)] if rot_angle == 0 else [],\n",
+ " )\n",
"\n",
" sim.run(until=100)\n",
- " \n",
+ "\n",
" plt.figure(dpi=100)\n",
" sim.plot2D(fields=mp.Ez)\n",
" plt.show()"
@@ -219,7 +225,7 @@
}
],
"source": [
- "for rot_angle in np.radians([0,20,40]):\n",
+ "for rot_angle in np.radians([0, 20, 40]):\n",
" run_sim(rot_angle)"
]
},
diff --git a/python/examples/oblique-planewave.py b/python/examples/oblique-planewave.py
index 4b3b971d4..2742fb9e1 100644
--- a/python/examples/oblique-planewave.py
+++ b/python/examples/oblique-planewave.py
@@ -2,46 +2,51 @@
import numpy as np
import matplotlib.pyplot as plt
-resolution = 50 # pixels/μm
+resolution = 50 # pixels/μm
-cell_size = mp.Vector3(14,10,0)
+cell_size = mp.Vector3(14, 10, 0)
-pml_layers = [mp.PML(thickness=2,direction=mp.X)]
+pml_layers = [mp.PML(thickness=2, direction=mp.X)]
# rotation angle (in degrees) of planewave, counter clockwise (CCW) around z-axis
rot_angle = np.radians(0)
-fsrc = 1.0 # frequency of planewave (wavelength = 1/fsrc)
+fsrc = 1.0 # frequency of planewave (wavelength = 1/fsrc)
-n = 1.5 # refractive index of homogeneous material
+n = 1.5 # refractive index of homogeneous material
default_material = mp.Medium(index=n)
-k_point = mp.Vector3(fsrc*n).rotate(mp.Vector3(z=1), rot_angle)
-
-sources = [mp.EigenModeSource(src=mp.ContinuousSource(fsrc),
- center=mp.Vector3(),
- size=mp.Vector3(y=10),
- direction=mp.AUTOMATIC if rot_angle == 0 else mp.NO_DIRECTION,
- eig_kpoint=k_point,
- eig_band=1,
- eig_parity=mp.EVEN_Y+mp.ODD_Z if rot_angle == 0 else mp.ODD_Z,
- eig_match_freq=True)]
-
-sim = mp.Simulation(cell_size=cell_size,
- resolution=resolution,
- boundary_layers=pml_layers,
- sources=sources,
- k_point=k_point,
- default_material=default_material,
- symmetries=[mp.Mirror(mp.Y)] if rot_angle == 0 else [])
+k_point = mp.Vector3(fsrc * n).rotate(mp.Vector3(z=1), rot_angle)
+
+sources = [
+ mp.EigenModeSource(
+ src=mp.ContinuousSource(fsrc),
+ center=mp.Vector3(),
+ size=mp.Vector3(y=10),
+ direction=mp.AUTOMATIC if rot_angle == 0 else mp.NO_DIRECTION,
+ eig_kpoint=k_point,
+ eig_band=1,
+ eig_parity=mp.EVEN_Y + mp.ODD_Z if rot_angle == 0 else mp.ODD_Z,
+ eig_match_freq=True,
+ )
+]
+
+sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ boundary_layers=pml_layers,
+ sources=sources,
+ k_point=k_point,
+ default_material=default_material,
+ symmetries=[mp.Mirror(mp.Y)] if rot_angle == 0 else [],
+)
sim.run(until=100)
-nonpml_vol = mp.Volume(center=mp.Vector3(), size=mp.Vector3(10,10,0))
+nonpml_vol = mp.Volume(center=mp.Vector3(), size=mp.Vector3(10, 10, 0))
-sim.plot2D(fields=mp.Ez,
- output_plane=nonpml_vol)
+sim.plot2D(fields=mp.Ez, output_plane=nonpml_vol)
if mp.am_master():
- plt.axis('off')
- plt.savefig('pw.png',bbox_inches='tight')
+ plt.axis("off")
+ plt.savefig("pw.png", bbox_inches="tight")
diff --git a/python/examples/oblique-source.ipynb b/python/examples/oblique-source.ipynb
index 96dec7d27..af62389a5 100644
--- a/python/examples/oblique-source.ipynb
+++ b/python/examples/oblique-source.ipynb
@@ -62,33 +62,43 @@
"metadata": {},
"outputs": [],
"source": [
- "resolution = 20 # pixels/μm\n",
+ "resolution = 20 # pixels/μm\n",
"\n",
- "cell_size = mp.Vector3(14,14)\n",
+ "cell_size = mp.Vector3(14, 14)\n",
"\n",
"pml_layers = [mp.PML(thickness=2)]\n",
"\n",
"# rotation angle (in degrees) of waveguide, counter clockwise (CCW) around z-axis\n",
"rot_angle = np.radians(20)\n",
"\n",
- "geometry = [mp.Block(center=mp.Vector3(),\n",
- " size=mp.Vector3(mp.inf,1,mp.inf),\n",
- " e1 = mp.Vector3(1).rotate(mp.Vector3(z=1), rot_angle),\n",
- " e2 = mp.Vector3(y=1).rotate(mp.Vector3(z=1), rot_angle),\n",
- " material=mp.Medium(epsilon=12))]\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(mp.inf, 1, mp.inf),\n",
+ " e1=mp.Vector3(1).rotate(mp.Vector3(z=1), rot_angle),\n",
+ " e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), rot_angle),\n",
+ " material=mp.Medium(epsilon=12),\n",
+ " )\n",
+ "]\n",
"\n",
- "fsrc = 0.15 # frequency of eigenmode or constant-amplitude source\n",
+ "fsrc = 0.15 # frequency of eigenmode or constant-amplitude source\n",
"\n",
- "sources = [mp.Source(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc),\n",
- " center=mp.Vector3(),\n",
- " size=mp.Vector3(y=2),\n",
- " component=mp.Ez)]\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc),\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(y=2),\n",
+ " component=mp.Ez,\n",
+ " )\n",
+ "]\n",
"\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " resolution=resolution,\n",
- " boundary_layers=pml_layers,\n",
- " sources=sources,\n",
- " geometry=geometry)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " resolution=resolution,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=sources,\n",
+ " geometry=geometry,\n",
+ ")"
]
},
{
@@ -160,8 +170,8 @@
],
"source": [
"f = plt.figure(dpi=100)\n",
- "animate = mp.Animate2D(sim,mp.Ez,f=f,normalize=True)\n",
- "sim.run(mp.at_every(1,animate),until_after_sources=50)\n",
+ "animate = mp.Animate2D(sim, mp.Ez, f=f, normalize=True)\n",
+ "sim.run(mp.at_every(1, animate), until_after_sources=50)\n",
"plt.close()"
]
},
@@ -201,8 +211,8 @@
}
],
"source": [
- "filename = 'media/oblique-source-normal.mp4'\n",
- "animate.to_mp4(10,filename)\n",
+ "filename = \"media/oblique-source-normal.mp4\"\n",
+ "animate.to_mp4(10, filename)\n",
"Video(filename)"
]
},
@@ -223,26 +233,34 @@
"metadata": {},
"outputs": [],
"source": [
- "kx = 0.4 # initial guess for wavevector in x-direction of eigenmode\n",
- "kpoint = mp.Vector3(kx).rotate(mp.Vector3(z=1), rot_angle) # Rotate the vector by the specified amount\n",
+ "kx = 0.4 # initial guess for wavevector in x-direction of eigenmode\n",
+ "kpoint = mp.Vector3(kx).rotate(\n",
+ " mp.Vector3(z=1), rot_angle\n",
+ ") # Rotate the vector by the specified amount\n",
"\n",
- "bnum = 1 # band number of eigenmode\n",
+ "bnum = 1 # band number of eigenmode\n",
"\n",
- "sources = [mp.EigenModeSource(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc),\n",
- " center=mp.Vector3(),\n",
- " size=mp.Vector3(y=14),\n",
- " direction=mp.NO_DIRECTION,\n",
- " eig_kpoint=kpoint,\n",
- " eig_band=bnum,\n",
- " eig_parity=mp.EVEN_Y+mp.ODD_Z if rot_angle == 0 else mp.ODD_Z,\n",
- " eig_match_freq=True)]\n",
+ "sources = [\n",
+ " mp.EigenModeSource(\n",
+ " src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc),\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(y=14),\n",
+ " direction=mp.NO_DIRECTION,\n",
+ " eig_kpoint=kpoint,\n",
+ " eig_band=bnum,\n",
+ " eig_parity=mp.EVEN_Y + mp.ODD_Z if rot_angle == 0 else mp.ODD_Z,\n",
+ " eig_match_freq=True,\n",
+ " )\n",
+ "]\n",
"\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " resolution=resolution,\n",
- " boundary_layers=pml_layers,\n",
- " sources=sources,\n",
- " geometry=geometry,\n",
- " symmetries=[mp.Mirror(mp.Y)] if rot_angle == 0 else [])"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " resolution=resolution,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=sources,\n",
+ " geometry=geometry,\n",
+ " symmetries=[mp.Mirror(mp.Y)] if rot_angle == 0 else [],\n",
+ ")"
]
},
{
@@ -280,8 +298,8 @@
],
"source": [
"f = plt.figure(dpi=100)\n",
- "animate = mp.Animate2D(sim,mp.Ez,f=f,normalize=True)\n",
- "sim.run(mp.at_every(1,animate),until_after_sources=50)\n",
+ "animate = mp.Animate2D(sim, mp.Ez, f=f, normalize=True)\n",
+ "sim.run(mp.at_every(1, animate), until_after_sources=50)\n",
"plt.close()"
]
},
@@ -314,8 +332,8 @@
}
],
"source": [
- "filename = 'media/oblique-source-eig.mp4'\n",
- "animate.to_mp4(10,filename)\n",
+ "filename = \"media/oblique-source-eig.mp4\"\n",
+ "animate.to_mp4(10, filename)\n",
"Video(filename)"
]
},
@@ -427,40 +445,57 @@
],
"source": [
"for rot_angle in np.radians([0, 20, 40]):\n",
- " \n",
- " resolution = 20\n",
"\n",
- " geometry = [mp.Block(center=mp.Vector3(),\n",
- " size=mp.Vector3(mp.inf,1,mp.inf),\n",
- " e1=mp.Vector3(1).rotate(mp.Vector3(z=1), rot_angle),\n",
- " e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), rot_angle),\n",
- " material=mp.Medium(epsilon=12))]\n",
+ " resolution = 20\n",
"\n",
- " sources = [mp.EigenModeSource(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc),\n",
- " center=mp.Vector3(),\n",
- " size=mp.Vector3(y=14),\n",
- " direction=mp.NO_DIRECTION,\n",
- " eig_kpoint=kpoint,\n",
- " eig_band=bnum,\n",
- " eig_parity=mp.ODD_Z,\n",
- " eig_match_freq=True)]\n",
+ " geometry = [\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(mp.inf, 1, mp.inf),\n",
+ " e1=mp.Vector3(1).rotate(mp.Vector3(z=1), rot_angle),\n",
+ " e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), rot_angle),\n",
+ " material=mp.Medium(epsilon=12),\n",
+ " )\n",
+ " ]\n",
"\n",
- " sim = mp.Simulation(cell_size=cell_size,\n",
- " resolution=resolution,\n",
- " boundary_layers=pml_layers,\n",
- " sources=sources,\n",
- " geometry=geometry)\n",
+ " sources = [\n",
+ " mp.EigenModeSource(\n",
+ " src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc),\n",
+ " center=mp.Vector3(),\n",
+ " size=mp.Vector3(y=14),\n",
+ " direction=mp.NO_DIRECTION,\n",
+ " eig_kpoint=kpoint,\n",
+ " eig_band=bnum,\n",
+ " eig_parity=mp.ODD_Z,\n",
+ " eig_match_freq=True,\n",
+ " )\n",
+ " ]\n",
"\n",
+ " sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " resolution=resolution,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=sources,\n",
+ " geometry=geometry,\n",
+ " )\n",
"\n",
- " tran = sim.add_flux(fsrc, 0, 1, mp.FluxRegion(center=mp.Vector3(x=5), size=mp.Vector3(y=14)))\n",
+ " tran = sim.add_flux(\n",
+ " fsrc, 0, 1, mp.FluxRegion(center=mp.Vector3(x=5), size=mp.Vector3(y=14))\n",
+ " )\n",
" sim.run(until_after_sources=50)\n",
- " res = sim.get_eigenmode_coefficients(tran,\n",
- " [1],\n",
- " eig_parity=mp.EVEN_Y+mp.ODD_Z if rot_angle == 0 else mp.ODD_Z,\n",
- " direction=mp.NO_DIRECTION,\n",
- " kpoint_func=lambda f,n: kpoint)\n",
- " print(\"flux:, {:.6f}, {:.6f}\".format(mp.get_fluxes(tran)[0],abs(res.alpha[0,0,0])**2))\n",
- " \n",
+ " res = sim.get_eigenmode_coefficients(\n",
+ " tran,\n",
+ " [1],\n",
+ " eig_parity=mp.EVEN_Y + mp.ODD_Z if rot_angle == 0 else mp.ODD_Z,\n",
+ " direction=mp.NO_DIRECTION,\n",
+ " kpoint_func=lambda f, n: kpoint,\n",
+ " )\n",
+ " print(\n",
+ " \"flux:, {:.6f}, {:.6f}\".format(\n",
+ " mp.get_fluxes(tran)[0], abs(res.alpha[0, 0, 0]) ** 2\n",
+ " )\n",
+ " )\n",
+ "\n",
" sim.plot2D(fields=mp.Ez)\n",
" plt.show()"
]
diff --git a/python/examples/oblique-source.py b/python/examples/oblique-source.py
index 243825dc0..25458e449 100644
--- a/python/examples/oblique-source.py
+++ b/python/examples/oblique-source.py
@@ -2,66 +2,94 @@
import numpy as np
import matplotlib.pyplot as plt
-resolution = 50 # pixels/μm
+resolution = 50 # pixels/μm
-cell_size = mp.Vector3(14,14)
+cell_size = mp.Vector3(14, 14)
pml_layers = [mp.PML(thickness=2)]
# rotation angle (in degrees) of waveguide, counter clockwise (CCW) around z-axis
rot_angle = np.radians(20)
-w = 1.0 # width of waveguide
+w = 1.0 # width of waveguide
-geometry = [mp.Block(center=mp.Vector3(),
- size=mp.Vector3(mp.inf,w,mp.inf),
- e1=mp.Vector3(x=1).rotate(mp.Vector3(z=1), rot_angle),
- e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), rot_angle),
- material=mp.Medium(epsilon=12))]
+geometry = [
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(mp.inf, w, mp.inf),
+ e1=mp.Vector3(x=1).rotate(mp.Vector3(z=1), rot_angle),
+ e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), rot_angle),
+ material=mp.Medium(epsilon=12),
+ )
+]
-fsrc = 0.15 # frequency of eigenmode or constant-amplitude source
-bnum = 1 # band number of eigenmode
+fsrc = 0.15 # frequency of eigenmode or constant-amplitude source
+bnum = 1 # band number of eigenmode
kpoint = mp.Vector3(x=1).rotate(mp.Vector3(z=1), rot_angle)
-compute_flux = True # compute flux (True) or plot the field profile (False)
+compute_flux = True # compute flux (True) or plot the field profile (False)
-eig_src = True # eigenmode (True) or constant-amplitude (False) source
+eig_src = True # eigenmode (True) or constant-amplitude (False) source
if eig_src:
- sources = [mp.EigenModeSource(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc) if compute_flux else mp.ContinuousSource(fsrc),
- center=mp.Vector3(),
- size=mp.Vector3(y=3*w),
- direction=mp.NO_DIRECTION,
- eig_kpoint=kpoint,
- eig_band=bnum,
- eig_parity=mp.EVEN_Y+mp.ODD_Z if rot_angle == 0 else mp.ODD_Z,
- eig_match_freq=True)]
+ sources = [
+ mp.EigenModeSource(
+ src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc)
+ if compute_flux
+ else mp.ContinuousSource(fsrc),
+ center=mp.Vector3(),
+ size=mp.Vector3(y=3 * w),
+ direction=mp.NO_DIRECTION,
+ eig_kpoint=kpoint,
+ eig_band=bnum,
+ eig_parity=mp.EVEN_Y + mp.ODD_Z if rot_angle == 0 else mp.ODD_Z,
+ eig_match_freq=True,
+ )
+ ]
else:
- sources = [mp.Source(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc) if compute_flux else mp.ContinuousSource(fsrc),
- center=mp.Vector3(),
- size=mp.Vector3(y=3*w),
- component=mp.Ez)]
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc)
+ if compute_flux
+ else mp.ContinuousSource(fsrc),
+ center=mp.Vector3(),
+ size=mp.Vector3(y=3 * w),
+ component=mp.Ez,
+ )
+ ]
-sim = mp.Simulation(cell_size=cell_size,
- resolution=resolution,
- boundary_layers=pml_layers,
- sources=sources,
- geometry=geometry,
- symmetries=[mp.Mirror(mp.Y)] if rot_angle == 0 else [])
+sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ boundary_layers=pml_layers,
+ sources=sources,
+ geometry=geometry,
+ symmetries=[mp.Mirror(mp.Y)] if rot_angle == 0 else [],
+)
if compute_flux:
- tran = sim.add_flux(fsrc, 0, 1, mp.FluxRegion(center=mp.Vector3(x=5), size=mp.Vector3(y=14)))
+ tran = sim.add_flux(
+ fsrc, 0, 1, mp.FluxRegion(center=mp.Vector3(x=5), size=mp.Vector3(y=14))
+ )
sim.run(until_after_sources=50)
- res = sim.get_eigenmode_coefficients(tran,
- [1],
- eig_parity=mp.EVEN_Y+mp.ODD_Z if rot_angle == 0 else mp.ODD_Z,
- direction=mp.NO_DIRECTION,
- kpoint_func=lambda f,n: kpoint)
- print("flux:, {:.6f}, {:.6f}".format(mp.get_fluxes(tran)[0],abs(res.alpha[0,0,0])**2))
+ res = sim.get_eigenmode_coefficients(
+ tran,
+ [1],
+ eig_parity=mp.EVEN_Y + mp.ODD_Z if rot_angle == 0 else mp.ODD_Z,
+ direction=mp.NO_DIRECTION,
+ kpoint_func=lambda f, n: kpoint,
+ )
+ print(
+ "flux:, {:.6f}, {:.6f}".format(
+ mp.get_fluxes(tran)[0], abs(res.alpha[0, 0, 0]) ** 2
+ )
+ )
else:
sim.run(until=100)
- sim.plot2D(output_plane=mp.Volume(center=mp.Vector3(), size=mp.Vector3(10,10)),
- fields=mp.Ez,
- field_parameters={'alpha':0.9})
+ sim.plot2D(
+ output_plane=mp.Volume(center=mp.Vector3(), size=mp.Vector3(10, 10)),
+ fields=mp.Ez,
+ field_parameters={"alpha": 0.9},
+ )
plt.show()
diff --git a/python/examples/parallel-wvgs-force.ipynb b/python/examples/parallel-wvgs-force.ipynb
index 32e9eb0d8..db2954e22 100644
--- a/python/examples/parallel-wvgs-force.ipynb
+++ b/python/examples/parallel-wvgs-force.ipynb
@@ -33,7 +33,7 @@
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
- "resolution = 40 # pixels/μm\n",
+ "resolution = 40 # pixels/μm\n",
"\n",
"Si = mp.Medium(index=3.45)\n",
"\n",
@@ -42,67 +42,89 @@
"\n",
"sx = 5\n",
"sy = 3\n",
- "cell = mp.Vector3(sx+2*dpml,sy+2*dpml,0)\n",
+ "cell = mp.Vector3(sx + 2 * dpml, sy + 2 * dpml, 0)\n",
"\n",
- "a = 1.0 # waveguide width/height\n",
+ "a = 1.0 # waveguide width/height\n",
"\n",
"k_point = mp.Vector3(z=0.5)\n",
"\n",
- "def parallel_waveguide(s,xodd):\n",
- " geometry = [mp.Block(center=mp.Vector3(-0.5*(s+a)),\n",
- " size=mp.Vector3(a,a,mp.inf),\n",
- " material=Si),\n",
- " mp.Block(center=mp.Vector3(0.5*(s+a)),\n",
- " size=mp.Vector3(a,a,mp.inf),\n",
- " material=Si)]\n",
"\n",
- " symmetries = [mp.Mirror(mp.X, phase=-1 if xodd else 1),\n",
- " mp.Mirror(mp.Y, phase=-1)]\n",
+ "def parallel_waveguide(s, xodd):\n",
+ " geometry = [\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(-0.5 * (s + a)),\n",
+ " size=mp.Vector3(a, a, mp.inf),\n",
+ " material=Si,\n",
+ " ),\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(0.5 * (s + a)), size=mp.Vector3(a, a, mp.inf), material=Si\n",
+ " ),\n",
+ " ]\n",
+ "\n",
+ " symmetries = [mp.Mirror(mp.X, phase=-1 if xodd else 1), mp.Mirror(mp.Y, phase=-1)]\n",
+ "\n",
+ " sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell,\n",
+ " geometry=geometry,\n",
+ " boundary_layers=pml_layers,\n",
+ " symmetries=symmetries,\n",
+ " k_point=k_point,\n",
+ " )\n",
"\n",
- " sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell,\n",
- " geometry=geometry,\n",
- " boundary_layers=pml_layers,\n",
- " symmetries=symmetries,\n",
- " k_point=k_point)\n",
- " \n",
" sim.init_sim()\n",
- " EigenmodeData = sim.get_eigenmode(0.22,\n",
- " mp.Z,\n",
- " mp.Volume(center=mp.Vector3(), size=mp.Vector3(sx,sy)),\n",
- " 2 if xodd else 1,\n",
- " k_point,\n",
- " match_frequency=False,\n",
- " parity=mp.ODD_Y)\n",
+ " EigenmodeData = sim.get_eigenmode(\n",
+ " 0.22,\n",
+ " mp.Z,\n",
+ " mp.Volume(center=mp.Vector3(), size=mp.Vector3(sx, sy)),\n",
+ " 2 if xodd else 1,\n",
+ " k_point,\n",
+ " match_frequency=False,\n",
+ " parity=mp.ODD_Y,\n",
+ " )\n",
"\n",
" fcen = EigenmodeData.freq\n",
" print(\"freq:, {}, {}, {}\".format(\"xodd\" if xodd else \"xeven\", s, fcen))\n",
"\n",
" sim.reset_meep()\n",
"\n",
- " eig_sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen, fwidth=0.1*fcen),\n",
- " size=mp.Vector3(sx,sy),\n",
- " center=mp.Vector3(),\n",
- " eig_band=2 if xodd else 1,\n",
- " eig_kpoint=k_point,\n",
- " eig_match_freq=False,\n",
- " eig_parity=mp.ODD_Y)]\n",
+ " eig_sources = [\n",
+ " mp.EigenModeSource(\n",
+ " src=mp.GaussianSource(fcen, fwidth=0.1 * fcen),\n",
+ " size=mp.Vector3(sx, sy),\n",
+ " center=mp.Vector3(),\n",
+ " eig_band=2 if xodd else 1,\n",
+ " eig_kpoint=k_point,\n",
+ " eig_match_freq=False,\n",
+ " eig_parity=mp.ODD_Y,\n",
+ " )\n",
+ " ]\n",
"\n",
" sim.change_sources(eig_sources)\n",
"\n",
- " flux_reg = mp.FluxRegion(direction=mp.Z, center=mp.Vector3(), size=mp.Vector3(sx,sy))\n",
+ " flux_reg = mp.FluxRegion(\n",
+ " direction=mp.Z, center=mp.Vector3(), size=mp.Vector3(sx, sy)\n",
+ " )\n",
" wvg_flux = sim.add_flux(fcen, 0, 1, flux_reg)\n",
"\n",
- " force_reg1 = mp.ForceRegion(mp.Vector3(0.49*s), direction=mp.X, weight=1, size=mp.Vector3(y=sy))\n",
- " force_reg2 = mp.ForceRegion(mp.Vector3(0.5*s+1.01*a), direction=mp.X, weight=-1, size=mp.Vector3(y=sy))\n",
+ " force_reg1 = mp.ForceRegion(\n",
+ " mp.Vector3(0.49 * s), direction=mp.X, weight=1, size=mp.Vector3(y=sy)\n",
+ " )\n",
+ " force_reg2 = mp.ForceRegion(\n",
+ " mp.Vector3(0.5 * s + 1.01 * a), direction=mp.X, weight=-1, size=mp.Vector3(y=sy)\n",
+ " )\n",
" wvg_force = sim.add_force(fcen, 0, 1, force_reg1, force_reg2)\n",
"\n",
" sim.run(until_after_sources=1500)\n",
"\n",
" flux = mp.get_fluxes(wvg_flux)[0]\n",
" force = mp.get_forces(wvg_force)[0]\n",
- " print(\"data:, {}, {}, {}, {}, {}\".format(\"xodd\" if xodd else \"xeven\", s, flux, force, -force/flux))\n",
- " \n",
+ " print(\n",
+ " \"data:, {}, {}, {}, {}, {}\".format(\n",
+ " \"xodd\" if xodd else \"xeven\", s, flux, force, -force / flux\n",
+ " )\n",
+ " )\n",
+ "\n",
" sim.reset_meep()\n",
" return flux, force"
]
@@ -2319,15 +2341,15 @@
}
],
"source": [
- "s = np.arange(0.1,1.1,0.1)\n",
+ "s = np.arange(0.1, 1.1, 0.1)\n",
"fluxes_odd = np.zeros(s.size)\n",
"forces_odd = np.zeros(s.size)\n",
"fluxes_even = np.zeros(s.size)\n",
"forces_even = np.zeros(s.size)\n",
"\n",
"for k in range(len(s)):\n",
- " fluxes_odd[k], forces_odd[k] = parallel_waveguide(s[k],True)\n",
- " fluxes_even[k], forces_even[k] = parallel_waveguide(s[k],False)"
+ " fluxes_odd[k], forces_odd[k] = parallel_waveguide(s[k], True)\n",
+ " fluxes_even[k], forces_even[k] = parallel_waveguide(s[k], False)"
]
},
{
@@ -2350,12 +2372,12 @@
],
"source": [
"plt.figure(dpi=150)\n",
- "plt.plot(s,-forces_odd/fluxes_odd,'rs',label='anti-symmetric')\n",
- "plt.plot(s,-forces_even/fluxes_even,'bo',label='symmetric')\n",
+ "plt.plot(s, -forces_odd / fluxes_odd, \"rs\", label=\"anti-symmetric\")\n",
+ "plt.plot(s, -forces_even / fluxes_even, \"bo\", label=\"symmetric\")\n",
"plt.grid(True)\n",
- "plt.xlabel('waveguide separation s/a')\n",
- "plt.ylabel('optical force (F/L)(ac/P)')\n",
- "plt.legend(loc='upper right')\n",
+ "plt.xlabel(\"waveguide separation s/a\")\n",
+ "plt.ylabel(\"optical force (F/L)(ac/P)\")\n",
+ "plt.legend(loc=\"upper right\")\n",
"plt.show()"
]
},
@@ -3185,7 +3207,7 @@
"Si = mp.Medium(index=3.45)\n",
"\n",
"syz = 10\n",
- "geometry_lattice = mp.Lattice(size=mp.Vector3(0,syz,syz))\n",
+ "geometry_lattice = mp.Lattice(size=mp.Vector3(0, syz, syz))\n",
"\n",
"k_points = [mp.Vector3(0.5)]\n",
"\n",
@@ -3194,20 +3216,29 @@
"\n",
"a = 1.0 # waveguide width\n",
"\n",
- "def parallel_waveguide(s,yodd):\n",
- " geometry = [mp.Block(center=mp.Vector3(0,-0.5*(s+a),0),\n",
- " size=mp.Vector3(mp.inf,a,a),\n",
- " material=Si),\n",
- " mp.Block(center=mp.Vector3(0,0.5*(s+a),0),\n",
- " size=mp.Vector3(mp.inf,a,a),\n",
- " material=Si)]\n",
"\n",
- " ms = mpb.ModeSolver(resolution=resolution,\n",
- " k_points=k_points,\n",
- " geometry_lattice=geometry_lattice,\n",
- " geometry=geometry,\n",
- " num_bands=num_bands,\n",
- " tolerance=tolerance)\n",
+ "def parallel_waveguide(s, yodd):\n",
+ " geometry = [\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(0, -0.5 * (s + a), 0),\n",
+ " size=mp.Vector3(mp.inf, a, a),\n",
+ " material=Si,\n",
+ " ),\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(0, 0.5 * (s + a), 0),\n",
+ " size=mp.Vector3(mp.inf, a, a),\n",
+ " material=Si,\n",
+ " ),\n",
+ " ]\n",
+ "\n",
+ " ms = mpb.ModeSolver(\n",
+ " resolution=resolution,\n",
+ " k_points=k_points,\n",
+ " geometry_lattice=geometry_lattice,\n",
+ " geometry=geometry,\n",
+ " num_bands=num_bands,\n",
+ " tolerance=tolerance,\n",
+ " )\n",
"\n",
" if yodd:\n",
" ms.run_yodd_zodd()\n",
@@ -3215,11 +3246,12 @@
" ms.run_yeven_zodd()\n",
"\n",
" f = ms.get_freqs()[0]\n",
- " vg = ms.compute_group_velocity_component(mp.Vector3(1,0,0))[0]\n",
+ " vg = ms.compute_group_velocity_component(mp.Vector3(1, 0, 0))[0]\n",
+ "\n",
+ " return f, vg\n",
"\n",
- " return f,vg\n",
"\n",
- "ss = np.arange(0.05,1.15,0.1)\n",
+ "ss = np.arange(0.05, 1.15, 0.1)\n",
"\n",
"f_odd = np.zeros(len(ss))\n",
"vg_odd = np.zeros(len(ss))\n",
@@ -3227,19 +3259,21 @@
"vg_even = np.zeros(len(ss))\n",
"\n",
"for j in range(len(ss)):\n",
- " f_odd[j], vg_odd[j] = parallel_waveguide(ss[j],True)\n",
- " f_even[j], vg_even[j] = parallel_waveguide(ss[j],False)\n",
+ " f_odd[j], vg_odd[j] = parallel_waveguide(ss[j], True)\n",
+ " f_even[j], vg_even[j] = parallel_waveguide(ss[j], False)\n",
+ "\n",
+ "ds = ss[1] - ss[0]\n",
+ "\n",
"\n",
- "ds = ss[1]-ss[0]\n",
+ "def compute_force(f, vg):\n",
+ " f_avg = 0.5 * (f[:-1] + f[1:])\n",
+ " df = f[1:] - f[:-1]\n",
+ " vg_avg = 0.5 * (vg[:-1] + vg[1:])\n",
+ " return -1 / f_avg * df / ds * 1 / vg_avg\n",
"\n",
- "def compute_force(f,vg):\n",
- " f_avg = 0.5*(f[:-1]+f[1:])\n",
- " df = f[1:]-f[:-1]\n",
- " vg_avg = 0.5*(vg[:-1]+vg[1:])\n",
- " return -1/f_avg * df/ds * 1/vg_avg\n",
"\n",
- "force_odd = compute_force(f_odd,vg_odd)\n",
- "force_even = compute_force(f_even,vg_even)"
+ "force_odd = compute_force(f_odd, vg_odd)\n",
+ "force_even = compute_force(f_even, vg_even)"
]
},
{
@@ -3262,13 +3296,13 @@
],
"source": [
"plt.figure(dpi=200)\n",
- "plt.plot(ss[:-1],force_odd,'b-',label='anti-symmetric')\n",
- "plt.plot(ss[:-1],force_even,'r-',label='symmetric')\n",
+ "plt.plot(ss[:-1], force_odd, \"b-\", label=\"anti-symmetric\")\n",
+ "plt.plot(ss[:-1], force_even, \"r-\", label=\"symmetric\")\n",
"plt.xlabel(\"waveguide separation s/a\")\n",
"plt.ylabel(\"optical force (F/L)(ac/P)\")\n",
- "plt.legend(loc='upper right')\n",
- "plt.xticks(np.arange(0,1.2,0.2))\n",
- "plt.yticks(np.arange(-1.5,1.0,0.5))\n",
+ "plt.legend(loc=\"upper right\")\n",
+ "plt.xticks(np.arange(0, 1.2, 0.2))\n",
+ "plt.yticks(np.arange(-1.5, 1.0, 0.5))\n",
"plt.show()"
]
}
diff --git a/python/examples/parallel-wvgs-force.py b/python/examples/parallel-wvgs-force.py
index 68bfce7af..d45500365 100644
--- a/python/examples/parallel-wvgs-force.py
+++ b/python/examples/parallel-wvgs-force.py
@@ -2,7 +2,7 @@
import numpy as np
import matplotlib.pyplot as plt
-resolution = 40 # pixels/μm
+resolution = 40 # pixels/μm
Si = mp.Medium(index=3.45)
@@ -11,87 +11,106 @@
sx = 5
sy = 3
-cell = mp.Vector3(sx+2*dpml,sy+2*dpml,0)
+cell = mp.Vector3(sx + 2 * dpml, sy + 2 * dpml, 0)
-a = 1.0 # waveguide width/height
+a = 1.0 # waveguide width/height
k_point = mp.Vector3(z=0.5)
-def parallel_waveguide(s,xodd):
- geometry = [mp.Block(center=mp.Vector3(-0.5*(s+a)),
- size=mp.Vector3(a,a,mp.inf),
- material=Si),
- mp.Block(center=mp.Vector3(0.5*(s+a)),
- size=mp.Vector3(a,a,mp.inf),
- material=Si)]
- symmetries = [mp.Mirror(mp.X, phase=-1 if xodd else 1),
- mp.Mirror(mp.Y, phase=-1)]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell,
- geometry=geometry,
- boundary_layers=pml_layers,
- symmetries=symmetries,
- k_point=k_point)
+def parallel_waveguide(s, xodd):
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(-0.5 * (s + a)),
+ size=mp.Vector3(a, a, mp.inf),
+ material=Si,
+ ),
+ mp.Block(
+ center=mp.Vector3(0.5 * (s + a)), size=mp.Vector3(a, a, mp.inf), material=Si
+ ),
+ ]
+
+ symmetries = [mp.Mirror(mp.X, phase=-1 if xodd else 1), mp.Mirror(mp.Y, phase=-1)]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell,
+ geometry=geometry,
+ boundary_layers=pml_layers,
+ symmetries=symmetries,
+ k_point=k_point,
+ )
sim.init_sim()
- EigenmodeData = sim.get_eigenmode(0.22,
- mp.Z,
- mp.Volume(center=mp.Vector3(), size=mp.Vector3(sx,sy)),
- 2 if xodd else 1,
- k_point,
- match_frequency=False,
- parity=mp.ODD_Y)
+ EigenmodeData = sim.get_eigenmode(
+ 0.22,
+ mp.Z,
+ mp.Volume(center=mp.Vector3(), size=mp.Vector3(sx, sy)),
+ 2 if xodd else 1,
+ k_point,
+ match_frequency=False,
+ parity=mp.ODD_Y,
+ )
fcen = EigenmodeData.freq
print(f'freq:, {"xodd" if xodd else "xeven"}, {s}, {fcen}')
sim.reset_meep()
- eig_sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen, fwidth=0.1*fcen),
- size=mp.Vector3(sx,sy),
- center=mp.Vector3(),
- eig_band=2 if xodd else 1,
- eig_kpoint=k_point,
- eig_match_freq=False,
- eig_parity=mp.ODD_Y)]
+ eig_sources = [
+ mp.EigenModeSource(
+ src=mp.GaussianSource(fcen, fwidth=0.1 * fcen),
+ size=mp.Vector3(sx, sy),
+ center=mp.Vector3(),
+ eig_band=2 if xodd else 1,
+ eig_kpoint=k_point,
+ eig_match_freq=False,
+ eig_parity=mp.ODD_Y,
+ )
+ ]
sim.change_sources(eig_sources)
- flux_reg = mp.FluxRegion(direction=mp.Z, center=mp.Vector3(), size=mp.Vector3(sx,sy))
+ flux_reg = mp.FluxRegion(
+ direction=mp.Z, center=mp.Vector3(), size=mp.Vector3(sx, sy)
+ )
wvg_flux = sim.add_flux(fcen, 0, 1, flux_reg)
- force_reg1 = mp.ForceRegion(mp.Vector3(0.49*s), direction=mp.X, weight=1, size=mp.Vector3(y=sy))
- force_reg2 = mp.ForceRegion(mp.Vector3(0.5*s+1.01*a), direction=mp.X, weight=-1, size=mp.Vector3(y=sy))
+ force_reg1 = mp.ForceRegion(
+ mp.Vector3(0.49 * s), direction=mp.X, weight=1, size=mp.Vector3(y=sy)
+ )
+ force_reg2 = mp.ForceRegion(
+ mp.Vector3(0.5 * s + 1.01 * a), direction=mp.X, weight=-1, size=mp.Vector3(y=sy)
+ )
wvg_force = sim.add_force(fcen, 0, 1, force_reg1, force_reg2)
sim.run(until_after_sources=1500)
flux = mp.get_fluxes(wvg_flux)[0]
force = mp.get_forces(wvg_force)[0]
- print(f'data:, {"xodd" if xodd else "xeven"}, {s}, {flux}, {force}, {-force / flux}')
-
+ print(
+ f'data:, {"xodd" if xodd else "xeven"}, {s}, {flux}, {force}, {-force / flux}'
+ )
sim.reset_meep()
return flux, force
-s = np.arange(0.05,1.05,0.05)
+s = np.arange(0.05, 1.05, 0.05)
fluxes_odd = np.zeros(s.size)
forces_odd = np.zeros(s.size)
fluxes_even = np.zeros(s.size)
forces_even = np.zeros(s.size)
for k in range(len(s)):
- fluxes_odd[k], forces_odd[k] = parallel_waveguide(s[k],True)
- fluxes_even[k], forces_even[k] = parallel_waveguide(s[k],False)
+ fluxes_odd[k], forces_odd[k] = parallel_waveguide(s[k], True)
+ fluxes_even[k], forces_even[k] = parallel_waveguide(s[k], False)
plt.figure(dpi=150)
-plt.plot(s,-forces_odd/fluxes_odd,'rs',label='anti-symmetric')
-plt.plot(s,-forces_even/fluxes_even,'bo',label='symmetric')
+plt.plot(s, -forces_odd / fluxes_odd, "rs", label="anti-symmetric")
+plt.plot(s, -forces_even / fluxes_even, "bo", label="symmetric")
plt.grid(True)
-plt.xlabel('waveguide separation s/a')
-plt.ylabel('optical force (F/L)(ac/P)')
-plt.legend(loc='upper right')
+plt.xlabel("waveguide separation s/a")
+plt.ylabel("optical force (F/L)(ac/P)")
+plt.legend(loc="upper right")
plt.show()
diff --git a/python/examples/parallel-wvgs-mpb.py b/python/examples/parallel-wvgs-mpb.py
index 1436b908c..dbd421137 100644
--- a/python/examples/parallel-wvgs-mpb.py
+++ b/python/examples/parallel-wvgs-mpb.py
@@ -10,26 +10,35 @@
Si = mp.Medium(index=3.45)
syz = 10
-geometry_lattice = mp.Lattice(size=mp.Vector3(0,syz,syz))
+geometry_lattice = mp.Lattice(size=mp.Vector3(0, syz, syz))
k_points = [mp.Vector3(0.5)]
a = 1.0 # waveguide width
-def parallel_waveguide(s,yodd):
- geometry = [mp.Block(center=mp.Vector3(0,-0.5*(s+a),0),
- size=mp.Vector3(mp.inf,a,a),
- material=Si),
- mp.Block(center=mp.Vector3(0,0.5*(s+a),0),
- size=mp.Vector3(mp.inf,a,a),
- material=Si)]
-
- ms = mpb.ModeSolver(resolution=resolution,
- k_points=k_points,
- geometry_lattice=geometry_lattice,
- geometry=geometry,
- num_bands=1,
- tolerance=1e-9)
+
+def parallel_waveguide(s, yodd):
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(0, -0.5 * (s + a), 0),
+ size=mp.Vector3(mp.inf, a, a),
+ material=Si,
+ ),
+ mp.Block(
+ center=mp.Vector3(0, 0.5 * (s + a), 0),
+ size=mp.Vector3(mp.inf, a, a),
+ material=Si,
+ ),
+ ]
+
+ ms = mpb.ModeSolver(
+ resolution=resolution,
+ k_points=k_points,
+ geometry_lattice=geometry_lattice,
+ geometry=geometry,
+ num_bands=1,
+ tolerance=1e-9,
+ )
if yodd:
ms.run_yodd_zodd()
@@ -37,11 +46,12 @@ def parallel_waveguide(s,yodd):
ms.run_yeven_zodd()
f = ms.get_freqs()[0]
- vg = ms.compute_group_velocity_component(mp.Vector3(1,0,0))[0]
+ vg = ms.compute_group_velocity_component(mp.Vector3(1, 0, 0))[0]
+
+ return f, vg
- return f,vg
-ss = np.arange(0.025,1.075,0.05)
+ss = np.arange(0.025, 1.075, 0.05)
f_odd = np.zeros(len(ss))
vg_odd = np.zeros(len(ss))
@@ -49,26 +59,28 @@ def parallel_waveguide(s,yodd):
vg_even = np.zeros(len(ss))
for j in range(len(ss)):
- f_odd[j], vg_odd[j] = parallel_waveguide(ss[j],True)
- f_even[j], vg_even[j] = parallel_waveguide(ss[j],False)
+ f_odd[j], vg_odd[j] = parallel_waveguide(ss[j], True)
+ f_even[j], vg_even[j] = parallel_waveguide(ss[j], False)
+
+ds = ss[1] - ss[0]
+
-ds = ss[1]-ss[0]
+def compute_force(f, vg):
+ f_avg = 0.5 * (f[:-1] + f[1:])
+ df = f[1:] - f[:-1]
+ vg_avg = 0.5 * (vg[:-1] + vg[1:])
+ return -1 / f_avg * df / ds * 1 / vg_avg
-def compute_force(f,vg):
- f_avg = 0.5*(f[:-1]+f[1:])
- df = f[1:]-f[:-1]
- vg_avg = 0.5*(vg[:-1]+vg[1:])
- return -1/f_avg * df/ds * 1/vg_avg
-force_odd = compute_force(f_odd,vg_odd)
-force_even = compute_force(f_even,vg_even)
+force_odd = compute_force(f_odd, vg_odd)
+force_even = compute_force(f_even, vg_even)
plt.figure(dpi=200)
-plt.plot(ss[:-1],force_odd,'b-',label='anti-symmetric')
-plt.plot(ss[:-1],force_even,'r-',label='symmetric')
+plt.plot(ss[:-1], force_odd, "b-", label="anti-symmetric")
+plt.plot(ss[:-1], force_even, "r-", label="symmetric")
plt.xlabel("waveguide separation s/a")
plt.ylabel("optical force (F/L)(ac/P)")
-plt.legend(loc='upper right')
-plt.xticks(np.arange(0,1.2,0.2))
-plt.yticks(np.arange(-1.5,1.0,0.5))
+plt.legend(loc="upper right")
+plt.xticks(np.arange(0, 1.2, 0.2))
+plt.yticks(np.arange(-1.5, 1.0, 0.5))
plt.show()
diff --git a/python/examples/perturbation_theory.ipynb b/python/examples/perturbation_theory.ipynb
index e4cfa98b4..c78cb2cb9 100644
--- a/python/examples/perturbation_theory.ipynb
+++ b/python/examples/perturbation_theory.ipynb
@@ -169,53 +169,62 @@
"import meep as mp\n",
"import numpy as np\n",
"\n",
- "resolution = 100 # pixels/um\n",
+ "resolution = 100 # pixels/um\n",
"\n",
- "perpendicular = False # perpendicular (Hz) or parallel (Ez) source?\n",
+ "perpendicular = False # perpendicular (Hz) or parallel (Ez) source?\n",
"\n",
"if perpendicular:\n",
" src_cmpt = mp.Hz\n",
- " fcen = 0.21 # pulse center frequency\n",
+ " fcen = 0.21 # pulse center frequency\n",
"else:\n",
" src_cmpt = mp.Ez\n",
- " fcen = 0.17 # pulse center frequency\n",
+ " fcen = 0.17 # pulse center frequency\n",
"\n",
- "n = 3.4 # index of waveguide\n",
- "w = 1 # ring width\n",
- "r = 1 # inner radius of ring\n",
- "pad = 4 # padding between waveguide and edge of PML\n",
- "dpml = 2 # thickness of PML\n",
- "m = 5 # angular dependence\n",
+ "n = 3.4 # index of waveguide\n",
+ "w = 1 # ring width\n",
+ "r = 1 # inner radius of ring\n",
+ "pad = 4 # padding between waveguide and edge of PML\n",
+ "dpml = 2 # thickness of PML\n",
+ "m = 5 # angular dependence\n",
"\n",
"pml_layers = [mp.PML(dpml)]\n",
"\n",
- "sr = r + w + pad + dpml # radial size (cell is from 0 to sr)\n",
- "dimensions = mp.CYLINDRICAL # coordinate system is (r,phi,z) instead of (x,y,z)\n",
+ "sr = r + w + pad + dpml # radial size (cell is from 0 to sr)\n",
+ "dimensions = mp.CYLINDRICAL # coordinate system is (r,phi,z) instead of (x,y,z)\n",
"cell = mp.Vector3(sr)\n",
"\n",
- "geometry = [mp.Block(center=mp.Vector3(r + (w / 2)),\n",
- " size=mp.Vector3(w, mp.inf, mp.inf),\n",
- " material=mp.Medium(index=n))]\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(r + (w / 2)),\n",
+ " size=mp.Vector3(w, mp.inf, mp.inf),\n",
+ " material=mp.Medium(index=n),\n",
+ " )\n",
+ "]\n",
"\n",
"# find resonant frequency of unperturbed geometry using broadband source\n",
"\n",
- "df = 0.2*fcen # pulse width (in frequency)\n",
- "\n",
- "sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),\n",
- " component=src_cmpt,\n",
- " center=mp.Vector3(r+0.1))]\n",
- "\n",
- "sim = mp.Simulation(cell_size=cell,\n",
- " geometry=geometry,\n",
- " boundary_layers=pml_layers,\n",
- " resolution=resolution,\n",
- " sources=sources,\n",
- " dimensions=dimensions,\n",
- " m=m)\n",
- "\n",
- "h = mp.Harminv(src_cmpt, mp.Vector3(r+0.1), fcen, df)\n",
- "sim.run(mp.after_sources(h),\n",
- " until_after_sources=100)\n",
+ "df = 0.2 * fcen # pulse width (in frequency)\n",
+ "\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=src_cmpt,\n",
+ " center=mp.Vector3(r + 0.1),\n",
+ " )\n",
+ "]\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " geometry=geometry,\n",
+ " boundary_layers=pml_layers,\n",
+ " resolution=resolution,\n",
+ " sources=sources,\n",
+ " dimensions=dimensions,\n",
+ " m=m,\n",
+ ")\n",
+ "\n",
+ "h = mp.Harminv(src_cmpt, mp.Vector3(r + 0.1), fcen, df)\n",
+ "sim.run(mp.after_sources(h), until_after_sources=100)\n",
"\n",
"frq_unperturbed = h.modes[0].freq\n",
"\n",
@@ -224,35 +233,69 @@
"# unperturbed geometry with narrowband source centered at resonant frequency\n",
"\n",
"fcen = frq_unperturbed\n",
- "df = 0.05*fcen\n",
- "\n",
- "sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),\n",
- " component=src_cmpt,\n",
- " center=mp.Vector3(r+0.1))]\n",
- "\n",
- "sim = mp.Simulation(cell_size=cell,\n",
- " geometry=geometry,\n",
- " boundary_layers=pml_layers,\n",
- " resolution=resolution,\n",
- " sources=sources,\n",
- " dimensions=dimensions,\n",
- " m=m)\n",
+ "df = 0.05 * fcen\n",
+ "\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=src_cmpt,\n",
+ " center=mp.Vector3(r + 0.1),\n",
+ " )\n",
+ "]\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " geometry=geometry,\n",
+ " boundary_layers=pml_layers,\n",
+ " resolution=resolution,\n",
+ " sources=sources,\n",
+ " dimensions=dimensions,\n",
+ " m=m,\n",
+ ")\n",
"\n",
"sim.run(until_after_sources=100)\n",
"\n",
"deps = 1 - n**2\n",
- "deps_inv = 1 - 1/n**2\n",
+ "deps_inv = 1 - 1 / n**2\n",
"\n",
"if perpendicular:\n",
- " para_integral = deps*2*np.pi*(r*abs(sim.get_field_point(mp.Ep, mp.Vector3(r)))**2 - (r+w)*abs(sim.get_field_point(mp.Ep, mp.Vector3(r+w)))**2)\n",
- " perp_integral = deps_inv*2*np.pi*(-r*abs(sim.get_field_point(mp.Dr, mp.Vector3(r)))**2 + (r+w)*abs(sim.get_field_point(mp.Dr, mp.Vector3(r+w)))**2)\n",
+ " para_integral = (\n",
+ " deps\n",
+ " * 2\n",
+ " * np.pi\n",
+ " * (\n",
+ " r * abs(sim.get_field_point(mp.Ep, mp.Vector3(r))) ** 2\n",
+ " - (r + w) * abs(sim.get_field_point(mp.Ep, mp.Vector3(r + w))) ** 2\n",
+ " )\n",
+ " )\n",
+ " perp_integral = (\n",
+ " deps_inv\n",
+ " * 2\n",
+ " * np.pi\n",
+ " * (\n",
+ " -r * abs(sim.get_field_point(mp.Dr, mp.Vector3(r))) ** 2\n",
+ " + (r + w) * abs(sim.get_field_point(mp.Dr, mp.Vector3(r + w))) ** 2\n",
+ " )\n",
+ " )\n",
" numerator_integral = para_integral + perp_integral\n",
"else:\n",
- " numerator_integral = deps*2*np.pi*(r*abs(sim.get_field_point(mp.Ez, mp.Vector3(r)))**2 - (r+w)*abs(sim.get_field_point(mp.Ez, mp.Vector3(r+w)))**2)\n",
- "\n",
- "denominator_integral = sim.electric_energy_in_box(center=mp.Vector3(0.5*sr), size=mp.Vector3(sr))\n",
- "\n",
- "perturb_theory_dw_dR = -frq_unperturbed * numerator_integral / (4 * denominator_integral)\n",
+ " numerator_integral = (\n",
+ " deps\n",
+ " * 2\n",
+ " * np.pi\n",
+ " * (\n",
+ " r * abs(sim.get_field_point(mp.Ez, mp.Vector3(r))) ** 2\n",
+ " - (r + w) * abs(sim.get_field_point(mp.Ez, mp.Vector3(r + w))) ** 2\n",
+ " )\n",
+ " )\n",
+ "\n",
+ "denominator_integral = sim.electric_energy_in_box(\n",
+ " center=mp.Vector3(0.5 * sr), size=mp.Vector3(sr)\n",
+ ")\n",
+ "\n",
+ "perturb_theory_dw_dR = (\n",
+ " -frq_unperturbed * numerator_integral / (4 * denominator_integral)\n",
+ ")\n",
"\n",
"sim.reset_meep()\n",
"\n",
@@ -260,31 +303,44 @@
"\n",
"dr = 0.01\n",
"\n",
- "sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),\n",
- " component=src_cmpt,\n",
- " center=mp.Vector3(r + dr + 0.1))]\n",
- "\n",
- "geometry = [mp.Block(center=mp.Vector3(r + dr + (w / 2)),\n",
- " size=mp.Vector3(w, mp.inf, mp.inf),\n",
- " material=mp.Medium(index=n))]\n",
- "\n",
- "sim = mp.Simulation(cell_size=cell,\n",
- " geometry=geometry,\n",
- " boundary_layers=pml_layers,\n",
- " resolution=resolution,\n",
- " sources=sources,\n",
- " dimensions=dimensions,\n",
- " m=m)\n",
- "\n",
- "h = mp.Harminv(src_cmpt, mp.Vector3(r+dr+0.1), fcen, df)\n",
- "sim.run(mp.after_sources(h),\n",
- " until_after_sources=100)\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=src_cmpt,\n",
+ " center=mp.Vector3(r + dr + 0.1),\n",
+ " )\n",
+ "]\n",
+ "\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(r + dr + (w / 2)),\n",
+ " size=mp.Vector3(w, mp.inf, mp.inf),\n",
+ " material=mp.Medium(index=n),\n",
+ " )\n",
+ "]\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " geometry=geometry,\n",
+ " boundary_layers=pml_layers,\n",
+ " resolution=resolution,\n",
+ " sources=sources,\n",
+ " dimensions=dimensions,\n",
+ " m=m,\n",
+ ")\n",
+ "\n",
+ "h = mp.Harminv(src_cmpt, mp.Vector3(r + dr + 0.1), fcen, df)\n",
+ "sim.run(mp.after_sources(h), until_after_sources=100)\n",
"\n",
"frq_perturbed = h.modes[0].freq\n",
"\n",
"finite_diff_dw_dR = (frq_perturbed - frq_unperturbed) / dr\n",
"\n",
- "print(\"dwdR:, {} (pert. theory), {} (finite diff.)\".format(perturb_theory_dw_dR,finite_diff_dw_dR))"
+ "print(\n",
+ " \"dwdR:, {} (pert. theory), {} (finite diff.)\".format(\n",
+ " perturb_theory_dw_dR, finite_diff_dw_dR\n",
+ " )\n",
+ ")"
]
},
{
diff --git a/python/examples/perturbation_theory.py b/python/examples/perturbation_theory.py
index a82fe585a..df9f35d42 100644
--- a/python/examples/perturbation_theory.py
+++ b/python/examples/perturbation_theory.py
@@ -6,47 +6,56 @@
def main(args):
if args.perpendicular:
src_cmpt = mp.Hz
- fcen = 0.21 # pulse center frequency
+ fcen = 0.21 # pulse center frequency
else:
src_cmpt = mp.Ez
- fcen = 0.17 # pulse center frequency
+ fcen = 0.17 # pulse center frequency
- n = 3.4 # index of waveguide
- w = 1 # ring width
- r = 1 # inner radius of ring
- pad = 4 # padding between waveguide and edge of PML
- dpml = 2 # thickness of PML
- m = 5 # angular dependence
+ n = 3.4 # index of waveguide
+ w = 1 # ring width
+ r = 1 # inner radius of ring
+ pad = 4 # padding between waveguide and edge of PML
+ dpml = 2 # thickness of PML
+ m = 5 # angular dependence
pml_layers = [mp.PML(dpml)]
- sr = r + w + pad + dpml # radial size (cell is from 0 to sr)
- dimensions = mp.CYLINDRICAL # coordinate system is (r,phi,z) instead of (x,y,z)
+ sr = r + w + pad + dpml # radial size (cell is from 0 to sr)
+ dimensions = mp.CYLINDRICAL # coordinate system is (r,phi,z) instead of (x,y,z)
cell = mp.Vector3(sr)
- geometry = [mp.Block(center=mp.Vector3(r + (w / 2)),
- size=mp.Vector3(w, mp.inf, mp.inf),
- material=mp.Medium(index=n))]
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(r + (w / 2)),
+ size=mp.Vector3(w, mp.inf, mp.inf),
+ material=mp.Medium(index=n),
+ )
+ ]
# find resonant frequency of unperturbed geometry using broadband source
- df = 0.2*fcen # pulse width (in frequency)
-
- sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
- component=src_cmpt,
- center=mp.Vector3(r+0.1))]
-
- sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- boundary_layers=pml_layers,
- resolution=args.res,
- sources=sources,
- dimensions=dimensions,
- m=m)
-
- h = mp.Harminv(src_cmpt, mp.Vector3(r+0.1), fcen, df)
- sim.run(mp.after_sources(h),
- until_after_sources=100)
+ df = 0.2 * fcen # pulse width (in frequency)
+
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=src_cmpt,
+ center=mp.Vector3(r + 0.1),
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell,
+ geometry=geometry,
+ boundary_layers=pml_layers,
+ resolution=args.res,
+ sources=sources,
+ dimensions=dimensions,
+ m=m,
+ )
+
+ h = mp.Harminv(src_cmpt, mp.Vector3(r + 0.1), fcen, df)
+ sim.run(mp.after_sources(h), until_after_sources=100)
frq_unperturbed = h.modes[0].freq
@@ -55,34 +64,68 @@ def main(args):
# unperturbed geometry with narrowband source centered at resonant frequency
fcen = frq_unperturbed
- df = 0.05*fcen
-
- sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
- component=src_cmpt,
- center=mp.Vector3(r+0.1))]
-
- sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- boundary_layers=pml_layers,
- resolution=args.res,
- sources=sources,
- dimensions=dimensions,
- m=m)
+ df = 0.05 * fcen
+
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=src_cmpt,
+ center=mp.Vector3(r + 0.1),
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell,
+ geometry=geometry,
+ boundary_layers=pml_layers,
+ resolution=args.res,
+ sources=sources,
+ dimensions=dimensions,
+ m=m,
+ )
sim.run(until_after_sources=100)
deps = 1 - n**2
- deps_inv = 1 - 1/n**2
+ deps_inv = 1 - 1 / n**2
if args.perpendicular:
- para_integral = deps*2*np.pi*(r*abs(sim.get_field_point(mp.Ep, mp.Vector3(r)))**2 - (r+w)*abs(sim.get_field_point(mp.Ep, mp.Vector3(r+w)))**2)
- perp_integral = deps_inv*2*np.pi*(-r*abs(sim.get_field_point(mp.Dr, mp.Vector3(r)))**2 + (r+w)*abs(sim.get_field_point(mp.Dr, mp.Vector3(r+w)))**2)
+ para_integral = (
+ deps
+ * 2
+ * np.pi
+ * (
+ r * abs(sim.get_field_point(mp.Ep, mp.Vector3(r))) ** 2
+ - (r + w) * abs(sim.get_field_point(mp.Ep, mp.Vector3(r + w))) ** 2
+ )
+ )
+ perp_integral = (
+ deps_inv
+ * 2
+ * np.pi
+ * (
+ -r * abs(sim.get_field_point(mp.Dr, mp.Vector3(r))) ** 2
+ + (r + w) * abs(sim.get_field_point(mp.Dr, mp.Vector3(r + w))) ** 2
+ )
+ )
numerator_integral = para_integral + perp_integral
else:
- numerator_integral = deps*2*np.pi*(r*abs(sim.get_field_point(mp.Ez, mp.Vector3(r)))**2 - (r+w)*abs(sim.get_field_point(mp.Ez, mp.Vector3(r+w)))**2)
-
- denominator_integral = sim.electric_energy_in_box(center=mp.Vector3(0.5*sr), size=mp.Vector3(sr))
- perturb_theory_dw_dR = -frq_unperturbed * numerator_integral / (4 * denominator_integral)
+ numerator_integral = (
+ deps
+ * 2
+ * np.pi
+ * (
+ r * abs(sim.get_field_point(mp.Ez, mp.Vector3(r))) ** 2
+ - (r + w) * abs(sim.get_field_point(mp.Ez, mp.Vector3(r + w))) ** 2
+ )
+ )
+
+ denominator_integral = sim.electric_energy_in_box(
+ center=mp.Vector3(0.5 * sr), size=mp.Vector3(sr)
+ )
+ perturb_theory_dw_dR = (
+ -frq_unperturbed * numerator_integral / (4 * denominator_integral)
+ )
sim.reset_meep()
@@ -90,35 +133,53 @@ def main(args):
dr = 0.01
- sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
- component=src_cmpt,
- center=mp.Vector3(r + dr + 0.1))]
-
- geometry = [mp.Block(center=mp.Vector3(r + dr + (w / 2)),
- size=mp.Vector3(w, mp.inf, mp.inf),
- material=mp.Medium(index=n))]
-
- sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- boundary_layers=pml_layers,
- resolution=args.res,
- sources=sources,
- dimensions=dimensions,
- m=m)
-
- h = mp.Harminv(src_cmpt, mp.Vector3(r+dr+0.1), fcen, df)
- sim.run(mp.after_sources(h),
- until_after_sources=100)
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=src_cmpt,
+ center=mp.Vector3(r + dr + 0.1),
+ )
+ ]
+
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(r + dr + (w / 2)),
+ size=mp.Vector3(w, mp.inf, mp.inf),
+ material=mp.Medium(index=n),
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell,
+ geometry=geometry,
+ boundary_layers=pml_layers,
+ resolution=args.res,
+ sources=sources,
+ dimensions=dimensions,
+ m=m,
+ )
+
+ h = mp.Harminv(src_cmpt, mp.Vector3(r + dr + 0.1), fcen, df)
+ sim.run(mp.after_sources(h), until_after_sources=100)
frq_perturbed = h.modes[0].freq
finite_diff_dw_dR = (frq_perturbed - frq_unperturbed) / dr
- print(f"dwdR:, {perturb_theory_dw_dR} (pert. theory), {finite_diff_dw_dR} (finite diff.)")
+ print(
+ f"dwdR:, {perturb_theory_dw_dR} (pert. theory), {finite_diff_dw_dR} (finite diff.)"
+ )
+
-if __name__ == '__main__':
+if __name__ == "__main__":
parser = argparse.ArgumentParser()
- parser.add_argument('-perpendicular', action='store_true', help='use perpendicular field source (default: parallel field source)')
- parser.add_argument('-res', type=int, default=100, help='resolution (default: 100 pixels/um)')
+ parser.add_argument(
+ "-perpendicular",
+ action="store_true",
+ help="use perpendicular field source (default: parallel field source)",
+ )
+ parser.add_argument(
+ "-res", type=int, default=100, help="resolution (default: 100 pixels/um)"
+ )
args = parser.parse_args()
main(args)
diff --git a/python/examples/perturbation_theory_2d.py b/python/examples/perturbation_theory_2d.py
index 4065a2201..920efe9fb 100644
--- a/python/examples/perturbation_theory_2d.py
+++ b/python/examples/perturbation_theory_2d.py
@@ -6,56 +6,66 @@
def main(args):
if args.perpendicular:
src_cmpt = mp.Hz
- fcen = 0.21 # pulse center frequency
+ fcen = 0.21 # pulse center frequency
else:
src_cmpt = mp.Ez
- fcen = 0.17 # pulse center frequency
+ fcen = 0.17 # pulse center frequency
- n = 3.4 # index of waveguide
- w = 1 # ring width
- r = 1 # inner radius of ring
- pad = 4 # padding between waveguide and edge of PML
- dpml = 2 # thickness of PML
+ n = 3.4 # index of waveguide
+ w = 1 # ring width
+ r = 1 # inner radius of ring
+ pad = 4 # padding between waveguide and edge of PML
+ dpml = 2 # thickness of PML
pml_layers = [mp.PML(dpml)]
- sxy = 2*(r+w+pad+dpml)
- cell_size = mp.Vector3(sxy,sxy)
+ sxy = 2 * (r + w + pad + dpml)
+ cell_size = mp.Vector3(sxy, sxy)
- symmetries = [mp.Mirror(mp.X,phase=+1 if args.perpendicular else -1),
- mp.Mirror(mp.Y,phase=-1 if args.perpendicular else +1)]
+ symmetries = [
+ mp.Mirror(mp.X, phase=+1 if args.perpendicular else -1),
+ mp.Mirror(mp.Y, phase=-1 if args.perpendicular else +1),
+ ]
- geometry = [mp.Cylinder(material=mp.Medium(index=n),
- radius=r+w,
- height=mp.inf,
- center=mp.Vector3()),
- mp.Cylinder(material=mp.vacuum,
- radius=r,
- height=mp.inf,
- center=mp.Vector3())]
+ geometry = [
+ mp.Cylinder(
+ material=mp.Medium(index=n),
+ radius=r + w,
+ height=mp.inf,
+ center=mp.Vector3(),
+ ),
+ mp.Cylinder(material=mp.vacuum, radius=r, height=mp.inf, center=mp.Vector3()),
+ ]
# find resonant frequency of unperturbed geometry using broadband source
- df = 0.2*fcen # pulse width (in frequency)
-
- sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df),
- component=src_cmpt,
- center=mp.Vector3(r+0.1)),
- mp.Source(mp.GaussianSource(fcen, fwidth=df),
- component=src_cmpt,
- center=mp.Vector3(-(r+0.1)),
- amplitude=-1)]
-
- sim = mp.Simulation(cell_size=cell_size,
- geometry=geometry,
- boundary_layers=pml_layers,
- resolution=args.res,
- sources=sources,
- symmetries=symmetries)
-
- h = mp.Harminv(src_cmpt, mp.Vector3(r+0.1), fcen, df)
- sim.run(mp.after_sources(h),
- until_after_sources=100)
+ df = 0.2 * fcen # pulse width (in frequency)
+
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=src_cmpt,
+ center=mp.Vector3(r + 0.1),
+ ),
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=src_cmpt,
+ center=mp.Vector3(-(r + 0.1)),
+ amplitude=-1,
+ ),
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ geometry=geometry,
+ boundary_layers=pml_layers,
+ resolution=args.res,
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ h = mp.Harminv(src_cmpt, mp.Vector3(r + 0.1), fcen, df)
+ sim.run(mp.after_sources(h), until_after_sources=100)
frq_unperturbed = h.modes[0].freq
@@ -64,37 +74,73 @@ def main(args):
# unperturbed geometry with narrowband source centered at resonant frequency
fcen = frq_unperturbed
- df = 0.05*fcen
-
- sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df),
- component=src_cmpt,
- center=mp.Vector3(r+0.1)),
- mp.Source(mp.GaussianSource(fcen, fwidth=df),
- component=src_cmpt,
- center=mp.Vector3(-(r+0.1)),
- amplitude=-1)]
-
- sim = mp.Simulation(cell_size=cell_size,
- geometry=geometry,
- boundary_layers=pml_layers,
- resolution=args.res,
- sources=sources,
- symmetries=symmetries)
+ df = 0.05 * fcen
+
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=src_cmpt,
+ center=mp.Vector3(r + 0.1),
+ ),
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=src_cmpt,
+ center=mp.Vector3(-(r + 0.1)),
+ amplitude=-1,
+ ),
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ geometry=geometry,
+ boundary_layers=pml_layers,
+ resolution=args.res,
+ sources=sources,
+ symmetries=symmetries,
+ )
sim.run(until_after_sources=100)
deps = 1 - n**2
- deps_inv = 1 - 1/n**2
+ deps_inv = 1 - 1 / n**2
if args.perpendicular:
- para_integral = deps*2*np.pi*(r*abs(sim.get_field_point(mp.Ey, mp.Vector3(r)))**2 - (r+w)*abs(sim.get_field_point(mp.Ey, mp.Vector3(r+w)))**2)
- perp_integral = deps_inv*2*np.pi*(-r*abs(sim.get_field_point(mp.Dy, mp.Vector3(y=r)))**2 + (r+w)*abs(sim.get_field_point(mp.Dy, mp.Vector3(y=r+w)))**2)
+ para_integral = (
+ deps
+ * 2
+ * np.pi
+ * (
+ r * abs(sim.get_field_point(mp.Ey, mp.Vector3(r))) ** 2
+ - (r + w) * abs(sim.get_field_point(mp.Ey, mp.Vector3(r + w))) ** 2
+ )
+ )
+ perp_integral = (
+ deps_inv
+ * 2
+ * np.pi
+ * (
+ -r * abs(sim.get_field_point(mp.Dy, mp.Vector3(y=r))) ** 2
+ + (r + w) * abs(sim.get_field_point(mp.Dy, mp.Vector3(y=r + w))) ** 2
+ )
+ )
numerator_integral = para_integral + perp_integral
else:
- numerator_integral = deps*2*np.pi*(r*abs(sim.get_field_point(mp.Ez, mp.Vector3(r)))**2 - (r+w)*abs(sim.get_field_point(mp.Ez, mp.Vector3(r+w)))**2)
-
- denominator_integral = sim.electric_energy_in_box(center=mp.Vector3(), size=mp.Vector3(sxy-2*dpml,sxy-2*dpml))
- perturb_theory_dw_dR = -frq_unperturbed * numerator_integral / (8 * denominator_integral)
+ numerator_integral = (
+ deps
+ * 2
+ * np.pi
+ * (
+ r * abs(sim.get_field_point(mp.Ez, mp.Vector3(r))) ** 2
+ - (r + w) * abs(sim.get_field_point(mp.Ez, mp.Vector3(r + w))) ** 2
+ )
+ )
+
+ denominator_integral = sim.electric_energy_in_box(
+ center=mp.Vector3(), size=mp.Vector3(sxy - 2 * dpml, sxy - 2 * dpml)
+ )
+ perturb_theory_dw_dR = (
+ -frq_unperturbed * numerator_integral / (8 * denominator_integral)
+ )
# perturbed geometry with narrowband source
@@ -102,43 +148,62 @@ def main(args):
sim.reset_meep()
- sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df),
- component=src_cmpt,
- center=mp.Vector3(r+dr+0.1)),
- mp.Source(mp.GaussianSource(fcen, fwidth=df),
- component=src_cmpt,
- center=mp.Vector3(-(r+dr+0.1)),
- amplitude=-1)]
-
- geometry = [mp.Cylinder(material=mp.Medium(index=n),
- radius=r+dr+w,
- height=mp.inf,
- center=mp.Vector3()),
- mp.Cylinder(material=mp.vacuum,
- radius=r+dr,
- height=mp.inf,
- center=mp.Vector3())]
-
- sim = mp.Simulation(cell_size=cell_size,
- geometry=geometry,
- boundary_layers=pml_layers,
- resolution=args.res,
- sources=sources,
- symmetries=symmetries)
-
- h = mp.Harminv(src_cmpt, mp.Vector3(r+dr+0.1), fcen, df)
- sim.run(mp.after_sources(h),
- until_after_sources=100)
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=src_cmpt,
+ center=mp.Vector3(r + dr + 0.1),
+ ),
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=src_cmpt,
+ center=mp.Vector3(-(r + dr + 0.1)),
+ amplitude=-1,
+ ),
+ ]
+
+ geometry = [
+ mp.Cylinder(
+ material=mp.Medium(index=n),
+ radius=r + dr + w,
+ height=mp.inf,
+ center=mp.Vector3(),
+ ),
+ mp.Cylinder(
+ material=mp.vacuum, radius=r + dr, height=mp.inf, center=mp.Vector3()
+ ),
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ geometry=geometry,
+ boundary_layers=pml_layers,
+ resolution=args.res,
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ h = mp.Harminv(src_cmpt, mp.Vector3(r + dr + 0.1), fcen, df)
+ sim.run(mp.after_sources(h), until_after_sources=100)
frq_perturbed = h.modes[0].freq
finite_diff_dw_dR = (frq_perturbed - frq_unperturbed) / dr
- print(f"dwdR:, {perturb_theory_dw_dR} (pert. theory), {finite_diff_dw_dR} (finite diff.)")
+ print(
+ f"dwdR:, {perturb_theory_dw_dR} (pert. theory), {finite_diff_dw_dR} (finite diff.)"
+ )
+
-if __name__ == '__main__':
+if __name__ == "__main__":
parser = argparse.ArgumentParser()
- parser.add_argument('-perpendicular', action='store_true', help='use perpendicular field source (default: parallel field source)')
- parser.add_argument('-res', type=int, default=30, help='resolution (default: 30 pixels/um)')
+ parser.add_argument(
+ "-perpendicular",
+ action="store_true",
+ help="use perpendicular field source (default: parallel field source)",
+ )
+ parser.add_argument(
+ "-res", type=int, default=30, help="resolution (default: 30 pixels/um)"
+ )
args = parser.parse_args()
main(args)
diff --git a/python/examples/phase_in_material.py b/python/examples/phase_in_material.py
index 5f629579a..6ccdc0eb0 100644
--- a/python/examples/phase_in_material.py
+++ b/python/examples/phase_in_material.py
@@ -1,26 +1,25 @@
import meep as mp
-cell_size = mp.Vector3(6,6,0)
+cell_size = mp.Vector3(6, 6, 0)
-geometry1 = [mp.Cylinder(center=mp.Vector3(),radius=1.0,material=mp.Medium(index=3.5))]
+geometry1 = [
+ mp.Cylinder(center=mp.Vector3(), radius=1.0, material=mp.Medium(index=3.5))
+]
-sim1 = mp.Simulation(cell_size=cell_size,
- geometry=geometry1,
- resolution=20)
+sim1 = mp.Simulation(cell_size=cell_size, geometry=geometry1, resolution=20)
sim1.init_sim()
-geometry2 = [mp.Cylinder(center=mp.Vector3(1,1),radius=1.0,material=mp.Medium(index=3.5))]
+geometry2 = [
+ mp.Cylinder(center=mp.Vector3(1, 1), radius=1.0, material=mp.Medium(index=3.5))
+]
-sim2 = mp.Simulation(cell_size=cell_size,
- geometry=geometry2,
- resolution=20)
+sim2 = mp.Simulation(cell_size=cell_size, geometry=geometry2, resolution=20)
sim2.init_sim()
-sim1.fields.phase_in_material(sim2.structure,10.0)
-
-sim1.run(mp.at_beginning(mp.output_epsilon),
- mp.at_every(0.5,mp.output_epsilon),
- until=10)
+sim1.fields.phase_in_material(sim2.structure, 10.0)
+sim1.run(
+ mp.at_beginning(mp.output_epsilon), mp.at_every(0.5, mp.output_epsilon), until=10
+)
diff --git a/python/examples/planar_cavity_ldos.py b/python/examples/planar_cavity_ldos.py
index ac9fd5cc5..e6b2e516a 100644
--- a/python/examples/planar_cavity_ldos.py
+++ b/python/examples/planar_cavity_ldos.py
@@ -7,7 +7,8 @@
import meep as mp
import numpy as np
import matplotlib
-matplotlib.use('agg')
+
+matplotlib.use("agg")
import matplotlib.pyplot as plt
@@ -17,169 +18,196 @@
resolution = 70 # pixels/μm
-dpml = 0.5 # thickness of PML
-L = 6.0 # length of non-PML region
-n = 2.4 # refractive index of surrounding medium
-wvl = 1.0 # wavelength (in vacuum)
+dpml = 0.5 # thickness of PML
+L = 6.0 # length of non-PML region
+n = 2.4 # refractive index of surrounding medium
+wvl = 1.0 # wavelength (in vacuum)
-fcen = 1/wvl
+fcen = 1 / wvl
def bulk_ldos_cyl():
- sr = L+dpml
- sz = L+2*dpml
- cell_size = mp.Vector3(sr,0,sz)
+ sr = L + dpml
+ sz = L + 2 * dpml
+ cell_size = mp.Vector3(sr, 0, sz)
pml_layers = [mp.PML(dpml)]
- sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),
- component=mp.Er,
- center=mp.Vector3())]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- sources=sources,
- dimensions=mp.CYLINDRICAL,
- m=-1,
- default_material=mp.Medium(index=n))
-
- sim.run(mp.dft_ldos(fcen,0,1),
- until_after_sources=mp.stop_when_fields_decayed(20,
- mp.Er,
- mp.Vector3(),
- 1e-6))
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ component=mp.Er,
+ center=mp.Vector3(),
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ sources=sources,
+ dimensions=mp.CYLINDRICAL,
+ m=-1,
+ default_material=mp.Medium(index=n),
+ )
+
+ sim.run(
+ mp.dft_ldos(fcen, 0, 1),
+ until_after_sources=mp.stop_when_fields_decayed(20, mp.Er, mp.Vector3(), 1e-6),
+ )
return sim.ldos_data[0]
def cavity_ldos_cyl(sz):
- sr = L+dpml
- cell_size = mp.Vector3(sr,0,sz)
-
- pml_layers = [mp.PML(dpml,direction=mp.R)]
-
- sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),
- component=mp.Er,
- center=mp.Vector3())]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- sources=sources,
- dimensions=mp.CYLINDRICAL,
- m=-1,
- default_material=mp.Medium(index=n))
-
- sim.run(mp.dft_ldos(fcen,0,1),
- until_after_sources=mp.stop_when_fields_decayed(20,
- mp.Er,
- mp.Vector3(),
- 1e-6))
+ sr = L + dpml
+ cell_size = mp.Vector3(sr, 0, sz)
+
+ pml_layers = [mp.PML(dpml, direction=mp.R)]
+
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ component=mp.Er,
+ center=mp.Vector3(),
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ sources=sources,
+ dimensions=mp.CYLINDRICAL,
+ m=-1,
+ default_material=mp.Medium(index=n),
+ )
+
+ sim.run(
+ mp.dft_ldos(fcen, 0, 1),
+ until_after_sources=mp.stop_when_fields_decayed(20, mp.Er, mp.Vector3(), 1e-6),
+ )
return sim.ldos_data[0]
def bulk_ldos_3D():
- s = L+2*dpml
- cell_size = mp.Vector3(s,s,s)
+ s = L + 2 * dpml
+ cell_size = mp.Vector3(s, s, s)
pml_layers = [mp.PML(dpml)]
- sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),
- component=mp.Ex,
- center=mp.Vector3())]
-
- symmetries = [mp.Mirror(direction=mp.X,phase=-1),
- mp.Mirror(direction=mp.Y),
- mp.Mirror(direction=mp.Z)]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- sources=sources,
- symmetries=symmetries,
- default_material=mp.Medium(index=n))
-
- sim.run(mp.dft_ldos(fcen,0,1),
- until_after_sources=mp.stop_when_fields_decayed(20,
- mp.Ex,
- mp.Vector3(),
- 1e-6))
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ component=mp.Ex,
+ center=mp.Vector3(),
+ )
+ ]
+
+ symmetries = [
+ mp.Mirror(direction=mp.X, phase=-1),
+ mp.Mirror(direction=mp.Y),
+ mp.Mirror(direction=mp.Z),
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ sources=sources,
+ symmetries=symmetries,
+ default_material=mp.Medium(index=n),
+ )
+
+ sim.run(
+ mp.dft_ldos(fcen, 0, 1),
+ until_after_sources=mp.stop_when_fields_decayed(20, mp.Ex, mp.Vector3(), 1e-6),
+ )
return sim.ldos_data[0]
def cavity_ldos_3D(sz):
- sxy = L+2*dpml
- cell_size = mp.Vector3(sxy,sxy,sz)
-
- boundary_layers = [mp.PML(dpml,direction=mp.X),
- mp.PML(dpml,direction=mp.Y)]
-
- sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),
- component=mp.Ex,
- center=mp.Vector3())]
-
- symmetries = [mp.Mirror(direction=mp.X,phase=-1),
- mp.Mirror(direction=mp.Y),
- mp.Mirror(direction=mp.Z)]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=boundary_layers,
- sources=sources,
- symmetries=symmetries,
- default_material=mp.Medium(index=n))
-
- sim.run(mp.dft_ldos(fcen,0,1),
- until_after_sources=mp.stop_when_fields_decayed(20,
- mp.Ex,
- mp.Vector3(),
- 1e-6))
+ sxy = L + 2 * dpml
+ cell_size = mp.Vector3(sxy, sxy, sz)
+
+ boundary_layers = [mp.PML(dpml, direction=mp.X), mp.PML(dpml, direction=mp.Y)]
+
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ component=mp.Ex,
+ center=mp.Vector3(),
+ )
+ ]
+
+ symmetries = [
+ mp.Mirror(direction=mp.X, phase=-1),
+ mp.Mirror(direction=mp.Y),
+ mp.Mirror(direction=mp.Z),
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=boundary_layers,
+ sources=sources,
+ symmetries=symmetries,
+ default_material=mp.Medium(index=n),
+ )
+
+ sim.run(
+ mp.dft_ldos(fcen, 0, 1),
+ until_after_sources=mp.stop_when_fields_decayed(20, mp.Ex, mp.Vector3(), 1e-6),
+ )
return sim.ldos_data[0]
-if __name__ == '__main__':
+if __name__ == "__main__":
ldos_bulk_cyl = bulk_ldos_cyl()
ldos_bulk_3D = bulk_ldos_3D()
# units of wavelength in medium
- cavity_thickness = np.arange(0.50,2.55,0.05)
+ cavity_thickness = np.arange(0.50, 2.55, 0.05)
- gap = cavity_thickness*wvl/n
+ gap = cavity_thickness * wvl / n
ldos_cavity_cyl = np.zeros(len(cavity_thickness))
ldos_cavity_3D = np.zeros(len(cavity_thickness))
- for idx,g in enumerate(gap):
+ for idx, g in enumerate(gap):
ldos_cavity_cyl[idx] = cavity_ldos_cyl(g)
ldos_cavity_3D[idx] = cavity_ldos_3D(g)
- print("purcell-enh:, {:.3f}, "
- "{:.6f} (cyl.), {:.6f} (3D)".format(cavity_thickness[idx],
- ldos_cavity_cyl[idx]/ldos_bulk_cyl,
- ldos_cavity_3D[idx]/ldos_bulk_3D))
+ print(
+ "purcell-enh:, {:.3f}, "
+ "{:.6f} (cyl.), {:.6f} (3D)".format(
+ cavity_thickness[idx],
+ ldos_cavity_cyl[idx] / ldos_bulk_cyl,
+ ldos_cavity_3D[idx] / ldos_bulk_3D,
+ )
+ )
# Purcell enhancement factor (relative to bulk medium)
pe_meep_cyl = ldos_cavity_cyl / ldos_bulk_cyl
pe_meep_3D = ldos_cavity_3D / ldos_bulk_3D
# equation 7 of reference
- pe_theory = (3*np.fix(cavity_thickness+0.5)/(4*cavity_thickness) +
- (4*np.power(np.fix(cavity_thickness+0.5),3) -
- np.fix(cavity_thickness+0.5)) /
- (16*np.power(cavity_thickness,3)))
+ pe_theory = 3 * np.fix(cavity_thickness + 0.5) / (4 * cavity_thickness) + (
+ 4 * np.power(np.fix(cavity_thickness + 0.5), 3) - np.fix(cavity_thickness + 0.5)
+ ) / (16 * np.power(cavity_thickness, 3))
if mp.am_master():
- plt.plot(cavity_thickness,pe_meep_3D,'b-',label='Meep (3D)')
- plt.plot(cavity_thickness,pe_meep_cyl,'r-',label='Meep (cylin.)')
- plt.plot(cavity_thickness,pe_theory,'g-',label='theory')
- plt.plot(cavity_thickness,np.ones(len(cavity_thickness)),'k--')
- plt.xlabel('cavity thickness, $nL/\lambda$')
- plt.ylabel('Purcell enhancement factor')
- plt.title("planar point dipole at λ=1.0 μm in a planar cavity\n"
- "with n=2.4 and lossless metallic walls")
- plt.axis([0.5,2.5,0.4,3.1])
+ plt.plot(cavity_thickness, pe_meep_3D, "b-", label="Meep (3D)")
+ plt.plot(cavity_thickness, pe_meep_cyl, "r-", label="Meep (cylin.)")
+ plt.plot(cavity_thickness, pe_theory, "g-", label="theory")
+ plt.plot(cavity_thickness, np.ones(len(cavity_thickness)), "k--")
+ plt.xlabel("cavity thickness, $nL/\lambda$")
+ plt.ylabel("Purcell enhancement factor")
+ plt.title(
+ "planar point dipole at λ=1.0 μm in a planar cavity\n"
+ "with n=2.4 and lossless metallic walls"
+ )
+ plt.axis([0.5, 2.5, 0.4, 3.1])
plt.legend()
- plt.savefig('cavity_purcell_factor_vs_thickness.png',
- bbox_inches='tight')
+ plt.savefig("cavity_purcell_factor_vs_thickness.png", bbox_inches="tight")
diff --git a/python/examples/polarization_grating.ipynb b/python/examples/polarization_grating.ipynb
index c7e49ba03..65165d5c6 100644
--- a/python/examples/polarization_grating.ipynb
+++ b/python/examples/polarization_grating.ipynb
@@ -28,63 +28,102 @@
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
- "resolution = 30 # pixels/μm\n",
+ "resolution = 30 # pixels/μm\n",
"\n",
- "dpml = 1.0 # PML thickness\n",
- "dsub = 1.0 # substrate thickness\n",
- "dpad = 1.0 # padding thickness\n",
+ "dpml = 1.0 # PML thickness\n",
+ "dsub = 1.0 # substrate thickness\n",
+ "dpad = 1.0 # padding thickness\n",
"\n",
- "k_point = mp.Vector3(0,0,0)\n",
+ "k_point = mp.Vector3(0, 0, 0)\n",
"\n",
- "pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]\n",
+ "pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]\n",
"\n",
"n_0 = 1.55\n",
"delta_n = 0.159\n",
- "epsilon_diag = mp.Matrix(mp.Vector3(n_0**2,0,0),mp.Vector3(0,n_0**2,0),mp.Vector3(0,0,(n_0+delta_n)**2))\n",
+ "epsilon_diag = mp.Matrix(\n",
+ " mp.Vector3(n_0**2, 0, 0),\n",
+ " mp.Vector3(0, n_0**2, 0),\n",
+ " mp.Vector3(0, 0, (n_0 + delta_n) ** 2),\n",
+ ")\n",
"\n",
- "wvl = 0.54 # center wavelength\n",
- "fcen = 1/wvl # center frequency\n",
+ "wvl = 0.54 # center wavelength\n",
+ "fcen = 1 / wvl # center frequency\n",
"\n",
- "def pol_grating(d,ph,gp,nmode):\n",
- " sx = dpml+dsub+d+d+dpad+dpml\n",
+ "\n",
+ "def pol_grating(d, ph, gp, nmode):\n",
+ " sx = dpml + dsub + d + d + dpad + dpml\n",
" sy = gp\n",
"\n",
- " cell_size = mp.Vector3(sx,sy,0)\n",
+ " cell_size = mp.Vector3(sx, sy, 0)\n",
"\n",
" # twist angle of nematic director; from equation 1b\n",
" def phi(p):\n",
- " xx = p.x-(-0.5*sx+dpml+dsub)\n",
+ " xx = p.x - (-0.5 * sx + dpml + dsub)\n",
" if (xx >= 0) and (xx <= d):\n",
- " return math.pi*p.y/gp + ph*xx/d\n",
+ " return math.pi * p.y / gp + ph * xx / d\n",
" else:\n",
- " return math.pi*p.y/gp - ph*xx/d + 2*ph\n",
+ " return math.pi * p.y / gp - ph * xx / d + 2 * ph\n",
"\n",
" # return the anisotropic permittivity tensor for a uniaxial, twisted nematic liquid crystal\n",
" def lc_mat(p):\n",
" # rotation matrix for rotation around x axis\n",
- " Rx = mp.Matrix(mp.Vector3(1,0,0),mp.Vector3(0,math.cos(phi(p)),math.sin(phi(p))),mp.Vector3(0,-math.sin(phi(p)),math.cos(phi(p))))\n",
+ " Rx = mp.Matrix(\n",
+ " mp.Vector3(1, 0, 0),\n",
+ " mp.Vector3(0, math.cos(phi(p)), math.sin(phi(p))),\n",
+ " mp.Vector3(0, -math.sin(phi(p)), math.cos(phi(p))),\n",
+ " )\n",
" lc_epsilon = Rx * epsilon_diag * Rx.transpose()\n",
- " lc_epsilon_diag = mp.Vector3(lc_epsilon[0].x,lc_epsilon[1].y,lc_epsilon[2].z)\n",
- " lc_epsilon_offdiag = mp.Vector3(lc_epsilon[1].x,lc_epsilon[2].x,lc_epsilon[2].y)\n",
- " return mp.Medium(epsilon_diag=lc_epsilon_diag,epsilon_offdiag=lc_epsilon_offdiag)\n",
+ " lc_epsilon_diag = mp.Vector3(lc_epsilon[0].x, lc_epsilon[1].y, lc_epsilon[2].z)\n",
+ " lc_epsilon_offdiag = mp.Vector3(\n",
+ " lc_epsilon[1].x, lc_epsilon[2].x, lc_epsilon[2].y\n",
+ " )\n",
+ " return mp.Medium(\n",
+ " epsilon_diag=lc_epsilon_diag, epsilon_offdiag=lc_epsilon_offdiag\n",
+ " )\n",
"\n",
- " geometry = [mp.Block(center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub)),size=mp.Vector3(dpml+dsub,mp.inf,mp.inf),material=mp.Medium(index=n_0)),\n",
- " mp.Block(center=mp.Vector3(-0.5*sx+dpml+dsub+d),size=mp.Vector3(2*d,mp.inf,mp.inf),material=lc_mat)]\n",
+ " geometry = [\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)),\n",
+ " size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),\n",
+ " material=mp.Medium(index=n_0),\n",
+ " ),\n",
+ " mp.Block(\n",
+ " center=mp.Vector3(-0.5 * sx + dpml + dsub + d),\n",
+ " size=mp.Vector3(2 * d, mp.inf, mp.inf),\n",
+ " material=lc_mat,\n",
+ " ),\n",
+ " ]\n",
"\n",
" # linear-polarized planewave pulse source\n",
- " src_pt = mp.Vector3(-0.5*sx+dpml+0.3*dsub,0,0)\n",
- " sources = [mp.Source(mp.GaussianSource(fcen,fwidth=0.05*fcen), component=mp.Ez, center=src_pt, size=mp.Vector3(0,sy,0)),\n",
- " mp.Source(mp.GaussianSource(fcen,fwidth=0.05*fcen), component=mp.Ey, center=src_pt, size=mp.Vector3(0,sy,0))]\n",
+ " src_pt = mp.Vector3(-0.5 * sx + dpml + 0.3 * dsub, 0, 0)\n",
+ " sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=0.05 * fcen),\n",
+ " component=mp.Ez,\n",
+ " center=src_pt,\n",
+ " size=mp.Vector3(0, sy, 0),\n",
+ " ),\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=0.05 * fcen),\n",
+ " component=mp.Ey,\n",
+ " center=src_pt,\n",
+ " size=mp.Vector3(0, sy, 0),\n",
+ " ),\n",
+ " ]\n",
"\n",
- " sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " k_point=k_point,\n",
- " sources=sources,\n",
- " default_material=mp.Medium(index=n_0))\n",
+ " sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=k_point,\n",
+ " sources=sources,\n",
+ " default_material=mp.Medium(index=n_0),\n",
+ " )\n",
"\n",
- " tran_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad,0,0)\n",
- " tran_flux = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0,sy,0)))\n",
+ " tran_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad, 0, 0)\n",
+ " tran_flux = sim.add_flux(\n",
+ " fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, sy, 0))\n",
+ " )\n",
"\n",
" sim.run(until_after_sources=100)\n",
"\n",
@@ -92,22 +131,30 @@
"\n",
" sim.reset_meep()\n",
"\n",
- " sim = mp.Simulation(resolution=resolution,\n",
- " cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " k_point=k_point,\n",
- " sources=sources,\n",
- " geometry=geometry)\n",
+ " sim = mp.Simulation(\n",
+ " resolution=resolution,\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " k_point=k_point,\n",
+ " sources=sources,\n",
+ " geometry=geometry,\n",
+ " )\n",
"\n",
- " tran_flux = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0,sy,0)))\n",
+ " tran_flux = sim.add_flux(\n",
+ " fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, sy, 0))\n",
+ " )\n",
"\n",
" sim.run(until_after_sources=300)\n",
"\n",
- " res1 = sim.get_eigenmode_coefficients(tran_flux, range(1,nmode+1), eig_parity=mp.ODD_Z+mp.EVEN_Y)\n",
- " res2 = sim.get_eigenmode_coefficients(tran_flux, range(1,nmode+1), eig_parity=mp.EVEN_Z+mp.ODD_Y)\n",
- " angles = [math.degrees(math.acos(kdom.x/fcen)) for kdom in res1.kdom]\n",
+ " res1 = sim.get_eigenmode_coefficients(\n",
+ " tran_flux, range(1, nmode + 1), eig_parity=mp.ODD_Z + mp.EVEN_Y\n",
+ " )\n",
+ " res2 = sim.get_eigenmode_coefficients(\n",
+ " tran_flux, range(1, nmode + 1), eig_parity=mp.EVEN_Z + mp.ODD_Y\n",
+ " )\n",
+ " angles = [math.degrees(math.acos(kdom.x / fcen)) for kdom in res1.kdom]\n",
"\n",
- " return input_flux[0], angles, res1.alpha[:,0,0], res2.alpha[:,0,0];"
+ " return input_flux[0], angles, res1.alpha[:, 0, 0], res2.alpha[:, 0, 0];"
]
},
{
@@ -3144,11 +3191,11 @@
}
],
"source": [
- "ph_uniaxial = 0 # chiral layer twist angle for uniaxial grating\n",
- "ph_twisted = 70 # chiral layer twist angle for bilayer grating\n",
- "gp = 6.5 # grating period\n",
- "nmode = 5 # number of mode coefficients to compute\n",
- "dd = np.arange(0.2,3.5,0.2) # chiral layer thickness\n",
+ "ph_uniaxial = 0 # chiral layer twist angle for uniaxial grating\n",
+ "ph_twisted = 70 # chiral layer twist angle for bilayer grating\n",
+ "gp = 6.5 # grating period\n",
+ "nmode = 5 # number of mode coefficients to compute\n",
+ "dd = np.arange(0.2, 3.5, 0.2) # chiral layer thickness\n",
"\n",
"m0_uniaxial = np.zeros(dd.size)\n",
"m1_uniaxial = np.zeros(dd.size)\n",
@@ -3159,18 +3206,22 @@
"ang_twisted = np.zeros(dd.size)\n",
"\n",
"for k in range(len(dd)):\n",
- " input_flux, angles, coeffs1, coeffs2 = pol_grating(0.5*dd[k],math.radians(ph_uniaxial),gp,nmode)\n",
- " tran = (abs(coeffs1)**2+abs(coeffs2)**2)/input_flux\n",
+ " input_flux, angles, coeffs1, coeffs2 = pol_grating(\n",
+ " 0.5 * dd[k], math.radians(ph_uniaxial), gp, nmode\n",
+ " )\n",
+ " tran = (abs(coeffs1) ** 2 + abs(coeffs2) ** 2) / input_flux\n",
" for m in range(nmode):\n",
- " print(\"tran (uniaxial):, {}, {:.2f}, {:.5f}\".format(m,angles[m],tran[m]))\n",
+ " print(\"tran (uniaxial):, {}, {:.2f}, {:.5f}\".format(m, angles[m], tran[m]))\n",
" m0_uniaxial[k] = tran[0]\n",
" m1_uniaxial[k] = tran[1]\n",
" ang_uniaxial[k] = angles[1]\n",
"\n",
- " input_flux, angles, coeffs1, coeffs2 = pol_grating(dd[k],math.radians(ph_twisted),gp,nmode)\n",
- " tran = (abs(coeffs1)**2+abs(coeffs2)**2)/input_flux\n",
+ " input_flux, angles, coeffs1, coeffs2 = pol_grating(\n",
+ " dd[k], math.radians(ph_twisted), gp, nmode\n",
+ " )\n",
+ " tran = (abs(coeffs1) ** 2 + abs(coeffs2) ** 2) / input_flux\n",
" for m in range(nmode):\n",
- " print(\"tran (twisted):, {}, {:.2f}, {:.5f}\".format(m,angles[m],tran[m]))\n",
+ " print(\"tran (twisted):, {}, {:.2f}, {:.5f}\".format(m, angles[m], tran[m]))\n",
" m0_twisted[k] = tran[0]\n",
" m1_twisted[k] = tran[1]\n",
" ang_twisted[k] = angles[1]"
@@ -3190,13 +3241,13 @@
"outputs": [],
"source": [
"cos_angles = [math.cos(math.radians(t)) for t in ang_uniaxial]\n",
- "tran = m0_uniaxial+2*m1_uniaxial\n",
- "eff_m0 = m0_uniaxial/tran\n",
- "eff_m1 = (2*m1_uniaxial/tran)/cos_angles\n",
+ "tran = m0_uniaxial + 2 * m1_uniaxial\n",
+ "eff_m0 = m0_uniaxial / tran\n",
+ "eff_m1 = (2 * m1_uniaxial / tran) / cos_angles\n",
"\n",
- "phase = delta_n*dd/wvl\n",
- "eff_m0_analytic = [math.cos(math.pi*p)**2 for p in phase]\n",
- "eff_m1_analytic = [math.sin(math.pi*p)**2 for p in phase]"
+ "phase = delta_n * dd / wvl\n",
+ "eff_m0_analytic = [math.cos(math.pi * p) ** 2 for p in phase]\n",
+ "eff_m1_analytic = [math.sin(math.pi * p) ** 2 for p in phase]"
]
},
{
@@ -3219,31 +3270,31 @@
],
"source": [
"plt.figure(dpi=150)\n",
- "plt.subplot(1,2,1)\n",
- "plt.plot(phase,eff_m0,'bo-',clip_on=False,label='0th order (meep)')\n",
- "plt.plot(phase,eff_m0_analytic,'b--',clip_on=False,label='0th order (analytic)')\n",
- "plt.plot(phase,eff_m1,'ro-',clip_on=False,label='±1 orders (meep)')\n",
- "plt.plot(phase,eff_m1_analytic,'r--',clip_on=False,label='±1 orders (analytic)')\n",
+ "plt.subplot(1, 2, 1)\n",
+ "plt.plot(phase, eff_m0, \"bo-\", clip_on=False, label=\"0th order (meep)\")\n",
+ "plt.plot(phase, eff_m0_analytic, \"b--\", clip_on=False, label=\"0th order (analytic)\")\n",
+ "plt.plot(phase, eff_m1, \"ro-\", clip_on=False, label=\"±1 orders (meep)\")\n",
+ "plt.plot(phase, eff_m1_analytic, \"r--\", clip_on=False, label=\"±1 orders (analytic)\")\n",
"plt.axis([0, 1.0, 0, 1])\n",
- "plt.xticks([t for t in np.arange(0,1.2,0.2)])\n",
+ "plt.xticks([t for t in np.arange(0, 1.2, 0.2)])\n",
"plt.xlabel(\"phase delay Δnd/λ\")\n",
"plt.ylabel(\"diffraction efficiency @ λ = 0.54 μm\")\n",
- "plt.legend(loc='center')\n",
+ "plt.legend(loc=\"center\")\n",
"plt.title(\"homogeneous uniaxial grating\")\n",
"\n",
"cos_angles = [math.cos(math.radians(t)) for t in ang_twisted]\n",
- "tran = m0_twisted+2*m1_twisted\n",
- "eff_m0 = m0_twisted/tran\n",
- "eff_m1 = (2*m1_twisted/tran)/cos_angles\n",
+ "tran = m0_twisted + 2 * m1_twisted\n",
+ "eff_m0 = m0_twisted / tran\n",
+ "eff_m1 = (2 * m1_twisted / tran) / cos_angles\n",
"\n",
- "plt.subplot(1,2,2)\n",
- "plt.plot(phase,eff_m0,'bo-',clip_on=False,label='0th order (meep)')\n",
- "plt.plot(phase,eff_m1,'ro-',clip_on=False,label='±1 orders (meep)')\n",
+ "plt.subplot(1, 2, 2)\n",
+ "plt.plot(phase, eff_m0, \"bo-\", clip_on=False, label=\"0th order (meep)\")\n",
+ "plt.plot(phase, eff_m1, \"ro-\", clip_on=False, label=\"±1 orders (meep)\")\n",
"plt.axis([0, 1.0, 0, 1])\n",
- "plt.xticks([t for t in np.arange(0,1.2,0.2)])\n",
+ "plt.xticks([t for t in np.arange(0, 1.2, 0.2)])\n",
"plt.xlabel(\"phase delay Δnd/λ\")\n",
"plt.ylabel(\"diffraction efficiency @ λ = 0.54 μm\")\n",
- "plt.legend(loc='center')\n",
+ "plt.legend(loc=\"center\")\n",
"plt.title(\"bilayer twisted-nematic grating\")\n",
"\n",
"plt.tight_layout()\n",
diff --git a/python/examples/polarization_grating.py b/python/examples/polarization_grating.py
index c943b559c..25cb227e5 100644
--- a/python/examples/polarization_grating.py
+++ b/python/examples/polarization_grating.py
@@ -8,63 +8,102 @@
import math
import matplotlib.pyplot as plt
-resolution = 50 # pixels/μm
+resolution = 50 # pixels/μm
-dpml = 1.0 # PML thickness
-dsub = 1.0 # substrate thickness
-dpad = 1.0 # padding thickness
+dpml = 1.0 # PML thickness
+dsub = 1.0 # substrate thickness
+dpad = 1.0 # padding thickness
-k_point = mp.Vector3(0,0,0)
+k_point = mp.Vector3(0, 0, 0)
-pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]
+pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]
n_0 = 1.55
delta_n = 0.159
-epsilon_diag = mp.Matrix(mp.Vector3(n_0**2,0,0),mp.Vector3(0,n_0**2,0),mp.Vector3(0,0,(n_0+delta_n)**2))
+epsilon_diag = mp.Matrix(
+ mp.Vector3(n_0**2, 0, 0),
+ mp.Vector3(0, n_0**2, 0),
+ mp.Vector3(0, 0, (n_0 + delta_n) ** 2),
+)
-wvl = 0.54 # center wavelength
-fcen = 1/wvl # center frequency
+wvl = 0.54 # center wavelength
+fcen = 1 / wvl # center frequency
-def pol_grating(d,ph,gp,nmode):
- sx = dpml+dsub+d+d+dpad+dpml
+
+def pol_grating(d, ph, gp, nmode):
+ sx = dpml + dsub + d + d + dpad + dpml
sy = gp
- cell_size = mp.Vector3(sx,sy,0)
+ cell_size = mp.Vector3(sx, sy, 0)
# twist angle of nematic director; from equation 1b
def phi(p):
- xx = p.x-(-0.5*sx+dpml+dsub)
+ xx = p.x - (-0.5 * sx + dpml + dsub)
if (xx >= 0) and (xx <= d):
- return math.pi*p.y/gp + ph*xx/d
+ return math.pi * p.y / gp + ph * xx / d
else:
- return math.pi*p.y/gp - ph*xx/d + 2*ph
+ return math.pi * p.y / gp - ph * xx / d + 2 * ph
# return the anisotropic permittivity tensor for a uniaxial, twisted nematic liquid crystal
def lc_mat(p):
# rotation matrix for rotation around x axis
- Rx = mp.Matrix(mp.Vector3(1,0,0),mp.Vector3(0,math.cos(phi(p)),math.sin(phi(p))),mp.Vector3(0,-math.sin(phi(p)),math.cos(phi(p))))
+ Rx = mp.Matrix(
+ mp.Vector3(1, 0, 0),
+ mp.Vector3(0, math.cos(phi(p)), math.sin(phi(p))),
+ mp.Vector3(0, -math.sin(phi(p)), math.cos(phi(p))),
+ )
lc_epsilon = Rx * epsilon_diag * Rx.transpose()
- lc_epsilon_diag = mp.Vector3(lc_epsilon[0].x,lc_epsilon[1].y,lc_epsilon[2].z)
- lc_epsilon_offdiag = mp.Vector3(lc_epsilon[1].x,lc_epsilon[2].x,lc_epsilon[2].y)
- return mp.Medium(epsilon_diag=lc_epsilon_diag,epsilon_offdiag=lc_epsilon_offdiag)
-
- geometry = [mp.Block(center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub)),size=mp.Vector3(dpml+dsub,mp.inf,mp.inf),material=mp.Medium(index=n_0)),
- mp.Block(center=mp.Vector3(-0.5*sx+dpml+dsub+d),size=mp.Vector3(2*d,mp.inf,mp.inf),material=lc_mat)]
+ lc_epsilon_diag = mp.Vector3(lc_epsilon[0].x, lc_epsilon[1].y, lc_epsilon[2].z)
+ lc_epsilon_offdiag = mp.Vector3(
+ lc_epsilon[1].x, lc_epsilon[2].x, lc_epsilon[2].y
+ )
+ return mp.Medium(
+ epsilon_diag=lc_epsilon_diag, epsilon_offdiag=lc_epsilon_offdiag
+ )
+
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)),
+ size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),
+ material=mp.Medium(index=n_0),
+ ),
+ mp.Block(
+ center=mp.Vector3(-0.5 * sx + dpml + dsub + d),
+ size=mp.Vector3(2 * d, mp.inf, mp.inf),
+ material=lc_mat,
+ ),
+ ]
# linear-polarized planewave pulse source
- src_pt = mp.Vector3(-0.5*sx+dpml+0.3*dsub,0,0)
- sources = [mp.Source(mp.GaussianSource(fcen,fwidth=0.05*fcen), component=mp.Ez, center=src_pt, size=mp.Vector3(0,sy,0)),
- mp.Source(mp.GaussianSource(fcen,fwidth=0.05*fcen), component=mp.Ey, center=src_pt, size=mp.Vector3(0,sy,0))]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- k_point=k_point,
- sources=sources,
- default_material=mp.Medium(index=n_0))
-
- tran_pt = mp.Vector3(0.5*sx-dpml-0.5*dpad,0,0)
- tran_flux = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0,sy,0)))
+ src_pt = mp.Vector3(-0.5 * sx + dpml + 0.3 * dsub, 0, 0)
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=0.05 * fcen),
+ component=mp.Ez,
+ center=src_pt,
+ size=mp.Vector3(0, sy, 0),
+ ),
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=0.05 * fcen),
+ component=mp.Ey,
+ center=src_pt,
+ size=mp.Vector3(0, sy, 0),
+ ),
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ k_point=k_point,
+ sources=sources,
+ default_material=mp.Medium(index=n_0),
+ )
+
+ tran_pt = mp.Vector3(0.5 * sx - dpml - 0.5 * dpad, 0, 0)
+ tran_flux = sim.add_flux(
+ fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, sy, 0))
+ )
sim.run(until_after_sources=100)
@@ -72,30 +111,37 @@ def lc_mat(p):
sim.reset_meep()
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- k_point=k_point,
- sources=sources,
- geometry=geometry)
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ k_point=k_point,
+ sources=sources,
+ geometry=geometry,
+ )
- tran_flux = sim.add_flux(fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0,sy,0)))
+ tran_flux = sim.add_flux(
+ fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, sy, 0))
+ )
sim.run(until_after_sources=300)
- res1 = sim.get_eigenmode_coefficients(tran_flux, range(1,nmode+1), eig_parity=mp.ODD_Z+mp.EVEN_Y)
- res2 = sim.get_eigenmode_coefficients(tran_flux, range(1,nmode+1), eig_parity=mp.EVEN_Z+mp.ODD_Y)
- angles = [math.degrees(math.acos(kdom.x/fcen)) for kdom in res1.kdom]
-
- return input_flux[0], angles, res1.alpha[:,0,0], res2.alpha[:,0,0];
+ res1 = sim.get_eigenmode_coefficients(
+ tran_flux, range(1, nmode + 1), eig_parity=mp.ODD_Z + mp.EVEN_Y
+ )
+ res2 = sim.get_eigenmode_coefficients(
+ tran_flux, range(1, nmode + 1), eig_parity=mp.EVEN_Z + mp.ODD_Y
+ )
+ angles = [math.degrees(math.acos(kdom.x / fcen)) for kdom in res1.kdom]
+ return input_flux[0], angles, res1.alpha[:, 0, 0], res2.alpha[:, 0, 0]
-ph_uniaxial = 0 # chiral layer twist angle for uniaxial grating
-ph_twisted = 70 # chiral layer twist angle for bilayer grating
-gp = 6.5 # grating period
-nmode = 5 # number of mode coefficients to compute
-dd = np.arange(0.1,3.5,0.1) # chiral layer thickness
+ph_uniaxial = 0 # chiral layer twist angle for uniaxial grating
+ph_twisted = 70 # chiral layer twist angle for bilayer grating
+gp = 6.5 # grating period
+nmode = 5 # number of mode coefficients to compute
+dd = np.arange(0.1, 3.5, 0.1) # chiral layer thickness
m0_uniaxial = np.zeros(dd.size)
m1_uniaxial = np.zeros(dd.size)
@@ -106,58 +152,62 @@ def lc_mat(p):
ang_twisted = np.zeros(dd.size)
for k in range(len(dd)):
- input_flux, angles, coeffs1, coeffs2 = pol_grating(0.5*dd[k],math.radians(ph_uniaxial),gp,nmode)
- tran = (abs(coeffs1)**2+abs(coeffs2)**2)/input_flux
+ input_flux, angles, coeffs1, coeffs2 = pol_grating(
+ 0.5 * dd[k], math.radians(ph_uniaxial), gp, nmode
+ )
+ tran = (abs(coeffs1) ** 2 + abs(coeffs2) ** 2) / input_flux
for m in range(nmode):
- print("tran (uniaxial):, {}, {:.2f}, {:.5f}".format(m,angles[m],tran[m]))
+ print("tran (uniaxial):, {}, {:.2f}, {:.5f}".format(m, angles[m], tran[m]))
m0_uniaxial[k] = tran[0]
m1_uniaxial[k] = tran[1]
ang_uniaxial[k] = angles[1]
- input_flux, angles, coeffs1, coeffs2 = pol_grating(dd[k],math.radians(ph_twisted),gp,nmode)
- tran = (abs(coeffs1)**2+abs(coeffs2)**2)/input_flux
+ input_flux, angles, coeffs1, coeffs2 = pol_grating(
+ dd[k], math.radians(ph_twisted), gp, nmode
+ )
+ tran = (abs(coeffs1) ** 2 + abs(coeffs2) ** 2) / input_flux
for m in range(nmode):
- print("tran (twisted):, {}, {:.2f}, {:.5f}".format(m,angles[m],tran[m]))
+ print("tran (twisted):, {}, {:.2f}, {:.5f}".format(m, angles[m], tran[m]))
m0_twisted[k] = tran[0]
m1_twisted[k] = tran[1]
ang_twisted[k] = angles[1]
cos_angles = [math.cos(math.radians(t)) for t in ang_uniaxial]
-tran = m0_uniaxial+2*m1_uniaxial
-eff_m0 = m0_uniaxial/tran
-eff_m1 = (2*m1_uniaxial/tran)/cos_angles
+tran = m0_uniaxial + 2 * m1_uniaxial
+eff_m0 = m0_uniaxial / tran
+eff_m1 = (2 * m1_uniaxial / tran) / cos_angles
-phase = delta_n*dd/wvl
-eff_m0_analytic = [math.cos(math.pi*p)**2 for p in phase]
-eff_m1_analytic = [math.sin(math.pi*p)**2 for p in phase]
+phase = delta_n * dd / wvl
+eff_m0_analytic = [math.cos(math.pi * p) ** 2 for p in phase]
+eff_m1_analytic = [math.sin(math.pi * p) ** 2 for p in phase]
plt.figure(dpi=150)
-plt.subplot(1,2,1)
-plt.plot(phase,eff_m0,'bo-',clip_on=False,label='0th order (meep)')
-plt.plot(phase,eff_m0_analytic,'b--',clip_on=False,label='0th order (analytic)')
-plt.plot(phase,eff_m1,'ro-',clip_on=False,label='±1 orders (meep)')
-plt.plot(phase,eff_m1_analytic,'r--',clip_on=False,label='±1 orders (analytic)')
+plt.subplot(1, 2, 1)
+plt.plot(phase, eff_m0, "bo-", clip_on=False, label="0th order (meep)")
+plt.plot(phase, eff_m0_analytic, "b--", clip_on=False, label="0th order (analytic)")
+plt.plot(phase, eff_m1, "ro-", clip_on=False, label="±1 orders (meep)")
+plt.plot(phase, eff_m1_analytic, "r--", clip_on=False, label="±1 orders (analytic)")
plt.axis([0, 1.0, 0, 1])
-plt.xticks(list(np.arange(0,1.2,0.2)))
+plt.xticks(list(np.arange(0, 1.2, 0.2)))
plt.xlabel("phase delay Δnd/λ")
plt.ylabel("diffraction efficiency @ λ = 0.54 μm")
-plt.legend(loc='center')
+plt.legend(loc="center")
plt.title("homogeneous uniaxial grating")
cos_angles = [math.cos(math.radians(t)) for t in ang_twisted]
-tran = m0_twisted+2*m1_twisted
-eff_m0 = m0_twisted/tran
-eff_m1 = (2*m1_twisted/tran)/cos_angles
+tran = m0_twisted + 2 * m1_twisted
+eff_m0 = m0_twisted / tran
+eff_m1 = (2 * m1_twisted / tran) / cos_angles
-plt.subplot(1,2,2)
-plt.plot(phase,eff_m0,'bo-',clip_on=False,label='0th order (meep)')
-plt.plot(phase,eff_m1,'ro-',clip_on=False,label='±1 orders (meep)')
+plt.subplot(1, 2, 2)
+plt.plot(phase, eff_m0, "bo-", clip_on=False, label="0th order (meep)")
+plt.plot(phase, eff_m1, "ro-", clip_on=False, label="±1 orders (meep)")
plt.axis([0, 1.0, 0, 1])
-plt.xticks(list(np.arange(0,1.2,0.2)))
+plt.xticks(list(np.arange(0, 1.2, 0.2)))
plt.xlabel("phase delay Δnd/λ")
plt.ylabel("diffraction efficiency @ λ = 0.54 μm")
-plt.legend(loc='center')
+plt.legend(loc="center")
plt.title("bilayer twisted-nematic grating")
plt.show()
diff --git a/python/examples/pw-source.py b/python/examples/pw-source.py
index c22d9b227..f9932bc8f 100644
--- a/python/examples/pw-source.py
+++ b/python/examples/pw-source.py
@@ -26,12 +26,14 @@
def pw_amp(k, x0):
def _pw_amp(x):
return cmath.exp(1j * k.dot(x + x0))
+
return _pw_amp
+
fcen = 0.8 # pulse center frequency
df = 0.02 # turn-on bandwidth
kdir = mp.Vector3(1, 1) # direction of k (length is irrelevant)
-n = 1 # refractive index of material containing the source
+n = 1 # refractive index of material containing the source
k = kdir.unit().scale(2 * math.pi * fcen * n) # k with correct length
sources = [
@@ -40,15 +42,15 @@ def _pw_amp(x):
component=mp.Ez,
center=mp.Vector3(-0.5 * s, 0),
size=mp.Vector3(0, s),
- amp_func=pw_amp(k, mp.Vector3(x=-0.5 * s))
+ amp_func=pw_amp(k, mp.Vector3(x=-0.5 * s)),
),
mp.Source(
mp.ContinuousSource(fcen, fwidth=df),
component=mp.Ez,
center=mp.Vector3(0, -0.5 * s),
size=mp.Vector3(s, 0),
- amp_func=pw_amp(k, mp.Vector3(y=-0.5 * s))
- )
+ amp_func=pw_amp(k, mp.Vector3(y=-0.5 * s)),
+ ),
]
sim = mp.Simulation(
diff --git a/python/examples/refl-angular-kz2d.py b/python/examples/refl-angular-kz2d.py
index 13fea4c88..bf67ac337 100644
--- a/python/examples/refl-angular-kz2d.py
+++ b/python/examples/refl-angular-kz2d.py
@@ -1,12 +1,13 @@
import meep as mp
import math
+
def refl_planar(theta, kz_2d):
resolution = 100
dpml = 1.0
sx = 10
- sx = 10 + 2*dpml
+ sx = 10 + 2 * dpml
cell_size = mp.Vector3(sx)
pml_layers = [mp.PML(dpml)]
@@ -15,66 +16,94 @@ def refl_planar(theta, kz_2d):
# plane of incidence is XZ
k = mp.Vector3(z=math.sin(theta)).scale(fcen)
- sources = [mp.Source(mp.GaussianSource(fcen,fwidth=0.2*fcen),
- component=mp.Ey,
- center=mp.Vector3(-0.5*sx+dpml))]
-
- sim = mp.Simulation(cell_size=cell_size,
- boundary_layers=pml_layers,
- sources=sources,
- k_point=k,
- kz_2d=kz_2d,
- resolution=resolution)
-
- refl_fr = mp.FluxRegion(center=mp.Vector3(-0.25*sx))
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ component=mp.Ey,
+ center=mp.Vector3(-0.5 * sx + dpml),
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ sources=sources,
+ k_point=k,
+ kz_2d=kz_2d,
+ resolution=resolution,
+ )
+
+ refl_fr = mp.FluxRegion(center=mp.Vector3(-0.25 * sx))
refl = sim.add_flux(fcen, 0, 1, refl_fr)
- sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ey, mp.Vector3(-0.5*sx+dpml), 1e-9))
+ sim.run(
+ until_after_sources=mp.stop_when_fields_decayed(
+ 50, mp.Ey, mp.Vector3(-0.5 * sx + dpml), 1e-9
+ )
+ )
input_flux = mp.get_fluxes(refl)
input_data = sim.get_flux_data(refl)
sim.reset_meep()
# add a block with n=3.5 for the air-dielectric interface
- geometry = [mp.Block(size=mp.Vector3(0.5*sx,mp.inf,mp.inf),
- center=mp.Vector3(0.25*sx),
- material=mp.Medium(index=3.5))]
-
- sim = mp.Simulation(cell_size=cell_size,
- geometry=geometry,
- boundary_layers=pml_layers,
- sources=sources,
- k_point=k,
- kz_2d=kz_2d,
- resolution=resolution)
+ geometry = [
+ mp.Block(
+ size=mp.Vector3(0.5 * sx, mp.inf, mp.inf),
+ center=mp.Vector3(0.25 * sx),
+ material=mp.Medium(index=3.5),
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ geometry=geometry,
+ boundary_layers=pml_layers,
+ sources=sources,
+ k_point=k,
+ kz_2d=kz_2d,
+ resolution=resolution,
+ )
refl = sim.add_flux(fcen, 0, 1, refl_fr)
sim.load_minus_flux_data(refl, input_data)
- sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ey, mp.Vector3(-0.5*sx+dpml), 1e-9))
+ sim.run(
+ until_after_sources=mp.stop_when_fields_decayed(
+ 50, mp.Ey, mp.Vector3(-0.5 * sx + dpml), 1e-9
+ )
+ )
refl_flux = mp.get_fluxes(refl)
freqs = mp.get_flux_freqs(refl)
- return -refl_flux[0]/input_flux[0]
+ return -refl_flux[0] / input_flux[0]
# rotation angle of source: CCW around Y axis, 0 degrees along +X axis
theta_r = math.radians(19.4)
-Rmeep_real_imag = refl_planar(theta_r,"real/imag")
-Rmeep_complex = refl_planar(theta_r,"complex")
-Rmeep_3d = refl_planar(theta_r,"3d")
+Rmeep_real_imag = refl_planar(theta_r, "real/imag")
+Rmeep_complex = refl_planar(theta_r, "complex")
+Rmeep_3d = refl_planar(theta_r, "3d")
-n1=1
-n2=3.5
+n1 = 1
+n2 = 3.5
# compute angle of refracted planewave in medium n2
# for incident planewave in medium n1 at angle theta_in
-theta_out = lambda theta_in: math.asin(n1*math.sin(theta_in)/n2)
+theta_out = lambda theta_in: math.asin(n1 * math.sin(theta_in) / n2)
# compute Fresnel reflectance for S-polarization in medium n2
# for incident planewave in medium n1 at angle theta_in
-Rfresnel = lambda theta_in: math.fabs((n2*math.cos(theta_out(theta_in))-n1*math.cos(theta_in))/(n2*math.cos(theta_out(theta_in))+n1*math.cos(theta_in)))**2
-
-print(f"refl:, {Rmeep_real_imag} (real/imag), {Rmeep_complex} (complex), {Rmeep_3d} (3d), {Rfresnel(theta_r)} (analytic)")
+Rfresnel = (
+ lambda theta_in: math.fabs(
+ (n2 * math.cos(theta_out(theta_in)) - n1 * math.cos(theta_in))
+ / (n2 * math.cos(theta_out(theta_in)) + n1 * math.cos(theta_in))
+ )
+ ** 2
+)
+
+print(
+ f"refl:, {Rmeep_real_imag} (real/imag), {Rmeep_complex} (complex), {Rmeep_3d} (3d), {Rfresnel(theta_r)} (analytic)"
+)
diff --git a/python/examples/refl-angular.ipynb b/python/examples/refl-angular.ipynb
index b0dd4e27a..ae5c0b948 100644
--- a/python/examples/refl-angular.ipynb
+++ b/python/examples/refl-angular.ipynb
@@ -32,47 +32,60 @@
"import numpy.matlib\n",
"import matplotlib.pyplot as plt\n",
"\n",
- "resolution = 50 # pixels/um\n",
+ "resolution = 50 # pixels/um\n",
"\n",
- "dpml = 1.0 # PML thickness\n",
- "sz = 10 + 2*dpml\n",
+ "dpml = 1.0 # PML thickness\n",
+ "sz = 10 + 2 * dpml\n",
"cell_size = mp.Vector3(z=sz)\n",
"pml_layers = [mp.PML(dpml)]\n",
"\n",
- "wvl_min = 0.4 # min wavelength\n",
- "wvl_max = 0.8 # max wavelength\n",
- "fmin = 1/wvl_max # min frequency\n",
- "fmax = 1/wvl_min # max frequency\n",
- "fcen = 0.5*(fmin+fmax) # center frequency\n",
- "df = fmax-fmin # frequency width\n",
- "nfreq = 50 # number of frequency bins\n",
+ "wvl_min = 0.4 # min wavelength\n",
+ "wvl_max = 0.8 # max wavelength\n",
+ "fmin = 1 / wvl_max # min frequency\n",
+ "fmax = 1 / wvl_min # max frequency\n",
+ "fcen = 0.5 * (fmin + fmax) # center frequency\n",
+ "df = fmax - fmin # frequency width\n",
+ "nfreq = 50 # number of frequency bins\n",
"\n",
- "def planar_reflectance(theta): \n",
+ "\n",
+ "def planar_reflectance(theta):\n",
" # rotation angle (in degrees) of source: CCW around Y axis, 0 degrees along +Z axis\n",
" theta_r = math.radians(theta)\n",
"\n",
" # plane of incidence is XZ; rotate counter clockwise (CCW) about y-axis\n",
" k = mp.Vector3(z=fmin).rotate(mp.Vector3(y=1), theta_r)\n",
- " \n",
+ "\n",
" # if normal incidence, force number of dimensions to be 1\n",
" if theta_r == 0:\n",
" dimensions = 1\n",
" else:\n",
" dimensions = 3\n",
- " \n",
- " sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df), component=mp.Ex, center=mp.Vector3(z=-0.5*sz+dpml))]\n",
"\n",
- " sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " sources=sources,\n",
- " k_point=k,\n",
- " dimensions=dimensions,\n",
- " resolution=resolution)\n",
+ " sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ex,\n",
+ " center=mp.Vector3(z=-0.5 * sz + dpml),\n",
+ " )\n",
+ " ]\n",
+ "\n",
+ " sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=sources,\n",
+ " k_point=k,\n",
+ " dimensions=dimensions,\n",
+ " resolution=resolution,\n",
+ " )\n",
"\n",
- " refl_fr = mp.FluxRegion(center=mp.Vector3(z=-0.25*sz))\n",
+ " refl_fr = mp.FluxRegion(center=mp.Vector3(z=-0.25 * sz))\n",
" refl = sim.add_flux(fcen, df, nfreq, refl_fr)\n",
- " \n",
- " sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(z=-0.5*sz+dpml), 1e-9))\n",
+ "\n",
+ " sim.run(\n",
+ " until_after_sources=mp.stop_when_fields_decayed(\n",
+ " 50, mp.Ex, mp.Vector3(z=-0.5 * sz + dpml), 1e-9\n",
+ " )\n",
+ " )\n",
"\n",
" empty_flux = mp.get_fluxes(refl)\n",
" empty_data = sim.get_flux_data(refl)\n",
@@ -80,20 +93,32 @@
" sim.reset_meep()\n",
"\n",
" # add a block with n=3.5 for the air-dielectric interface\n",
- " geometry = [mp.Block(mp.Vector3(mp.inf,mp.inf,0.5*sz), center=mp.Vector3(z=0.25*sz), material=mp.Medium(index=3.5))]\n",
+ " geometry = [\n",
+ " mp.Block(\n",
+ " mp.Vector3(mp.inf, mp.inf, 0.5 * sz),\n",
+ " center=mp.Vector3(z=0.25 * sz),\n",
+ " material=mp.Medium(index=3.5),\n",
+ " )\n",
+ " ]\n",
"\n",
- " sim = mp.Simulation(cell_size=cell_size,\n",
- " geometry=geometry,\n",
- " boundary_layers=pml_layers,\n",
- " sources=sources,\n",
- " k_point=k,\n",
- " dimensions=dimensions,\n",
- " resolution=resolution)\n",
+ " sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " geometry=geometry,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=sources,\n",
+ " k_point=k,\n",
+ " dimensions=dimensions,\n",
+ " resolution=resolution,\n",
+ " )\n",
"\n",
" refl = sim.add_flux(fcen, df, nfreq, refl_fr)\n",
" sim.load_minus_flux_data(refl, empty_data)\n",
"\n",
- " sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(z=-0.5*sz+dpml), 1e-9))\n",
+ " sim.run(\n",
+ " until_after_sources=mp.stop_when_fields_decayed(\n",
+ " 50, mp.Ex, mp.Vector3(z=-0.5 * sz + dpml), 1e-9\n",
+ " )\n",
+ " )\n",
"\n",
" refl_flux = mp.get_fluxes(refl)\n",
" freqs = mp.get_flux_freqs(refl)\n",
@@ -102,12 +127,12 @@
" theta_out = np.empty(nfreq)\n",
" R = np.empty(nfreq)\n",
" for i in range(nfreq):\n",
- " wvls[i] = 1/freqs[i]\n",
- " theta_out[i] = math.degrees(math.asin(k.x/freqs[i]))\n",
- " R[i] = -refl_flux[i]/empty_flux[i]\n",
- " print(\"refl:, {}, {}, {}, {}\".format(k.x,wvls[i],theta_out[i],R[i]))\n",
- " \n",
- " return k.x*np.ones(nfreq), wvls, theta_out, R "
+ " wvls[i] = 1 / freqs[i]\n",
+ " theta_out[i] = math.degrees(math.asin(k.x / freqs[i]))\n",
+ " R[i] = -refl_flux[i] / empty_flux[i]\n",
+ " print(\"refl:, {}, {}, {}, {}\".format(k.x, wvls[i], theta_out[i], R[i]))\n",
+ "\n",
+ " return k.x * np.ones(nfreq), wvls, theta_out, R"
]
},
{
@@ -1472,17 +1497,17 @@
}
],
"source": [
- "theta_in = np.arange(0,85,5)\n",
+ "theta_in = np.arange(0, 85, 5)\n",
"wvl = np.empty(nfreq)\n",
- "kxs = np.empty((nfreq,theta_in.size))\n",
- "thetas = np.empty((nfreq,theta_in.size))\n",
- "Rmeep = np.empty((nfreq,theta_in.size))\n",
+ "kxs = np.empty((nfreq, theta_in.size))\n",
+ "thetas = np.empty((nfreq, theta_in.size))\n",
+ "Rmeep = np.empty((nfreq, theta_in.size))\n",
"\n",
"for j in range(theta_in.size):\n",
- " kxs[:,j], wvl, thetas[:,j], Rmeep[:,j] = planar_reflectance(theta_in[j])\n",
+ " kxs[:, j], wvl, thetas[:, j], Rmeep[:, j] = planar_reflectance(theta_in[j])\n",
"\n",
"# create a 2d matrix for the wavelength by repeating the column vector for each angle\n",
- "wvls = np.transpose(np.matlib.repmat(wvl,theta_in.size,1))"
+ "wvls = np.transpose(np.matlib.repmat(wvl, theta_in.size, 1))"
]
},
{
@@ -1516,15 +1541,17 @@
],
"source": [
"plt.figure(dpi=200)\n",
- "plt.pcolormesh(kxs, wvls, Rmeep, cmap='inferno', shading='gouraud', vmin=0, vmax=Rmeep.max())\n",
- "plt.axis([kxs[0,0], kxs[0,-1], wvl_min, wvl_max])\n",
- "plt.yticks([t for t in np.linspace(0.4,0.8,5)])\n",
+ "plt.pcolormesh(\n",
+ " kxs, wvls, Rmeep, cmap=\"inferno\", shading=\"gouraud\", vmin=0, vmax=Rmeep.max()\n",
+ ")\n",
+ "plt.axis([kxs[0, 0], kxs[0, -1], wvl_min, wvl_max])\n",
+ "plt.yticks([t for t in np.linspace(0.4, 0.8, 5)])\n",
"plt.xlabel(r\"Bloch-periodic wavevector (k$_x$/2π)\")\n",
"plt.ylabel(\"wavelength (μm)\")\n",
"plt.title(\"reflectance (meep)\")\n",
"cbar = plt.colorbar()\n",
- "cbar.set_ticks([t for t in np.linspace(0,0.4,5)])\n",
- "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in np.linspace(0,0.4,5)])"
+ "cbar.set_ticks([t for t in np.linspace(0, 0.4, 5)])\n",
+ "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in np.linspace(0, 0.4, 5)])"
]
},
{
@@ -1547,16 +1574,18 @@
],
"source": [
"plt.figure(dpi=200)\n",
- "plt.pcolormesh(thetas, wvls, Rmeep, cmap='inferno', shading='gouraud', vmin=0, vmax=Rmeep.max())\n",
+ "plt.pcolormesh(\n",
+ " thetas, wvls, Rmeep, cmap=\"inferno\", shading=\"gouraud\", vmin=0, vmax=Rmeep.max()\n",
+ ")\n",
"plt.axis([thetas.min(), thetas.max(), wvl_min, wvl_max])\n",
- "plt.xticks([t for t in range(0,100,20)])\n",
- "plt.yticks([t for t in np.linspace(0.4,0.8,5)])\n",
+ "plt.xticks([t for t in range(0, 100, 20)])\n",
+ "plt.yticks([t for t in np.linspace(0.4, 0.8, 5)])\n",
"plt.xlabel(\"angle of incident planewave (degrees)\")\n",
"plt.ylabel(\"wavelength (μm)\")\n",
"plt.title(\"reflectance (meep)\")\n",
"cbar = plt.colorbar()\n",
- "cbar.set_ticks([t for t in np.linspace(0,0.4,5)])\n",
- "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in np.linspace(0,0.4,5)])"
+ "cbar.set_ticks([t for t in np.linspace(0, 0.4, 5)])\n",
+ "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in np.linspace(0, 0.4, 5)])"
]
},
{
@@ -1578,33 +1607,47 @@
}
],
"source": [
- "n1=1\n",
- "n2=3.5\n",
+ "n1 = 1\n",
+ "n2 = 3.5\n",
"\n",
"# compute angle of refracted planewave in medium n2\n",
"# for incident planewave in medium n1 at angle theta_in\n",
- "theta_out = lambda theta_in: math.asin(n1*math.sin(theta_in)/n2)\n",
+ "theta_out = lambda theta_in: math.asin(n1 * math.sin(theta_in) / n2)\n",
"\n",
"# compute Fresnel reflectance for P-polarization in medium n2\n",
"# for incident planewave in medium n1 at angle theta_in\n",
- "Rfresnel = lambda theta_in: math.fabs((n1*math.cos(theta_out(theta_in))-n2*math.cos(theta_in))/(n1*math.cos(theta_out(theta_in))+n2*math.cos(theta_in)))**2\n",
+ "Rfresnel = (\n",
+ " lambda theta_in: math.fabs(\n",
+ " (n1 * math.cos(theta_out(theta_in)) - n2 * math.cos(theta_in))\n",
+ " / (n1 * math.cos(theta_out(theta_in)) + n2 * math.cos(theta_in))\n",
+ " )\n",
+ " ** 2\n",
+ ")\n",
"\n",
"Ranalytic = np.empty((nfreq, theta_in.size))\n",
"for m in range(wvl.size):\n",
" for n in range(theta_in.size):\n",
- " Ranalytic[m,n] = Rfresnel(math.radians(thetas[m,n]))\n",
+ " Ranalytic[m, n] = Rfresnel(math.radians(thetas[m, n]))\n",
"\n",
"plt.figure(dpi=200)\n",
- "plt.pcolormesh(thetas, wvls, Ranalytic, cmap='inferno', shading='gouraud', vmin=0, vmax=Ranalytic.max())\n",
+ "plt.pcolormesh(\n",
+ " thetas,\n",
+ " wvls,\n",
+ " Ranalytic,\n",
+ " cmap=\"inferno\",\n",
+ " shading=\"gouraud\",\n",
+ " vmin=0,\n",
+ " vmax=Ranalytic.max(),\n",
+ ")\n",
"plt.axis([thetas.min(), thetas.max(), wvl_min, wvl_max])\n",
- "plt.xticks([t for t in range(0,100,20)])\n",
- "plt.yticks([t for t in np.linspace(0.4,0.8,5)])\n",
+ "plt.xticks([t for t in range(0, 100, 20)])\n",
+ "plt.yticks([t for t in np.linspace(0.4, 0.8, 5)])\n",
"plt.xlabel(\"angle of incident planewave (degrees)\")\n",
"plt.ylabel(\"wavelength (μm)\")\n",
"plt.title(\"reflectance (analytic)\")\n",
"cbar = plt.colorbar()\n",
- "cbar.set_ticks([t for t in np.linspace(0,0.4,5)])\n",
- "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in np.linspace(0,0.4,5)])"
+ "cbar.set_ticks([t for t in np.linspace(0, 0.4, 5)])\n",
+ "cbar.set_ticklabels([\"{:.1f}\".format(t) for t in np.linspace(0, 0.4, 5)])"
]
}
],
diff --git a/python/examples/refl-angular.py b/python/examples/refl-angular.py
index 316beca8a..55230fb4c 100644
--- a/python/examples/refl-angular.py
+++ b/python/examples/refl-angular.py
@@ -6,74 +6,104 @@
def main(args):
resolution = args.res
- dpml = 1.0 # PML thickness
- sz = 10 + 2*dpml # size of computational cell (without PMLs)
- cell_size = mp.Vector3(0,0,sz)
+ dpml = 1.0 # PML thickness
+ sz = 10 + 2 * dpml # size of computational cell (without PMLs)
+ cell_size = mp.Vector3(0, 0, sz)
pml_layers = [mp.PML(dpml)]
- wvl_min = 0.4 # min wavelength
- wvl_max = 0.8 # max wavelength
- fmin = 1/wvl_max # min frequency
- fmax = 1/wvl_min # max frequency
- fcen = 0.5*(fmin+fmax) # center frequency
- df = fmax-fmin # frequency width
- nfreq = 50 # number of frequency bins
+ wvl_min = 0.4 # min wavelength
+ wvl_max = 0.8 # max wavelength
+ fmin = 1 / wvl_max # min frequency
+ fmax = 1 / wvl_min # max frequency
+ fcen = 0.5 * (fmin + fmax) # center frequency
+ df = fmax - fmin # frequency width
+ nfreq = 50 # number of frequency bins
# rotation angle (in degrees) of source: CCW around Y axis, 0 degrees along +Z axis
theta_r = math.radians(args.theta)
# plane of incidence is XZ
- k = mp.Vector3(math.sin(theta_r),0,math.cos(theta_r)).scale(fmin)
+ k = mp.Vector3(math.sin(theta_r), 0, math.cos(theta_r)).scale(fmin)
# if normal incidence, force number of dimensions to be 1
dimensions = 1 if theta_r == 0 else 3
- sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
- component=mp.Ex,
- center=mp.Vector3(0,0,-0.5*sz+dpml))]
-
- sim = mp.Simulation(cell_size=cell_size,
- boundary_layers=pml_layers,
- sources=sources,
- k_point=k,
- dimensions=dimensions,
- resolution=resolution)
-
- refl_fr = mp.FluxRegion(center=mp.Vector3(0,0,-0.25*sz))
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ex,
+ center=mp.Vector3(0, 0, -0.5 * sz + dpml),
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ sources=sources,
+ k_point=k,
+ dimensions=dimensions,
+ resolution=resolution,
+ )
+
+ refl_fr = mp.FluxRegion(center=mp.Vector3(0, 0, -0.25 * sz))
refl = sim.add_flux(fcen, df, nfreq, refl_fr)
- sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(0,0,-0.5*sz+dpml), 1e-9))
+ sim.run(
+ until_after_sources=mp.stop_when_fields_decayed(
+ 50, mp.Ex, mp.Vector3(0, 0, -0.5 * sz + dpml), 1e-9
+ )
+ )
empty_flux = mp.get_fluxes(refl)
empty_data = sim.get_flux_data(refl)
sim.reset_meep()
# add a block with n=3.5 for the air-dielectric interface
- geometry = [mp.Block(size=mp.Vector3(mp.inf,mp.inf,0.5*sz),
- center=mp.Vector3(0,0,0.25*sz),
- material=mp.Medium(index=3.5))]
-
- sim = mp.Simulation(cell_size=cell_size,
- geometry=geometry,
- boundary_layers=pml_layers,
- sources=sources,
- k_point=k,
- dimensions=dimensions,
- resolution=resolution)
+ geometry = [
+ mp.Block(
+ size=mp.Vector3(mp.inf, mp.inf, 0.5 * sz),
+ center=mp.Vector3(0, 0, 0.25 * sz),
+ material=mp.Medium(index=3.5),
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ geometry=geometry,
+ boundary_layers=pml_layers,
+ sources=sources,
+ k_point=k,
+ dimensions=dimensions,
+ resolution=resolution,
+ )
refl = sim.add_flux(fcen, df, nfreq, refl_fr)
sim.load_minus_flux_data(refl, empty_data)
- sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(0,0,-0.5*sz+dpml), 1e-9))
+ sim.run(
+ until_after_sources=mp.stop_when_fields_decayed(
+ 50, mp.Ex, mp.Vector3(0, 0, -0.5 * sz + dpml), 1e-9
+ )
+ )
refl_flux = mp.get_fluxes(refl)
freqs = mp.get_flux_freqs(refl)
for i in range(nfreq):
- print(f"refl:, {k.x}, {1 / freqs[i]}, {math.degrees(math.asin(k.x/freqs[i]))}, {-refl_flux[i] / empty_flux[i]}")
+ print(
+ f"refl:, {k.x}, {1 / freqs[i]}, {math.degrees(math.asin(k.x/freqs[i]))}, {-refl_flux[i] / empty_flux[i]}"
+ )
-if __name__ == '__main__':
+
+if __name__ == "__main__":
parser = argparse.ArgumentParser()
- parser.add_argument('-res', type=int, default=200, help='resolution (default: 200 pixels/um)')
- parser.add_argument('-theta', type=float, default=0, help='angle of incident planewave (default: 0 degrees)')
+ parser.add_argument(
+ "-res", type=int, default=200, help="resolution (default: 200 pixels/um)"
+ )
+ parser.add_argument(
+ "-theta",
+ type=float,
+ default=0,
+ help="angle of incident planewave (default: 0 degrees)",
+ )
args = parser.parse_args()
main(args)
diff --git a/python/examples/refl-quartz.ipynb b/python/examples/refl-quartz.ipynb
index fcf26bf51..e11604456 100644
--- a/python/examples/refl-quartz.ipynb
+++ b/python/examples/refl-quartz.ipynb
@@ -68,27 +68,35 @@
"resolution = 200 # pixels/μm\n",
"\n",
"dpml = 1.0\n",
- "sz = 10+2*dpml\n",
+ "sz = 10 + 2 * dpml\n",
"cell_size = mp.Vector3(z=sz)\n",
"pml_layers = [mp.PML(dpml)]\n",
"\n",
"wvl_min = 0.4\n",
"wvl_max = 0.8\n",
- "fmin = 1/wvl_max\n",
- "fmax = 1/wvl_min\n",
- "fcen = 0.5*(fmax+fmin)\n",
- "df = fmax-fmin\n",
+ "fmin = 1 / wvl_max\n",
+ "fmax = 1 / wvl_min\n",
+ "fcen = 0.5 * (fmax + fmin)\n",
+ "df = fmax - fmin\n",
"nfreq = 50\n",
"\n",
- "sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df), component=mp.Ex, center=mp.Vector3(z=-0.5*sz+dpml))]\n",
- "\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " sources=sources,\n",
- " dimensions=1,\n",
- " resolution=resolution)\n",
- "\n",
- "refl_fr = mp.FluxRegion(center=mp.Vector3(z=-0.25*sz))\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ex,\n",
+ " center=mp.Vector3(z=-0.5 * sz + dpml),\n",
+ " )\n",
+ "]\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " sources=sources,\n",
+ " dimensions=1,\n",
+ " resolution=resolution,\n",
+ ")\n",
+ "\n",
+ "refl_fr = mp.FluxRegion(center=mp.Vector3(z=-0.25 * sz))\n",
"refl = sim.add_flux(fcen, df, nfreq, refl_fr)\n",
"\n",
"sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(), 1e-9))\n",
@@ -97,14 +105,22 @@
"empty_data = sim.get_flux_data(refl)\n",
"sim.reset_meep()\n",
"\n",
- "geometry = [mp.Block(mp.Vector3(mp.inf,mp.inf,0.5*sz), center=mp.Vector3(z=0.25*sz), material=fused_quartz)]\n",
- "\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=sources,\n",
- " dimensions=1,\n",
- " resolution=resolution)\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " mp.Vector3(mp.inf, mp.inf, 0.5 * sz),\n",
+ " center=mp.Vector3(z=0.25 * sz),\n",
+ " material=fused_quartz,\n",
+ " )\n",
+ "]\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=sources,\n",
+ " dimensions=1,\n",
+ " resolution=resolution,\n",
+ ")\n",
"\n",
"refl = sim.add_flux(fcen, df, nfreq, refl_fr)\n",
"sim.load_minus_flux_data(refl, empty_data)\n",
@@ -112,7 +128,7 @@
"sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(), 1e-9))\n",
"\n",
"refl_flux = mp.get_fluxes(refl)\n",
- "R_meep = -1*np.divide(refl_flux,empty_flux)"
+ "R_meep = -1 * np.divide(refl_flux, empty_flux)"
]
},
{
@@ -142,20 +158,27 @@
],
"source": [
"freqs = mp.get_flux_freqs(refl)\n",
- "wvls = np.divide(1,freqs)\n",
- "\n",
- "eps_quartz = lambda l: 1+0.6961663*math.pow(l,2)/(pow(l,2)-pow(0.0684043,2))+0.4079426*pow(l,2)/(pow(l,2)-pow(0.1162414,2))+0.8974794*pow(l,2)/(pow(l,2)-pow(9.896161,2))\n",
- "R_fresnel = lambda l: math.pow(math.fabs(1-math.sqrt(eps_quartz(l)))/(1+math.sqrt(eps_quartz(l))),2)\n",
+ "wvls = np.divide(1, freqs)\n",
+ "\n",
+ "eps_quartz = (\n",
+ " lambda l: 1\n",
+ " + 0.6961663 * math.pow(l, 2) / (pow(l, 2) - pow(0.0684043, 2))\n",
+ " + 0.4079426 * pow(l, 2) / (pow(l, 2) - pow(0.1162414, 2))\n",
+ " + 0.8974794 * pow(l, 2) / (pow(l, 2) - pow(9.896161, 2))\n",
+ ")\n",
+ "R_fresnel = lambda l: math.pow(\n",
+ " math.fabs(1 - math.sqrt(eps_quartz(l))) / (1 + math.sqrt(eps_quartz(l))), 2\n",
+ ")\n",
"R_analytic = [R_fresnel(i) for i in wvls]\n",
"\n",
"plt.figure()\n",
- "plt.plot(wvls,R_meep,'bo-',label='meep')\n",
- "plt.plot(wvls,R_analytic,'rs-',label='analytic')\n",
+ "plt.plot(wvls, R_meep, \"bo-\", label=\"meep\")\n",
+ "plt.plot(wvls, R_analytic, \"rs-\", label=\"analytic\")\n",
"plt.xlabel(\"wavelength (μm)\")\n",
"plt.ylabel(\"reflectance\")\n",
"plt.axis([0.4, 0.8, 0.0340, 0.0365])\n",
- "plt.xticks([t for t in np.arange(0.4,0.9,0.1)])\n",
- "plt.legend(loc='upper right')\n",
+ "plt.xticks([t for t in np.arange(0.4, 0.9, 0.1)])\n",
+ "plt.legend(loc=\"upper right\")\n",
"plt.show()"
]
}
diff --git a/python/examples/refl-quartz.py b/python/examples/refl-quartz.py
index 859b9149d..76ec061af 100644
--- a/python/examples/refl-quartz.py
+++ b/python/examples/refl-quartz.py
@@ -9,27 +9,35 @@
resolution = 200 # pixels/μm
dpml = 1.0
-sz = 10+2*dpml
+sz = 10 + 2 * dpml
cell_size = mp.Vector3(z=sz)
pml_layers = [mp.PML(dpml)]
wvl_min = 0.4
wvl_max = 0.8
-fmin = 1/wvl_max
-fmax = 1/wvl_min
-fcen = 0.5*(fmax+fmin)
-df = fmax-fmin
+fmin = 1 / wvl_max
+fmax = 1 / wvl_min
+fcen = 0.5 * (fmax + fmin)
+df = fmax - fmin
nfreq = 50
-sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df), component=mp.Ex, center=mp.Vector3(z=-0.5*sz+dpml))]
-
-sim = mp.Simulation(cell_size=cell_size,
- boundary_layers=pml_layers,
- sources=sources,
- dimensions=1,
- resolution=resolution)
-
-refl_fr = mp.FluxRegion(center=mp.Vector3(z=-0.25*sz))
+sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ex,
+ center=mp.Vector3(z=-0.5 * sz + dpml),
+ )
+]
+
+sim = mp.Simulation(
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ sources=sources,
+ dimensions=1,
+ resolution=resolution,
+)
+
+refl_fr = mp.FluxRegion(center=mp.Vector3(z=-0.25 * sz))
refl = sim.add_flux(fcen, df, nfreq, refl_fr)
sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(), 1e-9))
@@ -38,14 +46,22 @@
empty_data = sim.get_flux_data(refl)
sim.reset_meep()
-geometry = [mp.Block(mp.Vector3(mp.inf,mp.inf,0.5*sz), center=mp.Vector3(z=0.25*sz), material=fused_quartz)]
-
-sim = mp.Simulation(cell_size=cell_size,
- boundary_layers=pml_layers,
- geometry=geometry,
- sources=sources,
- dimensions=1,
- resolution=resolution)
+geometry = [
+ mp.Block(
+ mp.Vector3(mp.inf, mp.inf, 0.5 * sz),
+ center=mp.Vector3(z=0.25 * sz),
+ material=fused_quartz,
+ )
+]
+
+sim = mp.Simulation(
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ sources=sources,
+ dimensions=1,
+ resolution=resolution,
+)
refl = sim.add_flux(fcen, df, nfreq, refl_fr)
sim.load_minus_flux_data(refl, empty_data)
@@ -53,21 +69,28 @@
sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(), 1e-9))
refl_flux = mp.get_fluxes(refl)
-R_meep = -1*np.divide(refl_flux,empty_flux)
+R_meep = -1 * np.divide(refl_flux, empty_flux)
freqs = mp.get_flux_freqs(refl)
-wvls = np.divide(1,freqs)
-
-eps_quartz = lambda l: 1+0.6961663*math.pow(l,2)/(pow(l,2)-pow(0.0684043,2))+0.4079426*pow(l,2)/(pow(l,2)-pow(0.1162414,2))+0.8974794*pow(l,2)/(pow(l,2)-pow(9.896161,2))
-R_fresnel = lambda l: math.pow(math.fabs(1-math.sqrt(eps_quartz(l)))/(1+math.sqrt(eps_quartz(l))),2)
+wvls = np.divide(1, freqs)
+
+eps_quartz = (
+ lambda l: 1
+ + 0.6961663 * math.pow(l, 2) / (pow(l, 2) - pow(0.0684043, 2))
+ + 0.4079426 * pow(l, 2) / (pow(l, 2) - pow(0.1162414, 2))
+ + 0.8974794 * pow(l, 2) / (pow(l, 2) - pow(9.896161, 2))
+)
+R_fresnel = lambda l: math.pow(
+ math.fabs(1 - math.sqrt(eps_quartz(l))) / (1 + math.sqrt(eps_quartz(l))), 2
+)
R_analytic = [R_fresnel(i) for i in wvls]
plt.figure()
-plt.plot(wvls,R_meep,'bo-',label='meep')
-plt.plot(wvls,R_analytic,'rs-',label='analytic')
+plt.plot(wvls, R_meep, "bo-", label="meep")
+plt.plot(wvls, R_analytic, "rs-", label="analytic")
plt.xlabel("wavelength (μm)")
plt.ylabel("reflectance")
plt.axis([0.4, 0.8, 0.0340, 0.0365])
-plt.xticks(list(np.arange(0.4,0.9,0.1)))
-plt.legend(loc='upper right')
+plt.xticks(list(np.arange(0.4, 0.9, 0.1)))
+plt.legend(loc="upper right")
plt.show()
diff --git a/python/examples/ring-cyl.py b/python/examples/ring-cyl.py
index d4eafd4dd..843535a2a 100644
--- a/python/examples/ring-cyl.py
+++ b/python/examples/ring-cyl.py
@@ -5,13 +5,14 @@
import meep as mp
import argparse
+
def main(args):
- n = 3.4 # index of waveguide
- w = 1 # width of waveguide
- r = 1 # inner radius of ring
- pad = 4 # padding between waveguide and edge of PML
- dpml = 32 # thickness of PML
+ n = 3.4 # index of waveguide
+ w = 1 # width of waveguide
+ r = 1 # inner radius of ring
+ pad = 4 # padding between waveguide and edge of PML
+ dpml = 32 # thickness of PML
sr = r + w + pad + dpml # radial size (cell is from 0 to sr)
dimensions = mp.CYLINDRICAL
@@ -21,9 +22,13 @@ def main(args):
# is given by exp(i m phi), where m is given by:
m = args.m
- geometry = [mp.Block(center=mp.Vector3(r + (w / 2)),
- size=mp.Vector3(w, mp.inf, mp.inf),
- material=mp.Medium(index=n))]
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(r + (w / 2)),
+ size=mp.Vector3(w, mp.inf, mp.inf),
+ material=mp.Medium(index=n),
+ )
+ ]
pml_layers = [mp.PML(dpml)]
resolution = 20
@@ -33,38 +38,58 @@ def main(args):
# arbitrary direction. We will only look for Ez-polarized modes.
fcen = args.fcen # pulse center frequency
- df = args.df # pulse frequency width
- sources = [mp.Source(src=mp.GaussianSource(fcen, fwidth=df),
- component=mp.Ez,
- center=mp.Vector3(r + 0.1))]
+ df = args.df # pulse frequency width
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=mp.Vector3(r + 0.1),
+ )
+ ]
# note that the r -> -r mirror symmetry is exploited automatically
- sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- boundary_layers=pml_layers,
- resolution=resolution,
- sources=sources,
- dimensions=dimensions,
- m=m)
+ sim = mp.Simulation(
+ cell_size=cell,
+ geometry=geometry,
+ boundary_layers=pml_layers,
+ resolution=resolution,
+ sources=sources,
+ dimensions=dimensions,
+ m=m,
+ )
- sim.run(mp.after_sources(mp.Harminv(mp.Ez, mp.Vector3(r + 0.1), fcen, df)),
- until_after_sources=200)
+ sim.run(
+ mp.after_sources(mp.Harminv(mp.Ez, mp.Vector3(r + 0.1), fcen, df)),
+ until_after_sources=200,
+ )
# Output fields for one period at the end. (If we output
# at a single time, we might accidentally catch the Ez field when it is
# almost zero and get a distorted view.) We'll append the fields
# to a file to get an r-by-t picture. We'll also output from -sr to -sr
# instead of from 0 to sr.
- sim.run(mp.in_volume(mp.Volume(center=mp.Vector3(), size=mp.Vector3(2 * sr)),
- mp.at_beginning(mp.output_epsilon),
- mp.to_appended("ez", mp.at_every(1 / fcen / 20, mp.output_efield_z))),
- until=1 / fcen)
+ sim.run(
+ mp.in_volume(
+ mp.Volume(center=mp.Vector3(), size=mp.Vector3(2 * sr)),
+ mp.at_beginning(mp.output_epsilon),
+ mp.to_appended("ez", mp.at_every(1 / fcen / 20, mp.output_efield_z)),
+ ),
+ until=1 / fcen,
+ )
+
-if __name__ == '__main__':
+if __name__ == "__main__":
parser = argparse.ArgumentParser()
- parser.add_argument('-fcen', type=float, default=0.15, help='pulse center frequency')
- parser.add_argument('-df', type=float, default=0.1, help='pulse frequency width')
- parser.add_argument('-m', type=int, default=3, help='phi (angular) dependence of the fields given by exp(i m phi)')
+ parser.add_argument(
+ "-fcen", type=float, default=0.15, help="pulse center frequency"
+ )
+ parser.add_argument("-df", type=float, default=0.1, help="pulse frequency width")
+ parser.add_argument(
+ "-m",
+ type=int,
+ default=3,
+ help="phi (angular) dependence of the fields given by exp(i m phi)",
+ )
args = parser.parse_args()
main(args)
diff --git a/python/examples/ring-mode-overlap.py b/python/examples/ring-mode-overlap.py
index 336cab4e9..4617e81b9 100644
--- a/python/examples/ring-mode-overlap.py
+++ b/python/examples/ring-mode-overlap.py
@@ -17,7 +17,7 @@
# and the inner (air) cylinder second.
geometry = [
mp.Cylinder(radius=r + w, height=mp.inf, material=mp.Medium(index=n)),
- mp.Cylinder(radius=r, height=mp.inf, material=mp.air)
+ mp.Cylinder(radius=r, height=mp.inf, material=mp.air),
]
pml_layers = [mp.PML(dpml)]
@@ -28,19 +28,26 @@
# arbitrary direction. We will only look for Ez-polarized modes.
fcen = 0.118 # pulse center frequency
-df = 0.010 # pulse width (in frequency)
-sources = [mp.Source(src=mp.GaussianSource(fcen, fwidth=df), component=mp.Ez,
- center=mp.Vector3(r + 0.1))]
+df = 0.010 # pulse width (in frequency)
+sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=mp.Vector3(r + 0.1),
+ )
+]
# exploit the mirror symmetry in structure+source:
symmetries = [mp.Mirror(mp.Y)]
-sim = mp.Simulation(cell_size=cell,
- resolution=resolution,
- geometry=geometry,
- boundary_layers=pml_layers,
- sources=sources,
- symmetries=symmetries)
+sim = mp.Simulation(
+ cell_size=cell,
+ resolution=resolution,
+ geometry=geometry,
+ boundary_layers=pml_layers,
+ sources=sources,
+ symmetries=symmetries,
+)
h1 = mp.Harminv(mp.Ez, mp.Vector3(r + 0.1), fcen, df)
sim.run(mp.after_sources(h1), until_after_sources=300)
@@ -56,5 +63,6 @@
def overlap_integral(r, ez1, ez2):
return ez1.conjugate() * ez2
+
res = sim.integrate2_field_function(fields2, [mp.Ez], [mp.Ez], overlap_integral)
print(f"overlap integral of mode at w and 2w: {abs(res)}")
diff --git a/python/examples/ring.ipynb b/python/examples/ring.ipynb
index 18b1fd4e7..e4a8090bf 100644
--- a/python/examples/ring.ipynb
+++ b/python/examples/ring.ipynb
@@ -32,16 +32,17 @@
"source": [
"import meep as mp\n",
"import matplotlib.pyplot as plt\n",
+ "\n",
"%matplotlib inline\n",
"import numpy as np\n",
"from IPython.display import Video\n",
"\n",
- "n = 3.4 # index of waveguide\n",
- "w = 1 # width of waveguide\n",
- "r = 1 # inner radius of ring\n",
- "pad = 4 # padding between waveguide and edge of PML\n",
- "dpml = 2 # thickness of PML\n",
- "sxy = 2*(r+w+pad+dpml) # cell size"
+ "n = 3.4 # index of waveguide\n",
+ "w = 1 # width of waveguide\n",
+ "r = 1 # inner radius of ring\n",
+ "pad = 4 # padding between waveguide and edge of PML\n",
+ "dpml = 2 # thickness of PML\n",
+ "sxy = 2 * (r + w + pad + dpml) # cell size"
]
},
{
@@ -57,7 +58,7 @@
"metadata": {},
"outputs": [],
"source": [
- "c1 = mp.Cylinder(radius=r+w, material=mp.Medium(index=n))\n",
+ "c1 = mp.Cylinder(radius=r + w, material=mp.Medium(index=n))\n",
"c2 = mp.Cylinder(radius=r)"
]
},
@@ -76,9 +77,9 @@
"metadata": {},
"outputs": [],
"source": [
- "fcen = 0.15 # pulse center frequency\n",
- "df = 0.1 # pulse frequency width\n",
- "src = mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r+0.1))"
+ "fcen = 0.15 # pulse center frequency\n",
+ "df = 0.1 # pulse frequency width\n",
+ "src = mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r + 0.1))"
]
},
{
@@ -119,11 +120,13 @@
}
],
"source": [
- "sim = mp.Simulation(cell_size=mp.Vector3(sxy, sxy),\n",
- " geometry=[c1, c2],\n",
- " sources=[src],\n",
- " resolution=10, \n",
- " boundary_layers=[mp.PML(dpml)])\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=mp.Vector3(sxy, sxy),\n",
+ " geometry=[c1, c2],\n",
+ " sources=[src],\n",
+ " resolution=10,\n",
+ " boundary_layers=[mp.PML(dpml)],\n",
+ ")\n",
"plt.figure(dpi=150)\n",
"sim.plot2D()\n",
"plt.show()"
@@ -155,9 +158,11 @@
}
],
"source": [
- "sim.run(mp.at_beginning(mp.output_epsilon),\n",
- " mp.after_sources(mp.Harminv(mp.Ez, mp.Vector3(r+0.1), fcen, df)),\n",
- " until_after_sources=300)"
+ "sim.run(\n",
+ " mp.at_beginning(mp.output_epsilon),\n",
+ " mp.after_sources(mp.Harminv(mp.Ez, mp.Vector3(r + 0.1), fcen, df)),\n",
+ " until_after_sources=300,\n",
+ ")"
]
},
{
@@ -228,24 +233,26 @@
],
"source": [
"sim.reset_meep()\n",
- "fcen=0.118\n",
+ "fcen = 0.118\n",
"df = 0.1\n",
- "sim.sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r+0.1))]\n",
+ "sim.sources = [\n",
+ " mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r + 0.1))\n",
+ "]\n",
"\n",
"# Start the simulation and get into steady state\n",
- "sim.run(until=600) \n",
+ "sim.run(until=600)\n",
"\n",
"# Prepare the animator and record the steady state response\n",
"f = plt.figure(dpi=150)\n",
"Animate = mp.Animate2D(sim, fields=mp.Ez, f=f, realtime=False, normalize=True)\n",
- "sim.run(mp.at_every(0.5,Animate),until=25)\n",
+ "sim.run(mp.at_every(0.5, Animate), until=25)\n",
"\n",
"# Close the animator's working frame\n",
"plt.close()\n",
"\n",
"# Process the animation and view it\n",
"filename = \"media/ring_simple.mp4\"\n",
- "Animate.to_mp4(5,filename)\n",
+ "Animate.to_mp4(5, filename)\n",
"Video(filename)"
]
},
@@ -295,25 +302,27 @@
],
"source": [
"sim.reset_meep()\n",
- "fcen=0.147\n",
+ "fcen = 0.147\n",
"df = 0.1\n",
- "sim.sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r+0.1))]\n",
+ "sim.sources = [\n",
+ " mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r + 0.1))\n",
+ "]\n",
"sim.init_sim()\n",
"\n",
"# Start the simulation and get into steady state\n",
- "sim.run(until=500) \n",
+ "sim.run(until=500)\n",
"\n",
"# Prepare the animator and record the steady state response\n",
"f = plt.figure(dpi=150)\n",
"Animate = mp.Animate2D(sim, fields=mp.Ez, f=f, realtime=False, normalize=True)\n",
- "sim.run(mp.at_every(0.5,Animate),until=25)\n",
+ "sim.run(mp.at_every(0.5, Animate), until=25)\n",
"\n",
"# Close the animator's working frame\n",
"plt.close()\n",
"\n",
"# Process the animation and view it\n",
"filename = \"media/ring_mid.mp4\"\n",
- "Animate.to_mp4(5,filename)\n",
+ "Animate.to_mp4(5, filename)\n",
"Video(filename)"
]
},
@@ -363,24 +372,26 @@
],
"source": [
"sim.reset_meep()\n",
- "fcen=0.175\n",
+ "fcen = 0.175\n",
"df = 0.1\n",
- "sim.sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r+0.1))]\n",
+ "sim.sources = [\n",
+ " mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r + 0.1))\n",
+ "]\n",
"\n",
"# Start the simulation and get into steady state\n",
- "sim.run(until=500) \n",
+ "sim.run(until=500)\n",
"\n",
"# Prepare the animator and record the steady state response\n",
"f = plt.figure(dpi=150)\n",
"Animate = mp.Animate2D(sim, fields=mp.Ez, f=f, realtime=False, normalize=True)\n",
- "sim.run(mp.at_every(0.5,Animate),until=25)\n",
+ "sim.run(mp.at_every(0.5, Animate), until=25)\n",
"\n",
"# Close the animator's working frame\n",
"plt.close()\n",
"\n",
"# Process the animation and view it\n",
"filename = \"media/ring_large.mp4\"\n",
- "Animate.to_mp4(5,filename)\n",
+ "Animate.to_mp4(5, filename)\n",
"Video(filename)"
]
}
diff --git a/python/examples/ring.py b/python/examples/ring.py
index 1c2b2dbd4..ad3a589ef 100644
--- a/python/examples/ring.py
+++ b/python/examples/ring.py
@@ -3,45 +3,51 @@
import meep as mp
+
def main():
- n = 3.4 # index of waveguide
- w = 1 # width of waveguide
- r = 1 # inner radius of ring
- pad = 4 # padding between waveguide and edge of PML
- dpml = 2 # thickness of PML
- sxy = 2*(r+w+pad+dpml) # cell size
+ n = 3.4 # index of waveguide
+ w = 1 # width of waveguide
+ r = 1 # inner radius of ring
+ pad = 4 # padding between waveguide and edge of PML
+ dpml = 2 # thickness of PML
+ sxy = 2 * (r + w + pad + dpml) # cell size
# Create a ring waveguide by two overlapping cylinders - later objects
# take precedence over earlier objects, so we put the outer cylinder first.
# and the inner (air) cylinder second.
- c1 = mp.Cylinder(radius=r+w, material=mp.Medium(index=n))
+ c1 = mp.Cylinder(radius=r + w, material=mp.Medium(index=n))
c2 = mp.Cylinder(radius=r)
# If we don't want to excite a specific mode symmetry, we can just
# put a single point source at some arbitrary place, pointing in some
# arbitrary direction. We will only look for Ez-polarized modes.
- fcen = 0.15 # pulse center frequency
- df = 0.1 # pulse width (in frequency)
+ fcen = 0.15 # pulse center frequency
+ df = 0.1 # pulse width (in frequency)
- src = mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r+0.1))
+ src = mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r + 0.1))
- sim = mp.Simulation(cell_size=mp.Vector3(sxy, sxy),
- geometry=[c1, c2],
- sources=[src],
- resolution=10,
- symmetries=[mp.Mirror(mp.Y)],
- boundary_layers=[mp.PML(dpml)])
+ sim = mp.Simulation(
+ cell_size=mp.Vector3(sxy, sxy),
+ geometry=[c1, c2],
+ sources=[src],
+ resolution=10,
+ symmetries=[mp.Mirror(mp.Y)],
+ boundary_layers=[mp.PML(dpml)],
+ )
- sim.run(mp.at_beginning(mp.output_epsilon),
- mp.after_sources(mp.Harminv(mp.Ez, mp.Vector3(r+0.1), fcen, df)),
- until_after_sources=300)
+ sim.run(
+ mp.at_beginning(mp.output_epsilon),
+ mp.after_sources(mp.Harminv(mp.Ez, mp.Vector3(r + 0.1), fcen, df)),
+ until_after_sources=300,
+ )
# Output fields for one period at the end. (If we output
# at a single time, we might accidentally catch the Ez field when it is
# almost zero and get a distorted view.)
- sim.run(mp.at_every(1/fcen/20, mp.output_efield_z), until=1/fcen)
+ sim.run(mp.at_every(1 / fcen / 20, mp.output_efield_z), until=1 / fcen)
+
-if __name__ == '__main__':
+if __name__ == "__main__":
main()
diff --git a/python/examples/ring_gds.py b/python/examples/ring_gds.py
index 47e17f0e4..7f44c98b9 100644
--- a/python/examples/ring_gds.py
+++ b/python/examples/ring_gds.py
@@ -5,99 +5,111 @@
import meep as mp
# core and cladding materials
-Si = mp.Medium(index=3.4)
+Si = mp.Medium(index=3.4)
SiO2 = mp.Medium(index=1.4)
# layer numbers for GDS file
-RING_LAYER = 0
-SOURCE0_LAYER = 1
-SOURCE1_LAYER = 2
-MONITOR_LAYER = 3
+RING_LAYER = 0
+SOURCE0_LAYER = 1
+SOURCE1_LAYER = 2
+MONITOR_LAYER = 3
SIMULATION_LAYER = 4
-resolution = 50 # pixels/μm
-dpml = 1 # thickness of PML
-zmin = 0 # minimum z value of simulation domain (0 for 2D)
-zmax = 0 # maximum z value of simulation domain (0 for 2D)
+resolution = 50 # pixels/μm
+dpml = 1 # thickness of PML
+zmin = 0 # minimum z value of simulation domain (0 for 2D)
+zmax = 0 # maximum z value of simulation domain (0 for 2D)
-def create_ring_gds(radius,width):
+
+def create_ring_gds(radius, width):
# Reload the library each time to prevent gds library name clashes
importlib.reload(gdspy)
ringCell = gdspy.Cell(f"ring_resonator_r{radius}_w{width}")
# Draw the ring
- ringCell.add(gdspy.Round((0,0),
- inner_radius=radius-width/2,
- radius=radius+width/2,
- layer=RING_LAYER))
+ ringCell.add(
+ gdspy.Round(
+ (0, 0),
+ inner_radius=radius - width / 2,
+ radius=radius + width / 2,
+ layer=RING_LAYER,
+ )
+ )
# Draw the first source
- ringCell.add(gdspy.Rectangle((radius-width,0),
- (radius+width,0),
- SOURCE0_LAYER))
+ ringCell.add(
+ gdspy.Rectangle((radius - width, 0), (radius + width, 0), SOURCE0_LAYER)
+ )
# Draw the second source
- ringCell.add(gdspy.Rectangle((-radius-width,0),
- (-radius+width,0),
- SOURCE1_LAYER))
+ ringCell.add(
+ gdspy.Rectangle((-radius - width, 0), (-radius + width, 0), SOURCE1_LAYER)
+ )
# Draw the monitor location
- ringCell.add(gdspy.Rectangle((radius-width/2,0),
- (radius+width/2,0),
- MONITOR_LAYER))
+ ringCell.add(
+ gdspy.Rectangle((radius - width / 2, 0), (radius + width / 2, 0), MONITOR_LAYER)
+ )
# Draw the simulation domain
pad = 2 # padding between waveguide and edge of PML
- ringCell.add(gdspy.Rectangle((-radius-width/2-pad,-radius-width/2-pad),
- (radius+width/2+pad,radius+width/2+pad),
- SIMULATION_LAYER))
+ ringCell.add(
+ gdspy.Rectangle(
+ (-radius - width / 2 - pad, -radius - width / 2 - pad),
+ (radius + width / 2 + pad, radius + width / 2 + pad),
+ SIMULATION_LAYER,
+ )
+ )
filename = f"ring_r{radius}_w{width}.gds"
gdspy.write_gds(filename, unit=1.0e-6, precision=1.0e-9)
return filename
-def find_modes(filename,wvl=1.55,bw=0.05):
+
+def find_modes(filename, wvl=1.55, bw=0.05):
# Read in the ring structure
- geometry = mp.get_GDSII_prisms(Si,filename,RING_LAYER,-100,100)
+ geometry = mp.get_GDSII_prisms(Si, filename, RING_LAYER, -100, 100)
- cell = mp.GDSII_vol(filename,SIMULATION_LAYER,zmin,zmax)
+ cell = mp.GDSII_vol(filename, SIMULATION_LAYER, zmin, zmax)
- src_vol0 = mp.GDSII_vol(filename,SOURCE0_LAYER,zmin,zmax)
- src_vol1 = mp.GDSII_vol(filename,SOURCE1_LAYER,zmin,zmax)
+ src_vol0 = mp.GDSII_vol(filename, SOURCE0_LAYER, zmin, zmax)
+ src_vol1 = mp.GDSII_vol(filename, SOURCE1_LAYER, zmin, zmax)
- mon_vol = mp.GDSII_vol(filename,MONITOR_LAYER,zmin,zmax)
+ mon_vol = mp.GDSII_vol(filename, MONITOR_LAYER, zmin, zmax)
- fcen = 1/wvl
- df = bw*fcen
+ fcen = 1 / wvl
+ df = bw * fcen
- src = [mp.Source(mp.GaussianSource(fcen, fwidth=df),
- component=mp.Hz,
- volume=src_vol0),
- mp.Source(mp.GaussianSource(fcen, fwidth=df),
- component=mp.Hz,
- volume=src_vol1,
- amplitude=-1)]
+ src = [
+ mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Hz, volume=src_vol0),
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Hz,
+ volume=src_vol1,
+ amplitude=-1,
+ ),
+ ]
- sim = mp.Simulation(cell_size=cell.size,
- geometry=geometry,
- sources=src,
- resolution=resolution,
- boundary_layers=[mp.PML(dpml)],
- default_material=SiO2)
+ sim = mp.Simulation(
+ cell_size=cell.size,
+ geometry=geometry,
+ sources=src,
+ resolution=resolution,
+ boundary_layers=[mp.PML(dpml)],
+ default_material=SiO2,
+ )
- h = mp.Harminv(mp.Hz,mon_vol.center,fcen,df)
+ h = mp.Harminv(mp.Hz, mon_vol.center, fcen, df)
- sim.run(mp.after_sources(h),
- until_after_sources=100)
+ sim.run(mp.after_sources(h), until_after_sources=100)
plt.figure()
- sim.plot2D(fields=mp.Hz,
- eps_parameters={'contour':True})
- plt.savefig('ring_fields.png',bbox_inches='tight',dpi=150)
+ sim.plot2D(fields=mp.Hz, eps_parameters={"contour": True})
+ plt.savefig("ring_fields.png", bbox_inches="tight", dpi=150)
- wvl = np.array([1/m.freq for m in h.modes])
+ wvl = np.array([1 / m.freq for m in h.modes])
Q = np.array([m.Q for m in h.modes])
sim.reset_meep()
@@ -105,8 +117,8 @@ def find_modes(filename,wvl=1.55,bw=0.05):
return wvl, Q
-if __name__ == '__main__':
- filename = create_ring_gds(2.0,0.5)
- wvls, Qs = find_modes(filename,1.55,0.05)
- for w, Q in zip(wvls,Qs):
+if __name__ == "__main__":
+ filename = create_ring_gds(2.0, 0.5)
+ wvls, Qs = find_modes(filename, 1.55, 0.05)
+ for w, Q in zip(wvls, Qs):
print(f"mode: {w}, {Q}")
diff --git a/python/examples/solve-cw.ipynb b/python/examples/solve-cw.ipynb
index dc1799b6b..a6823a4ab 100644
--- a/python/examples/solve-cw.ipynb
+++ b/python/examples/solve-cw.ipynb
@@ -89,36 +89,41 @@
"pad = 4\n",
"dpml = 2\n",
"\n",
- "sxy = 2*(r+w+pad+dpml)\n",
- "cell_size = mp.Vector3(sxy,sxy)\n",
+ "sxy = 2 * (r + w + pad + dpml)\n",
+ "cell_size = mp.Vector3(sxy, sxy)\n",
"\n",
"pml_layers = [mp.PML(dpml)]\n",
"\n",
- "nonpml_vol = mp.Volume(mp.Vector3(), size=mp.Vector3(sxy-2*dpml,sxy-2*dpml))\n",
+ "nonpml_vol = mp.Volume(mp.Vector3(), size=mp.Vector3(sxy - 2 * dpml, sxy - 2 * dpml))\n",
"\n",
- "geometry = [mp.Cylinder(radius=r+w, material=mp.Medium(index=n)),\n",
- " mp.Cylinder(radius=r)]\n",
+ "geometry = [\n",
+ " mp.Cylinder(radius=r + w, material=mp.Medium(index=n)),\n",
+ " mp.Cylinder(radius=r),\n",
+ "]\n",
"\n",
"fcen = 0.118\n",
"\n",
- "src = [mp.Source(mp.ContinuousSource(fcen),\n",
- " component=mp.Ez,\n",
- " center=mp.Vector3(r+0.1)),\n",
- " mp.Source(mp.ContinuousSource(fcen),\n",
- " component=mp.Ez,\n",
- " center=mp.Vector3(-(r+0.1)),\n",
- " amplitude=-1)]\n",
+ "src = [\n",
+ " mp.Source(mp.ContinuousSource(fcen), component=mp.Ez, center=mp.Vector3(r + 0.1)),\n",
+ " mp.Source(\n",
+ " mp.ContinuousSource(fcen),\n",
+ " component=mp.Ez,\n",
+ " center=mp.Vector3(-(r + 0.1)),\n",
+ " amplitude=-1,\n",
+ " ),\n",
+ "]\n",
"\n",
- "symmetries = [mp.Mirror(mp.X,phase=-1),\n",
- " mp.Mirror(mp.Y,phase=+1)]\n",
+ "symmetries = [mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=+1)]\n",
"\n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " geometry=geometry,\n",
- " sources=src,\n",
- " resolution=10,\n",
- " force_complex_fields=True,\n",
- " symmetries=symmetries,\n",
- " boundary_layers=pml_layers)\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " geometry=geometry,\n",
+ " sources=src,\n",
+ " resolution=10,\n",
+ " force_complex_fields=True,\n",
+ " symmetries=symmetries,\n",
+ " boundary_layers=pml_layers,\n",
+ ")\n",
"f = plt.figure(dpi=120)\n",
"sim.plot2D(ax=f.gca())\n",
"plt.show()"
@@ -138,13 +143,13 @@
"outputs": [],
"source": [
"num_tols = 5\n",
- "tols = np.power(10, np.arange(-8.0,-8.0-num_tols,-1.0))\n",
- "ez_dat = np.zeros((122,122,num_tols), dtype=np.complex_)\n",
+ "tols = np.power(10, np.arange(-8.0, -8.0 - num_tols, -1.0))\n",
+ "ez_dat = np.zeros((122, 122, num_tols), dtype=np.complex_)\n",
"\n",
"for i in range(num_tols):\n",
" sim.init_sim()\n",
" sim.solve_cw(tols[i], 10000, 10)\n",
- " ez_dat[:,:,i] = sim.get_array(vol=nonpml_vol, component=mp.Ez)"
+ " ez_dat[:, :, i] = sim.get_array(vol=nonpml_vol, component=mp.Ez)"
]
},
{
@@ -173,14 +178,14 @@
}
],
"source": [
- "err_dat = np.zeros(num_tols-1)\n",
- "for i in range(num_tols-1):\n",
- " err_dat[i] = LA.norm(ez_dat[:,:,i]-ez_dat[:,:,num_tols-1])\n",
+ "err_dat = np.zeros(num_tols - 1)\n",
+ "for i in range(num_tols - 1):\n",
+ " err_dat[i] = LA.norm(ez_dat[:, :, i] - ez_dat[:, :, num_tols - 1])\n",
"\n",
"plt.figure(dpi=150)\n",
- "plt.loglog(tols[:num_tols-1], err_dat, 'bo-');\n",
- "plt.xlabel(\"frequency-domain solver tolerance\");\n",
- "plt.ylabel(\"L2 norm of error in fields\");\n",
+ "plt.loglog(tols[: num_tols - 1], err_dat, \"bo-\")\n",
+ "plt.xlabel(\"frequency-domain solver tolerance\")\n",
+ "plt.ylabel(\"L2 norm of error in fields\")\n",
"plt.show()"
]
},
@@ -211,18 +216,22 @@
],
"source": [
"eps_data = sim.get_array(vol=nonpml_vol, component=mp.Dielectric)\n",
- "ez_data = np.real(ez_dat[:,:,num_tols-1])\n",
+ "ez_data = np.real(ez_dat[:, :, num_tols - 1])\n",
"\n",
"plt.figure()\n",
- "plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary')\n",
- "plt.imshow(ez_data.transpose(), interpolation='spline36', cmap='RdBu', alpha=0.9)\n",
- "plt.axis('off')\n",
+ "plt.imshow(eps_data.transpose(), interpolation=\"spline36\", cmap=\"binary\")\n",
+ "plt.imshow(ez_data.transpose(), interpolation=\"spline36\", cmap=\"RdBu\", alpha=0.9)\n",
+ "plt.axis(\"off\")\n",
"plt.show()\n",
"\n",
"if np.all(np.diff(err_dat) < 0):\n",
- " print(\"PASSED solve_cw test: error in the fields is decreasing with increasing resolution\")\n",
+ " print(\n",
+ " \"PASSED solve_cw test: error in the fields is decreasing with increasing resolution\"\n",
+ " )\n",
"else:\n",
- " print(\"FAILED solve_cw test: error in the fields is NOT decreasing with increasing resolution\")"
+ " print(\n",
+ " \"FAILED solve_cw test: error in the fields is NOT decreasing with increasing resolution\"\n",
+ " )"
]
},
{
@@ -244,20 +253,26 @@
"sim.reset_meep()\n",
"\n",
"df = 0.08\n",
- "src = [mp.Source(mp.GaussianSource(fcen,fwidth=df),\n",
- " component=mp.Ez,\n",
- " center=mp.Vector3(r+0.1)),\n",
- " mp.Source(mp.GaussianSource(fcen,fwidth=df),\n",
- " component=mp.Ez,\n",
- " center=mp.Vector3(-(r+0.1)),\n",
- " amplitude=-1)]\n",
+ "src = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=mp.Vector3(r + 0.1)\n",
+ " ),\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ez,\n",
+ " center=mp.Vector3(-(r + 0.1)),\n",
+ " amplitude=-1,\n",
+ " ),\n",
+ "]\n",
"\n",
- "sim = mp.Simulation(cell_size=mp.Vector3(sxy,sxy),\n",
- " geometry=geometry,\n",
- " sources=src,\n",
- " resolution=10,\n",
- " symmetries=symmetries,\n",
- " boundary_layers=pml_layers)\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=mp.Vector3(sxy, sxy),\n",
+ " geometry=geometry,\n",
+ " sources=src,\n",
+ " resolution=10,\n",
+ " symmetries=symmetries,\n",
+ " boundary_layers=pml_layers,\n",
+ ")\n",
"\n",
"dft_obj = sim.add_dft_fields([mp.Ez], fcen, 0, 1, where=nonpml_vol)\n",
"\n",
@@ -287,9 +302,9 @@
"ez_data = np.real(sim.get_dft_array(dft_obj, mp.Ez, 0))\n",
"\n",
"plt.figure()\n",
- "plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary')\n",
- "plt.imshow(ez_data.transpose(), interpolation='spline36', cmap='RdBu', alpha=0.9)\n",
- "plt.axis('off')\n",
+ "plt.imshow(eps_data.transpose(), interpolation=\"spline36\", cmap=\"binary\")\n",
+ "plt.imshow(ez_data.transpose(), interpolation=\"spline36\", cmap=\"RdBu\", alpha=0.9)\n",
+ "plt.axis(\"off\")\n",
"plt.show()"
]
}
diff --git a/python/examples/solve-cw.py b/python/examples/solve-cw.py
index b97bbb5c1..95b1f0498 100644
--- a/python/examples/solve-cw.py
+++ b/python/examples/solve-cw.py
@@ -9,87 +9,102 @@
pad = 4
dpml = 2
-sxy = 2*(r+w+pad+dpml)
-cell_size = mp.Vector3(sxy,sxy)
+sxy = 2 * (r + w + pad + dpml)
+cell_size = mp.Vector3(sxy, sxy)
pml_layers = [mp.PML(dpml)]
-nonpml_vol = mp.Volume(mp.Vector3(), size=mp.Vector3(sxy-2*dpml,sxy-2*dpml))
+nonpml_vol = mp.Volume(mp.Vector3(), size=mp.Vector3(sxy - 2 * dpml, sxy - 2 * dpml))
-geometry = [mp.Cylinder(radius=r+w, material=mp.Medium(index=n)),
- mp.Cylinder(radius=r)]
+geometry = [
+ mp.Cylinder(radius=r + w, material=mp.Medium(index=n)),
+ mp.Cylinder(radius=r),
+]
fcen = 0.118
-src = [mp.Source(mp.ContinuousSource(fcen),
- component=mp.Ez,
- center=mp.Vector3(r+0.1)),
- mp.Source(mp.ContinuousSource(fcen),
- component=mp.Ez,
- center=mp.Vector3(-(r+0.1)),
- amplitude=-1)]
-
-symmetries = [mp.Mirror(mp.X,phase=-1),
- mp.Mirror(mp.Y,phase=+1)]
-
-sim = mp.Simulation(cell_size=cell_size,
- geometry=geometry,
- sources=src,
- resolution=10,
- force_complex_fields=True,
- symmetries=symmetries,
- boundary_layers=pml_layers)
+src = [
+ mp.Source(mp.ContinuousSource(fcen), component=mp.Ez, center=mp.Vector3(r + 0.1)),
+ mp.Source(
+ mp.ContinuousSource(fcen),
+ component=mp.Ez,
+ center=mp.Vector3(-(r + 0.1)),
+ amplitude=-1,
+ ),
+]
+
+symmetries = [mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=+1)]
+
+sim = mp.Simulation(
+ cell_size=cell_size,
+ geometry=geometry,
+ sources=src,
+ resolution=10,
+ force_complex_fields=True,
+ symmetries=symmetries,
+ boundary_layers=pml_layers,
+)
num_tols = 5
-tols = np.power(10, np.arange(-8.0,-8.0-num_tols,-1.0))
-ez_dat = np.zeros((122,122,num_tols), dtype=np.complex_)
+tols = np.power(10, np.arange(-8.0, -8.0 - num_tols, -1.0))
+ez_dat = np.zeros((122, 122, num_tols), dtype=np.complex_)
for i in range(num_tols):
sim.init_sim()
sim.solve_cw(tols[i], 10000, 10)
- ez_dat[:,:,i] = sim.get_array(vol=nonpml_vol, component=mp.Ez)
+ ez_dat[:, :, i] = sim.get_array(vol=nonpml_vol, component=mp.Ez)
-err_dat = np.zeros(num_tols-1)
-for i in range(num_tols-1):
- err_dat[i] = LA.norm(ez_dat[:,:,i]-ez_dat[:,:,num_tols-1])
+err_dat = np.zeros(num_tols - 1)
+for i in range(num_tols - 1):
+ err_dat[i] = LA.norm(ez_dat[:, :, i] - ez_dat[:, :, num_tols - 1])
plt.figure(dpi=150)
-plt.loglog(tols[:num_tols-1], err_dat, 'bo-');
-plt.xlabel("frequency-domain solver tolerance");
-plt.ylabel("L2 norm of error in fields");
+plt.loglog(tols[: num_tols - 1], err_dat, "bo-")
+plt.xlabel("frequency-domain solver tolerance")
+plt.ylabel("L2 norm of error in fields")
plt.show()
eps_data = sim.get_array(vol=nonpml_vol, component=mp.Dielectric)
-ez_data = np.real(ez_dat[:,:,num_tols-1])
+ez_data = np.real(ez_dat[:, :, num_tols - 1])
plt.figure()
-plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary')
-plt.imshow(ez_data.transpose(), interpolation='spline36', cmap='RdBu', alpha=0.9)
-plt.axis('off')
+plt.imshow(eps_data.transpose(), interpolation="spline36", cmap="binary")
+plt.imshow(ez_data.transpose(), interpolation="spline36", cmap="RdBu", alpha=0.9)
+plt.axis("off")
plt.show()
if np.all(np.diff(err_dat) < 0):
- print("PASSED solve_cw test: error in the fields is decreasing with increasing resolution")
+ print(
+ "PASSED solve_cw test: error in the fields is decreasing with increasing resolution"
+ )
else:
- print("FAILED solve_cw test: error in the fields is NOT decreasing with increasing resolution")
+ print(
+ "FAILED solve_cw test: error in the fields is NOT decreasing with increasing resolution"
+ )
sim.reset_meep()
df = 0.08
-src = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
- component=mp.Ez,
- center=mp.Vector3(r+0.1)),
- mp.Source(mp.GaussianSource(fcen,fwidth=df),
- component=mp.Ez,
- center=mp.Vector3(-(r+0.1)),
- amplitude=-1)]
-
-sim = mp.Simulation(cell_size=mp.Vector3(sxy,sxy),
- geometry=geometry,
- sources=src,
- resolution=10,
- symmetries=symmetries,
- boundary_layers=pml_layers)
+src = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=mp.Vector3(r + 0.1)
+ ),
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=mp.Vector3(-(r + 0.1)),
+ amplitude=-1,
+ ),
+]
+
+sim = mp.Simulation(
+ cell_size=mp.Vector3(sxy, sxy),
+ geometry=geometry,
+ sources=src,
+ resolution=10,
+ symmetries=symmetries,
+ boundary_layers=pml_layers,
+)
dft_obj = sim.add_dft_fields([mp.Ez], fcen, 0, 1, where=nonpml_vol)
@@ -99,7 +114,7 @@
ez_data = np.real(sim.get_dft_array(dft_obj, mp.Ez, 0))
plt.figure()
-plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary')
-plt.imshow(ez_data.transpose(), interpolation='spline36', cmap='RdBu', alpha=0.9)
-plt.axis('off')
+plt.imshow(eps_data.transpose(), interpolation="spline36", cmap="binary")
+plt.imshow(ez_data.transpose(), interpolation="spline36", cmap="RdBu", alpha=0.9)
+plt.axis("off")
plt.show()
diff --git a/python/examples/stochastic_emitter.ipynb b/python/examples/stochastic_emitter.ipynb
index 59f33cec8..a18bf3022 100644
--- a/python/examples/stochastic_emitter.ipynb
+++ b/python/examples/stochastic_emitter.ipynb
@@ -28,13 +28,27 @@
"import numpy as np\n",
"\n",
"import argparse\n",
+ "\n",
"parser = argparse.ArgumentParser()\n",
- "parser.add_argument('-res', type=int, default=50, help='resolution (pixels/um)')\n",
- "parser.add_argument('-nr', type=int, default=20, help='number of random trials (method 1)')\n",
- "parser.add_argument('-nd', type=int, default=10, help='number of dipoles')\n",
- "parser.add_argument('-nf', type=int, default=500, help='number of frequencies')\n",
- "parser.add_argument('-textured', action='store_true', default=False, help='flat (default) or textured surface')\n",
- "parser.add_argument('-method', type=int, choices=[1,2], default=1, help='type of method: (1) random dipoles with nr trials or (2) single dipole with 1 run per dipole')\n",
+ "parser.add_argument(\"-res\", type=int, default=50, help=\"resolution (pixels/um)\")\n",
+ "parser.add_argument(\n",
+ " \"-nr\", type=int, default=20, help=\"number of random trials (method 1)\"\n",
+ ")\n",
+ "parser.add_argument(\"-nd\", type=int, default=10, help=\"number of dipoles\")\n",
+ "parser.add_argument(\"-nf\", type=int, default=500, help=\"number of frequencies\")\n",
+ "parser.add_argument(\n",
+ " \"-textured\",\n",
+ " action=\"store_true\",\n",
+ " default=False,\n",
+ " help=\"flat (default) or textured surface\",\n",
+ ")\n",
+ "parser.add_argument(\n",
+ " \"-method\",\n",
+ " type=int,\n",
+ " choices=[1, 2],\n",
+ " default=1,\n",
+ " help=\"type of method: (1) random dipoles with nr trials or (2) single dipole with 1 run per dipole\",\n",
+ ")\n",
"args = parser.parse_args()\n",
"\n",
"resolution = args.res\n",
@@ -47,56 +61,81 @@
"dAg = 0.5\n",
"\n",
"sx = 1.1\n",
- "sy = dpml+dair+hrod+dsub+dAg\n",
+ "sy = dpml + dair + hrod + dsub + dAg\n",
"\n",
- "cell_size = mp.Vector3(sx,sy)\n",
+ "cell_size = mp.Vector3(sx, sy)\n",
"\n",
- "pml_layers = [mp.PML(direction=mp.Y,\n",
- " thickness=dpml,\n",
- " side=mp.High)]\n",
+ "pml_layers = [mp.PML(direction=mp.Y, thickness=dpml, side=mp.High)]\n",
"\n",
"fcen = 1.0\n",
"df = 0.2\n",
"nfreq = args.nf\n",
"ndipole = args.nd\n",
"ntrial = args.nr\n",
- "run_time = 2*nfreq/df\n",
- "\n",
- "geometry = [mp.Block(material=mp.Medium(index=3.45),\n",
- " center=mp.Vector3(0,0.5*sy-dpml-dair-hrod-0.5*dsub),\n",
- " size=mp.Vector3(mp.inf,dsub,mp.inf)),\n",
- " mp.Block(material=Ag,\n",
- " center=mp.Vector3(0,-0.5*sy+0.5*dAg),\n",
- " size=mp.Vector3(mp.inf,dAg,mp.inf))]\n",
+ "run_time = 2 * nfreq / df\n",
+ "\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " material=mp.Medium(index=3.45),\n",
+ " center=mp.Vector3(0, 0.5 * sy - dpml - dair - hrod - 0.5 * dsub),\n",
+ " size=mp.Vector3(mp.inf, dsub, mp.inf),\n",
+ " ),\n",
+ " mp.Block(\n",
+ " material=Ag,\n",
+ " center=mp.Vector3(0, -0.5 * sy + 0.5 * dAg),\n",
+ " size=mp.Vector3(mp.inf, dAg, mp.inf),\n",
+ " ),\n",
+ "]\n",
"\n",
"if args.textured:\n",
- " geometry.append(mp.Block(material=mp.Medium(index=3.45),\n",
- " center=mp.Vector3(0,0.5*sy-dpml-dair-0.5*hrod),\n",
- " size=mp.Vector3(wrod,hrod,mp.inf)))\n",
+ " geometry.append(\n",
+ " mp.Block(\n",
+ " material=mp.Medium(index=3.45),\n",
+ " center=mp.Vector3(0, 0.5 * sy - dpml - dair - 0.5 * hrod),\n",
+ " size=mp.Vector3(wrod, hrod, mp.inf),\n",
+ " )\n",
+ " )\n",
"\n",
- "def compute_flux(m=1,n=0):\n",
+ "\n",
+ "def compute_flux(m=1, n=0):\n",
" if m == 1:\n",
" sources = []\n",
" for n in range(ndipole):\n",
- " sources.append(mp.Source(mp.CustomSource(src_func=lambda t: np.random.randn()),\n",
- " component=mp.Ez,\n",
- " center=mp.Vector3(sx*(-0.5+n/ndipole),-0.5*sy+dAg+0.5*dsub)))\n",
+ " sources.append(\n",
+ " mp.Source(\n",
+ " mp.CustomSource(src_func=lambda t: np.random.randn()),\n",
+ " component=mp.Ez,\n",
+ " center=mp.Vector3(\n",
+ " sx * (-0.5 + n / ndipole), -0.5 * sy + dAg + 0.5 * dsub\n",
+ " ),\n",
+ " )\n",
+ " )\n",
" else:\n",
- " sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),\n",
- " component=mp.Ez,\n",
- " center=mp.Vector3(sx*(-0.5+n/ndipole),-0.5*sy+dAg+0.5*dsub))]\n",
- "\n",
- " sim = mp.Simulation(cell_size=cell_size,\n",
- " resolution=resolution,\n",
- " k_point=mp.Vector3(),\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=sources)\n",
- "\n",
- " flux_mon = sim.add_flux(fcen,\n",
- " df,\n",
- " nfreq,\n",
- " mp.FluxRegion(center=mp.Vector3(0,0.5*sy-dpml),size=mp.Vector3(sx)))\n",
+ " sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(fcen, fwidth=df),\n",
+ " component=mp.Ez,\n",
+ " center=mp.Vector3(\n",
+ " sx * (-0.5 + n / ndipole), -0.5 * sy + dAg + 0.5 * dsub\n",
+ " ),\n",
+ " )\n",
+ " ]\n",
+ "\n",
+ " sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " resolution=resolution,\n",
+ " k_point=mp.Vector3(),\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=sources,\n",
+ " )\n",
+ "\n",
+ " flux_mon = sim.add_flux(\n",
+ " fcen,\n",
+ " df,\n",
+ " nfreq,\n",
+ " mp.FluxRegion(center=mp.Vector3(0, 0.5 * sy - dpml), size=mp.Vector3(sx)),\n",
+ " )\n",
"\n",
" sim.run(until=run_time)\n",
"\n",
@@ -105,19 +144,29 @@
"\n",
" return freqs, flux\n",
"\n",
+ "\n",
"if args.method == 1:\n",
- " fluxes = np.zeros((nfreq,ntrial))\n",
+ " fluxes = np.zeros((nfreq, ntrial))\n",
" for t in range(ntrial):\n",
- " freqs, fluxes[:,t] = compute_flux(m=1)\n",
+ " freqs, fluxes[:, t] = compute_flux(m=1)\n",
"else:\n",
- " fluxes = np.zeros((nfreq,ndipole))\n",
+ " fluxes = np.zeros((nfreq, ndipole))\n",
" for d in range(ndipole):\n",
- " freqs, fluxes[:,d] = compute_flux(m=2,n=d)\n",
+ " freqs, fluxes[:, d] = compute_flux(m=2, n=d)\n",
"\n",
"\n",
"if mp.am_master():\n",
- " with open('method{}_{}_res{}_nfreq{}_ndipole{}.npz'.format(args.method,\"textured\" if args.textured else \"flat\",resolution,nfreq,ndipole),'wb') as f:\n",
- " np.savez(f,freqs=freqs,fluxes=fluxes)"
+ " with open(\n",
+ " \"method{}_{}_res{}_nfreq{}_ndipole{}.npz\".format(\n",
+ " args.method,\n",
+ " \"textured\" if args.textured else \"flat\",\n",
+ " resolution,\n",
+ " nfreq,\n",
+ " ndipole,\n",
+ " ),\n",
+ " \"wb\",\n",
+ " ) as f:\n",
+ " np.savez(f, freqs=freqs, fluxes=fluxes)"
]
},
{
@@ -155,24 +204,24 @@
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
- "method1_f0 = np.load('method1_flat_res50_nfreq500_ndipole10.npz')\n",
- "method1_f1 = np.load('method1_textured_res50_nfreq500_ndipole10.npz')\n",
+ "method1_f0 = np.load(\"method1_flat_res50_nfreq500_ndipole10.npz\")\n",
+ "method1_f1 = np.load(\"method1_textured_res50_nfreq500_ndipole10.npz\")\n",
"\n",
- "method1_freqs = method1_f0['freqs']\n",
- "method1_f0_mean = np.mean(method1_f0['fluxes'],axis=1)\n",
- "method1_f1_mean = np.mean(method1_f1['fluxes'],axis=1)\n",
+ "method1_freqs = method1_f0[\"freqs\"]\n",
+ "method1_f0_mean = np.mean(method1_f0[\"fluxes\"], axis=1)\n",
+ "method1_f1_mean = np.mean(method1_f1[\"fluxes\"], axis=1)\n",
"\n",
- "method2_f0 = np.load('method2_flat_res50_nfreq500_ndipole10.npz')\n",
- "method2_f1 = np.load('method2_textured_res50_nfreq500_ndipole10.npz')\n",
+ "method2_f0 = np.load(\"method2_flat_res50_nfreq500_ndipole10.npz\")\n",
+ "method2_f1 = np.load(\"method2_textured_res50_nfreq500_ndipole10.npz\")\n",
"\n",
- "method2_freqs = method2_f0['freqs']\n",
- "method2_f0_mean = np.mean(method2_f0['fluxes'],axis=1)\n",
- "method2_f1_mean = np.mean(method2_f1['fluxes'],axis=1)\n",
+ "method2_freqs = method2_f0[\"freqs\"]\n",
+ "method2_f0_mean = np.mean(method2_f0[\"fluxes\"], axis=1)\n",
+ "method2_f1_mean = np.mean(method2_f1[\"fluxes\"], axis=1)\n",
"\n",
- "plt.semilogy(method1_freqs,method1_f1_mean/method1_f0_mean,'b-',label='Method 1')\n",
- "plt.semilogy(method2_freqs,method2_f1_mean/method2_f0_mean,'r-',label='Method 2')\n",
- "plt.xlabel('frequency')\n",
- "plt.ylabel('normalized flux')\n",
+ "plt.semilogy(method1_freqs, method1_f1_mean / method1_f0_mean, \"b-\", label=\"Method 1\")\n",
+ "plt.semilogy(method2_freqs, method2_f1_mean / method2_f0_mean, \"r-\", label=\"Method 2\")\n",
+ "plt.xlabel(\"frequency\")\n",
+ "plt.ylabel(\"normalized flux\")\n",
"plt.legend()\n",
"plt.show()"
]
diff --git a/python/examples/stochastic_emitter.py b/python/examples/stochastic_emitter.py
index 18b497026..fece7d6ca 100644
--- a/python/examples/stochastic_emitter.py
+++ b/python/examples/stochastic_emitter.py
@@ -3,13 +3,27 @@
import numpy as np
import argparse
+
parser = argparse.ArgumentParser()
-parser.add_argument('-res', type=int, default=50, help='resolution (pixels/um)')
-parser.add_argument('-nr', type=int, default=20, help='number of random trials (method 1)')
-parser.add_argument('-nd', type=int, default=10, help='number of dipoles')
-parser.add_argument('-nf', type=int, default=500, help='number of frequencies')
-parser.add_argument('-textured', action='store_true', default=False, help='flat (default) or textured surface')
-parser.add_argument('-method', type=int, choices=[1,2], default=1, help='type of method: (1) random dipoles with nr trials or (2) single dipole with 1 run per dipole')
+parser.add_argument("-res", type=int, default=50, help="resolution (pixels/um)")
+parser.add_argument(
+ "-nr", type=int, default=20, help="number of random trials (method 1)"
+)
+parser.add_argument("-nd", type=int, default=10, help="number of dipoles")
+parser.add_argument("-nf", type=int, default=500, help="number of frequencies")
+parser.add_argument(
+ "-textured",
+ action="store_true",
+ default=False,
+ help="flat (default) or textured surface",
+)
+parser.add_argument(
+ "-method",
+ type=int,
+ choices=[1, 2],
+ default=1,
+ help="type of method: (1) random dipoles with nr trials or (2) single dipole with 1 run per dipole",
+)
args = parser.parse_args()
resolution = args.res
@@ -22,53 +36,81 @@
dAg = 0.5
sx = 1.1
-sy = dpml+dair+hrod+dsub+dAg
+sy = dpml + dair + hrod + dsub + dAg
-cell_size = mp.Vector3(sx,sy)
+cell_size = mp.Vector3(sx, sy)
-pml_layers = [mp.PML(direction=mp.Y,
- thickness=dpml,
- side=mp.High)]
+pml_layers = [mp.PML(direction=mp.Y, thickness=dpml, side=mp.High)]
fcen = 1.0
df = 0.2
nfreq = args.nf
ndipole = args.nd
ntrial = args.nr
-run_time = 2*nfreq/df
-
-geometry = [mp.Block(material=mp.Medium(index=3.45),
- center=mp.Vector3(0,0.5*sy-dpml-dair-hrod-0.5*dsub),
- size=mp.Vector3(mp.inf,dsub,mp.inf)),
- mp.Block(material=Ag,
- center=mp.Vector3(0,-0.5*sy+0.5*dAg),
- size=mp.Vector3(mp.inf,dAg,mp.inf))]
+run_time = 2 * nfreq / df
+
+geometry = [
+ mp.Block(
+ material=mp.Medium(index=3.45),
+ center=mp.Vector3(0, 0.5 * sy - dpml - dair - hrod - 0.5 * dsub),
+ size=mp.Vector3(mp.inf, dsub, mp.inf),
+ ),
+ mp.Block(
+ material=Ag,
+ center=mp.Vector3(0, -0.5 * sy + 0.5 * dAg),
+ size=mp.Vector3(mp.inf, dAg, mp.inf),
+ ),
+]
if args.textured:
- geometry.append(mp.Block(material=mp.Medium(index=3.45),
- center=mp.Vector3(0,0.5*sy-dpml-dair-0.5*hrod),
- size=mp.Vector3(wrod,hrod,mp.inf)))
+ geometry.append(
+ mp.Block(
+ material=mp.Medium(index=3.45),
+ center=mp.Vector3(0, 0.5 * sy - dpml - dair - 0.5 * hrod),
+ size=mp.Vector3(wrod, hrod, mp.inf),
+ )
+ )
+
-def compute_flux(m=1,n=0):
+def compute_flux(m=1, n=0):
if m == 1:
- sources = [mp.Source(mp.CustomSource(src_func=lambda t: np.random.randn()), component=mp.Ez, center=mp.Vector3(sx * (-0.5 + n / ndipole), -0.5 * sy + dAg + 0.5 * dsub)) for n in range(ndipole)]
+ sources = [
+ mp.Source(
+ mp.CustomSource(src_func=lambda t: np.random.randn()),
+ component=mp.Ez,
+ center=mp.Vector3(
+ sx * (-0.5 + n / ndipole), -0.5 * sy + dAg + 0.5 * dsub
+ ),
+ )
+ for n in range(ndipole)
+ ]
else:
- sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
- component=mp.Ez,
- center=mp.Vector3(sx*(-0.5+n/ndipole),-0.5*sy+dAg+0.5*dsub))]
-
- sim = mp.Simulation(cell_size=cell_size,
- resolution=resolution,
- k_point=mp.Vector3(),
- boundary_layers=pml_layers,
- geometry=geometry,
- sources=sources)
-
- flux_mon = sim.add_flux(fcen,
- df,
- nfreq,
- mp.FluxRegion(center=mp.Vector3(0,0.5*sy-dpml),size=mp.Vector3(sx)))
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=mp.Vector3(
+ sx * (-0.5 + n / ndipole), -0.5 * sy + dAg + 0.5 * dsub
+ ),
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ k_point=mp.Vector3(),
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ sources=sources,
+ )
+
+ flux_mon = sim.add_flux(
+ fcen,
+ df,
+ nfreq,
+ mp.FluxRegion(center=mp.Vector3(0, 0.5 * sy - dpml), size=mp.Vector3(sx)),
+ )
sim.run(until=run_time)
@@ -79,15 +121,18 @@ def compute_flux(m=1,n=0):
if args.method == 1:
- fluxes = np.zeros((nfreq,ntrial))
+ fluxes = np.zeros((nfreq, ntrial))
for t in range(ntrial):
- freqs, fluxes[:,t] = compute_flux(m=1)
+ freqs, fluxes[:, t] = compute_flux(m=1)
else:
- fluxes = np.zeros((nfreq,ndipole))
+ fluxes = np.zeros((nfreq, ndipole))
for d in range(ndipole):
- freqs, fluxes[:,d] = compute_flux(m=2,n=d)
+ freqs, fluxes[:, d] = compute_flux(m=2, n=d)
if mp.am_master():
- with open(f'method{args.method}_{"textured" if args.textured else "flat"}_res{resolution}_nfreq{nfreq}_ndipole{ndipole}.npz', 'wb') as f:
- np.savez(f,freqs=freqs,fluxes=fluxes)
+ with open(
+ f'method{args.method}_{"textured" if args.textured else "flat"}_res{resolution}_nfreq{nfreq}_ndipole{ndipole}.npz',
+ "wb",
+ ) as f:
+ np.savez(f, freqs=freqs, fluxes=fluxes)
diff --git a/python/examples/stochastic_emitter_line.py b/python/examples/stochastic_emitter_line.py
index a2e168a6b..54a44ffe0 100644
--- a/python/examples/stochastic_emitter_line.py
+++ b/python/examples/stochastic_emitter_line.py
@@ -3,13 +3,29 @@
import numpy as np
import argparse
+
parser = argparse.ArgumentParser()
-parser.add_argument('-res', type=int, default=50, help='resolution (pixels/um)')
-parser.add_argument('-nf', type=int, default=500, help='number of frequencies')
-parser.add_argument('-nsrc', type=int, default=15, help='number of line sources with cosine Fourier series amplitude function (method 3)')
-parser.add_argument('-textured', action='store_true', default=False, help='flat (default) or textured surface')
-parser.add_argument('-method', type=int, choices=[2,3], default=2,
- help='type of method: (2) single dipole with 1 run per dipole or (3) line source with cosine Fourier series amplitude function')
+parser.add_argument("-res", type=int, default=50, help="resolution (pixels/um)")
+parser.add_argument("-nf", type=int, default=500, help="number of frequencies")
+parser.add_argument(
+ "-nsrc",
+ type=int,
+ default=15,
+ help="number of line sources with cosine Fourier series amplitude function (method 3)",
+)
+parser.add_argument(
+ "-textured",
+ action="store_true",
+ default=False,
+ help="flat (default) or textured surface",
+)
+parser.add_argument(
+ "-method",
+ type=int,
+ choices=[2, 3],
+ default=2,
+ help="type of method: (2) single dipole with 1 run per dipole or (3) line source with cosine Fourier series amplitude function",
+)
args = parser.parse_args()
resolution = args.res
@@ -22,62 +38,89 @@
dAg = 0.4
sx = 1.5
-sy = dpml+dair+hrod+dsub+dAg
+sy = dpml + dair + hrod + dsub + dAg
-cell_size = mp.Vector3(sx,sy)
+cell_size = mp.Vector3(sx, sy)
-pml_layers = [mp.PML(direction=mp.Y,
- thickness=dpml,
- side=mp.High)]
+pml_layers = [mp.PML(direction=mp.Y, thickness=dpml, side=mp.High)]
fcen = 1.0
df = 0.2
nfreq = args.nf
nsrc = args.nsrc
-ndipole = int(sx*resolution)
-run_time = 2*nfreq/df
-
-geometry = [mp.Block(material=mp.Medium(index=3.45),
- center=mp.Vector3(0,0.5*sy-dpml-dair-hrod-0.5*dsub),
- size=mp.Vector3(mp.inf,dsub,mp.inf)),
- mp.Block(material=Ag,
- center=mp.Vector3(0,-0.5*sy+0.5*dAg),
- size=mp.Vector3(mp.inf,dAg,mp.inf))]
+ndipole = int(sx * resolution)
+run_time = 2 * nfreq / df
+
+geometry = [
+ mp.Block(
+ material=mp.Medium(index=3.45),
+ center=mp.Vector3(0, 0.5 * sy - dpml - dair - hrod - 0.5 * dsub),
+ size=mp.Vector3(mp.inf, dsub, mp.inf),
+ ),
+ mp.Block(
+ material=Ag,
+ center=mp.Vector3(0, -0.5 * sy + 0.5 * dAg),
+ size=mp.Vector3(mp.inf, dAg, mp.inf),
+ ),
+]
if args.textured:
- geometry.append(mp.Block(material=mp.Medium(index=3.45),
- center=mp.Vector3(0,0.5*sy-dpml-dair-0.5*hrod),
- size=mp.Vector3(wrod,hrod,mp.inf)))
+ geometry.append(
+ mp.Block(
+ material=mp.Medium(index=3.45),
+ center=mp.Vector3(0, 0.5 * sy - dpml - dair - 0.5 * hrod),
+ size=mp.Vector3(wrod, hrod, mp.inf),
+ )
+ )
+
def src_amp_func(n):
def _src_amp_func(p):
if n == 0:
- return 1/np.sqrt(sx)
+ return 1 / np.sqrt(sx)
else:
- return np.sqrt(2/sx) * np.cos(n*np.pi*(p.x+0.5*sx)/sx)
+ return np.sqrt(2 / sx) * np.cos(n * np.pi * (p.x + 0.5 * sx) / sx)
+
return _src_amp_func
-def compute_flux(m,n):
+
+def compute_flux(m, n):
if m == 2:
- sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
- component=mp.Ez,
- center=mp.Vector3(sx*(-0.5+n/ndipole),-0.5*sy+dAg+0.5*dsub))]
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=mp.Vector3(
+ sx * (-0.5 + n / ndipole), -0.5 * sy + dAg + 0.5 * dsub
+ ),
+ )
+ ]
else:
- sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
- component=mp.Ez,
- center=mp.Vector3(0,-0.5*sy+dAg+0.5*dsub),
- size=mp.Vector3(sx,0),
- amp_func=src_amp_func(n))]
-
- sim = mp.Simulation(cell_size=cell_size,
- resolution=resolution,
- k_point=mp.Vector3(),
- boundary_layers=pml_layers,
- geometry=geometry,
- sources=sources)
-
- flux_mon = sim.add_flux(fcen, df, nfreq,
- mp.FluxRegion(center=mp.Vector3(0,0.5*sy-dpml),size=mp.Vector3(sx)))
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=mp.Vector3(0, -0.5 * sy + dAg + 0.5 * dsub),
+ size=mp.Vector3(sx, 0),
+ amp_func=src_amp_func(n),
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ k_point=mp.Vector3(),
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ sources=sources,
+ )
+
+ flux_mon = sim.add_flux(
+ fcen,
+ df,
+ nfreq,
+ mp.FluxRegion(center=mp.Vector3(0, 0.5 * sy - dpml), size=mp.Vector3(sx)),
+ )
sim.run(until=run_time)
@@ -88,15 +131,18 @@ def compute_flux(m,n):
if args.method == 2:
- fluxes = np.zeros((nfreq,ndipole))
+ fluxes = np.zeros((nfreq, ndipole))
for d in range(ndipole):
- freqs, fluxes[:,d] = compute_flux(2,d)
+ freqs, fluxes[:, d] = compute_flux(2, d)
else:
- fluxes = np.zeros((nfreq,nsrc))
+ fluxes = np.zeros((nfreq, nsrc))
for d in range(nsrc):
- freqs, fluxes[:,d] = compute_flux(3,d)
+ freqs, fluxes[:, d] = compute_flux(3, d)
if mp.am_master():
- with open(f'method{args.method}_{"textured" if args.textured else "flat"}_res{resolution}_nfreq{nfreq}_{"ndipole" if args.method == 2 else "nsrc"}{ndipole if args.method == 2 else nsrc}.npz', 'wb') as f:
- np.savez(f,freqs=freqs,fluxes=fluxes)
+ with open(
+ f'method{args.method}_{"textured" if args.textured else "flat"}_res{resolution}_nfreq{nfreq}_{"ndipole" if args.method == 2 else "nsrc"}{ndipole if args.method == 2 else nsrc}.npz',
+ "wb",
+ ) as f:
+ np.savez(f, freqs=freqs, fluxes=fluxes)
diff --git a/python/examples/straight-waveguide.ipynb b/python/examples/straight-waveguide.ipynb
index 91d703bf3..53de3462b 100644
--- a/python/examples/straight-waveguide.ipynb
+++ b/python/examples/straight-waveguide.ipynb
@@ -44,7 +44,7 @@
"metadata": {},
"outputs": [],
"source": [
- "cell = mp.Vector3(16,8,0)"
+ "cell = mp.Vector3(16, 8, 0)"
]
},
{
@@ -68,9 +68,13 @@
"metadata": {},
"outputs": [],
"source": [
- "geometry = [mp.Block(mp.Vector3(mp.inf,1,mp.inf),\n",
- " center=mp.Vector3(),\n",
- " material=mp.Medium(epsilon=12))]"
+ "geometry = [\n",
+ " mp.Block(\n",
+ " mp.Vector3(mp.inf, 1, mp.inf),\n",
+ " center=mp.Vector3(),\n",
+ " material=mp.Medium(epsilon=12),\n",
+ " )\n",
+ "]"
]
},
{
@@ -94,9 +98,11 @@
"metadata": {},
"outputs": [],
"source": [
- "sources = [mp.Source(mp.ContinuousSource(frequency=0.15),\n",
- " component=mp.Ez,\n",
- " center=mp.Vector3(-7,0))]"
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.ContinuousSource(frequency=0.15), component=mp.Ez, center=mp.Vector3(-7, 0)\n",
+ " )\n",
+ "]"
]
},
{
@@ -176,11 +182,13 @@
"metadata": {},
"outputs": [],
"source": [
- "sim = mp.Simulation(cell_size=cell,\n",
- " boundary_layers=pml_layers,\n",
- " geometry=geometry,\n",
- " sources=sources,\n",
- " resolution=resolution)"
+ "sim = mp.Simulation(\n",
+ " cell_size=cell,\n",
+ " boundary_layers=pml_layers,\n",
+ " geometry=geometry,\n",
+ " sources=sources,\n",
+ " resolution=resolution,\n",
+ ")"
]
},
{
@@ -224,6 +232,7 @@
],
"source": [
"from matplotlib import pyplot as plt\n",
+ "\n",
"%matplotlib inline\n",
"plt.figure(dpi=100)\n",
"sim.plot2D()\n",
@@ -357,7 +366,7 @@
}
],
"source": [
- "sim.run(mp.at_every(1,Animate),until=100)\n",
+ "sim.run(mp.at_every(1, Animate), until=100)\n",
"plt.close()"
]
},
@@ -383,7 +392,7 @@
],
"source": [
"filename = \"media/straight_waveguide.mp4\"\n",
- "Animate.to_mp4(10,filename)"
+ "Animate.to_mp4(10, filename)"
]
},
{
@@ -416,6 +425,7 @@
],
"source": [
"from IPython.display import Video\n",
+ "\n",
"Video(filename)"
]
},
diff --git a/python/examples/straight-waveguide.py b/python/examples/straight-waveguide.py
index b17bd37d4..c845e6497 100644
--- a/python/examples/straight-waveguide.py
+++ b/python/examples/straight-waveguide.py
@@ -5,25 +5,33 @@
import meep as mp
-cell = mp.Vector3(16,8,0)
-
-geometry = [mp.Block(mp.Vector3(mp.inf,1,mp.inf),
- center=mp.Vector3(),
- material=mp.Medium(epsilon=12))]
-
-sources = [mp.Source(mp.ContinuousSource(frequency=0.15),
- component=mp.Ez,
- center=mp.Vector3(-7,0))]
+cell = mp.Vector3(16, 8, 0)
+
+geometry = [
+ mp.Block(
+ mp.Vector3(mp.inf, 1, mp.inf),
+ center=mp.Vector3(),
+ material=mp.Medium(epsilon=12),
+ )
+]
+
+sources = [
+ mp.Source(
+ mp.ContinuousSource(frequency=0.15), component=mp.Ez, center=mp.Vector3(-7, 0)
+ )
+]
pml_layers = [mp.PML(1.0)]
resolution = 10
-sim = mp.Simulation(cell_size=cell,
- boundary_layers=pml_layers,
- geometry=geometry,
- sources=sources,
- resolution=resolution)
+sim = mp.Simulation(
+ cell_size=cell,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ sources=sources,
+ resolution=resolution,
+)
sim.run(until=200)
@@ -32,13 +40,13 @@
eps_data = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Dielectric)
plt.figure()
-plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary')
-plt.axis('off')
+plt.imshow(eps_data.transpose(), interpolation="spline36", cmap="binary")
+plt.axis("off")
plt.show()
ez_data = sim.get_array(center=mp.Vector3(), size=cell, component=mp.Ez)
plt.figure()
-plt.imshow(eps_data.transpose(), interpolation='spline36', cmap='binary')
-plt.imshow(ez_data.transpose(), interpolation='spline36', cmap='RdBu', alpha=0.9)
-plt.axis('off')
+plt.imshow(eps_data.transpose(), interpolation="spline36", cmap="binary")
+plt.imshow(ez_data.transpose(), interpolation="spline36", cmap="RdBu", alpha=0.9)
+plt.axis("off")
plt.show()
diff --git a/python/examples/wvg-src.py b/python/examples/wvg-src.py
index bcd2edb84..421022523 100644
--- a/python/examples/wvg-src.py
+++ b/python/examples/wvg-src.py
@@ -10,17 +10,27 @@
# an asymmetrical dielectric waveguide:
geometry = [
- mp.Block(center=mp.Vector3(), size=mp.Vector3(mp.inf, 1, mp.inf),
- material=mp.Medium(epsilon=12)),
- mp.Block(center=mp.Vector3(y=0.3), size=mp.Vector3(mp.inf, 0.1, mp.inf),
- material=mp.Medium())
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(mp.inf, 1, mp.inf),
+ material=mp.Medium(epsilon=12),
+ ),
+ mp.Block(
+ center=mp.Vector3(y=0.3),
+ size=mp.Vector3(mp.inf, 0.1, mp.inf),
+ material=mp.Medium(),
+ ),
]
# create a transparent source that excites a right-going waveguide mode
sources = [
- mp.EigenModeSource(src=mp.ContinuousSource(0.15), size=mp.Vector3(y=6),
- center=mp.Vector3(x=-5), component=mp.Dielectric,
- eig_parity=mp.ODD_Z)
+ mp.EigenModeSource(
+ src=mp.ContinuousSource(0.15),
+ size=mp.Vector3(y=6),
+ center=mp.Vector3(x=-5),
+ component=mp.Dielectric,
+ eig_parity=mp.ODD_Z,
+ )
]
pml_layers = [mp.PML(1.0)]
@@ -35,17 +45,21 @@
sources=sources,
boundary_layers=pml_layers,
force_complex_fields=force_complex_fields,
- resolution=resolution
+ resolution=resolution,
)
sim.run(
mp.at_beginning(mp.output_epsilon),
mp.at_end(mp.output_png(mp.Ez, "-a yarg -A $EPS -S3 -Zc dkbluered", rm_h5=False)),
- until=200
+ until=200,
)
-flux1 = sim.flux_in_box(mp.X, mp.Volume(center=mp.Vector3(-6.0), size=mp.Vector3(1.8, 6)))
-flux2 = sim.flux_in_box(mp.X, mp.Volume(center=mp.Vector3(6.0), size=mp.Vector3(1.8, 6)))
+flux1 = sim.flux_in_box(
+ mp.X, mp.Volume(center=mp.Vector3(-6.0), size=mp.Vector3(1.8, 6))
+)
+flux2 = sim.flux_in_box(
+ mp.X, mp.Volume(center=mp.Vector3(6.0), size=mp.Vector3(1.8, 6))
+)
# averaged over y region of width 1.8
print(f"left-going flux = {flux1 / -1.8}")
diff --git a/python/examples/zone_plate.ipynb b/python/examples/zone_plate.ipynb
index e97e055e6..5796367a2 100644
--- a/python/examples/zone_plate.ipynb
+++ b/python/examples/zone_plate.ipynb
@@ -30,85 +30,139 @@
"import math\n",
"import matplotlib.pyplot as plt\n",
"\n",
- "resolution = 25 # pixels/μm\n",
+ "resolution = 25 # pixels/μm\n",
"\n",
- "dpml = 1.0 # PML thickness\n",
- "dsub = 2.0 # substrate thickness\n",
- "dpad = 2.0 # padding betweeen zone plate and PML\n",
- "zh = 0.5 # zone-plate height\n",
- "zN = 25 # number of zones (odd zones: π phase shift, even zones: none)\n",
- "focal_length = 200 # focal length of zone plate\n",
- "spot_length = 100 # far-field line length\n",
- "ff_res = 10 # far-field resolution\n",
+ "dpml = 1.0 # PML thickness\n",
+ "dsub = 2.0 # substrate thickness\n",
+ "dpad = 2.0 # padding betweeen zone plate and PML\n",
+ "zh = 0.5 # zone-plate height\n",
+ "zN = 25 # number of zones (odd zones: π phase shift, even zones: none)\n",
+ "focal_length = 200 # focal length of zone plate\n",
+ "spot_length = 100 # far-field line length\n",
+ "ff_res = 10 # far-field resolution\n",
"\n",
"pml_layers = [mp.PML(thickness=dpml)]\n",
"\n",
"wvl_cen = 0.5\n",
- "frq_cen = 1/wvl_cen\n",
- "dfrq = 0.2*frq_cen\n",
+ "frq_cen = 1 / wvl_cen\n",
+ "dfrq = 0.2 * frq_cen\n",
"\n",
"## radii of zones\n",
"## ref: eq. 7 of http://zoneplate.lbl.gov/theory\n",
- "r = [math.sqrt(n*wvl_cen*(focal_length+n*wvl_cen/4)) for n in range(1,zN+1)]\n",
- "\n",
- "sr = r[-1]+dpad+dpml\n",
- "sz = dpml+dsub+zh+dpad+dpml\n",
- "cell_size = mp.Vector3(sr,0,sz)\n",
- "\n",
- "sources = [mp.Source(mp.GaussianSource(frq_cen,fwidth=dfrq,is_integrated=True),\n",
- " component=mp.Er,\n",
- " center=mp.Vector3(0.5*sr,0,-0.5*sz+dpml),\n",
- " size=mp.Vector3(sr)),\n",
- " mp.Source(mp.GaussianSource(frq_cen,fwidth=dfrq,is_integrated=True),\n",
- " component=mp.Ep,\n",
- " center=mp.Vector3(0.5*sr,0,-0.5*sz+dpml),\n",
- " size=mp.Vector3(sr),\n",
- " amplitude=-1j)]\n",
+ "r = [\n",
+ " math.sqrt(n * wvl_cen * (focal_length + n * wvl_cen / 4)) for n in range(1, zN + 1)\n",
+ "]\n",
+ "\n",
+ "sr = r[-1] + dpad + dpml\n",
+ "sz = dpml + dsub + zh + dpad + dpml\n",
+ "cell_size = mp.Vector3(sr, 0, sz)\n",
+ "\n",
+ "sources = [\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(frq_cen, fwidth=dfrq, is_integrated=True),\n",
+ " component=mp.Er,\n",
+ " center=mp.Vector3(0.5 * sr, 0, -0.5 * sz + dpml),\n",
+ " size=mp.Vector3(sr),\n",
+ " ),\n",
+ " mp.Source(\n",
+ " mp.GaussianSource(frq_cen, fwidth=dfrq, is_integrated=True),\n",
+ " component=mp.Ep,\n",
+ " center=mp.Vector3(0.5 * sr, 0, -0.5 * sz + dpml),\n",
+ " size=mp.Vector3(sr),\n",
+ " amplitude=-1j,\n",
+ " ),\n",
+ "]\n",
"\n",
"glass = mp.Medium(index=1.5)\n",
"\n",
- "geometry = [mp.Block(material=glass,\n",
- " size=mp.Vector3(sr,0,dpml+dsub),\n",
- " center=mp.Vector3(0.5*sr,0,-0.5*sz+0.5*(dpml+dsub)))]\n",
- "\n",
- "for n in range(zN-1,-1,-1):\n",
- " geometry.append(mp.Block(material=glass if n % 2 == 0 else mp.vacuum,\n",
- " size=mp.Vector3(r[n],0,zh),\n",
- " center=mp.Vector3(0.5*r[n],0,-0.5*sz+dpml+dsub+0.5*zh)))\n",
- " \n",
- "sim = mp.Simulation(cell_size=cell_size,\n",
- " boundary_layers=pml_layers,\n",
- " resolution=resolution,\n",
- " sources=sources,\n",
- " geometry=geometry,\n",
- " dimensions=mp.CYLINDRICAL,\n",
- " m=-1)\n",
+ "geometry = [\n",
+ " mp.Block(\n",
+ " material=glass,\n",
+ " size=mp.Vector3(sr, 0, dpml + dsub),\n",
+ " center=mp.Vector3(0.5 * sr, 0, -0.5 * sz + 0.5 * (dpml + dsub)),\n",
+ " )\n",
+ "]\n",
+ "\n",
+ "for n in range(zN - 1, -1, -1):\n",
+ " geometry.append(\n",
+ " mp.Block(\n",
+ " material=glass if n % 2 == 0 else mp.vacuum,\n",
+ " size=mp.Vector3(r[n], 0, zh),\n",
+ " center=mp.Vector3(0.5 * r[n], 0, -0.5 * sz + dpml + dsub + 0.5 * zh),\n",
+ " )\n",
+ " )\n",
+ "\n",
+ "sim = mp.Simulation(\n",
+ " cell_size=cell_size,\n",
+ " boundary_layers=pml_layers,\n",
+ " resolution=resolution,\n",
+ " sources=sources,\n",
+ " geometry=geometry,\n",
+ " dimensions=mp.CYLINDRICAL,\n",
+ " m=-1,\n",
+ ")\n",
"\n",
"## near-field monitor\n",
- "n2f_obj = sim.add_near2far(frq_cen, 0, 1, mp.Near2FarRegion(center=mp.Vector3(0.5*(sr-dpml),0,0.5*sz-dpml),size=mp.Vector3(sr-dpml)))\n",
+ "n2f_obj = sim.add_near2far(\n",
+ " frq_cen,\n",
+ " 0,\n",
+ " 1,\n",
+ " mp.Near2FarRegion(\n",
+ " center=mp.Vector3(0.5 * (sr - dpml), 0, 0.5 * sz - dpml),\n",
+ " size=mp.Vector3(sr - dpml),\n",
+ " ),\n",
+ ")\n",
"\n",
"sim.run(until_after_sources=100)\n",
"\n",
- "ff_r = sim.get_farfields(n2f_obj, ff_res, center=mp.Vector3(0.5*(sr-dpml),0,-0.5*sz+dpml+dsub+zh+focal_length),size=mp.Vector3(sr-dpml))\n",
- "ff_z = sim.get_farfields(n2f_obj, ff_res, center=mp.Vector3(z=-0.5*sz+dpml+dsub+zh+focal_length),size=mp.Vector3(z=spot_length))\n",
- "\n",
- "E2_r = np.absolute(ff_r['Ex'])**2+np.absolute(ff_r['Ey'])**2+np.absolute(ff_r['Ez'])**2\n",
- "E2_z = np.absolute(ff_z['Ex'])**2+np.absolute(ff_z['Ey'])**2+np.absolute(ff_z['Ez'])**2\n",
+ "ff_r = sim.get_farfields(\n",
+ " n2f_obj,\n",
+ " ff_res,\n",
+ " center=mp.Vector3(\n",
+ " 0.5 * (sr - dpml), 0, -0.5 * sz + dpml + dsub + zh + focal_length\n",
+ " ),\n",
+ " size=mp.Vector3(sr - dpml),\n",
+ ")\n",
+ "ff_z = sim.get_farfields(\n",
+ " n2f_obj,\n",
+ " ff_res,\n",
+ " center=mp.Vector3(z=-0.5 * sz + dpml + dsub + zh + focal_length),\n",
+ " size=mp.Vector3(z=spot_length),\n",
+ ")\n",
+ "\n",
+ "E2_r = (\n",
+ " np.absolute(ff_r[\"Ex\"]) ** 2\n",
+ " + np.absolute(ff_r[\"Ey\"]) ** 2\n",
+ " + np.absolute(ff_r[\"Ez\"]) ** 2\n",
+ ")\n",
+ "E2_z = (\n",
+ " np.absolute(ff_z[\"Ex\"]) ** 2\n",
+ " + np.absolute(ff_z[\"Ey\"]) ** 2\n",
+ " + np.absolute(ff_z[\"Ez\"]) ** 2\n",
+ ")\n",
"\n",
"plt.figure(dpi=200)\n",
- "plt.subplot(1,2,1)\n",
- "plt.semilogy(np.linspace(0,sr-dpml,len(E2_r)),E2_r,'bo-')\n",
- "plt.xlim(-2,20)\n",
- "plt.xticks([t for t in np.arange(0,25,5)])\n",
- "plt.grid(True,axis=\"y\",which=\"both\",ls=\"-\")\n",
- "plt.xlabel(r'$r$ coordinate (μm)')\n",
- "plt.ylabel(r'energy density of far fields, |E|$^2$')\n",
- "plt.subplot(1,2,2)\n",
- "plt.semilogy(np.linspace(focal_length-0.5*spot_length,focal_length+0.5*spot_length,len(E2_z)),E2_z,'bo-')\n",
- "plt.grid(True,axis=\"y\",which=\"both\",ls=\"-\")\n",
- "plt.xlabel(r'$z$ coordinate (μm)')\n",
- "plt.ylabel(r'energy density of far fields, |E|$^2$')\n",
- "plt.suptitle(r\"binary-phase zone plate with focal length $z$ = {} μm\".format(focal_length))\n",
+ "plt.subplot(1, 2, 1)\n",
+ "plt.semilogy(np.linspace(0, sr - dpml, len(E2_r)), E2_r, \"bo-\")\n",
+ "plt.xlim(-2, 20)\n",
+ "plt.xticks([t for t in np.arange(0, 25, 5)])\n",
+ "plt.grid(True, axis=\"y\", which=\"both\", ls=\"-\")\n",
+ "plt.xlabel(r\"$r$ coordinate (μm)\")\n",
+ "plt.ylabel(r\"energy density of far fields, |E|$^2$\")\n",
+ "plt.subplot(1, 2, 2)\n",
+ "plt.semilogy(\n",
+ " np.linspace(\n",
+ " focal_length - 0.5 * spot_length, focal_length + 0.5 * spot_length, len(E2_z)\n",
+ " ),\n",
+ " E2_z,\n",
+ " \"bo-\",\n",
+ ")\n",
+ "plt.grid(True, axis=\"y\", which=\"both\", ls=\"-\")\n",
+ "plt.xlabel(r\"$z$ coordinate (μm)\")\n",
+ "plt.ylabel(r\"energy density of far fields, |E|$^2$\")\n",
+ "plt.suptitle(\n",
+ " r\"binary-phase zone plate with focal length $z$ = {} μm\".format(focal_length)\n",
+ ")\n",
"plt.tight_layout()\n",
"plt.savefig(\"zone_plate_farfields.png\")"
]
diff --git a/python/examples/zone_plate.py b/python/examples/zone_plate.py
index 3759035ba..aec9b4991 100644
--- a/python/examples/zone_plate.py
+++ b/python/examples/zone_plate.py
@@ -3,99 +3,148 @@
import math
import matplotlib.pyplot as plt
-resolution = 25 # pixels/μm
+resolution = 25 # pixels/μm
-dpml = 1.0 # PML thickness
-dsub = 2.0 # substrate thickness
-dpad = 2.0 # padding betweeen zone plate and PML
-zh = 0.5 # zone-plate height
-zN = 25 # number of zones (odd zones: π phase shift, even zones: none)
-focal_length = 200 # focal length of zone plate
-spot_length = 100 # far-field line length
-ff_res = 10 # far-field resolution
+dpml = 1.0 # PML thickness
+dsub = 2.0 # substrate thickness
+dpad = 2.0 # padding betweeen zone plate and PML
+zh = 0.5 # zone-plate height
+zN = 25 # number of zones (odd zones: π phase shift, even zones: none)
+focal_length = 200 # focal length of zone plate
+spot_length = 100 # far-field line length
+ff_res = 10 # far-field resolution
pml_layers = [mp.PML(thickness=dpml)]
wvl_cen = 0.5
-frq_cen = 1/wvl_cen
-dfrq = 0.2*frq_cen
+frq_cen = 1 / wvl_cen
+dfrq = 0.2 * frq_cen
## radii of zones
## ref: eq. 7 of http://zoneplate.lbl.gov/theory
-r = [math.sqrt(n*wvl_cen*(focal_length+n*wvl_cen/4)) for n in range(1,zN+1)]
-
-sr = r[-1]+dpad+dpml
-sz = dpml+dsub+zh+dpad+dpml
-cell_size = mp.Vector3(sr,0,sz)
-
-sources = [mp.Source(mp.GaussianSource(frq_cen,fwidth=dfrq,is_integrated=True),
- component=mp.Er,
- center=mp.Vector3(0.5*sr,0,-0.5*sz+dpml),
- size=mp.Vector3(sr)),
- mp.Source(mp.GaussianSource(frq_cen,fwidth=dfrq,is_integrated=True),
- component=mp.Ep,
- center=mp.Vector3(0.5*sr,0,-0.5*sz+dpml),
- size=mp.Vector3(sr),
- amplitude=-1j)]
+r = [
+ math.sqrt(n * wvl_cen * (focal_length + n * wvl_cen / 4)) for n in range(1, zN + 1)
+]
+
+sr = r[-1] + dpad + dpml
+sz = dpml + dsub + zh + dpad + dpml
+cell_size = mp.Vector3(sr, 0, sz)
+
+sources = [
+ mp.Source(
+ mp.GaussianSource(frq_cen, fwidth=dfrq, is_integrated=True),
+ component=mp.Er,
+ center=mp.Vector3(0.5 * sr, 0, -0.5 * sz + dpml),
+ size=mp.Vector3(sr),
+ ),
+ mp.Source(
+ mp.GaussianSource(frq_cen, fwidth=dfrq, is_integrated=True),
+ component=mp.Ep,
+ center=mp.Vector3(0.5 * sr, 0, -0.5 * sz + dpml),
+ size=mp.Vector3(sr),
+ amplitude=-1j,
+ ),
+]
glass = mp.Medium(index=1.5)
-geometry = [mp.Block(material=glass,
- size=mp.Vector3(sr,0,dpml+dsub),
- center=mp.Vector3(0.5*sr,0,-0.5*sz+0.5*(dpml+dsub)))]
-
-geometry.extend(mp.Block(material=glass if n % 2 == 0 else mp.vacuum, size=mp.Vector3(r[n], 0, zh), center=mp.Vector3(0.5 * r[n], 0, -0.5 * sz + dpml + dsub + 0.5 * zh)) for n in range(zN - 1, -1, -1))
-
-sim = mp.Simulation(cell_size=cell_size,
- boundary_layers=pml_layers,
- resolution=resolution,
- sources=sources,
- geometry=geometry,
- dimensions=mp.CYLINDRICAL,
- m=-1)
+geometry = [
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(sr, 0, dpml + dsub),
+ center=mp.Vector3(0.5 * sr, 0, -0.5 * sz + 0.5 * (dpml + dsub)),
+ )
+]
+
+geometry.extend(
+ mp.Block(
+ material=glass if n % 2 == 0 else mp.vacuum,
+ size=mp.Vector3(r[n], 0, zh),
+ center=mp.Vector3(0.5 * r[n], 0, -0.5 * sz + dpml + dsub + 0.5 * zh),
+ )
+ for n in range(zN - 1, -1, -1)
+)
+
+sim = mp.Simulation(
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ resolution=resolution,
+ sources=sources,
+ geometry=geometry,
+ dimensions=mp.CYLINDRICAL,
+ m=-1,
+)
## near-field monitor
-n2f_obj = sim.add_near2far(frq_cen,
- 0,
- 1,
- mp.Near2FarRegion(center=mp.Vector3(0.5*(sr-dpml),0,0.5*sz-dpml),
- size=mp.Vector3(sr-dpml)),
- mp.Near2FarRegion(center=mp.Vector3(sr-dpml,0,0.5*sz-dpml-0.5*(dsub+zh+dpad)),
- size=mp.Vector3(z=dsub+zh+dpad)))
+n2f_obj = sim.add_near2far(
+ frq_cen,
+ 0,
+ 1,
+ mp.Near2FarRegion(
+ center=mp.Vector3(0.5 * (sr - dpml), 0, 0.5 * sz - dpml),
+ size=mp.Vector3(sr - dpml),
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(sr - dpml, 0, 0.5 * sz - dpml - 0.5 * (dsub + zh + dpad)),
+ size=mp.Vector3(z=dsub + zh + dpad),
+ ),
+)
sim.plot2D()
if mp.am_master():
- plt.savefig("zone_plate_epsilon.png",bbox_inches='tight',dpi=150)
+ plt.savefig("zone_plate_epsilon.png", bbox_inches="tight", dpi=150)
sim.run(until_after_sources=100)
-ff_r = sim.get_farfields(n2f_obj,
- ff_res,
- center=mp.Vector3(0.5*(sr-dpml),0,-0.5*sz+dpml+dsub+zh+focal_length),
- size=mp.Vector3(sr-dpml))
-
-ff_z = sim.get_farfields(n2f_obj,
- ff_res,
- center=mp.Vector3(z=-0.5*sz+dpml+dsub+zh+focal_length),
- size=mp.Vector3(z=spot_length))
-
-E2_r = np.absolute(ff_r['Ex'])**2+np.absolute(ff_r['Ey'])**2+np.absolute(ff_r['Ez'])**2
-E2_z = np.absolute(ff_z['Ex'])**2+np.absolute(ff_z['Ey'])**2+np.absolute(ff_z['Ez'])**2
+ff_r = sim.get_farfields(
+ n2f_obj,
+ ff_res,
+ center=mp.Vector3(
+ 0.5 * (sr - dpml), 0, -0.5 * sz + dpml + dsub + zh + focal_length
+ ),
+ size=mp.Vector3(sr - dpml),
+)
+
+ff_z = sim.get_farfields(
+ n2f_obj,
+ ff_res,
+ center=mp.Vector3(z=-0.5 * sz + dpml + dsub + zh + focal_length),
+ size=mp.Vector3(z=spot_length),
+)
+
+E2_r = (
+ np.absolute(ff_r["Ex"]) ** 2
+ + np.absolute(ff_r["Ey"]) ** 2
+ + np.absolute(ff_r["Ez"]) ** 2
+)
+E2_z = (
+ np.absolute(ff_z["Ex"]) ** 2
+ + np.absolute(ff_z["Ey"]) ** 2
+ + np.absolute(ff_z["Ez"]) ** 2
+)
if mp.am_master():
plt.figure(dpi=200)
- plt.subplot(1,2,1)
- plt.semilogy(np.linspace(0,sr-dpml,len(E2_r)),E2_r,'bo-')
- plt.xlim(-2,20)
- plt.xticks(list(np.arange(0,25,5)))
- plt.grid(True,axis="y",which="both",ls="-")
- plt.xlabel(r'$r$ coordinate (μm)')
- plt.ylabel(r'energy density of far fields, |E|$^2$')
- plt.subplot(1,2,2)
- plt.semilogy(np.linspace(focal_length-0.5*spot_length,focal_length+0.5*spot_length,len(E2_z)),E2_z,'bo-')
- plt.grid(True,axis="y",which="both",ls="-")
- plt.xlabel(r'$z$ coordinate (μm)')
- plt.ylabel(r'energy density of far fields, |E|$^2$')
+ plt.subplot(1, 2, 1)
+ plt.semilogy(np.linspace(0, sr - dpml, len(E2_r)), E2_r, "bo-")
+ plt.xlim(-2, 20)
+ plt.xticks(list(np.arange(0, 25, 5)))
+ plt.grid(True, axis="y", which="both", ls="-")
+ plt.xlabel(r"$r$ coordinate (μm)")
+ plt.ylabel(r"energy density of far fields, |E|$^2$")
+ plt.subplot(1, 2, 2)
+ plt.semilogy(
+ np.linspace(
+ focal_length - 0.5 * spot_length,
+ focal_length + 0.5 * spot_length,
+ len(E2_z),
+ ),
+ E2_z,
+ "bo-",
+ )
+ plt.grid(True, axis="y", which="both", ls="-")
+ plt.xlabel(r"$z$ coordinate (μm)")
+ plt.ylabel(r"energy density of far fields, |E|$^2$")
plt.suptitle(f"binary-phase zone plate with focal length $z$ = {focal_length} μm")
plt.tight_layout()
diff --git a/python/geom.py b/python/geom.py
index a244cc137..323bb59ad 100755
--- a/python/geom.py
+++ b/python/geom.py
@@ -12,7 +12,7 @@
import meep as mp
-FreqRange = namedtuple('FreqRange', ['min', 'max'])
+FreqRange = namedtuple("FreqRange", ["min", "max"])
def check_nonnegative(prop, val):
@@ -21,8 +21,9 @@ def check_nonnegative(prop, val):
else:
raise ValueError(f"{prop} cannot be negative. Got {val}")
+
def init_do_averaging(mat_func):
- if not hasattr(mat_func, 'do_averaging'):
+ if not hasattr(mat_func, "do_averaging"):
mat_func.do_averaging = False
@@ -220,9 +221,11 @@ def close(self, v, tol=1.0e-7):
v1.close(v2, [tol])
```
"""
- return (abs(self.x - v.x) <= tol and
- abs(self.y - v.y) <= tol and
- abs(self.z - v.z) <= tol)
+ return (
+ abs(self.x - v.x) <= tol
+ and abs(self.y - v.y) <= tol
+ and abs(self.z - v.z) <= tol
+ )
def rotate(self, axis, theta):
"""
@@ -307,32 +310,36 @@ class Medium(object):
Dispersive dielectric and magnetic materials, above, are specified via a list of
objects that are subclasses of type `Susceptibility`.
"""
- def __init__(self, epsilon_diag=Vector3(1, 1, 1),
- epsilon_offdiag=Vector3(),
- mu_diag=Vector3(1, 1, 1),
- mu_offdiag=Vector3(),
- E_susceptibilities=None,
- H_susceptibilities=None,
- E_chi2_diag=Vector3(),
- E_chi3_diag=Vector3(),
- H_chi2_diag=Vector3(),
- H_chi3_diag=Vector3(),
- D_conductivity_diag=Vector3(),
- D_conductivity_offdiag=Vector3(),
- B_conductivity_diag=Vector3(),
- B_conductivity_offdiag=Vector3(),
- epsilon=None,
- index=None,
- mu=None,
- chi2=None,
- chi3=None,
- D_conductivity=None,
- B_conductivity=None,
- E_chi2=None,
- E_chi3=None,
- H_chi2=None,
- H_chi3=None,
- valid_freq_range=FreqRange(min=-mp.inf, max=mp.inf)):
+
+ def __init__(
+ self,
+ epsilon_diag=Vector3(1, 1, 1),
+ epsilon_offdiag=Vector3(),
+ mu_diag=Vector3(1, 1, 1),
+ mu_offdiag=Vector3(),
+ E_susceptibilities=None,
+ H_susceptibilities=None,
+ E_chi2_diag=Vector3(),
+ E_chi3_diag=Vector3(),
+ H_chi2_diag=Vector3(),
+ H_chi3_diag=Vector3(),
+ D_conductivity_diag=Vector3(),
+ D_conductivity_offdiag=Vector3(),
+ B_conductivity_diag=Vector3(),
+ B_conductivity_offdiag=Vector3(),
+ epsilon=None,
+ index=None,
+ mu=None,
+ chi2=None,
+ chi3=None,
+ D_conductivity=None,
+ B_conductivity=None,
+ E_chi2=None,
+ E_chi3=None,
+ H_chi2=None,
+ H_chi3=None,
+ valid_freq_range=FreqRange(min=-mp.inf, max=mp.inf),
+ ):
"""
Creates a `Medium` object.
@@ -406,9 +413,13 @@ def __init__(self, epsilon_diag=Vector3(1, 1, 1),
mu_diag = Vector3(mu, mu, mu)
if D_conductivity:
- D_conductivity_diag = Vector3(D_conductivity, D_conductivity, D_conductivity)
+ D_conductivity_diag = Vector3(
+ D_conductivity, D_conductivity, D_conductivity
+ )
if B_conductivity:
- B_conductivity_diag = Vector3(B_conductivity, B_conductivity, B_conductivity)
+ B_conductivity_diag = Vector3(
+ B_conductivity, B_conductivity, B_conductivity
+ )
if E_chi2:
E_chi2_diag = Vector3(E_chi2, E_chi2, E_chi2)
@@ -436,7 +447,7 @@ def __init__(self, epsilon_diag=Vector3(1, 1, 1),
self.valid_freq_range = valid_freq_range
def __repr__(self):
- return 'Medium()'
+ return "Medium()"
def transform(self, m):
"""
@@ -451,12 +462,22 @@ def transform(self, m):
left-handed materials, which are [problematic in nondispersive
media](FAQ.md#why-does-my-simulation-diverge-if-0).
"""
- eps = Matrix(mp.Vector3(self.epsilon_diag.x, self.epsilon_offdiag.x, self.epsilon_offdiag.y),
- mp.Vector3(self.epsilon_offdiag.x, self.epsilon_diag.y, self.epsilon_offdiag.z),
- mp.Vector3(self.epsilon_offdiag.y, self.epsilon_offdiag.z, self.epsilon_diag.z))
- mu = Matrix(mp.Vector3(self.mu_diag.x, self.mu_offdiag.x, self.mu_offdiag.y),
- mp.Vector3(self.mu_offdiag.x, self.mu_diag.y, self.mu_offdiag.z),
- mp.Vector3(self.mu_offdiag.y, self.mu_offdiag.z, self.mu_diag.z))
+ eps = Matrix(
+ mp.Vector3(
+ self.epsilon_diag.x, self.epsilon_offdiag.x, self.epsilon_offdiag.y
+ ),
+ mp.Vector3(
+ self.epsilon_offdiag.x, self.epsilon_diag.y, self.epsilon_offdiag.z
+ ),
+ mp.Vector3(
+ self.epsilon_offdiag.y, self.epsilon_offdiag.z, self.epsilon_diag.z
+ ),
+ )
+ mu = Matrix(
+ mp.Vector3(self.mu_diag.x, self.mu_offdiag.x, self.mu_offdiag.y),
+ mp.Vector3(self.mu_offdiag.x, self.mu_diag.y, self.mu_offdiag.z),
+ mp.Vector3(self.mu_offdiag.y, self.mu_offdiag.z, self.mu_diag.z),
+ )
new_eps = (m * eps * m.transpose()) / abs(m.determinant())
new_mu = (m * mu * m.transpose()) / abs(m.determinant())
@@ -472,26 +493,48 @@ def transform(self, m):
s.transform(m)
def rotate(self, axis, theta):
- T = get_rotation_matrix(axis,theta)
+ T = get_rotation_matrix(axis, theta)
self.transform(T)
- def epsilon(self,freq):
+ def epsilon(self, freq):
"""
Returns the medium's permittivity tensor as a 3x3 Numpy array at the specified
frequency `freq` which can be either a scalar, list, or Numpy array. In the case
of a list/array of N frequency points, a Numpy array of size Nx3x3 is returned.
"""
- return self._get_epsmu(self.epsilon_diag, self.epsilon_offdiag, self.E_susceptibilities, self.D_conductivity_diag, self.D_conductivity_offdiag, freq)
+ return self._get_epsmu(
+ self.epsilon_diag,
+ self.epsilon_offdiag,
+ self.E_susceptibilities,
+ self.D_conductivity_diag,
+ self.D_conductivity_offdiag,
+ freq,
+ )
- def mu(self,freq):
+ def mu(self, freq):
"""
Returns the medium's permeability tensor as a 3x3 Numpy array at the specified
frequency `freq` which can be either a scalar, list, or Numpy array. In the case
of a list/array of N frequency points, a Numpy array of size Nx3x3 is returned.
"""
- return self._get_epsmu(self.mu_diag, self.mu_offdiag, self.H_susceptibilities, self.B_conductivity_diag, self.B_conductivity_offdiag, freq)
-
- def _get_epsmu(self, diag, offdiag, susceptibilities, conductivity_diag, conductivity_offdiag, freq):
+ return self._get_epsmu(
+ self.mu_diag,
+ self.mu_offdiag,
+ self.H_susceptibilities,
+ self.B_conductivity_diag,
+ self.B_conductivity_offdiag,
+ freq,
+ )
+
+ def _get_epsmu(
+ self,
+ diag,
+ offdiag,
+ susceptibilities,
+ conductivity_diag,
+ conductivity_offdiag,
+ freq,
+ ):
# Clean the input
if np.isscalar(freq):
freqs = np.array(freq)[np.newaxis, np.newaxis, np.newaxis]
@@ -501,49 +544,60 @@ def _get_epsmu(self, diag, offdiag, susceptibilities, conductivity_diag, conduct
# Check for values outside of allowed ranges
if np.min(np.squeeze(freqs)) < self.valid_freq_range.min:
- raise ValueError(f"User specified frequency {np.min(np.squeeze(freqs))} is below the Medium\'s limit, {self.valid_freq_range.min}.")
+ raise ValueError(
+ f"User specified frequency {np.min(np.squeeze(freqs))} is below the Medium's limit, {self.valid_freq_range.min}."
+ )
if np.max(np.squeeze(freqs)) > self.valid_freq_range.max:
- raise ValueError(f"User specified frequency {np.max(np.squeeze(freqs))} is above the Medium\'s limit, {self.valid_freq_range.max}.")
-
+ raise ValueError(
+ f"User specified frequency {np.max(np.squeeze(freqs))} is above the Medium's limit, {self.valid_freq_range.max}."
+ )
# Initialize with instantaneous dielectric tensor
- epsmu = np.expand_dims(Matrix(diag=diag,offdiag=offdiag),axis=0)
+ epsmu = np.expand_dims(Matrix(diag=diag, offdiag=offdiag), axis=0)
# Iterate through susceptibilities
for i_sus in range(len(susceptibilities)):
epsmu = epsmu + susceptibilities[i_sus].eval_susceptibility(freqs)
# Account for conductivity term (only multiply if nonzero to avoid unnecessary complex numbers)
- conductivity = np.expand_dims(Matrix(diag=conductivity_diag,offdiag=conductivity_offdiag),axis=0)
+ conductivity = np.expand_dims(
+ Matrix(diag=conductivity_diag, offdiag=conductivity_offdiag), axis=0
+ )
if np.count_nonzero(conductivity) > 0:
- epsmu = (1 + 1j/(2*np.pi*freqs) * conductivity) * epsmu
+ epsmu = (1 + 1j / (2 * np.pi * freqs) * conductivity) * epsmu
# Convert list matrix to 3D numpy array size [freqs,3,3]
return np.squeeze(epsmu)
+
class MaterialGrid(object):
"""
This class is used to specify materials on a rectilinear grid. A class object is passed
as the `material` argument of a [`Block`](#block) geometric object or the `default_material`
argument of the [`Simulation`](#Simulation) constructor (similar to a [material function](#medium)).
"""
+
def check_weights(self, w):
if np.amin(w) >= 0.0 and np.amax(w) <= 1.0:
return w
- warnings.warn('The weights parameter of MaterialGrid must be in the range [0,1].')
- return np.clip(w, 0., 1.)
-
- def __init__(self,
- grid_size,
- medium1,
- medium2,
- weights=None,
- grid_type="U_DEFAULT",
- do_averaging=True,
- beta=0,
- eta=0.5,
- damping=0):
+ warnings.warn(
+ "The weights parameter of MaterialGrid must be in the range [0,1]."
+ )
+ return np.clip(w, 0.0, 1.0)
+
+ def __init__(
+ self,
+ grid_size,
+ medium1,
+ medium2,
+ weights=None,
+ grid_type="U_DEFAULT",
+ do_averaging=True,
+ beta=0,
+ eta=0.5,
+ damping=0,
+ ):
"""
Creates a `MaterialGrid` object.
@@ -594,15 +648,17 @@ def __init__(self,
self.grid_size = mp.Vector3(*grid_size)
self.medium1 = medium1
self.medium2 = medium2
+
def isclose(a, b, rel_tol=1e-09, abs_tol=0.0):
- return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
- if isclose(self.grid_size.x,0):
+ return abs(a - b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
+
+ if isclose(self.grid_size.x, 0):
self.grid_size.x = 1
- if isclose(self.grid_size.y,0):
+ if isclose(self.grid_size.y, 0):
self.grid_size.y = 1
- if isclose(self.grid_size.z,0):
+ if isclose(self.grid_size.z, 0):
self.grid_size.z = 1
- self.num_params=int(self.grid_size.x*self.grid_size.y*self.grid_size.z)
+ self.num_params = int(self.grid_size.x * self.grid_size.y * self.grid_size.z)
self.do_averaging = do_averaging
self.beta = beta
self.eta = eta
@@ -610,18 +666,21 @@ def isclose(a, b, rel_tol=1e-09, abs_tol=0.0):
if weights is None:
self.weights = np.zeros((self.num_params,))
elif weights.size != self.num_params:
- raise ValueError("weights of shape {} do not match user specified grid dimension: {}".format(weights.size,self.grid_size))
+ raise ValueError(
+ "weights of shape {} do not match user specified grid dimension: {}".format(
+ weights.size, self.grid_size
+ )
+ )
else:
self.weights = self.check_weights(weights).flatten().astype(np.float64)
- grid_type_dict = {
- "U_MIN":0,
- "U_PROD":1,
- "U_MEAN":2,
- "U_DEFAULT":3
- }
+ grid_type_dict = {"U_MIN": 0, "U_PROD": 1, "U_MEAN": 2, "U_DEFAULT": 3}
if grid_type not in grid_type_dict:
- raise ValueError("Invalid grid_type: {}. Must be either U_MIN, U_PROD, U_MEAN, or U_DEFAULT".format(grid_type_dict))
+ raise ValueError(
+ "Invalid grid_type: {}. Must be either U_MIN, U_PROD, U_MEAN, or U_DEFAULT".format(
+ grid_type_dict
+ )
+ )
self.grid_type = grid_type_dict[grid_type]
self.swigobj = None
@@ -631,15 +690,19 @@ def update_weights(self, x):
Reset the `weights` to `x`.
"""
if x.size != self.num_params:
- raise ValueError(f"weights of shape {self.weights.size} do not match user specified grid dimension: {self.grid_size}")
+ raise ValueError(
+ f"weights of shape {self.weights.size} do not match user specified grid dimension: {self.grid_size}"
+ )
self.weights[:] = self.check_weights(x).flatten().astype(np.float64)
+
class Susceptibility(object):
"""
Parent class for various dispersive susceptibility terms, parameterized by an
anisotropic amplitude $\\sigma$. See [Material Dispersion](Materials.md#material-dispersion).
"""
+
def __init__(self, sigma_diag=Vector3(), sigma_offdiag=Vector3(), sigma=None):
"""
+ **`sigma` [`number`]** — The scale factor $\\sigma$.
@@ -652,11 +715,13 @@ def __init__(self, sigma_diag=Vector3(), sigma_offdiag=Vector3(), sigma=None):
\\begin{pmatrix} a & u & v \\\\ u & b & w \\\\ v & w & c \\end{pmatrix}
"""
- self.sigma_diag = Vector3(sigma, sigma, sigma) if sigma else Vector3(*sigma_diag)
+ self.sigma_diag = (
+ Vector3(sigma, sigma, sigma) if sigma else Vector3(*sigma_diag)
+ )
self.sigma_offdiag = Vector3(*sigma_offdiag)
def transform(self, m):
- sigma = Matrix(diag=self.sigma_diag,offdiag=self.sigma_offdiag)
+ sigma = Matrix(diag=self.sigma_diag, offdiag=self.sigma_offdiag)
new_sigma = (m * sigma * m.transpose()) / abs(m.determinant())
self.sigma_diag = mp.Vector3(new_sigma.c1.x, new_sigma.c2.y, new_sigma.c3.z)
self.sigma_offdiag = mp.Vector3(new_sigma.c2.x, new_sigma.c3.x, new_sigma.c3.y)
@@ -668,6 +733,7 @@ class LorentzianSusceptibility(Susceptibility):
oscillator) form. See [Material Dispersion](Materials.md#material-dispersion), with
the parameters (in addition to $\\sigma$):
"""
+
def __init__(self, frequency=0.0, gamma=0.0, **kwargs):
"""
+ **`frequency` [`number`]** — The resonance frequency $f_n = \\omega_n / 2\\pi$.
@@ -682,12 +748,28 @@ def __init__(self, frequency=0.0, gamma=0.0, **kwargs):
self.frequency = frequency
self.gamma = gamma
- def eval_susceptibility(self,freq):
- sigma = np.expand_dims(Matrix(diag=self.sigma_diag,offdiag=self.sigma_offdiag),axis=0)
+ def eval_susceptibility(self, freq):
+ sigma = np.expand_dims(
+ Matrix(diag=self.sigma_diag, offdiag=self.sigma_offdiag), axis=0
+ )
if self.gamma == 0:
- return self.frequency*self.frequency / (self.frequency*self.frequency - freq*freq) * sigma
+ return (
+ self.frequency
+ * self.frequency
+ / (self.frequency * self.frequency - freq * freq)
+ * sigma
+ )
else:
- return self.frequency*self.frequency / (self.frequency*self.frequency - freq*freq - 1j*self.gamma*freq) * sigma
+ return (
+ self.frequency
+ * self.frequency
+ / (
+ self.frequency * self.frequency
+ - freq * freq
+ - 1j * self.gamma * freq
+ )
+ * sigma
+ )
class DrudeSusceptibility(Susceptibility):
@@ -695,6 +777,7 @@ class DrudeSusceptibility(Susceptibility):
Specifies a single dispersive susceptibility of Drude form. See [Material
Dispersion](Materials.md#material-dispersion), with the parameters (in addition to $\\sigma$):
"""
+
def __init__(self, frequency=0.0, gamma=0.0, **kwargs):
"""
+ **`frequency` [`number`]** — The frequency scale factor $f_n = \\omega_n / 2\\pi$
@@ -706,12 +789,19 @@ def __init__(self, frequency=0.0, gamma=0.0, **kwargs):
self.frequency = frequency
self.gamma = gamma
- def eval_susceptibility(self,freq):
- sigma = np.expand_dims(Matrix(diag=self.sigma_diag,offdiag=self.sigma_offdiag),axis=0)
+ def eval_susceptibility(self, freq):
+ sigma = np.expand_dims(
+ Matrix(diag=self.sigma_diag, offdiag=self.sigma_offdiag), axis=0
+ )
if self.gamma == 0:
- return -self.frequency*self.frequency / (freq*(freq)) * sigma
+ return -self.frequency * self.frequency / (freq * (freq)) * sigma
else:
- return -self.frequency*self.frequency / (freq*(freq + 1j*self.gamma)) * sigma
+ return (
+ -self.frequency
+ * self.frequency
+ / (freq * (freq + 1j * self.gamma))
+ * sigma
+ )
class NoisyLorentzianSusceptibility(LorentzianSusceptibility):
@@ -722,6 +812,7 @@ class NoisyLorentzianSusceptibility(LorentzianSusceptibility):
`gamma` parameters, but with an additional Gaussian random noise term (uncorrelated in
space and time, zero mean) added to the **P** damped-oscillator equation.
"""
+
def __init__(self, noise_amp=0.0, **kwargs):
"""
+ **`noise_amp` [`number`]** — The noise has root-mean square amplitude σ $\\times$
@@ -752,6 +843,7 @@ class NoisyDrudeSusceptibility(DrudeSusceptibility):
`gamma` parameters, but with an additional Gaussian random noise term (uncorrelated in
space and time, zero mean) added to the **P** damped-oscillator equation.
"""
+
def __init__(self, noise_amp=0.0, **kwargs):
"""
+ **`noise_amp` [`number`]** — The noise has root-mean square amplitude σ $\\times$
@@ -782,6 +874,7 @@ class GyrotropicLorentzianSusceptibility(LorentzianSusceptibility):
parameters are `sigma`, `frequency`, and `gamma`, which have the [usual
meanings](#susceptibility), and an additional 3-vector `bias`:
"""
+
def __init__(self, bias=Vector3(), **kwargs):
"""
+ **`bias` [`Vector3`]** — The gyrotropy vector. Its direction determines the
@@ -800,6 +893,7 @@ class GyrotropicDrudeSusceptibility(DrudeSusceptibility):
parameters are `sigma`, `frequency`, and `gamma`, which have the [usual
meanings](#susceptibility), and an additional 3-vector `bias`:
"""
+
def __init__(self, bias=Vector3(), **kwargs):
"""
+ **`bias` [`Vector3`]** — The gyrotropy vector. Its direction determines the
@@ -820,6 +914,7 @@ class GyrotropicSaturatedSusceptibility(Susceptibility):
different from the Lorentzian and Drude case. It also takes a 3-vector `bias`
parameter and an `alpha` parameter:
"""
+
def __init__(self, bias=Vector3(), frequency=0.0, gamma=0.0, alpha=0.0, **kwargs):
"""
+ **`sigma` [`number`]** — The coupling factor $\\sigma_n / 2\\pi$ between the
@@ -860,6 +955,7 @@ class MultilevelAtom(Susceptibility):
atomic level. See [Materials/Saturable Gain and
Absorption](Materials.md#saturable-gain-and-absorption).
"""
+
def __init__(self, initial_populations=None, transitions=None, **kwargs):
super(MultilevelAtom, self).__init__(**kwargs)
self.initial_populations = initial_populations or []
@@ -867,17 +963,18 @@ def __init__(self, initial_populations=None, transitions=None, **kwargs):
class Transition(object):
- """
- """
-
- def __init__(self,
- from_level,
- to_level,
- transition_rate=0,
- frequency=0,
- sigma_diag=Vector3(1, 1, 1),
- gamma=0,
- pumping_rate=0):
+ """ """
+
+ def __init__(
+ self,
+ from_level,
+ to_level,
+ transition_rate=0,
+ frequency=0,
+ sigma_diag=Vector3(1, 1, 1),
+ gamma=0,
+ pumping_rate=0,
+ ):
"""
Construct a `Transition`.
@@ -896,8 +993,8 @@ def __init__(self,
+ **`pumping_rate` [`number`]** — The pumping rate $f = \\omega / 2\\pi$. Default is 0.
"""
- self.from_level = check_nonnegative('from_level', from_level)
- self.to_level = check_nonnegative('to_level', to_level)
+ self.from_level = check_nonnegative("from_level", from_level)
+ self.to_level = check_nonnegative("to_level", to_level)
self.transition_rate = transition_rate
self.frequency = frequency
self.sigma_diag = sigma_diag
@@ -958,6 +1055,7 @@ class GeometricObject(object):
geometry = [mp.Prism(vertices, height=1.5, center=mp.Vector3(), material=cSi)]
```
"""
+
def __init__(self, material=Medium(), center=Vector3(), epsilon_func=None):
"""
Construct a `GeometricObject`.
@@ -1092,7 +1190,10 @@ class Wedge(Cylinder):
"""
Represents a cylindrical wedge.
"""
- def __init__(self, radius, wedge_angle=2 * math.pi, wedge_start=Vector3(1, 0, 0), **kwargs):
+
+ def __init__(
+ self, radius, wedge_angle=2 * math.pi, wedge_start=Vector3(1, 0, 0), **kwargs
+ ):
"""
Constructs a `Wedge`.
"""
@@ -1109,6 +1210,7 @@ class Cone(Cylinder):
the radius of the tip is given by the new property, `radius2`. The `center` of a cone
is halfway between the two circular ends.
"""
+
def __init__(self, radius, radius2=0, **kwargs):
"""
Construct a `Cone`.
@@ -1125,7 +1227,15 @@ class Block(GeometricObject):
"""
A parallelepiped (i.e., a brick, possibly with non-orthogonal axes).
"""
- def __init__(self, size, e1=Vector3(1, 0, 0), e2=Vector3(0, 1, 0), e3=Vector3(0, 0, 1), **kwargs):
+
+ def __init__(
+ self,
+ size,
+ e1=Vector3(1, 0, 0),
+ e2=Vector3(0, 1, 0),
+ e3=Vector3(0, 0, 1),
+ **kwargs,
+ ):
"""
Construct a `Block`.
@@ -1150,6 +1260,7 @@ class Ellipsoid(Block):
An ellipsoid. This is actually a subclass of `Block`, and inherits all the same
properties, but defines an ellipsoid inscribed inside the block.
"""
+
def __init__(self, **kwargs):
"""
Construct an `Ellipsoid`.
@@ -1161,7 +1272,16 @@ class Prism(GeometricObject):
"""
Polygonal prism type.
"""
- def __init__(self, vertices, height, axis=Vector3(z=1), center=None, sidewall_angle=0, **kwargs):
+
+ def __init__(
+ self,
+ vertices,
+ height,
+ axis=Vector3(z=1),
+ center=None,
+ sidewall_angle=0,
+ **kwargs,
+ ):
"""
Construct a `Prism`.
@@ -1188,8 +1308,12 @@ def __init__(self, vertices, height, axis=Vector3(z=1), center=None, sidewall_an
radians. Default is 0.
"""
- centroid = sum(vertices, Vector3(0)) * (1.0 / len(vertices)) # centroid of floor polygon
- original_center = centroid + (0.5*height)*axis # center as computed from vertices, height, axis
+ centroid = sum(vertices, Vector3(0)) * (
+ 1.0 / len(vertices)
+ ) # centroid of floor polygon
+ original_center = (
+ centroid + (0.5 * height) * axis
+ ) # center as computed from vertices, height, axis
if center is not None and len(vertices):
center = Vector3(*center)
# translate vertices to center prism at requested center
@@ -1242,7 +1366,15 @@ class Matrix(object):
Scales the matrix `m` by the number `s`.
"""
- def __init__(self, c1=Vector3(), c2=Vector3(), c3=Vector3(), diag=Vector3(), offdiag=Vector3()):
+
+ def __init__(
+ self,
+ c1=Vector3(),
+ c2=Vector3(),
+ c3=Vector3(),
+ diag=Vector3(),
+ offdiag=Vector3(),
+ ):
"""
Constructs a `Matrix`.
"""
@@ -1289,23 +1421,23 @@ def __repr__(self):
return f"<<{r0[0]} {r0[1]} {r0[2]}>\n <{r1[0]} {r1[1]} {r1[2]}>\n <{r2[0]} {r2[1]} {r2[2]}>>"
def __array__(self):
- return np.array([self.row(0).__array__(),
- self.row(1).__array__(),
- self.row(2).__array__()])
+ return np.array(
+ [self.row(0).__array__(), self.row(1).__array__(), self.row(2).__array__()]
+ )
def row(self, i):
return Vector3(self.c1[i], self.c2[i], self.c3[i])
def mm_mult(self, m):
- c1 = Vector3(self.row(0).dot(m.c1),
- self.row(1).dot(m.c1),
- self.row(2).dot(m.c1))
- c2 = Vector3(self.row(0).dot(m.c2),
- self.row(1).dot(m.c2),
- self.row(2).dot(m.c2))
- c3 = Vector3(self.row(0).dot(m.c3),
- self.row(1).dot(m.c3),
- self.row(2).dot(m.c3))
+ c1 = Vector3(
+ self.row(0).dot(m.c1), self.row(1).dot(m.c1), self.row(2).dot(m.c1)
+ )
+ c2 = Vector3(
+ self.row(0).dot(m.c2), self.row(1).dot(m.c2), self.row(2).dot(m.c2)
+ )
+ c3 = Vector3(
+ self.row(0).dot(m.c3), self.row(1).dot(m.c3), self.row(2).dot(m.c3)
+ )
return Matrix(c1, c2, c3)
@@ -1316,16 +1448,20 @@ def scale(self, s):
return Matrix(self.c1.scale(s), self.c2.scale(s), self.c3.scale(s))
def determinant(self):
- sum1 = sum([
- functools.reduce(operator.mul, [self[x][x] for x in range(3)]),
- functools.reduce(operator.mul, [self[0][1], self[1][2], self[2][0]]),
- functools.reduce(operator.mul, [self[1][0], self[2][1], self[0][2]])
- ])
- sum2 = sum([
- functools.reduce(operator.mul, [self[0][2], self[1][1], self[2][0]]),
- functools.reduce(operator.mul, [self[0][1], self[1][0], self[2][2]]),
- functools.reduce(operator.mul, [self[1][2], self[2][1], self[0][0]])
- ])
+ sum1 = sum(
+ [
+ functools.reduce(operator.mul, [self[x][x] for x in range(3)]),
+ functools.reduce(operator.mul, [self[0][1], self[1][2], self[2][0]]),
+ functools.reduce(operator.mul, [self[1][0], self[2][1], self[0][2]]),
+ ]
+ )
+ sum2 = sum(
+ [
+ functools.reduce(operator.mul, [self[0][2], self[1][1], self[2][0]]),
+ functools.reduce(operator.mul, [self[0][1], self[1][0], self[2][2]]),
+ functools.reduce(operator.mul, [self[1][2], self[2][1], self[0][0]]),
+ ]
+ )
return sum1 - sum2
def conj(self):
@@ -1361,13 +1497,14 @@ def inverse(self):
class Lattice(object):
-
- def __init__(self,
- size=Vector3(1, 1, 1),
- basis_size=Vector3(1, 1, 1),
- basis1=Vector3(1, 0, 0),
- basis2=Vector3(0, 1, 0),
- basis3=Vector3(0, 0, 1)):
+ def __init__(
+ self,
+ size=Vector3(1, 1, 1),
+ basis_size=Vector3(1, 1, 1),
+ basis1=Vector3(1, 0, 0),
+ basis2=Vector3(0, 1, 0),
+ basis3=Vector3(0, 0, 1),
+ ):
self.size = Vector3(*size)
self.basis_size = Vector3(*basis_size)
@@ -1469,6 +1606,7 @@ def reciprocal_to_lattice(x, lat):
def geometric_object_duplicates(shift_vector, min_multiple, max_multiple, go):
shift_vector = Vector3(*shift_vector)
+
def _dup(min_multiple, lst):
if min_multiple > max_multiple:
return lst
@@ -1482,12 +1620,13 @@ def geometric_objects_duplicates(shift_vector, min_multiple, max_multiple, go_li
dups = []
shift_vector = Vector3(*shift_vector)
for go in go_list:
- dups += geometric_object_duplicates(shift_vector, min_multiple, max_multiple, go)
+ dups += geometric_object_duplicates(
+ shift_vector, min_multiple, max_multiple, go
+ )
return dups
def geometric_objects_lattice_duplicates(lat, go_list, *usize):
-
def lat_to_lattice(v):
return cartesian_to_lattice(lat.basis * v, lat)
@@ -1530,6 +1669,7 @@ def _mem(y=None):
fy = f(y)
f_memo_tab[y] = fy
return fy
+
return _mem
@@ -1557,6 +1697,7 @@ def _pb():
return x_max
else:
raise ValueError("failed to bracket the root in find_root_deriv")
+
return _pb
def in_bounds(x, f, df, a, b):
@@ -1576,7 +1717,11 @@ def newton(x, a, b, dx):
a_prime = x if f < 0 else a
b_prime = x if f > 0 else b
- if dx != x_max - x_min and dx * (f / df) < 0 and f_memo(lazy(a_prime))[0] * f_memo(lazy(b_prime))[0] > 0:
+ if (
+ dx != x_max - x_min
+ and dx * (f / df) < 0
+ and f_memo(lazy(a_prime))[0] * f_memo(lazy(b_prime))[0] > 0
+ ):
raise ValueError("failed to bracket the root in find_root_deriv")
if isinstance(a, numbers.Number) and isinstance(b, numbers.Number):
@@ -1598,8 +1743,12 @@ def newton(x, a, b, dx):
if x_guess is None:
x_guess = (x_min + x_max) * 0.5
- return newton(x_guess, pick_bound(lambda aa: aa < 0),
- pick_bound(lambda aa: aa > 0), x_max - x_min)
+ return newton(
+ x_guess,
+ pick_bound(lambda aa: aa < 0),
+ pick_bound(lambda aa: aa > 0),
+ x_max - x_min,
+ )
def get_rotation_matrix(axis, theta):
@@ -1612,6 +1761,8 @@ def get_rotation_matrix(axis, theta):
+ `theta` [`number`] — The rotation angle (in radians).
"""
- return Matrix(Vector3(x=1).rotate(axis, theta),
- Vector3(y=1).rotate(axis, theta),
- Vector3(z=1).rotate(axis, theta))
+ return Matrix(
+ Vector3(x=1).rotate(axis, theta),
+ Vector3(y=1).rotate(axis, theta),
+ Vector3(z=1).rotate(axis, theta),
+ )
diff --git a/python/materials.py b/python/materials.py
index 6da4e66e0..31056b6e6 100644
--- a/python/materials.py
+++ b/python/materials.py
@@ -8,944 +8,1110 @@
um_scale = 1.0
# conversion factor for eV to 1/μm [=1/hc]
-eV_um_scale = um_scale/1.23984193
+eV_um_scale = um_scale / 1.23984193
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# crystalline silicon (c-Si) from A. Deinega et al., J. Optical Society of America A, Vol. 28, No. 5, pp. 770-77 (2011)
# based on experimental data for intrinsic silicon at T=300K from M.A. Green and M. Keevers, Progress in Photovoltaics, Vol. 3, pp. 189-92 (1995)
# wavelength range: 0.4 - 1.0 μm
-cSi_range = mp.FreqRange(min=um_scale, max=um_scale/0.4)
+cSi_range = mp.FreqRange(min=um_scale, max=um_scale / 0.4)
-cSi_frq1 = 3.64/um_scale
+cSi_frq1 = 3.64 / um_scale
cSi_gam1 = 0
cSi_sig1 = 8
-cSi_frq2 = 2.76/um_scale
-cSi_gam2 = 2*0.063/um_scale
+cSi_frq2 = 2.76 / um_scale
+cSi_gam2 = 2 * 0.063 / um_scale
cSi_sig2 = 2.85
-cSi_frq3 = 1.73/um_scale
-cSi_gam3 = 2*2.5/um_scale
+cSi_frq3 = 1.73 / um_scale
+cSi_gam3 = 2 * 2.5 / um_scale
cSi_sig3 = -0.107
-cSi_susc = [mp.LorentzianSusceptibility(frequency=cSi_frq1, gamma=cSi_gam1, sigma=cSi_sig1),
- mp.LorentzianSusceptibility(frequency=cSi_frq2, gamma=cSi_gam2, sigma=cSi_sig2),
- mp.LorentzianSusceptibility(frequency=cSi_frq3, gamma=cSi_gam3, sigma=cSi_sig3)]
+cSi_susc = [
+ mp.LorentzianSusceptibility(frequency=cSi_frq1, gamma=cSi_gam1, sigma=cSi_sig1),
+ mp.LorentzianSusceptibility(frequency=cSi_frq2, gamma=cSi_gam2, sigma=cSi_sig2),
+ mp.LorentzianSusceptibility(frequency=cSi_frq3, gamma=cSi_gam3, sigma=cSi_sig3),
+]
cSi = mp.Medium(epsilon=1.0, E_susceptibilities=cSi_susc, valid_freq_range=cSi_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# amorphous silicon (a-Si) from Horiba Technical Note 08: Lorentz Dispersion Model
# ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf
# wavelength range: 0.21 - 0.83 μm
-aSi_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.21)
+aSi_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.21)
-aSi_frq1 = 1/(0.315481407124682*um_scale)
-aSi_gam1 = 1/(0.645751005208333*um_scale)
+aSi_frq1 = 1 / (0.315481407124682 * um_scale)
+aSi_gam1 = 1 / (0.645751005208333 * um_scale)
aSi_sig1 = 14.571
-aSi_susc = [mp.LorentzianSusceptibility(frequency=aSi_frq1, gamma=aSi_gam1, sigma=aSi_sig1)]
+aSi_susc = [
+ mp.LorentzianSusceptibility(frequency=aSi_frq1, gamma=aSi_gam1, sigma=aSi_sig1)
+]
aSi = mp.Medium(epsilon=3.109, E_susceptibilities=aSi_susc, valid_freq_range=aSi_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# hydrogenated amorphous silicon (a-Si:H) from Horiba Technical Note 08: Lorentz Dispersion Model
# ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf
# wavelength range: 0.21 - 0.83 μm
-aSi_H_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.21)
+aSi_H_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.21)
-aSi_H_frq1 = 1/(0.334189199460916*um_scale)
-aSi_H_gam1 = 1/(0.579365387850467*um_scale)
+aSi_H_frq1 = 1 / (0.334189199460916 * um_scale)
+aSi_H_gam1 = 1 / (0.579365387850467 * um_scale)
aSi_H_sig1 = 12.31
-aSi_H_susc = [mp.LorentzianSusceptibility(frequency=aSi_H_frq1, gamma=aSi_H_gam1, sigma=aSi_H_sig1)]
+aSi_H_susc = [
+ mp.LorentzianSusceptibility(
+ frequency=aSi_H_frq1, gamma=aSi_H_gam1, sigma=aSi_H_sig1
+ )
+]
-aSi_H = mp.Medium(epsilon=3.22, E_susceptibilities=aSi_H_susc, valid_freq_range=aSi_H_range)
+aSi_H = mp.Medium(
+ epsilon=3.22, E_susceptibilities=aSi_H_susc, valid_freq_range=aSi_H_range
+)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# indium tin oxide (ITO) from Horiba Technical Note 08: Lorentz Dispersion Model
# ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf
# wavelength range: 0.21 - 0.83 μm
-ITO_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.21)
+ITO_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.21)
-ITO_frq1 = 1/(0.182329695588235*um_scale)
-ITO_gam1 = 1/(1.94637665620094*um_scale)
+ITO_frq1 = 1 / (0.182329695588235 * um_scale)
+ITO_gam1 = 1 / (1.94637665620094 * um_scale)
ITO_sig1 = 2.5
-ITO_susc = [mp.LorentzianSusceptibility(frequency=ITO_frq1, gamma=ITO_gam1, sigma=ITO_sig1)]
+ITO_susc = [
+ mp.LorentzianSusceptibility(frequency=ITO_frq1, gamma=ITO_gam1, sigma=ITO_sig1)
+]
ITO = mp.Medium(epsilon=1.0, E_susceptibilities=ITO_susc, valid_freq_range=ITO_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# alumina (Al2O3) from Horiba Technical Note 08: Lorentz Dispersion Model
# ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf
# wavelength range: 0.21 - 2.07 μm
-Al2O3_range = mp.FreqRange(min=um_scale/2.07, max=um_scale/0.21)
+Al2O3_range = mp.FreqRange(min=um_scale / 2.07, max=um_scale / 0.21)
-Al2O3_frq1 = 1/(0.101476668030774*um_scale)
+Al2O3_frq1 = 1 / (0.101476668030774 * um_scale)
Al2O3_gam1 = 0
Al2O3_sig1 = 1.52
-Al2O3_susc = [mp.LorentzianSusceptibility(frequency=Al2O3_frq1, gamma=Al2O3_gam1, sigma=Al2O3_sig1)]
+Al2O3_susc = [
+ mp.LorentzianSusceptibility(
+ frequency=Al2O3_frq1, gamma=Al2O3_gam1, sigma=Al2O3_sig1
+ )
+]
-Al2O3 = mp.Medium(epsilon=1.0, E_susceptibilities=Al2O3_susc, valid_freq_range=Al2O3_range)
+Al2O3 = mp.Medium(
+ epsilon=1.0, E_susceptibilities=Al2O3_susc, valid_freq_range=Al2O3_range
+)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# aluminum nitride (AlN) from Horiba Technical Note 08: Lorentz Dispersion Model
# ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf
# wavelength range: 0.26 - 1.65 μm
-AlN_range = mp.FreqRange(min=um_scale/1.65, max=um_scale/0.26)
+AlN_range = mp.FreqRange(min=um_scale / 1.65, max=um_scale / 0.26)
-AlN_frq1 = 1/(0.139058089950651*um_scale)
+AlN_frq1 = 1 / (0.139058089950651 * um_scale)
AlN_gam1 = 0
AlN_sig1 = 3.306
-AlN_susc = [mp.LorentzianSusceptibility(frequency=AlN_frq1, gamma=AlN_gam1, sigma=AlN_sig1)]
+AlN_susc = [
+ mp.LorentzianSusceptibility(frequency=AlN_frq1, gamma=AlN_gam1, sigma=AlN_sig1)
+]
AlN = mp.Medium(epsilon=1.0, E_susceptibilities=AlN_susc, valid_freq_range=AlN_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# aluminum arsenide (AlAs) from R.E. Fern and A. Onton, J. Applied Physics, Vol. 42, pp. 3499-500 (1971)
# ref: https://refractiveindex.info/?shelf=main&book=AlAs&page=Fern
# wavelength range: 0.56 - 2.2 μm
-AlAs_range = mp.FreqRange(min=um_scale/2.2, max=um_scale/0.56)
+AlAs_range = mp.FreqRange(min=um_scale / 2.2, max=um_scale / 0.56)
-AlAs_frq1 = 1/(0.2822*um_scale)
+AlAs_frq1 = 1 / (0.2822 * um_scale)
AlAs_gam1 = 0
AlAs_sig1 = 6.0840
-AlAs_frq2 = 1/(27.62*um_scale)
+AlAs_frq2 = 1 / (27.62 * um_scale)
AlAs_gam2 = 0
AlAs_sig2 = 1.900
-AlAs_susc = [mp.LorentzianSusceptibility(frequency=AlAs_frq1, gamma=AlAs_gam1, sigma=AlAs_sig1),
- mp.LorentzianSusceptibility(frequency=AlAs_frq2, gamma=AlAs_gam2, sigma=AlAs_sig2)]
+AlAs_susc = [
+ mp.LorentzianSusceptibility(frequency=AlAs_frq1, gamma=AlAs_gam1, sigma=AlAs_sig1),
+ mp.LorentzianSusceptibility(frequency=AlAs_frq2, gamma=AlAs_gam2, sigma=AlAs_sig2),
+]
-AlAs = mp.Medium(epsilon=2.0792, E_susceptibilities=AlAs_susc, valid_freq_range=AlAs_range)
+AlAs = mp.Medium(
+ epsilon=2.0792, E_susceptibilities=AlAs_susc, valid_freq_range=AlAs_range
+)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# borosilicate glass (BK7) from SCHOTT Zemax catalog 2017-01-20b
# ref: https://refractiveindex.info/?shelf=glass&book=BK7&page=SCHOTT
# wavelength range: 0.3 - 2.5 μm
-BK7_range = mp.FreqRange(min=um_scale/2.5, max=um_scale/0.3)
+BK7_range = mp.FreqRange(min=um_scale / 2.5, max=um_scale / 0.3)
-BK7_frq1 = 1/(0.07746417668832478*um_scale)
+BK7_frq1 = 1 / (0.07746417668832478 * um_scale)
BK7_gam1 = 0
BK7_sig1 = 1.03961212
-BK7_frq2 = 1/(0.14148467902921502*um_scale)
+BK7_frq2 = 1 / (0.14148467902921502 * um_scale)
BK7_gam2 = 0
BK7_sig2 = 0.231792344
-BK7_frq3 = 1/(10.176475470417055*um_scale)
+BK7_frq3 = 1 / (10.176475470417055 * um_scale)
BK7_gam3 = 0
BK7_sig3 = 1.01046945
-BK7_susc = [mp.LorentzianSusceptibility(frequency=BK7_frq1, gamma=BK7_gam1, sigma=BK7_sig1),
- mp.LorentzianSusceptibility(frequency=BK7_frq2, gamma=BK7_gam2, sigma=BK7_sig2),
- mp.LorentzianSusceptibility(frequency=BK7_frq3, gamma=BK7_gam3, sigma=BK7_sig3)]
+BK7_susc = [
+ mp.LorentzianSusceptibility(frequency=BK7_frq1, gamma=BK7_gam1, sigma=BK7_sig1),
+ mp.LorentzianSusceptibility(frequency=BK7_frq2, gamma=BK7_gam2, sigma=BK7_sig2),
+ mp.LorentzianSusceptibility(frequency=BK7_frq3, gamma=BK7_gam3, sigma=BK7_sig3),
+]
BK7 = mp.Medium(epsilon=1.0, E_susceptibilities=BK7_susc, valid_freq_range=BK7_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# fused quartz (silica) from I.H. Malitson, J. Optical Society of America, Vol. 55, pp. 1205-9 (1965)
# ref: https://refractiveindex.info/?shelf=glass&book=fused_silica&page=Malitson
# wavelength range: 0.21 - 6.7 μm
-fused_quartz_range = mp.FreqRange(min=um_scale/6.7, max=um_scale/0.21)
+fused_quartz_range = mp.FreqRange(min=um_scale / 6.7, max=um_scale / 0.21)
-fused_quartz_frq1 = 1/(0.0684043*um_scale)
+fused_quartz_frq1 = 1 / (0.0684043 * um_scale)
fused_quartz_gam1 = 0
fused_quartz_sig1 = 0.696166300
-fused_quartz_frq2 = 1/(0.1162414*um_scale)
+fused_quartz_frq2 = 1 / (0.1162414 * um_scale)
fused_quartz_gam2 = 0
fused_quartz_sig2 = 0.407942600
-fused_quartz_frq3 = 1/(9.896161*um_scale)
+fused_quartz_frq3 = 1 / (9.896161 * um_scale)
fused_quartz_gam3 = 0
fused_quartz_sig3 = 0.897479400
-fused_quartz_susc = [mp.LorentzianSusceptibility(frequency=fused_quartz_frq1, gamma=fused_quartz_gam1, sigma=fused_quartz_sig1),
- mp.LorentzianSusceptibility(frequency=fused_quartz_frq2, gamma=fused_quartz_gam2, sigma=fused_quartz_sig2),
- mp.LorentzianSusceptibility(frequency=fused_quartz_frq3, gamma=fused_quartz_gam3, sigma=fused_quartz_sig3)]
-
-fused_quartz = mp.Medium(epsilon=1.0, E_susceptibilities=fused_quartz_susc, valid_freq_range=fused_quartz_range)
-
-#------------------------------------------------------------------
+fused_quartz_susc = [
+ mp.LorentzianSusceptibility(
+ frequency=fused_quartz_frq1, gamma=fused_quartz_gam1, sigma=fused_quartz_sig1
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=fused_quartz_frq2, gamma=fused_quartz_gam2, sigma=fused_quartz_sig2
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=fused_quartz_frq3, gamma=fused_quartz_gam3, sigma=fused_quartz_sig3
+ ),
+]
+
+fused_quartz = mp.Medium(
+ epsilon=1.0,
+ E_susceptibilities=fused_quartz_susc,
+ valid_freq_range=fused_quartz_range,
+)
+
+# ------------------------------------------------------------------
# gallium arsenide (GaAs) from T. Skauli et al., J. Applied Physics, Vol. 94, pp. 6447-55 (2003)
# ref: https://refractiveindex.info/?shelf=main&book=GaAs&page=Skauli
# wavelength range: 0.97 - 17 μm
-GaAs_range = mp.FreqRange(min=um_scale/17, max=um_scale/0.97)
+GaAs_range = mp.FreqRange(min=um_scale / 17, max=um_scale / 0.97)
-GaAs_frq1 = 1/(0.4431307*um_scale)
+GaAs_frq1 = 1 / (0.4431307 * um_scale)
GaAs_gam1 = 0
GaAs_sig1 = 5.466742
-GaAs_frq2 = 1/(0.8746453*um_scale)
+GaAs_frq2 = 1 / (0.8746453 * um_scale)
GaAs_gam2 = 0
GaAs_sig2 = 0.02429960
-GaAs_frq3 = 1/(36.9166*um_scale)
+GaAs_frq3 = 1 / (36.9166 * um_scale)
GaAs_gam3 = 0
GaAs_sig3 = 1.957522
-GaAs_susc = [mp.LorentzianSusceptibility(frequency=GaAs_frq1, gamma=GaAs_gam1, sigma=GaAs_sig1),
- mp.LorentzianSusceptibility(frequency=GaAs_frq2, gamma=GaAs_gam2, sigma=GaAs_sig2),
- mp.LorentzianSusceptibility(frequency=GaAs_frq3, gamma=GaAs_gam3, sigma=GaAs_sig3)]
+GaAs_susc = [
+ mp.LorentzianSusceptibility(frequency=GaAs_frq1, gamma=GaAs_gam1, sigma=GaAs_sig1),
+ mp.LorentzianSusceptibility(frequency=GaAs_frq2, gamma=GaAs_gam2, sigma=GaAs_sig2),
+ mp.LorentzianSusceptibility(frequency=GaAs_frq3, gamma=GaAs_gam3, sigma=GaAs_sig3),
+]
-GaAs = mp.Medium(epsilon=5.372514, E_susceptibilities=GaAs_susc, valid_freq_range=GaAs_range)
+GaAs = mp.Medium(
+ epsilon=5.372514, E_susceptibilities=GaAs_susc, valid_freq_range=GaAs_range
+)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# silicon nitride (Si3N4) from H. R. Philipp, J. Electrochemical Society 120, 295-300 (1973)
# ref: https://refractiveindex.info/?shelf=main&book=Si3N4&page=Philipp
# wavelength range: 0.207 - 1.24 μm
-Si3N4_VISNIR_range = mp.FreqRange(min=um_scale/1.24, max=um_scale/0.207)
+Si3N4_VISNIR_range = mp.FreqRange(min=um_scale / 1.24, max=um_scale / 0.207)
-Si3N4_VISNIR_frq1 = 1/(0.13967*um_scale)
+Si3N4_VISNIR_frq1 = 1 / (0.13967 * um_scale)
Si3N4_VISNIR_gam1 = 0
Si3N4_VISNIR_sig1 = 2.8939
-Si3N4_VISNIR_susc = [mp.LorentzianSusceptibility(frequency=Si3N4_VISNIR_frq1, gamma=Si3N4_VISNIR_gam1, sigma=Si3N4_VISNIR_sig1)]
+Si3N4_VISNIR_susc = [
+ mp.LorentzianSusceptibility(
+ frequency=Si3N4_VISNIR_frq1, gamma=Si3N4_VISNIR_gam1, sigma=Si3N4_VISNIR_sig1
+ )
+]
-Si3N4_VISNIR = mp.Medium(epsilon=1.0, E_susceptibilities=Si3N4_VISNIR_susc, valid_freq_range=Si3N4_VISNIR_range)
+Si3N4_VISNIR = mp.Medium(
+ epsilon=1.0,
+ E_susceptibilities=Si3N4_VISNIR_susc,
+ valid_freq_range=Si3N4_VISNIR_range,
+)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# silicon nitride (Si3N4) from K. Luke, et. al., Optics Letters, Vol. 40, pp. 4823-26 (2015)
# ref: https://refractiveindex.info/?shelf=main&book=Si3N4&page=Luke
# wavelength range: 0.310 - 5.504 μm
-Si3N4_NIR_range = mp.FreqRange(min=um_scale/5.504, max=um_scale/0.310)
+Si3N4_NIR_range = mp.FreqRange(min=um_scale / 5.504, max=um_scale / 0.310)
-Si3N4_NIR_frq1 = 1/(0.1353406*um_scale)
+Si3N4_NIR_frq1 = 1 / (0.1353406 * um_scale)
Si3N4_NIR_gam1 = 0
Si3N4_NIR_sig1 = 3.0249
-Si3N4_NIR_frq2 = 1/(1239.842*um_scale)
+Si3N4_NIR_frq2 = 1 / (1239.842 * um_scale)
Si3N4_NIR_gam2 = 0
Si3N4_NIR_sig2 = 40314
-Si3N4_NIR_susc = [mp.LorentzianSusceptibility(frequency=Si3N4_NIR_frq1, gamma=Si3N4_NIR_gam1, sigma=Si3N4_NIR_sig1),
- mp.LorentzianSusceptibility(frequency=Si3N4_NIR_frq2, gamma=Si3N4_NIR_gam2, sigma=Si3N4_NIR_sig2)]
+Si3N4_NIR_susc = [
+ mp.LorentzianSusceptibility(
+ frequency=Si3N4_NIR_frq1, gamma=Si3N4_NIR_gam1, sigma=Si3N4_NIR_sig1
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=Si3N4_NIR_frq2, gamma=Si3N4_NIR_gam2, sigma=Si3N4_NIR_sig2
+ ),
+]
-Si3N4_NIR = mp.Medium(epsilon=1.0, E_susceptibilities=Si3N4_NIR_susc, valid_freq_range=Si3N4_NIR_range)
+Si3N4_NIR = mp.Medium(
+ epsilon=1.0, E_susceptibilities=Si3N4_NIR_susc, valid_freq_range=Si3N4_NIR_range
+)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# elemental metals from A.D. Rakic et al., Applied Optics, Vol. 37, No. 22, pp. 5271-83 (1998)
# wavelength range: 0.2 - 12.4 μm
-metal_range = mp.FreqRange(min=um_scale/12.398, max=um_scale/.24797)
+metal_range = mp.FreqRange(min=um_scale / 12.398, max=um_scale / 0.24797)
# silver (Ag)
-Ag_plasma_frq = 9.01*eV_um_scale
+Ag_plasma_frq = 9.01 * eV_um_scale
Ag_f0 = 0.845
Ag_frq0 = 1e-10
-Ag_gam0 = 0.048*eV_um_scale
-Ag_sig0 = Ag_f0*Ag_plasma_frq**2/Ag_frq0**2
+Ag_gam0 = 0.048 * eV_um_scale
+Ag_sig0 = Ag_f0 * Ag_plasma_frq**2 / Ag_frq0**2
Ag_f1 = 0.065
-Ag_frq1 = 0.816*eV_um_scale # 1.519 μm
-Ag_gam1 = 3.886*eV_um_scale
-Ag_sig1 = Ag_f1*Ag_plasma_frq**2/Ag_frq1**2
+Ag_frq1 = 0.816 * eV_um_scale # 1.519 μm
+Ag_gam1 = 3.886 * eV_um_scale
+Ag_sig1 = Ag_f1 * Ag_plasma_frq**2 / Ag_frq1**2
Ag_f2 = 0.124
-Ag_frq2 = 4.481*eV_um_scale # 0.273 μm
-Ag_gam2 = 0.452*eV_um_scale
-Ag_sig2 = Ag_f2*Ag_plasma_frq**2/Ag_frq2**2
+Ag_frq2 = 4.481 * eV_um_scale # 0.273 μm
+Ag_gam2 = 0.452 * eV_um_scale
+Ag_sig2 = Ag_f2 * Ag_plasma_frq**2 / Ag_frq2**2
Ag_f3 = 0.011
-Ag_frq3 = 8.185*eV_um_scale # 0.152 μm
-Ag_gam3 = 0.065*eV_um_scale
-Ag_sig3 = Ag_f3*Ag_plasma_frq**2/Ag_frq3**2
+Ag_frq3 = 8.185 * eV_um_scale # 0.152 μm
+Ag_gam3 = 0.065 * eV_um_scale
+Ag_sig3 = Ag_f3 * Ag_plasma_frq**2 / Ag_frq3**2
Ag_f4 = 0.840
-Ag_frq4 = 9.083*eV_um_scale # 0.137 μm
-Ag_gam4 = 0.916*eV_um_scale
-Ag_sig4 = Ag_f4*Ag_plasma_frq**2/Ag_frq4**2
+Ag_frq4 = 9.083 * eV_um_scale # 0.137 μm
+Ag_gam4 = 0.916 * eV_um_scale
+Ag_sig4 = Ag_f4 * Ag_plasma_frq**2 / Ag_frq4**2
Ag_f5 = 5.646
-Ag_frq5 = 20.29*eV_um_scale # 0.061 μm
-Ag_gam5 = 2.419*eV_um_scale
-Ag_sig5 = Ag_f5*Ag_plasma_frq**2/Ag_frq5**2
-
-Ag_susc = [mp.DrudeSusceptibility(frequency=Ag_frq0, gamma=Ag_gam0, sigma=Ag_sig0),
- mp.LorentzianSusceptibility(frequency=Ag_frq1, gamma=Ag_gam1, sigma=Ag_sig1),
- mp.LorentzianSusceptibility(frequency=Ag_frq2, gamma=Ag_gam2, sigma=Ag_sig2),
- mp.LorentzianSusceptibility(frequency=Ag_frq3, gamma=Ag_gam3, sigma=Ag_sig3),
- mp.LorentzianSusceptibility(frequency=Ag_frq4, gamma=Ag_gam4, sigma=Ag_sig4),
- mp.LorentzianSusceptibility(frequency=Ag_frq5, gamma=Ag_gam5, sigma=Ag_sig5)]
+Ag_frq5 = 20.29 * eV_um_scale # 0.061 μm
+Ag_gam5 = 2.419 * eV_um_scale
+Ag_sig5 = Ag_f5 * Ag_plasma_frq**2 / Ag_frq5**2
+
+Ag_susc = [
+ mp.DrudeSusceptibility(frequency=Ag_frq0, gamma=Ag_gam0, sigma=Ag_sig0),
+ mp.LorentzianSusceptibility(frequency=Ag_frq1, gamma=Ag_gam1, sigma=Ag_sig1),
+ mp.LorentzianSusceptibility(frequency=Ag_frq2, gamma=Ag_gam2, sigma=Ag_sig2),
+ mp.LorentzianSusceptibility(frequency=Ag_frq3, gamma=Ag_gam3, sigma=Ag_sig3),
+ mp.LorentzianSusceptibility(frequency=Ag_frq4, gamma=Ag_gam4, sigma=Ag_sig4),
+ mp.LorentzianSusceptibility(frequency=Ag_frq5, gamma=Ag_gam5, sigma=Ag_sig5),
+]
Ag = mp.Medium(epsilon=1.0, E_susceptibilities=Ag_susc, valid_freq_range=metal_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# gold (Au)
-metal_range = mp.FreqRange(min=um_scale/6.1992, max=um_scale/.24797)
+metal_range = mp.FreqRange(min=um_scale / 6.1992, max=um_scale / 0.24797)
-Au_plasma_frq = 9.03*eV_um_scale
+Au_plasma_frq = 9.03 * eV_um_scale
Au_f0 = 0.760
Au_frq0 = 1e-10
-Au_gam0 = 0.053*eV_um_scale
-Au_sig0 = Au_f0*Au_plasma_frq**2/Au_frq0**2
+Au_gam0 = 0.053 * eV_um_scale
+Au_sig0 = Au_f0 * Au_plasma_frq**2 / Au_frq0**2
Au_f1 = 0.024
-Au_frq1 = 0.415*eV_um_scale # 2.988 μm
-Au_gam1 = 0.241*eV_um_scale
-Au_sig1 = Au_f1*Au_plasma_frq**2/Au_frq1**2
+Au_frq1 = 0.415 * eV_um_scale # 2.988 μm
+Au_gam1 = 0.241 * eV_um_scale
+Au_sig1 = Au_f1 * Au_plasma_frq**2 / Au_frq1**2
Au_f2 = 0.010
-Au_frq2 = 0.830*eV_um_scale # 1.494 μm
-Au_gam2 = 0.345*eV_um_scale
-Au_sig2 = Au_f2*Au_plasma_frq**2/Au_frq2**2
+Au_frq2 = 0.830 * eV_um_scale # 1.494 μm
+Au_gam2 = 0.345 * eV_um_scale
+Au_sig2 = Au_f2 * Au_plasma_frq**2 / Au_frq2**2
Au_f3 = 0.071
-Au_frq3 = 2.969*eV_um_scale # 0.418 μm
-Au_gam3 = 0.870*eV_um_scale
-Au_sig3 = Au_f3*Au_plasma_frq**2/Au_frq3**2
+Au_frq3 = 2.969 * eV_um_scale # 0.418 μm
+Au_gam3 = 0.870 * eV_um_scale
+Au_sig3 = Au_f3 * Au_plasma_frq**2 / Au_frq3**2
Au_f4 = 0.601
-Au_frq4 = 4.304*eV_um_scale # 0.288 μm
-Au_gam4 = 2.494*eV_um_scale
-Au_sig4 = Au_f4*Au_plasma_frq**2/Au_frq4**2
+Au_frq4 = 4.304 * eV_um_scale # 0.288 μm
+Au_gam4 = 2.494 * eV_um_scale
+Au_sig4 = Au_f4 * Au_plasma_frq**2 / Au_frq4**2
Au_f5 = 4.384
-Au_frq5 = 13.32*eV_um_scale # 0.093 μm
-Au_gam5 = 2.214*eV_um_scale
-Au_sig5 = Au_f5*Au_plasma_frq**2/Au_frq5**2
-
-Au_susc = [mp.DrudeSusceptibility(frequency=Au_frq0, gamma=Au_gam0, sigma=Au_sig0),
- mp.LorentzianSusceptibility(frequency=Au_frq1, gamma=Au_gam1, sigma=Au_sig1),
- mp.LorentzianSusceptibility(frequency=Au_frq2, gamma=Au_gam2, sigma=Au_sig2),
- mp.LorentzianSusceptibility(frequency=Au_frq3, gamma=Au_gam3, sigma=Au_sig3),
- mp.LorentzianSusceptibility(frequency=Au_frq4, gamma=Au_gam4, sigma=Au_sig4),
- mp.LorentzianSusceptibility(frequency=Au_frq5, gamma=Au_gam5, sigma=Au_sig5)]
+Au_frq5 = 13.32 * eV_um_scale # 0.093 μm
+Au_gam5 = 2.214 * eV_um_scale
+Au_sig5 = Au_f5 * Au_plasma_frq**2 / Au_frq5**2
+
+Au_susc = [
+ mp.DrudeSusceptibility(frequency=Au_frq0, gamma=Au_gam0, sigma=Au_sig0),
+ mp.LorentzianSusceptibility(frequency=Au_frq1, gamma=Au_gam1, sigma=Au_sig1),
+ mp.LorentzianSusceptibility(frequency=Au_frq2, gamma=Au_gam2, sigma=Au_sig2),
+ mp.LorentzianSusceptibility(frequency=Au_frq3, gamma=Au_gam3, sigma=Au_sig3),
+ mp.LorentzianSusceptibility(frequency=Au_frq4, gamma=Au_gam4, sigma=Au_sig4),
+ mp.LorentzianSusceptibility(frequency=Au_frq5, gamma=Au_gam5, sigma=Au_sig5),
+]
Au = mp.Medium(epsilon=1.0, E_susceptibilities=Au_susc, valid_freq_range=metal_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# copper (Cu)
-metal_range = mp.FreqRange(min=um_scale/12.398, max=um_scale/.20664)
+metal_range = mp.FreqRange(min=um_scale / 12.398, max=um_scale / 0.20664)
-Cu_plasma_frq = 10.83*eV_um_scale
+Cu_plasma_frq = 10.83 * eV_um_scale
Cu_f0 = 0.575
Cu_frq0 = 1e-10
-Cu_gam0 = 0.030*eV_um_scale
-Cu_sig0 = Cu_f0*Cu_plasma_frq**2/Cu_frq0**2
+Cu_gam0 = 0.030 * eV_um_scale
+Cu_sig0 = Cu_f0 * Cu_plasma_frq**2 / Cu_frq0**2
Cu_f1 = 0.061
-Cu_frq1 = 0.291*eV_um_scale # 4.261 μm
-Cu_gam1 = 0.378*eV_um_scale
-Cu_sig1 = Cu_f1*Cu_plasma_frq**2/Cu_frq1**2
+Cu_frq1 = 0.291 * eV_um_scale # 4.261 μm
+Cu_gam1 = 0.378 * eV_um_scale
+Cu_sig1 = Cu_f1 * Cu_plasma_frq**2 / Cu_frq1**2
Cu_f2 = 0.104
-Cu_frq2 = 2.957*eV_um_scale # 0.419 μm
-Cu_gam2 = 1.056*eV_um_scale
-Cu_sig2 = Cu_f2*Cu_plasma_frq**2/Cu_frq2**2
+Cu_frq2 = 2.957 * eV_um_scale # 0.419 μm
+Cu_gam2 = 1.056 * eV_um_scale
+Cu_sig2 = Cu_f2 * Cu_plasma_frq**2 / Cu_frq2**2
Cu_f3 = 0.723
-Cu_frq3 = 5.300*eV_um_scale # 0.234 μm
-Cu_gam3 = 3.213*eV_um_scale
-Cu_sig3 = Cu_f3*Cu_plasma_frq**2/Cu_frq3**2
+Cu_frq3 = 5.300 * eV_um_scale # 0.234 μm
+Cu_gam3 = 3.213 * eV_um_scale
+Cu_sig3 = Cu_f3 * Cu_plasma_frq**2 / Cu_frq3**2
Cu_f4 = 0.638
-Cu_frq4 = 11.18*eV_um_scale # 0.111 μm
-Cu_gam4 = 4.305*eV_um_scale
-Cu_sig4 = Cu_f4*Cu_plasma_frq**2/Cu_frq4**2
-
-Cu_susc = [mp.DrudeSusceptibility(frequency=Cu_frq0, gamma=Cu_gam0, sigma=Cu_sig0),
- mp.LorentzianSusceptibility(frequency=Cu_frq1, gamma=Cu_gam1, sigma=Cu_sig1),
- mp.LorentzianSusceptibility(frequency=Cu_frq2, gamma=Cu_gam2, sigma=Cu_sig2),
- mp.LorentzianSusceptibility(frequency=Cu_frq3, gamma=Cu_gam3, sigma=Cu_sig3),
- mp.LorentzianSusceptibility(frequency=Cu_frq4, gamma=Cu_gam4, sigma=Cu_sig4)]
+Cu_frq4 = 11.18 * eV_um_scale # 0.111 μm
+Cu_gam4 = 4.305 * eV_um_scale
+Cu_sig4 = Cu_f4 * Cu_plasma_frq**2 / Cu_frq4**2
+
+Cu_susc = [
+ mp.DrudeSusceptibility(frequency=Cu_frq0, gamma=Cu_gam0, sigma=Cu_sig0),
+ mp.LorentzianSusceptibility(frequency=Cu_frq1, gamma=Cu_gam1, sigma=Cu_sig1),
+ mp.LorentzianSusceptibility(frequency=Cu_frq2, gamma=Cu_gam2, sigma=Cu_sig2),
+ mp.LorentzianSusceptibility(frequency=Cu_frq3, gamma=Cu_gam3, sigma=Cu_sig3),
+ mp.LorentzianSusceptibility(frequency=Cu_frq4, gamma=Cu_gam4, sigma=Cu_sig4),
+]
Cu = mp.Medium(epsilon=1.0, E_susceptibilities=Cu_susc, valid_freq_range=metal_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# aluminum (Al)
-Al_plasma_frq = 14.98*eV_um_scale
+Al_plasma_frq = 14.98 * eV_um_scale
Al_f0 = 0.523
Al_frq0 = 1e-10
-Al_gam0 = 0.047*eV_um_scale
-Al_sig0 = Al_f0*Al_plasma_frq**2/Al_frq0**2
+Al_gam0 = 0.047 * eV_um_scale
+Al_sig0 = Al_f0 * Al_plasma_frq**2 / Al_frq0**2
Al_f1 = 0.227
-Al_frq1 = 0.162*eV_um_scale # 7.654 μm
-Al_gam1 = 0.333*eV_um_scale
-Al_sig1 = Al_f1*Al_plasma_frq**2/Al_frq1**2
+Al_frq1 = 0.162 * eV_um_scale # 7.654 μm
+Al_gam1 = 0.333 * eV_um_scale
+Al_sig1 = Al_f1 * Al_plasma_frq**2 / Al_frq1**2
Al_f2 = 0.050
-Al_frq2 = 1.544*eV_um_scale # 0.803 μm
-Al_gam2 = 0.312*eV_um_scale
-Al_sig2 = Al_f2*Al_plasma_frq**2/Al_frq2**2
+Al_frq2 = 1.544 * eV_um_scale # 0.803 μm
+Al_gam2 = 0.312 * eV_um_scale
+Al_sig2 = Al_f2 * Al_plasma_frq**2 / Al_frq2**2
Al_f3 = 0.166
-Al_frq3 = 1.808*eV_um_scale # 0.686 μm
-Al_gam3 = 1.351*eV_um_scale
-Al_sig3 = Al_f3*Al_plasma_frq**2/Al_frq3**2
+Al_frq3 = 1.808 * eV_um_scale # 0.686 μm
+Al_gam3 = 1.351 * eV_um_scale
+Al_sig3 = Al_f3 * Al_plasma_frq**2 / Al_frq3**2
Al_f4 = 0.030
-Al_frq4 = 3.473*eV_um_scale # 0.357 μm
-Al_gam4 = 3.382*eV_um_scale
-Al_sig4 = Al_f4*Al_plasma_frq**2/Al_frq4**2
-
-Al_susc = [mp.DrudeSusceptibility(frequency=Al_frq0, gamma=Al_gam0, sigma=Al_sig0),
- mp.LorentzianSusceptibility(frequency=Al_frq1, gamma=Al_gam1, sigma=Al_sig1),
- mp.LorentzianSusceptibility(frequency=Al_frq2, gamma=Al_gam2, sigma=Al_sig2),
- mp.LorentzianSusceptibility(frequency=Al_frq3, gamma=Al_gam3, sigma=Al_sig3),
- mp.LorentzianSusceptibility(frequency=Al_frq4, gamma=Al_gam4, sigma=Al_sig4)]
+Al_frq4 = 3.473 * eV_um_scale # 0.357 μm
+Al_gam4 = 3.382 * eV_um_scale
+Al_sig4 = Al_f4 * Al_plasma_frq**2 / Al_frq4**2
+
+Al_susc = [
+ mp.DrudeSusceptibility(frequency=Al_frq0, gamma=Al_gam0, sigma=Al_sig0),
+ mp.LorentzianSusceptibility(frequency=Al_frq1, gamma=Al_gam1, sigma=Al_sig1),
+ mp.LorentzianSusceptibility(frequency=Al_frq2, gamma=Al_gam2, sigma=Al_sig2),
+ mp.LorentzianSusceptibility(frequency=Al_frq3, gamma=Al_gam3, sigma=Al_sig3),
+ mp.LorentzianSusceptibility(frequency=Al_frq4, gamma=Al_gam4, sigma=Al_sig4),
+]
Al = mp.Medium(epsilon=1.0, E_susceptibilities=Al_susc, valid_freq_range=metal_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# beryllium (Be)
-Be_plasma_frq = 18.51*eV_um_scale
+Be_plasma_frq = 18.51 * eV_um_scale
Be_f0 = 0.084
Be_frq0 = 1e-10
-Be_gam0 = 0.035*eV_um_scale
-Be_sig0 = Be_f0*Be_plasma_frq**2/Be_frq0**2
+Be_gam0 = 0.035 * eV_um_scale
+Be_sig0 = Be_f0 * Be_plasma_frq**2 / Be_frq0**2
Be_f1 = 0.031
-Be_frq1 = 0.100*eV_um_scale # 12.398 μm
-Be_gam1 = 1.664*eV_um_scale
-Be_sig1 = Be_f1*Be_plasma_frq**2/Be_frq1**2
+Be_frq1 = 0.100 * eV_um_scale # 12.398 μm
+Be_gam1 = 1.664 * eV_um_scale
+Be_sig1 = Be_f1 * Be_plasma_frq**2 / Be_frq1**2
Be_f2 = 0.140
-Be_frq2 = 1.032*eV_um_scale # 1.201 μm
-Be_gam2 = 3.395*eV_um_scale
-Be_sig2 = Be_f2*Be_plasma_frq**2/Be_frq2**2
+Be_frq2 = 1.032 * eV_um_scale # 1.201 μm
+Be_gam2 = 3.395 * eV_um_scale
+Be_sig2 = Be_f2 * Be_plasma_frq**2 / Be_frq2**2
Be_f3 = 0.530
-Be_frq3 = 3.183*eV_um_scale # 0.390 μm
-Be_gam3 = 4.454*eV_um_scale
-Be_sig3 = Be_f3*Be_plasma_frq**2/Be_frq3**2
+Be_frq3 = 3.183 * eV_um_scale # 0.390 μm
+Be_gam3 = 4.454 * eV_um_scale
+Be_sig3 = Be_f3 * Be_plasma_frq**2 / Be_frq3**2
Be_f4 = 0.130
-Be_frq4 = 4.604*eV_um_scale # 0.269 μm
-Be_gam4 = 1.802*eV_um_scale
-Be_sig4 = Be_f4*Be_plasma_frq**2/Be_frq4**2
-
-Be_susc = [mp.DrudeSusceptibility(frequency=Be_frq0, gamma=Be_gam0, sigma=Be_sig0),
- mp.LorentzianSusceptibility(frequency=Be_frq1, gamma=Be_gam1, sigma=Be_sig1),
- mp.LorentzianSusceptibility(frequency=Be_frq2, gamma=Be_gam2, sigma=Be_sig2),
- mp.LorentzianSusceptibility(frequency=Be_frq3, gamma=Be_gam3, sigma=Be_sig3),
- mp.LorentzianSusceptibility(frequency=Be_frq4, gamma=Be_gam4, sigma=Be_sig4)]
+Be_frq4 = 4.604 * eV_um_scale # 0.269 μm
+Be_gam4 = 1.802 * eV_um_scale
+Be_sig4 = Be_f4 * Be_plasma_frq**2 / Be_frq4**2
+
+Be_susc = [
+ mp.DrudeSusceptibility(frequency=Be_frq0, gamma=Be_gam0, sigma=Be_sig0),
+ mp.LorentzianSusceptibility(frequency=Be_frq1, gamma=Be_gam1, sigma=Be_sig1),
+ mp.LorentzianSusceptibility(frequency=Be_frq2, gamma=Be_gam2, sigma=Be_sig2),
+ mp.LorentzianSusceptibility(frequency=Be_frq3, gamma=Be_gam3, sigma=Be_sig3),
+ mp.LorentzianSusceptibility(frequency=Be_frq4, gamma=Be_gam4, sigma=Be_sig4),
+]
Be = mp.Medium(epsilon=1.0, E_susceptibilities=Be_susc, valid_freq_range=metal_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# chromium (Cr)
-Cr_plasma_frq = 10.75*eV_um_scale
+Cr_plasma_frq = 10.75 * eV_um_scale
Cr_f0 = 0.168
Cr_frq0 = 1e-10
-Cr_gam0 = 0.047*eV_um_scale
-Cr_sig0 = Cr_f0*Cr_plasma_frq**2/Cr_frq0**2
+Cr_gam0 = 0.047 * eV_um_scale
+Cr_sig0 = Cr_f0 * Cr_plasma_frq**2 / Cr_frq0**2
Cr_f1 = 0.151
-Cr_frq1 = 0.121*eV_um_scale # 10.247 μm
-Cr_gam1 = 3.175*eV_um_scale
-Cr_sig1 = Cr_f1*Cr_plasma_frq**2/Cr_frq1**2
+Cr_frq1 = 0.121 * eV_um_scale # 10.247 μm
+Cr_gam1 = 3.175 * eV_um_scale
+Cr_sig1 = Cr_f1 * Cr_plasma_frq**2 / Cr_frq1**2
Cr_f2 = 0.150
-Cr_frq2 = 0.543*eV_um_scale # 2.283 μm
-Cr_gam2 = 1.305*eV_um_scale
-Cr_sig2 = Cr_f2*Cr_plasma_frq**2/Cr_frq2**2
+Cr_frq2 = 0.543 * eV_um_scale # 2.283 μm
+Cr_gam2 = 1.305 * eV_um_scale
+Cr_sig2 = Cr_f2 * Cr_plasma_frq**2 / Cr_frq2**2
Cr_f3 = 1.149
-Cr_frq3 = 1.970*eV_um_scale # 0.629 μm
-Cr_gam3 = 2.676*eV_um_scale
-Cr_sig3 = Cr_f3*Cr_plasma_frq**2/Cr_frq3**2
+Cr_frq3 = 1.970 * eV_um_scale # 0.629 μm
+Cr_gam3 = 2.676 * eV_um_scale
+Cr_sig3 = Cr_f3 * Cr_plasma_frq**2 / Cr_frq3**2
Cr_f4 = 0.825
-Cr_frq4 = 8.775*eV_um_scale # 0.141 μm
-Cr_gam4 = 1.335*eV_um_scale
-Cr_sig4 = Cr_f4*Cr_plasma_frq**2/Cr_frq4**2
-
-Cr_susc = [mp.DrudeSusceptibility(frequency=Cr_frq0, gamma=Cr_gam0, sigma=Cr_sig0),
- mp.LorentzianSusceptibility(frequency=Cr_frq1, gamma=Cr_gam1, sigma=Cr_sig1),
- mp.LorentzianSusceptibility(frequency=Cr_frq2, gamma=Cr_gam2, sigma=Cr_sig2),
- mp.LorentzianSusceptibility(frequency=Cr_frq3, gamma=Cr_gam3, sigma=Cr_sig3),
- mp.LorentzianSusceptibility(frequency=Cr_frq4, gamma=Cr_gam4, sigma=Cr_sig4)]
+Cr_frq4 = 8.775 * eV_um_scale # 0.141 μm
+Cr_gam4 = 1.335 * eV_um_scale
+Cr_sig4 = Cr_f4 * Cr_plasma_frq**2 / Cr_frq4**2
+
+Cr_susc = [
+ mp.DrudeSusceptibility(frequency=Cr_frq0, gamma=Cr_gam0, sigma=Cr_sig0),
+ mp.LorentzianSusceptibility(frequency=Cr_frq1, gamma=Cr_gam1, sigma=Cr_sig1),
+ mp.LorentzianSusceptibility(frequency=Cr_frq2, gamma=Cr_gam2, sigma=Cr_sig2),
+ mp.LorentzianSusceptibility(frequency=Cr_frq3, gamma=Cr_gam3, sigma=Cr_sig3),
+ mp.LorentzianSusceptibility(frequency=Cr_frq4, gamma=Cr_gam4, sigma=Cr_sig4),
+]
Cr = mp.Medium(epsilon=1.0, E_susceptibilities=Cr_susc, valid_freq_range=metal_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# nickel (Ni)
-Ni_plasma_frq = 15.92*eV_um_scale
+Ni_plasma_frq = 15.92 * eV_um_scale
Ni_f0 = 0.096
Ni_frq0 = 1e-10
-Ni_gam0 = 0.048*eV_um_scale
-Ni_sig0 = Ni_f0*Ni_plasma_frq**2/Ni_frq0**2
+Ni_gam0 = 0.048 * eV_um_scale
+Ni_sig0 = Ni_f0 * Ni_plasma_frq**2 / Ni_frq0**2
Ni_f1 = 0.100
-Ni_frq1 = 0.174*eV_um_scale # 7.126 μm
-Ni_gam1 = 4.511*eV_um_scale
-Ni_sig1 = Ni_f1*Ni_plasma_frq**2/Ni_frq1**2
+Ni_frq1 = 0.174 * eV_um_scale # 7.126 μm
+Ni_gam1 = 4.511 * eV_um_scale
+Ni_sig1 = Ni_f1 * Ni_plasma_frq**2 / Ni_frq1**2
Ni_f2 = 0.135
-Ni_frq2 = 0.582*eV_um_scale # 2.130 μm
-Ni_gam2 = 1.334*eV_um_scale
-Ni_sig2 = Ni_f2*Ni_plasma_frq**2/Ni_frq2**2
+Ni_frq2 = 0.582 * eV_um_scale # 2.130 μm
+Ni_gam2 = 1.334 * eV_um_scale
+Ni_sig2 = Ni_f2 * Ni_plasma_frq**2 / Ni_frq2**2
Ni_f3 = 0.106
-Ni_frq3 = 1.597*eV_um_scale # 0.776 μm
-Ni_gam3 = 2.178*eV_um_scale
-Ni_sig3 = Ni_f3*Ni_plasma_frq**2/Ni_frq3**2
+Ni_frq3 = 1.597 * eV_um_scale # 0.776 μm
+Ni_gam3 = 2.178 * eV_um_scale
+Ni_sig3 = Ni_f3 * Ni_plasma_frq**2 / Ni_frq3**2
Ni_f4 = 0.729
-Ni_frq4 = 6.089*eV_um_scale # 0.204 μm
-Ni_gam4 = 6.292*eV_um_scale
-Ni_sig4 = Ni_f4*Ni_plasma_frq**2/Ni_frq4**2
-
-Ni_susc = [mp.DrudeSusceptibility(frequency=Ni_frq0, gamma=Ni_gam0, sigma=Ni_sig0),
- mp.LorentzianSusceptibility(frequency=Ni_frq1, gamma=Ni_gam1, sigma=Ni_sig1),
- mp.LorentzianSusceptibility(frequency=Ni_frq2, gamma=Ni_gam2, sigma=Ni_sig2),
- mp.LorentzianSusceptibility(frequency=Ni_frq3, gamma=Ni_gam3, sigma=Ni_sig3),
- mp.LorentzianSusceptibility(frequency=Ni_frq4, gamma=Ni_gam4, sigma=Ni_sig4)]
+Ni_frq4 = 6.089 * eV_um_scale # 0.204 μm
+Ni_gam4 = 6.292 * eV_um_scale
+Ni_sig4 = Ni_f4 * Ni_plasma_frq**2 / Ni_frq4**2
+
+Ni_susc = [
+ mp.DrudeSusceptibility(frequency=Ni_frq0, gamma=Ni_gam0, sigma=Ni_sig0),
+ mp.LorentzianSusceptibility(frequency=Ni_frq1, gamma=Ni_gam1, sigma=Ni_sig1),
+ mp.LorentzianSusceptibility(frequency=Ni_frq2, gamma=Ni_gam2, sigma=Ni_sig2),
+ mp.LorentzianSusceptibility(frequency=Ni_frq3, gamma=Ni_gam3, sigma=Ni_sig3),
+ mp.LorentzianSusceptibility(frequency=Ni_frq4, gamma=Ni_gam4, sigma=Ni_sig4),
+]
Ni = mp.Medium(epsilon=1.0, E_susceptibilities=Ni_susc, valid_freq_range=metal_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# palladium (Pd)
-Pd_plasma_frq = 9.72*eV_um_scale
+Pd_plasma_frq = 9.72 * eV_um_scale
Pd_f0 = 0.330
Pd_frq0 = 1e-10
-Pd_gam0 = 0.008*eV_um_scale
-Pd_sig0 = Pd_f0*Pd_plasma_frq**2/Pd_frq0**2
+Pd_gam0 = 0.008 * eV_um_scale
+Pd_sig0 = Pd_f0 * Pd_plasma_frq**2 / Pd_frq0**2
Pd_f1 = 0.649
-Pd_frq1 = 0.336*eV_um_scale # 3.690 μm
-Pd_gam1 = 2.950*eV_um_scale
-Pd_sig1 = Pd_f1*Pd_plasma_frq**2/Pd_frq1**2
+Pd_frq1 = 0.336 * eV_um_scale # 3.690 μm
+Pd_gam1 = 2.950 * eV_um_scale
+Pd_sig1 = Pd_f1 * Pd_plasma_frq**2 / Pd_frq1**2
Pd_f2 = 0.121
-Pd_frq2 = 0.501*eV_um_scale # 2.475 μm
-Pd_gam2 = 0.555*eV_um_scale
-Pd_sig2 = Pd_f2*Pd_plasma_frq**2/Pd_frq2**2
+Pd_frq2 = 0.501 * eV_um_scale # 2.475 μm
+Pd_gam2 = 0.555 * eV_um_scale
+Pd_sig2 = Pd_f2 * Pd_plasma_frq**2 / Pd_frq2**2
Pd_f3 = 0.638
-Pd_frq3 = 1.659*eV_um_scale # 0.747 μm
-Pd_gam3 = 4.621*eV_um_scale
-Pd_sig3 = Pd_f3*Pd_plasma_frq**2/Pd_frq3**2
+Pd_frq3 = 1.659 * eV_um_scale # 0.747 μm
+Pd_gam3 = 4.621 * eV_um_scale
+Pd_sig3 = Pd_f3 * Pd_plasma_frq**2 / Pd_frq3**2
Pd_f4 = 0.453
-Pd_frq4 = 5.715*eV_um_scale # 0.217 μm
-Pd_gam4 = 3.236*eV_um_scale
-Pd_sig4 = Pd_f4*Pd_plasma_frq**2/Pd_frq4**2
-
-Pd_susc = [mp.DrudeSusceptibility(frequency=Pd_frq0, gamma=Pd_gam0, sigma=Pd_sig0),
- mp.LorentzianSusceptibility(frequency=Pd_frq1, gamma=Pd_gam1, sigma=Pd_sig1),
- mp.LorentzianSusceptibility(frequency=Pd_frq2, gamma=Pd_gam2, sigma=Pd_sig2),
- mp.LorentzianSusceptibility(frequency=Pd_frq3, gamma=Pd_gam3, sigma=Pd_sig3),
- mp.LorentzianSusceptibility(frequency=Pd_frq4, gamma=Pd_gam4, sigma=Pd_sig4)]
+Pd_frq4 = 5.715 * eV_um_scale # 0.217 μm
+Pd_gam4 = 3.236 * eV_um_scale
+Pd_sig4 = Pd_f4 * Pd_plasma_frq**2 / Pd_frq4**2
+
+Pd_susc = [
+ mp.DrudeSusceptibility(frequency=Pd_frq0, gamma=Pd_gam0, sigma=Pd_sig0),
+ mp.LorentzianSusceptibility(frequency=Pd_frq1, gamma=Pd_gam1, sigma=Pd_sig1),
+ mp.LorentzianSusceptibility(frequency=Pd_frq2, gamma=Pd_gam2, sigma=Pd_sig2),
+ mp.LorentzianSusceptibility(frequency=Pd_frq3, gamma=Pd_gam3, sigma=Pd_sig3),
+ mp.LorentzianSusceptibility(frequency=Pd_frq4, gamma=Pd_gam4, sigma=Pd_sig4),
+]
Pd = mp.Medium(epsilon=1.0, E_susceptibilities=Pd_susc, valid_freq_range=metal_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# platinum (Pt)
-Pt_plasma_frq = 9.59*eV_um_scale
+Pt_plasma_frq = 9.59 * eV_um_scale
Pt_f0 = 0.333
Pt_frq0 = 1e-10
-Pt_gam0 = 0.080*eV_um_scale
-Pt_sig0 = Pt_f0*Pt_plasma_frq**2/Pt_frq0**2
+Pt_gam0 = 0.080 * eV_um_scale
+Pt_sig0 = Pt_f0 * Pt_plasma_frq**2 / Pt_frq0**2
Pt_f1 = 0.191
-Pt_frq1 = 0.780*eV_um_scale # 1.590 μm
-Pt_gam1 = 0.517*eV_um_scale
-Pt_sig1 = Pt_f1*Pt_plasma_frq**2/Pt_frq1**2
+Pt_frq1 = 0.780 * eV_um_scale # 1.590 μm
+Pt_gam1 = 0.517 * eV_um_scale
+Pt_sig1 = Pt_f1 * Pt_plasma_frq**2 / Pt_frq1**2
Pt_f2 = 0.659
-Pt_frq2 = 1.314*eV_um_scale # 0.944 μm
-Pt_gam2 = 1.838*eV_um_scale
-Pt_sig2 = Pt_f2*Pt_plasma_frq**2/Pt_frq2**2
+Pt_frq2 = 1.314 * eV_um_scale # 0.944 μm
+Pt_gam2 = 1.838 * eV_um_scale
+Pt_sig2 = Pt_f2 * Pt_plasma_frq**2 / Pt_frq2**2
Pt_f3 = 0.547
-Pt_frq3 = 3.141*eV_um_scale # 0.395 μm
-Pt_gam3 = 3.668*eV_um_scale
-Pt_sig3 = Pt_f3*Pt_plasma_frq**2/Pt_frq3**2
+Pt_frq3 = 3.141 * eV_um_scale # 0.395 μm
+Pt_gam3 = 3.668 * eV_um_scale
+Pt_sig3 = Pt_f3 * Pt_plasma_frq**2 / Pt_frq3**2
Pt_f4 = 3.576
-Pt_frq4 = 9.249*eV_um_scale # 0.134 μm
-Pt_gam4 = 8.517*eV_um_scale
-Pt_sig4 = Pt_f4*Pt_plasma_frq**2/Pt_frq4**2
-
-Pt_susc = [mp.DrudeSusceptibility(frequency=Pt_frq0, gamma=Pt_gam0, sigma=Pt_sig0),
- mp.LorentzianSusceptibility(frequency=Pt_frq1, gamma=Pt_gam1, sigma=Pt_sig1),
- mp.LorentzianSusceptibility(frequency=Pt_frq2, gamma=Pt_gam2, sigma=Pt_sig2),
- mp.LorentzianSusceptibility(frequency=Pt_frq3, gamma=Pt_gam3, sigma=Pt_sig3),
- mp.LorentzianSusceptibility(frequency=Pt_frq4, gamma=Pt_gam4, sigma=Pt_sig4)]
+Pt_frq4 = 9.249 * eV_um_scale # 0.134 μm
+Pt_gam4 = 8.517 * eV_um_scale
+Pt_sig4 = Pt_f4 * Pt_plasma_frq**2 / Pt_frq4**2
+
+Pt_susc = [
+ mp.DrudeSusceptibility(frequency=Pt_frq0, gamma=Pt_gam0, sigma=Pt_sig0),
+ mp.LorentzianSusceptibility(frequency=Pt_frq1, gamma=Pt_gam1, sigma=Pt_sig1),
+ mp.LorentzianSusceptibility(frequency=Pt_frq2, gamma=Pt_gam2, sigma=Pt_sig2),
+ mp.LorentzianSusceptibility(frequency=Pt_frq3, gamma=Pt_gam3, sigma=Pt_sig3),
+ mp.LorentzianSusceptibility(frequency=Pt_frq4, gamma=Pt_gam4, sigma=Pt_sig4),
+]
Pt = mp.Medium(epsilon=1.0, E_susceptibilities=Pt_susc, valid_freq_range=metal_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# titanium (Ti)
-Ti_plasma_frq = 7.29*eV_um_scale
+Ti_plasma_frq = 7.29 * eV_um_scale
Ti_f0 = 0.148
Ti_frq0 = 1e-10
-Ti_gam0 = 0.082*eV_um_scale
-Ti_sig0 = Ti_f0*Ti_plasma_frq**2/Ti_frq0**2
+Ti_gam0 = 0.082 * eV_um_scale
+Ti_sig0 = Ti_f0 * Ti_plasma_frq**2 / Ti_frq0**2
Ti_f1 = 0.899
-Ti_frq1 = 0.777*eV_um_scale # 1.596 μm
-Ti_gam1 = 2.276*eV_um_scale
-Ti_sig1 = Ti_f1*Ti_plasma_frq**2/Ti_frq1**2
+Ti_frq1 = 0.777 * eV_um_scale # 1.596 μm
+Ti_gam1 = 2.276 * eV_um_scale
+Ti_sig1 = Ti_f1 * Ti_plasma_frq**2 / Ti_frq1**2
Ti_f2 = 0.393
-Ti_frq2 = 1.545*eV_um_scale # 0.802 μm
-Ti_gam2 = 2.518*eV_um_scale
-Ti_sig2 = Ti_f2*Ti_plasma_frq**2/Ti_frq2**2
+Ti_frq2 = 1.545 * eV_um_scale # 0.802 μm
+Ti_gam2 = 2.518 * eV_um_scale
+Ti_sig2 = Ti_f2 * Ti_plasma_frq**2 / Ti_frq2**2
Ti_f3 = 0.187
-Ti_frq3 = 2.509*eV_um_scale # 0.494 μm
-Ti_gam3 = 1.663*eV_um_scale
-Ti_sig3 = Ti_f3*Ti_plasma_frq**2/Ti_frq3**2
+Ti_frq3 = 2.509 * eV_um_scale # 0.494 μm
+Ti_gam3 = 1.663 * eV_um_scale
+Ti_sig3 = Ti_f3 * Ti_plasma_frq**2 / Ti_frq3**2
Ti_f4 = 0.001
-Ti_frq4 = 19.43*eV_um_scale # 0.064 μm
-Ti_gam4 = 1.762*eV_um_scale
-Ti_sig4 = Ti_f4*Ti_plasma_frq**2/Ti_frq4**2
-
-Ti_susc = [mp.DrudeSusceptibility(frequency=Ti_frq0, gamma=Ti_gam0, sigma=Ti_sig0),
- mp.LorentzianSusceptibility(frequency=Ti_frq1, gamma=Ti_gam1, sigma=Ti_sig1),
- mp.LorentzianSusceptibility(frequency=Ti_frq2, gamma=Ti_gam2, sigma=Ti_sig2),
- mp.LorentzianSusceptibility(frequency=Ti_frq3, gamma=Ti_gam3, sigma=Ti_sig3),
- mp.LorentzianSusceptibility(frequency=Ti_frq4, gamma=Ti_gam4, sigma=Ti_sig4)]
+Ti_frq4 = 19.43 * eV_um_scale # 0.064 μm
+Ti_gam4 = 1.762 * eV_um_scale
+Ti_sig4 = Ti_f4 * Ti_plasma_frq**2 / Ti_frq4**2
+
+Ti_susc = [
+ mp.DrudeSusceptibility(frequency=Ti_frq0, gamma=Ti_gam0, sigma=Ti_sig0),
+ mp.LorentzianSusceptibility(frequency=Ti_frq1, gamma=Ti_gam1, sigma=Ti_sig1),
+ mp.LorentzianSusceptibility(frequency=Ti_frq2, gamma=Ti_gam2, sigma=Ti_sig2),
+ mp.LorentzianSusceptibility(frequency=Ti_frq3, gamma=Ti_gam3, sigma=Ti_sig3),
+ mp.LorentzianSusceptibility(frequency=Ti_frq4, gamma=Ti_gam4, sigma=Ti_sig4),
+]
Ti = mp.Medium(epsilon=1.0, E_susceptibilities=Ti_susc, valid_freq_range=metal_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# tungsten (W)
-W_plasma_frq = 13.22*eV_um_scale
+W_plasma_frq = 13.22 * eV_um_scale
W_f0 = 0.206
W_frq0 = 1e-10
-W_gam0 = 0.064*eV_um_scale
-W_sig0 = W_f0*W_plasma_frq**2/W_frq0**2
+W_gam0 = 0.064 * eV_um_scale
+W_sig0 = W_f0 * W_plasma_frq**2 / W_frq0**2
W_f1 = 0.054
-W_frq1 = 1.004*eV_um_scale # 1.235 μm
-W_gam1 = 0.530*eV_um_scale
-W_sig1 = W_f1*W_plasma_frq**2/W_frq1**2
+W_frq1 = 1.004 * eV_um_scale # 1.235 μm
+W_gam1 = 0.530 * eV_um_scale
+W_sig1 = W_f1 * W_plasma_frq**2 / W_frq1**2
W_f2 = 0.166
-W_frq2 = 1.917*eV_um_scale # 0.647 μm
-W_gam2 = 1.281*eV_um_scale
-W_sig2 = W_f2*W_plasma_frq**2/W_frq2**2
+W_frq2 = 1.917 * eV_um_scale # 0.647 μm
+W_gam2 = 1.281 * eV_um_scale
+W_sig2 = W_f2 * W_plasma_frq**2 / W_frq2**2
W_f3 = 0.706
-W_frq3 = 3.580*eV_um_scale # 0.346 μm
-W_gam3 = 3.332*eV_um_scale
-W_sig3 = W_f3*W_plasma_frq**2/W_frq3**2
+W_frq3 = 3.580 * eV_um_scale # 0.346 μm
+W_gam3 = 3.332 * eV_um_scale
+W_sig3 = W_f3 * W_plasma_frq**2 / W_frq3**2
W_f4 = 2.590
-W_frq4 = 7.498*eV_um_scale # 0.165 μm
-W_gam4 = 5.836*eV_um_scale
-W_sig4 = W_f4*W_plasma_frq**2/W_frq4**2
-
-W_susc = [mp.DrudeSusceptibility(frequency=W_frq0, gamma=W_gam0, sigma=W_sig0),
- mp.LorentzianSusceptibility(frequency=W_frq1, gamma=W_gam1, sigma=W_sig1),
- mp.LorentzianSusceptibility(frequency=W_frq2, gamma=W_gam2, sigma=W_sig2),
- mp.LorentzianSusceptibility(frequency=W_frq3, gamma=W_gam3, sigma=W_sig3),
- mp.LorentzianSusceptibility(frequency=W_frq4, gamma=W_gam4, sigma=W_sig4)]
+W_frq4 = 7.498 * eV_um_scale # 0.165 μm
+W_gam4 = 5.836 * eV_um_scale
+W_sig4 = W_f4 * W_plasma_frq**2 / W_frq4**2
+
+W_susc = [
+ mp.DrudeSusceptibility(frequency=W_frq0, gamma=W_gam0, sigma=W_sig0),
+ mp.LorentzianSusceptibility(frequency=W_frq1, gamma=W_gam1, sigma=W_sig1),
+ mp.LorentzianSusceptibility(frequency=W_frq2, gamma=W_gam2, sigma=W_sig2),
+ mp.LorentzianSusceptibility(frequency=W_frq3, gamma=W_gam3, sigma=W_sig3),
+ mp.LorentzianSusceptibility(frequency=W_frq4, gamma=W_gam4, sigma=W_sig4),
+]
W = mp.Medium(epsilon=1.0, E_susceptibilities=W_susc, valid_freq_range=metal_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# metals from D. Barchiesi and T. Grosges, J. Nanophotonics, Vol. 8, 08996 (2015)
# wavelength range: 0.4 - 0.8 μm
-metal_visible_range = mp.FreqRange(min=um_scale/0.8, max=um_scale/0.4)
+metal_visible_range = mp.FreqRange(min=um_scale / 0.8, max=um_scale / 0.4)
# gold (Au)
# fit to P.B. Johnson and R.W. Christy, Physical Review B, Vol. 6, pp. 4370-9 (1972)
-Au_JC_visible_frq0 = 1/(0.139779231751333*um_scale)
-Au_JC_visible_gam0 = 1/(1.12834046202759*um_scale)
+Au_JC_visible_frq0 = 1 / (0.139779231751333 * um_scale)
+Au_JC_visible_gam0 = 1 / (1.12834046202759 * um_scale)
Au_JC_visible_sig0 = 1
-Au_JC_visible_frq1 = 1/(0.404064525036786*um_scale)
-Au_JC_visible_gam1 = 1/(26.1269913352870*um_scale)
+Au_JC_visible_frq1 = 1 / (0.404064525036786 * um_scale)
+Au_JC_visible_gam1 = 1 / (26.1269913352870 * um_scale)
Au_JC_visible_sig1 = 2.07118534879440
-Au_JC_visible_susc = [mp.DrudeSusceptibility(frequency=Au_JC_visible_frq0, gamma=Au_JC_visible_gam0, sigma=Au_JC_visible_sig0),
- mp.LorentzianSusceptibility(frequency=Au_JC_visible_frq1, gamma=Au_JC_visible_gam1, sigma=Au_JC_visible_sig1)]
+Au_JC_visible_susc = [
+ mp.DrudeSusceptibility(
+ frequency=Au_JC_visible_frq0, gamma=Au_JC_visible_gam0, sigma=Au_JC_visible_sig0
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=Au_JC_visible_frq1, gamma=Au_JC_visible_gam1, sigma=Au_JC_visible_sig1
+ ),
+]
Au_JC_visible = mp.Medium(epsilon=6.1599, E_susceptibilities=Au_JC_visible_susc)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# gold (Au)
# fit to E.D. Palik, Handbook of Optical Constants, Academic Press (1985)
-Au_visible_frq0 = 1/(0.0473629248511456*um_scale)
-Au_visible_gam0 = 1/(0.255476199605166*um_scale)
+Au_visible_frq0 = 1 / (0.0473629248511456 * um_scale)
+Au_visible_gam0 = 1 / (0.255476199605166 * um_scale)
Au_visible_sig0 = 1
-Au_visible_frq1 = 1/(0.800619321082804*um_scale)
-Au_visible_gam1 = 1/(0.381870287531951*um_scale)
+Au_visible_frq1 = 1 / (0.800619321082804 * um_scale)
+Au_visible_gam1 = 1 / (0.381870287531951 * um_scale)
Au_visible_sig1 = -169.060953137985
-Au_visible_susc = [mp.DrudeSusceptibility(frequency=Au_visible_frq0, gamma=Au_visible_gam0, sigma=Au_visible_sig0),
- mp.LorentzianSusceptibility(frequency=Au_visible_frq1, gamma=Au_visible_gam1, sigma=Au_visible_sig1)]
-
-Au_visible = mp.Medium(epsilon=0.6888, E_susceptibilities=Au_visible_susc, valid_freq_range=metal_visible_range)
-
-#------------------------------------------------------------------
+Au_visible_susc = [
+ mp.DrudeSusceptibility(
+ frequency=Au_visible_frq0, gamma=Au_visible_gam0, sigma=Au_visible_sig0
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=Au_visible_frq1, gamma=Au_visible_gam1, sigma=Au_visible_sig1
+ ),
+]
+
+Au_visible = mp.Medium(
+ epsilon=0.6888,
+ E_susceptibilities=Au_visible_susc,
+ valid_freq_range=metal_visible_range,
+)
+
+# ------------------------------------------------------------------
## WARNING: unstable; field divergence may occur
# silver (Au)
# fit to E.D. Palik, Handbook of Optical Constants, Academic Press (1985)
-Ag_visible_frq0 = 1/(0.142050162130618*um_scale)
-Ag_visible_gam0 = 1/(18.0357292925015*um_scale)
+Ag_visible_frq0 = 1 / (0.142050162130618 * um_scale)
+Ag_visible_gam0 = 1 / (18.0357292925015 * um_scale)
Ag_visible_sig0 = 1
-Ag_visible_frq1 = 1/(0.115692151792108*um_scale)
-Ag_visible_gam1 = 1/(0.257794324096575*um_scale)
+Ag_visible_frq1 = 1 / (0.115692151792108 * um_scale)
+Ag_visible_gam1 = 1 / (0.257794324096575 * um_scale)
Ag_visible_sig1 = 3.74465275944019
-Ag_visible_susc = [mp.DrudeSusceptibility(frequency=Ag_visible_frq0, gamma=Ag_visible_gam0, sigma=Ag_visible_sig0),
- mp.LorentzianSusceptibility(frequency=Ag_visible_frq1, gamma=Ag_visible_gam1, sigma=Ag_visible_sig1)]
-
-Ag_visible = mp.Medium(epsilon=0.0067526, E_susceptibilities=Ag_visible_susc, valid_freq_range=metal_visible_range)
-
-#------------------------------------------------------------------
+Ag_visible_susc = [
+ mp.DrudeSusceptibility(
+ frequency=Ag_visible_frq0, gamma=Ag_visible_gam0, sigma=Ag_visible_sig0
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=Ag_visible_frq1, gamma=Ag_visible_gam1, sigma=Ag_visible_sig1
+ ),
+]
+
+Ag_visible = mp.Medium(
+ epsilon=0.0067526,
+ E_susceptibilities=Ag_visible_susc,
+ valid_freq_range=metal_visible_range,
+)
+
+# ------------------------------------------------------------------
## WARNING: unstable; field divergence may occur
# aluminum (Al)
# fit to E.D. Palik, Handbook of Optical Constants, Academic Press (1985)
-Al_visible_frq0 = 1/(0.0625841659042985*um_scale)
-Al_visible_gam0 = 1/(0.606007002962666*um_scale)
+Al_visible_frq0 = 1 / (0.0625841659042985 * um_scale)
+Al_visible_gam0 = 1 / (0.606007002962666 * um_scale)
Al_visible_sig0 = 1
-Al_visible_frq1 = 1/(0.528191199577075*um_scale)
-Al_visible_gam1 = 1/(0.291862527666814*um_scale)
+Al_visible_frq1 = 1 / (0.528191199577075 * um_scale)
+Al_visible_gam1 = 1 / (0.291862527666814 * um_scale)
Al_visible_sig1 = -44.4456675577921
-Al_visible_susc = [mp.DrudeSusceptibility(frequency=Al_visible_frq0, gamma=Al_visible_gam0, sigma=Al_visible_sig0),
- mp.LorentzianSusceptibility(frequency=Al_visible_frq1, gamma=Al_visible_gam1, sigma=Al_visible_sig1)]
-
-Al_visible = mp.Medium(epsilon=0.13313, E_susceptibilities=Al_visible_susc, valid_freq_range=metal_visible_range)
-
-#------------------------------------------------------------------
+Al_visible_susc = [
+ mp.DrudeSusceptibility(
+ frequency=Al_visible_frq0, gamma=Al_visible_gam0, sigma=Al_visible_sig0
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=Al_visible_frq1, gamma=Al_visible_gam1, sigma=Al_visible_sig1
+ ),
+]
+
+Al_visible = mp.Medium(
+ epsilon=0.13313,
+ E_susceptibilities=Al_visible_susc,
+ valid_freq_range=metal_visible_range,
+)
+
+# ------------------------------------------------------------------
# chroimium (Cr)
# fit to E.D. Palik, Handbook of Optical Constants, Academic Press (1985)
-Cr_visible_frq0 = 1/(0.118410119507342*um_scale)
-Cr_visible_gam0 = 1/(0.628596264869804*um_scale)
+Cr_visible_frq0 = 1 / (0.118410119507342 * um_scale)
+Cr_visible_gam0 = 1 / (0.628596264869804 * um_scale)
Cr_visible_sig0 = 1
-Cr_visible_frq1 = 1/(0.565709598452496*um_scale)
-Cr_visible_gam1 = 1/(0.731117670900812*um_scale)
+Cr_visible_frq1 = 1 / (0.565709598452496 * um_scale)
+Cr_visible_gam1 = 1 / (0.731117670900812 * um_scale)
Cr_visible_sig1 = 13.2912419951294
-Cr_visible_susc = [mp.DrudeSusceptibility(frequency=Cr_visible_frq0, gamma=Cr_visible_gam0, sigma=Cr_visible_sig0),
- mp.LorentzianSusceptibility(frequency=Cr_visible_frq1, gamma=Cr_visible_gam1, sigma=Cr_visible_sig1)]
-
-Cr_visible = mp.Medium(epsilon=2.7767, E_susceptibilities=Cr_visible_susc, valid_freq_range=metal_visible_range)
-
-#------------------------------------------------------------------
+Cr_visible_susc = [
+ mp.DrudeSusceptibility(
+ frequency=Cr_visible_frq0, gamma=Cr_visible_gam0, sigma=Cr_visible_sig0
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=Cr_visible_frq1, gamma=Cr_visible_gam1, sigma=Cr_visible_sig1
+ ),
+]
+
+Cr_visible = mp.Medium(
+ epsilon=2.7767,
+ E_susceptibilities=Cr_visible_susc,
+ valid_freq_range=metal_visible_range,
+)
+
+# ------------------------------------------------------------------
## WARNING: unstable; field divergence may occur
# titanium (Ti)
# fit to E.D. Palik, Handbook of Optical Constants, Academic Press (1985)
-Ti_visible_frq0 = 1/(0.101331651921602*um_scale)
-Ti_visible_gam0 = 1/(0.365743382258719*um_scale)
+Ti_visible_frq0 = 1 / (0.101331651921602 * um_scale)
+Ti_visible_gam0 = 1 / (0.365743382258719 * um_scale)
Ti_visible_sig0 = 1
-Ti_visible_frq1 = 1/(4.56839173979216e-09*um_scale)
-Ti_visible_gam1 = 1/(5.86441957443603e-10*um_scale)
+Ti_visible_frq1 = 1 / (4.56839173979216e-09 * um_scale)
+Ti_visible_gam1 = 1 / (5.86441957443603e-10 * um_scale)
Ti_visible_sig1 = 54742662.1963414
-Ti_visible_susc = [mp.DrudeSusceptibility(frequency=Ti_visible_frq0, gamma=Ti_visible_gam0, sigma=Ti_visible_sig0),
- mp.LorentzianSusceptibility(frequency=Ti_visible_frq1, gamma=Ti_visible_gam1, sigma=Ti_visible_sig1)]
-
-Ti_visible = mp.Medium(epsilon=-5.4742e7, E_susceptibilities=Ti_visible_susc, valid_freq_range=metal_visible_range)
-
-#------------------------------------------------------------------
+Ti_visible_susc = [
+ mp.DrudeSusceptibility(
+ frequency=Ti_visible_frq0, gamma=Ti_visible_gam0, sigma=Ti_visible_sig0
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=Ti_visible_frq1, gamma=Ti_visible_gam1, sigma=Ti_visible_sig1
+ ),
+]
+
+Ti_visible = mp.Medium(
+ epsilon=-5.4742e7,
+ E_susceptibilities=Ti_visible_susc,
+ valid_freq_range=metal_visible_range,
+)
+
+# ------------------------------------------------------------------
# aluminum (Al) from Horiba Technical Note 09: Drude Dispersion Model
# ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Drude_Dispersion_Model.pdf
# wavelength range: 0.19 - 0.83 μm
-Al_drude_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.19)
+Al_drude_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.19)
-Al_drude_frq = 1/(0.0789607648707171*um_scale)
-Al_drude_gam = 1/(1.78138208333333*um_scale)
+Al_drude_frq = 1 / (0.0789607648707171 * um_scale)
+Al_drude_gam = 1 / (1.78138208333333 * um_scale)
Al_drude_sig = 1
-Al_drude_susc = [mp.DrudeSusceptibility(frequency=Al_drude_frq, gamma=Al_drude_gam, sigma=Al_drude_sig)]
+Al_drude_susc = [
+ mp.DrudeSusceptibility(
+ frequency=Al_drude_frq, gamma=Al_drude_gam, sigma=Al_drude_sig
+ )
+]
-Al_drude = mp.Medium(epsilon=1.0, E_susceptibilities=Al_drude_susc, valid_freq_range=Al_drude_range)
+Al_drude = mp.Medium(
+ epsilon=1.0, E_susceptibilities=Al_drude_susc, valid_freq_range=Al_drude_range
+)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# cobalt (Co) from Horiba Technical Note 09: Drude Dispersion Model
# ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Drude_Dispersion_Model.pdf
# wavelength range: 0.26 - 1.65 μm
-Co_range = mp.FreqRange(min=um_scale/1.65, max=um_scale/0.26)
+Co_range = mp.FreqRange(min=um_scale / 1.65, max=um_scale / 0.26)
-Co_frq = 1/(0.0789607648707171*um_scale)
-Co_gam = 1/(0.213802712536644*um_scale)
+Co_frq = 1 / (0.0789607648707171 * um_scale)
+Co_gam = 1 / (0.213802712536644 * um_scale)
Co_sig = 1
Co_susc = [mp.DrudeSusceptibility(frequency=Co_frq, gamma=Co_gam, sigma=Co_sig)]
Co = mp.Medium(epsilon=3.694, E_susceptibilities=Co_susc, valid_freq_range=Co_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
## WARNING: unstable; field divergence may occur
# molybdenum (Mo) from Horiba Technical Note 09: Drude Dispersion Model
# ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Drude_Dispersion_Model.pdf
# wavelength range: 0.25 - 0.83 μm
-Mo_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.25)
+Mo_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.25)
-Mo_frq = 1/(0.0620790071099539*um_scale)
-Mo_gam = 1/(0.148359690080172*um_scale)
+Mo_frq = 1 / (0.0620790071099539 * um_scale)
+Mo_gam = 1 / (0.148359690080172 * um_scale)
Mo_sig = 1
Mo_susc = [mp.DrudeSusceptibility(frequency=Mo_frq, gamma=Mo_gam, sigma=Mo_sig)]
Mo = mp.Medium(epsilon=-1.366, E_susceptibilities=Mo_susc, valid_freq_range=Mo_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# nickel chrome (NiCr) from Horiba Technical Note 09: Drude Dispersion Model
# ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Drude_Dispersion_Model.pdf
# wavelength range: 0.25 - 0.83 μm
-NiCr_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.25)
+NiCr_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.25)
-NiCr_frq = 1/(0.0868845080588648*um_scale)
-NiCr_gam = 1/(0.308418390547264*um_scale)
+NiCr_frq = 1 / (0.0868845080588648 * um_scale)
+NiCr_gam = 1 / (0.308418390547264 * um_scale)
NiCr_sig = 1
NiCr_susc = [mp.DrudeSusceptibility(frequency=NiCr_frq, gamma=NiCr_gam, sigma=NiCr_sig)]
NiCr = mp.Medium(epsilon=1.0, E_susceptibilities=NiCr_susc, valid_freq_range=NiCr_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# nickel iron (NiFe) from Horiba Technical Note 09: Drude Dispersion Model
# ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Drude_Dispersion_Model.pdf
# wavelength range: 0.25 - 0.83 μm
-NiFe_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.25)
+NiFe_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.25)
-NiFe_frq = 1/(0.0838297450980392*um_scale)
-NiFe_gam = 1/(0.259381156903766*um_scale)
+NiFe_frq = 1 / (0.0838297450980392 * um_scale)
+NiFe_gam = 1 / (0.259381156903766 * um_scale)
NiFe_sig = 1
NiFe_susc = [mp.DrudeSusceptibility(frequency=NiFe_frq, gamma=NiFe_gam, sigma=NiFe_sig)]
NiFe = mp.Medium(epsilon=1.0, E_susceptibilities=NiFe_susc, valid_freq_range=NiFe_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# titanium (Ti) from Horiba Technical Note 09: Drude Dispersion Model
# ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Drude_Dispersion_Model.pdf
# wavelength range: 0.21 - 1.24 μm
-Ti_drude_range = mp.FreqRange(min=um_scale/1.24, max=um_scale/0.21)
+Ti_drude_range = mp.FreqRange(min=um_scale / 1.24, max=um_scale / 0.21)
-Ti_drude_frq = 1/(0.113746966055046*um_scale)
-Ti_drude_gam = 1/(0.490056098814229*um_scale)
+Ti_drude_frq = 1 / (0.113746966055046 * um_scale)
+Ti_drude_gam = 1 / (0.490056098814229 * um_scale)
Ti_drude_sig = 1
-Ti_drude_susc = [mp.DrudeSusceptibility(frequency=Ti_drude_frq, gamma=Ti_drude_gam, sigma=Ti_drude_sig)]
+Ti_drude_susc = [
+ mp.DrudeSusceptibility(
+ frequency=Ti_drude_frq, gamma=Ti_drude_gam, sigma=Ti_drude_sig
+ )
+]
-Ti_drude = mp.Medium(epsilon=1.0, E_susceptibilities=Ti_drude_susc, valid_freq_range=Ti_drude_range)
+Ti_drude = mp.Medium(
+ epsilon=1.0, E_susceptibilities=Ti_drude_susc, valid_freq_range=Ti_drude_range
+)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# silicon nitride (SiN), non-stoichiometric, from Horiba Technical Note 08: Lorentz Dispersion Model
# ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf
# wavelength range: 0.21 - 2.07 μm
-SiN_range = mp.FreqRange(min=um_scale/2.07, max=um_scale/0.21)
+SiN_range = mp.FreqRange(min=um_scale / 2.07, max=um_scale / 0.21)
-SiN_frq1 = 1/(0.190891752117013*um_scale)
-SiN_gam1 = 1/(3.11518072864322*um_scale)
+SiN_frq1 = 1 / (0.190891752117013 * um_scale)
+SiN_gam1 = 1 / (3.11518072864322 * um_scale)
SiN_sig1 = 1.2650
-SiN_susc = [mp.LorentzianSusceptibility(frequency=SiN_frq1, gamma=SiN_gam1, sigma=SiN_sig1)]
+SiN_susc = [
+ mp.LorentzianSusceptibility(frequency=SiN_frq1, gamma=SiN_gam1, sigma=SiN_sig1)
+]
SiN = mp.Medium(epsilon=2.320, E_susceptibilities=SiN_susc, valid_freq_range=SiN_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# silicon nitride (Si3N4), stoichiometric, from Horiba Technical Note 08: Lorentz Dispersion Model
# ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf
# wavelength range: 0.23 - 0.83 μm
-Si3N4_range = mp.FreqRange(min=um_scale/0.83, max=um_scale/0.23)
+Si3N4_range = mp.FreqRange(min=um_scale / 0.83, max=um_scale / 0.23)
-Si3N4_frq1 = 1/(0.389153148148148*um_scale)
-Si3N4_gam1 = 1/(0.693811936205932*um_scale)
+Si3N4_frq1 = 1 / (0.389153148148148 * um_scale)
+Si3N4_gam1 = 1 / (0.693811936205932 * um_scale)
Si3N4_sig1 = 4.377
-Si3N4_susc = [mp.LorentzianSusceptibility(frequency=Si3N4_frq1, gamma=Si3N4_gam1, sigma=Si3N4_sig1)]
+Si3N4_susc = [
+ mp.LorentzianSusceptibility(
+ frequency=Si3N4_frq1, gamma=Si3N4_gam1, sigma=Si3N4_sig1
+ )
+]
-Si3N4 = mp.Medium(epsilon=1.0, E_susceptibilities=Si3N4_susc, valid_freq_range=Si3N4_range)
+Si3N4 = mp.Medium(
+ epsilon=1.0, E_susceptibilities=Si3N4_susc, valid_freq_range=Si3N4_range
+)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# silicon dioxide (SiO2) from Horiba Technical Note 08: Lorentz Dispersion Model
# ref: http://www.horiba.com/fileadmin/uploads/Scientific/Downloads/OpticalSchool_CN/TN/ellipsometer/Lorentz_Dispersion_Model.pdf
# wavelength range: 0.25 - 1.77 μm
-SiO2_range = mp.FreqRange(min=um_scale/1.77, max=um_scale/0.25)
+SiO2_range = mp.FreqRange(min=um_scale / 1.77, max=um_scale / 0.25)
-SiO2_frq1 = 1/(0.103320160833333*um_scale)
-SiO2_gam1 = 1/(12.3984193000000*um_scale)
+SiO2_frq1 = 1 / (0.103320160833333 * um_scale)
+SiO2_gam1 = 1 / (12.3984193000000 * um_scale)
SiO2_sig1 = 1.12
-SiO2_susc = [mp.LorentzianSusceptibility(frequency=SiO2_frq1, gamma=SiO2_gam1, sigma=SiO2_sig1)]
+SiO2_susc = [
+ mp.LorentzianSusceptibility(frequency=SiO2_frq1, gamma=SiO2_gam1, sigma=SiO2_sig1)
+]
SiO2 = mp.Medium(epsilon=1.0, E_susceptibilities=SiO2_susc, valid_freq_range=SiO2_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# indium phosphide (InP) from Handbook of Optics, 2nd edition, Vol. 2, McGraw-Hill (1994)
# ref: https://refractiveindex.info/?shelf=main&book=InP&page=Pettit
# wavelength range: 0.95 - 10 μm
-InP_range = mp.FreqRange(min=um_scale/10, max=um_scale/0.95)
+InP_range = mp.FreqRange(min=um_scale / 10, max=um_scale / 0.95)
-InP_frq1 = 1/(0.6263*um_scale)
+InP_frq1 = 1 / (0.6263 * um_scale)
InP_gam1 = 0
InP_sig1 = 2.316
-InP_frq2 = 1/(32.935*um_scale)
+InP_frq2 = 1 / (32.935 * um_scale)
InP_gam2 = 0
InP_sig2 = 2.765
-InP_susc = [mp.LorentzianSusceptibility(frequency=InP_frq1, gamma=InP_gam1, sigma=InP_sig1),
- mp.LorentzianSusceptibility(frequency=InP_frq2, gamma=InP_gam2, sigma=InP_sig2)]
+InP_susc = [
+ mp.LorentzianSusceptibility(frequency=InP_frq1, gamma=InP_gam1, sigma=InP_sig1),
+ mp.LorentzianSusceptibility(frequency=InP_frq2, gamma=InP_gam2, sigma=InP_sig2),
+]
InP = mp.Medium(epsilon=7.255, E_susceptibilities=InP_susc, valid_freq_range=InP_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# germanium (Ge) from N. P. Barnes and M. S. Piltch, J. Optical Society America, Vol. 69, pp. 178-180 (1979)
# ref: https://refractiveindex.info/?shelf=main&book=Ge&page=Icenogle
# wavelength range: 2.5 - 12 μm
-Ge_range = mp.FreqRange(min=um_scale/12, max=um_scale/2.5)
+Ge_range = mp.FreqRange(min=um_scale / 12, max=um_scale / 2.5)
-Ge_frq1 = 1/(0.6641159*um_scale)
+Ge_frq1 = 1 / (0.6641159 * um_scale)
Ge_gam1 = 0
Ge_sig1 = 6.7288
-Ge_frq2 = 1/(62.210127*um_scale)
+Ge_frq2 = 1 / (62.210127 * um_scale)
Ge_gam2 = 0
Ge_sig2 = 0.21307
-Ge_susc = [mp.LorentzianSusceptibility(frequency=Ge_frq1, gamma=Ge_gam1, sigma=Ge_sig1),
- mp.LorentzianSusceptibility(frequency=Ge_frq2, gamma=Ge_gam2, sigma=Ge_sig2)]
+Ge_susc = [
+ mp.LorentzianSusceptibility(frequency=Ge_frq1, gamma=Ge_gam1, sigma=Ge_sig1),
+ mp.LorentzianSusceptibility(frequency=Ge_frq2, gamma=Ge_gam2, sigma=Ge_sig2),
+]
Ge = mp.Medium(epsilon=9.28156, E_susceptibilities=Ge_susc, valid_freq_range=Ge_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# silicon (Si) from C. D. Salzberg and J. J. Villa, , J. Optical Society America, Vol. 47, pp. 244-246 (1957)
# ref: https://refractiveindex.info/?shelf=main&book=Si&page=Salzberg
# wavelength range: 1.36 - 11 μm
-Si_range = mp.FreqRange(min=um_scale/11, max=um_scale/1.36)
+Si_range = mp.FreqRange(min=um_scale / 11, max=um_scale / 1.36)
-Si_frq1 = 1/(0.301516485*um_scale)
+Si_frq1 = 1 / (0.301516485 * um_scale)
Si_gam1 = 0
Si_sig1 = 10.6684293
-Si_frq2 = 1/(1.13475115*um_scale)
+Si_frq2 = 1 / (1.13475115 * um_scale)
Si_gam2 = 0
Si_sig2 = 0.0030434748
-Si_frq3 = 1/(1104*um_scale)
+Si_frq3 = 1 / (1104 * um_scale)
Si_gam3 = 0
Si_sig3 = 1.54133408
-Si_susc = [mp.LorentzianSusceptibility(frequency=Si_frq1, gamma=Si_gam1, sigma=Si_sig1),
- mp.LorentzianSusceptibility(frequency=Si_frq2, gamma=Si_gam2, sigma=Si_sig2),
- mp.LorentzianSusceptibility(frequency=Si_frq3, gamma=Si_gam3, sigma=Si_sig3)]
+Si_susc = [
+ mp.LorentzianSusceptibility(frequency=Si_frq1, gamma=Si_gam1, sigma=Si_sig1),
+ mp.LorentzianSusceptibility(frequency=Si_frq2, gamma=Si_gam2, sigma=Si_sig2),
+ mp.LorentzianSusceptibility(frequency=Si_frq3, gamma=Si_gam3, sigma=Si_sig3),
+]
Si = mp.Medium(epsilon=1.0, E_susceptibilities=Si_susc, valid_freq_range=Si_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# poly(methyl methacrylate) (PMMA) from N. Sultanova et al., Acta Physica Polonica A, Vol. 116, pp. 585-7 (2009)
# ref: https://refractiveindex.info/?shelf=organic&book=poly%28methyl_methacrylate%29&page=Sultanova
# wavelength range: 0.437 - 1.052 μm
-PMMA_range = mp.FreqRange(min=um_scale/1.052, max=um_scale/0.437)
+PMMA_range = mp.FreqRange(min=um_scale / 1.052, max=um_scale / 0.437)
-PMMA_frq1 = 1/(0.106362587407415*um_scale)
+PMMA_frq1 = 1 / (0.106362587407415 * um_scale)
PMMA_gam1 = 0
PMMA_sig1 = 1.1819
-PMMA_susc = [mp.LorentzianSusceptibility(frequency=PMMA_frq1, gamma=PMMA_gam1, sigma=PMMA_sig1)]
+PMMA_susc = [
+ mp.LorentzianSusceptibility(frequency=PMMA_frq1, gamma=PMMA_gam1, sigma=PMMA_sig1)
+]
PMMA = mp.Medium(epsilon=1.0, E_susceptibilities=PMMA_susc, valid_freq_range=PMMA_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# polycarbonate (PC) from N. Sultanova et al., Acta Physica Polonica A, Vol. 116, pp. 585-7 (2009)
# ref: https://refractiveindex.info/?shelf=organic&book=polycarbonate&page=Sultanova
# wavelength range: 0.437 - 1.052 μm
-PC_range = mp.FreqRange(min=um_scale/1.052, max=um_scale/0.437)
+PC_range = mp.FreqRange(min=um_scale / 1.052, max=um_scale / 0.437)
-PC_frq1 = 1/(0.145958898324152*um_scale)
+PC_frq1 = 1 / (0.145958898324152 * um_scale)
PC_gam1 = 0
PC_sig1 = 1.4182
@@ -953,14 +1119,14 @@
PC = mp.Medium(epsilon=1.0, E_susceptibilities=PC_susc, valid_freq_range=PC_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# polystyrene (PS) from N. Sultanova et al., Acta Physica Polonica A, Vol. 116, pp. 585-7 (2009)
# ref: https://refractiveindex.info/?shelf=organic&book=polystyren&page=Sultanova
# wavelength range: 0.437 - 1.052 μm
-PS_range = mp.FreqRange(min=um_scale/1.052, max=um_scale/0.437)
+PS_range = mp.FreqRange(min=um_scale / 1.052, max=um_scale / 0.437)
-PS_frq1 = 1/(0.142182980697410*um_scale)
+PS_frq1 = 1 / (0.142182980697410 * um_scale)
PS_gam1 = 0
PS_sig1 = 1.4435
@@ -968,22 +1134,24 @@
PS = mp.Medium(epsilon=1.0, E_susceptibilities=PS_susc, valid_freq_range=PS_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# cellulose (CLS) from N. Sultanova et al., Acta Physica Polonica A, Vol. 116, pp. 585-7 (2009)
# ref: https://refractiveindex.info/?shelf=organic&book=cellulose&page=Sultanova
# wavelength range: 0.437 - 1.052 μm
-CLS_range = mp.FreqRange(min=um_scale/1.052, max=um_scale/0.437)
+CLS_range = mp.FreqRange(min=um_scale / 1.052, max=um_scale / 0.437)
-CLS_frq1 = 1/(0.105294824184287*um_scale)
+CLS_frq1 = 1 / (0.105294824184287 * um_scale)
CLS_gam1 = 0
CLS_sig1 = 1.124
-CLS_susc = [mp.LorentzianSusceptibility(frequency=CLS_frq1, gamma=CLS_gam1, sigma=CLS_sig1)]
+CLS_susc = [
+ mp.LorentzianSusceptibility(frequency=CLS_frq1, gamma=CLS_gam1, sigma=CLS_sig1)
+]
CLS = mp.Medium(epsilon=1.0, E_susceptibilities=CLS_susc, valid_freq_range=CLS_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# barium borate (BaB2O4), beta phase, from G. Tamosauskas et al., Optical Materials Express, Vol. 8, pp. 1410-18 (2018)
# ref: https://refractiveindex.info/?shelf=main&book=BaB2O4&page=Tamosauskas-o
# ref: https://refractiveindex.info/?shelf=main&book=BaB2O4&page=Tamosauskas-e
@@ -991,39 +1159,71 @@
## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z
-BaB2O4_range = mp.FreqRange(min=um_scale/5.2, max=um_scale/0.188)
+BaB2O4_range = mp.FreqRange(min=um_scale / 5.2, max=um_scale / 0.188)
-BaB2O4_frq1 = 1/(0.06265780079128216*um_scale)
+BaB2O4_frq1 = 1 / (0.06265780079128216 * um_scale)
BaB2O4_gam1 = 0
BaB2O4_sig1 = 0.90291
-BaB2O4_frq2 = 1/(0.13706202975295528*um_scale)
+BaB2O4_frq2 = 1 / (0.13706202975295528 * um_scale)
BaB2O4_gam2 = 0
BaB2O4_sig2 = 0.83155
-BaB2O4_frq3 = 1/(7.746612162745725*um_scale)
+BaB2O4_frq3 = 1 / (7.746612162745725 * um_scale)
BaB2O4_gam3 = 0
BaB2O4_sig3 = 0.76536
-BaB2O4_susc_o = [mp.LorentzianSusceptibility(frequency=BaB2O4_frq1, gamma=BaB2O4_gam1, sigma_diag=BaB2O4_sig1*mp.Vector3(1,1,0)),
- mp.LorentzianSusceptibility(frequency=BaB2O4_frq2, gamma=BaB2O4_gam2, sigma_diag=BaB2O4_sig2*mp.Vector3(1,1,0)),
- mp.LorentzianSusceptibility(frequency=BaB2O4_frq3, gamma=BaB2O4_gam3, sigma_diag=BaB2O4_sig3*mp.Vector3(1,1,0))]
-
-BaB2O4_frq1 = 1/(0.0845103543951864*um_scale)
+BaB2O4_susc_o = [
+ mp.LorentzianSusceptibility(
+ frequency=BaB2O4_frq1,
+ gamma=BaB2O4_gam1,
+ sigma_diag=BaB2O4_sig1 * mp.Vector3(1, 1, 0),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=BaB2O4_frq2,
+ gamma=BaB2O4_gam2,
+ sigma_diag=BaB2O4_sig2 * mp.Vector3(1, 1, 0),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=BaB2O4_frq3,
+ gamma=BaB2O4_gam3,
+ sigma_diag=BaB2O4_sig3 * mp.Vector3(1, 1, 0),
+ ),
+]
+
+BaB2O4_frq1 = 1 / (0.0845103543951864 * um_scale)
BaB2O4_gam1 = 0
BaB2O4_sig1 = 1.151075
-BaB2O4_frq2 = 1/(0.15029970059850417*um_scale)
+BaB2O4_frq2 = 1 / (0.15029970059850417 * um_scale)
BaB2O4_gam2 = 0
BaB2O4_sig2 = 0.21803
-BaB2O4_frq3 = 1/(16.217274740226856*um_scale)
+BaB2O4_frq3 = 1 / (16.217274740226856 * um_scale)
BaB2O4_gam3 = 0
BaB2O4_sig3 = 0.656
-BaB2O4_susc_e = [mp.LorentzianSusceptibility(frequency=BaB2O4_frq1, gamma=BaB2O4_gam1, sigma_diag=BaB2O4_sig1*mp.Vector3(0,0,1)),
- mp.LorentzianSusceptibility(frequency=BaB2O4_frq2, gamma=BaB2O4_gam2, sigma_diag=BaB2O4_sig2*mp.Vector3(0,0,1)),
- mp.LorentzianSusceptibility(frequency=BaB2O4_frq3, gamma=BaB2O4_gam3, sigma_diag=BaB2O4_sig3*mp.Vector3(0,0,1))]
-
-BaB2O4 = mp.Medium(epsilon=1.0, E_susceptibilities=BaB2O4_susc_o+BaB2O4_susc_e, valid_freq_range=BaB2O4_range)
-
-#------------------------------------------------------------------
+BaB2O4_susc_e = [
+ mp.LorentzianSusceptibility(
+ frequency=BaB2O4_frq1,
+ gamma=BaB2O4_gam1,
+ sigma_diag=BaB2O4_sig1 * mp.Vector3(0, 0, 1),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=BaB2O4_frq2,
+ gamma=BaB2O4_gam2,
+ sigma_diag=BaB2O4_sig2 * mp.Vector3(0, 0, 1),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=BaB2O4_frq3,
+ gamma=BaB2O4_gam3,
+ sigma_diag=BaB2O4_sig3 * mp.Vector3(0, 0, 1),
+ ),
+]
+
+BaB2O4 = mp.Medium(
+ epsilon=1.0,
+ E_susceptibilities=BaB2O4_susc_o + BaB2O4_susc_e,
+ valid_freq_range=BaB2O4_range,
+)
+
+# ------------------------------------------------------------------
# lithium niobate (LiNbO3) from D.E. Zelmon et al., J. Optical Society of America B, Vol. 14, pp. 3319-22 (1997)
# ref: https://refractiveindex.info/?shelf=main&book=LiNbO3&page=Zelmon-o
# ref: https://refractiveindex.info/?shelf=main&book=LiNbO3&page=Zelmon-e
@@ -1031,39 +1231,71 @@
## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z
-LiNbO3_range = mp.FreqRange(min=um_scale/5.0, max=um_scale/0.4)
+LiNbO3_range = mp.FreqRange(min=um_scale / 5.0, max=um_scale / 0.4)
-LiNbO3_frq1 = 1/(0.13281566172707193*um_scale)
+LiNbO3_frq1 = 1 / (0.13281566172707193 * um_scale)
LiNbO3_gam1 = 0
LiNbO3_sig1 = 2.6734
-LiNbO3_frq2 = 1/(0.24318717071424636*um_scale)
+LiNbO3_frq2 = 1 / (0.24318717071424636 * um_scale)
LiNbO3_gam2 = 0
LiNbO3_sig2 = 1.2290
-LiNbO3_frq3 = 1/(21.78531615561271*um_scale)
+LiNbO3_frq3 = 1 / (21.78531615561271 * um_scale)
LiNbO3_gam3 = 0
LiNbO3_sig3 = 12.614
-LiNbO3_susc_o = [mp.LorentzianSusceptibility(frequency=LiNbO3_frq1, gamma=LiNbO3_gam1, sigma_diag=LiNbO3_sig1*mp.Vector3(1,1,0)),
- mp.LorentzianSusceptibility(frequency=LiNbO3_frq2, gamma=LiNbO3_gam2, sigma_diag=LiNbO3_sig2*mp.Vector3(1,1,0)),
- mp.LorentzianSusceptibility(frequency=LiNbO3_frq3, gamma=LiNbO3_gam3, sigma_diag=LiNbO3_sig3*mp.Vector3(1,1,0))]
-
-LiNbO3_frq1 = 1/(0.14307340773183533*um_scale)
+LiNbO3_susc_o = [
+ mp.LorentzianSusceptibility(
+ frequency=LiNbO3_frq1,
+ gamma=LiNbO3_gam1,
+ sigma_diag=LiNbO3_sig1 * mp.Vector3(1, 1, 0),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=LiNbO3_frq2,
+ gamma=LiNbO3_gam2,
+ sigma_diag=LiNbO3_sig2 * mp.Vector3(1, 1, 0),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=LiNbO3_frq3,
+ gamma=LiNbO3_gam3,
+ sigma_diag=LiNbO3_sig3 * mp.Vector3(1, 1, 0),
+ ),
+]
+
+LiNbO3_frq1 = 1 / (0.14307340773183533 * um_scale)
LiNbO3_gam1 = 0
LiNbO3_sig1 = 2.9804
-LiNbO3_frq2 = 1/(0.2580697580112788*um_scale)
+LiNbO3_frq2 = 1 / (0.2580697580112788 * um_scale)
LiNbO3_gam2 = 0
LiNbO3_sig2 = 0.5981
-LiNbO3_frq3 = 1/(20.39803912144498*um_scale)
+LiNbO3_frq3 = 1 / (20.39803912144498 * um_scale)
LiNbO3_gam3 = 0
LiNbO3_sig3 = 8.9543
-LiNbO3_susc_e = [mp.LorentzianSusceptibility(frequency=LiNbO3_frq1, gamma=LiNbO3_gam1, sigma_diag=LiNbO3_sig1*mp.Vector3(0,0,1)),
- mp.LorentzianSusceptibility(frequency=LiNbO3_frq2, gamma=LiNbO3_gam2, sigma_diag=LiNbO3_sig2*mp.Vector3(0,0,1)),
- mp.LorentzianSusceptibility(frequency=LiNbO3_frq3, gamma=LiNbO3_gam3, sigma_diag=LiNbO3_sig3*mp.Vector3(0,0,1))]
-
-LiNbO3 = mp.Medium(epsilon=1.0, E_susceptibilities=LiNbO3_susc_o+LiNbO3_susc_e, valid_freq_range=LiNbO3_range)
-
-#------------------------------------------------------------------
+LiNbO3_susc_e = [
+ mp.LorentzianSusceptibility(
+ frequency=LiNbO3_frq1,
+ gamma=LiNbO3_gam1,
+ sigma_diag=LiNbO3_sig1 * mp.Vector3(0, 0, 1),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=LiNbO3_frq2,
+ gamma=LiNbO3_gam2,
+ sigma_diag=LiNbO3_sig2 * mp.Vector3(0, 0, 1),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=LiNbO3_frq3,
+ gamma=LiNbO3_gam3,
+ sigma_diag=LiNbO3_sig3 * mp.Vector3(0, 0, 1),
+ ),
+]
+
+LiNbO3 = mp.Medium(
+ epsilon=1.0,
+ E_susceptibilities=LiNbO3_susc_o + LiNbO3_susc_e,
+ valid_freq_range=LiNbO3_range,
+)
+
+# ------------------------------------------------------------------
# calcium tungstate (CaWO4) from W.L. Bond, J. Applied Physics, Vol. 36, pp. 1674-77 (1965)
# ref: https://refractiveindex.info/?shelf=main&book=CaWO4&page=Bond-o
# ref: https://refractiveindex.info/?shelf=main&book=CaWO4&page=Bond-e
@@ -1071,31 +1303,55 @@
## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z
-CaWO4_range = mp.FreqRange(min=um_scale/4.0, max=um_scale/0.45)
+CaWO4_range = mp.FreqRange(min=um_scale / 4.0, max=um_scale / 0.45)
-CaWO4_frq1 = 1/(0.1347*um_scale)
+CaWO4_frq1 = 1 / (0.1347 * um_scale)
CaWO4_gam1 = 0
CaWO4_sig1 = 2.5493
-CaWO4_frq2 = 1/(10.815*um_scale)
+CaWO4_frq2 = 1 / (10.815 * um_scale)
CaWO4_gam2 = 0
CaWO4_sig2 = 0.9200
-CaWO4_susc_o = [mp.LorentzianSusceptibility(frequency=CaWO4_frq1, gamma=CaWO4_gam1, sigma_diag=CaWO4_sig1*mp.Vector3(1,1,0)),
- mp.LorentzianSusceptibility(frequency=CaWO4_frq2, gamma=CaWO4_gam2, sigma_diag=CaWO4_sig2*mp.Vector3(1,1,0))]
-
-CaWO4_frq1 = 1/(0.1379*um_scale)
+CaWO4_susc_o = [
+ mp.LorentzianSusceptibility(
+ frequency=CaWO4_frq1,
+ gamma=CaWO4_gam1,
+ sigma_diag=CaWO4_sig1 * mp.Vector3(1, 1, 0),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=CaWO4_frq2,
+ gamma=CaWO4_gam2,
+ sigma_diag=CaWO4_sig2 * mp.Vector3(1, 1, 0),
+ ),
+]
+
+CaWO4_frq1 = 1 / (0.1379 * um_scale)
CaWO4_gam1 = 0
CaWO4_sig1 = 2.6041
-CaWO4_frq2 = 1/(21.371*um_scale)
+CaWO4_frq2 = 1 / (21.371 * um_scale)
CaWO4_gam2 = 0
CaWO4_sig2 = 4.1237
-CaWO4_susc_e = [mp.LorentzianSusceptibility(frequency=CaWO4_frq1, gamma=CaWO4_gam1, sigma_diag=CaWO4_sig1*mp.Vector3(0,0,1)),
- mp.LorentzianSusceptibility(frequency=CaWO4_frq2, gamma=CaWO4_gam2, sigma_diag=CaWO4_sig2*mp.Vector3(0,0,1))]
-
-CaWO4 = mp.Medium(epsilon=1.0, E_susceptibilities=CaWO4_susc_o+CaWO4_susc_e, valid_freq_range=CaWO4_range)
-
-#------------------------------------------------------------------
+CaWO4_susc_e = [
+ mp.LorentzianSusceptibility(
+ frequency=CaWO4_frq1,
+ gamma=CaWO4_gam1,
+ sigma_diag=CaWO4_sig1 * mp.Vector3(0, 0, 1),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=CaWO4_frq2,
+ gamma=CaWO4_gam2,
+ sigma_diag=CaWO4_sig2 * mp.Vector3(0, 0, 1),
+ ),
+]
+
+CaWO4 = mp.Medium(
+ epsilon=1.0,
+ E_susceptibilities=CaWO4_susc_o + CaWO4_susc_e,
+ valid_freq_range=CaWO4_range,
+)
+
+# ------------------------------------------------------------------
# calcium carbonate (CaCO3) from G. Ghosh, Optics Communication, Vol. 163, pp. 95-102 (1999)
# ref: https://refractiveindex.info/?shelf=main&book=CaCO3&page=Ghosh-o
# ref: https://refractiveindex.info/?shelf=main&book=CaCO3&page=Ghosh-e
@@ -1103,31 +1359,55 @@
## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z
-CaCO3_range = mp.FreqRange(min=um_scale/2.172, max=um_scale/0.204)
+CaCO3_range = mp.FreqRange(min=um_scale / 2.172, max=um_scale / 0.204)
-CaCO3_frq1 = 1/(0.13940057496294625*um_scale)
+CaCO3_frq1 = 1 / (0.13940057496294625 * um_scale)
CaCO3_gam1 = 0
CaCO3_sig1 = 0.96464345
-CaCO3_frq2 = 1/(10.954451150103322*um_scale)
+CaCO3_frq2 = 1 / (10.954451150103322 * um_scale)
CaCO3_gam2 = 0
CaCO3_sig2 = 1.82831454
-CaCO3_susc_o = [mp.LorentzianSusceptibility(frequency=CaCO3_frq1, gamma=CaCO3_gam1, sigma_diag=CaCO3_sig1*mp.Vector3(1,1,0)),
- mp.LorentzianSusceptibility(frequency=CaCO3_frq2, gamma=CaCO3_gam2, sigma_diag=CaCO3_sig2*mp.Vector3(1,1,0))]
-
-CaCO3_frq1 = 1/(0.1032906302623815*um_scale)
+CaCO3_susc_o = [
+ mp.LorentzianSusceptibility(
+ frequency=CaCO3_frq1,
+ gamma=CaCO3_gam1,
+ sigma_diag=CaCO3_sig1 * mp.Vector3(1, 1, 0),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=CaCO3_frq2,
+ gamma=CaCO3_gam2,
+ sigma_diag=CaCO3_sig2 * mp.Vector3(1, 1, 0),
+ ),
+]
+
+CaCO3_frq1 = 1 / (0.1032906302623815 * um_scale)
CaCO3_gam1 = 0
CaCO3_sig1 = 0.82427830
-CaCO3_frq2 = 1/(10.954451150103322*um_scale)
+CaCO3_frq2 = 1 / (10.954451150103322 * um_scale)
CaCO3_gam2 = 0
CaCO3_sig2 = 0.14429128
-CaCO3_susc_e = [mp.LorentzianSusceptibility(frequency=CaCO3_frq1, gamma=CaCO3_gam1, sigma_diag=CaCO3_sig1*mp.Vector3(0,0,1)),
- mp.LorentzianSusceptibility(frequency=CaCO3_frq2, gamma=CaCO3_gam2, sigma_diag=CaCO3_sig2*mp.Vector3(0,0,1))]
-
-CaCO3 = mp.Medium(epsilon_diag=mp.Vector3(1.73358749,1.73358749,1.35859695), E_susceptibilities=CaCO3_susc_o+CaCO3_susc_e, valid_freq_range=CaCO3_range)
-
-#------------------------------------------------------------------
+CaCO3_susc_e = [
+ mp.LorentzianSusceptibility(
+ frequency=CaCO3_frq1,
+ gamma=CaCO3_gam1,
+ sigma_diag=CaCO3_sig1 * mp.Vector3(0, 0, 1),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=CaCO3_frq2,
+ gamma=CaCO3_gam2,
+ sigma_diag=CaCO3_sig2 * mp.Vector3(0, 0, 1),
+ ),
+]
+
+CaCO3 = mp.Medium(
+ epsilon_diag=mp.Vector3(1.73358749, 1.73358749, 1.35859695),
+ E_susceptibilities=CaCO3_susc_o + CaCO3_susc_e,
+ valid_freq_range=CaCO3_range,
+)
+
+# ------------------------------------------------------------------
# silicon dioxide (SiO2) from G. Ghosh, Optics Communication, Vol. 163, pp. 95-102 (1999)
# ref: https://refractiveindex.info/?shelf=main&book=SiO2&page=Ghosh-o
# ref: https://refractiveindex.info/?shelf=main&book=SiO2&page=Ghosh-e
@@ -1135,31 +1415,47 @@
## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z
-SiO2_range = mp.FreqRange(min=um_scale/2.0531, max=um_scale/0.198)
+SiO2_range = mp.FreqRange(min=um_scale / 2.0531, max=um_scale / 0.198)
-SiO2_frq1 = 1/(0.10029257051247614*um_scale)
+SiO2_frq1 = 1 / (0.10029257051247614 * um_scale)
SiO2_gam1 = 0
SiO2_sig1 = 1.07044083
-SiO2_frq2 = 1/(10*um_scale)
+SiO2_frq2 = 1 / (10 * um_scale)
SiO2_gam2 = 0
SiO2_sig2 = 1.10202242
-SiO2_susc_o = [mp.LorentzianSusceptibility(frequency=SiO2_frq1, gamma=SiO2_gam1, sigma_diag=SiO2_sig1*mp.Vector3(1,1,0)),
- mp.LorentzianSusceptibility(frequency=SiO2_frq2, gamma=SiO2_gam2, sigma_diag=SiO2_sig2*mp.Vector3(1,1,0))]
+SiO2_susc_o = [
+ mp.LorentzianSusceptibility(
+ frequency=SiO2_frq1, gamma=SiO2_gam1, sigma_diag=SiO2_sig1 * mp.Vector3(1, 1, 0)
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=SiO2_frq2, gamma=SiO2_gam2, sigma_diag=SiO2_sig2 * mp.Vector3(1, 1, 0)
+ ),
+]
-SiO2_frq1 = 1/(0.10104546699382412*um_scale)
+SiO2_frq1 = 1 / (0.10104546699382412 * um_scale)
SiO2_gam1 = 0
SiO2_sig1 = 1.09509924
-SiO2_frq2 = 1/(10*um_scale)
+SiO2_frq2 = 1 / (10 * um_scale)
SiO2_gam2 = 0
SiO2_sig2 = 1.15662475
-SiO2_susc_e = [mp.LorentzianSusceptibility(frequency=SiO2_frq1, gamma=SiO2_gam1, sigma_diag=SiO2_sig1*mp.Vector3(0,0,1)),
- mp.LorentzianSusceptibility(frequency=SiO2_frq2, gamma=SiO2_gam2, sigma_diag=SiO2_sig2*mp.Vector3(0,0,1))]
-
-SiO2_aniso = mp.Medium(epsilon_diag=mp.Vector3(1.28604141,1.28604141,1.28851804), E_susceptibilities=SiO2_susc_o+SiO2_susc_e, valid_freq_range=SiO2_range)
-
-#------------------------------------------------------------------
+SiO2_susc_e = [
+ mp.LorentzianSusceptibility(
+ frequency=SiO2_frq1, gamma=SiO2_gam1, sigma_diag=SiO2_sig1 * mp.Vector3(0, 0, 1)
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=SiO2_frq2, gamma=SiO2_gam2, sigma_diag=SiO2_sig2 * mp.Vector3(0, 0, 1)
+ ),
+]
+
+SiO2_aniso = mp.Medium(
+ epsilon_diag=mp.Vector3(1.28604141, 1.28604141, 1.28851804),
+ E_susceptibilities=SiO2_susc_o + SiO2_susc_e,
+ valid_freq_range=SiO2_range,
+)
+
+# ------------------------------------------------------------------
# gallium nitride (GaN), alpha phase (wurtzite), from A.S. Barker Jr. and M. Ilegems, Physical Review B, Vol. 7, pp. 743-50 (1973)
# ref: https://refractiveindex.info/?shelf=main&book=GaN&page=Barker-o
# ref: https://refractiveindex.info/?shelf=main&book=GaN&page=Barker-e
@@ -1167,27 +1463,41 @@
## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z
-GaN_range = mp.FreqRange(min=um_scale/10.0, max=um_scale/0.35)
+GaN_range = mp.FreqRange(min=um_scale / 10.0, max=um_scale / 0.35)
-GaN_frq1 = 1/(0.256*um_scale)
+GaN_frq1 = 1 / (0.256 * um_scale)
GaN_gam1 = 0
GaN_sig1 = 1.75
-GaN_frq2 = 1/(17.86*um_scale)
+GaN_frq2 = 1 / (17.86 * um_scale)
GaN_gam2 = 0
GaN_sig2 = 4.1
-GaN_susc_o = [mp.LorentzianSusceptibility(frequency=GaN_frq1, gamma=GaN_gam1, sigma_diag=GaN_sig1*mp.Vector3(1,1,0)),
- mp.LorentzianSusceptibility(frequency=GaN_frq2, gamma=GaN_gam2, sigma_diag=GaN_sig2*mp.Vector3(1,1,0))]
+GaN_susc_o = [
+ mp.LorentzianSusceptibility(
+ frequency=GaN_frq1, gamma=GaN_gam1, sigma_diag=GaN_sig1 * mp.Vector3(1, 1, 0)
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=GaN_frq2, gamma=GaN_gam2, sigma_diag=GaN_sig2 * mp.Vector3(1, 1, 0)
+ ),
+]
-GaN_frq1 = 1/(18.76*um_scale)
+GaN_frq1 = 1 / (18.76 * um_scale)
GaN_gam1 = 0
GaN_sig1 = 5.08
-GaN_susc_e = [mp.LorentzianSusceptibility(frequency=GaN_frq1, gamma=GaN_gam1, sigma_diag=GaN_sig1*mp.Vector3(0,0,1))]
+GaN_susc_e = [
+ mp.LorentzianSusceptibility(
+ frequency=GaN_frq1, gamma=GaN_gam1, sigma_diag=GaN_sig1 * mp.Vector3(0, 0, 1)
+ )
+]
-GaN = mp.Medium(epsilon_diag=mp.Vector3(3.6,3.6,5.35), E_susceptibilities=GaN_susc_o+GaN_susc_e, valid_freq_range=GaN_range)
+GaN = mp.Medium(
+ epsilon_diag=mp.Vector3(3.6, 3.6, 5.35),
+ E_susceptibilities=GaN_susc_o + GaN_susc_e,
+ valid_freq_range=GaN_range,
+)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# aluminum nitride (AlN) from J. Pastrnak and L. Roskovcova, Physica Status Solidi, Vol. 14, K5-8 (1966)
# ref: https://refractiveindex.info/?shelf=main&book=AlN&page=Pastrnak-o
# ref: https://refractiveindex.info/?shelf=main&book=AlN&page=Pastrnak-e
@@ -1195,31 +1505,47 @@
## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z
-AlN_range = mp.FreqRange(min=um_scale/5.0, max=um_scale/0.22)
+AlN_range = mp.FreqRange(min=um_scale / 5.0, max=um_scale / 0.22)
-AlN_frq1 = 1/(0.1715*um_scale)
+AlN_frq1 = 1 / (0.1715 * um_scale)
AlN_gam1 = 0
AlN_sig1 = 1.3786
-AlN_frq2 = 1/(15.03*um_scale)
+AlN_frq2 = 1 / (15.03 * um_scale)
AlN_gam2 = 0
AlN_sig2 = 3.861
-AlN_susc_o = [mp.LorentzianSusceptibility(frequency=AlN_frq1, gamma=AlN_gam1, sigma_diag=AlN_sig1*mp.Vector3(1,1,0)),
- mp.LorentzianSusceptibility(frequency=AlN_frq2, gamma=AlN_gam2, sigma_diag=AlN_sig2*mp.Vector3(1,1,0))]
+AlN_susc_o = [
+ mp.LorentzianSusceptibility(
+ frequency=AlN_frq1, gamma=AlN_gam1, sigma_diag=AlN_sig1 * mp.Vector3(1, 1, 0)
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=AlN_frq2, gamma=AlN_gam2, sigma_diag=AlN_sig2 * mp.Vector3(1, 1, 0)
+ ),
+]
-AlN_frq1 = 1/(0.1746*um_scale)
+AlN_frq1 = 1 / (0.1746 * um_scale)
AlN_gam1 = 0
AlN_sig1 = 1.6173
-AlN_frq2 = 1/(15.03*um_scale)
+AlN_frq2 = 1 / (15.03 * um_scale)
AlN_gam2 = 0
AlN_sig2 = 4.139
-AlN_susc_e = [mp.LorentzianSusceptibility(frequency=AlN_frq1, gamma=AlN_gam1, sigma_diag=AlN_sig1*mp.Vector3(0,0,1)),
- mp.LorentzianSusceptibility(frequency=AlN_frq2, gamma=AlN_gam2, sigma_diag=AlN_sig2*mp.Vector3(0,0,1))]
-
-AlN_aniso = mp.Medium(epsilon_diag=mp.Vector3(3.1399,3.1399,3.0729), E_susceptibilities=AlN_susc_o+AlN_susc_e, valid_freq_range=AlN_range)
-
-#------------------------------------------------------------------
+AlN_susc_e = [
+ mp.LorentzianSusceptibility(
+ frequency=AlN_frq1, gamma=AlN_gam1, sigma_diag=AlN_sig1 * mp.Vector3(0, 0, 1)
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=AlN_frq2, gamma=AlN_gam2, sigma_diag=AlN_sig2 * mp.Vector3(0, 0, 1)
+ ),
+]
+
+AlN_aniso = mp.Medium(
+ epsilon_diag=mp.Vector3(3.1399, 3.1399, 3.0729),
+ E_susceptibilities=AlN_susc_o + AlN_susc_e,
+ valid_freq_range=AlN_range,
+)
+
+# ------------------------------------------------------------------
# alumina/sapphire (Al2O3) from I.H. Malitson and M.J. Dodge, J. Optical Society of America, Vol. 62, pp. 1405 (1972)
# ref: https://refractiveindex.info/?shelf=main&book=Al2O3&page=Malitson-o
# ref: https://refractiveindex.info/?shelf=main&book=Al2O3&page=Malitson-e
@@ -1227,87 +1553,127 @@
## NOTE: ordinary (o) axes in X and Y, extraordinary (e) axis in Z
-Al2O3_range = mp.FreqRange(min=um_scale/5.0, max=um_scale/0.2)
+Al2O3_range = mp.FreqRange(min=um_scale / 5.0, max=um_scale / 0.2)
-Al2O3_frq1 = 1/(0.0726631*um_scale)
+Al2O3_frq1 = 1 / (0.0726631 * um_scale)
Al2O3_gam1 = 0
Al2O3_sig1 = 1.4313493
-Al2O3_frq2 = 1/(0.1193242*um_scale)
+Al2O3_frq2 = 1 / (0.1193242 * um_scale)
Al2O3_gam2 = 0
Al2O3_sig2 = 0.65054713
-Al2O3_frq3 = 1/(18.02825*um_scale)
+Al2O3_frq3 = 1 / (18.02825 * um_scale)
Al2O3_gam3 = 0
Al2O3_sig3 = 5.3414021
-Al2O3_susc_o = [mp.LorentzianSusceptibility(frequency=Al2O3_frq1, gamma=Al2O3_gam1, sigma_diag=Al2O3_sig1*mp.Vector3(1,1,0)),
- mp.LorentzianSusceptibility(frequency=Al2O3_frq2, gamma=Al2O3_gam2, sigma_diag=Al2O3_sig2*mp.Vector3(1,1,0)),
- mp.LorentzianSusceptibility(frequency=Al2O3_frq3, gamma=Al2O3_gam3, sigma_diag=Al2O3_sig3*mp.Vector3(1,1,0))]
-
-Al2O3_frq1 = 1/(0.0740288*um_scale)
+Al2O3_susc_o = [
+ mp.LorentzianSusceptibility(
+ frequency=Al2O3_frq1,
+ gamma=Al2O3_gam1,
+ sigma_diag=Al2O3_sig1 * mp.Vector3(1, 1, 0),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=Al2O3_frq2,
+ gamma=Al2O3_gam2,
+ sigma_diag=Al2O3_sig2 * mp.Vector3(1, 1, 0),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=Al2O3_frq3,
+ gamma=Al2O3_gam3,
+ sigma_diag=Al2O3_sig3 * mp.Vector3(1, 1, 0),
+ ),
+]
+
+Al2O3_frq1 = 1 / (0.0740288 * um_scale)
Al2O3_gam1 = 0
Al2O3_sig1 = 1.5039759
-Al2O3_frq2 = 1/(0.1216529*um_scale)
+Al2O3_frq2 = 1 / (0.1216529 * um_scale)
Al2O3_gam2 = 0
Al2O3_sig2 = 0.55069141
-Al2O3_frq3 = 1/(20.072248*um_scale)
+Al2O3_frq3 = 1 / (20.072248 * um_scale)
Al2O3_gam3 = 0
Al2O3_sig3 = 6.5927379
-Al2O3_susc_e = [mp.LorentzianSusceptibility(frequency=Al2O3_frq1, gamma=Al2O3_gam1, sigma_diag=Al2O3_sig1*mp.Vector3(0,0,1)),
- mp.LorentzianSusceptibility(frequency=Al2O3_frq2, gamma=Al2O3_gam2, sigma_diag=Al2O3_sig2*mp.Vector3(0,0,1)),
- mp.LorentzianSusceptibility(frequency=Al2O3_frq3, gamma=Al2O3_gam3, sigma_diag=Al2O3_sig3*mp.Vector3(0,0,1))]
-
-Al2O3_aniso = mp.Medium(epsilon=1, E_susceptibilities=Al2O3_susc_o+Al2O3_susc_e, valid_freq_range=Al2O3_range)
-
-#------------------------------------------------------------------
+Al2O3_susc_e = [
+ mp.LorentzianSusceptibility(
+ frequency=Al2O3_frq1,
+ gamma=Al2O3_gam1,
+ sigma_diag=Al2O3_sig1 * mp.Vector3(0, 0, 1),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=Al2O3_frq2,
+ gamma=Al2O3_gam2,
+ sigma_diag=Al2O3_sig2 * mp.Vector3(0, 0, 1),
+ ),
+ mp.LorentzianSusceptibility(
+ frequency=Al2O3_frq3,
+ gamma=Al2O3_gam3,
+ sigma_diag=Al2O3_sig3 * mp.Vector3(0, 0, 1),
+ ),
+]
+
+Al2O3_aniso = mp.Medium(
+ epsilon=1,
+ E_susceptibilities=Al2O3_susc_o + Al2O3_susc_e,
+ valid_freq_range=Al2O3_range,
+)
+
+# ------------------------------------------------------------------
# yttrium oxide (Y2O3) from Y. Nigara, Japanese J. of Applied Physics, Vol. 7, pp. 404-8 (1968)
# ref: https://refractiveindex.info/?shelf=main&book=Y2O3&page=Nigara
# wavelength range: 0.25 - 9.6 μm
-Y2O3_range = mp.FreqRange(min=um_scale/9.6, max=um_scale/0.25)
+Y2O3_range = mp.FreqRange(min=um_scale / 9.6, max=um_scale / 0.25)
-Y2O3_frq1 = 1/(0.1387*um_scale)
+Y2O3_frq1 = 1 / (0.1387 * um_scale)
Y2O3_gam1 = 0
Y2O3_sig1 = 2.578
-Y2O3_frq2 = 1/(22.936*um_scale)
+Y2O3_frq2 = 1 / (22.936 * um_scale)
Y2O3_gam2 = 0
Y2O3_sig2 = 3.935
-Y2O3_susc = [mp.LorentzianSusceptibility(frequency=Y2O3_frq1, gamma=Y2O3_gam1, sigma=Y2O3_sig1),
- mp.LorentzianSusceptibility(frequency=Y2O3_frq2, gamma=Y2O3_gam2, sigma=Y2O3_sig2)]
+Y2O3_susc = [
+ mp.LorentzianSusceptibility(frequency=Y2O3_frq1, gamma=Y2O3_gam1, sigma=Y2O3_sig1),
+ mp.LorentzianSusceptibility(frequency=Y2O3_frq2, gamma=Y2O3_gam2, sigma=Y2O3_sig2),
+]
Y2O3 = mp.Medium(epsilon=1.0, E_susceptibilities=Y2O3_susc, valid_freq_range=Y2O3_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# undoped yttrium aluminum garnet (YAG) from D.E. Zelmon et al., Applied Optics, Vol. 37, 4933-5 (1998)
# ref: https://refractiveindex.info/?shelf=main&book=Y3Al5O12&page=Zelmon
# wavelength range: 0.4 - 5.0 μm
-YAG_range = mp.FreqRange(min=um_scale/5.0, max=um_scale/0.4)
+YAG_range = mp.FreqRange(min=um_scale / 5.0, max=um_scale / 0.4)
-YAG_frq1 = 1/(0.1088577052853862*um_scale)
+YAG_frq1 = 1 / (0.1088577052853862 * um_scale)
YAG_gam1 = 0
YAG_sig1 = 2.28200
-YAG_frq2 = 1/(16.814695953242804*um_scale)
+YAG_frq2 = 1 / (16.814695953242804 * um_scale)
YAG_gam2 = 0
YAG_sig2 = 3.27644
-YAG_susc = [mp.LorentzianSusceptibility(frequency=YAG_frq1, gamma=YAG_gam1, sigma=YAG_sig1),
- mp.LorentzianSusceptibility(frequency=YAG_frq2, gamma=YAG_gam2, sigma=YAG_sig2)]
+YAG_susc = [
+ mp.LorentzianSusceptibility(frequency=YAG_frq1, gamma=YAG_gam1, sigma=YAG_sig1),
+ mp.LorentzianSusceptibility(frequency=YAG_frq2, gamma=YAG_gam2, sigma=YAG_sig2),
+]
YAG = mp.Medium(epsilon=1.0, E_susceptibilities=YAG_susc, valid_freq_range=YAG_range)
-#------------------------------------------------------------------
+# ------------------------------------------------------------------
# cadmium telluride (CdTe) from D.T.F. Marple, J. Applied Physics, Vol. 35, pp. 539-42 (1964)
# ref: https://refractiveindex.info/?shelf=main&book=CdTe&page=Marple
# wavelength range: 0.86 - 2.5 μm
-CdTe_range = mp.FreqRange(min=um_scale/2.5, max=um_scale/0.86)
+CdTe_range = mp.FreqRange(min=um_scale / 2.5, max=um_scale / 0.86)
-CdTe_frq1 = 1/(0.6049793384901669*um_scale)
+CdTe_frq1 = 1 / (0.6049793384901669 * um_scale)
CdTe_gam1 = 0
CdTe_sig1 = 1.53
-CdTe_susc = [mp.LorentzianSusceptibility(frequency=CdTe_frq1, gamma=CdTe_gam1, sigma=CdTe_sig1)]
+CdTe_susc = [
+ mp.LorentzianSusceptibility(frequency=CdTe_frq1, gamma=CdTe_gam1, sigma=CdTe_sig1)
+]
-CdTe = mp.Medium(epsilon=5.68, E_susceptibilities=CdTe_susc, valid_freq_range=CdTe_range)
+CdTe = mp.Medium(
+ epsilon=5.68, E_susceptibilities=CdTe_susc, valid_freq_range=CdTe_range
+)
diff --git a/python/mpb_data.py b/python/mpb_data.py
index 01337de41..2b7d987ee 100644
--- a/python/mpb_data.py
+++ b/python/mpb_data.py
@@ -10,19 +10,21 @@ class MPBData(object):
TWOPI = 6.2831853071795864769252867665590057683943388
- def __init__(self,
- lattice=None,
- kpoint=None,
- rectify=False,
- x=0,
- y=0,
- z=0,
- periods=0,
- resolution=0,
- phase_angle=0,
- pick_nearest=False,
- ve=None,
- verbose=False):
+ def __init__(
+ self,
+ lattice=None,
+ kpoint=None,
+ rectify=False,
+ x=0,
+ y=0,
+ z=0,
+ periods=0,
+ resolution=0,
+ phase_angle=0,
+ pick_nearest=False,
+ ve=None,
+ verbose=False,
+ ):
self.lattice = lattice
self.kpoint = kpoint
@@ -48,8 +50,10 @@ def __init__(self,
self.verbose = verbose
self.scaleby = complex(1, 0)
- self.phase = complex(math.cos(self.TWOPI * self.phase_angle / 360.0),
- math.sin(self.TWOPI * self.phase_angle / 360.0))
+ self.phase = complex(
+ math.cos(self.TWOPI * self.phase_angle / 360.0),
+ math.sin(self.TWOPI * self.phase_angle / 360.0),
+ )
self.scaleby *= self.phase
def handle_dataset(self, in_arr):
@@ -97,12 +101,24 @@ def handle_dataset(self, in_arr):
out_arr_im = np.array([])
flat_in_arr_re = in_arr_re.ravel()
- flat_in_arr_im = in_arr_im.ravel() if isinstance(in_arr_im, np.ndarray) else np.array([])
+ flat_in_arr_im = (
+ in_arr_im.ravel() if isinstance(in_arr_im, np.ndarray) else np.array([])
+ )
kvector = [self.kpoint.x, self.kpoint.y, self.kpoint.z] if self.kpoint else []
- map_data(flat_in_arr_re, flat_in_arr_im, np.array(in_dims, dtype=np.intc),
- out_arr_re, out_arr_im, np.array(out_dims, dtype=np.intc), self.coord_map,
- kvector, self.pick_nearest, self.verbose, False)
+ map_data(
+ flat_in_arr_re,
+ flat_in_arr_im,
+ np.array(in_dims, dtype=np.intc),
+ out_arr_re,
+ out_arr_im,
+ np.array(out_dims, dtype=np.intc),
+ self.coord_map,
+ kvector,
+ self.pick_nearest,
+ self.verbose,
+ False,
+ )
if np.iscomplexobj(in_arr):
# multiply * scaleby for complex data
@@ -137,9 +153,15 @@ def handle_cvector_dataset(self, in_arr, multiply_bloch_phase):
fmt1 = "Rotating vectors by matrix [ {:.10g}, {:.10g}, {:.10g}"
fmt2 = " {:.10g}, {:.10g}, {:.10g}"
fmt3 = " {:.10g}, {:.10g}, {:.10g} ]"
- print(fmt1.format(self.cart_map.c1.x, self.cart_map.c2.x, self.cart_map.c3.x))
- print(fmt2.format(self.cart_map.c1.y, self.cart_map.c2.y, self.cart_map.c3.y))
- print(fmt3.format(self.cart_map.c1.z, self.cart_map.c2.z, self.cart_map.c3.z))
+ print(
+ fmt1.format(self.cart_map.c1.x, self.cart_map.c2.x, self.cart_map.c3.x)
+ )
+ print(
+ fmt2.format(self.cart_map.c1.y, self.cart_map.c2.y, self.cart_map.c3.y)
+ )
+ print(
+ fmt3.format(self.cart_map.c1.z, self.cart_map.c2.z, self.cart_map.c3.z)
+ )
N = in_dims[0] * in_dims[1]
for ri in range(2):
@@ -177,9 +199,19 @@ def handle_cvector_dataset(self, in_arr, multiply_bloch_phase):
out_arr_re = np.zeros(int(N))
out_arr_im = np.zeros(int(N))
- map_data(d_in[dim][0].ravel(), d_in[dim][1].ravel(), np.array(in_dims, dtype=np.intc),
- out_arr_re, out_arr_im, np.array(out_dims, dtype=np.intc), self.coord_map,
- kvector, self.pick_nearest, self.verbose, multiply_bloch_phase)
+ map_data(
+ d_in[dim][0].ravel(),
+ d_in[dim][1].ravel(),
+ np.array(in_dims, dtype=np.intc),
+ out_arr_re,
+ out_arr_im,
+ np.array(out_dims, dtype=np.intc),
+ self.coord_map,
+ kvector,
+ self.pick_nearest,
+ self.verbose,
+ multiply_bloch_phase,
+ )
# multiply * scaleby
complex_out = np.vectorize(complex)(out_arr_re, out_arr_im)
@@ -196,15 +228,13 @@ def handle_cvector_dataset(self, in_arr, multiply_bloch_phase):
def init_output_lattice(self):
cart_map = mp.Matrix(
- mp.Vector3(1, 0, 0),
- mp.Vector3(0, 1, 0),
- mp.Vector3(0, 0, 1)
+ mp.Vector3(1, 0, 0), mp.Vector3(0, 1, 0), mp.Vector3(0, 0, 1)
)
Rin = mp.Matrix(
mp.Vector3(*self.lattice[0]),
mp.Vector3(*self.lattice[1]),
- mp.Vector3(*self.lattice[2])
+ mp.Vector3(*self.lattice[2]),
)
if self.verbose:
@@ -213,9 +243,19 @@ def init_output_lattice(self):
fmt = "Read Bloch wavevector ({:.6g}, {:.6g}, {:.6g})"
print(fmt.format(self.kpoint.x, self.kpoint.y, self.kpoint.z))
fmt = "Input lattice = ({:.6g}, {:.6g}, {:.6g}), ({:.6g}, {:.6g}, {:.6g}), ({:.6g}, {:.6g}, {:.6g})"
- print(fmt.format(Rin.c1.x, Rin.c1.y, Rin.c1.z,
- Rin.c2.x, Rin.c2.y, Rin.c2.z,
- Rin.c3.x, Rin.c3.y, Rin.c3.z))
+ print(
+ fmt.format(
+ Rin.c1.x,
+ Rin.c1.y,
+ Rin.c1.z,
+ Rin.c2.x,
+ Rin.c2.y,
+ Rin.c2.z,
+ Rin.c3.x,
+ Rin.c3.y,
+ Rin.c3.z,
+ )
+ )
Rout = mp.Matrix(Rin.c1, Rin.c2, Rin.c3)
@@ -239,8 +279,9 @@ def init_output_lattice(self):
# Now, orthogonalize c2 and c3
Rout.c2 = Rout.c2 - ve.scale(ve.dot(Rout.c2))
Rout.c3 = Rout.c3 - ve.scale(ve.dot(Rout.c3))
- Rout.c3 = Rout.c3 - Rout.c2.scale(Rout.c2.dot(Rout.c3) /
- Rout.c2.dot(Rout.c2))
+ Rout.c3 = Rout.c3 - Rout.c2.scale(
+ Rout.c2.dot(Rout.c3) / Rout.c2.dot(Rout.c2)
+ )
cart_map.c1 = Rout.c1.unit()
cart_map.c2 = Rout.c2.unit()
@@ -253,9 +294,19 @@ def init_output_lattice(self):
if self.verbose:
fmt = "Output lattice = ({:.6g}, {:.6g}, {:.6g}), ({:.6g}, {:.6g}, {:.6g}), ({:.6g}, {:.6g}, {:.6g})"
- print(fmt.format(Rout.c1.x, Rout.c1.y, Rout.c1.z,
- Rout.c2.x, Rout.c2.y, Rout.c2.z,
- Rout.c3.x, Rout.c3.y, Rout.c3.z))
+ print(
+ fmt.format(
+ Rout.c1.x,
+ Rout.c1.y,
+ Rout.c1.z,
+ Rout.c2.x,
+ Rout.c2.y,
+ Rout.c2.z,
+ Rout.c3.x,
+ Rout.c3.y,
+ Rout.c3.z,
+ )
+ )
self.coord_map = Rin.inverse() * Rout
self.Rout = Rout
@@ -267,11 +318,13 @@ def convert(self, arr, kpoint=None):
self.kpoint = arr.kpoint
if self.lattice is None:
- err = ("Couldn't find 'lattice.' You must do one of the following:\n" +
- " 1. Pass the ModeSolver lattice to the MPBData constructor\n" +
- " i.e., MPBData(lattice=ms.get_lattice())\n" +
- " 2. Create an MPBArray to pass to MPBData.convert()\n" +
- " i.e., mpb_arr = MPBArray(arr, ms.get_lattice(), ... ); mpb_data.convert(mpb_arr))")
+ err = (
+ "Couldn't find 'lattice.' You must do one of the following:\n"
+ + " 1. Pass the ModeSolver lattice to the MPBData constructor\n"
+ + " i.e., MPBData(lattice=ms.get_lattice())\n"
+ + " 2. Create an MPBArray to pass to MPBData.convert()\n"
+ + " i.e., mpb_arr = MPBArray(arr, ms.get_lattice(), ... ); mpb_data.convert(mpb_arr))"
+ )
raise ValueError(err)
if kpoint:
diff --git a/python/simulation.py b/python/simulation.py
index 43c7b3c69..ee3162745 100644
--- a/python/simulation.py
+++ b/python/simulation.py
@@ -22,7 +22,13 @@
import meep as mp
from meep.geom import Vector3, init_do_averaging, GeometricObject, Medium
-from meep.source import Source, EigenModeSource, GaussianBeamSource, IndexedSource, check_positive
+from meep.source import (
+ Source,
+ EigenModeSource,
+ GaussianBeamSource,
+ IndexedSource,
+ check_positive,
+)
import meep.visualization as vis
from meep.verbosity_mgr import Verbosity
@@ -34,11 +40,12 @@
try:
from ipywidgets import FloatProgress
from IPython.display import display
+
do_progress = True
except ImportError:
do_progress = False
-verbosity = Verbosity(mp.cvar, 'meep', 1)
+verbosity = Verbosity(mp.cvar, "meep", 1)
mp.setup()
@@ -48,23 +55,38 @@
mp.set_ctl_printf_callback(mp.py_master_printf_wrap)
mp.set_mpb_printf_callback(mp.py_master_printf_wrap)
-EigCoeffsResult = namedtuple('EigCoeffsResult', ['alpha', 'vgrp', 'kpoints', 'kdom', 'cscale'])
-FluxData = namedtuple('FluxData', ['E', 'H'])
-ForceData = namedtuple('ForceData', ['offdiag1', 'offdiag2', 'diag'])
-NearToFarData = namedtuple('NearToFarData', ['F'])
+EigCoeffsResult = namedtuple(
+ "EigCoeffsResult", ["alpha", "vgrp", "kpoints", "kdom", "cscale"]
+)
+FluxData = namedtuple("FluxData", ["E", "H"])
+ForceData = namedtuple("ForceData", ["offdiag1", "offdiag2", "diag"])
+NearToFarData = namedtuple("NearToFarData", ["F"])
+
def fix_dft_args(args, i):
- if len(args) > i+2 and isinstance(args[i],(int,float)) and isinstance(args[i+1],(int,float)) and isinstance(args[i+2],int):
+ if (
+ len(args) > i + 2
+ and isinstance(args[i], (int, float))
+ and isinstance(args[i + 1], (int, float))
+ and isinstance(args[i + 2], int)
+ ):
fcen = args[i]
- df = args[i+1]
- nfreq = args[i+2]
- freq = [fcen] if nfreq == 1 else np.linspace(fcen-0.5*df,fcen+0.5*df,nfreq)
- return args[:i] + (freq,) + args[i+3:]
+ df = args[i + 1]
+ nfreq = args[i + 2]
+ freq = (
+ [fcen]
+ if nfreq == 1
+ else np.linspace(fcen - 0.5 * df, fcen + 0.5 * df, nfreq)
+ )
+ return args[:i] + (freq,) + args[i + 3 :]
elif not isinstance(args[i], (np.ndarray, list)):
- raise TypeError("add_dft functions only accept fcen,df,nfreq (3 numbers) or freq (array/list)")
+ raise TypeError(
+ "add_dft functions only accept fcen,df,nfreq (3 numbers) or freq (array/list)"
+ )
else:
return args
+
def get_num_args(func):
return 2 if isinstance(func, Harminv) else func.__code__.co_argcount
@@ -94,14 +116,15 @@ def py_v3_to_vec(dims, iterable, is_cylindrical=False):
if is_cylindrical:
return mp.veccyl(v3.x, v3.z)
v = mp.vec(v3.x, v3.y)
- v.set_direction(mp.Z, v3.z) # for special_kz handling
+ v.set_direction(mp.Z, v3.z) # for special_kz handling
return v
elif dims == 3:
return mp.vec(v3.x, v3.y, v3.z)
else:
raise ValueError(f"Invalid dimensions in Volume: {dims}")
-def bands_to_diffractedplanewave(where,bands):
+
+def bands_to_diffractedplanewave(where, bands):
if bands.axis is None:
if where.in_direction(mp.X) != 0:
axis = np.array([1, 0, 0], dtype=np.float64)
@@ -110,8 +133,10 @@ def bands_to_diffractedplanewave(where,bands):
elif where.in_direction(mp.Z) != 0:
axis = np.array([0, 0, 1], dtype=np.float64)
else:
- raise ValueError("axis parameter of DiffractedPlanewave must be a non-zero Vector3")
- elif isinstance(bands.axis,mp.Vector3):
+ raise ValueError(
+ "axis parameter of DiffractedPlanewave must be a non-zero Vector3"
+ )
+ elif isinstance(bands.axis, mp.Vector3):
axis = np.array([bands.axis.x, bands.axis.y, bands.axis.z], dtype=np.float64)
else:
raise TypeError("axis parameter of DiffractedPlanewave must be a Vector3")
@@ -119,19 +144,17 @@ def bands_to_diffractedplanewave(where,bands):
np.array(bands.g, dtype=np.intc),
axis,
bands.s * 1.0,
- bands.p * 1.0
+ bands.p * 1.0,
]
return mp.diffractedplanewave(*diffractedplanewave_args)
+
class DiffractedPlanewave(object):
"""
For mode decomposition or eigenmode source, specify a diffracted planewave in homogeneous media. Should be passed as the `bands` argument of `get_eigenmode_coefficients`, `band_num` of `get_eigenmode`, or `eig_band` of `EigenModeSource`.
"""
- def __init__(self,
- g=None,
- axis=None,
- s=None,
- p=None):
+
+ def __init__(self, g=None, axis=None, s=None, p=None):
"""
Construct a `DiffractedPlanewave`.
@@ -164,9 +187,11 @@ def s(self):
def p(self):
return self._p
+
DefaultPMLProfile = lambda u: u * u
Vector3Type = Union[Vector3, Tuple[float, ...]]
+
class PML(object):
"""
This class is used for specifying the PML absorbing boundary layers around the cell,
@@ -177,12 +202,16 @@ class PML(object):
sets up one or more PML layers around the boundaries according to the following
properties.
"""
- def __init__(self, thickness,
- direction=mp.ALL,
- side=mp.ALL,
- R_asymptotic=1e-15,
- mean_stretch=1.0,
- pml_profile=DefaultPMLProfile):
+
+ def __init__(
+ self,
+ thickness,
+ direction=mp.ALL,
+ side=mp.ALL,
+ R_asymptotic=1e-15,
+ mean_stretch=1.0,
+ pml_profile=DefaultPMLProfile,
+ ):
"""
+ **`thickness` [`number`]** — The spatial thickness of the PML layer which
extends from the boundary towards the *inside* of the cell. The thinner it is,
@@ -233,7 +262,9 @@ def __init__(self, thickness,
elif direction == mp.ALL:
self.swigobj = mp.pml(thickness, side, R_asymptotic, mean_stretch)
else:
- self.swigobj = mp.pml(thickness, direction, side, R_asymptotic, mean_stretch)
+ self.swigobj = mp.pml(
+ thickness, direction, side, R_asymptotic, mean_stretch
+ )
@property
def R_asymptotic(self):
@@ -241,7 +272,7 @@ def R_asymptotic(self):
@R_asymptotic.setter
def R_asymptotic(self, val):
- self._R_asymptotic = check_positive('PML.R_asymptotic', val)
+ self._R_asymptotic = check_positive("PML.R_asymptotic", val)
@property
def mean_stretch(self):
@@ -284,7 +315,6 @@ class Absorber(PML):
"""
-
class Symmetry(object):
"""
This class is used for the `symmetries` input variable to specify symmetries which
@@ -306,6 +336,7 @@ class Symmetry(object):
**`Rotate4`** — A 90° (fourfold) rotational symmetry (a.k.a. $C_4$). `direction` is
the axis of the rotation.
"""
+
def __init__(self, direction, phase=1):
"""
Construct a `Symmetry`.
@@ -346,8 +377,7 @@ class Mirror(Symmetry):
class Identity(Symmetry):
- """
- """
+ """ """
class Volume(object):
@@ -362,7 +392,14 @@ class Volume(object):
`size` will automatically be computed from this list.
"""
- def __init__(self, center=Vector3(), size=Vector3(), dims=2, is_cylindrical=False, vertices=[]):
+ def __init__(
+ self,
+ center=Vector3(),
+ size=Vector3(),
+ dims=2,
+ is_cylindrical=False,
+ vertices=[],
+ ):
"""
Construct a Volume.
"""
@@ -371,16 +408,16 @@ def __init__(self, center=Vector3(), size=Vector3(), dims=2, is_cylindrical=Fals
self.size = Vector3(*size)
else:
vertices = np.array([np.array(i) for i in vertices])
- self.center = Vector3(*np.mean(vertices,axis=0))
- x_list = np.unique(vertices[:,0])
- y_list = np.unique(vertices[:,1])
- z_list = np.unique(vertices[:,2])
+ self.center = Vector3(*np.mean(vertices, axis=0))
+ x_list = np.unique(vertices[:, 0])
+ y_list = np.unique(vertices[:, 1])
+ z_list = np.unique(vertices[:, 2])
x_size = 0 if x_list.size == 1 else np.abs(np.diff(x_list)[0])
y_size = 0 if y_list.size == 1 else np.abs(np.diff(y_list)[0])
z_size = 0 if z_list.size == 1 else np.abs(np.diff(z_list)[0])
- self.size = Vector3(x_size,y_size,z_size)
+ self.size = Vector3(x_size, y_size, z_size)
self.dims = dims
@@ -393,43 +430,62 @@ def __init__(self, center=Vector3(), size=Vector3(), dims=2, is_cylindrical=Fals
self.swigobj = mp.volume(vec1, vec2)
def get_vertices(self):
- xmin = self.center.x - self.size.x/2
- xmax = self.center.x + self.size.x/2
- ymin = self.center.y - self.size.y/2
- ymax = self.center.y + self.size.y/2
- zmin = self.center.z - self.size.z/2
- zmax = self.center.z + self.size.z/2
+ xmin = self.center.x - self.size.x / 2
+ xmax = self.center.x + self.size.x / 2
+ ymin = self.center.y - self.size.y / 2
+ ymax = self.center.y + self.size.y / 2
+ zmin = self.center.z - self.size.z / 2
+ zmax = self.center.z + self.size.z / 2
# Iterate over and remove duplicates for collapsed dimensions (i.e. min=max))
- return [Vector3(x, y, z) for x in list({xmin, xmax}) for y in list({ymin, ymax}) for z in list({zmin, zmax})]
-
+ return [
+ Vector3(x, y, z)
+ for x in list({xmin, xmax})
+ for y in list({ymin, ymax})
+ for z in list({zmin, zmax})
+ ]
def get_edges(self):
vertices = self.get_vertices()
edges = []
# Useful for importing weird geometries and the sizes are slightly off
- def nearly_equal(a,b,sig_fig=10):
- return a==b or (abs(a-b) < 10**(-sig_fig))
+ def nearly_equal(a, b, sig_fig=10):
+ return a == b or (abs(a - b) < 10 ** (-sig_fig))
for iter1 in range(len(vertices)):
- for iter2 in range(iter1+1,len(vertices)):
- if ((iter1 != iter2) and
- nearly_equal((vertices[iter1]-vertices[iter2]).norm(),self.size.x) or
- nearly_equal((vertices[iter1]-vertices[iter2]).norm(),self.size.y) or
- nearly_equal((vertices[iter1]-vertices[iter2]).norm(),self.size.z)):
- edges.append([vertices[iter1],vertices[iter2]])
+ for iter2 in range(iter1 + 1, len(vertices)):
+ if (
+ (iter1 != iter2)
+ and nearly_equal(
+ (vertices[iter1] - vertices[iter2]).norm(), self.size.x
+ )
+ or nearly_equal(
+ (vertices[iter1] - vertices[iter2]).norm(), self.size.y
+ )
+ or nearly_equal(
+ (vertices[iter1] - vertices[iter2]).norm(), self.size.z
+ )
+ ):
+ edges.append([vertices[iter1], vertices[iter2]])
return edges
- def pt_in_volume(self,pt):
- xmin = self.center.x - self.size.x/2
- xmax = self.center.x + self.size.x/2
- ymin = self.center.y - self.size.y/2
- ymax = self.center.y + self.size.y/2
- zmin = self.center.z - self.size.z/2
- zmax = self.center.z + self.size.z/2
-
- return pt.x >= xmin and pt.x <= xmax and pt.y >= ymin and pt.y <= ymax and pt.z >= zmin and pt.z <= zmax
+ def pt_in_volume(self, pt):
+ xmin = self.center.x - self.size.x / 2
+ xmax = self.center.x + self.size.x / 2
+ ymin = self.center.y - self.size.y / 2
+ ymax = self.center.y + self.size.y / 2
+ zmin = self.center.z - self.size.z / 2
+ zmax = self.center.z + self.size.z / 2
+
+ return (
+ pt.x >= xmin
+ and pt.x <= xmax
+ and pt.y >= ymin
+ and pt.y <= ymax
+ and pt.z >= zmin
+ and pt.z <= zmax
+ )
class FluxRegion(object):
@@ -445,7 +501,15 @@ class FluxRegion(object):
example, if you want to compute the outward flux through a box, so that the sides of
the box add instead of subtract.
"""
- def __init__(self, center=None, size=Vector3(), direction=mp.AUTOMATIC, weight=1.0, volume=None):
+
+ def __init__(
+ self,
+ center=None,
+ size=Vector3(),
+ direction=mp.AUTOMATIC,
+ weight=1.0,
+ volume=None,
+ ):
"""
Construct a `FluxRegion` object.
@@ -528,7 +592,6 @@ class EnergyRegion(FluxRegion):
class FieldsRegion(object):
-
def __init__(self, where=None, center=None, size=None):
if where:
self.center = where.center
@@ -563,6 +626,7 @@ class DftObj(object):
`Simulation._evaluate_dft_objects` is called, then we initialize the C++ object through
swigobj_attr and return the property they requested.
"""
+
def __init__(self, func, args):
"""Construct a `DftObj`."""
self.func = func
@@ -576,32 +640,31 @@ def swigobj_attr(self, attr):
@property
def save_hdf5(self):
- return self.swigobj_attr('save_hdf5')
+ return self.swigobj_attr("save_hdf5")
@property
def load_hdf5(self):
- return self.swigobj_attr('load_hdf5')
+ return self.swigobj_attr("load_hdf5")
@property
def scale_dfts(self):
- return self.swigobj_attr('scale_dfts')
+ return self.swigobj_attr("scale_dfts")
@property
def remove(self):
- return self.swigobj_attr('remove')
+ return self.swigobj_attr("remove")
@property
def freq(self):
- return self.swigobj_attr('freq')
+ return self.swigobj_attr("freq")
@property
def where(self):
- return self.swigobj_attr('where')
+ return self.swigobj_attr("where")
class DftFlux(DftObj):
- """
- """
+ """ """
def __init__(self, func, args):
"""Construct a `DftFlux`."""
@@ -612,35 +675,35 @@ def __init__(self, func, args):
@property
def flux(self):
- return self.swigobj_attr('flux')
+ return self.swigobj_attr("flux")
@property
def E(self):
- return self.swigobj_attr('E')
+ return self.swigobj_attr("E")
@property
def H(self):
- return self.swigobj_attr('H')
+ return self.swigobj_attr("H")
@property
def cE(self):
- return self.swigobj_attr('cE')
+ return self.swigobj_attr("cE")
@property
def cH(self):
- return self.swigobj_attr('cH')
+ return self.swigobj_attr("cH")
@property
def normal_direction(self):
- return self.swigobj_attr('normal_direction')
+ return self.swigobj_attr("normal_direction")
@property
def freq(self):
- return self.swigobj_attr('freq')
+ return self.swigobj_attr("freq")
+
class DftForce(DftObj):
- """
- """
+ """ """
def __init__(self, func, args):
"""Construct a `DftForce`."""
@@ -651,27 +714,27 @@ def __init__(self, func, args):
@property
def force(self):
- return self.swigobj_attr('force')
+ return self.swigobj_attr("force")
@property
def offdiag1(self):
- return self.swigobj_attr('offdiag1')
+ return self.swigobj_attr("offdiag1")
@property
def offdiag2(self):
- return self.swigobj_attr('offdiag2')
+ return self.swigobj_attr("offdiag2")
@property
def diag(self):
- return self.swigobj_attr('diag')
+ return self.swigobj_attr("diag")
@property
def freq(self):
- return self.swigobj_attr('freq')
+ return self.swigobj_attr("freq")
+
class DftNear2Far(DftObj):
- """
- """
+ """ """
def __init__(self, func, args):
"""Construct a `DftNear2Far`."""
@@ -683,23 +746,23 @@ def __init__(self, func, args):
@property
def farfield(self):
- return self.swigobj_attr('farfield')
+ return self.swigobj_attr("farfield")
@property
def save_farfields(self):
- return self.swigobj_attr('save_farfields')
+ return self.swigobj_attr("save_farfields")
@property
def F(self):
- return self.swigobj_attr('F')
+ return self.swigobj_attr("F")
@property
def eps(self):
- return self.swigobj_attr('eps')
+ return self.swigobj_attr("eps")
@property
def mu(self):
- return self.swigobj_attr('mu')
+ return self.swigobj_attr("mu")
def flux(self, direction, where, resolution):
"""
@@ -709,15 +772,15 @@ def flux(self, direction, where, resolution):
FDTD solution) and return its Poynting flux in `direction` as a list. The dataset
is a 1d array of `nfreq` dimensions.
"""
- return self.swigobj_attr('flux')(direction, where.swigobj, resolution)
+ return self.swigobj_attr("flux")(direction, where.swigobj, resolution)
@property
def freq(self):
- return self.swigobj_attr('freq')
+ return self.swigobj_attr("freq")
+
class DftEnergy(DftObj):
- """
- """
+ """ """
def __init__(self, func, args):
"""Construct a `DftEnergy`."""
@@ -728,23 +791,23 @@ def __init__(self, func, args):
@property
def electric(self):
- return self.swigobj_attr('electric')
+ return self.swigobj_attr("electric")
@property
def magnetic(self):
- return self.swigobj_attr('magnetic')
+ return self.swigobj_attr("magnetic")
@property
def total(self):
- return self.swigobj_attr('total')
+ return self.swigobj_attr("total")
@property
def freq(self):
- return self.swigobj_attr('freq')
+ return self.swigobj_attr("freq")
+
class DftFields(DftObj):
- """
- """
+ """ """
def __init__(self, func, args):
"""Construct a `DftFields`."""
@@ -755,14 +818,13 @@ def __init__(self, func, args):
@property
def chunks(self):
- return self.swigobj_attr('chunks')
+ return self.swigobj_attr("chunks")
-Mode = namedtuple('Mode', ['freq', 'decay', 'Q', 'amp', 'err'])
+Mode = namedtuple("Mode", ["freq", "decay", "Q", "amp", "err"])
class EigenmodeData(object):
-
def __init__(self, band_num, freq, group_velocity, k, swigobj, kdom):
"""Construct an `EigenmodeData`."""
self.band_num = band_num
@@ -824,6 +886,7 @@ class Harminv(object):
# do something with h.modes
```
"""
+
def __init__(self, c, pt, fcen, df, mxbands=None):
"""
Construct a Harminv object.
@@ -859,7 +922,6 @@ def __call__(self, sim, todo):
self.step_func(sim, todo)
def _collect_harminv(self):
-
def _collect1(c, pt):
self.t0 = 0
@@ -867,13 +929,17 @@ def _collect2(sim):
self.data_dt = sim.meep_time() - self.t0
self.t0 = sim.meep_time()
self.data.append(sim.get_field_point(c, pt))
+
return _collect2
+
return _collect1
def _check_freqs(self, sim):
- source_freqs = [(s.src.frequency, 0 if s.src.width == 0 else 1 / s.src.width)
- for s in sim.sources
- if hasattr(s.src, 'frequency')]
+ source_freqs = [
+ (s.src.frequency, 0 if s.src.width == 0 else 1 / s.src.width)
+ for s in sim.sources
+ if hasattr(s.src, "frequency")
+ ]
harminv_max = self.fcen + 0.5 * self.df
harminv_min = self.fcen - 0.5 * self.df
@@ -889,26 +955,37 @@ def _check_freqs(self, sim):
warnings.warn(warn_fmt.format(harminv_min, sf_min), RuntimeWarning)
def _analyze_harminv(self, sim, maxbands):
- harminv_cols = ['frequency', 'imag. freq.', 'Q', '|amp|', 'amplitude', 'error']
- display_run_data(sim, 'harminv', harminv_cols)
+ harminv_cols = ["frequency", "imag. freq.", "Q", "|amp|", "amplitude", "error"]
+ display_run_data(sim, "harminv", harminv_cols)
self._check_freqs(sim)
dt = self.data_dt if self.data_dt is not None else sim.fields.dt
- bands = mp.py_do_harminv(self.data, dt, self.fcen - self.df / 2, self.fcen + self.df / 2, maxbands,
- self.spectral_density, self.Q_thresh, self.rel_err_thresh, self.err_thresh,
- self.rel_amp_thresh, self.amp_thresh)
+ bands = mp.py_do_harminv(
+ self.data,
+ dt,
+ self.fcen - self.df / 2,
+ self.fcen + self.df / 2,
+ maxbands,
+ self.spectral_density,
+ self.Q_thresh,
+ self.rel_err_thresh,
+ self.err_thresh,
+ self.rel_amp_thresh,
+ self.amp_thresh,
+ )
modes = []
for freq, amp, err in bands:
- Q = freq.real / (-2 * freq.imag) if freq.imag != 0 else float('inf')
+ Q = freq.real / (-2 * freq.imag) if freq.imag != 0 else float("inf")
modes.append(Mode(freq.real, freq.imag, Q, amp, err))
- display_run_data(sim, 'harminv', [freq.real, freq.imag, Q, abs(amp), amp, err])
+ display_run_data(
+ sim, "harminv", [freq.real, freq.imag, Q, abs(amp), amp, err]
+ )
return modes
def _harminv(self):
-
def _harm(sim):
mb = 100 if self.mxbands is None or self.mxbands == 0 else self.mxbands
@@ -924,41 +1001,44 @@ class Simulation(object):
The `Simulation` [class](#classes) contains all the attributes that you can set to
control various parameters of the Meep computation.
"""
- def __init__(self,
- cell_size: Optional[Vector3Type] = None,
- resolution: float = None,
- geometry: Optional[List[GeometricObject]] = None,
- sources: Optional[List[Source]] = None,
- eps_averaging: bool = True,
- dimensions: int = 3,
- boundary_layers: Optional[List[PML]] = None,
- symmetries: Optional[List[Symmetry]] = None,
- force_complex_fields: bool = False,
- default_material: Medium = mp.Medium(),
- m: float = 0,
- k_point: Union[Vector3Type, bool] = False,
- kz_2d: str = "complex",
- extra_materials: Optional[List[Medium]] = None,
- material_function: Optional[Callable[[Vector3Type], Medium]] = None,
- epsilon_func: Optional[Callable[[Vector3Type], float]] = None,
- epsilon_input_file: str = '',
- progress_interval: float = 4,
- subpixel_tol: float = 1e-4,
- subpixel_maxeval: int = 100000,
- loop_tile_base_db: int = 0,
- loop_tile_base_eh: int = 0,
- ensure_periodicity: bool = True,
- num_chunks: int = 0,
- Courant: float = 0.5,
- accurate_fields_near_cylorigin: bool = False,
- filename_prefix: Optional[str] = None,
- output_volume: Optional[Volume] = None,
- output_single_precision: bool = False,
- geometry_center: Vector3Type = Vector3(),
- force_all_components: bool = False,
- split_chunks_evenly: bool = True,
- chunk_layout = None,
- collect_stats: bool = False):
+
+ def __init__(
+ self,
+ cell_size: Optional[Vector3Type] = None,
+ resolution: float = None,
+ geometry: Optional[List[GeometricObject]] = None,
+ sources: Optional[List[Source]] = None,
+ eps_averaging: bool = True,
+ dimensions: int = 3,
+ boundary_layers: Optional[List[PML]] = None,
+ symmetries: Optional[List[Symmetry]] = None,
+ force_complex_fields: bool = False,
+ default_material: Medium = mp.Medium(),
+ m: float = 0,
+ k_point: Union[Vector3Type, bool] = False,
+ kz_2d: str = "complex",
+ extra_materials: Optional[List[Medium]] = None,
+ material_function: Optional[Callable[[Vector3Type], Medium]] = None,
+ epsilon_func: Optional[Callable[[Vector3Type], float]] = None,
+ epsilon_input_file: str = "",
+ progress_interval: float = 4,
+ subpixel_tol: float = 1e-4,
+ subpixel_maxeval: int = 100000,
+ loop_tile_base_db: int = 0,
+ loop_tile_base_eh: int = 0,
+ ensure_periodicity: bool = True,
+ num_chunks: int = 0,
+ Courant: float = 0.5,
+ accurate_fields_near_cylorigin: bool = False,
+ filename_prefix: Optional[str] = None,
+ output_volume: Optional[Volume] = None,
+ output_single_precision: bool = False,
+ geometry_center: Vector3Type = Vector3(),
+ force_all_components: bool = False,
+ split_chunks_evenly: bool = True,
+ chunk_layout=None,
+ collect_stats: bool = False,
+ ):
"""
All `Simulation` attributes are described in further detail below. In brackets
after each variable is the type of value that it should hold. The classes, complex
@@ -1206,7 +1286,11 @@ def __init__(self,
self.extra_materials = extra_materials if extra_materials else []
self.default_material = default_material
self.epsilon_input_file = epsilon_input_file
- self.num_chunks = chunk_layout.numchunks() if isinstance(chunk_layout,mp.BinaryPartition) else num_chunks
+ self.num_chunks = (
+ chunk_layout.numchunks()
+ if isinstance(chunk_layout, mp.BinaryPartition)
+ else num_chunks
+ )
self._num_chunks_original = self.num_chunks
self.Courant = Courant
self.global_d_conductivity = 0
@@ -1225,7 +1309,7 @@ def __init__(self,
self.output_append_h5 = None
self.output_single_precision = output_single_precision
self.output_volume = output_volume
- self.last_eps_filename = ''
+ self.last_eps_filename = ""
self.output_h5_hook = lambda fname: False
self.interactive = False
self.is_cylindrical = False
@@ -1239,7 +1323,7 @@ def __init__(self,
self._chunk_layout_original = self.chunk_layout
self.collect_stats = collect_stats
self.fragment_stats = None
- self._output_stats = os.environ.get('MEEP_STATS', None)
+ self._output_stats = os.environ.get("MEEP_STATS", None)
self.load_single_parallel_file = True
self.load_structure_file = None
@@ -1256,14 +1340,23 @@ def __init__(self,
elif kz_2d == "3d":
self.special_kz = False
else:
- raise ValueError("Invalid kz_2d option: {} not in [complex, real/imag, 3d]".format(kz_2d))
+ raise ValueError(
+ "Invalid kz_2d option: {} not in [complex, real/imag, 3d]".format(
+ kz_2d
+ )
+ )
# To prevent the user from having to specify `dims` and `is_cylindrical`
# to Volumes they create, the library will adjust them appropriately based
# on the settings in the Simulation instance. This method must be called on
# any user-defined Volume before passing it to meep via its `swigobj`.
def _fit_volume_to_simulation(self, vol):
- return Volume(vol.center, vol.size, dims=self.dimensions, is_cylindrical=self.is_cylindrical)
+ return Volume(
+ vol.center,
+ vol.size,
+ dims=self.dimensions,
+ is_cylindrical=self.is_cylindrical,
+ )
# Every function that takes a user volume can be specified either by a volume
# (a Python Volume or a SWIG-wrapped meep::volume), or a center and a size
@@ -1276,8 +1369,12 @@ def _volume_from_kwargs(self, vol=None, center=None, size=None):
# A SWIG-wrapped meep::volume
return vol
elif size is not None and center is not None:
- return Volume(center=Vector3(*center), size=Vector3(*size), dims=self.dimensions,
- is_cylindrical=self.is_cylindrical).swigobj
+ return Volume(
+ center=Vector3(*center),
+ size=Vector3(*size),
+ dims=self.dimensions,
+ is_cylindrical=self.is_cylindrical,
+ ).swigobj
else:
raise ValueError("Need either a Volume, or a size and center")
@@ -1297,8 +1394,8 @@ def use_2d(self, k):
return self.dimensions
def _get_valid_material_frequencies(self):
- fmin = float('-inf')
- fmax = float('inf')
+ fmin = float("-inf")
+ fmax = float("inf")
all_materials = [go.material for go in self.geometry] + self.extra_materials
all_materials.append(self.default_material)
@@ -1315,18 +1412,22 @@ def _get_valid_material_frequencies(self):
def _check_material_frequencies(self):
min_freq, max_freq = self._get_valid_material_frequencies()
- source_freqs = [(s.src.frequency, 0 if s.src.width == 0 else 1 / s.src.width)
- for s in self.sources
- if hasattr(s.src, 'frequency')]
+ source_freqs = [
+ (s.src.frequency, 0 if s.src.width == 0 else 1 / s.src.width)
+ for s in self.sources
+ if hasattr(s.src, "frequency")
+ ]
dft_freqs = []
for dftf in self.dft_objects:
dft_freqs.append(dftf.freq[0])
dft_freqs.append(dftf.freq[-1])
- warn_src = ('Note: your sources include frequencies outside the range of validity of the ' +
- 'material models. This is fine as long as you eventually only look at outputs ' +
- '(fluxes, resonant modes, etc.) at valid frequencies.')
+ warn_src = (
+ "Note: your sources include frequencies outside the range of validity of the "
+ + "material models. This is fine as long as you eventually only look at outputs "
+ + "(fluxes, resonant modes, etc.) at valid frequencies."
+ )
warn_dft_fmt = "DFT frequency {} is out of material's range of {}-{}"
@@ -1336,7 +1437,9 @@ def _check_material_frequencies(self):
for dftf in dft_freqs:
if dftf > max_freq or dftf < min_freq:
- warnings.warn(warn_dft_fmt.format(dftf, min_freq, max_freq), RuntimeWarning)
+ warnings.warn(
+ warn_dft_fmt.format(dftf, min_freq, max_freq), RuntimeWarning
+ )
def _create_grid_volume(self, k):
dims = self._infer_dimensions(k)
@@ -1347,7 +1450,9 @@ def _create_grid_volume(self, k):
self.dimensions = 2
gv = mp.vol2d(self.cell_size.x, self.cell_size.y, self.resolution)
elif dims == 3:
- gv = mp.vol3d(self.cell_size.x, self.cell_size.y, self.cell_size.z, self.resolution)
+ gv = mp.vol3d(
+ self.cell_size.x, self.cell_size.y, self.cell_size.z, self.resolution
+ )
elif dims == mp.CYLINDRICAL:
gv = mp.volcyl(self.cell_size.x, self.cell_size.z, self.resolution)
self.dimensions = 2
@@ -1356,7 +1461,9 @@ def _create_grid_volume(self, k):
raise ValueError("Unsupported dimentionality: {}".format(dims))
gv.center_origin()
- gv.shift_origin(py_v3_to_vec(self.dimensions, self.geometry_center, self.is_cylindrical))
+ gv.shift_origin(
+ py_v3_to_vec(self.dimensions, self.geometry_center, self.is_cylindrical)
+ )
return gv
def _create_symmetries(self, gv):
@@ -1381,10 +1488,15 @@ def _create_symmetries(self, gv):
return sym
def _get_dft_volumes(self):
- volumes = [self._volume_from_kwargs(vol=r.where if hasattr(r, 'where') else None,
- center=r.center, size=r.size)
- for dft in self.dft_objects
- for r in dft.regions]
+ volumes = [
+ self._volume_from_kwargs(
+ vol=r.where if hasattr(r, "where") else None,
+ center=r.center,
+ size=r.size,
+ )
+ for dft in self.dft_objects
+ for r in dft.regions
+ ]
return volumes
@@ -1403,32 +1515,32 @@ def _boundaries_to_vols_1d(self, boundaries):
def _boundaries_to_vols_2d_3d(self, boundaries, cyl=False):
side_thickness = OrderedDict()
- side_thickness['top'] = 0
- side_thickness['bottom'] = 0
- side_thickness['left'] = 0
- side_thickness['right'] = 0
- side_thickness['near'] = 0
- side_thickness['far'] = 0
+ side_thickness["top"] = 0
+ side_thickness["bottom"] = 0
+ side_thickness["left"] = 0
+ side_thickness["right"] = 0
+ side_thickness["near"] = 0
+ side_thickness["far"] = 0
for bl in boundaries:
d = bl.direction
s = bl.side
if d == mp.X or d == mp.ALL:
if s == mp.High or s == mp.ALL:
- side_thickness['right'] = bl.thickness
+ side_thickness["right"] = bl.thickness
if s == mp.Low or s == mp.ALL:
- side_thickness['left'] = bl.thickness
+ side_thickness["left"] = bl.thickness
if d == mp.Y or d == mp.ALL:
if s == mp.High or s == mp.ALL:
- side_thickness['top'] = bl.thickness
+ side_thickness["top"] = bl.thickness
if s == mp.Low or s == mp.ALL:
- side_thickness['bottom'] = bl.thickness
+ side_thickness["bottom"] = bl.thickness
if self.dimensions == 3:
if d == mp.Z or d == mp.ALL:
if s == mp.High or s == mp.ALL:
- side_thickness['far'] = bl.thickness
+ side_thickness["far"] = bl.thickness
if s == mp.Low or s == mp.ALL:
- side_thickness['near'] = bl.thickness
+ side_thickness["near"] = bl.thickness
xmax = self.cell_size.x / 2
ymax = self.cell_size.z / 2 if cyl else self.cell_size.y / 2
@@ -1436,30 +1548,38 @@ def _boundaries_to_vols_2d_3d(self, boundaries, cyl=False):
ytot = self.cell_size.z if cyl else self.cell_size.y
def get_overlap_0(side, d):
- if side == 'top' or side == 'bottom':
- ydir = 1 if side == 'top' else -1
- xsz = self.cell_size.x - (side_thickness['left'] + side_thickness['right'])
+ if side == "top" or side == "bottom":
+ ydir = 1 if side == "top" else -1
+ xsz = self.cell_size.x - (
+ side_thickness["left"] + side_thickness["right"]
+ )
ysz = d
- zsz = self.cell_size.z - (side_thickness['near'] + side_thickness['far'])
- xcen = xmax - side_thickness['right'] - (xsz / 2)
- ycen = ydir*ymax + (-ydir*0.5*d)
- zcen = zmax - side_thickness['far'] - (zsz / 2)
- elif side == 'left' or side == 'right':
- xdir = 1 if side == 'right' else -1
+ zsz = self.cell_size.z - (
+ side_thickness["near"] + side_thickness["far"]
+ )
+ xcen = xmax - side_thickness["right"] - (xsz / 2)
+ ycen = ydir * ymax + (-ydir * 0.5 * d)
+ zcen = zmax - side_thickness["far"] - (zsz / 2)
+ elif side == "left" or side == "right":
+ xdir = 1 if side == "right" else -1
xsz = d
- ysz = ytot - (side_thickness['top'] + side_thickness['bottom'])
- zsz = self.cell_size.z - (side_thickness['near'] + side_thickness['far'])
- xcen = xdir*xmax + (-xdir*0.5*d)
- ycen = ymax - side_thickness['top'] - (ysz / 2)
- zcen = zmax - side_thickness['far'] - (zsz / 2)
- elif side == 'near' or side == 'far':
- zdir = 1 if side == 'far' else -1
- xsz = self.cell_size.x - (side_thickness['left'] + side_thickness['right'])
- ysz = ytot - (side_thickness['top'] + side_thickness['bottom'])
+ ysz = ytot - (side_thickness["top"] + side_thickness["bottom"])
+ zsz = self.cell_size.z - (
+ side_thickness["near"] + side_thickness["far"]
+ )
+ xcen = xdir * xmax + (-xdir * 0.5 * d)
+ ycen = ymax - side_thickness["top"] - (ysz / 2)
+ zcen = zmax - side_thickness["far"] - (zsz / 2)
+ elif side == "near" or side == "far":
+ zdir = 1 if side == "far" else -1
+ xsz = self.cell_size.x - (
+ side_thickness["left"] + side_thickness["right"]
+ )
+ ysz = ytot - (side_thickness["top"] + side_thickness["bottom"])
zsz = d
- xcen = xmax - side_thickness['right'] - (xsz / 2)
- ycen = ymax - side_thickness['top'] - (ysz / 2)
- zcen = zdir*zmax + (-zdir*0.5*d)
+ xcen = xmax - side_thickness["right"] - (xsz / 2)
+ ycen = ymax - side_thickness["top"] - (ysz / 2)
+ zcen = zdir * zmax + (-zdir * 0.5 * d)
if cyl:
cen = mp.Vector3(xcen, 0, ycen)
@@ -1474,31 +1594,37 @@ def get_overlap_1(side1, side2, d):
if side_thickness[side2] == 0:
return []
- if side1 == 'top' or side1 == 'bottom':
- ydir = 1 if side1 == 'top' else -1
+ if side1 == "top" or side1 == "bottom":
+ ydir = 1 if side1 == "top" else -1
ysz = d
- ycen = ydir*ymax + (-ydir*0.5*d)
- if side2 == 'left' or side2 == 'right':
- xdir = 1 if side2 == 'right' else -1
+ ycen = ydir * ymax + (-ydir * 0.5 * d)
+ if side2 == "left" or side2 == "right":
+ xdir = 1 if side2 == "right" else -1
xsz = side_thickness[side2]
- zsz = self.cell_size.z - (side_thickness['near'] + side_thickness['far'])
- xcen = xdir*xmax + (-xdir*0.5*side_thickness[side2])
- zcen = zmax - side_thickness['far'] - (zsz / 2)
- elif side2 == 'near' or side2 == 'far':
- zdir = 1 if side2 == 'far' else -1
- xsz = self.cell_size.x - (side_thickness['left'] + side_thickness['right'])
+ zsz = self.cell_size.z - (
+ side_thickness["near"] + side_thickness["far"]
+ )
+ xcen = xdir * xmax + (-xdir * 0.5 * side_thickness[side2])
+ zcen = zmax - side_thickness["far"] - (zsz / 2)
+ elif side2 == "near" or side2 == "far":
+ zdir = 1 if side2 == "far" else -1
+ xsz = self.cell_size.x - (
+ side_thickness["left"] + side_thickness["right"]
+ )
zsz = side_thickness[side2]
- xcen = xmax - side_thickness['right'] - (xsz / 2)
- zcen = zdir*zmax + (-zdir*0.5*side_thickness[side2])
- elif side1 == 'near' or side1 == 'far':
- xdir = 1 if side2 == 'right' else -1
- zdir = 1 if side1 == 'far' else -1
+ xcen = xmax - side_thickness["right"] - (xsz / 2)
+ zcen = zdir * zmax + (-zdir * 0.5 * side_thickness[side2])
+ elif side1 == "near" or side1 == "far":
+ xdir = 1 if side2 == "right" else -1
+ zdir = 1 if side1 == "far" else -1
xsz = side_thickness[side2]
- ysz = self.cell_size.y - (side_thickness['top'] + side_thickness['bottom'])
+ ysz = self.cell_size.y - (
+ side_thickness["top"] + side_thickness["bottom"]
+ )
zsz = d
- xcen = xdir*xmax + (-xdir*0.5*side_thickness[side2])
- ycen = ymax - side_thickness['top'] - (ysz / 2)
- zcen = zdir*zmax + (-zdir*0.5*d)
+ xcen = xdir * xmax + (-xdir * 0.5 * side_thickness[side2])
+ ycen = ymax - side_thickness["top"] - (ysz / 2)
+ zcen = zdir * zmax + (-zdir * 0.5 * d)
if cyl:
cen = mp.Vector3(xcen, 0, ycen)
@@ -1511,15 +1637,15 @@ def get_overlap_1(side1, side2, d):
def get_overlap_2(side1, side2, side3, d):
if side_thickness[side2] == 0 or side_thickness[side3] == 0:
return []
- xdir = 1 if side2 == 'right' else -1
- ydir = 1 if side1 == 'top' else -1
- zdir = 1 if side3 == 'far' else -1
+ xdir = 1 if side2 == "right" else -1
+ ydir = 1 if side1 == "top" else -1
+ zdir = 1 if side3 == "far" else -1
xsz = side_thickness[side2]
ysz = d
zsz = side_thickness[side3]
- xcen = xdir*xmax + (-xdir*0.5*xsz)
- ycen = ydir*ymax + (-ydir*0.5*d)
- zcen = zdir*zmax + (-zdir*0.5*zsz)
+ xcen = xdir * xmax + (-xdir * 0.5 * xsz)
+ ycen = ydir * ymax + (-ydir * 0.5 * d)
+ zcen = zdir * zmax + (-zdir * 0.5 * zsz)
cen = mp.Vector3(xcen, ycen, zcen)
sz = mp.Vector3(xsz, ysz, zsz)
@@ -1534,19 +1660,19 @@ def get_overlap_2(side1, side2, side3, d):
continue
v1.append(get_overlap_0(side, thickness))
- if side == 'top' or side == 'bottom':
- v2.append(get_overlap_1(side, 'left', thickness))
- v2.append(get_overlap_1(side, 'right', thickness))
+ if side == "top" or side == "bottom":
+ v2.append(get_overlap_1(side, "left", thickness))
+ v2.append(get_overlap_1(side, "right", thickness))
if self.dimensions == 3:
- v2.append(get_overlap_1(side, 'near', thickness))
- v2.append(get_overlap_1(side, 'far', thickness))
- v3.append(get_overlap_2(side, 'left', 'near', thickness))
- v3.append(get_overlap_2(side, 'right', 'near', thickness))
- v3.append(get_overlap_2(side, 'left', 'far', thickness))
- v3.append(get_overlap_2(side, 'right', 'far', thickness))
- if side == 'near' or side == 'far':
- v2.append(get_overlap_1(side, 'left', thickness))
- v2.append(get_overlap_1(side, 'right', thickness))
+ v2.append(get_overlap_1(side, "near", thickness))
+ v2.append(get_overlap_1(side, "far", thickness))
+ v3.append(get_overlap_2(side, "left", "near", thickness))
+ v3.append(get_overlap_2(side, "right", "near", thickness))
+ v3.append(get_overlap_2(side, "left", "far", thickness))
+ v3.append(get_overlap_2(side, "right", "far", thickness))
+ if side == "near" or side == "far":
+ v2.append(get_overlap_1(side, "left", thickness))
+ v2.append(get_overlap_1(side, "right", thickness))
return [v for v in v1 if v], [v for v in v2 if v], [v for v in v3 if v]
@@ -1564,21 +1690,29 @@ def _boundary_layers_to_vol_list(self, boundaries):
if self.dimensions == 1:
vols1 = self._boundaries_to_vols_1d(boundaries)
else:
- vols1, vols2, vols3 = self._boundaries_to_vols_2d_3d(boundaries, self.is_cylindrical)
+ vols1, vols2, vols3 = self._boundaries_to_vols_2d_3d(
+ boundaries, self.is_cylindrical
+ )
return vols1, vols2, vols3
def _make_fragment_lists(self, gv):
-
def convert_volumes(dft_obj):
volumes = []
for r in dft_obj.regions:
- volumes.append(self._volume_from_kwargs(vol=r.where if hasattr(r, 'where') else None,
- center=r.center, size=r.size))
+ volumes.append(
+ self._volume_from_kwargs(
+ vol=r.where if hasattr(r, "where") else None,
+ center=r.center,
+ size=r.size,
+ )
+ )
return volumes
- dft_data_list = [mp.dft_data(o.nfreqs, o.num_components, convert_volumes(o))
- for o in self.dft_objects]
+ dft_data_list = [
+ mp.dft_data(o.nfreqs, o.num_components, convert_volumes(o))
+ for o in self.dft_objects
+ ]
pmls = []
absorbers = []
@@ -1589,14 +1723,24 @@ def convert_volumes(dft_obj):
absorbers.append(bl)
pml_vols1, pml_vols2, pml_vols3 = self._boundary_layers_to_vol_list(pmls)
- absorber_vols1, absorber_vols2, absorber_vols3 = self._boundary_layers_to_vol_list(absorbers)
+ (
+ absorber_vols1,
+ absorber_vols2,
+ absorber_vols3,
+ ) = self._boundary_layers_to_vol_list(absorbers)
absorber_vols = absorber_vols1 + absorber_vols2 + absorber_vols3
return (dft_data_list, pml_vols1, pml_vols2, pml_vols3, absorber_vols)
def _compute_fragment_stats(self, gv):
- dft_data_list, pml_vols1, pml_vols2, pml_vols3, absorber_vols = self._make_fragment_lists(gv)
+ (
+ dft_data_list,
+ pml_vols1,
+ pml_vols2,
+ pml_vols3,
+ absorber_vols,
+ ) = self._make_fragment_lists(gv)
stats = mp.compute_fragment_stats(
self.geometry,
@@ -1613,7 +1757,7 @@ def _compute_fragment_stats(self, gv):
self.subpixel_tol,
self.subpixel_maxeval,
self.ensure_periodicity,
- self.eps_averaging
+ self.eps_averaging,
)
mirror_symmetries = [sym for sym in self.symmetries if isinstance(sym, Mirror)]
@@ -1632,8 +1776,8 @@ def _compute_fragment_stats(self, gv):
def _init_structure(self, k=False):
if verbosity.meep > 0:
- print('-' * 11)
- print('Initializing structure...')
+ print("-" * 11)
+ print("Initializing structure...")
gv = self._create_grid_volume(k)
sym = self._create_symmetries(gv)
@@ -1654,13 +1798,23 @@ def _init_structure(self, k=False):
if self.collect_stats and isinstance(self.default_material, mp.Medium):
self.fragment_stats = self._compute_fragment_stats(gv)
- if self._output_stats and isinstance(self.default_material, mp.Medium) and verbosity.meep > 0:
+ if (
+ self._output_stats
+ and isinstance(self.default_material, mp.Medium)
+ and verbosity.meep > 0
+ ):
stats = self._compute_fragment_stats(gv)
print("FRAGMENT:, aniso_eps:, {}".format(stats.num_anisotropic_eps_pixels))
print("FRAGMENT:, aniso_mu:, {}".format(stats.num_anisotropic_mu_pixels))
print("FRAGMENT:, nonlinear:, {}".format(stats.num_nonlinear_pixels))
- print("FRAGMENT:, susceptibility:, {}".format(stats.num_susceptibility_pixels))
- print("FRAGMENT:, conductivity:, {}".format(stats.num_nonzero_conductivity_pixels))
+ print(
+ "FRAGMENT:, susceptibility:, {}".format(stats.num_susceptibility_pixels)
+ )
+ print(
+ "FRAGMENT:, conductivity:, {}".format(
+ stats.num_nonzero_conductivity_pixels
+ )
+ )
print("FRAGMENT:, pml_1d:, {}".format(stats.num_1d_pml_pixels))
print("FRAGMENT:, pml_2d:, {}".format(stats.num_2d_pml_pixels))
print("FRAGMENT:, pml_3d:, {}".format(stats.num_3d_pml_pixels))
@@ -1697,10 +1851,15 @@ def _init_structure(self, k=False):
absorbers,
self.extra_materials,
self.split_chunks_evenly,
- False if self.chunk_layout and not isinstance(self.chunk_layout,mp.BinaryPartition) else True,
+ False
+ if self.chunk_layout
+ and not isinstance(self.chunk_layout, mp.BinaryPartition)
+ else True,
None,
True if self._output_stats is not None else False,
- self.chunk_layout if self.chunk_layout and isinstance(self.chunk_layout,mp.BinaryPartition) else None
+ self.chunk_layout
+ if self.chunk_layout and isinstance(self.chunk_layout, mp.BinaryPartition)
+ else None,
)
self.geps = mp._set_materials(
self.structure,
@@ -1719,13 +1878,13 @@ def _init_structure(self, k=False):
True,
None,
False,
- None
+ None,
)
if self._output_stats is not None:
sys.exit(0)
- if self.chunk_layout and not isinstance(self.chunk_layout,mp.BinaryPartition):
+ if self.chunk_layout and not isinstance(self.chunk_layout, mp.BinaryPartition):
self.load_chunk_layout(br, self.chunk_layout)
self.set_materials()
@@ -1737,7 +1896,8 @@ def _init_structure(self, k=False):
if self.load_structure_file:
self.load_structure(
- self.load_structure_file, self.load_single_parallel_file)
+ self.load_structure_file, self.load_single_parallel_file
+ )
def _is_outer_boundary(self, vol, direction, side):
@@ -1752,11 +1912,15 @@ def _is_outer_boundary(self, vol, direction, side):
# TODO: Support shifted origins
def isclose(a, b, rel_tol=1e-09, abs_tol=0.0):
- return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
+ return abs(a - b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
- if side == mp.Low and isclose(vol.get_min_corner().in_direction(direction), -half_cell_size):
+ if side == mp.Low and isclose(
+ vol.get_min_corner().in_direction(direction), -half_cell_size
+ ):
return True
- if side == mp.High and isclose(vol.get_max_corner().in_direction(direction), half_cell_size):
+ if side == mp.High and isclose(
+ vol.get_max_corner().in_direction(direction), half_cell_size
+ ):
return True
return False
@@ -1801,8 +1965,10 @@ def get_num_pixels(vol, direction, side, target_direction, mult_direction=None):
def _get_chunk_communication_areas(self):
if self.dimensions == 1 or self.is_cylindrical:
- warnings.warn("Can currently only get chunk communication area from 2d or 3d simulations",
- RuntimeWarning)
+ warnings.warn(
+ "Can currently only get chunk communication area from 2d or 3d simulations",
+ RuntimeWarning,
+ )
return
if self.structure is None:
@@ -1878,7 +2044,7 @@ def set_materials(self, geometry=None, default_material=None):
True,
self.structure,
False,
- None
+ None,
)
self.geps = mp._set_materials(
self.structure,
@@ -1897,7 +2063,7 @@ def set_materials(self, geometry=None, default_material=None):
True,
None,
False,
- None
+ None,
)
def dump_structure(self, fname, single_parallel_file=True):
@@ -1905,20 +2071,30 @@ def dump_structure(self, fname, single_parallel_file=True):
Dumps the structure to the file `fname`.
"""
if self.structure is None:
- raise ValueError("Structure must be initialized before calling dump_structure")
+ raise ValueError(
+ "Structure must be initialized before calling dump_structure"
+ )
self.structure.dump(fname, single_parallel_file)
if verbosity.meep > 0:
- print("Dumped structure to file: %s (%s)" % (fname, str(single_parallel_file)))
+ print(
+ "Dumped structure to file: %s (%s)" % (fname, str(single_parallel_file))
+ )
def load_structure(self, fname, single_parallel_file=True):
"""
Loads a structure from the file `fname`.
"""
if self.structure is None:
- raise ValueError("Structure must be initialized before loading structure from file '%s'" % fname)
+ raise ValueError(
+ "Structure must be initialized before loading structure from file '%s'"
+ % fname
+ )
self.structure.load(fname, single_parallel_file)
if verbosity.meep > 0:
- print("Loaded structure from file: %s (%s)" % (fname, str(single_parallel_file)))
+ print(
+ "Loaded structure from file: %s (%s)"
+ % (fname, str(single_parallel_file))
+ )
def dump_fields(self, fname, single_parallel_file=True):
"""
@@ -1935,23 +2111,33 @@ def load_fields(self, fname, single_parallel_file=True):
Loads a fields from the file `fname`.
"""
if self.fields is None:
- raise ValueError("Fields must be initialized before loading fields from file '%s'" % fname)
+ raise ValueError(
+ "Fields must be initialized before loading fields from file '%s'"
+ % fname
+ )
self._evaluate_dft_objects()
self.fields.load(fname, single_parallel_file)
if verbosity.meep > 0:
- print("Loaded fields from file: %s (%s)" % (fname, str(single_parallel_file)))
+ print(
+ "Loaded fields from file: %s (%s)" % (fname, str(single_parallel_file))
+ )
def dump_chunk_layout(self, fname):
"""
Dumps the chunk layout to file `fname`.
"""
if self.structure is None:
- raise ValueError("Structure must be initialized before calling dump_chunk_layout")
+ raise ValueError(
+ "Structure must be initialized before calling dump_chunk_layout"
+ )
self.structure.dump_chunk_layout(fname)
def load_chunk_layout(self, br, source):
if self.structure is None:
- raise ValueError("Structure must be initialized before loading chunk layout from file '%s'" % fname)
+ raise ValueError(
+ "Structure must be initialized before loading chunk layout from file '%s'"
+ % fname
+ )
if isinstance(source, Simulation):
vols = source.structure.get_chunk_volumes()
@@ -1970,10 +2156,12 @@ def get_load_dump_dirname(self, dirname, single_parallel_file):
else:
# When doing a sharded dump (each process to its own file), use
# the process rank to get a unique name.
- dump_dirname = os.path.join(dirname, 'rank%02d' % mp.my_rank())
+ dump_dirname = os.path.join(dirname, "rank%02d" % mp.my_rank())
return dump_dirname
- def dump(self, dirname, dump_structure=True, dump_fields=True, single_parallel_file=True):
+ def dump(
+ self, dirname, dump_structure=True, dump_fields=True, single_parallel_file=True
+ ):
"""
Dumps simulation state.
"""
@@ -1981,14 +2169,16 @@ def dump(self, dirname, dump_structure=True, dump_fields=True, single_parallel_f
os.makedirs(dump_dirname, exist_ok=True)
if dump_structure:
- structure_dump_filename = os.path.join(dump_dirname, 'structure.h5')
+ structure_dump_filename = os.path.join(dump_dirname, "structure.h5")
self.dump_structure(structure_dump_filename, single_parallel_file)
if dump_fields:
- fields_dump_filename = os.path.join(dump_dirname, 'fields.h5')
+ fields_dump_filename = os.path.join(dump_dirname, "fields.h5")
self.dump_fields(fields_dump_filename, single_parallel_file)
- def load(self, dirname, load_structure=True, load_fields=True, single_parallel_file=True):
+ def load(
+ self, dirname, load_structure=True, load_fields=True, single_parallel_file=True
+ ):
"""
Loads simulation state.
@@ -1999,36 +2189,42 @@ def load(self, dirname, load_structure=True, load_fields=True, single_parallel_f
self.load_single_parallel_file = single_parallel_file
if load_structure:
- load_structure_file = os.path.join(dump_dirname, 'structure.h5')
- # If structure is already initialized, load it straight away.
- # Otherwise, do a delayed load.
- if self.structure:
- self.load_structure(load_structure_file, self.load_single_parallel_file)
- else:
- self.load_structure_file = load_structure_file
+ load_structure_file = os.path.join(dump_dirname, "structure.h5")
+ # If structure is already initialized, load it straight away.
+ # Otherwise, do a delayed load.
+ if self.structure:
+ self.load_structure(load_structure_file, self.load_single_parallel_file)
+ else:
+ self.load_structure_file = load_structure_file
if load_fields:
- load_fields_file = os.path.join(dump_dirname, 'fields.h5')
- if self.fields:
- self.load_fields(load_fields_file, self.load_single_parallel_file)
- else:
- self.load_fields_file = load_fields_file
+ load_fields_file = os.path.join(dump_dirname, "fields.h5")
+ if self.fields:
+ self.load_fields(load_fields_file, self.load_single_parallel_file)
+ else:
+ self.load_fields_file = load_fields_file
def init_sim(self):
if self._is_initialized:
return
- materials = [g.material for g in self.geometry if isinstance(g.material, mp.Medium)]
+ materials = [
+ g.material for g in self.geometry if isinstance(g.material, mp.Medium)
+ ]
if isinstance(self.default_material, mp.Medium):
materials.append(self.default_material)
for med in materials:
- if ((med.epsilon_diag.x < 1 and med.epsilon_diag.x > -mp.inf) or
- (med.epsilon_diag.y < 1 and med.epsilon_diag.y > -mp.inf) or
- (med.epsilon_diag.z < 1 and med.epsilon_diag.z > -mp.inf)):
-
- eps_warning = ("Epsilon < 1 may require adjusting the Courant parameter. " +
- "See the 'Numerical Stability' entry under the 'Materials' " +
- "section of the documentation")
+ if (
+ (med.epsilon_diag.x < 1 and med.epsilon_diag.x > -mp.inf)
+ or (med.epsilon_diag.y < 1 and med.epsilon_diag.y > -mp.inf)
+ or (med.epsilon_diag.z < 1 and med.epsilon_diag.z > -mp.inf)
+ ):
+
+ eps_warning = (
+ "Epsilon < 1 may require adjusting the Courant parameter. "
+ + "See the 'Numerical Stability' entry under the 'Materials' "
+ + "section of the documentation"
+ )
warnings.warn(eps_warning, RuntimeWarning)
if self.structure is None:
@@ -2039,7 +2235,8 @@ def init_sim(self):
self.m if self.is_cylindrical else 0,
self.k_point.z if self.special_kz and self.k_point else 0,
not self.accurate_fields_near_cylorigin,
- self.loop_tile_base_db, self.loop_tile_base_eh
+ self.loop_tile_base_db,
+ self.loop_tile_base_eh,
)
if self.force_all_components and self.dimensions != 1:
@@ -2052,7 +2249,11 @@ def init_sim(self):
print("Meep: using complex fields.")
if self.k_point:
- v = Vector3(self.k_point.x, self.k_point.y) if self.special_kz else self.k_point
+ v = (
+ Vector3(self.k_point.x, self.k_point.y)
+ if self.special_kz
+ else self.k_point
+ )
self.fields.use_bloch(py_v3_to_vec(self.dimensions, v, self.is_cylindrical))
self.add_sources()
@@ -2063,8 +2264,7 @@ def init_sim(self):
self._is_initialized = True
if self.load_fields_file:
- self.load_fields(
- self.load_fields_file, self.load_single_parallel_file)
+ self.load_fields(self.load_fields_file, self.load_single_parallel_file)
def using_real_fields(self):
cond1 = self.is_cylindrical and self.m != 0
@@ -2089,11 +2289,12 @@ def require_dimensions(self):
mp.set_dimensions(self._infer_dimensions(self.k_point))
def has_mu(self):
-
def _has_mu(medium):
if not isinstance(medium, mp.Medium):
return False
- return medium.mu_diag != mp.Vector3(1, 1, 1) or medium.mu_offdiag != mp.Vector3(0j, 0j, 0j)
+ return medium.mu_diag != mp.Vector3(
+ 1, 1, 1
+ ) or medium.mu_offdiag != mp.Vector3(0j, 0j, 0j)
for go in self.geometry:
if _has_mu(go.material):
@@ -2111,13 +2312,29 @@ def get_estimated_memory_usage(self):
self.init_sim()
if self.fragment_stats is None:
- self.fragment_stats = self._compute_fragment_stats(self.structure.user_volume)
+ self.fragment_stats = self._compute_fragment_stats(
+ self.structure.user_volume
+ )
- is_complex = (self.k_point and self.k_point != mp.Vector3(0, 0, 0)) or self.force_complex_fields
+ is_complex = (
+ self.k_point and self.k_point != mp.Vector3(0, 0, 0)
+ ) or self.force_complex_fields
realnums_per_grid_point = 1 if self.dimensions == 1 else 3
- E_realnums = self.fragment_stats.num_pixels_in_box * (2 if is_complex else 1) * realnums_per_grid_point
- H_realnums = self.fragment_stats.num_pixels_in_box * (2 if is_complex else 1) * realnums_per_grid_point
- D_realnums = self.fragment_stats.num_pixels_in_box * (2 if is_complex else 1) * realnums_per_grid_point
+ E_realnums = (
+ self.fragment_stats.num_pixels_in_box
+ * (2 if is_complex else 1)
+ * realnums_per_grid_point
+ )
+ H_realnums = (
+ self.fragment_stats.num_pixels_in_box
+ * (2 if is_complex else 1)
+ * realnums_per_grid_point
+ )
+ D_realnums = (
+ self.fragment_stats.num_pixels_in_box
+ * (2 if is_complex else 1)
+ * realnums_per_grid_point
+ )
chi1inv_realnums = self.fragment_stats.num_pixels_in_box * 9
Mu_realnums = 0
@@ -2125,10 +2342,18 @@ def get_estimated_memory_usage(self):
Mu_realnums = chi1inv_realnums + H_realnums
dft_realnums = self.fragment_stats.num_dft_pixels * 2
- dispersive_realnums = self.fragment_stats.num_susceptibility_pixels * 6 * (2 if is_complex else 1)
+ dispersive_realnums = (
+ self.fragment_stats.num_susceptibility_pixels * 6 * (2 if is_complex else 1)
+ )
- total_realnums = (E_realnums + H_realnums + D_realnums + Mu_realnums +
- dft_realnums + dispersive_realnums)
+ total_realnums = (
+ E_realnums
+ + H_realnums
+ + D_realnums
+ + Mu_realnums
+ + dft_realnums
+ + dispersive_realnums
+ )
total_bytes = total_realnums * mp.get_realnum_size()
@@ -2205,7 +2430,7 @@ def get_epsilon_point(self, pt, frequency=0):
frequency-independent part of $\\varepsilon$ (the $\\omega\\to\\infty$ limit).
"""
v3 = py_v3_to_vec(self.dimensions, pt, self.is_cylindrical)
- return self.fields.get_eps(v3,frequency)
+ return self.fields.get_eps(v3, frequency)
def get_mu_point(self, pt, frequency=0):
"""
@@ -2215,7 +2440,7 @@ def get_mu_point(self, pt, frequency=0):
frequency-independent part of $\\mu$ (the $\\omega\\to\\infty$ limit).
"""
v3 = py_v3_to_vec(self.dimensions, pt, self.is_cylindrical)
- return self.fields.get_mu(v3,frequency)
+ return self.fields.get_mu(v3, frequency)
def get_epsilon_grid(self, xtics=None, ytics=None, ztics=None, frequency=0):
"""
@@ -2229,19 +2454,27 @@ def get_epsilon_grid(self, xtics=None, ytics=None, ztics=None, frequency=0):
sampling the material geometry to any arbitrary resolution. The return value is a NumPy array with shape
equivalent to `numpy.meshgrid(xtics,ytics,ztics)`. Empty dimensions are collapsed.
"""
- grid_vals = np.squeeze(np.empty((len(xtics), len(ytics), len(ztics)), dtype=np.complex128))
+ grid_vals = np.squeeze(
+ np.empty((len(xtics), len(ytics), len(ztics)), dtype=np.complex128)
+ )
gv = self._create_grid_volume(False)
- mp._get_epsilon_grid(self.geometry,
- self.extra_materials,
- self.default_material,
- self.ensure_periodicity and not not self.k_point,
- gv,
- self.cell_size, self.geometry_center,
- len(xtics), xtics,
- len(ytics), ytics,
- len(ztics), ztics,
- grid_vals,
- frequency)
+ mp._get_epsilon_grid(
+ self.geometry,
+ self.extra_materials,
+ self.default_material,
+ self.ensure_periodicity and not not self.k_point,
+ gv,
+ self.cell_size,
+ self.geometry_center,
+ len(xtics),
+ xtics,
+ len(ytics),
+ ytics,
+ len(ztics),
+ ztics,
+ grid_vals,
+ frequency,
+ )
return grid_vals
def get_filename_prefix(self):
@@ -2260,14 +2493,16 @@ def get_filename_prefix(self):
elif self.filename_prefix is None:
_, filename = os.path.split(sys.argv[0])
- if filename == 'ipykernel_launcher.py' or filename == '__main__.py':
- return ''
+ if filename == "ipykernel_launcher.py" or filename == "__main__.py":
+ return ""
else:
- return re.sub(r'\.py$', '', filename)
+ return re.sub(r"\.py$", "", filename)
else:
- raise TypeError("Expected a string for filename_prefix, or None for the default.")
+ raise TypeError(
+ "Expected a string for filename_prefix, or None for the default."
+ )
- def use_output_directory(self, dname=''):
+ def use_output_directory(self, dname=""):
"""
Output all files into a subdirectory, which is created if necessary. If the optional
argument `dname` is specified, that is the name of the directory. If `dname`
@@ -2277,17 +2512,17 @@ def use_output_directory(self, dname=''):
name is set to `filename_prefix` + "-out" and `filename_prefix` is then reset to `None`.
"""
if not dname:
- dname = self.get_filename_prefix() + '-out'
+ dname = self.get_filename_prefix() + "-out"
- closure = {'trashed': False}
+ closure = {"trashed": False}
def hook():
if verbosity.meep > 0:
print("Meep: using output directory '{}'".format(dname))
self.fields.set_output_directory(dname)
- if not closure['trashed']:
+ if not closure["trashed"]:
mp.trash_output_directory(dname)
- closure['trashed'] = True
+ closure["trashed"] = True
self.init_sim_hooks.append(hook)
@@ -2317,34 +2552,46 @@ def stop_cond(sim):
cond[i] = stop_cond
step_funcs = list(step_funcs)
- step_funcs.append(display_progress(t0, t0 + stop_time, self.progress_interval))
+ step_funcs.append(
+ display_progress(t0, t0 + stop_time, self.progress_interval)
+ )
if do_progress:
- self.progress = FloatProgress(value=t0, min=t0, max=t0 + stop_time, description="0% done ")
+ self.progress = FloatProgress(
+ value=t0, min=t0, max=t0 + stop_time, description="0% done "
+ )
display(self.progress)
else:
- assert callable(cond[i]), "Stopping condition {} is not an integer or a function".format(cond[i])
+ assert callable(
+ cond[i]
+ ), "Stopping condition {} is not an integer or a function".format(
+ cond[i]
+ )
while not any([x(self) for x in cond]):
for func in step_funcs:
- _eval_step_func(self, func, 'step')
+ _eval_step_func(self, func, "step")
self.fields.step()
# Translating the recursive scheme version of run-until into an iterative version
# (because python isn't tail-call-optimized) means we need one extra iteration to
# be the same as scheme.
for func in step_funcs:
- _eval_step_func(self, func, 'step')
+ _eval_step_func(self, func, "step")
for func in step_funcs:
- _eval_step_func(self, func, 'finish')
+ _eval_step_func(self, func, "finish")
if do_progress and self.progress:
self.progress.value = t0 + stop_time
self.progress.description = "100% done "
if verbosity.meep > 0:
- print("run {} finished at t = {} ({} timesteps)".format(self.run_index, self.meep_time(), self.fields.t))
+ print(
+ "run {} finished at t = {} ({} timesteps)".format(
+ self.run_index, self.meep_time(), self.fields.t
+ )
+ )
self.run_index += 1
def _run_sources_until(self, cond, step_funcs):
@@ -2360,8 +2607,10 @@ def _run_sources_until(self, cond, step_funcs):
if isinstance(cond[i], numbers.Number):
new_conds.append((ts - self.round_time()) + cond[i])
else:
+
def f(sim):
return cond[i](sim) and sim.round_time() >= ts
+
new_conds.append(f)
self._run_until(new_conds, step_funcs)
@@ -2383,12 +2632,24 @@ def run_k_point(self, t, k):
components = [s.component for s in self.sources]
pts = [s.center for s in self.sources]
- src_freqs_min = min([s.src.frequency - 1 / s.src.width / 2 if isinstance(s.src, mp.GaussianSource) else mp.inf
- for s in self.sources])
+ src_freqs_min = min(
+ [
+ s.src.frequency - 1 / s.src.width / 2
+ if isinstance(s.src, mp.GaussianSource)
+ else mp.inf
+ for s in self.sources
+ ]
+ )
fmin = max(0, src_freqs_min)
- fmax = max([s.src.frequency + 1 / s.src.width / 2 if isinstance(s.src, mp.GaussianSource) else 0
- for s in self.sources])
+ fmax = max(
+ [
+ s.src.frequency + 1 / s.src.width / 2
+ if isinstance(s.src, mp.GaussianSource)
+ else 0
+ for s in self.sources
+ ]
+ )
if not components or fmin > fmax:
raise ValueError("Running with k_points requires a 'GaussianSource' source")
@@ -2425,10 +2686,12 @@ def run_k_points(self, t, k_points):
freqs = [complex(m.freq, m.decay) for m in harminv.modes]
if verbosity.meep > 0:
- print("freqs:, {}, {}, {}, {}, ".format(k_index, k.x, k.y, k.z), end='')
- print(', '.join([str(f.real) for f in freqs]))
- print("freqs-im:, {}, {}, {}, {}, ".format(k_index, k.x, k.y, k.z), end='')
- print(', '.join([str(f.imag) for f in freqs]))
+ print("freqs:, {}, {}, {}, {}, ".format(k_index, k.x, k.y, k.z), end="")
+ print(", ".join([str(f.real) for f in freqs]))
+ print(
+ "freqs-im:, {}, {}, {}, {}, ".format(k_index, k.x, k.y, k.z), end=""
+ )
+ print(", ".join([str(f.imag) for f in freqs]))
all_freqs.append(freqs)
@@ -2438,7 +2701,9 @@ def set_epsilon(self, eps):
if self.fields is None:
self.init_sim()
- self.structure.set_epsilon(eps, self.eps_averaging, self.subpixel_tol, self.subpixel_maxeval)
+ self.structure.set_epsilon(
+ eps, self.eps_averaging, self.subpixel_tol, self.subpixel_maxeval
+ )
def add_source(self, src):
if self.fields is None:
@@ -2446,11 +2711,21 @@ def add_source(self, src):
if isinstance(src, IndexedSource):
self.fields.register_src_time(src.src.swigobj)
- self.fields.add_srcdata(src.srcdata, src.src.swigobj, src.num_pts, src.amp_arr, src.needs_boundary_fix)
+ self.fields.add_srcdata(
+ src.srcdata,
+ src.src.swigobj,
+ src.num_pts,
+ src.amp_arr,
+ src.needs_boundary_fix,
+ )
return
- where = Volume(src.center, src.size, dims=self.dimensions,
- is_cylindrical=self.is_cylindrical).swigobj
+ where = Volume(
+ src.center,
+ src.size,
+ dims=self.dimensions,
+ is_cylindrical=self.is_cylindrical,
+ ).swigobj
if isinstance(src, EigenModeSource):
if src.direction < 0:
@@ -2458,8 +2733,12 @@ def add_source(self, src):
else:
direction = src.direction
- eig_vol = Volume(src.eig_lattice_center, src.eig_lattice_size, self.dimensions,
- is_cylindrical=self.is_cylindrical).swigobj
+ eig_vol = Volume(
+ src.eig_lattice_center,
+ src.eig_lattice_size,
+ self.dimensions,
+ is_cylindrical=self.is_cylindrical,
+ ).swigobj
if isinstance(src.eig_band, DiffractedPlanewave):
eig_band = 1
@@ -2474,46 +2753,66 @@ def add_source(self, src):
where,
eig_vol,
eig_band,
- py_v3_to_vec(self.dimensions, src.eig_kpoint, is_cylindrical=self.is_cylindrical),
+ py_v3_to_vec(
+ self.dimensions, src.eig_kpoint, is_cylindrical=self.is_cylindrical
+ ),
src.eig_match_freq,
src.eig_parity,
src.eig_resolution,
src.eig_tolerance,
- src.amplitude
+ src.amplitude,
]
- add_eig_src = functools.partial(self.fields.add_eigenmode_source, *add_eig_src_args)
+ add_eig_src = functools.partial(
+ self.fields.add_eigenmode_source, *add_eig_src_args
+ )
if isinstance(src.eig_band, DiffractedPlanewave):
add_eig_src(src.amp_func, diffractedplanewave)
else:
add_eig_src(src.amp_func)
- elif isinstance (src, GaussianBeamSource):
+ elif isinstance(src, GaussianBeamSource):
gaussianbeam_args = [
- py_v3_to_vec(self.dimensions, src.beam_x0, is_cylindrical=self.is_cylindrical),
- py_v3_to_vec(self.dimensions, src.beam_kdir, is_cylindrical=self.is_cylindrical),
+ py_v3_to_vec(
+ self.dimensions, src.beam_x0, is_cylindrical=self.is_cylindrical
+ ),
+ py_v3_to_vec(
+ self.dimensions, src.beam_kdir, is_cylindrical=self.is_cylindrical
+ ),
src.beam_w0,
src.src.swigobj.frequency().real,
- self.fields.get_eps(py_v3_to_vec(self.dimensions, src.center, self.is_cylindrical)).real,
- self.fields.get_mu(py_v3_to_vec(self.dimensions, src.center, self.is_cylindrical)).real,
- np.array([src.beam_E0.x, src.beam_E0.y, src.beam_E0.z], dtype=np.complex128)
+ self.fields.get_eps(
+ py_v3_to_vec(self.dimensions, src.center, self.is_cylindrical)
+ ).real,
+ self.fields.get_mu(
+ py_v3_to_vec(self.dimensions, src.center, self.is_cylindrical)
+ ).real,
+ np.array(
+ [src.beam_E0.x, src.beam_E0.y, src.beam_E0.z], dtype=np.complex128
+ ),
]
gaussianbeam = mp.gaussianbeam(*gaussianbeam_args)
add_vol_src_args = [src.src.swigobj, where, gaussianbeam]
- add_vol_src = functools.partial(self.fields.add_volume_source, *add_vol_src_args)
+ add_vol_src = functools.partial(
+ self.fields.add_volume_source, *add_vol_src_args
+ )
add_vol_src()
else:
add_vol_src_args = [src.component, src.src.swigobj, where]
- add_vol_src = functools.partial(self.fields.add_volume_source, *add_vol_src_args)
+ add_vol_src = functools.partial(
+ self.fields.add_volume_source, *add_vol_src_args
+ )
if src.amp_func_file:
- fname_dset = src.amp_func_file.rsplit(':', 1)
+ fname_dset = src.amp_func_file.rsplit(":", 1)
if len(fname_dset) != 2:
- err_msg = "Expected a string of the form 'h5filename:dataset'. Got '{}'"
+ err_msg = (
+ "Expected a string of the form 'h5filename:dataset'. Got '{}'"
+ )
raise ValueError(err_msg.format(src.amp_func_file))
fname, dset = fname_dset
- if not fname.endswith('.h5'):
- fname += '.h5'
+ if not fname.endswith(".h5"):
+ fname += ".h5"
add_vol_src(fname, dset, src.amplitude * 1.0)
elif src.amp_func:
@@ -2525,17 +2824,16 @@ def add_source(self, src):
def add_sources(self):
if self.fields is None:
- self.init_sim() # in case only some processes have IndexedSources
+ self.init_sim() # in case only some processes have IndexedSources
for s in self.sources:
self.add_source(s)
- self.fields.require_source_components() # needed by IndexedSource objects
+ self.fields.require_source_components() # needed by IndexedSource objects
def _evaluate_dft_objects(self):
for dft in self.dft_objects:
if dft.swigobj is None:
dft.swigobj = dft.func(*dft.args)
-
def add_dft_fields(self, *args, **kwargs):
"""
`add_dft_fields(cs, fcen, df, nfreq, freq, where=None, center=None, size=None, yee_grid=False, decimation_factor=0, persist=False)` ##sig
@@ -2560,32 +2858,51 @@ def add_dft_fields(self, *args, **kwargs):
components = args[0]
args = fix_dft_args(args, 1)
freq = args[1]
- where = kwargs.get('where', None)
- center = kwargs.get('center', None)
- size = kwargs.get('size', None)
- yee_grid = kwargs.get('yee_grid', False)
- decimation_factor = kwargs.get('decimation_factor', 0)
- persist = kwargs.get('persist', False)
+ where = kwargs.get("where", None)
+ center = kwargs.get("center", None)
+ size = kwargs.get("size", None)
+ yee_grid = kwargs.get("yee_grid", False)
+ decimation_factor = kwargs.get("decimation_factor", 0)
+ persist = kwargs.get("persist", False)
center_v3 = Vector3(*center) if center is not None else None
size_v3 = Vector3(*size) if size is not None else None
use_centered_grid = not yee_grid
- dftf = DftFields(self._add_dft_fields, [
- components, where, center_v3, size_v3, freq, use_centered_grid,
- decimation_factor,persist
- ])
+ dftf = DftFields(
+ self._add_dft_fields,
+ [
+ components,
+ where,
+ center_v3,
+ size_v3,
+ freq,
+ use_centered_grid,
+ decimation_factor,
+ persist,
+ ],
+ )
self.dft_objects.append(dftf)
return dftf
- def _add_dft_fields(self, components, where, center, size, freq,
- use_centered_grid, decimation_factor, persist):
+ def _add_dft_fields(
+ self,
+ components,
+ where,
+ center,
+ size,
+ freq,
+ use_centered_grid,
+ decimation_factor,
+ persist,
+ ):
if self.fields is None:
self.init_sim()
try:
where = self._volume_from_kwargs(where, center, size)
except ValueError:
where = self.fields.total_volume()
- return self.fields.add_dft_fields(components, where, freq,
- use_centered_grid, decimation_factor, persist)
+ return self.fields.add_dft_fields(
+ components, where, freq, use_centered_grid, decimation_factor, persist
+ )
def output_dft(self, dft_fields, fname):
"""
@@ -2597,9 +2914,11 @@ def output_dft(self, dft_fields, fname):
self.init_sim()
if not self.dft_objects:
- raise RuntimeError('DFT monitor dft_fields must be initialized before calling output_dft')
+ raise RuntimeError(
+ "DFT monitor dft_fields must be initialized before calling output_dft"
+ )
- if hasattr(dft_fields, 'swigobj'):
+ if hasattr(dft_fields, "swigobj"):
dft_fields_swigobj = dft_fields.swigobj
else:
dft_fields_swigobj = dft_fields
@@ -2633,17 +2952,20 @@ def add_near2far(self, *args, **kwargs):
args = fix_dft_args(args, 0)
freq = args[0]
near2fars = args[1:]
- nperiods = kwargs.get('nperiods', 1)
- decimation_factor = kwargs.get('decimation_factor', 0)
- n2f = DftNear2Far(self._add_near2far, [freq, nperiods, near2fars, decimation_factor])
+ nperiods = kwargs.get("nperiods", 1)
+ decimation_factor = kwargs.get("decimation_factor", 0)
+ n2f = DftNear2Far(
+ self._add_near2far, [freq, nperiods, near2fars, decimation_factor]
+ )
self.dft_objects.append(n2f)
return n2f
def _add_near2far(self, freq, nperiods, near2fars, decimation_factor):
if self.fields is None:
self.init_sim()
- return self._add_fluxish_stuff(self.fields.add_dft_near2far, freq, near2fars,
- decimation_factor, nperiods)
+ return self._add_fluxish_stuff(
+ self.fields.add_dft_near2far, freq, near2fars, decimation_factor, nperiods
+ )
def add_energy(self, *args, **kwargs):
"""
@@ -2666,7 +2988,7 @@ def add_energy(self, *args, **kwargs):
args = fix_dft_args(args, 0)
freq = args[0]
energys = args[1:]
- decimation_factor = kwargs.get('decimation_factor', 0)
+ decimation_factor = kwargs.get("decimation_factor", 0)
en = DftEnergy(self._add_energy, [freq, energys, decimation_factor])
self.dft_objects.append(en)
return en
@@ -2674,14 +2996,19 @@ def add_energy(self, *args, **kwargs):
def _add_energy(self, freq, energys, decimation_factor):
if self.fields is None:
self.init_sim()
- return self._add_fluxish_stuff(self.fields.add_dft_energy, freq, energys,
- decimation_factor)
+ return self._add_fluxish_stuff(
+ self.fields.add_dft_energy, freq, energys, decimation_factor
+ )
def _display_energy(self, name, func, energys):
if energys:
freqs = get_energy_freqs(energys[0])
if verbosity.meep > 0:
- display_csv(self, "{}-energy".format(name), zip(freqs, *[func(f) for f in energys]))
+ display_csv(
+ self,
+ "{}-energy".format(name),
+ zip(freqs, *[func(f) for f in energys]),
+ )
def display_electric_energy(self, *energys):
"""
@@ -2691,7 +3018,7 @@ def display_electric_energy(self, *energys):
All of the energy should be for the same `fcen`/`df`/`nfreq` or `freq`. The first
column are the frequencies, and subsequent columns are the energy density spectra.
"""
- self._display_energy('electric', get_electric_energy, energys)
+ self._display_energy("electric", get_electric_energy, energys)
def display_magnetic_energy(self, *energys):
"""
@@ -2701,7 +3028,7 @@ def display_magnetic_energy(self, *energys):
All of the energy should be for the same `fcen`/`df`/`nfreq` or `freq`. The first
column are the frequencies, and subsequent columns are the energy density spectra.
"""
- self._display_energy('magnetic', get_magnetic_energy, energys)
+ self._display_energy("magnetic", get_magnetic_energy, energys)
def display_total_energy(self, *energys):
"""
@@ -2711,7 +3038,7 @@ def display_total_energy(self, *energys):
be for the same `fcen`/`df`/`nfreq` or `freq`. The first column are the
frequencies, and subsequent columns are the energy density spectra.
"""
- self._display_energy('total', get_total_energy, energys)
+ self._display_energy("total", get_total_energy, energys)
def load_energy(self, fname, energy):
"""
@@ -2724,7 +3051,7 @@ def load_energy(self, fname, energy):
"""
if self.fields is None:
self.init_sim()
- energy.load_hdf5(self.fields, fname, '', self.get_filename_prefix())
+ energy.load_hdf5(self.fields, fname, "", self.get_filename_prefix())
def save_energy(self, fname, energy):
"""
@@ -2734,7 +3061,7 @@ def save_energy(self, fname, energy):
"""
if self.fields is None:
self.init_sim()
- energy.save_hdf5(self.fields, fname, '', self.get_filename_prefix())
+ energy.save_hdf5(self.fields, fname, "", self.get_filename_prefix())
def load_minus_energy(self, fname, energy):
"""
@@ -2755,7 +3082,10 @@ def get_farfield(self, near2far, x):
$(E_r^1,E_\\phi^1,E_z^1,H_r^1,H_\\phi^1,H_z^1,E_r^2,E_\\phi^2,E_z^2,H_r^2,H_\\phi^2,H_z^2,...)$
in cylindrical coordinates for the frequencies 1,2,...,`nfreq`.
"""
- return mp._get_farfield(near2far.swigobj, py_v3_to_vec(self.dimensions, x, is_cylindrical=self.is_cylindrical))
+ return mp._get_farfield(
+ near2far.swigobj,
+ py_v3_to_vec(self.dimensions, x, is_cylindrical=self.is_cylindrical),
+ )
def get_farfields(self, near2far, resolution, where=None, center=None, size=None):
"""
@@ -2782,15 +3112,17 @@ def get_farfields(self, near2far, resolution, where=None, center=None, size=None
res_hy = complexarray(result[8], result[9])
res_hz = complexarray(result[10], result[11])
return {
- 'Ex': res_ex,
- 'Ey': res_ey,
- 'Ez': res_ez,
- 'Hx': res_hx,
- 'Hy': res_hy,
- 'Hz': res_hz,
+ "Ex": res_ex,
+ "Ey": res_ey,
+ "Ez": res_ez,
+ "Hx": res_hx,
+ "Hy": res_hy,
+ "Hz": res_hz,
}
- def output_farfields(self, near2far, fname, resolution, where=None, center=None, size=None):
+ def output_farfields(
+ self, near2far, fname, resolution, where=None, center=None, size=None
+ ):
"""
Given an HDF5 file name `fname` (does *not* include the `.h5` suffix), a `Volume`
given by `where` (may be 0d, 1d, 2d, or 3d), and a `resolution` (in grid points /
@@ -2821,7 +3153,7 @@ def load_near2far(self, fname, near2far):
"""
if self.fields is None:
self.init_sim()
- near2far.load_hdf5(self.fields, fname, '', self.get_filename_prefix())
+ near2far.load_hdf5(self.fields, fname, "", self.get_filename_prefix())
def save_near2far(self, fname, near2far):
"""
@@ -2831,7 +3163,7 @@ def save_near2far(self, fname, near2far):
"""
if self.fields is None:
self.init_sim()
- near2far.save_hdf5(self.fields, fname, '', self.get_filename_prefix())
+ near2far.save_hdf5(self.fields, fname, "", self.get_filename_prefix())
def load_minus_near2far(self, fname, near2far):
"""
@@ -2891,7 +3223,7 @@ def add_force(self, *args, **kwargs):
args = fix_dft_args(args, 0)
freq = args[0]
forces = args[1:]
- decimation_factor = kwargs.get('decimation_factor', 0)
+ decimation_factor = kwargs.get("decimation_factor", 0)
force = DftForce(self._add_force, [freq, forces, decimation_factor])
self.dft_objects.append(force)
return force
@@ -2899,8 +3231,9 @@ def add_force(self, *args, **kwargs):
def _add_force(self, freq, forces, decimation_factor):
if self.fields is None:
self.init_sim()
- return self._add_fluxish_stuff(self.fields.add_dft_force, freq, forces,
- decimation_factor)
+ return self._add_fluxish_stuff(
+ self.fields.add_dft_force, freq, forces, decimation_factor
+ )
def display_forces(self, *forces):
"""
@@ -2912,7 +3245,9 @@ def display_forces(self, *forces):
"""
force_freqs = get_force_freqs(forces[0])
if verbosity.meep > 0:
- display_csv(self, 'force', zip(force_freqs, *[get_forces(f) for f in forces]))
+ display_csv(
+ self, "force", zip(force_freqs, *[get_forces(f) for f in forces])
+ )
def load_force(self, fname, force):
"""
@@ -2925,7 +3260,7 @@ def load_force(self, fname, force):
"""
if self.fields is None:
self.init_sim()
- force.load_hdf5(self.fields, fname, '', self.get_filename_prefix())
+ force.load_hdf5(self.fields, fname, "", self.get_filename_prefix())
def save_force(self, fname, force):
"""
@@ -2935,7 +3270,7 @@ def save_force(self, fname, force):
"""
if self.fields is None:
self.init_sim()
- force.save_hdf5(self.fields, fname, '', self.get_filename_prefix())
+ force.save_hdf5(self.fields, fname, "", self.get_filename_prefix())
def load_minus_force(self, fname, force):
"""
@@ -2953,9 +3288,11 @@ def get_force_data(self, force):
only useful for passing to `load_force_data` below and should be considered
opaque.
"""
- return ForceData(offdiag1=self.get_dft_data(force.offdiag1),
- offdiag2=self.get_dft_data(force.offdiag2),
- diag=self.get_dft_data(force.diag))
+ return ForceData(
+ offdiag1=self.get_dft_data(force.offdiag1),
+ offdiag2=self.get_dft_data(force.offdiag2),
+ diag=self.get_dft_data(force.diag),
+ )
def load_force_data(self, force, fdata):
"""
@@ -3001,7 +3338,7 @@ def add_flux(self, *args, **kwargs):
args = fix_dft_args(args, 0)
freq = args[0]
fluxes = args[1:]
- decimation_factor = kwargs.get('decimation_factor', 0)
+ decimation_factor = kwargs.get("decimation_factor", 0)
flux = DftFlux(self._add_flux, [freq, fluxes, decimation_factor])
self.dft_objects.append(flux)
return flux
@@ -3009,8 +3346,9 @@ def add_flux(self, *args, **kwargs):
def _add_flux(self, freq, fluxes, decimation_factor):
if self.fields is None:
self.init_sim()
- return self._add_fluxish_stuff(self.fields.add_dft_flux,
- freq, fluxes, decimation_factor)
+ return self._add_fluxish_stuff(
+ self.fields.add_dft_flux, freq, fluxes, decimation_factor
+ )
def add_mode_monitor(self, *args, **kwargs):
"""
@@ -3021,9 +3359,11 @@ def add_mode_monitor(self, *args, **kwargs):
args = fix_dft_args(args, 0)
freq = args[0]
fluxes = args[1:]
- decimation_factor = kwargs.get('decimation_factor', 0)
+ decimation_factor = kwargs.get("decimation_factor", 0)
yee_grid = kwargs.get("yee_grid", False)
- flux = DftFlux(self._add_mode_monitor, [freq, fluxes, yee_grid, decimation_factor])
+ flux = DftFlux(
+ self._add_mode_monitor, [freq, fluxes, yee_grid, decimation_factor]
+ )
self.dft_objects.append(flux)
return flux
@@ -3032,15 +3372,26 @@ def _add_mode_monitor(self, freq, fluxes, yee_grid, decimation_factor):
self.init_sim()
if len(fluxes) != 1:
- raise ValueError("add_mode_monitor expected just one ModeRegion. Got {}".format(len(fluxes)))
+ raise ValueError(
+ "add_mode_monitor expected just one ModeRegion. Got {}".format(
+ len(fluxes)
+ )
+ )
region = fluxes[0]
centered_grid = not yee_grid
- v = mp.Volume(region.center, region.size, dims=self.dimensions, is_cylindrical=self.is_cylindrical)
+ v = mp.Volume(
+ region.center,
+ region.size,
+ dims=self.dimensions,
+ is_cylindrical=self.is_cylindrical,
+ )
d0 = region.direction
d = self.fields.normal_direction(v.swigobj) if d0 < 0 else d0
- return self.fields.add_mode_monitor(d, v.swigobj, freq, centered_grid, decimation_factor)
+ return self.fields.add_mode_monitor(
+ d, v.swigobj, freq, centered_grid, decimation_factor
+ )
def display_fluxes(self, *fluxes):
"""
@@ -3051,7 +3402,11 @@ def display_fluxes(self, *fluxes):
subsequent columns are the flux spectra.
"""
if verbosity.meep > 0:
- display_csv(self, 'flux', zip(get_flux_freqs(fluxes[0]), *[get_fluxes(f) for f in fluxes]))
+ display_csv(
+ self,
+ "flux",
+ zip(get_flux_freqs(fluxes[0]), *[get_fluxes(f) for f in fluxes]),
+ )
def load_flux(self, fname, flux):
"""
@@ -3065,7 +3420,7 @@ def load_flux(self, fname, flux):
if self.fields is None:
self.init_sim()
- flux.load_hdf5(self.fields, fname, '', self.get_filename_prefix())
+ flux.load_hdf5(self.fields, fname, "", self.get_filename_prefix())
load_mode = load_flux
@@ -3078,7 +3433,7 @@ def save_flux(self, fname, flux):
if self.fields is None:
self.init_sim()
- flux.save_hdf5(self.fields, fname, '', self.get_filename_prefix())
+ flux.save_hdf5(self.fields, fname, "", self.get_filename_prefix())
save_mode = save_flux
@@ -3139,7 +3494,7 @@ def flux_in_box(self, d, box=None, center=None, size=None):
construct the appropriate volume for you.
"""
if self.fields is None:
- raise RuntimeError('Fields must be initialized before using flux_in_box')
+ raise RuntimeError("Fields must be initialized before using flux_in_box")
box = self._volume_from_kwargs(box, center, size)
@@ -3158,7 +3513,9 @@ def electric_energy_in_box(self, box=None, center=None, size=None):
volume.
"""
if self.fields is None:
- raise RuntimeError('Fields must be initialized before using electric_energy_in_box')
+ raise RuntimeError(
+ "Fields must be initialized before using electric_energy_in_box"
+ )
box = self._volume_from_kwargs(box, center, size)
@@ -3177,7 +3534,9 @@ def magnetic_energy_in_box(self, box=None, center=None, size=None):
volume.
"""
if self.fields is None:
- raise RuntimeError('Fields must be initialized before using magnetic_energy_in_box')
+ raise RuntimeError(
+ "Fields must be initialized before using magnetic_energy_in_box"
+ )
box = self._volume_from_kwargs(box, center, size)
@@ -3196,7 +3555,9 @@ def field_energy_in_box(self, box=None, center=None, size=None):
volume.
"""
if self.fields is None:
- raise RuntimeError('Fields must be initialized before using field_energy_in_box')
+ raise RuntimeError(
+ "Fields must be initialized before using field_energy_in_box"
+ )
box = self._volume_from_kwargs(box, center, size)
@@ -3228,7 +3589,9 @@ def modal_volume_in_box(self, box=None, center=None, size=None):
via the functions:
"""
if self.fields is None:
- raise RuntimeError('Fields must be initialized before using modal_volume_in_box')
+ raise RuntimeError(
+ "Fields must be initialized before using modal_volume_in_box"
+ )
try:
box = self._volume_from_kwargs(box, center, size)
@@ -3239,35 +3602,50 @@ def modal_volume_in_box(self, box=None, center=None, size=None):
def solve_cw(self, tol=1e-8, maxiters=10000, L=2):
if self.fields is None:
- raise RuntimeError('Fields must be initialized before using solve_cw')
+ raise RuntimeError("Fields must be initialized before using solve_cw")
self._evaluate_dft_objects()
return self.fields.solve_cw(tol, maxiters, L)
- def solve_eigfreq(self, tol=1e-7, maxiters=100,
- guessfreq=None, cwtol=None, cwmaxiters=10000, L=10):
+ def solve_eigfreq(
+ self, tol=1e-7, maxiters=100, guessfreq=None, cwtol=None, cwmaxiters=10000, L=10
+ ):
if self.fields is None:
- raise RuntimeError('Fields must be initialized before using solve_cw')
+ raise RuntimeError("Fields must be initialized before using solve_cw")
if cwtol is None:
- cwtol = tol * 1e-3 # solve CW problems much more accurately than eigenvalue tolerance
+ cwtol = (
+ tol * 1e-3
+ ) # solve CW problems much more accurately than eigenvalue tolerance
self._evaluate_dft_objects()
eigfreq = np.array(0, dtype=np.complex128)
if guessfreq is None:
self.fields.solve_cw(cwtol, cwmaxiters, L, eigfreq, tol, maxiters)
else:
- self.fields.solve_cw(cwtol, cwmaxiters, guessfreq, L, eigfreq, tol, maxiters)
+ self.fields.solve_cw(
+ cwtol, cwmaxiters, guessfreq, L, eigfreq, tol, maxiters
+ )
return eigfreq.item()
- def _add_fluxish_stuff(self, add_dft_stuff, freq, stufflist, decimation_factor, *args):
+ def _add_fluxish_stuff(
+ self, add_dft_stuff, freq, stufflist, decimation_factor, *args
+ ):
vol_list = None
for s in stufflist:
- v = Volume(center=s.center, size=s.size, dims=self.dimensions,
- is_cylindrical=self.is_cylindrical)
+ v = Volume(
+ center=s.center,
+ size=s.size,
+ dims=self.dimensions,
+ is_cylindrical=self.is_cylindrical,
+ )
d0 = s.direction
d = self.fields.normal_direction(v.swigobj) if d0 < 0 else d0
c = mp.direction_component(mp.Sx, d)
- v2 = Volume(center=s.center, size=s.size, dims=self.dimensions,
- is_cylindrical=self.is_cylindrical).swigobj
+ v2 = Volume(
+ center=s.center,
+ size=s.size,
+ dims=self.dimensions,
+ is_cylindrical=self.is_cylindrical,
+ ).swigobj
vol_list = mp.make_volume_list(v2, c, s.weight, vol_list)
stuff = add_dft_stuff(vol_list, freq, decimation_factor, *args)
vol_list.__swig_destroy__(vol_list)
@@ -3276,26 +3654,46 @@ def _add_fluxish_stuff(self, add_dft_stuff, freq, stufflist, decimation_factor,
def output_component(self, c, h5file=None, frequency=0):
if self.fields is None:
- raise RuntimeError("Fields must be initialized before calling output_component")
+ raise RuntimeError(
+ "Fields must be initialized before calling output_component"
+ )
- vol = self.fields.total_volume() if self.output_volume is None else self.output_volume
+ vol = (
+ self.fields.total_volume()
+ if self.output_volume is None
+ else self.output_volume
+ )
h5 = self.output_append_h5 if h5file is None else h5file
append = h5file is None and self.output_append_h5 is not None
- self.fields.output_hdf5(c, vol, h5, append, self.output_single_precision,self.get_filename_prefix(), frequency)
+ self.fields.output_hdf5(
+ c,
+ vol,
+ h5,
+ append,
+ self.output_single_precision,
+ self.get_filename_prefix(),
+ frequency,
+ )
if h5file is None:
- nm = self.fields.h5file_name(mp.component_name(c), self.get_filename_prefix(), True)
+ nm = self.fields.h5file_name(
+ mp.component_name(c), self.get_filename_prefix(), True
+ )
if c == mp.Dielectric:
self.last_eps_filename = nm
self.output_h5_hook(nm)
def output_components(self, fname, *components):
if self.fields is None:
- raise RuntimeError("Fields must be initialized before calling output_component")
+ raise RuntimeError(
+ "Fields must be initialized before calling output_component"
+ )
if self.output_append_h5 is None:
- f = self.fields.open_h5file(fname, mp.h5file.WRITE, self.get_filename_prefix(), True)
+ f = self.fields.open_h5file(
+ fname, mp.h5file.WRITE, self.get_filename_prefix(), True
+ )
else:
f = None
@@ -3305,14 +3703,26 @@ def output_components(self, fname, *components):
f.prevent_deadlock()
if self.output_append_h5 is None:
- self.output_h5_hook(self.fields.h5file_name(fname, self.get_filename_prefix(), True))
+ self.output_h5_hook(
+ self.fields.h5file_name(fname, self.get_filename_prefix(), True)
+ )
def h5topng(self, rm_h5, option, *step_funcs):
opts = "h5topng {}".format(option)
- cmd = re.sub(r'\$EPS', self.last_eps_filename, opts)
+ cmd = re.sub(r"\$EPS", self.last_eps_filename, opts)
return convert_h5(rm_h5, cmd, *step_funcs)
- def get_array(self, component=None, vol=None, center=None, size=None, cmplx=None, arr=None, frequency=0, snap=False):
+ def get_array(
+ self,
+ component=None,
+ vol=None,
+ center=None,
+ size=None,
+ cmplx=None,
+ arr=None,
+ frequency=0,
+ snap=False,
+ ):
"""
Takes as input a subregion of the cell and the field/material component. The
method returns a NumPy array containing values of the field/material at the
@@ -3387,23 +3797,31 @@ def get_array(self, component=None, vol=None, center=None, size=None, cmplx=None
else:
v = self._volume_from_kwargs(vol, center, size)
- _, dirs = mp._get_array_slice_dimensions(self.fields, v, dim_sizes, not snap, snap)
+ _, dirs = mp._get_array_slice_dimensions(
+ self.fields, v, dim_sizes, not snap, snap
+ )
dims = [s for s in dim_sizes if s != 0]
if cmplx is None:
- cmplx = frequency != 0 or (component < mp.Dielectric and not self.fields.is_real)
+ cmplx = frequency != 0 or (
+ component < mp.Dielectric and not self.fields.is_real
+ )
if arr is not None:
if cmplx and not np.iscomplexobj(arr):
- raise ValueError("Requested a complex slice, but provided array of type {}.".format(arr.dtype))
+ raise ValueError(
+ "Requested a complex slice, but provided array of type {}.".format(
+ arr.dtype
+ )
+ )
for a, b in zip(arr.shape, dims):
if a != b:
fmt = "Expected dimensions {}, but got {}"
raise ValueError(fmt.format(dims, arr.shape))
- arr = np.require(arr, requirements=['C', 'W'])
+ arr = np.require(arr, requirements=["C", "W"])
else:
if mp.is_single_precision():
@@ -3435,21 +3853,27 @@ def get_dft_array(self, dft_obj, component, num_freq):
`nfreq` parameter to `add_dft_fields`, `add_flux`, etc.
"""
if not self.dft_objects:
- raise RuntimeError('DFT monitor dft_obj must be initialized before calling get_dft_array')
+ raise RuntimeError(
+ "DFT monitor dft_obj must be initialized before calling get_dft_array"
+ )
- if hasattr(dft_obj, 'swigobj'):
+ if hasattr(dft_obj, "swigobj"):
dft_swigobj = dft_obj.swigobj
else:
dft_swigobj = dft_obj
if type(dft_swigobj) is mp.dft_fields:
- return mp.get_dft_fields_array(self.fields, dft_swigobj, component, num_freq)
+ return mp.get_dft_fields_array(
+ self.fields, dft_swigobj, component, num_freq
+ )
elif type(dft_swigobj) is mp.dft_flux:
return mp.get_dft_flux_array(self.fields, dft_swigobj, component, num_freq)
elif type(dft_swigobj) is mp.dft_force:
return mp.get_dft_force_array(self.fields, dft_swigobj, component, num_freq)
elif type(dft_swigobj) is mp.dft_near2far:
- return mp.get_dft_near2far_array(self.fields, dft_swigobj, component, num_freq)
+ return mp.get_dft_near2far_array(
+ self.fields, dft_swigobj, component, num_freq
+ )
else:
raise ValueError("Invalid type of dft object: {}".format(dft_swigobj))
@@ -3467,12 +3891,15 @@ def get_source(self, component, vol=None, center=None, size=None):
dim_sizes = np.zeros(3, dtype=np.uintp)
mp._get_array_slice_dimensions(self.fields, v, dim_sizes, True, False)
dims = [s for s in dim_sizes if s != 0]
- arr = np.zeros(dims, dtype=np.complex64 if mp.is_single_precision() else np.complex128)
+ arr = np.zeros(
+ dims, dtype=np.complex64 if mp.is_single_precision() else np.complex128
+ )
self.fields.get_source_slice(v, component, arr)
return arr
- def get_array_metadata(self, vol=None, center=None, size=None, dft_cell=None,
- return_pw=False):
+ def get_array_metadata(
+ self, vol=None, center=None, size=None, dft_cell=None, return_pw=False
+ ):
"""
This routine provides geometric information useful for interpreting the arrays
returned by `get_array` or `get_dft_array` for the spatial region defined by `vol`
@@ -3518,13 +3945,15 @@ def get_array_metadata(self, vol=None, center=None, size=None, dft_cell=None,
offset, tics = 0, []
for n in range(3):
N = int(xyzw_vector[offset])
- tics.append( xyzw_vector[offset+1:offset+1+N] )
- offset += 1+N
- wshape = [len(t) for t in tics if len(t)>1]
+ tics.append(xyzw_vector[offset + 1 : offset + 1 + N])
+ offset += 1 + N
+ wshape = [len(t) for t in tics if len(t) > 1]
weights = np.reshape(xyzw_vector[offset:], wshape)
if return_pw:
- points=[ mp.Vector3(x,y,z) for x in tics[0] for y in tics[1] for z in tics[2] ]
- return points,weights
+ points = [
+ mp.Vector3(x, y, z) for x in tics[0] for y in tics[1] for z in tics[2]
+ ]
+ return points, weights
return tuple(tics) + (weights,)
def get_array_slice_dimensions(self, component, vol=None, center=None, size=None):
@@ -3543,14 +3972,25 @@ def get_array_slice_dimensions(self, component, vol=None, center=None, size=None
v = self._volume_from_kwargs(vol, center, size)
dim_sizes = np.zeros(3, dtype=np.uintp)
corners = []
- _,_ = mp._get_array_slice_dimensions(self.fields, v, dim_sizes, False, False, component, corners)
- dim_sizes[dim_sizes==0] = 1
+ _, _ = mp._get_array_slice_dimensions(
+ self.fields, v, dim_sizes, False, False, component, corners
+ )
+ dim_sizes[dim_sizes == 0] = 1
min_corner = corners[0]
max_corner = corners[1]
return dim_sizes, min_corner, max_corner
- def get_eigenmode_coefficients(self, flux, bands, eig_parity=mp.NO_PARITY, eig_vol=None,
- eig_resolution=0, eig_tolerance=1e-12, kpoint_func=None, direction=mp.AUTOMATIC):
+ def get_eigenmode_coefficients(
+ self,
+ flux,
+ bands,
+ eig_parity=mp.NO_PARITY,
+ eig_vol=None,
+ eig_resolution=0,
+ eig_tolerance=1e-12,
+ kpoint_func=None,
+ direction=mp.AUTOMATIC,
+ ):
"""
Given a flux object and list of band indices `bands` or `DiffractedPlanewave`, return a `namedtuple` with the
following fields:
@@ -3566,7 +4006,9 @@ def get_eigenmode_coefficients(self, flux, bands, eig_parity=mp.NO_PARITY, eig_v
calculations.
"""
if self.fields is None:
- raise ValueError("Fields must be initialized before calling get_eigenmode_coefficients")
+ raise ValueError(
+ "Fields must be initialized before calling get_eigenmode_coefficients"
+ )
if eig_vol is None:
eig_vol = flux.where
else:
@@ -3575,7 +4017,7 @@ def get_eigenmode_coefficients(self, flux, bands, eig_parity=mp.NO_PARITY, eig_v
direction = flux.normal_direction
try:
- bands_list_range = isinstance(bands, (list,range))
+ bands_list_range = isinstance(bands, (list, range))
except TypeError:
bands_list_range = isinstance(bands, list)
@@ -3597,7 +4039,7 @@ def get_eigenmode_coefficients(self, flux, bands, eig_parity=mp.NO_PARITY, eig_v
vgrp,
kpoint_func,
cscale,
- direction
+ direction,
)
elif isinstance(bands, DiffractedPlanewave):
num_bands = 1
@@ -3618,15 +4060,34 @@ def get_eigenmode_coefficients(self, flux, bands, eig_parity=mp.NO_PARITY, eig_v
vgrp,
kpoint_func,
cscale,
- direction
+ direction,
)
else:
- raise TypeError("get_eigenmode_coefficients: bands must be either a list or DiffractedPlanewave object")
+ raise TypeError(
+ "get_eigenmode_coefficients: bands must be either a list or DiffractedPlanewave object"
+ )
- return EigCoeffsResult(np.reshape(coeffs, (num_bands, flux.freq.size(), 2)), vgrp, kpoints, kdom, cscale)
+ return EigCoeffsResult(
+ np.reshape(coeffs, (num_bands, flux.freq.size(), 2)),
+ vgrp,
+ kpoints,
+ kdom,
+ cscale,
+ )
- def get_eigenmode(self, frequency, direction, where, band_num, kpoint, eig_vol=None, match_frequency=True,
- parity=mp.NO_PARITY, resolution=0, eigensolver_tol=1e-12):
+ def get_eigenmode(
+ self,
+ frequency,
+ direction,
+ where,
+ band_num,
+ kpoint,
+ eig_vol=None,
+ match_frequency=True,
+ parity=mp.NO_PARITY,
+ resolution=0,
+ eigensolver_tol=1e-12,
+ ):
"""
The parameters of this routine are the same as that of
`get_eigenmode_coefficients` or `EigenModeSource`, but this function returns an
@@ -3659,12 +4120,30 @@ def get_eigenmode(self, frequency, direction, where, band_num, kpoint, eig_vol=N
swig_kpoint = mp.vec(kpoint.x, kpoint.y, kpoint.z)
kdom = np.zeros(3)
- emdata = mp._get_eigenmode(self.fields, frequency, direction, where, eig_vol, band_num, swig_kpoint,
- match_frequency, parity, resolution, eigensolver_tol, kdom)
+ emdata = mp._get_eigenmode(
+ self.fields,
+ frequency,
+ direction,
+ where,
+ eig_vol,
+ band_num,
+ swig_kpoint,
+ match_frequency,
+ parity,
+ resolution,
+ eigensolver_tol,
+ kdom,
+ )
Gk = mp._get_eigenmode_Gk(emdata)
- return EigenmodeData(emdata.band_num, emdata.frequency, emdata.group_velocity, Gk,
- emdata, mp.Vector3(kdom[0], kdom[1], kdom[2]))
+ return EigenmodeData(
+ emdata.band_num,
+ emdata.frequency,
+ emdata.group_velocity,
+ Gk,
+ emdata,
+ mp.Vector3(kdom[0], kdom[1], kdom[2]),
+ )
def output_field_function(self, name, cs, func, real_only=False, h5file=None):
"""
@@ -3675,16 +4154,28 @@ def output_field_function(self, name, cs, func, real_only=False, h5file=None):
`real_only` is True, only outputs the real part of `func`.
"""
if self.fields is None:
- raise RuntimeError("Fields must be initialized before calling output_field_function")
+ raise RuntimeError(
+ "Fields must be initialized before calling output_field_function"
+ )
ov = self.output_volume if self.output_volume else self.fields.total_volume()
h5 = self.output_append_h5 if h5file is None else h5file
append = h5file is None and self.output_append_h5 is not None
- self.fields.output_hdf5(name, [cs, func], ov, h5, append, self.output_single_precision,
- self.get_filename_prefix(), real_only)
+ self.fields.output_hdf5(
+ name,
+ [cs, func],
+ ov,
+ h5,
+ append,
+ self.output_single_precision,
+ self.get_filename_prefix(),
+ real_only,
+ )
if h5file is None:
- self.output_h5_hook(self.fields.h5file_name(name, self.get_filename_prefix(), True))
+ self.output_h5_hook(
+ self.fields.h5file_name(name, self.get_filename_prefix(), True)
+ )
def _get_field_function_volume(self, where=None, center=None, size=None):
try:
@@ -3714,7 +4205,9 @@ def integrate_field_function(self, cs, func, where=None, center=None, size=None)
where = self._get_field_function_volume(where, center, size)
return self.fields.integrate([cs, func], where)
- def integrate2_field_function(self, fields2, cs1, cs2, func, where=None, center=None, size=None):
+ def integrate2_field_function(
+ self, fields2, cs1, cs2, func, where=None, center=None, size=None
+ ):
"""
Similar to `integrate_field_function`, but takes additional parameters `fields2`
and `cs2`. `fields2` is a `meep::fields*` object similar to the global `fields`
@@ -3776,7 +4269,9 @@ def change_k_point(self, k):
self.k_point = k
if self.fields:
- needs_complex_fields = not (not self.k_point or self.k_point == mp.Vector3())
+ needs_complex_fields = not (
+ not self.k_point or self.k_point == mp.Vector3()
+ )
if needs_complex_fields and self.fields.is_real:
self.fields = None
@@ -3784,7 +4279,9 @@ def change_k_point(self, k):
self.init_sim()
else:
if self.k_point:
- self.fields.use_bloch(py_v3_to_vec(self.dimensions, self.k_point, self.is_cylindrical))
+ self.fields.use_bloch(
+ py_v3_to_vec(self.dimensions, self.k_point, self.is_cylindrical)
+ )
def change_sources(self, new_sources):
"""
@@ -3822,13 +4319,13 @@ def restart_fields(self):
else:
self._is_initialized = False
self.init_sim()
-
+
def clear_dft_monitors(self):
"""
Remove all of the dft monitors from the simulation.
"""
for m in self.dft_objects:
- if not (isinstance(m,DftFields) and (m.chunks) and (m.chunks.persist)):
+ if not (isinstance(m, DftFields) and (m.chunks) and (m.chunks.persist)):
m.remove()
self.fields.clear_dft_monitors()
@@ -3855,8 +4352,8 @@ def run(self, *step_funcs, **kwargs):
returns `True`. Like `until` above, `until_after_sources` can take a list of
stopping conditions.
"""
- until = kwargs.pop('until', None)
- until_after_sources = kwargs.pop('until_after_sources', None)
+ until = kwargs.pop("until", None)
+ until_after_sources = kwargs.pop("until_after_sources", None)
if self.fields is None:
self.init_sim()
@@ -3931,26 +4428,26 @@ def output_times(self, fname):
for each column and one row per process.
"""
if self.fields:
- if not fname.endswith('.csv'):
- fname += '.csv'
+ if not fname.endswith(".csv"):
+ fname += ".csv"
self.fields.output_times(fname)
- def get_epsilon(self,frequency=0,snap=False):
- return self.get_array(component=mp.Dielectric,frequency=frequency,snap=snap)
+ def get_epsilon(self, frequency=0, snap=False):
+ return self.get_array(component=mp.Dielectric, frequency=frequency, snap=snap)
- def get_mu(self,frequency=0,snap=False):
- return self.get_array(component=mp.Permeability,frequency=frequency,snap=snap)
+ def get_mu(self, frequency=0, snap=False):
+ return self.get_array(component=mp.Permeability, frequency=frequency, snap=snap)
- def get_hpwr(self,snap=False):
- return self.get_array(component=mp.H_EnergyDensity,snap=snap)
+ def get_hpwr(self, snap=False):
+ return self.get_array(component=mp.H_EnergyDensity, snap=snap)
- def get_dpwr(self,snap=False):
- return self.get_array(component=mp.D_EnergyDensity,snap=snap)
+ def get_dpwr(self, snap=False):
+ return self.get_array(component=mp.D_EnergyDensity, snap=snap)
- def get_tot_pwr(self,snap=False):
- return self.get_array(component=mp.EnergyDensity,snap=snap)
+ def get_tot_pwr(self, snap=False):
+ return self.get_array(component=mp.EnergyDensity, snap=snap)
- def get_hfield(self,snap=False):
+ def get_hfield(self, snap=False):
if self.is_cylindrical:
r = self.get_array(mp.Hr, cmplx=not self.fields.is_real, snap=snap)
p = self.get_array(mp.Hp, cmplx=not self.fields.is_real, snap=snap)
@@ -3961,22 +4458,22 @@ def get_hfield(self,snap=False):
z = self.get_array(mp.Hz, cmplx=not self.fields.is_real, snap=snap)
return np.stack([x, y, z], axis=-1)
- def get_hfield_x(self,snap=False):
+ def get_hfield_x(self, snap=False):
return self.get_array(mp.Hx, cmplx=not self.fields.is_real, snap=snap)
- def get_hfield_y(self,snap=False):
+ def get_hfield_y(self, snap=False):
return self.get_array(mp.Hy, cmplx=not self.fields.is_real, snap=snap)
- def get_hfield_z(self,snap=False):
+ def get_hfield_z(self, snap=False):
return self.get_array(mp.Hz, cmplx=not self.fields.is_real, snap=snap)
- def get_hfield_r(self,snap=False):
+ def get_hfield_r(self, snap=False):
return self.get_array(mp.Hr, cmplx=not self.fields.is_real, snap=snap)
- def get_hfield_p(self,snap=False):
+ def get_hfield_p(self, snap=False):
return self.get_array(mp.Hp, cmplx=not self.fields.is_real, snap=snap)
- def get_bfield(self,snap=False):
+ def get_bfield(self, snap=False):
if self.is_cylindrical:
r = self.get_array(mp.Br, cmplx=not self.fields.is_real, snap=snap)
p = self.get_array(mp.Bp, cmplx=not self.fields.is_real, snap=snap)
@@ -3987,22 +4484,22 @@ def get_bfield(self,snap=False):
z = self.get_array(mp.Bz, cmplx=not self.fields.is_real, snap=snap)
return np.stack([x, y, z], axis=-1)
- def get_bfield_x(self,snap=False):
+ def get_bfield_x(self, snap=False):
return self.get_array(mp.Bx, cmplx=not self.fields.is_real, snap=snap)
- def get_bfield_y(self,snap=False):
+ def get_bfield_y(self, snap=False):
return self.get_array(mp.By, cmplx=not self.fields.is_real, snap=snap)
- def get_bfield_z(self,snap=False):
+ def get_bfield_z(self, snap=False):
return self.get_array(mp.Bz, cmplx=not self.fields.is_real, snap=snap)
- def get_bfield_r(self,snap=False):
+ def get_bfield_r(self, snap=False):
return self.get_array(mp.Br, cmplx=not self.fields.is_real, snap=snap)
- def get_bfield_p(self,snap=False):
+ def get_bfield_p(self, snap=False):
return self.get_array(mp.Bp, cmplx=not self.fields.is_real, snap=snap)
- def get_efield(self,snap=False):
+ def get_efield(self, snap=False):
if self.is_cylindrical:
r = self.get_array(mp.Er, cmplx=not self.fields.is_real, snap=snap)
p = self.get_array(mp.Ep, cmplx=not self.fields.is_real, snap=snap)
@@ -4013,22 +4510,22 @@ def get_efield(self,snap=False):
z = self.get_array(mp.Ez, cmplx=not self.fields.is_real, snap=snap)
return np.stack([x, y, z], axis=-1)
- def get_efield_x(self,snap=False):
+ def get_efield_x(self, snap=False):
return self.get_array(mp.Ex, cmplx=not self.fields.is_real, snap=snap)
- def get_efield_y(self,snap=False):
+ def get_efield_y(self, snap=False):
return self.get_array(mp.Ey, cmplx=not self.fields.is_real, snap=snap)
- def get_efield_z(self,snap=False):
+ def get_efield_z(self, snap=False):
return self.get_array(mp.Ez, cmplx=not self.fields.is_real, snap=snap)
- def get_efield_r(self,snap=False):
+ def get_efield_r(self, snap=False):
return self.get_array(mp.Er, cmplx=not self.fields.is_real, snap=snap)
- def get_efield_p(self,snap=False):
+ def get_efield_p(self, snap=False):
return self.get_array(mp.Ep, cmplx=not self.fields.is_real, snap=snap)
- def get_dfield(self,snap=False):
+ def get_dfield(self, snap=False):
if self.is_cylindrical:
r = self.get_array(mp.Dr, cmplx=not self.fields.is_real, snap=snap)
p = self.get_array(mp.Dp, cmplx=not self.fields.is_real, snap=snap)
@@ -4039,22 +4536,22 @@ def get_dfield(self,snap=False):
z = self.get_array(mp.Dz, cmplx=not self.fields.is_real, snap=snap)
return np.stack([x, y, z], axis=-1)
- def get_dfield_x(self,snap=False):
+ def get_dfield_x(self, snap=False):
return self.get_array(mp.Dx, cmplx=not self.fields.is_real, snap=snap)
- def get_dfield_y(self,snap=False):
+ def get_dfield_y(self, snap=False):
return self.get_array(mp.Dy, cmplx=not self.fields.is_real, snap=snap)
- def get_dfield_z(self,snap=False):
+ def get_dfield_z(self, snap=False):
return self.get_array(mp.Dz, cmplx=not self.fields.is_real, snap=snap)
- def get_dfield_r(self,snap=False):
+ def get_dfield_r(self, snap=False):
return self.get_array(mp.Dr, cmplx=not self.fields.is_real, snap=snap)
- def get_dfield_p(self,snap=False):
+ def get_dfield_p(self, snap=False):
return self.get_array(mp.Dp, cmplx=not self.fields.is_real, snap=snap)
- def get_sfield(self,snap=False):
+ def get_sfield(self, snap=False):
if self.is_cylindrical:
r = self.get_array(mp.Sr, cmplx=not self.fields.is_real, snap=snap)
p = self.get_array(mp.Sp, cmplx=not self.fields.is_real, snap=snap)
@@ -4065,29 +4562,39 @@ def get_sfield(self,snap=False):
z = self.get_array(mp.Sz, cmplx=not self.fields.is_real, snap=snap)
return np.stack([x, y, z], axis=-1)
- def get_sfield_x(self,snap=False):
+ def get_sfield_x(self, snap=False):
return self.get_array(mp.Sx, cmplx=not self.fields.is_real, snap=snap)
- def get_sfield_y(self,snap=False):
+ def get_sfield_y(self, snap=False):
return self.get_array(mp.Sy, cmplx=not self.fields.is_real, snap=snap)
- def get_sfield_z(self,snap=False):
+ def get_sfield_z(self, snap=False):
return self.get_array(mp.Sz, cmplx=not self.fields.is_real, snap=snap)
- def get_sfield_r(self,snap=False):
+ def get_sfield_r(self, snap=False):
return self.get_array(mp.Sr, cmplx=not self.fields.is_real, snap=snap)
- def get_sfield_p(self,snap=False):
+ def get_sfield_p(self, snap=False):
return self.get_array(mp.Sp, cmplx=not self.fields.is_real, snap=snap)
-
- def plot2D(self, ax=None, output_plane=None, fields=None, labels=False,
- eps_parameters=None, boundary_parameters=None,
- source_parameters=None, monitor_parameters=None,
- field_parameters=None, frequency=None,
- plot_eps_flag=True, plot_sources_flag=True,
- plot_monitors_flag=True, plot_boundaries_flag=True,
- **kwargs):
+ def plot2D(
+ self,
+ ax=None,
+ output_plane=None,
+ fields=None,
+ labels=False,
+ eps_parameters=None,
+ boundary_parameters=None,
+ source_parameters=None,
+ monitor_parameters=None,
+ field_parameters=None,
+ frequency=None,
+ plot_eps_flag=True,
+ plot_sources_flag=True,
+ plot_monitors_flag=True,
+ plot_boundaries_flag=True,
+ **kwargs,
+ ):
"""
Plots a 2D cross section of the simulation domain using `matplotlib`. The plot
includes the geometry, boundary layers, sources, and monitors. Fields can also be
@@ -4176,22 +4683,24 @@ def plot2D(self, ax=None, output_plane=None, fields=None, labels=False,
- `post_process=np.real`: post processing function to apply to fields (must be
a function object)
"""
- return vis.plot2D(self,
- ax=ax,
- output_plane=output_plane,
- fields=fields,
- labels=labels,
- eps_parameters=eps_parameters,
- boundary_parameters=boundary_parameters,
- source_parameters=source_parameters,
- monitor_parameters=monitor_parameters,
- field_parameters=field_parameters,
- frequency=frequency,
- plot_eps_flag=plot_eps_flag,
- plot_sources_flag=plot_sources_flag,
- plot_monitors_flag=plot_monitors_flag,
- plot_boundaries_flag=plot_boundaries_flag,
- **kwargs)
+ return vis.plot2D(
+ self,
+ ax=ax,
+ output_plane=output_plane,
+ fields=fields,
+ labels=labels,
+ eps_parameters=eps_parameters,
+ boundary_parameters=boundary_parameters,
+ source_parameters=source_parameters,
+ monitor_parameters=monitor_parameters,
+ field_parameters=field_parameters,
+ frequency=frequency,
+ plot_eps_flag=plot_eps_flag,
+ plot_sources_flag=plot_sources_flag,
+ plot_monitors_flag=plot_monitors_flag,
+ plot_boundaries_flag=plot_boundaries_flag,
+ **kwargs,
+ )
def plot_fields(self, **kwargs):
return vis.plot_fields(self, **kwargs)
@@ -4253,20 +4762,26 @@ def _create_boundary_region_from_boundary_layers(boundary_layers, gv):
loop_stop_bi = mp.Low
while b != loop_stop_bi:
- br += mp.boundary_region(*(boundary_region_args + [layer.direction, b]))
+ 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]))
+ br += mp.boundary_region(
+ *(boundary_region_args + [layer.direction, layer.side])
+ )
return br
# Private step functions
+
def _combine_step_funcs(*step_funcs):
def _combine(sim, todo):
for func in step_funcs:
_eval_step_func(sim, func, todo)
+
return _combine
@@ -4274,9 +4789,11 @@ def _eval_step_func(sim, func, todo):
num_args = get_num_args(func)
if num_args != 1 and num_args != 2:
- raise ValueError("Step function '{}'' requires 1 or 2 arguments".format(func.__name__))
+ raise ValueError(
+ "Step function '{}'' requires 1 or 2 arguments".format(func.__name__)
+ )
elif num_args == 1:
- if todo == 'step':
+ if todo == "step":
func(sim)
elif num_args == 2:
func(sim, todo)
@@ -4284,24 +4801,28 @@ def _eval_step_func(sim, func, todo):
def _when_true_funcs(cond, *step_funcs):
def _true(sim, todo):
- if todo == 'finish' or cond(sim):
+ if todo == "finish" or cond(sim):
for f in step_funcs:
_eval_step_func(sim, f, todo)
+
return _true
# Public step functions
+
def after_sources(*step_funcs):
"""
Given zero or more step functions, evaluates them only for times after all of the
sources have turned off.
"""
+
def _after_sources(sim, todo):
time = sim.fields.last_source_time()
if sim.round_time() >= time:
for func in step_funcs:
_eval_step_func(sim, func, todo)
+
return _after_sources
@@ -4310,11 +4831,13 @@ def after_sources_and_time(t, *step_funcs):
Given zero or more step functions, evaluates them only for times after all of the
sources have turned off, plus an additional $T$ time units have elapsed.
"""
+
def _after_s_and_t(sim, todo):
time = sim.fields.last_source_time() + t - sim.round_time()
if sim.round_time() >= time:
for func in step_funcs:
_eval_step_func(sim, func, todo)
+
return _after_s_and_t
@@ -4323,8 +4846,10 @@ def after_time(t, *step_funcs):
Given zero or more step functions, evaluates them only for times after a $T$ time
units have elapsed from the start of the run.
"""
+
def _after_t(sim):
return sim.round_time() >= t
+
return _when_true_funcs(_after_t, *step_funcs)
@@ -4333,13 +4858,14 @@ def at_beginning(*step_funcs):
Given zero or more step functions, evaluates them only once, at the beginning of the
run.
"""
- closure = {'done': False}
+ closure = {"done": False}
def _beg(sim, todo):
- if not closure['done']:
+ if not closure["done"]:
for f in step_funcs:
_eval_step_func(sim, f, todo)
- closure['done'] = True
+ closure["done"] = True
+
return _beg
@@ -4347,12 +4873,14 @@ def at_end(*step_funcs):
"""
Given zero or more step functions, evaluates them only once, at the end of the run.
"""
+
def _end(sim, todo):
- if todo == 'finish':
+ if todo == "finish":
for func in step_funcs:
- _eval_step_func(sim, func, 'step')
+ _eval_step_func(sim, func, "step")
for func in step_funcs:
- _eval_step_func(sim, func, 'finish')
+ _eval_step_func(sim, func, "finish")
+
return _end
@@ -4361,14 +4889,15 @@ def at_every(dt, *step_funcs):
Given zero or more step functions, evaluates them at every time interval of $dT$ units
(rounded up to the next time step).
"""
- closure = {'tlast': 0.0}
+ closure = {"tlast": 0.0}
def _every(sim, todo):
t = sim.round_time()
- if todo == 'finish' or t >= closure['tlast'] + dt + (-0.5 * sim.fields.dt):
+ if todo == "finish" or t >= closure["tlast"] + dt + (-0.5 * sim.fields.dt):
for func in step_funcs:
_eval_step_func(sim, func, todo)
- closure['tlast'] = t
+ closure["tlast"] = t
+
return _every
@@ -4377,13 +4906,14 @@ def at_time(t, *step_funcs):
Given zero or more step functions, evaluates them only once, after a $T$ time units
have elapsed from the start of the run.
"""
- closure = {'done': False}
+ closure = {"done": False}
def _at_time(sim, todo):
- if not closure['done'] or todo == 'finish':
+ if not closure["done"] or todo == "finish":
for f in step_funcs:
_eval_step_func(sim, f, todo)
- closure['done'] = closure['done'] or todo == 'step'
+ closure["done"] = closure["done"] or todo == "step"
+
return after_time(t, _at_time)
@@ -4392,8 +4922,10 @@ def before_time(t, *step_funcs):
Given zero or more step functions, evaluates them only for times before a $T$ time
units have elapsed from the start of the run.
"""
+
def _before_t(sim):
return sim.round_time() < t
+
return _when_true_funcs(_before_t, *step_funcs)
@@ -4402,17 +4934,18 @@ def during_sources(*step_funcs):
Given zero or more step functions, evaluates them only for times *before* all of the
sources have turned off.
"""
- closure = {'finished': False}
+ closure = {"finished": False}
def _during_sources(sim, todo):
time = sim.fields.last_source_time()
if sim.round_time() < time:
for func in step_funcs:
- _eval_step_func(sim, func, 'step')
- elif closure['finished'] is False:
+ _eval_step_func(sim, func, "step")
+ elif closure["finished"] is False:
for func in step_funcs:
- _eval_step_func(sim, func, 'finish')
- closure['finished'] = True
+ _eval_step_func(sim, func, "finish")
+ closure["finished"] = True
+
return _during_sources
@@ -4422,7 +4955,7 @@ def in_volume(v, *step_funcs):
output a subset (or a superset) of the cell, corresponding to the `meep::volume* v`
(created by the `Volume` function).
"""
- closure = {'cur_eps': ''}
+ closure = {"cur_eps": ""}
def _in_volume(sim, todo):
v_save = sim.output_volume
@@ -4430,15 +4963,16 @@ def _in_volume(sim, todo):
sim.output_volume = sim._fit_volume_to_simulation(v).swigobj
- if closure['cur_eps']:
- sim.last_eps_filename = closure['cur_eps']
+ if closure["cur_eps"]:
+ sim.last_eps_filename = closure["cur_eps"]
for func in step_funcs:
_eval_step_func(sim, func, todo)
- closure['cur_eps'] = sim.last_eps_filename
+ closure["cur_eps"] = sim.last_eps_filename
sim.output_volume = v_save
if eps_save:
sim.last_eps_filename = eps_save
+
return _in_volume
@@ -4458,21 +4992,24 @@ def to_appended(fname, *step_funcs):
an `.h5` suffix and the current filename prefix). They append by adding an *extra
dimension* to their datasets, corresponding to time.
"""
- closure = {'h5': None}
+ closure = {"h5": None}
def _to_appended(sim, todo):
- if closure['h5'] is None:
- closure['h5'] = sim.fields.open_h5file(fname, mp.h5file.WRITE, sim.get_filename_prefix())
+ if closure["h5"] is None:
+ closure["h5"] = sim.fields.open_h5file(
+ fname, mp.h5file.WRITE, sim.get_filename_prefix()
+ )
h5save = sim.output_append_h5
- sim.output_append_h5 = closure['h5']
+ sim.output_append_h5 = closure["h5"]
for func in step_funcs:
_eval_step_func(sim, func, todo)
- if todo == 'finish':
- closure['h5'] = None
+ if todo == "finish":
+ closure["h5"] = None
sim.output_h5_hook(sim.fields.h5file_name(fname, sim.get_filename_prefix()))
sim.output_append_h5 = h5save
+
return _to_appended
@@ -4496,26 +5033,34 @@ def stop_when_fields_decayed(dt=None, c=None, pt=None, decay_by=None):
raise ValueError("dt, c, pt, and decay_by are all required.")
closure = {
- 'max_abs': 0,
- 'cur_max': 0,
- 't0': 0,
+ "max_abs": 0,
+ "cur_max": 0,
+ "t0": 0,
}
def _stop(sim):
fabs = abs(sim.get_field_point(c, pt)) * abs(sim.get_field_point(c, pt))
- closure['cur_max'] = max(closure['cur_max'], fabs)
+ closure["cur_max"] = max(closure["cur_max"], fabs)
- if sim.round_time() <= dt + closure['t0']:
+ if sim.round_time() <= dt + closure["t0"]:
return False
else:
- old_cur = closure['cur_max']
- closure['cur_max'] = 0
- closure['t0'] = sim.round_time()
- closure['max_abs'] = max(closure['max_abs'], old_cur)
- if closure['max_abs'] != 0 and verbosity.meep > 0:
+ old_cur = closure["cur_max"]
+ closure["cur_max"] = 0
+ closure["t0"] = sim.round_time()
+ closure["max_abs"] = max(closure["max_abs"], old_cur)
+ if closure["max_abs"] != 0 and verbosity.meep > 0:
fmt = "field decay(t = {}): {} / {} = {}"
- print(fmt.format(sim.meep_time(), old_cur, closure['max_abs'], old_cur / closure['max_abs']))
- return old_cur <= closure['max_abs'] * decay_by
+ print(
+ fmt.format(
+ sim.meep_time(),
+ old_cur,
+ closure["max_abs"],
+ old_cur / closure["max_abs"],
+ )
+ )
+ return old_cur <= closure["max_abs"] * decay_by
+
return _stop
@@ -4536,22 +5081,30 @@ def stop_when_energy_decayed(dt=None, decay_by=None):
raise ValueError("dt and decay_by are all required.")
closure = {
- 'max_abs': 0,
- 't0': 0,
+ "max_abs": 0,
+ "t0": 0,
}
def _stop(sim):
- if sim.round_time() <= dt + closure['t0']:
+ if sim.round_time() <= dt + closure["t0"]:
return False
else:
cell_volume = mp.Volume(center=sim.geometry_center, size=sim.cell_size)
cur_abs = abs(sim.field_energy_in_box(box=cell_volume))
- closure['max_abs'] = max(closure['max_abs'], cur_abs)
- closure['t0'] = sim.round_time()
- if closure['max_abs'] != 0 and verbosity.meep > 0:
+ closure["max_abs"] = max(closure["max_abs"], cur_abs)
+ closure["t0"] = sim.round_time()
+ if closure["max_abs"] != 0 and verbosity.meep > 0:
fmt = "energy decay(t = {}): {} / {} = {}"
- print(fmt.format(sim.meep_time(), cur_abs, closure['max_abs'], cur_abs / closure['max_abs']))
- return cur_abs <= closure['max_abs'] * decay_by
+ print(
+ fmt.format(
+ sim.meep_time(),
+ cur_abs,
+ closure["max_abs"],
+ cur_abs / closure["max_abs"],
+ )
+ )
+ return cur_abs <= closure["max_abs"] * decay_by
+
return _stop
@@ -4561,10 +5114,12 @@ def stop_after_walltime(t):
parameter. Stops the simulation after `t` seconds of wall time have passed.
"""
start = mp.wall_time()
+
def _stop_after_walltime(sim):
if mp.wall_time() - start > t:
return True
return False
+
return _stop_after_walltime
@@ -4589,6 +5144,7 @@ def _stop(sim):
return _stop
+
def stop_when_dft_decayed(tol=1e-11, minimum_run_time=0, maximum_run_time=None):
"""
Return a `condition` function, suitable for passing to `Simulation.run` as the `until`
@@ -4601,33 +5157,42 @@ def stop_when_dft_decayed(tol=1e-11, minimum_run_time=0, maximum_run_time=None):
"""
# Record data in closure so that we can persistently edit
- closure = {'previous_fields':0, 't0':0, 'dt':0, 'maxchange':0}
+ closure = {"previous_fields": 0, "t0": 0, "dt": 0, "maxchange": 0}
+
def _stop(_sim):
if _sim.fields.t == 0:
- closure['dt'] = max(1/_sim.fields.dft_maxfreq()/_sim.fields.dt,_sim.fields.max_decimation())
+ closure["dt"] = max(
+ 1 / _sim.fields.dft_maxfreq() / _sim.fields.dt,
+ _sim.fields.max_decimation(),
+ )
if maximum_run_time and _sim.round_time() > maximum_run_time:
return True
- elif _sim.fields.t <= closure['dt'] + closure['t0']:
+ elif _sim.fields.t <= closure["dt"] + closure["t0"]:
return False
else:
- previous_fields = closure['previous_fields']
- current_fields = _sim.fields.dft_norm()
- change = np.abs(previous_fields-current_fields)
- closure['maxchange'] = max(closure['maxchange'],change)
+ previous_fields = closure["previous_fields"]
+ current_fields = _sim.fields.dft_norm()
+ change = np.abs(previous_fields - current_fields)
+ closure["maxchange"] = max(closure["maxchange"], change)
if previous_fields == 0:
- closure['previous_fields'] = current_fields
+ closure["previous_fields"] = current_fields
return False
- closure['previous_fields'] = current_fields
- closure['t0'] = _sim.fields.t
+ closure["previous_fields"] = current_fields
+ closure["t0"] = _sim.fields.t
if verbosity.meep > 1:
fmt = "DFT fields decay(t = {0:0.2f}): {1:0.4e}"
- print(fmt.format(_sim.meep_time(), np.real(change/closure['maxchange'])))
- return (change/closure['maxchange']) <= tol and _sim.round_time() >= minimum_run_time
+ print(
+ fmt.format(_sim.meep_time(), np.real(change / closure["maxchange"]))
+ )
+ return (
+ change / closure["maxchange"]
+ ) <= tol and _sim.round_time() >= minimum_run_time
return _stop
+
def combine_step_funcs(*step_funcs):
"""
Given zero or more step functions, return a new step function that on each step calls
@@ -4643,11 +5208,13 @@ def synchronized_magnetic(*step_funcs):
electric field. See [Synchronizing the Magnetic and Electric
Fields](Synchronizing_the_Magnetic_and_Electric_Fields.md).
"""
+
def _sync(sim, todo):
sim.fields.synchronize_magnetic_fields()
for f in step_funcs:
_eval_step_func(sim, f, todo)
sim.fields.restore_magnetic_fields()
+
return _sync
@@ -4672,6 +5239,7 @@ def with_prefix(pre, *step_funcs):
Given zero or more step functions, modifies any output functions among them to prepend
the string `prefix` to the file names (much like `filename_prefix`, above).
"""
+
def _with_prefix(sim, todo):
saved_pre = sim.filename_prefix
sim.filename_prefix = pre + sim.get_filename_prefix()
@@ -4679,6 +5247,7 @@ def _with_prefix(sim, todo):
for f in step_funcs:
_eval_step_func(sim, f, todo)
sim.filename_prefix = saved_pre
+
return _with_prefix
@@ -4689,11 +5258,11 @@ def display_csv(sim, name, data):
def display_progress(t0, t, dt):
t_0 = mp.wall_time()
- closure = {'tlast': mp.wall_time()}
+ closure = {"tlast": mp.wall_time()}
def _disp(sim):
t1 = mp.wall_time()
- if t1 - closure['tlast'] >= dt:
+ if t1 - closure["tlast"] >= dt:
msg_fmt = "Meep progress: {}/{} = {:.1f}% done in {:.1f}s, {:.1f}s to go"
val1 = sim.meep_time() - t0
val2 = val1 / (0.01 * t)
@@ -4706,14 +5275,14 @@ def _disp(sim):
if verbosity.meep > 0:
print(msg_fmt.format(val1, t, val2, val3, val4))
- closure['tlast'] = t1
+ closure["tlast"] = t1
return _disp
def data_to_str(d):
if type(d) is complex:
- sign = '+' if d.imag >= 0 else ''
+ sign = "+" if d.imag >= 0 else ""
return "{}{}{}i".format(d.real, sign, d.imag)
else:
return str(d)
@@ -4725,11 +5294,10 @@ def display_run_data(sim, data_name, data):
else:
data_str = [data_to_str(data)]
if verbosity.meep > 0:
- print("{}{}:, {}".format(data_name, sim.run_index, ', '.join(data_str)))
+ print("{}{}:, {}".format(data_name, sim.run_index, ", ".join(data_str)))
def convert_h5(rm_h5, convert_cmd, *step_funcs):
-
def convert(fname):
if mp.my_rank() == 0:
cmd = convert_cmd.split()
@@ -4771,24 +5339,27 @@ def output_png(compnt, options, rm_h5=True):
By default, `output_png` deletes the `.h5` file when it is done. To preserve the `.h5`
file requires `output_png(component, h5topng_options, rm_h5=False)`.
"""
- closure = {'maxabs': 0.0}
+ closure = {"maxabs": 0.0}
def _output_png(sim, todo):
- if todo == 'step':
+ if todo == "step":
if sim.output_volume is None:
ov = sim.fields.total_volume()
else:
ov = sim.output_volume
- closure['maxabs'] = max(closure['maxabs'],
- sim.fields.max_abs(compnt, ov))
- convert = sim.h5topng(rm_h5, "-M {} {}".format(closure['maxabs'], options),
- lambda sim: sim.output_component(compnt))
+ closure["maxabs"] = max(closure["maxabs"], sim.fields.max_abs(compnt, ov))
+ convert = sim.h5topng(
+ rm_h5,
+ "-M {} {}".format(closure["maxabs"], options),
+ lambda sim: sim.output_component(compnt),
+ )
convert(sim, todo)
+
return _output_png
-def output_epsilon(sim=None,*step_func_args,**kwargs):
+def output_epsilon(sim=None, *step_func_args, **kwargs):
"""
Given a frequency `frequency`, (provided as a keyword argument) output $\\varepsilon$ (relative
permittivity); for an anisotropic $\\varepsilon$ tensor the output is the [harmonic
@@ -4802,11 +5373,11 @@ def output_epsilon(sim=None,*step_func_args,**kwargs):
if sim is None:
return lambda sim: mp.output_epsilon(sim, *step_func_args, **kwargs)
- frequency = kwargs.pop('frequency', 0.0)
- sim.output_component(mp.Dielectric,frequency=frequency)
+ frequency = kwargs.pop("frequency", 0.0)
+ sim.output_component(mp.Dielectric, frequency=frequency)
-def output_mu(sim=None,*step_func_args,**kwargs):
+def output_mu(sim=None, *step_func_args, **kwargs):
"""
Given a frequency `frequency`, (provided as a keyword argument) output $\\mu$ (relative
permeability); for an anisotropic $\\mu$ tensor the output is the [harmonic
@@ -4820,8 +5391,8 @@ def output_mu(sim=None,*step_func_args,**kwargs):
if sim is None:
return lambda sim: mp.output_mu(sim, *step_func_args, **kwargs)
- frequency = kwargs.pop('frequency', 0.0)
- sim.output_component(mp.Permeability,frequency=frequency)
+ frequency = kwargs.pop("frequency", 0.0)
+ sim.output_component(mp.Permeability, frequency=frequency)
def output_hpwr(sim):
@@ -4853,7 +5424,7 @@ def output_hfield(sim):
Outputs *all* the components of the field *h*, (magnetic) to an HDF5 file. That is,
the different components are stored as different datasets within the *same* file.
"""
- sim.output_components('h', mp.Hx, mp.Hy, mp.Hz, mp.Hr, mp.Hp)
+ sim.output_components("h", mp.Hx, mp.Hy, mp.Hz, mp.Hr, mp.Hp)
def output_hfield_x(sim):
@@ -4906,7 +5477,7 @@ def output_bfield(sim):
Outputs *all* the components of the field *b*, (magnetic) to an HDF5 file. That is,
the different components are stored as different datasets within the *same* file.
"""
- sim.output_components('b', mp.Bx, mp.By, mp.Bz, mp.Br, mp.Bp)
+ sim.output_components("b", mp.Bx, mp.By, mp.Bz, mp.Br, mp.Bp)
def output_bfield_x(sim):
@@ -4962,7 +5533,7 @@ def output_efield(sim):
Outputs *all* the components of the field *e*, (electric) to an HDF5 file. That is,
the different components are stored as different datasets within the *same* file.
"""
- sim.output_components('e', mp.Ex, mp.Ey, mp.Ez, mp.Er, mp.Ep)
+ sim.output_components("e", mp.Ex, mp.Ey, mp.Ez, mp.Er, mp.Ep)
def output_efield_x(sim):
@@ -5018,7 +5589,7 @@ def output_dfield(sim):
Outputs *all* the components of the field *d*, (displacement) to an HDF5 file. That
is, the different components are stored as different datasets within the *same* file.
"""
- sim.output_components('d', mp.Dx, mp.Dy, mp.Dz, mp.Dr, mp.Dp)
+ sim.output_components("d", mp.Dx, mp.Dy, mp.Dz, mp.Dr, mp.Dp)
def output_dfield_x(sim):
@@ -5077,7 +5648,7 @@ def output_poynting(sim):
accurately. See [Synchronizing the Magnetic and Electric
Fields](Synchronizing_the_Magnetic_and_Electric_Fields.md).
"""
- sim.output_components('s', mp.Sx, mp.Sy, mp.Sz, mp.Sr, mp.Sp)
+ sim.output_components("s", mp.Sx, mp.Sy, mp.Sz, mp.Sr, mp.Sp)
def output_poynting_x(sim):
@@ -5108,7 +5679,7 @@ def output_sfield(sim):
compute it more accurately. See [Synchronizing the Magnetic and Electric
Fields](Synchronizing_the_Magnetic_and_Electric_Fields.md).
"""
- sim.output_components('s', mp.Sx, mp.Sy, mp.Sz, mp.Sr, mp.Sp)
+ sim.output_components("s", mp.Sx, mp.Sy, mp.Sz, mp.Sr, mp.Sp)
def output_sfield_x(sim):
@@ -5188,17 +5759,19 @@ def dft_ldos(*args, **kwargs):
is also stored in the `ldos_data` variable of the `Simulation` object after the `run`
is complete.
"""
- ldos = kwargs.get('ldos', None)
+ ldos = kwargs.get("ldos", None)
if ldos is None:
args = fix_dft_args(args, 0)
freq = args[0]
- if isinstance(freq, (np.ndarray,list)):
+ if isinstance(freq, (np.ndarray, list)):
ldos = mp._dft_ldos(freq)
else:
- raise TypeError("dft_ldos only accepts freq_min,freq_max,nfreq (3 numbers) or freq (array/list) or ldos (keyword argument)")
+ raise TypeError(
+ "dft_ldos only accepts freq_min,freq_max,nfreq (3 numbers) or freq (array/list) or ldos (keyword argument)"
+ )
def _ldos(sim, todo):
- if todo == 'step':
+ if todo == "step":
ldos.update(sim.fields)
else:
sim.ldos_data = mp._dft_ldos_ldos(ldos)
@@ -5206,7 +5779,8 @@ def _ldos(sim, todo):
sim.ldos_Jdata = mp._dft_ldos_J(ldos)
sim.ldos_scale = ldos.overall_scale()
if verbosity.meep > 0:
- display_csv(sim, 'ldos', zip(mp.get_ldos_freqs(ldos), sim.ldos_data))
+ display_csv(sim, "ldos", zip(mp.get_ldos_freqs(ldos), sim.ldos_data))
+
return _ldos
@@ -5370,6 +5944,7 @@ def get_center_and_size(vol):
size = v3rmax - v3rmin
return center, size
+
def GDSII_layers(fname):
"""
Returns a list of integer-valued layer indices for the layers present in
@@ -5382,6 +5957,7 @@ def GDSII_layers(fname):
"""
return list(mp.get_GDSII_layers(fname))
+
def GDSII_vol(fname, layer, zmin, zmax):
"""
Returns a `mp.Volume` read from a GDSII file `fname` on layer number `layer` with
@@ -5419,6 +5995,7 @@ def complexarray(re, im):
z += re
return z
+
def quiet(quietval=True):
"""
Meep ordinarily prints various diagnostic and progress information to standard output.
@@ -5429,52 +6006,61 @@ def quiet(quietval=True):
This function is deprecated, please use the [Verbosity](#verbosity) class instead.
"""
verbosity(int(not quietval))
- warnings.warn("quiet has been deprecated; use the Verbosity class instead", RuntimeWarning)
+ warnings.warn(
+ "quiet has been deprecated; use the Verbosity class instead", RuntimeWarning
+ )
def get_num_groups():
# Lazy import
from mpi4py import MPI
+
comm = MPI.COMM_WORLD
return comm.allreduce(int(mp.my_rank() == 0), op=MPI.SUM)
+
def get_group_masters():
# Lazy import
from mpi4py import MPI
+
comm = MPI.COMM_WORLD
num_workers = comm.Get_size()
num_groups = mp.get_num_groups
# Check if current worker is a group master
is_group_master = True if mp.my_rank() == 0 else False
- group_master_idx = np.zeros((num_workers,),dtype=np.bool)
+ group_master_idx = np.zeros((num_workers,), dtype=np.bool)
# Formulate send and receive packets
- smsg = [np.array([is_group_master]),([1]*num_workers, [0]*num_workers)]
- rmsg = [group_master_idx,([1]*num_workers, list(range(num_workers)))]
+ smsg = [np.array([is_group_master]), ([1] * num_workers, [0] * num_workers)]
+ rmsg = [group_master_idx, ([1] * num_workers, list(range(num_workers)))]
# Send and receive
comm.Alltoallv(smsg, rmsg)
# get rank of each group master
- group_masters = np.arange(num_workers)[group_master_idx] # rank index of each group leader
+ group_masters = np.arange(num_workers)[
+ group_master_idx
+ ] # rank index of each group leader
return group_masters
+
def merge_subgroup_data(data):
# Lazy import
from mpi4py import MPI
+
comm = MPI.COMM_WORLD
num_workers = comm.Get_size()
num_groups = get_num_groups()
# Initialize new input and output datasets
- input=np.array(data,copy=True,order='F')
- shape=input.shape
- size=input.size
- out_shape=shape + (num_groups,)
- output=np.zeros(out_shape,input.dtype,order='F')
+ input = np.array(data, copy=True, order="F")
+ shape = input.shape
+ size = input.size
+ out_shape = shape + (num_groups,)
+ output = np.zeros(out_shape, input.dtype, order="F")
# Get group masters
group_masters = get_group_masters()
@@ -5492,7 +6078,7 @@ def merge_subgroup_data(data):
rdsp = [0] * num_workers
buf_idx = 0
for grpidx in group_masters:
- rdsp[grpidx] = buf_idx # offset group leader worker by size of each count
+ rdsp[grpidx] = buf_idx # offset group leader worker by size of each count
buf_idx += size
# Formulate send and receive packets
@@ -5504,12 +6090,22 @@ def merge_subgroup_data(data):
return output
+
class BinaryPartition(object):
"""
Binary tree class used for specifying a cell partition of arbitrary sized chunks for use as the
`chunk_layout` parameter of the `Simulation` class object.
"""
- def __init__(self, data=None, split_dir=None, split_pos=None, left=None, right=None, proc_id=None):
+
+ def __init__(
+ self,
+ data=None,
+ split_dir=None,
+ split_pos=None,
+ left=None,
+ right=None,
+ proc_id=None,
+ ):
"""
The constructor accepts three separate groups of arguments: (1) `data`: a list of lists where each
list entry is either (a) a node defined as `[ (split_dir,split_pos), left, right ]` for which `split_dir`
@@ -5527,18 +6123,26 @@ def __init__(self, data=None, split_dir=None, split_pos=None, left=None, right=N
self.left = None
self.right = None
if data is not None:
- if isinstance(data,list) and len(data) == 3:
- if isinstance(data[0],tuple) and len(data[0]) == 2:
+ if isinstance(data, list) and len(data) == 3:
+ if isinstance(data[0], tuple) and len(data[0]) == 2:
self.split_dir = data[0][0]
self.split_pos = data[0][1]
else:
- raise ValueError("expecting 2-tuple (split_dir,split_pos) but got {}".format(data[0]))
+ raise ValueError(
+ "expecting 2-tuple (split_dir,split_pos) but got {}".format(
+ data[0]
+ )
+ )
self.left = BinaryPartition(data=data[1])
self.right = BinaryPartition(data=data[2])
- elif isinstance(data,int):
+ elif isinstance(data, int):
self.proc_id = data
else:
- raise ValueError("expecting list [(split_dir,split_pos), left, right] or int (proc_id) but got {}".format(data))
+ raise ValueError(
+ "expecting list [(split_dir,split_pos), left, right] or int (proc_id) but got {}".format(
+ data
+ )
+ )
elif split_dir is not None:
self.split_dir = split_dir
self.split_pos = split_pos
@@ -5555,10 +6159,10 @@ def print(self):
def _print(self, prefix="", is_root=True):
# pointers
- ptr_l = ' ├L─ '
- ext_l = ' │ '
- ptr_r = ' └R─ '
- ext_r = ' '
+ ptr_l = " ├L─ "
+ ext_l = " │ "
+ ptr_r = " └R─ "
+ ext_r = " "
if is_root:
yield prefix + self._node_info()
@@ -5566,28 +6170,23 @@ def _print(self, prefix="", is_root=True):
if self.left is not None and self.right is not None:
yield prefix + ptr_l + self.left._node_info()
if self.left.left is not None and self.left.right is not None:
- yield from self.left._print(prefix=prefix+ext_l, is_root=False)
+ yield from self.left._print(prefix=prefix + ext_l, is_root=False)
yield prefix + ptr_r + self.right._node_info()
if self.right.left is not None and self.right.right is not None:
- yield from self.right._print(prefix=prefix+ext_r, is_root=False)
+ yield from self.right._print(prefix=prefix + ext_r, is_root=False)
def _node_info(self) -> str:
if self.proc_id is not None:
return "".format(self.proc_id)
else:
- split_dir_str = {
- mp.X: "X",
- mp.Y: "Y",
- mp.Z: "Z"
- }[self.split_dir]
- return "".format(
- split_dir_str, self.split_pos)
-
- def _numchunks(self,bp):
+ split_dir_str = {mp.X: "X", mp.Y: "Y", mp.Z: "Z"}[self.split_dir]
+ return "".format(split_dir_str, self.split_pos)
+
+ def _numchunks(self, bp):
if bp is None:
return 0
- return max(self._numchunks(bp.left)+self._numchunks(bp.right), 1)
+ return max(self._numchunks(bp.left) + self._numchunks(bp.right), 1)
def numchunks(self):
return self._numchunks(self)
diff --git a/python/solver.py b/python/solver.py
index 75f260812..62777c316 100644
--- a/python/solver.py
+++ b/python/solver.py
@@ -14,6 +14,7 @@
from meep.geom import init_do_averaging
from meep.simulation import get_num_args
from meep.verbosity_mgr import Verbosity
+
try:
basestring
except NameError:
@@ -23,10 +24,10 @@
U_PROD = 1
U_MEAN = 2
-verbosity = Verbosity(mp.cvar, 'meep', 1)
+verbosity = Verbosity(mp.cvar, "meep", 1)
-class MPBArray(np.ndarray):
+class MPBArray(np.ndarray):
def __new__(cls, input_array, lattice, kpoint=None, bloch_phase=False):
# Input array is an already formed ndarray instance
# We first cast to be our class type
@@ -64,40 +65,41 @@ def __array_finalize__(self, obj):
# method sees all creation of default objects - with the
# MPBArray.__new__ constructor, but also with
# arr.view(MPBArray).
- self.lattice = getattr(obj, 'lattice', None)
- self.kpoint = getattr(obj, 'kpoint', None)
- self.bloch_phase = getattr(obj, 'bloch_phase', False)
+ self.lattice = getattr(obj, "lattice", None)
+ self.kpoint = getattr(obj, "kpoint", None)
+ self.bloch_phase = getattr(obj, "bloch_phase", False)
class ModeSolver(object):
-
- def __init__(self,
- resolution=10,
- is_negative_epsilon_ok=False,
- eigensolver_flops=0,
- eigensolver_flags=68,
- use_simple_preconditioner=False,
- force_mu=False,
- mu_input_file='',
- epsilon_input_file='',
- mesh_size=3,
- target_freq=0.0,
- tolerance=1.0e-7,
- num_bands=1,
- k_points=None,
- ensure_periodicity=True,
- geometry=None,
- geometry_lattice=mp.Lattice(),
- geometry_center=mp.Vector3(0, 0, 0),
- default_material=mp.Medium(epsilon=1),
- dimensions=3,
- random_fields=False,
- filename_prefix='',
- deterministic=False,
- verbose=False,
- optimize_grid_size=True,
- eigensolver_nwork=3,
- eigensolver_block_size=-11):
+ def __init__(
+ self,
+ resolution=10,
+ is_negative_epsilon_ok=False,
+ eigensolver_flops=0,
+ eigensolver_flags=68,
+ use_simple_preconditioner=False,
+ force_mu=False,
+ mu_input_file="",
+ epsilon_input_file="",
+ mesh_size=3,
+ target_freq=0.0,
+ tolerance=1.0e-7,
+ num_bands=1,
+ k_points=None,
+ ensure_periodicity=True,
+ geometry=None,
+ geometry_lattice=mp.Lattice(),
+ geometry_center=mp.Vector3(0, 0, 0),
+ default_material=mp.Medium(epsilon=1),
+ dimensions=3,
+ random_fields=False,
+ filename_prefix="",
+ deterministic=False,
+ verbose=False,
+ optimize_grid_size=True,
+ eigensolver_nwork=3,
+ eigensolver_block_size=-11,
+ ):
self.mode_solver = None
self.resolution = resolution
@@ -110,7 +112,7 @@ def __init__(self,
self.random_fields = random_fields
self.filename_prefix = filename_prefix
self.optimize_grid_size = optimize_grid_size
- self.parity = ''
+ self.parity = ""
self.iterations = 0
self.all_freqs = None
self.freqs = []
@@ -123,7 +125,9 @@ def __init__(self,
grid_size = self._adjust_grid_size()
- if type(self.default_material) is not mp.Medium and callable(self.default_material):
+ if type(self.default_material) is not mp.Medium and callable(
+ self.default_material
+ ):
init_do_averaging(self.default_material)
self.default_material.eps = False
@@ -323,10 +327,14 @@ def allow_negative_epsilon(self):
def get_filename_prefix(self):
if self.filename_prefix:
- return f'{self.filename_prefix}-'
+ return f"{self.filename_prefix}-"
_, filename = os.path.split(sys.argv[0])
- return '' if filename in ['ipykernel_launcher.py', '__main__.py'] else re.sub(r'\.py$', '', filename) + '-'
+ return (
+ ""
+ if filename in ["ipykernel_launcher.py", "__main__.py"]
+ else re.sub(r"\.py$", "", filename) + "-"
+ )
def get_freqs(self):
return self.mode_solver.get_freqs()
@@ -358,7 +366,7 @@ def ExH(e, h):
flat_res = res.ravel()
self.mode_solver.set_curfield_cmplx(flat_res)
- self.mode_solver.set_curfield_type('v')
+ self.mode_solver.set_curfield_type("v")
arr = np.reshape(res, dims)
return MPBArray(arr, self.get_lattice(), self.current_k)
@@ -372,16 +380,16 @@ def get_mu(self):
return self.get_curfield_as_array(False)
def get_bfield(self, which_band, bloch_phase=True):
- return self._get_field('b', which_band, bloch_phase)
+ return self._get_field("b", which_band, bloch_phase)
def get_efield(self, which_band, bloch_phase=True):
- return self._get_field('e', which_band, bloch_phase)
+ return self._get_field("e", which_band, bloch_phase)
def get_dfield(self, which_band, bloch_phase=True):
- return self._get_field('d', which_band, bloch_phase)
+ return self._get_field("d", which_band, bloch_phase)
def get_hfield(self, which_band, bloch_phase=True):
- return self._get_field('h', which_band, bloch_phase)
+ return self._get_field("h", which_band, bloch_phase)
def get_charge_density(self, which_band, bloch_phase=True):
self.get_efield(which_band, bloch_phase)
@@ -389,15 +397,17 @@ def get_charge_density(self, which_band, bloch_phase=True):
def _get_field(self, f, band, bloch_phase):
if self.mode_solver is None:
- raise ValueError("Must call a run function before attempting to get a field")
+ raise ValueError(
+ "Must call a run function before attempting to get a field"
+ )
- if f == 'b':
+ if f == "b":
self.mode_solver.get_bfield(band)
- elif f == 'd':
+ elif f == "d":
self.mode_solver.get_dfield(band)
- elif f == 'e':
+ elif f == "e":
self.mode_solver.get_efield(band)
- elif f == 'h':
+ elif f == "h":
self.mode_solver.get_hfield(band)
dims = self.mode_solver.get_dims()
@@ -414,7 +424,9 @@ def _get_field(self, f, band, bloch_phase):
self.mode_solver.get_curfield_cmplx(arr)
arr = np.reshape(arr, dims)
- return MPBArray(arr, self.get_lattice(), self.current_k, bloch_phase=bloch_phase)
+ return MPBArray(
+ arr, self.get_lattice(), self.current_k, bloch_phase=bloch_phase
+ )
def get_curfield_as_array(self, bloch_phase=True):
dims = self.mode_solver.get_dims()
@@ -422,7 +434,9 @@ def get_curfield_as_array(self, bloch_phase=True):
self.mode_solver.get_curfield(arr)
arr = np.reshape(arr, dims)
- return MPBArray(arr, self.get_lattice(), self.current_k, bloch_phase=bloch_phase)
+ return MPBArray(
+ arr, self.get_lattice(), self.current_k, bloch_phase=bloch_phase
+ )
def get_dpwr(self, band):
self.get_dfield(band, False)
@@ -459,7 +473,7 @@ def get_tot_pwr(self, which_band):
tot_pwr = epwr + hpwr
self.mode_solver.set_curfield(tot_pwr.ravel())
- self.mode_solver.set_curfield_type('R')
+ self.mode_solver.set_curfield_type("R")
return MPBArray(tot_pwr, self.get_lattice(), self.current_k, bloch_phase=False)
@@ -473,13 +487,13 @@ def set_eigenvectors(self, ev, first_band):
self.mode_solver.set_eigenvectors(first_band - 1, ev.flatten())
def save_eigenvectors(self, filename):
- with h5py.File(filename, 'w') as f:
+ with h5py.File(filename, "w") as f:
ev = self.get_eigenvectors(1, self.num_bands)
- f['rawdata'] = ev
+ f["rawdata"] = ev
def load_eigenvectors(self, filename):
- with h5py.File(filename, 'r') as f:
- ev = f['rawdata'][()]
+ with h5py.File(filename, "r") as f:
+ ev = f["rawdata"][()]
self.set_eigenvectors(ev, 1)
self.mode_solver.curfield_reset()
@@ -489,7 +503,6 @@ def load_eigenvectors(self, filename):
# Here, we update this data with a new list of band frequencies, and return the new
# data. If band-range-data is null or too short, the needed entries will be created.
def update_band_range_data(self, brd, freqs, kpoint):
-
def update_brd(brd, freqs, br_start):
if not freqs:
return br_start + brd
@@ -514,23 +527,30 @@ def output_band_range_data(self, br_data):
# Output any gaps in the given band ranges, and return a list of the gaps as
# a list of (percent, freq-min, freq-max) tuples.
def output_gaps(self, br_data):
-
def ogaps(br_cur, br_rest, i, gaps):
if not br_rest:
gaps = list(reversed(gaps))
- return [(gaps[i + 2], gaps[i + 1], gaps[i]) for i in range(0, len(gaps), 3)]
+ return [
+ (gaps[i + 2], gaps[i + 1], gaps[i]) for i in range(0, len(gaps), 3)
+ ]
else:
br_rest_min_f = br_rest[0][0][0]
br_cur_max_f = br_cur[1][0]
if br_cur_max_f >= br_rest_min_f:
return ogaps(br_rest[0], br_rest[1:], i + 1, gaps)
- gap_size = ((200 * (br_rest_min_f - br_cur_max_f)) /
- (br_rest_min_f + br_cur_max_f))
+ gap_size = (200 * (br_rest_min_f - br_cur_max_f)) / (
+ br_rest_min_f + br_cur_max_f
+ )
if verbosity.mpb > 0:
fmt = "Gap from band {} ({}) to band {} ({}), {}%"
print(fmt.format(i, br_cur_max_f, i + 1, br_rest_min_f, gap_size))
- return ogaps(br_rest[0], br_rest[1:], i + 1,
- [gap_size, br_cur_max_f, br_rest_min_f] + gaps)
+ return ogaps(
+ br_rest[0],
+ br_rest[1:],
+ i + 1,
+ [gap_size, br_cur_max_f, br_rest_min_f] + gaps,
+ )
+
if not br_data:
return []
else:
@@ -554,7 +574,6 @@ def retrieve_gap(self, lower_band):
# given by index (in 0..num-1), along with the index in L of the first
# element of the piece, as a list: [first-index, piece-of-L]
def list_split(self, l, num, index):
-
def list_sub(l, start, length, index, rest):
if not l:
return list(reversed(rest))
@@ -604,15 +623,15 @@ def output_field_to_file(self, component, fname_prefix):
curfield_type = self.mode_solver.get_curfield_type()
output_k = self.mode_solver.get_output_k()
- if curfield_type in 'Rv':
+ if curfield_type in "Rv":
# Generic scalar/vector field. Don't know k
output_k = [0, 0, 0]
- if curfield_type in 'dhbecv':
+ if curfield_type in "dhbecv":
self._output_vector_field(curfield_type, fname_prefix, output_k, component)
- elif curfield_type == 'C':
+ elif curfield_type == "C":
self._output_complex_scalar_field(fname_prefix, output_k)
- elif curfield_type in 'DHBnmR':
+ elif curfield_type in "DHBnmR":
self._output_scalar_field(curfield_type, fname_prefix)
else:
raise ValueError(f"Unkown field type: {curfield_type}")
@@ -620,23 +639,20 @@ def output_field_to_file(self, component, fname_prefix):
self.mode_solver.curfield_reset()
def _output_complex_scalar_field(self, fname_prefix, output_k):
- curfield_type = 'C'
+ curfield_type = "C"
kpoint_index = self.mode_solver.get_kpoint_index()
curfield_band = self.mode_solver.curfield_band
fname = "{}.k{:02d}.b{:02d}".format(curfield_type, kpoint_index, curfield_band)
description = "{} field, kpoint {}, band {}, freq={:.6g}".format(
- curfield_type,
- kpoint_index,
- curfield_band,
- self.freqs[curfield_band - 1]
+ curfield_type, kpoint_index, curfield_band, self.freqs[curfield_band - 1]
)
fname = self._create_fname(fname, fname_prefix, True)
if verbosity.mpb > 0:
print(f"Outputting complex scalar field to {fname}...")
- with h5py.File(fname, 'w') as f:
- f['description'] = description.encode()
- f['Bloch wavevector'] = np.array(output_k)
+ with h5py.File(fname, "w") as f:
+ f["description"] = description.encode()
+ f["Bloch wavevector"] = np.array(output_k)
self._write_lattice_vectors(f)
dims = self.mode_solver.get_dims()
@@ -645,11 +661,11 @@ def _output_complex_scalar_field(self, fname_prefix, output_k):
reshaped_field = field.reshape(dims)
- f['c.r'] = np.real(reshaped_field)
- f['c.i'] = np.imag(reshaped_field)
+ f["c.r"] = np.real(reshaped_field)
+ f["c.i"] = np.imag(reshaped_field)
def _output_vector_field(self, curfield_type, fname_prefix, output_k, component):
- components = ['x', 'y', 'z']
+ components = ["x", "y", "z"]
kpoint_index = self.mode_solver.get_kpoint_index()
curfield_band = self.mode_solver.curfield_band
fname = "{}.k{:02d}.b{:02d}".format(curfield_type, kpoint_index, curfield_band)
@@ -658,22 +674,19 @@ def _output_vector_field(self, curfield_type, fname_prefix, output_k, component)
fname += f".{components[component]}"
description = "{} field, kpoint {}, band {}, freq={:.6g}".format(
- curfield_type,
- kpoint_index,
- curfield_band,
- self.freqs[curfield_band - 1]
+ curfield_type, kpoint_index, curfield_band, self.freqs[curfield_band - 1]
)
fname = self._create_fname(fname, fname_prefix, True)
if verbosity.mpb > 0:
print(f"Outputting fields to {fname}...")
- with h5py.File(fname, 'w') as f:
- f['description'] = description.encode()
- f['Bloch wavevector'] = np.array(output_k)
+ with h5py.File(fname, "w") as f:
+ f["description"] = description.encode()
+ f["Bloch wavevector"] = np.array(output_k)
self._write_lattice_vectors(f)
- if curfield_type != 'v':
+ if curfield_type != "v":
self.mode_solver.multiply_bloch_phase()
for c_idx, c in enumerate(components):
@@ -691,36 +704,41 @@ def _output_vector_field(self, curfield_type, fname_prefix, output_k, component)
f[name] = np.imag(component_field)
def _output_scalar_field(self, curfield_type, fname_prefix):
- components = ['x', 'y', 'z']
-
- if curfield_type == 'n':
- fname = 'epsilon'
- description = 'dielectric function, epsilon'
- elif curfield_type == 'm':
- fname = 'mu'
- description = 'permeability mu'
+ components = ["x", "y", "z"]
+
+ if curfield_type == "n":
+ fname = "epsilon"
+ description = "dielectric function, epsilon"
+ elif curfield_type == "m":
+ fname = "mu"
+ description = "permeability mu"
else:
kpoint_index = self.mode_solver.get_kpoint_index()
curfield_band = self.mode_solver.curfield_band
- fname = "{}pwr.k{:02d}.b{:02d}".format(curfield_type.lower(),
- kpoint_index, curfield_band)
+ fname = "{}pwr.k{:02d}.b{:02d}".format(
+ curfield_type.lower(), kpoint_index, curfield_band
+ )
descr_fmt = "{} field energy density, kpoint {}, band {}, freq={:.6g}"
- description = descr_fmt.format(curfield_type, kpoint_index, curfield_band,
- self.freqs[curfield_band - 1])
-
- parity_suffix = curfield_type not in 'mn'
+ description = descr_fmt.format(
+ curfield_type,
+ kpoint_index,
+ curfield_band,
+ self.freqs[curfield_band - 1],
+ )
+
+ parity_suffix = curfield_type not in "mn"
fname = self._create_fname(fname, fname_prefix, parity_suffix)
if verbosity.mpb > 0:
print(f"Outputting {fname}...")
- with h5py.File(fname, 'w') as f:
- f['description'] = description.encode()
- self._create_h5_dataset(f, 'data')
+ with h5py.File(fname, "w") as f:
+ f["description"] = description.encode()
+ self._create_h5_dataset(f, "data")
self._write_lattice_vectors(f)
- if curfield_type == 'n':
+ if curfield_type == "n":
for inv in [False, True]:
- inv_str = 'epsilon_inverse' if inv else 'epsilon'
+ inv_str = "epsilon_inverse" if inv else "epsilon"
for c1 in range(3):
for c2 in range(c1, 3):
self.mode_solver.get_epsilon_tensor(c1, c2, 0, inv)
@@ -729,21 +747,21 @@ def _output_scalar_field(self, curfield_type, fname_prefix):
if with_hermitian_epsilon() and c1 != c2:
self.mode_solver.get_epsilon_tensor(c1, c2, 1, inv)
- dataname += '.i'
+ dataname += ".i"
self._create_h5_dataset(f, dataname)
def _write_lattice_vectors(self, h5file):
lattice = np.zeros((3, 3))
self.mode_solver.get_lattice(lattice)
- h5file['lattice vectors'] = lattice
+ h5file["lattice vectors"] = lattice
def _create_h5_dataset(self, h5file, key):
h5file[key] = self.get_curfield_as_array(False)
def _create_fname(self, fname, prefix, parity_suffix):
parity_str = self.mode_solver.get_parity_string()
- suffix = f".{parity_str}" if parity_suffix and parity_str else ''
- return prefix + fname + suffix + '.h5'
+ suffix = f".{parity_str}" if parity_suffix and parity_str else ""
+ return prefix + fname + suffix + ".h5"
def compute_field_energy(self):
return self.mode_solver.compute_field_energy()
@@ -780,8 +798,9 @@ def compute_one_group_velocity(self, which_band):
return self.mode_solver.compute_1_group_velocity(which_band)
def compute_one_group_velocity_component(self, direction, which_band):
- return self.mode_solver.compute_1_group_velocity_component(direction,
- which_band)
+ return self.mode_solver.compute_1_group_velocity_component(
+ direction, which_band
+ )
def compute_zparities(self):
return self.mode_solver.compute_zparities()
@@ -795,10 +814,10 @@ def randomize_fields(self):
def display_kpoint_data(self, name, data):
if verbosity.mpb > 0:
k_index = self.mode_solver.get_kpoint_index()
- print(f"{self.parity}{name}:, {k_index}", end='')
+ print(f"{self.parity}{name}:, {k_index}", end="")
for d in data:
- print(f", {d}", end='')
+ print(f", {d}", end="")
print()
def display_eigensolver_stats(self):
@@ -812,7 +831,7 @@ def display_eigensolver_stats(self):
mean_iters = np.mean(self.eigensolver_iters)
if verbosity.mpb > 0:
fmt = "eigensolver iterations for {} kpoints: {}-{}, mean = {}"
- print(fmt.format(num_runs, min_iters, max_iters, mean_iters), end='')
+ print(fmt.format(num_runs, min_iters, max_iters, mean_iters), end="")
sorted_iters = sorted(self.eigensolver_iters)
idx1 = num_runs // 2
@@ -830,9 +849,11 @@ def display_eigensolver_stats(self):
print(f"mean time per iteration = {mean_time} s")
def _get_grid_size(self):
- grid_size = mp.Vector3(self.resolution[0] * self.geometry_lattice.size.x,
- self.resolution[1] * self.geometry_lattice.size.y,
- self.resolution[2] * self.geometry_lattice.size.z)
+ grid_size = mp.Vector3(
+ self.resolution[0] * self.geometry_lattice.size.x,
+ self.resolution[1] * self.geometry_lattice.size.y,
+ self.resolution[2] * self.geometry_lattice.size.z,
+ )
grid_size.x = max(math.ceil(grid_size.x), 1)
grid_size.y = max(math.ceil(grid_size.y), 1)
@@ -847,11 +868,10 @@ def _optimize_grid_size(self, grid_size):
return grid_size
def next_factor2357(self, n):
-
def is_factor2357(n):
-
def divby(n, p):
return divby(n // p, p) if n % p == 0 else n
+
return divby(divby(divby(divby(n, 2), 3), 5), 7) == 1
if is_factor2357(n):
@@ -908,10 +928,13 @@ def run_parity(self, p, reset_fields, *band_functions):
self.solve_kpoint(k)
self.iterations = self.mode_solver.get_iterations()
if verbosity.mpb > 0:
- print(f"elapsed time for k point: {time.time() - solve_kpoint_time}")
+ print(
+ f"elapsed time for k point: {time.time() - solve_kpoint_time}"
+ )
self.all_freqs[i, :] = np.array(self.freqs)
- self.band_range_data = self.update_band_range_data(self.band_range_data,
- self.freqs, k)
+ self.band_range_data = self.update_band_range_data(
+ self.band_range_data, self.freqs, k
+ )
self.eigensolver_iters += [self.iterations / self.num_bands]
for f in band_functions:
@@ -924,8 +947,10 @@ def run_parity(self, p, reset_fields, *band_functions):
f(self, band)
band += 1
else:
- raise ValueError("Band function should take 1 or 2 arguments. "
- "The first must be a ModeSolver instance")
+ raise ValueError(
+ "Band function should take 1 or 2 arguments. "
+ "The first must be a ModeSolver instance"
+ )
if len(k_split[1]) > 1:
self.output_band_range_data(self.band_range_data)
@@ -976,15 +1001,28 @@ def run_yodd_zodd(self, *band_functions):
run_tm_yeven = run_yeven_zodd
run_tm_yodd = run_yodd_zodd
- def find_k(self, p, omega, band_min, band_max, korig_and_kdir, tol,
- kmag_guess, kmag_min, kmag_max, *band_funcs):
+ def find_k(
+ self,
+ p,
+ omega,
+ band_min,
+ band_max,
+ korig_and_kdir,
+ tol,
+ kmag_guess,
+ kmag_min,
+ kmag_max,
+ *band_funcs,
+ ):
num_bands_save = self.num_bands
kpoints_save = self.k_points
nb = band_max - band_min + 1
kdir = korig_and_kdir[1] if type(korig_and_kdir) is list else korig_and_kdir
lat = self.geometry_lattice
- kdir1 = mp.cartesian_to_reciprocal(mp.reciprocal_to_cartesian(kdir, lat).unit(), lat)
+ kdir1 = mp.cartesian_to_reciprocal(
+ mp.reciprocal_to_cartesian(kdir, lat).unit(), lat
+ )
if type(korig_and_kdir) is list:
korig = korig_and_kdir[0]
@@ -1001,7 +1039,6 @@ def find_k(self, p, omega, band_min, band_max, korig_and_kdir, tol,
bktab = {}
def rootfun(b):
-
def _rootfun(k):
if tab_val := bktab.get((b, k), None):
if verbosity.mpb > 0:
@@ -1014,7 +1051,11 @@ def _rootfun(k):
v = self.mode_solver.compute_group_velocity_component(kdir1)
# Cache computed values
- for _b, _f, _v in zip(range(band_min, b - band_min + 1), self.freqs[band_min - 1:], v[band_min - 1:]):
+ for _b, _f, _v in zip(
+ range(band_min, b - band_min + 1),
+ self.freqs[band_min - 1 :],
+ v[band_min - 1 :],
+ ):
tabval = bktab.get((_b, k0s[_b - band_min]), None)
if not tabval or abs(_f - omega) < abs(tabval[0]):
@@ -1035,10 +1076,14 @@ def _rootfun(k):
ks = []
for b in range(band_max, band_max - nb, -1):
- ks.append(mp.find_root_deriv(rootfun(b), tol, kmag_min, kmag_max, k0s[b - band_min]))
+ ks.append(
+ mp.find_root_deriv(
+ rootfun(b), tol, kmag_min, kmag_max, k0s[b - band_min]
+ )
+ )
if band_funcs:
- for b, k in zip(range(1, band_max +1), reversed(ks)):
+ for b, k in zip(range(1, band_max + 1), reversed(ks)):
self.num_bands = b
self.k_points = [korig + kdir1.scale(k)]
@@ -1053,13 +1098,16 @@ def bfunc(ms, b_prime):
self.k_points = kpoints_save
ks = list(reversed(ks))
if verbosity.mpb > 0:
- print("{}kvals:, {}, {}, {}".format(self.parity, omega, band_min, band_max), end='')
+ print(
+ "{}kvals:, {}, {}, {}".format(self.parity, omega, band_min, band_max),
+ end="",
+ )
for k in korig:
- print(", {}".format(k), end='')
+ print(", {}".format(k), end="")
for k in kdir1:
- print(", {}".format(k), end='')
+ print(", {}".format(k), end="")
for k in ks:
- print(", {}".format(k), end='')
+ print(", {}".format(k), end="")
print()
return ks
@@ -1069,6 +1117,7 @@ def first_brillouin_zone(self, k):
Function to convert a k-point k into an equivalent point in the
first Brillouin zone (not necessarily the irreducible Brillouin zone)
"""
+
def n(k):
return mp.reciprocal_to_cartesian(k, self.geometry_lattice).norm()
@@ -1079,10 +1128,18 @@ def _try(k, v):
return try_plus(try_plus(k, v), mp.Vector3() - v)
try_list = [
- mp.Vector3(1, 0, 0), mp.Vector3(0, 1, 0), mp.Vector3(0, 0, 1),
- mp.Vector3(0, 1, 1), mp.Vector3(1, 0, 1), mp.Vector3(1, 1, 0),
- mp.Vector3(0, 1, -1), mp.Vector3(1, 0, -1), mp.Vector3(1, -1, 0),
- mp.Vector3(1, 1, 1), mp.Vector3(-1, 1, 1), mp.Vector3(1, -1, 1),
+ mp.Vector3(1, 0, 0),
+ mp.Vector3(0, 1, 0),
+ mp.Vector3(0, 0, 1),
+ mp.Vector3(0, 1, 1),
+ mp.Vector3(1, 0, 1),
+ mp.Vector3(1, 1, 0),
+ mp.Vector3(0, 1, -1),
+ mp.Vector3(1, 0, -1),
+ mp.Vector3(1, -1, 0),
+ mp.Vector3(1, 1, 1),
+ mp.Vector3(-1, 1, 1),
+ mp.Vector3(1, -1, 1),
mp.Vector3(1, 1, -1),
]
@@ -1105,13 +1162,17 @@ def transformed_overlap(self, W, w):
def compute_symmetry(self, band, W, w):
return self.mode_solver.compute_symmetry(band, W, w)
-
+
def compute_symmetries(self, W, w):
- return [self.mode_solver.compute_symmetry(band, W, w) for band in range(1, self.num_bands + 1)]
+ return [
+ self.mode_solver.compute_symmetry(band, W, w)
+ for band in range(1, self.num_bands + 1)
+ ]
# Predefined output functions (functions of the band index), for passing to `run`
+
def output_hfield(ms, which_band):
ms.get_hfield(which_band, False)
ms.output_field()
@@ -1206,7 +1267,7 @@ def output_dpwr(ms, which_band):
def output_tot_pwr(ms, which_band):
ms.get_tot_pwr(which_band)
- ms.output_field_to_file(-1, f'{ms.get_filename_prefix()}tot.')
+ ms.output_field_to_file(-1, f"{ms.get_filename_prefix()}tot.")
def output_dpwr_in_objects(output_func, min_energy, objects=[]):
@@ -1238,39 +1299,40 @@ def output_charge_density(ms, which_band):
def output_poynting(ms, which_band):
ms.get_poynting(which_band)
- ms.output_field_to_file(-1, f'{ms.get_filename_prefix()}flux.')
+ ms.output_field_to_file(-1, f"{ms.get_filename_prefix()}flux.")
def output_poynting_x(ms, which_band):
ms.get_poynting(which_band)
- ms.output_field_to_file(0, f'{ms.get_filename_prefix()}flux.')
+ ms.output_field_to_file(0, f"{ms.get_filename_prefix()}flux.")
def output_poynting_y(ms, which_band):
ms.get_poynting(which_band)
- ms.output_field_to_file(1, f'{ms.get_filename_prefix()}flux.')
+ ms.output_field_to_file(1, f"{ms.get_filename_prefix()}flux.")
def output_poynting_z(ms, which_band):
ms.get_poynting(which_band)
- ms.output_field_to_file(2, f'{ms.get_filename_prefix()}flux.')
+ ms.output_field_to_file(2, f"{ms.get_filename_prefix()}flux.")
def display_yparities(ms):
- ms.display_kpoint_data('yparity', ms.mode_solver.compute_yparities())
+ ms.display_kpoint_data("yparity", ms.mode_solver.compute_yparities())
def display_zparities(ms):
- ms.display_kpoint_data('zparity', ms.mode_solver.compute_zparities())
+ ms.display_kpoint_data("zparity", ms.mode_solver.compute_zparities())
def display_group_velocities(ms):
- ms.display_kpoint_data('velocity', ms.compute_group_velocities())
+ ms.display_kpoint_data("velocity", ms.compute_group_velocities())
# Band functions to pick a canonical phase for the eigenstate of the
# given band based upon the spatial representation of the given field
+
def fix_hfield_phase(ms, which_band):
ms.get_hfield(which_band, False)
ms.mode_solver.fix_field_phase()
@@ -1314,6 +1376,7 @@ def combine_band_functions(*band_funcs):
def _combine(ms, which_band):
for f in band_funcs:
apply_band_func(ms, f, which_band)
+
return _combine
diff --git a/python/source.py b/python/source.py
index 765d79d42..007530399 100644
--- a/python/source.py
+++ b/python/source.py
@@ -33,8 +33,19 @@ class Source(object):
the book [Advances in FDTD Computational Electrodynamics: Photonics and
Nanotechnology](https://www.amazon.com/Advances-FDTD-Computational-Electrodynamics-Nanotechnology/dp/1608071707).
"""
- def __init__(self, src, component, center=None, volume=None, size=Vector3(), amplitude=1.0, amp_func=None,
- amp_func_file='', amp_data=None):
+
+ def __init__(
+ self,
+ src,
+ component,
+ center=None,
+ volume=None,
+ size=Vector3(),
+ amplitude=1.0,
+ amp_func=None,
+ amp_func_file="",
+ amp_data=None,
+ ):
"""
Construct a `Source`.
@@ -120,6 +131,7 @@ class SourceTime(object):
This is the parent for classes describing the time dependence of sources; it should
not be instantiated directly.
"""
+
def __init__(self, is_integrated=False):
self.is_integrated = is_integrated
@@ -132,9 +144,18 @@ class ContinuousSource(SourceTime):
response](FAQ.md#why-doesnt-the-continuous-wave-cw-source-produce-an-exact-single-frequency-response).
"""
- def __init__(self, frequency=None, start_time=0, end_time=1.0e20, width=0,
- fwidth=float('inf'), cutoff=3.0, wavelength=None,
- is_integrated=False, **kwargs):
+ def __init__(
+ self,
+ frequency=None,
+ start_time=0,
+ end_time=1.0e20,
+ width=0,
+ fwidth=float("inf"),
+ cutoff=3.0,
+ wavelength=None,
+ is_integrated=False,
+ **kwargs,
+ ):
"""
Construct a `ContinuousSource`.
@@ -171,8 +192,9 @@ def __init__(self, frequency=None, start_time=0, end_time=1.0e20, width=0,
"""
if frequency is None and wavelength is None:
- raise ValueError(f"Must set either frequency or wavelength in {self.__class__.__name__}.")
-
+ raise ValueError(
+ f"Must set either frequency or wavelength in {self.__class__.__name__}."
+ )
super(ContinuousSource, self).__init__(is_integrated=is_integrated, **kwargs)
self.frequency = 1 / wavelength if wavelength else float(frequency)
@@ -180,8 +202,9 @@ def __init__(self, frequency=None, start_time=0, end_time=1.0e20, width=0,
self.end_time = end_time
self.width = max(width, 1 / fwidth)
self.cutoff = cutoff
- self.swigobj = mp.continuous_src_time(self.frequency, self.width, self.start_time,
- self.end_time, self.cutoff)
+ self.swigobj = mp.continuous_src_time(
+ self.frequency, self.width, self.start_time, self.end_time, self.cutoff
+ )
self.swigobj.is_integrated = self.is_integrated
@@ -193,8 +216,18 @@ class GaussianSource(SourceTime):
(t-t_0)^2/2w^2)$, but the difference between this and a true Gaussian is usually
irrelevant.
"""
- def __init__(self, frequency=None, width=0, fwidth=float('inf'), start_time=0, cutoff=5.0,
- is_integrated=False, wavelength=None, **kwargs):
+
+ def __init__(
+ self,
+ frequency=None,
+ width=0,
+ fwidth=float("inf"),
+ start_time=0,
+ cutoff=5.0,
+ is_integrated=False,
+ wavelength=None,
+ **kwargs,
+ ):
"""
Construct a `GaussianSource`.
@@ -239,8 +272,9 @@ def __init__(self, frequency=None, width=0, fwidth=float('inf'), start_time=0, c
`amplitude` or `amp_func` factor that you specified for the source.
"""
if frequency is None and wavelength is None:
- raise ValueError(f"Must set either frequency or wavelength in {self.__class__.__name__}.")
-
+ raise ValueError(
+ f"Must set either frequency or wavelength in {self.__class__.__name__}."
+ )
super(GaussianSource, self).__init__(is_integrated=is_integrated, **kwargs)
self.frequency = 1 / wavelength if wavelength else float(frequency)
@@ -248,8 +282,12 @@ def __init__(self, frequency=None, width=0, fwidth=float('inf'), start_time=0, c
self.start_time = start_time
self.cutoff = cutoff
- self.swigobj = mp.gaussian_src_time(self.frequency, self.width, self.start_time,
- self.start_time + 2 * self.width * self.cutoff)
+ self.swigobj = mp.gaussian_src_time(
+ self.frequency,
+ self.width,
+ self.start_time,
+ self.start_time + 2 * self.width * self.cutoff,
+ )
self.swigobj.is_integrated = self.is_integrated
def fourier_transform(self, freq):
@@ -269,8 +307,16 @@ class CustomSource(SourceTime):
[`examples/chirped_pulse.py`](https://github.com/NanoComp/meep/blob/master/python/examples/chirped_pulse.py).
"""
- def __init__(self, src_func, start_time=-1.0e20, end_time=1.0e20, is_integrated=False,
- center_frequency=0, fwidth=0, **kwargs):
+ def __init__(
+ self,
+ src_func,
+ start_time=-1.0e20,
+ end_time=1.0e20,
+ is_integrated=False,
+ center_frequency=0,
+ fwidth=0,
+ **kwargs,
+ ):
"""
Construct a `CustomSource`.
@@ -309,8 +355,9 @@ def __init__(self, src_func, start_time=-1.0e20, end_time=1.0e20, is_integrated=
self.end_time = end_time
self.fwidth = fwidth
self.center_frequency = center_frequency
- self.swigobj = mp.custom_py_src_time(src_func, start_time, end_time,
- center_frequency, fwidth)
+ self.swigobj = mp.custom_py_src_time(
+ src_func, start_time, end_time, center_frequency, fwidth
+ )
self.swigobj.is_integrated = self.is_integrated
@@ -366,21 +413,24 @@ class EigenModeSource(Source):
The `SourceTime` object (`Source.src`), which specifies the time dependence of the
source, can be one of `ContinuousSource`, `GaussianSource` or `CustomSource`.
"""
- def __init__(self,
- src,
- center=None,
- volume=None,
- eig_lattice_size=None,
- eig_lattice_center=None,
- component=mp.ALL_COMPONENTS,
- direction=mp.AUTOMATIC,
- eig_band=1,
- eig_kpoint=Vector3(),
- eig_match_freq=True,
- eig_parity=mp.NO_PARITY,
- eig_resolution=0,
- eig_tolerance=1e-12,
- **kwargs):
+
+ def __init__(
+ self,
+ src,
+ center=None,
+ volume=None,
+ eig_lattice_size=None,
+ eig_lattice_center=None,
+ component=mp.ALL_COMPONENTS,
+ direction=mp.AUTOMATIC,
+ eig_band=1,
+ eig_kpoint=Vector3(),
+ eig_match_freq=True,
+ eig_parity=mp.NO_PARITY,
+ eig_resolution=0,
+ eig_tolerance=1e-12,
+ **kwargs,
+ ):
"""
Construct an `EigenModeSource`.
@@ -497,7 +547,10 @@ def component(self):
@component.setter
def component(self, val):
if val != mp.ALL_COMPONENTS:
- warnings.warn("EigenModeSource component is not ALL_COMPONENTS (the default), which makes it non-unidirectional.",RuntimeWarning)
+ warnings.warn(
+ "EigenModeSource component is not ALL_COMPONENTS (the default), which makes it non-unidirectional.",
+ RuntimeWarning,
+ )
self._component = val
@property
@@ -507,7 +560,7 @@ def eig_band(self):
@eig_band.setter
def eig_band(self, val):
if isinstance(val, int):
- self._eig_band = check_positive('EigenModeSource.eig_band', val)
+ self._eig_band = check_positive("EigenModeSource.eig_band", val)
else:
self._eig_band = val
@@ -517,7 +570,7 @@ def eig_resolution(self):
@eig_resolution.setter
def eig_resolution(self, val):
- self._eig_resolution = check_nonnegative('EigenModeSource.eig_resolution', val)
+ self._eig_resolution = check_nonnegative("EigenModeSource.eig_resolution", val)
@property
def eig_tolerance(self):
@@ -525,16 +578,17 @@ def eig_tolerance(self):
@eig_tolerance.setter
def eig_tolerance(self, val):
- self._eig_tolerance = check_positive('EigenModeSource.eig_tolerance', val)
+ self._eig_tolerance = check_positive("EigenModeSource.eig_tolerance", val)
- def eig_power(self,freq):
+ def eig_power(self, freq):
"""
Returns the total power of the fields from the eigenmode source at frequency `freq`.
"""
amp = self.amplitude
if callable(getattr(self.src, "fourier_transform", None)):
- amp *= self.src.fourier_transform(freq)
- return abs(amp)**2
+ amp *= self.src.fourier_transform(freq)
+ return abs(amp) ** 2
+
class GaussianBeamSource(Source):
"""
@@ -545,16 +599,18 @@ class GaussianBeamSource(Source):
The `SourceTime` object (`Source.src`), which specifies the time dependence of the source, should normally be a narrow-band `ContinuousSource` or `GaussianSource`. (For a `CustomSource`, the beam frequency is determined by the source's `center_frequency` parameter.)
"""
- def __init__(self,
- src,
- center=None,
- volume=None,
- component=mp.ALL_COMPONENTS,
- beam_x0=Vector3(),
- beam_kdir=Vector3(),
- beam_w0=None,
- beam_E0=Vector3(),
- **kwargs):
+ def __init__(
+ self,
+ src,
+ center=None,
+ volume=None,
+ component=mp.ALL_COMPONENTS,
+ beam_x0=Vector3(),
+ beam_kdir=Vector3(),
+ beam_w0=None,
+ beam_E0=Vector3(),
+ **kwargs,
+ ):
"""
Construct a `GaussianBeamSource`.
@@ -567,7 +623,9 @@ def __init__(self,
+ **`beam_E0` [`Vector3`]** — The polarization vector of the beam. Elements can be complex valued (i.e., for circular polarization). The polarization vector must be *parallel* to the source region in order to generate a transverse mode.
"""
- super(GaussianBeamSource, self).__init__(src, component, center, volume, **kwargs)
+ super(GaussianBeamSource, self).__init__(
+ src, component, center, volume, **kwargs
+ )
self._beam_x0 = beam_x0
self._beam_kdir = beam_kdir
self._beam_w0 = beam_w0
@@ -589,13 +647,15 @@ def beam_w0(self):
def beam_E0(self):
return self._beam_E0
+
class IndexedSource(Source):
"""
created a source object using (SWIG-wrapped mp::srcdata*) srcdata.
"""
+
def __init__(self, src, srcdata, amp_arr, needs_boundary_fix=False):
self.src = src
self.num_pts = len(amp_arr)
self.srcdata = srcdata
self.amp_arr = amp_arr
- self.needs_boundary_fix = needs_boundary_fix
\ No newline at end of file
+ self.needs_boundary_fix = needs_boundary_fix
diff --git a/python/tests/test_3rd_harm_1d.py b/python/tests/test_3rd_harm_1d.py
index 87e9ee4e7..9e9d645d4 100644
--- a/python/tests/test_3rd_harm_1d.py
+++ b/python/tests/test_3rd_harm_1d.py
@@ -2,8 +2,8 @@
import meep as mp
from utils import ApproxComparisonTestCase
-class Test3rdHarm1d(ApproxComparisonTestCase):
+class Test3rdHarm1d(ApproxComparisonTestCase):
def setUp(self):
self.sz = 100
fcen = 1 / 3.0
@@ -18,23 +18,31 @@ def setUp(self):
pml_layers = mp.PML(self.dpml)
- sources = mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ex,
- center=mp.Vector3(0, 0, (-0.5 * self.sz) + self.dpml), amplitude=self.amp)
+ sources = mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ex,
+ center=mp.Vector3(0, 0, (-0.5 * self.sz) + self.dpml),
+ amplitude=self.amp,
+ )
nfreq = 400
fmin = fcen / 2.0
fmax = fcen * 4
- self.sim = mp.Simulation(cell_size=cell,
- geometry=[],
- sources=[sources],
- boundary_layers=[pml_layers],
- default_material=default_material,
- resolution=20,
- dimensions=dimensions)
+ self.sim = mp.Simulation(
+ cell_size=cell,
+ geometry=[],
+ sources=[sources],
+ boundary_layers=[pml_layers],
+ default_material=default_material,
+ resolution=20,
+ dimensions=dimensions,
+ )
fr = mp.FluxRegion(mp.Vector3(0, 0, (0.5 * self.sz) - self.dpml - 0.5))
- self.trans = self.sim.add_flux(0.5 * (fmin + fmax), fmax - fmin, nfreq, fr, decimation_factor=1)
+ self.trans = self.sim.add_flux(
+ 0.5 * (fmin + fmax), fmax - fmin, nfreq, fr, decimation_factor=1
+ )
self.trans1 = self.sim.add_flux(fcen, 0, 1, fr, decimation_factor=1)
self.trans3 = self.sim.add_flux(3 * fcen, 0, 1, fr, decimation_factor=1)
@@ -48,11 +56,16 @@ def test_3rd_harm_1d(self):
)
)
- harmonics = [self.k, self.amp, mp.get_fluxes(self.trans1)[0], mp.get_fluxes(self.trans3)[0]]
+ harmonics = [
+ self.k,
+ self.amp,
+ mp.get_fluxes(self.trans1)[0],
+ mp.get_fluxes(self.trans3)[0],
+ ]
tol = 3e-5 if mp.is_single_precision() else 1e-7
self.assertClose(expected_harmonics, harmonics, epsilon=tol)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_absorber_1d.py b/python/tests/test_absorber_1d.py
index b8c9690ce..04fdc8c7e 100644
--- a/python/tests/test_absorber_1d.py
+++ b/python/tests/test_absorber_1d.py
@@ -4,7 +4,6 @@
class TestAbsorber(unittest.TestCase):
-
def setUp(self):
resolution = 40
@@ -12,19 +11,30 @@ def setUp(self):
absorber_layers = [mp.Absorber(1, direction=mp.Z)]
- sources = [mp.Source(src=mp.GaussianSource(1 / 0.803, fwidth=0.1), center=mp.Vector3(),
- component=mp.Ex)]
-
- self.sim = mp.Simulation(cell_size=cell_size,
- resolution=resolution,
- dimensions=1,
- default_material=Al,
- boundary_layers=absorber_layers,
- sources=sources)
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(1 / 0.803, fwidth=0.1),
+ center=mp.Vector3(),
+ component=mp.Ex,
+ )
+ ]
+
+ self.sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ dimensions=1,
+ default_material=Al,
+ boundary_layers=absorber_layers,
+ sources=sources,
+ )
def test_absorber(self):
- self.sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(), 1e-6))
+ self.sim.run(
+ until_after_sources=mp.stop_when_fields_decayed(
+ 50, mp.Ex, mp.Vector3(), 1e-6
+ )
+ )
f = self.sim.get_field_point(mp.Ex, mp.Vector3())
self.assertAlmostEqual(f.real, 3.218846961494622e-13, places=6)
@@ -33,14 +43,14 @@ def test_absorber_2d(self):
source = mp.Source(
src=mp.GaussianSource(frequency=0.1, fwidth=0.1),
component=mp.Hz,
- center=mp.Vector3()
+ center=mp.Vector3(),
)
sim = mp.Simulation(
cell_size=mp.Vector3(20, 20, 0),
resolution=10,
sources=[source],
- boundary_layers=[mp.Absorber(5)]
+ boundary_layers=[mp.Absorber(5)],
)
sim.run(until_after_sources=1000)
@@ -50,5 +60,5 @@ def test_absorber_2d(self):
self.assertAlmostEqual(-4.058476603571745e-11, p.real)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_adjoint_cyl.py b/python/tests/test_adjoint_cyl.py
index 2a59ae128..67acf54f5 100644
--- a/python/tests/test_adjoint_cyl.py
+++ b/python/tests/test_adjoint_cyl.py
@@ -1,4 +1,5 @@
import meep as mp
+
try:
import meep.adjoint as mpa
except:
@@ -13,7 +14,7 @@
rng = np.random.RandomState(2)
resolution = 20
dimensions = mp.CYLINDRICAL
-m=0
+m = 0
Si = mp.Medium(index=3.4)
SiO2 = mp.Medium(index=1.44)
@@ -23,87 +24,110 @@
dpml = 1.0
boundary_layers = [mp.PML(thickness=dpml)]
-design_region_resolution = int(2*resolution)
+design_region_resolution = int(2 * resolution)
design_r = 5
design_z = 2
-Nr, Nz = int(design_r*design_region_resolution), int(design_z*design_region_resolution)
+Nr, Nz = int(design_r * design_region_resolution), int(
+ design_z * design_region_resolution
+)
-fcen = 1/1.55
+fcen = 1 / 1.55
width = 0.2
fwidth = width * fcen
-source_center = [design_r/2,0,-(sz/2-dpml+design_z/2)/2]
-source_size = mp.Vector3(design_r,0,0)
-src = mp.GaussianSource(frequency=fcen,fwidth=fwidth)
-source = [mp.Source(src,component=mp.Er,
- center=source_center,
- size=source_size)]
+source_center = [design_r / 2, 0, -(sz / 2 - dpml + design_z / 2) / 2]
+source_size = mp.Vector3(design_r, 0, 0)
+src = mp.GaussianSource(frequency=fcen, fwidth=fwidth)
+source = [mp.Source(src, component=mp.Er, center=source_center, size=source_size)]
## random design region
-p = 0.5*rng.rand(Nr*Nz)
+p = 0.5 * rng.rand(Nr * Nz)
## random epsilon perturbation for design region
deps = 1e-5
-dp = deps*rng.rand(Nr*Nz)
+dp = deps * rng.rand(Nr * Nz)
def forward_simulation(design_params):
- matgrid = mp.MaterialGrid(mp.Vector3(Nr,0,Nz),
- SiO2,
- Si,
- weights=design_params.reshape(Nr,1,Nz))
-
- geometry = [mp.Block(center=mp.Vector3(design_r/2,0,0),
- size=mp.Vector3(design_r,0,design_z),
- material=matgrid)]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=boundary_layers,
- sources=source,
- geometry=geometry,
- dimensions=dimensions,
- m=m)
+ matgrid = mp.MaterialGrid(
+ mp.Vector3(Nr, 0, Nz), SiO2, Si, weights=design_params.reshape(Nr, 1, Nz)
+ )
+
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(design_r / 2, 0, 0),
+ size=mp.Vector3(design_r, 0, design_z),
+ material=matgrid,
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=boundary_layers,
+ sources=source,
+ geometry=geometry,
+ dimensions=dimensions,
+ m=m,
+ )
frequencies = [fcen]
- far_x = [mp.Vector3(5,0,20)]
+ far_x = [mp.Vector3(5, 0, 20)]
mode = sim.add_near2far(
frequencies,
- mp.Near2FarRegion(center=mp.Vector3(design_r/2,0,(sz/2-dpml+design_z/2)/2),
- size=mp.Vector3(design_r,0,0),weight=+1))
+ mp.Near2FarRegion(
+ center=mp.Vector3(design_r / 2, 0, (sz / 2 - dpml + design_z / 2) / 2),
+ size=mp.Vector3(design_r, 0, 0),
+ weight=+1,
+ ),
+ )
sim.run(until_after_sources=1200)
Er = sim.get_farfield(mode, far_x[0])
sim.reset_meep()
- return abs(Er[0])**2
+ return abs(Er[0]) ** 2
def adjoint_solver(design_params):
- design_variables = mp.MaterialGrid(mp.Vector3(Nr,0,Nz),SiO2,Si)
- design_region = mpa.DesignRegion(design_variables,
- volume=mp.Volume(center=mp.Vector3(design_r/2,0,0),
- size=mp.Vector3(design_r,0,design_z)))
- geometry = [mp.Block(center=design_region.center,
- size=design_region.size,
- material=design_variables)]
-
- sim = mp.Simulation(cell_size=cell_size,
+ design_variables = mp.MaterialGrid(mp.Vector3(Nr, 0, Nz), SiO2, Si)
+ design_region = mpa.DesignRegion(
+ design_variables,
+ volume=mp.Volume(
+ center=mp.Vector3(design_r / 2, 0, 0),
+ size=mp.Vector3(design_r, 0, design_z),
+ ),
+ )
+ geometry = [
+ mp.Block(
+ center=design_region.center,
+ size=design_region.size,
+ material=design_variables,
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
boundary_layers=boundary_layers,
geometry=geometry,
sources=source,
resolution=resolution,
dimensions=dimensions,
- m=m)
-
- far_x = [mp.Vector3(5,0,20)]
- NearRegions = [mp.Near2FarRegion(center=mp.Vector3(design_r/2,0,(sz/2-dpml+design_z/2)/2),
- size=mp.Vector3(design_r,0,0),
- weight=+1)]
- FarFields = mpa.Near2FarFields(sim, NearRegions ,far_x)
+ m=m,
+ )
+
+ far_x = [mp.Vector3(5, 0, 20)]
+ NearRegions = [
+ mp.Near2FarRegion(
+ center=mp.Vector3(design_r / 2, 0, (sz / 2 - dpml + design_z / 2) / 2),
+ size=mp.Vector3(design_r, 0, 0),
+ weight=+1,
+ )
+ ]
+ FarFields = mpa.Near2FarFields(sim, NearRegions, far_x)
ob_list = [FarFields]
def J(alpha):
- return npa.abs(alpha[0,0,0])**2
+ return npa.abs(alpha[0, 0, 0]) ** 2
opt = mpa.OptimizationProblem(
simulation=sim,
@@ -111,9 +135,10 @@ def J(alpha):
objective_arguments=ob_list,
design_regions=[design_region],
fcen=fcen,
- df = 0,
- nf = 1,
- maximum_run_time=1200)
+ df=0,
+ nf=1,
+ maximum_run_time=1200,
+ )
f, dJ_du = opt([design_params])
sim.reset_meep()
@@ -122,7 +147,6 @@ def J(alpha):
class TestAdjointSolver(ApproxComparisonTestCase):
-
def test_adjoint_solver_cyl_n2f_fields(self):
print("*** TESTING CYLINDRICAL Near2Far ADJOINT FEATURES ***")
adjsol_obj, adjsol_grad = adjoint_solver(p)
@@ -131,24 +155,24 @@ def test_adjoint_solver_cyl_n2f_fields(self):
S12_unperturbed = forward_simulation(p)
## compare objective results
- print(f"|Er|^2 -- adjoint solver: {adjsol_obj}, traditional simulation: {S12_unperturbed}")
+ print(
+ f"|Er|^2 -- adjoint solver: {adjsol_obj}, traditional simulation: {S12_unperturbed}"
+ )
- self.assertClose(adjsol_obj,S12_unperturbed,epsilon=1e-3)
+ self.assertClose(adjsol_obj, S12_unperturbed, epsilon=1e-3)
## compute perturbed S12
- S12_perturbed = forward_simulation(p+dp)
+ S12_perturbed = forward_simulation(p + dp)
## compare gradients
if adjsol_grad.ndim < 2:
- adjsol_grad = np.expand_dims(adjsol_grad,axis=1)
- adj_scale = (dp[None,:]@adjsol_grad).flatten()
- fd_grad = S12_perturbed-S12_unperturbed
+ adjsol_grad = np.expand_dims(adjsol_grad, axis=1)
+ adj_scale = (dp[None, :] @ adjsol_grad).flatten()
+ fd_grad = S12_perturbed - S12_unperturbed
print(f"Directional derivative -- adjoint solver: {adj_scale}, FD: {fd_grad}")
tol = 0.2 if mp.is_single_precision() else 0.1
- self.assertClose(adj_scale,fd_grad,epsilon=tol)
-
-
+ self.assertClose(adj_scale, fd_grad, epsilon=tol)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_adjoint_jax.py b/python/tests/test_adjoint_jax.py
index 051209576..782c691e5 100644
--- a/python/tests/test_adjoint_jax.py
+++ b/python/tests/test_adjoint_jax.py
@@ -10,7 +10,7 @@
import numpy as onp
# The calculation of finite difference gradients requires that JAX be operated with double precision
-jax.config.update('jax_enable_x64', True)
+jax.config.update("jax_enable_x64", True)
# The step size for the finite difference gradient calculation
_FD_STEP = 1e-4
@@ -41,9 +41,13 @@ def build_straight_wg_simulation(
# Simulation domain size
sx = 2 * pml_width + 2 * wg_length + design_region_shape[0]
- sy = 2 * pml_width + 2 * wg_padding + max(
- wg_width,
- design_region_shape[1],
+ sy = (
+ 2 * pml_width
+ + 2 * wg_padding
+ + max(
+ wg_width,
+ design_region_shape[1],
+ )
)
# Mean / center frequency
@@ -54,8 +58,7 @@ def build_straight_wg_simulation(
sources = [
mp.EigenModeSource(
- mp.GaussianSource(frequency=fmean,
- fwidth=fmean * gaussian_rel_width),
+ mp.GaussianSource(frequency=fmean, fwidth=fmean * gaussian_rel_width),
eig_band=1,
direction=mp.NO_DIRECTION,
eig_kpoint=mp.Vector3(1, 0, 0),
@@ -63,8 +66,7 @@ def build_straight_wg_simulation(
center=[-sx / 2 + pml_width + source_to_pml, 0, 0],
),
mp.EigenModeSource(
- mp.GaussianSource(frequency=fmean,
- fwidth=fmean * gaussian_rel_width),
+ mp.GaussianSource(frequency=fmean, fwidth=fmean * gaussian_rel_width),
eig_band=1,
direction=mp.NO_DIRECTION,
eig_kpoint=mp.Vector3(-1, 0, 0),
@@ -72,12 +74,14 @@ def build_straight_wg_simulation(
center=[sx / 2 - pml_width - source_to_pml, 0, 0],
),
]
- nx, ny = int(design_region_shape[0]*design_region_resolution), int(design_region_shape[1]*design_region_resolution)
+ nx, ny = int(design_region_shape[0] * design_region_resolution), int(
+ design_region_shape[1] * design_region_resolution
+ )
mat_grid = mp.MaterialGrid(
mp.Vector3(nx, ny),
sio2,
si,
- grid_type='U_DEFAULT',
+ grid_type="U_DEFAULT",
)
design_regions = [
@@ -95,19 +99,25 @@ def build_straight_wg_simulation(
]
geometry = [
- mp.Block(center=mp.Vector3(x=-design_region_shape[0] / 2 -
- wg_length / 2 - pml_width / 2),
- material=si,
- size=mp.Vector3(wg_length + pml_width, wg_width,
- 0)), # left wg
- mp.Block(center=mp.Vector3(x=+design_region_shape[0] / 2 +
- wg_length / 2 + pml_width / 2),
- material=si,
- size=mp.Vector3(wg_length + pml_width, wg_width,
- 0)), # right wg
- mp.Block(center=design_regions[0].center,
- size=design_regions[0].size,
- material=mat_grid), # design region
+ mp.Block(
+ center=mp.Vector3(
+ x=-design_region_shape[0] / 2 - wg_length / 2 - pml_width / 2
+ ),
+ material=si,
+ size=mp.Vector3(wg_length + pml_width, wg_width, 0),
+ ), # left wg
+ mp.Block(
+ center=mp.Vector3(
+ x=+design_region_shape[0] / 2 + wg_length / 2 + pml_width / 2
+ ),
+ material=si,
+ size=mp.Vector3(wg_length + pml_width, wg_width, 0),
+ ), # right wg
+ mp.Block(
+ center=design_regions[0].center,
+ size=design_regions[0].size,
+ material=mat_grid,
+ ), # design region
]
simulation = mp.Simulation(
@@ -125,11 +135,14 @@ def build_straight_wg_simulation(
monitor_size = mp.Vector3(y=wg_width + 2 * wg_padding)
monitors = [
- mpa.EigenmodeCoefficient(simulation,
- mp.Volume(center=center, size=monitor_size),
- mode=1,
- forward=forward)
- for center in monitor_centers for forward in [True, False]
+ mpa.EigenmodeCoefficient(
+ simulation,
+ mp.Volume(center=center, size=monitor_size),
+ mode=1,
+ forward=forward,
+ )
+ for center in monitor_centers
+ for forward in [True, False]
]
return simulation, sources, monitors, design_regions, frequencies
@@ -150,36 +163,74 @@ def test_mode_monitor_helpers(self):
self.simulation.run(until=100)
monitor_values = mpa.utils.gather_monitor_values(self.monitors)
self.assertEqual(monitor_values.dtype, onp.complex128)
- self.assertEqual(monitor_values.shape,
- (len(self.monitors), len(self.frequencies)))
-
+ self.assertEqual(
+ monitor_values.shape, (len(self.monitors), len(self.frequencies))
+ )
+
def test_dist_dft_pointers(self):
fwd_design_region_monitors = mpa.utils.install_design_region_monitors(
self.simulation,
self.design_regions,
self.frequencies,
)
- self.assertEqual(len(fwd_design_region_monitors[0]),_NUM_DES_REG_MON)
-
+ self.assertEqual(len(fwd_design_region_monitors[0]), _NUM_DES_REG_MON)
class WrapperTest(ApproxComparisonTestCase):
- @parameterized.parameterized.expand([
- ('1500_1550bw_01relative_gaussian_port1',
- onp.linspace(1 / 1.50, 1 / 1.55, 3).tolist(), 0.1, 0.5, 0),
- ('1550_1600bw_02relative_gaussian_port1',
- onp.linspace(1 / 1.55, 1 / 1.60, 3).tolist(), 0.2, 0.5, 0),
- ('1500_1600bw_03relative_gaussian_port1',
- onp.linspace(1 / 1.50, 1 / 1.60, 4).tolist(), 0.3, 0.5, 0),
- ('1500_1550bw_01relative_gaussian_port2',
- onp.linspace(1 / 1.50, 1 / 1.55, 3).tolist(), 0.1, 0.5, 1),
- ('1550_1600bw_02relative_gaussian_port2',
- onp.linspace(1 / 1.55, 1 / 1.60, 3).tolist(), 0.2, 0.5, 1),
- ('1500_1600bw_03relative_gaussian_port2',
- onp.linspace(1 / 1.50, 1 / 1.60, 4).tolist(), 0.3, 0.5, 1),
- ])
- def test_wrapper_gradients(self, _, frequencies, gaussian_rel_width,
- design_variable_fill_value, excite_port_idx):
+ @parameterized.parameterized.expand(
+ [
+ (
+ "1500_1550bw_01relative_gaussian_port1",
+ onp.linspace(1 / 1.50, 1 / 1.55, 3).tolist(),
+ 0.1,
+ 0.5,
+ 0,
+ ),
+ (
+ "1550_1600bw_02relative_gaussian_port1",
+ onp.linspace(1 / 1.55, 1 / 1.60, 3).tolist(),
+ 0.2,
+ 0.5,
+ 0,
+ ),
+ (
+ "1500_1600bw_03relative_gaussian_port1",
+ onp.linspace(1 / 1.50, 1 / 1.60, 4).tolist(),
+ 0.3,
+ 0.5,
+ 0,
+ ),
+ (
+ "1500_1550bw_01relative_gaussian_port2",
+ onp.linspace(1 / 1.50, 1 / 1.55, 3).tolist(),
+ 0.1,
+ 0.5,
+ 1,
+ ),
+ (
+ "1550_1600bw_02relative_gaussian_port2",
+ onp.linspace(1 / 1.55, 1 / 1.60, 3).tolist(),
+ 0.2,
+ 0.5,
+ 1,
+ ),
+ (
+ "1500_1600bw_03relative_gaussian_port2",
+ onp.linspace(1 / 1.50, 1 / 1.60, 4).tolist(),
+ 0.3,
+ 0.5,
+ 1,
+ ),
+ ]
+ )
+ def test_wrapper_gradients(
+ self,
+ _,
+ frequencies,
+ gaussian_rel_width,
+ design_variable_fill_value,
+ excite_port_idx,
+ ):
"""Tests gradient from the JAX-Meep wrapper against finite differences."""
(
simulation,
@@ -187,11 +238,13 @@ def test_wrapper_gradients(self, _, frequencies, gaussian_rel_width,
monitors,
design_regions,
frequencies,
- ) = build_straight_wg_simulation(frequencies=frequencies,
- gaussian_rel_width=gaussian_rel_width)
+ ) = build_straight_wg_simulation(
+ frequencies=frequencies, gaussian_rel_width=gaussian_rel_width
+ )
design_shape = tuple(
- int(i) for i in design_regions[0].design_parameters.grid_size)[:2]
+ int(i) for i in design_regions[0].design_parameters.grid_size
+ )[:2]
x = onp.ones(design_shape) * design_variable_fill_value
# Define a loss function
@@ -209,7 +262,8 @@ def loss_fn(x, excite_port_idx=0):
return jnp.mean(jnp.square(jnp.abs(t)))
value, adjoint_grad = jax.value_and_grad(loss_fn)(
- x, excite_port_idx=excite_port_idx)
+ x, excite_port_idx=excite_port_idx
+ )
projection = []
fd_projection = []
@@ -226,14 +280,14 @@ def loss_fn(x, excite_port_idx=0):
x_perturbed = x + random_perturbation_vector
# Calculate T(p + dp)
- value_perturbed = loss_fn(x_perturbed,
- excite_port_idx=excite_port_idx)
+ value_perturbed = loss_fn(x_perturbed, excite_port_idx=excite_port_idx)
projection.append(
onp.dot(
random_perturbation_vector.ravel(),
adjoint_grad.ravel(),
- ))
+ )
+ )
fd_projection.append(value_perturbed - value)
projection = onp.stack(projection)
@@ -247,5 +301,5 @@ def loss_fn(x, excite_port_idx=0):
)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_adjoint_solver.py b/python/tests/test_adjoint_solver.py
index f9d8a9780..dd23d1448 100644
--- a/python/tests/test_adjoint_solver.py
+++ b/python/tests/test_adjoint_solver.py
@@ -1,4 +1,5 @@
import meep as mp
+
try:
import meep.adjoint as mpa
except:
@@ -11,7 +12,7 @@
from utils import ApproxComparisonTestCase
-MonitorObject = Enum('MonitorObject', 'EIGENMODE DFT LDOS')
+MonitorObject = Enum("MonitorObject", "EIGENMODE DFT LDOS")
class TestAdjointSolver(ApproxComparisonTestCase):
@@ -20,115 +21,161 @@ def setUpClass(cls):
cls.resolution = 30 # pixels/μm
cls.silicon = mp.Medium(epsilon=12)
- cls.sapphire = mp.Medium(epsilon_diag=(10.225,10.225,9.95),
- epsilon_offdiag=(-0.825,-0.55*np.sqrt(3/2),0.55*np.sqrt(3/2)))
+ cls.sapphire = mp.Medium(
+ epsilon_diag=(10.225, 10.225, 9.95),
+ epsilon_offdiag=(-0.825, -0.55 * np.sqrt(3 / 2), 0.55 * np.sqrt(3 / 2)),
+ )
cls.sxy = 5.0
- cls.cell_size = mp.Vector3(cls.sxy,cls.sxy,0)
+ cls.cell_size = mp.Vector3(cls.sxy, cls.sxy, 0)
cls.dpml = 1.0
cls.pml_xy = [mp.PML(thickness=cls.dpml)]
- cls.pml_x = [mp.PML(thickness=cls.dpml,direction=mp.X)]
+ cls.pml_x = [mp.PML(thickness=cls.dpml, direction=mp.X)]
- cls.eig_parity = mp.EVEN_Y+mp.ODD_Z
+ cls.eig_parity = mp.EVEN_Y + mp.ODD_Z
- cls.design_region_size = mp.Vector3(1.5,1.5)
- cls.design_region_resolution = int(2*cls.resolution)
- cls.Nx = int(cls.design_region_size.x*cls.design_region_resolution)
- cls.Ny = int(cls.design_region_size.y*cls.design_region_resolution)
+ cls.design_region_size = mp.Vector3(1.5, 1.5)
+ cls.design_region_resolution = int(2 * cls.resolution)
+ cls.Nx = int(cls.design_region_size.x * cls.design_region_resolution)
+ cls.Ny = int(cls.design_region_size.y * cls.design_region_resolution)
# ensure reproducible results
rng = np.random.RandomState(9861548)
# random design region
- cls.p = 0.5*rng.rand(cls.Nx*cls.Ny)
+ cls.p = 0.5 * rng.rand(cls.Nx * cls.Ny)
# random perturbation for design region
deps = 1e-5
- cls.dp = deps*rng.rand(cls.Nx*cls.Ny)
+ cls.dp = deps * rng.rand(cls.Nx * cls.Ny)
cls.w = 1.0
- cls.waveguide_geometry = [mp.Block(material=cls.silicon,
- center=mp.Vector3(),
- size=mp.Vector3(mp.inf,cls.w,mp.inf))]
-
- cls.fcen = 1/1.55
- cls.df = 0.2*cls.fcen
- cls.mode_source = [mp.EigenModeSource(src=mp.GaussianSource(cls.fcen,fwidth=cls.df),
- center=mp.Vector3(-0.5*cls.sxy+cls.dpml,0),
- size=mp.Vector3(0,cls.sxy-2*cls.dpml),
- eig_parity=cls.eig_parity)]
-
- cls.pt_source = [mp.Source(src=mp.GaussianSource(cls.fcen,fwidth=cls.df),
- center=mp.Vector3(-0.5*cls.sxy+cls.dpml,0),
- size=mp.Vector3(),
- component=mp.Ez)]
-
- cls.line_source = [mp.Source(src=mp.GaussianSource(cls.fcen,fwidth=cls.df),
- center=mp.Vector3(-0.85,0),
- size=mp.Vector3(0,cls.sxy-2*cls.dpml),
- component=mp.Ez)]
-
- cls.k_point = mp.Vector3(0.23,-0.38)
-
-
- def adjoint_solver(self, design_params, mon_type: MonitorObject, frequencies=None,
- mat2=None, need_gradient=True):
- matgrid = mp.MaterialGrid(mp.Vector3(self.Nx,self.Ny),
- mp.air,
- self.silicon if mat2 is None else mat2,
- weights=np.ones((self.Nx,self.Ny)))
-
- matgrid_region = mpa.DesignRegion(matgrid,
- volume=mp.Volume(center=mp.Vector3(),
- size=mp.Vector3(self.design_region_size.x,
- self.design_region_size.y,
- 0)))
-
- matgrid_geometry = [mp.Block(center=matgrid_region.center,
- size=matgrid_region.size,
- material=matgrid)]
+ cls.waveguide_geometry = [
+ mp.Block(
+ material=cls.silicon,
+ center=mp.Vector3(),
+ size=mp.Vector3(mp.inf, cls.w, mp.inf),
+ )
+ ]
+
+ cls.fcen = 1 / 1.55
+ cls.df = 0.2 * cls.fcen
+ cls.mode_source = [
+ mp.EigenModeSource(
+ src=mp.GaussianSource(cls.fcen, fwidth=cls.df),
+ center=mp.Vector3(-0.5 * cls.sxy + cls.dpml, 0),
+ size=mp.Vector3(0, cls.sxy - 2 * cls.dpml),
+ eig_parity=cls.eig_parity,
+ )
+ ]
+
+ cls.pt_source = [
+ mp.Source(
+ src=mp.GaussianSource(cls.fcen, fwidth=cls.df),
+ center=mp.Vector3(-0.5 * cls.sxy + cls.dpml, 0),
+ size=mp.Vector3(),
+ component=mp.Ez,
+ )
+ ]
+
+ cls.line_source = [
+ mp.Source(
+ src=mp.GaussianSource(cls.fcen, fwidth=cls.df),
+ center=mp.Vector3(-0.85, 0),
+ size=mp.Vector3(0, cls.sxy - 2 * cls.dpml),
+ component=mp.Ez,
+ )
+ ]
+
+ cls.k_point = mp.Vector3(0.23, -0.38)
+
+ def adjoint_solver(
+ self,
+ design_params,
+ mon_type: MonitorObject,
+ frequencies=None,
+ mat2=None,
+ need_gradient=True,
+ ):
+ matgrid = mp.MaterialGrid(
+ mp.Vector3(self.Nx, self.Ny),
+ mp.air,
+ self.silicon if mat2 is None else mat2,
+ weights=np.ones((self.Nx, self.Ny)),
+ )
+
+ matgrid_region = mpa.DesignRegion(
+ matgrid,
+ volume=mp.Volume(
+ center=mp.Vector3(),
+ size=mp.Vector3(
+ self.design_region_size.x, self.design_region_size.y, 0
+ ),
+ ),
+ )
+
+ matgrid_geometry = [
+ mp.Block(
+ center=matgrid_region.center, size=matgrid_region.size, material=matgrid
+ )
+ ]
geometry = self.waveguide_geometry + matgrid_geometry
- sim = mp.Simulation(resolution=self.resolution,
- cell_size=self.cell_size,
- boundary_layers=self.pml_xy,
- sources=self.mode_source,
- geometry=geometry)
+ sim = mp.Simulation(
+ resolution=self.resolution,
+ cell_size=self.cell_size,
+ boundary_layers=self.pml_xy,
+ sources=self.mode_source,
+ geometry=geometry,
+ )
if not frequencies:
frequencies = [self.fcen]
- if mon_type.name == 'EIGENMODE':
- obj_list = [mpa.EigenmodeCoefficient(sim,
- mp.Volume(center=mp.Vector3(0.5*self.sxy-self.dpml),
- size=mp.Vector3(0,self.sxy-2*self.dpml,0)),
- 1,
- eig_parity=self.eig_parity)]
+ if mon_type.name == "EIGENMODE":
+ obj_list = [
+ mpa.EigenmodeCoefficient(
+ sim,
+ mp.Volume(
+ center=mp.Vector3(0.5 * self.sxy - self.dpml),
+ size=mp.Vector3(0, self.sxy - 2 * self.dpml, 0),
+ ),
+ 1,
+ eig_parity=self.eig_parity,
+ )
+ ]
def J(mode_mon):
- return npa.power(npa.abs(mode_mon),2)
- elif mon_type.name == 'DFT':
- obj_list = [mpa.FourierFields(sim,
- mp.Volume(center=mp.Vector3(1.25),
- size=mp.Vector3(0.25,1,0)),
- mp.Ez)]
+ return npa.power(npa.abs(mode_mon), 2)
+
+ elif mon_type.name == "DFT":
+ obj_list = [
+ mpa.FourierFields(
+ sim,
+ mp.Volume(center=mp.Vector3(1.25), size=mp.Vector3(0.25, 1, 0)),
+ mp.Ez,
+ )
+ ]
def J(mode_mon):
- return npa.power(npa.abs(mode_mon[:,4,10]),2)
- elif mon_type.name == 'LDOS':
+ return npa.power(npa.abs(mode_mon[:, 4, 10]), 2)
+
+ elif mon_type.name == "LDOS":
sim.change_sources(self.line_source)
obj_list = [mpa.LDOS(sim)]
def J(mode_mon):
return npa.array(mode_mon)
- opt = mpa.OptimizationProblem(simulation=sim,
- objective_functions=J,
- objective_arguments=obj_list,
- design_regions=[matgrid_region],
- frequencies=frequencies)
+ opt = mpa.OptimizationProblem(
+ simulation=sim,
+ objective_functions=J,
+ objective_arguments=obj_list,
+ design_regions=[matgrid_region],
+ frequencies=frequencies,
+ )
if need_gradient:
f, dJ_du = opt([design_params])
@@ -137,47 +184,61 @@ def J(mode_mon):
f = opt([design_params], need_gradient=False)
return f[0]
-
- def adjoint_solver_complex_fields(self, design_params, frequencies=None, need_gradient=True):
- matgrid = mp.MaterialGrid(mp.Vector3(self.Nx,self.Ny),
- mp.air,
- self.silicon,
- weights=np.ones((self.Nx,self.Ny)))
-
- matgrid_region = mpa.DesignRegion(matgrid,
- volume=mp.Volume(center=mp.Vector3(),
- size=mp.Vector3(self.design_region_size.x,
- self.design_region_size.y,
- 0)))
-
- geometry = [mp.Block(center=matgrid_region.center,
- size=matgrid_region.size,
- material=matgrid)]
-
- sim = mp.Simulation(resolution=self.resolution,
- cell_size=self.cell_size,
- default_material=self.silicon,
- k_point=self.k_point,
- boundary_layers=self.pml_x,
- sources=self.pt_source,
- geometry=geometry)
+ def adjoint_solver_complex_fields(
+ self, design_params, frequencies=None, need_gradient=True
+ ):
+ matgrid = mp.MaterialGrid(
+ mp.Vector3(self.Nx, self.Ny),
+ mp.air,
+ self.silicon,
+ weights=np.ones((self.Nx, self.Ny)),
+ )
+
+ matgrid_region = mpa.DesignRegion(
+ matgrid,
+ volume=mp.Volume(
+ center=mp.Vector3(),
+ size=mp.Vector3(
+ self.design_region_size.x, self.design_region_size.y, 0
+ ),
+ ),
+ )
+
+ geometry = [
+ mp.Block(
+ center=matgrid_region.center, size=matgrid_region.size, material=matgrid
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=self.resolution,
+ cell_size=self.cell_size,
+ default_material=self.silicon,
+ k_point=self.k_point,
+ boundary_layers=self.pml_x,
+ sources=self.pt_source,
+ geometry=geometry,
+ )
if not frequencies:
frequencies = [self.fcen]
- obj_list = [mpa.FourierFields(sim,
- mp.Volume(center=mp.Vector3(0.9),
- size=mp.Vector3(0.2,0.5)),
- mp.Dz)]
+ obj_list = [
+ mpa.FourierFields(
+ sim, mp.Volume(center=mp.Vector3(0.9), size=mp.Vector3(0.2, 0.5)), mp.Dz
+ )
+ ]
def J(dft_mon):
- return npa.power(npa.abs(dft_mon[:,3,9]),2)
+ return npa.power(npa.abs(dft_mon[:, 3, 9]), 2)
- opt = mpa.OptimizationProblem(simulation=sim,
- objective_functions=J,
- objective_arguments=obj_list,
- design_regions=[matgrid_region],
- frequencies=frequencies)
+ opt = mpa.OptimizationProblem(
+ simulation=sim,
+ objective_functions=J,
+ objective_arguments=obj_list,
+ design_regions=[matgrid_region],
+ frequencies=frequencies,
+ )
if need_gradient:
f, dJ_du = opt([design_params])
@@ -186,50 +247,69 @@ def J(dft_mon):
f = opt([design_params], need_gradient=False)
return f[0]
-
- def adjoint_solver_damping(self, design_params, frequencies=None, mat2=None, need_gradient=True):
- matgrid = mp.MaterialGrid(mp.Vector3(self.Nx,self.Ny),
- mp.air,
- self.silicon if mat2 is None else mat2,
- weights=np.ones((self.Nx,self.Ny)),
- damping=np.pi*self.fcen)
-
- matgrid_region = mpa.DesignRegion(matgrid,
- volume=mp.Volume(center=mp.Vector3(),
- size=mp.Vector3(self.design_region_size.x,
- self.design_region_size.y,
- 0)))
-
- matgrid_geometry = [mp.Block(center=matgrid_region.center,
- size=matgrid_region.size,
- material=matgrid)]
+ def adjoint_solver_damping(
+ self, design_params, frequencies=None, mat2=None, need_gradient=True
+ ):
+ matgrid = mp.MaterialGrid(
+ mp.Vector3(self.Nx, self.Ny),
+ mp.air,
+ self.silicon if mat2 is None else mat2,
+ weights=np.ones((self.Nx, self.Ny)),
+ damping=np.pi * self.fcen,
+ )
+
+ matgrid_region = mpa.DesignRegion(
+ matgrid,
+ volume=mp.Volume(
+ center=mp.Vector3(),
+ size=mp.Vector3(
+ self.design_region_size.x, self.design_region_size.y, 0
+ ),
+ ),
+ )
+
+ matgrid_geometry = [
+ mp.Block(
+ center=matgrid_region.center, size=matgrid_region.size, material=matgrid
+ )
+ ]
geometry = self.waveguide_geometry + matgrid_geometry
- sim = mp.Simulation(resolution=self.resolution,
- cell_size=self.cell_size,
- boundary_layers=self.pml_xy,
- sources=self.mode_source,
- geometry=geometry)
+ sim = mp.Simulation(
+ resolution=self.resolution,
+ cell_size=self.cell_size,
+ boundary_layers=self.pml_xy,
+ sources=self.mode_source,
+ geometry=geometry,
+ )
if not frequencies:
frequencies = [self.fcen]
- obj_list = [mpa.EigenmodeCoefficient(sim,
- mp.Volume(center=mp.Vector3(0.5*self.sxy-self.dpml),
- size=mp.Vector3(0,self.sxy-2*self.dpml,0)),
- 1,
- eig_parity=self.eig_parity)]
+ obj_list = [
+ mpa.EigenmodeCoefficient(
+ sim,
+ mp.Volume(
+ center=mp.Vector3(0.5 * self.sxy - self.dpml),
+ size=mp.Vector3(0, self.sxy - 2 * self.dpml, 0),
+ ),
+ 1,
+ eig_parity=self.eig_parity,
+ )
+ ]
def J(mode_mon):
- return npa.power(npa.abs(mode_mon),2)
+ return npa.power(npa.abs(mode_mon), 2)
- opt = mpa.OptimizationProblem(simulation=sim,
- objective_functions=J,
- objective_arguments=obj_list,
- design_regions=[matgrid_region],
- frequencies=frequencies,
- minimum_run_time=150)
+ opt = mpa.OptimizationProblem(
+ simulation=sim,
+ objective_functions=J,
+ objective_arguments=obj_list,
+ design_regions=[matgrid_region],
+ frequencies=frequencies,
+ minimum_run_time=150,
+ )
if need_gradient:
f, dJ_du = opt([design_params])
@@ -238,99 +318,102 @@ def J(mode_mon):
f = opt([design_params], need_gradient=False)
return f[0]
+ def mapping(self, x, filter_radius, eta, beta):
+ filtered_field = mpa.conic_filter(
+ x,
+ filter_radius,
+ self.design_region_size.x,
+ self.design_region_size.y,
+ self.design_region_resolution,
+ )
- def mapping(self,x,filter_radius,eta,beta):
- filtered_field = mpa.conic_filter(x,
- filter_radius,
- self.design_region_size.x,
- self.design_region_size.y,
- self.design_region_resolution)
-
- projected_field = mpa.tanh_projection(filtered_field,beta,eta)
+ projected_field = mpa.tanh_projection(filtered_field, beta, eta)
return projected_field.flatten()
-
def test_DFT_fields(self):
print("*** TESTING DFT OBJECTIVE ***")
# test the single frequency and multi frequency cases
- for frequencies in [[self.fcen], [1/1.58, self.fcen, 1/1.53]]:
+ for frequencies in [[self.fcen], [1 / 1.58, self.fcen, 1 / 1.53]]:
# compute objective value and its gradient for unperturbed design
- unperturbed_val, unperturbed_grad = self.adjoint_solver(self.p,
- MonitorObject.DFT,
- frequencies)
+ unperturbed_val, unperturbed_grad = self.adjoint_solver(
+ self.p, MonitorObject.DFT, frequencies
+ )
# compute objective value for perturbed design
- perturbed_val = self.adjoint_solver(self.p+self.dp,
- MonitorObject.DFT,
- frequencies,
- need_gradient=False)
+ perturbed_val = self.adjoint_solver(
+ self.p + self.dp, MonitorObject.DFT, frequencies, need_gradient=False
+ )
# compare directional derivative
if unperturbed_grad.ndim < 2:
- unperturbed_grad = np.expand_dims(unperturbed_grad,axis=1)
- adj_dd = (self.dp[None,:]@unperturbed_grad).flatten()
- fnd_dd = perturbed_val-unperturbed_val
- print(f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)")
+ unperturbed_grad = np.expand_dims(unperturbed_grad, axis=1)
+ adj_dd = (self.dp[None, :] @ unperturbed_grad).flatten()
+ fnd_dd = perturbed_val - unperturbed_val
+ print(
+ f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)"
+ )
tol = 0.07 if mp.is_single_precision() else 0.006
- self.assertClose(adj_dd,fnd_dd,epsilon=tol)
-
+ self.assertClose(adj_dd, fnd_dd, epsilon=tol)
def test_eigenmode(self):
print("*** TESTING EIGENMODE OBJECTIVE ***")
# test the single frequency and multi frequency case
- for frequencies in [[self.fcen], [1/1.58, self.fcen, 1/1.53]]:
+ for frequencies in [[self.fcen], [1 / 1.58, self.fcen, 1 / 1.53]]:
# compute objective value and its gradient for unperturbed design
- unperturbed_val, unperturbed_grad = self.adjoint_solver(self.p,
- MonitorObject.EIGENMODE,
- frequencies)
+ unperturbed_val, unperturbed_grad = self.adjoint_solver(
+ self.p, MonitorObject.EIGENMODE, frequencies
+ )
# compute objective for perturbed design
- perturbed_val = self.adjoint_solver(self.p+self.dp,
- MonitorObject.EIGENMODE,
- frequencies,
- need_gradient=False)
+ perturbed_val = self.adjoint_solver(
+ self.p + self.dp,
+ MonitorObject.EIGENMODE,
+ frequencies,
+ need_gradient=False,
+ )
# compare directional derivative
if unperturbed_grad.ndim < 2:
- unperturbed_grad = np.expand_dims(unperturbed_grad,axis=1)
- adj_dd = (self.dp[None,:]@unperturbed_grad).flatten()
- fnd_dd = perturbed_val-unperturbed_val
- print(f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)")
+ unperturbed_grad = np.expand_dims(unperturbed_grad, axis=1)
+ adj_dd = (self.dp[None, :] @ unperturbed_grad).flatten()
+ fnd_dd = perturbed_val - unperturbed_val
+ print(
+ f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)"
+ )
tol = 0.04 if mp.is_single_precision() else 0.01
- self.assertClose(adj_dd,fnd_dd,epsilon=tol)
-
+ self.assertClose(adj_dd, fnd_dd, epsilon=tol)
def test_ldos(self):
print("*** TESTING LDOS OBJECTIVE ***")
# test the single frequency and multi frequency cases
- for frequencies in [[self.fcen], [1/1.58, self.fcen, 1/1.53]]:
+ for frequencies in [[self.fcen], [1 / 1.58, self.fcen, 1 / 1.53]]:
# compute objective value and its gradient for unperturbed design
- unperturbed_val, unperturbed_grad = self.adjoint_solver(self.p,
- MonitorObject.LDOS,
- frequencies)
+ unperturbed_val, unperturbed_grad = self.adjoint_solver(
+ self.p, MonitorObject.LDOS, frequencies
+ )
# compute objective for perturbed design
- perturbed_val = self.adjoint_solver(self.p+self.dp,
- MonitorObject.LDOS,
- frequencies,
- need_gradient=False)
+ perturbed_val = self.adjoint_solver(
+ self.p + self.dp, MonitorObject.LDOS, frequencies, need_gradient=False
+ )
# compare directional derivative
if unperturbed_grad.ndim < 2:
- unperturbed_grad = np.expand_dims(unperturbed_grad,axis=1)
- adj_dd = (self.dp[None,:]@unperturbed_grad).flatten()
- fnd_dd = perturbed_val-unperturbed_val
- print(f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)")
+ unperturbed_grad = np.expand_dims(unperturbed_grad, axis=1)
+ adj_dd = (self.dp[None, :] @ unperturbed_grad).flatten()
+ fnd_dd = perturbed_val - unperturbed_val
+ print(
+ f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)"
+ )
tol = 0.07 if mp.is_single_precision() else 0.006
- self.assertClose(adj_dd,fnd_dd,epsilon=tol)
-
+ self.assertClose(adj_dd, fnd_dd, epsilon=tol)
def test_gradient_backpropagation(self):
print("*** TESTING GRADIENT BACKPROPAGATION ***")
@@ -340,137 +423,152 @@ def test_gradient_backpropagation(self):
eta = 0.49093
beta = 4.0698
- for frequencies in [[self.fcen], [1/1.58, self.fcen, 1/1.53]]:
- mapped_p = self.mapping(self.p,filter_radius,eta,beta)
+ for frequencies in [[self.fcen], [1 / 1.58, self.fcen, 1 / 1.53]]:
+ mapped_p = self.mapping(self.p, filter_radius, eta, beta)
# compute objective value and its gradient for unperturbed design
- unperturbed_val, unperturbed_grad = self.adjoint_solver(mapped_p,
- MonitorObject.EIGENMODE,
- frequencies)
+ unperturbed_val, unperturbed_grad = self.adjoint_solver(
+ mapped_p, MonitorObject.EIGENMODE, frequencies
+ )
# backpropagate the gradient using vector-Jacobian product
if len(frequencies) > 1:
unperturbed_grad_backprop = np.zeros(unperturbed_grad.shape)
for i in range(len(frequencies)):
- unperturbed_grad_backprop[:,i] = tensor_jacobian_product(self.mapping,0)(self.p,
- filter_radius,
- eta,
- beta,
- unperturbed_grad[:,i])
+ unperturbed_grad_backprop[:, i] = tensor_jacobian_product(
+ self.mapping, 0
+ )(self.p, filter_radius, eta, beta, unperturbed_grad[:, i])
else:
- unperturbed_grad_backprop = tensor_jacobian_product(self.mapping,0)(self.p,
- filter_radius,
- eta,
- beta,
- unperturbed_grad)
+ unperturbed_grad_backprop = tensor_jacobian_product(self.mapping, 0)(
+ self.p, filter_radius, eta, beta, unperturbed_grad
+ )
# compute objective for perturbed design
- perturbed_val = self.adjoint_solver(self.mapping(self.p+self.dp,filter_radius,eta,beta),
- MonitorObject.EIGENMODE,
- frequencies,
- need_gradient=False)
+ perturbed_val = self.adjoint_solver(
+ self.mapping(self.p + self.dp, filter_radius, eta, beta),
+ MonitorObject.EIGENMODE,
+ frequencies,
+ need_gradient=False,
+ )
# compare directional derivative
if unperturbed_grad_backprop.ndim < 2:
- unperturbed_grad_backprop = np.expand_dims(unperturbed_grad_backprop,axis=1)
- adj_dd = (self.dp[None,:]@unperturbed_grad_backprop).flatten()
- fnd_dd = perturbed_val-unperturbed_val
- print(f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)")
+ unperturbed_grad_backprop = np.expand_dims(
+ unperturbed_grad_backprop, axis=1
+ )
+ adj_dd = (self.dp[None, :] @ unperturbed_grad_backprop).flatten()
+ fnd_dd = perturbed_val - unperturbed_val
+ print(
+ f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)"
+ )
tol = 0.025 if mp.is_single_precision() else 0.01
- self.assertClose(adj_dd,fnd_dd,epsilon=tol)
-
+ self.assertClose(adj_dd, fnd_dd, epsilon=tol)
def test_complex_fields(self):
print("*** TESTING COMPLEX FIELDS ***")
- for frequencies in [[self.fcen], [1/1.58, self.fcen, 1/1.53]]:
+ for frequencies in [[self.fcen], [1 / 1.58, self.fcen, 1 / 1.53]]:
# compute objective value and its gradient for unperturbed design
- unperturbed_val, unperturbed_grad = self.adjoint_solver_complex_fields(self.p,
- frequencies)
+ unperturbed_val, unperturbed_grad = self.adjoint_solver_complex_fields(
+ self.p, frequencies
+ )
# compute objective value perturbed design
- perturbed_val = self.adjoint_solver_complex_fields(self.p+self.dp,
- frequencies,
- need_gradient=False)
+ perturbed_val = self.adjoint_solver_complex_fields(
+ self.p + self.dp, frequencies, need_gradient=False
+ )
# compare directional derivative
if unperturbed_grad.ndim < 2:
- unperturbed_grad = np.expand_dims(unperturbed_grad,axis=1)
- adj_dd = (self.dp[None,:]@unperturbed_grad).flatten()
- fnd_dd = perturbed_val-unperturbed_val
- print(f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)")
+ unperturbed_grad = np.expand_dims(unperturbed_grad, axis=1)
+ adj_dd = (self.dp[None, :] @ unperturbed_grad).flatten()
+ fnd_dd = perturbed_val - unperturbed_val
+ print(
+ f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)"
+ )
tol = 0.06 if mp.is_single_precision() else 0.01
- self.assertClose(adj_dd,fnd_dd,epsilon=tol)
-
+ self.assertClose(adj_dd, fnd_dd, epsilon=tol)
def test_damping(self):
print("*** TESTING CONDUCTIVITY ***")
- for frequencies in [[1/1.58, self.fcen, 1/1.53]]:
+ for frequencies in [[1 / 1.58, self.fcen, 1 / 1.53]]:
# compute objective value and its gradient for unperturbed design
- unperturbed_val, unperturbed_grad = self.adjoint_solver_damping(self.p,
- frequencies)
+ unperturbed_val, unperturbed_grad = self.adjoint_solver_damping(
+ self.p, frequencies
+ )
# compute objective value perturbed design
- perturbed_val = self.adjoint_solver_damping(self.p+self.dp,
- frequencies,
- need_gradient=False)
+ perturbed_val = self.adjoint_solver_damping(
+ self.p + self.dp, frequencies, need_gradient=False
+ )
# compare directional derivative
if unperturbed_grad.ndim < 2:
- unperturbed_grad = np.expand_dims(unperturbed_grad,axis=1)
- adj_dd = (self.dp[None,:]@unperturbed_grad).flatten()
- fnd_dd = perturbed_val-unperturbed_val
- print(f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)")
+ unperturbed_grad = np.expand_dims(unperturbed_grad, axis=1)
+ adj_dd = (self.dp[None, :] @ unperturbed_grad).flatten()
+ fnd_dd = perturbed_val - unperturbed_val
+ print(
+ f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)"
+ )
tol = 0.06 if mp.is_single_precision() else 0.04
- self.assertClose(adj_dd,fnd_dd,epsilon=tol)
-
+ self.assertClose(adj_dd, fnd_dd, epsilon=tol)
def test_offdiagonal(self):
print("*** TESTING ANISOTROPIC ε ***")
- filt = lambda x: mpa.conic_filter(x.reshape((self.Nx,self.Ny)),
- 0.25,
- self.design_region_size.x,
- self.design_region_size.y,
- self.design_region_resolution).flatten()
+ filt = lambda x: mpa.conic_filter(
+ x.reshape((self.Nx, self.Ny)),
+ 0.25,
+ self.design_region_size.x,
+ self.design_region_size.y,
+ self.design_region_resolution,
+ ).flatten()
# test the single frequency and multi frequency case
- for frequencies in [[self.fcen], [1/1.58, self.fcen, 1/1.53]]:
+ for frequencies in [[self.fcen], [1 / 1.58, self.fcen, 1 / 1.53]]:
# compute objective value and its gradient for unperturbed design
- unperturbed_val, unperturbed_grad = self.adjoint_solver(filt(self.p),
- MonitorObject.EIGENMODE,
- frequencies,
- self.sapphire)
+ unperturbed_val, unperturbed_grad = self.adjoint_solver(
+ filt(self.p), MonitorObject.EIGENMODE, frequencies, self.sapphire
+ )
# backpropagate the gradient using vector-Jacobian product
if len(frequencies) > 1:
unperturbed_grad_backprop = np.zeros(unperturbed_grad.shape)
for i in range(len(frequencies)):
- unperturbed_grad_backprop[:,i] = tensor_jacobian_product(filt,0)(self.p,
- unperturbed_grad[:,i])
+ unperturbed_grad_backprop[:, i] = tensor_jacobian_product(filt, 0)(
+ self.p, unperturbed_grad[:, i]
+ )
else:
- unperturbed_grad_backprop = tensor_jacobian_product(filt,0)(self.p,unperturbed_grad)
+ unperturbed_grad_backprop = tensor_jacobian_product(filt, 0)(
+ self.p, unperturbed_grad
+ )
# compute objective value perturbed design
- perturbed_val = self.adjoint_solver(filt(self.p+self.dp),
- MonitorObject.EIGENMODE,
- frequencies,
- self.sapphire,
- need_gradient=False)
+ perturbed_val = self.adjoint_solver(
+ filt(self.p + self.dp),
+ MonitorObject.EIGENMODE,
+ frequencies,
+ self.sapphire,
+ need_gradient=False,
+ )
# compare directional derivative
if unperturbed_grad_backprop.ndim < 2:
- unperturbed_grad_backprop = np.expand_dims(unperturbed_grad_backprop,axis=1)
- adj_dd = (self.dp[None,:]@unperturbed_grad_backprop).flatten()
- fnd_dd = perturbed_val-unperturbed_val
- print(f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)")
+ unperturbed_grad_backprop = np.expand_dims(
+ unperturbed_grad_backprop, axis=1
+ )
+ adj_dd = (self.dp[None, :] @ unperturbed_grad_backprop).flatten()
+ fnd_dd = perturbed_val - unperturbed_val
+ print(
+ f"directional derivative:, {adj_dd} (adjoint solver), {fnd_dd} (finite difference)"
+ )
tol = 0.1 if mp.is_single_precision() else 0.04
- self.assertClose(adj_dd,fnd_dd,epsilon=tol)
+ self.assertClose(adj_dd, fnd_dd, epsilon=tol)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_adjoint_utils.py b/python/tests/test_adjoint_utils.py
index 6ed5c684f..267d32813 100644
--- a/python/tests/test_adjoint_utils.py
+++ b/python/tests/test_adjoint_utils.py
@@ -1,12 +1,13 @@
-'''test_adjoint_utils.py
+"""test_adjoint_utils.py
Check various components of the adjoint solver codebase, like
filters, which may not need explicit gradient computation
(i.e. forward and adjoint runs).
-'''
+"""
import meep as mp
+
try:
import meep.adjoint as mpa
except:
@@ -24,25 +25,29 @@
## ensure reproducible results
rng = np.random.RandomState(9861548)
+
class TestAdjointUtils(ApproxComparisonTestCase):
- @parameterized.parameterized.expand([
- ('1.0_1.0_20_conic',1.0, 1.0, 20, 0.24, mpa.conic_filter),
- ('1.0_1.0_23_conic',1.0, 1.0, 23, 0.24, mpa.conic_filter),
- ('0.887_1.56_conic',0.887, 1.56, 20, 0.24, mpa.conic_filter),
- ('0.887_1.56_conic',0.887, 1.56, 31, 0.24, mpa.conic_filter),
- ('0.887_1.56_gaussian',0.887, 1.56, 20, 0.24, mpa.gaussian_filter),
- ('0.887_1.56_cylindrical',0.887, 1.56, 20, 0.24, mpa.cylindrical_filter)
- ])
- def test_filter_offset(self,test_name,Lx,Ly,resolution,radius,filter_func):
- '''ensure that the filters are indeed zero-phase'''
- print("Testing ",test_name)
- Nx, Ny = int(resolution*Lx), int(resolution*Ly)
- x = np.random.rand(Nx,Ny)
+ @parameterized.parameterized.expand(
+ [
+ ("1.0_1.0_20_conic", 1.0, 1.0, 20, 0.24, mpa.conic_filter),
+ ("1.0_1.0_23_conic", 1.0, 1.0, 23, 0.24, mpa.conic_filter),
+ ("0.887_1.56_conic", 0.887, 1.56, 20, 0.24, mpa.conic_filter),
+ ("0.887_1.56_conic", 0.887, 1.56, 31, 0.24, mpa.conic_filter),
+ ("0.887_1.56_gaussian", 0.887, 1.56, 20, 0.24, mpa.gaussian_filter),
+ ("0.887_1.56_cylindrical", 0.887, 1.56, 20, 0.24, mpa.cylindrical_filter),
+ ]
+ )
+ def test_filter_offset(self, test_name, Lx, Ly, resolution, radius, filter_func):
+ """ensure that the filters are indeed zero-phase"""
+ print("Testing ", test_name)
+ Nx, Ny = int(resolution * Lx), int(resolution * Ly)
+ x = np.random.rand(Nx, Ny)
x = x + np.fliplr(x)
x = x + np.flipud(x)
y = filter_func(x, radius, Lx, Ly, resolution)
- self.assertClose(y,np.fliplr(y),epsilon=_TOL)
- self.assertClose(y,np.flipud(y),epsilon=_TOL)
+ self.assertClose(y, np.fliplr(y), epsilon=_TOL)
+ self.assertClose(y, np.flipud(y), epsilon=_TOL)
+
-if __name__ == '__main__':
- unittest.main()
\ No newline at end of file
+if __name__ == "__main__":
+ unittest.main()
diff --git a/python/tests/test_antenna_radiation.py b/python/tests/test_antenna_radiation.py
index 44dade129..89e3ee504 100644
--- a/python/tests/test_antenna_radiation.py
+++ b/python/tests/test_antenna_radiation.py
@@ -4,95 +4,101 @@
import unittest
from utils import ApproxComparisonTestCase
-class TestAntennaRadiation(ApproxComparisonTestCase):
+class TestAntennaRadiation(ApproxComparisonTestCase):
@classmethod
def setUp(cls):
cls.resolution = 100 # pixels/μm
- cls.h = 1.125 # height of point source above ground plane
- cls.n = 1.2 # refractive index of surrounding medium
+ cls.h = 1.125 # height of point source above ground plane
+ cls.n = 1.2 # refractive index of surrounding medium
cls.src_cmpt = mp.Ez
cls.wvl = 0.65
- cls.npts = 50 # number of points in [0,pi/2) range of angles
- cls.angles = 0.5*math.pi/cls.npts*np.arange(cls.npts)
- cls.r = 1000*cls.wvl # radius of far-field hemicircle
+ cls.npts = 50 # number of points in [0,pi/2) range of angles
+ cls.angles = 0.5 * math.pi / cls.npts * np.arange(cls.npts)
+ cls.r = 1000 * cls.wvl # radius of far-field hemicircle
-
- def radial_flux(self,sim,nearfield_box,r):
- E = np.zeros((self.npts,3),dtype=np.complex128)
- H = np.zeros((self.npts,3),dtype=np.complex128)
+ def radial_flux(self, sim, nearfield_box, r):
+ E = np.zeros((self.npts, 3), dtype=np.complex128)
+ H = np.zeros((self.npts, 3), dtype=np.complex128)
for n in range(self.npts):
- ff = sim.get_farfield(nearfield_box,
- mp.Vector3(r*math.sin(self.angles[n]),
- r*math.cos(self.angles[n])))
- E[n,:] = [np.conj(ff[j]) for j in range(3)]
- H[n,:] = [ff[j+3] for j in range(3)]
-
- Px = np.real(E[:,1]*H[:,2]-E[:,2]*H[:,1]) # Ey*Hz-Ez*Hy
- Py = np.real(E[:,2]*H[:,0]-E[:,0]*H[:,2]) # Ez*Hx-Ex*Hz
- return np.sqrt(np.square(Px)+np.square(Py))
+ ff = sim.get_farfield(
+ nearfield_box,
+ mp.Vector3(r * math.sin(self.angles[n]), r * math.cos(self.angles[n])),
+ )
+ E[n, :] = [np.conj(ff[j]) for j in range(3)]
+ H[n, :] = [ff[j + 3] for j in range(3)]
+ Px = np.real(E[:, 1] * H[:, 2] - E[:, 2] * H[:, 1]) # Ey*Hz-Ez*Hy
+ Py = np.real(E[:, 2] * H[:, 0] - E[:, 0] * H[:, 2]) # Ez*Hx-Ex*Hz
+ return np.sqrt(np.square(Px) + np.square(Py))
def free_space_radiation(self):
sxy = 4
dpml = 1
- cell_size = mp.Vector3(sxy+2*dpml,sxy+2*dpml)
+ cell_size = mp.Vector3(sxy + 2 * dpml, sxy + 2 * dpml)
pml_layers = [mp.PML(dpml)]
- fcen = 1/self.wvl
+ fcen = 1 / self.wvl
- sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),
- center=mp.Vector3(),
- component=self.src_cmpt)]
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ center=mp.Vector3(),
+ component=self.src_cmpt,
+ )
+ ]
if self.src_cmpt == mp.Hz:
- symmetries = [mp.Mirror(mp.X,phase=-1),
- mp.Mirror(mp.Y,phase=-1)]
+ symmetries = [mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=-1)]
elif self.src_cmpt == mp.Ez:
- symmetries = [mp.Mirror(mp.X,phase=+1),
- mp.Mirror(mp.Y,phase=+1)]
+ symmetries = [mp.Mirror(mp.X, phase=+1), mp.Mirror(mp.Y, phase=+1)]
else:
symmetries = []
- sim = mp.Simulation(cell_size=cell_size,
- resolution=self.resolution,
- sources=sources,
- symmetries=symmetries,
- boundary_layers=pml_layers,
- default_material=mp.Medium(index=self.n))
-
- nearfield_box = sim.add_near2far(fcen,
- 0,
- 1,
- mp.Near2FarRegion(center=mp.Vector3(0,+0.5*sxy),
- size=mp.Vector3(sxy,0)),
- mp.Near2FarRegion(center=mp.Vector3(0,-0.5*sxy),
- size=mp.Vector3(sxy,0),
- weight=-1),
- mp.Near2FarRegion(center=mp.Vector3(+0.5*sxy,0),
- size=mp.Vector3(0,sxy)),
- mp.Near2FarRegion(center=mp.Vector3(-0.5*sxy,0),
- size=mp.Vector3(0,sxy),
- weight=-1))
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=self.resolution,
+ sources=sources,
+ symmetries=symmetries,
+ boundary_layers=pml_layers,
+ default_material=mp.Medium(index=self.n),
+ )
+
+ nearfield_box = sim.add_near2far(
+ fcen,
+ 0,
+ 1,
+ mp.Near2FarRegion(
+ center=mp.Vector3(0, +0.5 * sxy), size=mp.Vector3(sxy, 0)
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(0, -0.5 * sxy), size=mp.Vector3(sxy, 0), weight=-1
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(+0.5 * sxy, 0), size=mp.Vector3(0, sxy)
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(-0.5 * sxy, 0), size=mp.Vector3(0, sxy), weight=-1
+ ),
+ )
sim.run(until_after_sources=mp.stop_when_dft_decayed())
- return self.radial_flux(sim,nearfield_box,self.r)
-
+ return self.radial_flux(sim, nearfield_box, self.r)
def pec_ground_plane_radiation(self):
- L = 8.0 # length of non-PML region
+ L = 8.0 # length of non-PML region
dpml = 1.0 # thickness of PML
- sxy = dpml+L+dpml
- cell_size = mp.Vector3(sxy,sxy,0)
+ sxy = dpml + L + dpml
+ cell_size = mp.Vector3(sxy, sxy, 0)
boundary_layers = [mp.PML(dpml)]
- fcen = 1/self.wvl
+ fcen = 1 / self.wvl
# The near-to-far field transformation feature only supports
# homogeneous media which means it cannot explicitly take into
@@ -103,44 +109,57 @@ def pec_ground_plane_radiation(self):
# equivalent to a PEC boundary condition on one side.
# Note: This setup means that the radiation pattern can only
# be measured in the top half above the dipole.
- sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),
- component=self.src_cmpt,
- center=mp.Vector3(0,+self.h)),
- mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),
- component=self.src_cmpt,
- center=mp.Vector3(0,-self.h),
- amplitude=-1 if self.src_cmpt==mp.Ez else +1)]
-
- symmetries = [mp.Mirror(direction=mp.X,
- phase=+1 if self.src_cmpt==mp.Ez else -1),
- mp.Mirror(direction=mp.Y,
- phase=-1 if self.src_cmpt==mp.Ez else +1)]
-
- sim = mp.Simulation(resolution=self.resolution,
- cell_size=cell_size,
- boundary_layers=boundary_layers,
- sources=sources,
- symmetries=symmetries,
- default_material=mp.Medium(index=self.n))
-
- nearfield_box = sim.add_near2far(fcen,
- 0,
- 1,
- mp.Near2FarRegion(center=mp.Vector3(0,2*self.h),
- size=mp.Vector3(2*self.h,0)),
- mp.Near2FarRegion(center=mp.Vector3(0,-2*self.h),
- size=mp.Vector3(2*self.h,0),
- weight=-1),
- mp.Near2FarRegion(center=mp.Vector3(self.h,0),
- size=mp.Vector3(0,4*self.h)),
- mp.Near2FarRegion(center=mp.Vector3(-self.h,0),
- size=mp.Vector3(0,4*self.h),
- weight=-1))
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ component=self.src_cmpt,
+ center=mp.Vector3(0, +self.h),
+ ),
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ component=self.src_cmpt,
+ center=mp.Vector3(0, -self.h),
+ amplitude=-1 if self.src_cmpt == mp.Ez else +1,
+ ),
+ ]
+
+ symmetries = [
+ mp.Mirror(direction=mp.X, phase=+1 if self.src_cmpt == mp.Ez else -1),
+ mp.Mirror(direction=mp.Y, phase=-1 if self.src_cmpt == mp.Ez else +1),
+ ]
+
+ sim = mp.Simulation(
+ resolution=self.resolution,
+ cell_size=cell_size,
+ boundary_layers=boundary_layers,
+ sources=sources,
+ symmetries=symmetries,
+ default_material=mp.Medium(index=self.n),
+ )
+
+ nearfield_box = sim.add_near2far(
+ fcen,
+ 0,
+ 1,
+ mp.Near2FarRegion(
+ center=mp.Vector3(0, 2 * self.h), size=mp.Vector3(2 * self.h, 0)
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(0, -2 * self.h),
+ size=mp.Vector3(2 * self.h, 0),
+ weight=-1,
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(self.h, 0), size=mp.Vector3(0, 4 * self.h)
+ ),
+ mp.Near2FarRegion(
+ center=mp.Vector3(-self.h, 0), size=mp.Vector3(0, 4 * self.h), weight=-1
+ ),
+ )
sim.run(until_after_sources=mp.stop_when_dft_decayed())
- return self.radial_flux(sim,nearfield_box,self.r)
-
+ return self.radial_flux(sim, nearfield_box, self.r)
def test_pec_ground_plane(self):
"""Unit test for near-to-far field transformation and symmetries.
@@ -157,18 +176,19 @@ def test_pec_ground_plane(self):
Pr_fsp = self.free_space_radiation()
Pr_pec = self.pec_ground_plane_radiation()
- k = 2*np.pi/(self.wvl/self.n) # wavevector in medium
- Pr_theory = np.zeros(self.npts,)
- for i,ang in enumerate(self.angles):
- Pr_theory[i] = Pr_fsp[i] * 2*np.sin(k*self.h*np.cos(ang))
+ k = 2 * np.pi / (self.wvl / self.n) # wavevector in medium
+ Pr_theory = np.zeros(
+ self.npts,
+ )
+ for i, ang in enumerate(self.angles):
+ Pr_theory[i] = Pr_fsp[i] * 2 * np.sin(k * self.h * np.cos(ang))
- Pr_pec_norm = Pr_pec/np.max(Pr_pec)
- Pr_theory_norm = (Pr_theory/max(Pr_theory))**2
+ Pr_pec_norm = Pr_pec / np.max(Pr_pec)
+ Pr_theory_norm = (Pr_theory / max(Pr_theory)) ** 2
tol = 0.02
self.assertClose(Pr_pec_norm, Pr_theory_norm, epsilon=tol)
-
def test_poynting_theorem(self):
"""Unit test for near-to-far field transformation in 2d.
@@ -183,87 +203,102 @@ def test_poynting_theorem(self):
resolution = 50
sxy = 4
dpml = 1
- cell = mp.Vector3(sxy+2*dpml,sxy+2*dpml)
+ cell = mp.Vector3(sxy + 2 * dpml, sxy + 2 * dpml)
pml_layers = mp.PML(dpml)
fcen = 1.0
df = 0.4
- sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=df),
- center=mp.Vector3(),
- component=mp.Ez)]
-
- symmetries = [mp.Mirror(mp.X),
- mp.Mirror(mp.Y)]
-
- sim = mp.Simulation(cell_size=cell,
- resolution=resolution,
- sources=sources,
- symmetries=symmetries,
- boundary_layers=[pml_layers])
-
- nearfield_box = sim.add_near2far(fcen,
- 0,
- 1,
- mp.Near2FarRegion(mp.Vector3(y=0.5*sxy),
- size=mp.Vector3(sxy)),
- mp.Near2FarRegion(mp.Vector3(y=-0.5*sxy),
- size=mp.Vector3(sxy),
- weight=-1),
- mp.Near2FarRegion(mp.Vector3(0.5*sxy),
- size=mp.Vector3(y=sxy)),
- mp.Near2FarRegion(mp.Vector3(-0.5*sxy),
- size=mp.Vector3(y=sxy),
- weight=-1))
-
- flux_box = sim.add_flux(fcen,
- 0,
- 1,
- mp.FluxRegion(mp.Vector3(y=0.5*sxy),
- size=mp.Vector3(sxy)),
- mp.FluxRegion(mp.Vector3(y=-0.5*sxy),
- size=mp.Vector3(sxy),
- weight=-1),
- mp.FluxRegion(mp.Vector3(0.5*sxy),
- size=mp.Vector3(y=sxy)),
- mp.FluxRegion(mp.Vector3(-0.5*sxy),
- size=mp.Vector3(y=sxy),
- weight=-1))
-
- sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mp.Vector3(), 1e-8))
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=df),
+ center=mp.Vector3(),
+ component=mp.Ez,
+ )
+ ]
+
+ symmetries = [mp.Mirror(mp.X), mp.Mirror(mp.Y)]
+
+ sim = mp.Simulation(
+ cell_size=cell,
+ resolution=resolution,
+ sources=sources,
+ symmetries=symmetries,
+ boundary_layers=[pml_layers],
+ )
+
+ nearfield_box = sim.add_near2far(
+ fcen,
+ 0,
+ 1,
+ mp.Near2FarRegion(mp.Vector3(y=0.5 * sxy), size=mp.Vector3(sxy)),
+ mp.Near2FarRegion(
+ mp.Vector3(y=-0.5 * sxy), size=mp.Vector3(sxy), weight=-1
+ ),
+ mp.Near2FarRegion(mp.Vector3(0.5 * sxy), size=mp.Vector3(y=sxy)),
+ mp.Near2FarRegion(
+ mp.Vector3(-0.5 * sxy), size=mp.Vector3(y=sxy), weight=-1
+ ),
+ )
+
+ flux_box = sim.add_flux(
+ fcen,
+ 0,
+ 1,
+ mp.FluxRegion(mp.Vector3(y=0.5 * sxy), size=mp.Vector3(sxy)),
+ mp.FluxRegion(mp.Vector3(y=-0.5 * sxy), size=mp.Vector3(sxy), weight=-1),
+ mp.FluxRegion(mp.Vector3(0.5 * sxy), size=mp.Vector3(y=sxy)),
+ mp.FluxRegion(mp.Vector3(-0.5 * sxy), size=mp.Vector3(y=sxy), weight=-1),
+ )
+
+ sim.run(
+ until_after_sources=mp.stop_when_fields_decayed(
+ 50, mp.Ez, mp.Vector3(), 1e-8
+ )
+ )
near_flux = mp.get_fluxes(flux_box)[0]
- r = 1000/fcen # radius of far field circle
- Pr = self.radial_flux(sim,nearfield_box,r)
- far_flux_circle = 4*np.sum(Pr)*0.5*np.pi*r/len(Pr)
-
- rr = 20/fcen # length of far-field square box
- res_far = 20 # resolution of far-field square box
- far_flux_square = (nearfield_box.flux(mp.Y,
- mp.Volume(center=mp.Vector3(y=0.5*rr),
- size=mp.Vector3(rr)),
- res_far)[0] -
- nearfield_box.flux(mp.Y,
- mp.Volume(center=mp.Vector3(y=-0.5*rr),
- size=mp.Vector3(rr)),
- res_far)[0] +
- nearfield_box.flux(mp.X,
- mp.Volume(center=mp.Vector3(0.5*rr),
- size=mp.Vector3(y=rr)),
- res_far)[0] -
- nearfield_box.flux(mp.X,
- mp.Volume(center=mp.Vector3(-0.5*rr),
- size=mp.Vector3(y=rr)),
- res_far)[0])
-
- print("flux:, {:.6f}, {:.6f}, {:.6f}".format(near_flux,far_flux_circle,far_flux_square))
+ r = 1000 / fcen # radius of far field circle
+ Pr = self.radial_flux(sim, nearfield_box, r)
+ far_flux_circle = 4 * np.sum(Pr) * 0.5 * np.pi * r / len(Pr)
+
+ rr = 20 / fcen # length of far-field square box
+ res_far = 20 # resolution of far-field square box
+ far_flux_square = (
+ nearfield_box.flux(
+ mp.Y,
+ mp.Volume(center=mp.Vector3(y=0.5 * rr), size=mp.Vector3(rr)),
+ res_far,
+ )[0]
+ - nearfield_box.flux(
+ mp.Y,
+ mp.Volume(center=mp.Vector3(y=-0.5 * rr), size=mp.Vector3(rr)),
+ res_far,
+ )[0]
+ + nearfield_box.flux(
+ mp.X,
+ mp.Volume(center=mp.Vector3(0.5 * rr), size=mp.Vector3(y=rr)),
+ res_far,
+ )[0]
+ - nearfield_box.flux(
+ mp.X,
+ mp.Volume(center=mp.Vector3(-0.5 * rr), size=mp.Vector3(y=rr)),
+ res_far,
+ )[0]
+ )
+
+ print(
+ "flux:, {:.6f}, {:.6f}, {:.6f}".format(
+ near_flux, far_flux_circle, far_flux_square
+ )
+ )
self.assertAlmostEqual(near_flux, far_flux_circle, places=2)
self.assertAlmostEqual(far_flux_circle, far_flux_square, places=2)
self.assertAlmostEqual(far_flux_square, near_flux, places=2)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_array_metadata.py b/python/tests/test_array_metadata.py
index 05f1d8e02..b79b2b150 100644
--- a/python/tests/test_array_metadata.py
+++ b/python/tests/test_array_metadata.py
@@ -3,8 +3,8 @@
import numpy as np
from utils import ApproxComparisonTestCase
-class TestArrayMetadata(ApproxComparisonTestCase):
+class TestArrayMetadata(ApproxComparisonTestCase):
def test_array_metadata(self):
resolution = 25
@@ -14,75 +14,101 @@ def test_array_metadata(self):
pad = 4
dpml = 2
- sxy = 2*(r+w+pad+dpml)
- cell_size = mp.Vector3(sxy,sxy)
+ sxy = 2 * (r + w + pad + dpml)
+ cell_size = mp.Vector3(sxy, sxy)
- nonpml_vol = mp.Volume(mp.Vector3(), size=mp.Vector3(sxy-2*dpml,sxy-2*dpml))
+ nonpml_vol = mp.Volume(
+ mp.Vector3(), size=mp.Vector3(sxy - 2 * dpml, sxy - 2 * dpml)
+ )
- geometry = [mp.Cylinder(radius=r+w, material=mp.Medium(index=n)),
- mp.Cylinder(radius=r)]
+ geometry = [
+ mp.Cylinder(radius=r + w, material=mp.Medium(index=n)),
+ mp.Cylinder(radius=r),
+ ]
fcen = 0.118
df = 0.08
- symmetries = [mp.Mirror(mp.X,phase=-1),
- mp.Mirror(mp.Y,phase=+1)]
+ symmetries = [mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=+1)]
pml_layers = [mp.PML(dpml)]
# CW source
- src = [mp.Source(mp.ContinuousSource(fcen,fwidth=df), mp.Ez, mp.Vector3(r+0.1)),
- mp.Source(mp.ContinuousSource(fcen,fwidth=df), mp.Ez, mp.Vector3(-(r+0.1)), amplitude=-1)]
-
- sim = mp.Simulation(cell_size=cell_size,
- geometry=geometry,
- sources=src,
- resolution=resolution,
- force_complex_fields=True,
- symmetries=symmetries,
- boundary_layers=pml_layers)
+ src = [
+ mp.Source(mp.ContinuousSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r + 0.1)),
+ mp.Source(
+ mp.ContinuousSource(fcen, fwidth=df),
+ mp.Ez,
+ mp.Vector3(-(r + 0.1)),
+ amplitude=-1,
+ ),
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ geometry=geometry,
+ sources=src,
+ resolution=resolution,
+ force_complex_fields=True,
+ symmetries=symmetries,
+ boundary_layers=pml_layers,
+ )
sim.init_sim()
sim.solve_cw(1e-5 if mp.is_single_precision() else 1e-6, 1000, 10)
def electric_energy(r, ez, eps):
- return np.real(eps * np.conj(ez)*ez)
+ return np.real(eps * np.conj(ez) * ez)
def vec_func(r):
- return r.x**2 + 2*r.y**2
-
- electric_energy_total = sim.integrate_field_function([mp.Ez,mp.Dielectric],electric_energy,nonpml_vol)
- electric_energy_max = sim.max_abs_field_function([mp.Ez,mp.Dielectric],electric_energy,nonpml_vol)
- vec_func_total = sim.integrate_field_function([],vec_func,nonpml_vol)
+ return r.x**2 + 2 * r.y**2
+
+ electric_energy_total = sim.integrate_field_function(
+ [mp.Ez, mp.Dielectric], electric_energy, nonpml_vol
+ )
+ electric_energy_max = sim.max_abs_field_function(
+ [mp.Ez, mp.Dielectric], electric_energy, nonpml_vol
+ )
+ vec_func_total = sim.integrate_field_function([], vec_func, nonpml_vol)
cw_modal_volume = (electric_energy_total / electric_energy_max) * vec_func_total
sim.reset_meep()
# pulsed source
- src = [mp.Source(mp.GaussianSource(fcen,fwidth=df), mp.Ez, mp.Vector3(r+0.1)),
- mp.Source(mp.GaussianSource(fcen,fwidth=df), mp.Ez, mp.Vector3(-(r+0.1)), amplitude=-1)]
-
- sim = mp.Simulation(cell_size=cell_size,
- geometry=geometry,
- k_point=mp.Vector3(),
- sources=src,
- resolution=resolution,
- symmetries=symmetries,
- boundary_layers=pml_layers)
+ src = [
+ mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r + 0.1)),
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ mp.Ez,
+ mp.Vector3(-(r + 0.1)),
+ amplitude=-1,
+ ),
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ geometry=geometry,
+ k_point=mp.Vector3(),
+ sources=src,
+ resolution=resolution,
+ symmetries=symmetries,
+ boundary_layers=pml_layers,
+ )
dft_obj = sim.add_dft_fields([mp.Ez], fcen, 0, 1, where=nonpml_vol)
sim.run(until_after_sources=100)
Ez = sim.get_dft_array(dft_obj, mp.Ez, 0)
- (X,Y,Z,W) = sim.get_array_metadata(dft_cell=dft_obj)
+ (X, Y, Z, W) = sim.get_array_metadata(dft_cell=dft_obj)
Eps = sim.get_array(vol=nonpml_vol, component=mp.Dielectric)
- EpsE2 = np.real(Eps*np.conj(Ez)*Ez)
+ EpsE2 = np.real(Eps * np.conj(Ez) * Ez)
xm, ym = np.meshgrid(X, Y)
- vec_func_sum = np.sum(W*(xm**2 + 2*ym**2))
- pulse_modal_volume = np.sum(W*EpsE2)/np.max(EpsE2) * vec_func_sum
+ vec_func_sum = np.sum(W * (xm**2 + 2 * ym**2))
+ pulse_modal_volume = np.sum(W * EpsE2) / np.max(EpsE2) * vec_func_sum
tol = 5e-2 if mp.is_single_precision() else 1e-2
- self.assertClose(cw_modal_volume/pulse_modal_volume, 1.0, epsilon=tol)
+ self.assertClose(cw_modal_volume / pulse_modal_volume, 1.0, epsilon=tol)
+
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_bend_flux.py b/python/tests/test_bend_flux.py
index a8d4f4b08..37d298dcd 100644
--- a/python/tests/test_bend_flux.py
+++ b/python/tests/test_bend_flux.py
@@ -6,7 +6,6 @@
class TestBendFlux(ApproxComparisonTestCase):
-
def init(self, no_bend=False, gdsii=False):
sx = 16
sy = 32
@@ -16,60 +15,91 @@ def init(self, no_bend=False, gdsii=False):
wvg_ycen = -0.5 * (sy - w - (2 * pad))
wvg_xcen = 0.5 * (sx - w - (2 * pad))
height = mp.inf
- data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data'))
- gdsii_file = os.path.join(data_dir, 'bend-flux.gds')
+ data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data"))
+ gdsii_file = os.path.join(data_dir, "bend-flux.gds")
if no_bend:
if gdsii:
- geometry = mp.get_GDSII_prisms(mp.Medium(epsilon=12), gdsii_file, 1, 0, height)
+ geometry = mp.get_GDSII_prisms(
+ mp.Medium(epsilon=12), gdsii_file, 1, 0, height
+ )
else:
- no_bend_vertices = [mp.Vector3(-0.5 * sx - 5, wvg_ycen - 0.5 * w),
- mp.Vector3(+0.5 * sx + 5, wvg_ycen - 0.5 * w),
- mp.Vector3(+0.5 * sx + 5, wvg_ycen + 0.5 * w),
- mp.Vector3(-0.5 * sx - 5, wvg_ycen + 0.5 * w)]
-
- geometry = [mp.Prism(no_bend_vertices, height, material=mp.Medium(epsilon=12))]
+ no_bend_vertices = [
+ mp.Vector3(-0.5 * sx - 5, wvg_ycen - 0.5 * w),
+ mp.Vector3(+0.5 * sx + 5, wvg_ycen - 0.5 * w),
+ mp.Vector3(+0.5 * sx + 5, wvg_ycen + 0.5 * w),
+ mp.Vector3(-0.5 * sx - 5, wvg_ycen + 0.5 * w),
+ ]
+
+ geometry = [
+ mp.Prism(no_bend_vertices, height, material=mp.Medium(epsilon=12))
+ ]
elif gdsii:
- geometry = mp.get_GDSII_prisms(mp.Medium(epsilon=12), gdsii_file, 2, 0, height)
+ geometry = mp.get_GDSII_prisms(
+ mp.Medium(epsilon=12), gdsii_file, 2, 0, height
+ )
else:
- bend_vertices = [mp.Vector3(-0.5 * sx, wvg_ycen - 0.5 * w),
- mp.Vector3(wvg_xcen + 0.5 * w, wvg_ycen - 0.5 * w),
- mp.Vector3(wvg_xcen + 0.5 * w, 0.5 * sy),
- mp.Vector3(wvg_xcen - 0.5 * w, 0.5 * sy),
- mp.Vector3(wvg_xcen - 0.5 * w, wvg_ycen + 0.5 * w),
- mp.Vector3(-0.5 * sx, wvg_ycen + 0.5 * w)]
+ bend_vertices = [
+ mp.Vector3(-0.5 * sx, wvg_ycen - 0.5 * w),
+ mp.Vector3(wvg_xcen + 0.5 * w, wvg_ycen - 0.5 * w),
+ mp.Vector3(wvg_xcen + 0.5 * w, 0.5 * sy),
+ mp.Vector3(wvg_xcen - 0.5 * w, 0.5 * sy),
+ mp.Vector3(wvg_xcen - 0.5 * w, wvg_ycen + 0.5 * w),
+ mp.Vector3(-0.5 * sx, wvg_ycen + 0.5 * w),
+ ]
geometry = [mp.Prism(bend_vertices, height, material=mp.Medium(epsilon=12))]
fcen = 0.15
df = 0.1
- sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez,
- center=mp.Vector3(1 + (-0.5 * sx), wvg_ycen), size=mp.Vector3(0, w))]
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=mp.Vector3(1 + (-0.5 * sx), wvg_ycen),
+ size=mp.Vector3(0, w),
+ )
+ ]
pml_layers = [mp.PML(1.0)]
resolution = 10
nfreq = 100
- self.sim = mp.Simulation(cell_size=cell,
- boundary_layers=pml_layers,
- geometry=geometry,
- sources=sources,
- resolution=resolution)
+ self.sim = mp.Simulation(
+ cell_size=cell,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ sources=sources,
+ resolution=resolution,
+ )
if no_bend:
- fr = mp.FluxRegion(center=mp.Vector3((sx / 2) - 1.5, wvg_ycen), size=mp.Vector3(0, w * 2))
+ fr = mp.FluxRegion(
+ center=mp.Vector3((sx / 2) - 1.5, wvg_ycen), size=mp.Vector3(0, w * 2)
+ )
else:
- fr = mp.FluxRegion(center=mp.Vector3(wvg_xcen, (sy / 2) - 1.5), size=mp.Vector3(w * 2, 0))
+ fr = mp.FluxRegion(
+ center=mp.Vector3(wvg_xcen, (sy / 2) - 1.5), size=mp.Vector3(w * 2, 0)
+ )
self.trans = self.sim.add_flux(fcen, df, nfreq, fr, decimation_factor=1)
- self.trans_decimated = self.sim.add_flux(fcen, df, nfreq, fr, decimation_factor=5)
-
- refl_fr = mp.FluxRegion(center=mp.Vector3((-0.5 * sx) + 1.5, wvg_ycen),
- size=mp.Vector3(0, w * 2))
- self.refl = self.sim.add_flux(np.linspace(fcen-0.5*df,fcen+0.5*df,nfreq), refl_fr,
- decimation_factor=1)
- self.refl_decimated = self.sim.add_flux(np.linspace(fcen-0.5*df,fcen+0.5*df,nfreq), refl_fr,
- decimation_factor=10)
+ self.trans_decimated = self.sim.add_flux(
+ fcen, df, nfreq, fr, decimation_factor=5
+ )
+
+ refl_fr = mp.FluxRegion(
+ center=mp.Vector3((-0.5 * sx) + 1.5, wvg_ycen), size=mp.Vector3(0, w * 2)
+ )
+ self.refl = self.sim.add_flux(
+ np.linspace(fcen - 0.5 * df, fcen + 0.5 * df, nfreq),
+ refl_fr,
+ decimation_factor=1,
+ )
+ self.refl_decimated = self.sim.add_flux(
+ np.linspace(fcen - 0.5 * df, fcen + 0.5 * df, nfreq),
+ refl_fr,
+ decimation_factor=10,
+ )
if no_bend:
self.pt = mp.Vector3((sx / 2) - 1.5, wvg_ycen)
@@ -107,13 +137,21 @@ def run_bend_flux(self, from_gdsii_file):
(0.119191919192, 0.0254987474079, 0.0252348211592),
]
- res = list(zip(mp.get_flux_freqs(self.trans),
- mp.get_fluxes(self.trans),
- mp.get_fluxes(self.refl)))
-
- res_decimated = list(zip(mp.get_flux_freqs(self.trans_decimated),
- mp.get_fluxes(self.trans_decimated),
- mp.get_fluxes(self.refl_decimated)))
+ res = list(
+ zip(
+ mp.get_flux_freqs(self.trans),
+ mp.get_fluxes(self.trans),
+ mp.get_fluxes(self.refl),
+ )
+ )
+
+ res_decimated = list(
+ zip(
+ mp.get_flux_freqs(self.trans_decimated),
+ mp.get_fluxes(self.trans_decimated),
+ mp.get_fluxes(self.refl_decimated),
+ )
+ )
tol = 1e-6 if mp.is_single_precision() else 1e-8
self.assertClose(np.array(expected), np.array(res[:20]), epsilon=tol)
@@ -150,13 +188,21 @@ def run_bend_flux(self, from_gdsii_file):
(0.11919191919191931, 0.008646855439680507, -0.005614491919262783),
]
- res = list(zip(mp.get_flux_freqs(self.trans),
- mp.get_fluxes(self.trans),
- mp.get_fluxes(self.refl)))
-
- res_decimated = list(zip(mp.get_flux_freqs(self.trans_decimated),
- mp.get_fluxes(self.trans_decimated),
- mp.get_fluxes(self.refl_decimated)))
+ res = list(
+ zip(
+ mp.get_flux_freqs(self.trans),
+ mp.get_fluxes(self.trans),
+ mp.get_fluxes(self.refl),
+ )
+ )
+
+ res_decimated = list(
+ zip(
+ mp.get_flux_freqs(self.trans_decimated),
+ mp.get_fluxes(self.trans_decimated),
+ mp.get_fluxes(self.refl_decimated),
+ )
+ )
tol = 1e-3
self.assertClose(np.array(expected), np.array(res[:20]), epsilon=tol)
@@ -168,5 +214,5 @@ def test_bend_flux(self):
self.run_bend_flux(True)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_binary_grating.py b/python/tests/test_binary_grating.py
index 51b5a0e69..eff359a9b 100644
--- a/python/tests/test_binary_grating.py
+++ b/python/tests/test_binary_grating.py
@@ -9,282 +9,330 @@
class TestEigCoeffs(unittest.TestCase):
- @classmethod
- def setUpClass(cls):
- cls.resolution = 30 # pixels/μm
-
- cls.dpml = 1.0 # PML thickness
- cls.dsub = 1.0 # substrate thickness
- cls.dpad = 1.0 # padding thickness between grating and PML
- cls.gp = 6.0 # grating period
- cls.gh = 0.5 # grating height
- cls.gdc = 0.5 # grating duty cycle
-
- cls.sx = cls.dpml+cls.dsub+cls.gh+cls.dpad+cls.dpml
- cls.sy = cls.gp
-
- cls.cell_size = mp.Vector3(cls.sx,cls.sy,0)
-
- # replace anisotropic PML with isotropic Absorber to
- # attenuate parallel-directed fields of oblique source
- cls.abs_layers = [mp.Absorber(thickness=cls.dpml,direction=mp.X)]
-
- wvl = 0.5 # center wavelength
- cls.fcen = 1/wvl # center frequency
- cls.df = 0.05*cls.fcen # frequency width
-
- cls.ng = 1.5
- cls.glass = mp.Medium(index=cls.ng)
-
- cls.geometry = [mp.Block(material=cls.glass,
- size=mp.Vector3(cls.dpml+cls.dsub,mp.inf,mp.inf),
- center=mp.Vector3(-0.5*cls.sx+0.5*(cls.dpml+cls.dsub),0,0)),
- mp.Block(material=cls.glass,
- size=mp.Vector3(cls.gh,cls.gdc*cls.gp,mp.inf),
- center=mp.Vector3(-0.5*cls.sx+cls.dpml+cls.dsub+0.5*cls.gh,0,0))]
-
-
- @parameterized.parameterized.expand([(0,), (10.7,)])
- def test_binary_grating_oblique(self, theta):
- # rotation angle of incident planewave
- # counterclockwise (CCW) about Z axis, 0 degrees along +X axis
- theta_in = math.radians(theta)
-
- # k (in source medium) with correct length (plane of incidence: XY)
- k = mp.Vector3(self.fcen*self.ng).rotate(mp.Vector3(0,0,1), theta_in)
-
- symmetries = []
- eig_parity = mp.ODD_Z
- if theta_in == 0:
- symmetries = [mp.Mirror(mp.Y)]
- eig_parity += mp.EVEN_Y
-
- def pw_amp(k,x0):
- def _pw_amp(x):
- return cmath.exp(1j*2*math.pi*k.dot(x+x0))
- return _pw_amp
-
- src_pt = mp.Vector3(-0.5*self.sx+self.dpml,0,0)
- sources = [mp.Source(mp.GaussianSource(self.fcen,fwidth=self.df),
- component=mp.Ez, # S polarization
- center=src_pt,
- size=mp.Vector3(0,self.sy,0),
- amp_func=pw_amp(k,src_pt))]
-
- sim = mp.Simulation(resolution=self.resolution,
- cell_size=self.cell_size,
- boundary_layers=self.abs_layers,
- k_point=k,
- default_material=self.glass,
- sources=sources,
- symmetries=symmetries)
-
- refl_pt = mp.Vector3(-0.5*self.sx+self.dpml+0.5*self.dsub,0,0)
- refl_flux = sim.add_flux(self.fcen,
- 0,
- 1,
- mp.FluxRegion(center=refl_pt,
- size=mp.Vector3(0,self.sy,0)))
-
- sim.run(until_after_sources=mp.stop_when_dft_decayed())
-
- input_flux = mp.get_fluxes(refl_flux)
- input_flux_data = sim.get_flux_data(refl_flux)
-
- sim.reset_meep()
-
- sim = mp.Simulation(resolution=self.resolution,
- cell_size=self.cell_size,
- boundary_layers=self.abs_layers,
- geometry=self.geometry,
- k_point=k,
- sources=sources,
- symmetries=symmetries)
-
- refl_flux = sim.add_flux(self.fcen,
- 0,
- 1,
- mp.FluxRegion(center=refl_pt,
- size=mp.Vector3(0,self.sy,0)))
-
- sim.load_minus_flux_data(refl_flux,input_flux_data)
-
- tran_pt = mp.Vector3(0.5*self.sx-self.dpml-0.5*self.dpad,0,0)
- tran_flux = sim.add_flux(self.fcen,
- 0,
- 1,
- mp.FluxRegion(center=tran_pt,
- size=mp.Vector3(0,self.sy,0)))
-
- sim.run(until_after_sources=mp.stop_when_dft_decayed())
-
- # number of reflected orders
- nm_r = np.floor((self.fcen*self.ng-k.y)*self.gp)-np.ceil((-self.fcen*self.ng-k.y)*self.gp)
- if theta_in == 0:
- nm_r = nm_r/2 # since eig_parity removes degeneracy in y-direction
- nm_r = int(nm_r)
-
- res = sim.get_eigenmode_coefficients(refl_flux,
- range(1,nm_r+1),
- eig_parity=eig_parity)
- r_coeffs = res.alpha
-
- Rsum = 0
- for nm in range(nm_r):
- Rsum += abs(r_coeffs[nm,0,1])**2/input_flux[0]
-
- # number of transmitted orders
- nm_t = np.floor((self.fcen-k.y)*self.gp)-np.ceil((-self.fcen-k.y)*self.gp)
- if theta_in == 0:
- nm_t = nm_t/2 # since eig_parity removes degeneracy in y-direction
- nm_t = int(nm_t)
-
- res = sim.get_eigenmode_coefficients(tran_flux,
- range(1,nm_t+1),
- eig_parity=eig_parity)
- t_coeffs = res.alpha
-
- Tsum = 0
- for nm in range(nm_t):
- Tsum += abs(t_coeffs[nm,0,0])**2/input_flux[0]
-
- r_flux = mp.get_fluxes(refl_flux)
- t_flux = mp.get_fluxes(tran_flux)
- Rflux = -r_flux[0]/input_flux[0]
- Tflux = t_flux[0]/input_flux[0]
-
- print("refl:, {}, {}".format(Rsum,Rflux))
- print("tran:, {}, {}".format(Tsum,Tflux))
- print("sum:, {}, {}".format(Rsum+Tsum,Rflux+Tflux))
-
- self.assertAlmostEqual(Rsum,Rflux,places=2)
- self.assertAlmostEqual(Tsum,Tflux,places=2)
- self.assertAlmostEqual(Rsum+Tsum,1.00,places=2)
-
-
- @parameterized.parameterized.expand([(13.2,"real/imag"),
- (17.7,"complex"),
- (21.2, "3d")])
- def test_binary_grating_special_kz(self, theta, kz_2d):
- # rotation angle of incident planewave
- # counterclockwise (CCW) about Y axis, 0 degrees along +X axis
- theta_in = math.radians(theta)
-
- # k (in source medium) with correct length (plane of incidence: XZ)
- k = mp.Vector3(self.fcen*self.ng).rotate(mp.Vector3(0,1,0), theta_in)
-
- symmetries = [mp.Mirror(mp.Y)]
-
- def pw_amp(k,x0):
- def _pw_amp(x):
- return cmath.exp(1j*2*math.pi*k.dot(x+x0))
- return _pw_amp
-
- src_pt = mp.Vector3(-0.5*self.sx+self.dpml,0,0)
- sources = [mp.Source(mp.GaussianSource(self.fcen,fwidth=self.df),
- component=mp.Ez,
- center=src_pt,
- size=mp.Vector3(0,self.sy,0),
- amp_func=pw_amp(k,src_pt))]
-
- sim = mp.Simulation(resolution=self.resolution,
- cell_size=self.cell_size,
- boundary_layers=self.abs_layers,
- k_point=k,
- default_material=self.glass,
- sources=sources,
- symmetries=symmetries,
- kz_2d=kz_2d)
-
- refl_pt = mp.Vector3(-0.5*self.sx+self.dpml+0.5*self.dsub,0,0)
- refl_flux = sim.add_mode_monitor(self.fcen,
- 0,
- 1,
- mp.FluxRegion(center=refl_pt,
- size=mp.Vector3(0,self.sy,0)))
-
- sim.run(until_after_sources=mp.stop_when_dft_decayed())
-
- input_flux = mp.get_fluxes(refl_flux)
- input_flux_data = sim.get_flux_data(refl_flux)
-
- sim.reset_meep()
-
- sim = mp.Simulation(resolution=self.resolution,
- cell_size=self.cell_size,
- boundary_layers=self.abs_layers,
- geometry=self.geometry,
- k_point=k,
- sources=sources,
- symmetries=symmetries,
- kz_2d=kz_2d)
-
- refl_flux = sim.add_mode_monitor(self.fcen,
- 0,
- 1,
- mp.FluxRegion(center=refl_pt,
- size=mp.Vector3(0,self.sy,0)))
-
- sim.load_minus_flux_data(refl_flux,input_flux_data)
-
- tran_pt = mp.Vector3(0.5*self.sx-self.dpml-0.5*self.dpad,0,0)
- tran_flux = sim.add_mode_monitor(self.fcen,
- 0,
- 1,
- mp.FluxRegion(center=tran_pt,
- size=mp.Vector3(0,self.sy,0)))
-
- sim.run(until_after_sources=mp.stop_when_dft_decayed())
-
- # number of reflected orders
- nm_r = (np.ceil((np.sqrt((self.fcen*self.ng)**2-k.z**2)-k.y)*self.gp) -
- np.floor((-np.sqrt((self.fcen*self.ng)**2-k.z**2)-k.y)*self.gp))
- nm_r = int(nm_r/2)
-
- Rsum = 0
- for nm in range(nm_r):
- for S_pol in [False, True]:
- res = sim.get_eigenmode_coefficients(refl_flux,
- mp.DiffractedPlanewave([0,nm,0],
- mp.Vector3(1,0,0),
- 1 if S_pol else 0,
- 0 if S_pol else 1))
+ @classmethod
+ def setUpClass(cls):
+ cls.resolution = 30 # pixels/μm
+
+ cls.dpml = 1.0 # PML thickness
+ cls.dsub = 1.0 # substrate thickness
+ cls.dpad = 1.0 # padding thickness between grating and PML
+ cls.gp = 6.0 # grating period
+ cls.gh = 0.5 # grating height
+ cls.gdc = 0.5 # grating duty cycle
+
+ cls.sx = cls.dpml + cls.dsub + cls.gh + cls.dpad + cls.dpml
+ cls.sy = cls.gp
+
+ cls.cell_size = mp.Vector3(cls.sx, cls.sy, 0)
+
+ # replace anisotropic PML with isotropic Absorber to
+ # attenuate parallel-directed fields of oblique source
+ cls.abs_layers = [mp.Absorber(thickness=cls.dpml, direction=mp.X)]
+
+ wvl = 0.5 # center wavelength
+ cls.fcen = 1 / wvl # center frequency
+ cls.df = 0.05 * cls.fcen # frequency width
+
+ cls.ng = 1.5
+ cls.glass = mp.Medium(index=cls.ng)
+
+ cls.geometry = [
+ mp.Block(
+ material=cls.glass,
+ size=mp.Vector3(cls.dpml + cls.dsub, mp.inf, mp.inf),
+ center=mp.Vector3(-0.5 * cls.sx + 0.5 * (cls.dpml + cls.dsub), 0, 0),
+ ),
+ mp.Block(
+ material=cls.glass,
+ size=mp.Vector3(cls.gh, cls.gdc * cls.gp, mp.inf),
+ center=mp.Vector3(
+ -0.5 * cls.sx + cls.dpml + cls.dsub + 0.5 * cls.gh, 0, 0
+ ),
+ ),
+ ]
+
+ @parameterized.parameterized.expand([(0,), (10.7,)])
+ def test_binary_grating_oblique(self, theta):
+ # rotation angle of incident planewave
+ # counterclockwise (CCW) about Z axis, 0 degrees along +X axis
+ theta_in = math.radians(theta)
+
+ # k (in source medium) with correct length (plane of incidence: XY)
+ k = mp.Vector3(self.fcen * self.ng).rotate(mp.Vector3(0, 0, 1), theta_in)
+
+ symmetries = []
+ eig_parity = mp.ODD_Z
+ if theta_in == 0:
+ symmetries = [mp.Mirror(mp.Y)]
+ eig_parity += mp.EVEN_Y
+
+ def pw_amp(k, x0):
+ def _pw_amp(x):
+ return cmath.exp(1j * 2 * math.pi * k.dot(x + x0))
+
+ return _pw_amp
+
+ src_pt = mp.Vector3(-0.5 * self.sx + self.dpml, 0, 0)
+ sources = [
+ mp.Source(
+ mp.GaussianSource(self.fcen, fwidth=self.df),
+ component=mp.Ez, # S polarization
+ center=src_pt,
+ size=mp.Vector3(0, self.sy, 0),
+ amp_func=pw_amp(k, src_pt),
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=self.resolution,
+ cell_size=self.cell_size,
+ boundary_layers=self.abs_layers,
+ k_point=k,
+ default_material=self.glass,
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ refl_pt = mp.Vector3(-0.5 * self.sx + self.dpml + 0.5 * self.dsub, 0, 0)
+ refl_flux = sim.add_flux(
+ self.fcen,
+ 0,
+ 1,
+ mp.FluxRegion(center=refl_pt, size=mp.Vector3(0, self.sy, 0)),
+ )
+
+ sim.run(until_after_sources=mp.stop_when_dft_decayed())
+
+ input_flux = mp.get_fluxes(refl_flux)
+ input_flux_data = sim.get_flux_data(refl_flux)
+
+ sim.reset_meep()
+
+ sim = mp.Simulation(
+ resolution=self.resolution,
+ cell_size=self.cell_size,
+ boundary_layers=self.abs_layers,
+ geometry=self.geometry,
+ k_point=k,
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ refl_flux = sim.add_flux(
+ self.fcen,
+ 0,
+ 1,
+ mp.FluxRegion(center=refl_pt, size=mp.Vector3(0, self.sy, 0)),
+ )
+
+ sim.load_minus_flux_data(refl_flux, input_flux_data)
+
+ tran_pt = mp.Vector3(0.5 * self.sx - self.dpml - 0.5 * self.dpad, 0, 0)
+ tran_flux = sim.add_flux(
+ self.fcen,
+ 0,
+ 1,
+ mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, self.sy, 0)),
+ )
+
+ sim.run(until_after_sources=mp.stop_when_dft_decayed())
+
+ # number of reflected orders
+ nm_r = np.floor((self.fcen * self.ng - k.y) * self.gp) - np.ceil(
+ (-self.fcen * self.ng - k.y) * self.gp
+ )
+ if theta_in == 0:
+ nm_r = nm_r / 2 # since eig_parity removes degeneracy in y-direction
+ nm_r = int(nm_r)
+
+ res = sim.get_eigenmode_coefficients(
+ refl_flux, range(1, nm_r + 1), eig_parity=eig_parity
+ )
r_coeffs = res.alpha
- Rmode = abs(r_coeffs[0,0,1])**2/input_flux[0]
- print("refl-order:, {}, {}, {}".format("s" if S_pol else "p",nm,Rmode))
- Rsum += Rmode if nm == 0 else 2*Rmode
-
- # number of transmitted orders
- nm_t = (np.ceil((np.sqrt(self.fcen**2-k.z**2)-k.y)*self.gp) -
- np.floor((-np.sqrt(self.fcen**2-k.z**2)-k.y)*self.gp))
- nm_t = int(nm_t/2)
-
- Tsum = 0
- for nm in range(nm_t):
- for S_pol in [False, True]:
- res = sim.get_eigenmode_coefficients(tran_flux,
- mp.DiffractedPlanewave([0,nm,0],
- mp.Vector3(1,0,0),
- 1 if S_pol else 0,
- 0 if S_pol else 1))
- t_coeffs = res.alpha
- Tmode = abs(t_coeffs[0,0,0])**2/input_flux[0]
- print("tran-order:, {}, {}, {}".format("s" if S_pol else "p",nm,Tmode))
- Tsum += Tmode if nm == 0 else 2*Tmode
-
- r_flux = mp.get_fluxes(refl_flux)
- t_flux = mp.get_fluxes(tran_flux)
- Rflux = -r_flux[0]/input_flux[0]
- Tflux = t_flux[0]/input_flux[0]
-
- print("refl:, {}, {}".format(Rsum,Rflux))
- print("tran:, {}, {}".format(Tsum,Tflux))
- print("sum:, {}, {}".format(Rsum+Tsum,Rflux+Tflux))
-
- self.assertAlmostEqual(Rsum,Rflux,places=2)
- self.assertAlmostEqual(Tsum,Tflux,places=2)
- self.assertAlmostEqual(Rsum+Tsum,1.00,places=2)
+ Rsum = 0
+ for nm in range(nm_r):
+ Rsum += abs(r_coeffs[nm, 0, 1]) ** 2 / input_flux[0]
+
+ # number of transmitted orders
+ nm_t = np.floor((self.fcen - k.y) * self.gp) - np.ceil(
+ (-self.fcen - k.y) * self.gp
+ )
+ if theta_in == 0:
+ nm_t = nm_t / 2 # since eig_parity removes degeneracy in y-direction
+ nm_t = int(nm_t)
+
+ res = sim.get_eigenmode_coefficients(
+ tran_flux, range(1, nm_t + 1), eig_parity=eig_parity
+ )
+ t_coeffs = res.alpha
-if __name__ == '__main__':
- unittest.main()
+ Tsum = 0
+ for nm in range(nm_t):
+ Tsum += abs(t_coeffs[nm, 0, 0]) ** 2 / input_flux[0]
+
+ r_flux = mp.get_fluxes(refl_flux)
+ t_flux = mp.get_fluxes(tran_flux)
+ Rflux = -r_flux[0] / input_flux[0]
+ Tflux = t_flux[0] / input_flux[0]
+
+ print("refl:, {}, {}".format(Rsum, Rflux))
+ print("tran:, {}, {}".format(Tsum, Tflux))
+ print("sum:, {}, {}".format(Rsum + Tsum, Rflux + Tflux))
+
+ self.assertAlmostEqual(Rsum, Rflux, places=2)
+ self.assertAlmostEqual(Tsum, Tflux, places=2)
+ self.assertAlmostEqual(Rsum + Tsum, 1.00, places=2)
+
+ @parameterized.parameterized.expand(
+ [(13.2, "real/imag"), (17.7, "complex"), (21.2, "3d")]
+ )
+ def test_binary_grating_special_kz(self, theta, kz_2d):
+ # rotation angle of incident planewave
+ # counterclockwise (CCW) about Y axis, 0 degrees along +X axis
+ theta_in = math.radians(theta)
+
+ # k (in source medium) with correct length (plane of incidence: XZ)
+ k = mp.Vector3(self.fcen * self.ng).rotate(mp.Vector3(0, 1, 0), theta_in)
+
+ symmetries = [mp.Mirror(mp.Y)]
+
+ def pw_amp(k, x0):
+ def _pw_amp(x):
+ return cmath.exp(1j * 2 * math.pi * k.dot(x + x0))
+
+ return _pw_amp
+
+ src_pt = mp.Vector3(-0.5 * self.sx + self.dpml, 0, 0)
+ sources = [
+ mp.Source(
+ mp.GaussianSource(self.fcen, fwidth=self.df),
+ component=mp.Ez,
+ center=src_pt,
+ size=mp.Vector3(0, self.sy, 0),
+ amp_func=pw_amp(k, src_pt),
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=self.resolution,
+ cell_size=self.cell_size,
+ boundary_layers=self.abs_layers,
+ k_point=k,
+ default_material=self.glass,
+ sources=sources,
+ symmetries=symmetries,
+ kz_2d=kz_2d,
+ )
+
+ refl_pt = mp.Vector3(-0.5 * self.sx + self.dpml + 0.5 * self.dsub, 0, 0)
+ refl_flux = sim.add_mode_monitor(
+ self.fcen,
+ 0,
+ 1,
+ mp.FluxRegion(center=refl_pt, size=mp.Vector3(0, self.sy, 0)),
+ )
+
+ sim.run(until_after_sources=mp.stop_when_dft_decayed())
+
+ input_flux = mp.get_fluxes(refl_flux)
+ input_flux_data = sim.get_flux_data(refl_flux)
+
+ sim.reset_meep()
+
+ sim = mp.Simulation(
+ resolution=self.resolution,
+ cell_size=self.cell_size,
+ boundary_layers=self.abs_layers,
+ geometry=self.geometry,
+ k_point=k,
+ sources=sources,
+ symmetries=symmetries,
+ kz_2d=kz_2d,
+ )
+
+ refl_flux = sim.add_mode_monitor(
+ self.fcen,
+ 0,
+ 1,
+ mp.FluxRegion(center=refl_pt, size=mp.Vector3(0, self.sy, 0)),
+ )
+
+ sim.load_minus_flux_data(refl_flux, input_flux_data)
+
+ tran_pt = mp.Vector3(0.5 * self.sx - self.dpml - 0.5 * self.dpad, 0, 0)
+ tran_flux = sim.add_mode_monitor(
+ self.fcen,
+ 0,
+ 1,
+ mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, self.sy, 0)),
+ )
+
+ sim.run(until_after_sources=mp.stop_when_dft_decayed())
+
+ # number of reflected orders
+ nm_r = np.ceil(
+ (np.sqrt((self.fcen * self.ng) ** 2 - k.z**2) - k.y) * self.gp
+ ) - np.floor((-np.sqrt((self.fcen * self.ng) ** 2 - k.z**2) - k.y) * self.gp)
+ nm_r = int(nm_r / 2)
+
+ Rsum = 0
+ for nm in range(nm_r):
+ for S_pol in [False, True]:
+ res = sim.get_eigenmode_coefficients(
+ refl_flux,
+ mp.DiffractedPlanewave(
+ [0, nm, 0],
+ mp.Vector3(1, 0, 0),
+ 1 if S_pol else 0,
+ 0 if S_pol else 1,
+ ),
+ )
+ r_coeffs = res.alpha
+ Rmode = abs(r_coeffs[0, 0, 1]) ** 2 / input_flux[0]
+ print(
+ "refl-order:, {}, {}, {}".format("s" if S_pol else "p", nm, Rmode)
+ )
+ Rsum += Rmode if nm == 0 else 2 * Rmode
+
+ # number of transmitted orders
+ nm_t = np.ceil((np.sqrt(self.fcen**2 - k.z**2) - k.y) * self.gp) - np.floor(
+ (-np.sqrt(self.fcen**2 - k.z**2) - k.y) * self.gp
+ )
+ nm_t = int(nm_t / 2)
+
+ Tsum = 0
+ for nm in range(nm_t):
+ for S_pol in [False, True]:
+ res = sim.get_eigenmode_coefficients(
+ tran_flux,
+ mp.DiffractedPlanewave(
+ [0, nm, 0],
+ mp.Vector3(1, 0, 0),
+ 1 if S_pol else 0,
+ 0 if S_pol else 1,
+ ),
+ )
+ t_coeffs = res.alpha
+ Tmode = abs(t_coeffs[0, 0, 0]) ** 2 / input_flux[0]
+ print(
+ "tran-order:, {}, {}, {}".format("s" if S_pol else "p", nm, Tmode)
+ )
+ Tsum += Tmode if nm == 0 else 2 * Tmode
+
+ r_flux = mp.get_fluxes(refl_flux)
+ t_flux = mp.get_fluxes(tran_flux)
+ Rflux = -r_flux[0] / input_flux[0]
+ Tflux = t_flux[0] / input_flux[0]
+
+ print("refl:, {}, {}".format(Rsum, Rflux))
+ print("tran:, {}, {}".format(Tsum, Tflux))
+ print("sum:, {}, {}".format(Rsum + Tsum, Rflux + Tflux))
+
+ self.assertAlmostEqual(Rsum, Rflux, places=2)
+ self.assertAlmostEqual(Tsum, Tflux, places=2)
+ self.assertAlmostEqual(Rsum + Tsum, 1.00, places=2)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/python/tests/test_binary_partition_utils.py b/python/tests/test_binary_partition_utils.py
index 5b6f72866..1267fa233 100644
--- a/python/tests/test_binary_partition_utils.py
+++ b/python/tests/test_binary_partition_utils.py
@@ -8,11 +8,11 @@
import numpy as np
PARTITION_NO_DUPLICATE_PROC_ID = mp.BinaryPartition(
- data=[(mp.X, -2.), 0, [(mp.Y, 1.5), [(mp.X, 4.), 1, [(mp.Y,
- 0.5), 4, 3]], 2]])
+ data=[(mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]]
+)
PARTITION_DUPLICATE_PROC_ID = mp.BinaryPartition(
- data=[(mp.X, -2.), 0, [(mp.Y, 1.5), [(mp.X, 4.), 1, [(mp.Y,
- 0.5), 1, 3]], 0]])
+ data=[(mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 1, 3]], 0]]
+)
# Mocked chunk IDs since we are in a single-core environment
CHUNK_OWNERS_NO_DUPLICATE_PROC_ID = np.array([0, 1, 4, 3, 2])
@@ -20,22 +20,25 @@
class BinaryPartitionUtilsTest(unittest.TestCase):
-
- @parameterized.parameterized.expand([
- (PARTITION_NO_DUPLICATE_PROC_ID, False),
- (PARTITION_NO_DUPLICATE_PROC_ID.right, False),
- (PARTITION_NO_DUPLICATE_PROC_ID.left, True),
- (PARTITION_DUPLICATE_PROC_ID, False),
- (PARTITION_DUPLICATE_PROC_ID.right, False),
- (PARTITION_DUPLICATE_PROC_ID.left, True),
- ])
+ @parameterized.parameterized.expand(
+ [
+ (PARTITION_NO_DUPLICATE_PROC_ID, False),
+ (PARTITION_NO_DUPLICATE_PROC_ID.right, False),
+ (PARTITION_NO_DUPLICATE_PROC_ID.left, True),
+ (PARTITION_DUPLICATE_PROC_ID, False),
+ (PARTITION_DUPLICATE_PROC_ID.right, False),
+ (PARTITION_DUPLICATE_PROC_ID.left, True),
+ ]
+ )
def test_is_leaf_node(self, partition, expected_leaf_status):
self.assertEqual(bpu.is_leaf_node(partition), expected_leaf_status)
- @parameterized.parameterized.expand([
- (PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID),
- (PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID),
- ])
+ @parameterized.parameterized.expand(
+ [
+ (PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID),
+ (PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID),
+ ]
+ )
def test_enumerate_leaf_nodes(self, partition, chunk_owners):
leaf_nodes = list(bpu.enumerate_leaf_nodes(partition))
self.assertEqual(len(leaf_nodes), partition.numchunks())
@@ -44,216 +47,237 @@ def test_enumerate_leaf_nodes(self, partition, chunk_owners):
def test_partition_has_duplicate_proc_ids(self):
self.assertFalse(
- bpu.partition_has_duplicate_proc_ids(PARTITION_NO_DUPLICATE_PROC_ID))
+ bpu.partition_has_duplicate_proc_ids(PARTITION_NO_DUPLICATE_PROC_ID)
+ )
self.assertTrue(
- bpu.partition_has_duplicate_proc_ids(PARTITION_DUPLICATE_PROC_ID))
+ bpu.partition_has_duplicate_proc_ids(PARTITION_DUPLICATE_PROC_ID)
+ )
- @parameterized.parameterized.expand([
- (
+ @parameterized.parameterized.expand(
+ [
+ (
PARTITION_NO_DUPLICATE_PROC_ID,
[0, 1, 2, 3, 4],
- ),
- (
+ ),
+ (
PARTITION_DUPLICATE_PROC_ID,
[0, 1, 2, 3, 4],
- ),
- ])
+ ),
+ ]
+ )
def test_get_total_weight(self, partition, weights_by_proc_id):
if not bpu.partition_has_duplicate_proc_ids(partition):
self.assertEqual(
bpu.get_total_weight(partition, weights_by_proc_id),
- sum(weights_by_proc_id))
+ sum(weights_by_proc_id),
+ )
self.assertEqual(
bpu.get_total_weight(partition.right.left, weights_by_proc_id),
- weights_by_proc_id[1] + weights_by_proc_id[4] + weights_by_proc_id[3])
+ weights_by_proc_id[1] + weights_by_proc_id[4] + weights_by_proc_id[3],
+ )
else:
with self.assertRaises(ValueError):
bpu.get_total_weight(partition, weights_by_proc_id)
- @parameterized.parameterized.expand([
- (
+ @parameterized.parameterized.expand(
+ [
+ (
PARTITION_NO_DUPLICATE_PROC_ID,
[0, 1, 2, 3, 4],
- ),
- (
+ ),
+ (
PARTITION_DUPLICATE_PROC_ID,
[0, 1, 2, 3, 4],
- ),
- ])
+ ),
+ ]
+ )
def test_get_left_right_total_weights(self, partition, weights_by_proc_id):
proc_ids = [node.proc_id for node in bpu.enumerate_leaf_nodes(partition)]
no_duplicates = len(set(proc_ids)) == len(proc_ids)
if no_duplicates:
self.assertEqual(
bpu.get_left_right_total_weights(partition, weights_by_proc_id),
- (bpu.get_total_weight(partition.left, weights_by_proc_id),
- bpu.get_total_weight(partition.right, weights_by_proc_id)))
+ (
+ bpu.get_total_weight(partition.left, weights_by_proc_id),
+ bpu.get_total_weight(partition.right, weights_by_proc_id),
+ ),
+ )
else:
with self.assertRaises(ValueError):
bpu.get_left_right_total_weights(partition, weights_by_proc_id)
- @parameterized.parameterized.expand([
- (
+ @parameterized.parameterized.expand(
+ [
+ (
PARTITION_NO_DUPLICATE_PROC_ID,
2,
[1500, 2400, 300, 100, 700],
- ),
- (
+ ),
+ (
PARTITION_NO_DUPLICATE_PROC_ID,
3,
[15000, 24000, 3000, 1000, 7000],
- ),
- ])
+ ),
+ ]
+ )
def test_pixel_volume(self, partition, dims, expected_pixel_volumes):
- cell_size = mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3(
- 10.0, 5.0, 0.0)
- sim = mp.Simulation(
- cell_size=cell_size, resolution=10, chunk_layout=partition)
+ cell_size = (
+ mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3(10.0, 5.0, 0.0)
+ )
+ sim = mp.Simulation(cell_size=cell_size, resolution=10, chunk_layout=partition)
sim.init_sim()
chunk_volumes = sim.structure.get_chunk_volumes()
- self.assertEqual([bpu.pixel_volume(vol) for vol in chunk_volumes],
- expected_pixel_volumes)
+ self.assertEqual(
+ [bpu.pixel_volume(vol) for vol in chunk_volumes], expected_pixel_volumes
+ )
- @parameterized.parameterized.expand([
- (PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 3500),
- (PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 3500),
- ])
- def test_get_total_volume_2d(self, partition, chunk_owners,
- expected_total_volume):
+ @parameterized.parameterized.expand(
+ [
+ (PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 3500),
+ (PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 3500),
+ ]
+ )
+ def test_get_total_volume_2d(self, partition, chunk_owners, expected_total_volume):
sim = mp.Simulation(
- cell_size=mp.Vector3(10.0, 5.0, 0.0),
- resolution=10,
- chunk_layout=partition)
+ cell_size=mp.Vector3(10.0, 5.0, 0.0), resolution=10, chunk_layout=partition
+ )
sim.init_sim()
chunk_volumes = sim.structure.get_chunk_volumes()
total_volume = sim.cell_size[0] * sim.cell_size[1] * sim.resolution**2
self.assertEqual(
- bpu.get_total_volume(partition, chunk_volumes, chunk_owners),
- total_volume)
+ bpu.get_total_volume(partition, chunk_volumes, chunk_owners), total_volume
+ )
if not bpu.partition_has_duplicate_proc_ids(partition):
self.assertEqual(
bpu.get_total_volume(partition.right, chunk_volumes, chunk_owners),
- expected_total_volume)
+ expected_total_volume,
+ )
- @parameterized.parameterized.expand([
- (PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 35000),
- (PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 35000),
- ])
- def test_get_total_volume_3d(self, partition, chunk_owners,
- expected_total_volume):
+ @parameterized.parameterized.expand(
+ [
+ (PARTITION_NO_DUPLICATE_PROC_ID, CHUNK_OWNERS_NO_DUPLICATE_PROC_ID, 35000),
+ (PARTITION_DUPLICATE_PROC_ID, CHUNK_OWNERS_DUPLICATE_PROC_ID, 35000),
+ ]
+ )
+ def test_get_total_volume_3d(self, partition, chunk_owners, expected_total_volume):
sim = mp.Simulation(
- cell_size=mp.Vector3(10.0, 5.0, 1.0),
- resolution=10,
- chunk_layout=partition)
+ cell_size=mp.Vector3(10.0, 5.0, 1.0), resolution=10, chunk_layout=partition
+ )
sim.init_sim()
chunk_volumes = sim.structure.get_chunk_volumes()
- total_volume = sim.cell_size[0] * sim.cell_size[1] * sim.cell_size[
- 2] * sim.resolution**3
+ total_volume = (
+ sim.cell_size[0] * sim.cell_size[1] * sim.cell_size[2] * sim.resolution**3
+ )
self.assertEqual(
- bpu.get_total_volume(partition, chunk_volumes, chunk_owners),
- total_volume)
+ bpu.get_total_volume(partition, chunk_volumes, chunk_owners), total_volume
+ )
if not bpu.partition_has_duplicate_proc_ids(partition):
self.assertEqual(
bpu.get_total_volume(partition.right, chunk_volumes, chunk_owners),
- expected_total_volume)
+ expected_total_volume,
+ )
- @parameterized.parameterized.expand([
- (
+ @parameterized.parameterized.expand(
+ [
+ (
PARTITION_NO_DUPLICATE_PROC_ID,
CHUNK_OWNERS_NO_DUPLICATE_PROC_ID,
2,
- ),
- (
+ ),
+ (
PARTITION_DUPLICATE_PROC_ID,
CHUNK_OWNERS_DUPLICATE_PROC_ID,
2,
- ),
- (
+ ),
+ (
PARTITION_NO_DUPLICATE_PROC_ID,
CHUNK_OWNERS_NO_DUPLICATE_PROC_ID,
3,
- ),
- (
+ ),
+ (
PARTITION_DUPLICATE_PROC_ID,
CHUNK_OWNERS_DUPLICATE_PROC_ID,
3,
- ),
- ])
+ ),
+ ]
+ )
def test_get_left_right_total_volumes(self, partition, chunk_owners, dims):
- cell_size = mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3(
- 10.0, 5.0, 0.0)
- sim = mp.Simulation(
- cell_size=cell_size, resolution=10, chunk_layout=partition)
+ cell_size = (
+ mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3(10.0, 5.0, 0.0)
+ )
+ sim = mp.Simulation(cell_size=cell_size, resolution=10, chunk_layout=partition)
sim.init_sim()
chunk_volumes = sim.structure.get_chunk_volumes()
self.assertEqual(
- bpu.get_left_right_total_volumes(partition, chunk_volumes,
- chunk_owners),
- (bpu.get_total_volume(partition.left, chunk_volumes, chunk_owners),
- bpu.get_total_volume(partition.right, chunk_volumes, chunk_owners)))
+ bpu.get_left_right_total_volumes(partition, chunk_volumes, chunk_owners),
+ (
+ bpu.get_total_volume(partition.left, chunk_volumes, chunk_owners),
+ bpu.get_total_volume(partition.right, chunk_volumes, chunk_owners),
+ ),
+ )
- @parameterized.parameterized.expand([
- (
+ @parameterized.parameterized.expand(
+ [
+ (
PARTITION_NO_DUPLICATE_PROC_ID,
CHUNK_OWNERS_NO_DUPLICATE_PROC_ID,
2,
- ),
- (
+ ),
+ (
PARTITION_DUPLICATE_PROC_ID,
CHUNK_OWNERS_DUPLICATE_PROC_ID,
2,
- ),
- (
+ ),
+ (
PARTITION_NO_DUPLICATE_PROC_ID,
CHUNK_OWNERS_NO_DUPLICATE_PROC_ID,
3,
- ),
- (
+ ),
+ (
PARTITION_DUPLICATE_PROC_ID,
CHUNK_OWNERS_DUPLICATE_PROC_ID,
3,
- ),
- ])
+ ),
+ ]
+ )
def test_get_grid_volumes_in_tree(self, partition, chunk_owners, dims):
- cell_size = mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3(
- 10.0, 5.0, 0.0)
- sim = mp.Simulation(
- cell_size=cell_size, resolution=10, chunk_layout=partition)
+ cell_size = (
+ mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3(10.0, 5.0, 0.0)
+ )
+ sim = mp.Simulation(cell_size=cell_size, resolution=10, chunk_layout=partition)
sim.init_sim()
chunk_volumes = sim.structure.get_chunk_volumes()
- grid_volumes_in_tree = bpu.get_grid_volumes_in_tree(partition,
- chunk_volumes,
- chunk_owners)
+ grid_volumes_in_tree = bpu.get_grid_volumes_in_tree(
+ partition, chunk_volumes, chunk_owners
+ )
self.assertEqual(set(grid_volumes_in_tree), set(chunk_volumes))
no_duplicates = len(set(chunk_owners)) == len(chunk_owners)
- grid_volumes_in_right_expected = chunk_volumes[
- 1:] if no_duplicates else chunk_volumes
+ grid_volumes_in_right_expected = (
+ chunk_volumes[1:] if no_duplicates else chunk_volumes
+ )
grid_volumes_in_right = bpu.get_grid_volumes_in_tree(
- partition.right, chunk_volumes, chunk_owners)
+ partition.right, chunk_volumes, chunk_owners
+ )
self.assertEqual(
- set(grid_volumes_in_right), set(grid_volumes_in_right_expected))
+ set(grid_volumes_in_right), set(grid_volumes_in_right_expected)
+ )
- @parameterized.parameterized.expand([
- (
+ @parameterized.parameterized.expand(
+ [
+ (
PARTITION_NO_DUPLICATE_PROC_ID,
CHUNK_OWNERS_NO_DUPLICATE_PROC_ID,
2,
- {
- 0: 1500,
- 1: 2400,
- 4: 300,
- 3: 100,
- 2: 700
- },
- ),
- (
+ {0: 1500, 1: 2400, 4: 300, 3: 100, 2: 700},
+ ),
+ (
PARTITION_DUPLICATE_PROC_ID,
CHUNK_OWNERS_DUPLICATE_PROC_ID,
2,
@@ -262,20 +286,14 @@ def test_get_grid_volumes_in_tree(self, partition, chunk_owners, dims):
1: 2700,
3: 100,
},
- ),
- (
+ ),
+ (
PARTITION_NO_DUPLICATE_PROC_ID,
CHUNK_OWNERS_NO_DUPLICATE_PROC_ID,
3,
- {
- 0: 15000,
- 1: 24000,
- 4: 3000,
- 3: 1000,
- 2: 7000
- },
- ),
- (
+ {0: 15000, 1: 24000, 4: 3000, 3: 1000, 2: 7000},
+ ),
+ (
PARTITION_DUPLICATE_PROC_ID,
CHUNK_OWNERS_DUPLICATE_PROC_ID,
3,
@@ -284,95 +302,110 @@ def test_get_grid_volumes_in_tree(self, partition, chunk_owners, dims):
1: 27000,
3: 1000,
},
- ),
- ])
- def test_get_total_volume_per_process(self, partition, chunk_owners, dims,
- expected_volumes_per_process):
- cell_size = mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3(
- 10.0, 5.0, 0.0)
- sim = mp.Simulation(
- cell_size=cell_size, resolution=10, chunk_layout=partition)
+ ),
+ ]
+ )
+ def test_get_total_volume_per_process(
+ self, partition, chunk_owners, dims, expected_volumes_per_process
+ ):
+ cell_size = (
+ mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3(10.0, 5.0, 0.0)
+ )
+ sim = mp.Simulation(cell_size=cell_size, resolution=10, chunk_layout=partition)
sim.init_sim()
chunk_volumes = sim.structure.get_chunk_volumes()
volumes_per_process = bpu.get_total_volume_per_process(
- partition, chunk_volumes, chunk_owners)
+ partition, chunk_volumes, chunk_owners
+ )
self.assertEqual(volumes_per_process, expected_volumes_per_process)
- @parameterized.parameterized.expand([
- (
+ @parameterized.parameterized.expand(
+ [
+ (
PARTITION_NO_DUPLICATE_PROC_ID,
CHUNK_OWNERS_NO_DUPLICATE_PROC_ID,
2,
(-5.0, 5.0, -2.5, 2.5, 0.0, 0.0),
(-2.0, 5.0, -2.5, 2.5, 0.0, 0.0),
- ),
- (
+ ),
+ (
PARTITION_DUPLICATE_PROC_ID,
CHUNK_OWNERS_DUPLICATE_PROC_ID,
2,
(-5.0, 5.0, -2.5, 2.5, 0.0, 0.0),
(-5.0, 5.0, -2.5, 2.5, 0.0, 0.0),
- ),
- (
+ ),
+ (
PARTITION_NO_DUPLICATE_PROC_ID,
CHUNK_OWNERS_NO_DUPLICATE_PROC_ID,
3,
(-5.0, 5.0, -2.5, 2.5, -0.5, 0.5),
(-2.0, 5.0, -2.5, 2.5, -0.5, 0.5),
- ),
- (
+ ),
+ (
PARTITION_DUPLICATE_PROC_ID,
CHUNK_OWNERS_DUPLICATE_PROC_ID,
3,
(-5.0, 5.0, -2.5, 2.5, -0.5, 0.5),
(-5.0, 5.0, -2.5, 2.5, -0.5, 0.5),
- ),
- ])
- def test_get_box_ranges(self, partition, chunk_owners, dims,
- expected_box_ranges, expected_right_box_ranges):
- cell_size = mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3(
- 10.0, 5.0, 0.0)
- sim = mp.Simulation(
- cell_size=cell_size, resolution=10, chunk_layout=partition)
+ ),
+ ]
+ )
+ def test_get_box_ranges(
+ self,
+ partition,
+ chunk_owners,
+ dims,
+ expected_box_ranges,
+ expected_right_box_ranges,
+ ):
+ cell_size = (
+ mp.Vector3(10.0, 5.0, 1.0) if dims == 3 else mp.Vector3(10.0, 5.0, 0.0)
+ )
+ sim = mp.Simulation(cell_size=cell_size, resolution=10, chunk_layout=partition)
sim.init_sim()
chunk_volumes = sim.structure.get_chunk_volumes()
self.assertEqual(
bpu.get_box_ranges(partition, chunk_volumes, chunk_owners),
- expected_box_ranges)
+ expected_box_ranges,
+ )
self.assertEqual(
bpu.get_box_ranges(partition.right, chunk_volumes, chunk_owners),
- expected_right_box_ranges)
+ expected_right_box_ranges,
+ )
- @parameterized.parameterized.expand([
- (
+ @parameterized.parameterized.expand(
+ [
+ (
copy.deepcopy(PARTITION_NO_DUPLICATE_PROC_ID),
copy.deepcopy(PARTITION_NO_DUPLICATE_PROC_ID),
True,
- ),
- (
+ ),
+ (
copy.deepcopy(PARTITION_DUPLICATE_PROC_ID),
copy.deepcopy(PARTITION_DUPLICATE_PROC_ID),
True,
- ),
- (
+ ),
+ (
copy.deepcopy(PARTITION_NO_DUPLICATE_PROC_ID),
copy.deepcopy(PARTITION_DUPLICATE_PROC_ID),
False,
- ),
- (
+ ),
+ (
mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]),
mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]),
True,
- ),
- (
+ ),
+ (
mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.4), 1, 2]]),
mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]),
False,
- ),
- ])
+ ),
+ ]
+ )
def test_partitions_are_equal(self, bp1, bp2, is_equal):
self.assertEqual(bpu.partitions_are_equal(bp1, bp2), is_equal)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_cavity_arrayslice.py b/python/tests/test_cavity_arrayslice.py
index a46d1db5c..f4945bf5a 100644
--- a/python/tests/test_cavity_arrayslice.py
+++ b/python/tests/test_cavity_arrayslice.py
@@ -7,9 +7,9 @@
class TestCavityArraySlice(ApproxComparisonTestCase):
- data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data'))
- expected_1d = np.load(os.path.join(data_dir, 'cavity_arrayslice_1d.npy'))
- expected_2d = np.load(os.path.join(data_dir, 'cavity_arrayslice_2d.npy'))
+ data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data"))
+ expected_1d = np.load(os.path.join(data_dir, "cavity_arrayslice_1d.npy"))
+ expected_2d = np.load(os.path.join(data_dir, "cavity_arrayslice_2d.npy"))
def setUp(self):
@@ -22,8 +22,9 @@ def setUp(self):
cell = mp.Vector3(sx, sy, 0)
- blk = mp.Block(size=mp.Vector3(mp.inf, 1.2, mp.inf),
- material=mp.Medium(epsilon=13))
+ blk = mp.Block(
+ size=mp.Vector3(mp.inf, 1.2, mp.inf), material=mp.Medium(epsilon=13)
+ )
geometry = [blk]
@@ -37,7 +38,7 @@ def setUp(self):
geometry=geometry,
sources=sources,
boundary_layers=[mp.PML(dpml)],
- resolution=20
+ resolution=20,
)
self.x_min = -0.25 * sx
@@ -49,7 +50,9 @@ def setUp(self):
self.center_1d = mp.Vector3((self.x_min + self.x_max) / 2)
self.size_2d = mp.Vector3(self.x_max - self.x_min, self.y_max - self.y_min)
- self.center_2d = mp.Vector3((self.x_min + self.x_max) / 2, (self.y_min + self.y_max) / 2)
+ self.center_2d = mp.Vector3(
+ (self.x_min + self.x_max) / 2, (self.y_min + self.y_max) / 2
+ )
def test_1d_slice(self):
self.sim.run(until_after_sources=0)
@@ -67,7 +70,9 @@ def test_2d_slice(self):
def test_1d_slice_user_array(self):
self.sim.run(until_after_sources=0)
- arr = np.zeros(126, dtype=np.float32 if mp.is_single_precision() else np.float64)
+ arr = np.zeros(
+ 126, dtype=np.float32 if mp.is_single_precision() else np.float64
+ )
vol = mp.Volume(center=self.center_1d, size=self.size_1d)
self.sim.get_array(mp.Hz, vol, arr=arr)
tol = 1e-5 if mp.is_single_precision() else 1e-8
@@ -75,7 +80,9 @@ def test_1d_slice_user_array(self):
def test_2d_slice_user_array(self):
self.sim.run(until_after_sources=0)
- arr = np.zeros((126, 38), dtype=np.float32 if mp.is_single_precision() else np.float64)
+ arr = np.zeros(
+ (126, 38), dtype=np.float32 if mp.is_single_precision() else np.float64
+ )
vol = mp.Volume(center=self.center_2d, size=self.size_2d)
self.sim.get_array(mp.Hz, vol, arr=arr)
tol = 1e-5 if mp.is_single_precision() else 1e-8
@@ -103,16 +110,24 @@ def test_1d_complex_slice(self):
self.sim.run(until_after_sources=0)
vol = mp.Volume(center=self.center_1d, size=self.size_1d)
hl_slice1d = self.sim.get_array(mp.Hz, vol, cmplx=True)
- self.assertTrue(hl_slice1d.dtype == np.complex64 if mp.is_single_precision() else np.complex128)
+ self.assertTrue(
+ hl_slice1d.dtype == np.complex64
+ if mp.is_single_precision()
+ else np.complex128
+ )
self.assertTrue(hl_slice1d.shape[0] == 126)
def test_2d_complex_slice(self):
self.sim.run(until_after_sources=0)
vol = mp.Volume(center=self.center_2d, size=self.size_2d)
hl_slice2d = self.sim.get_array(mp.Hz, vol, cmplx=True)
- self.assertTrue(hl_slice2d.dtype == np.complex64 if mp.is_single_precision() else np.complex128)
+ self.assertTrue(
+ hl_slice2d.dtype == np.complex64
+ if mp.is_single_precision()
+ else np.complex128
+ )
self.assertTrue(hl_slice2d.shape[0] == 126 and hl_slice2d.shape[1] == 38)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_cavity_farfield.py b/python/tests/test_cavity_farfield.py
index 93de61f01..c9b0284a5 100644
--- a/python/tests/test_cavity_farfield.py
+++ b/python/tests/test_cavity_farfield.py
@@ -7,7 +7,7 @@
class TestCavityFarfield(ApproxComparisonTestCase):
- data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data'))
+ data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data"))
def run_test(self, nfreqs):
eps = 13
@@ -22,8 +22,13 @@ def run_test(self, nfreqs):
cell = mp.Vector3(sx, sy, 0)
- geometry = [mp.Block(center=mp.Vector3(), size=mp.Vector3(mp.inf, w, mp.inf),
- material=mp.Medium(epsilon=eps))]
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(mp.inf, w, mp.inf),
+ material=mp.Medium(epsilon=eps),
+ )
+ ]
for i in range(N):
geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)))
@@ -35,55 +40,66 @@ def run_test(self, nfreqs):
fcen = 0.25
df = 0.2
- sources = mp.Source(src=mp.GaussianSource(fcen, fwidth=df), component=mp.Hz, center=mp.Vector3())
+ sources = mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=df), component=mp.Hz, center=mp.Vector3()
+ )
symmetries = [mp.Mirror(mp.Y, phase=-1), mp.Mirror(mp.X, phase=-1)]
d1 = 0.2
- sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- sources=[sources],
- symmetries=symmetries,
- boundary_layers=[pml_layers],
- resolution=resolution)
+ sim = mp.Simulation(
+ cell_size=cell,
+ geometry=geometry,
+ sources=[sources],
+ symmetries=symmetries,
+ boundary_layers=[pml_layers],
+ resolution=resolution,
+ )
nearfield = sim.add_near2far(
- fcen, 0.1, nfreqs,
- mp.Near2FarRegion(mp.Vector3(0, 0.5 * w + d1),
- size=mp.Vector3(2 * dpml - sx)),
- mp.Near2FarRegion(mp.Vector3(-0.5 * sx + dpml, 0.5 * w + 0.5 * d1),
- size=mp.Vector3(0, d1),
- weight=-1.0),
- mp.Near2FarRegion(mp.Vector3(0.5 * sx - dpml, 0.5 * w + 0.5 * d1),
- size=mp.Vector3(0, d1)),
- decimation_factor=1
+ fcen,
+ 0.1,
+ nfreqs,
+ mp.Near2FarRegion(
+ mp.Vector3(0, 0.5 * w + d1), size=mp.Vector3(2 * dpml - sx)
+ ),
+ mp.Near2FarRegion(
+ mp.Vector3(-0.5 * sx + dpml, 0.5 * w + 0.5 * d1),
+ size=mp.Vector3(0, d1),
+ weight=-1.0,
+ ),
+ mp.Near2FarRegion(
+ mp.Vector3(0.5 * sx - dpml, 0.5 * w + 0.5 * d1), size=mp.Vector3(0, d1)
+ ),
+ decimation_factor=1,
)
sim.run(until=200)
d2 = 20
h = 4
- vol = mp.Volume(mp.Vector3(0, (0.5 * w) + d2 + (0.5 * h)), size=mp.Vector3(sx - 2 * dpml, h))
+ vol = mp.Volume(
+ mp.Vector3(0, (0.5 * w) + d2 + (0.5 * h)), size=mp.Vector3(sx - 2 * dpml, h)
+ )
result = sim.get_farfields(nearfield, resolution, where=vol)
- fname = 'cavity-farfield.h5' if nfreqs == 1 else 'cavity-farfield-4-freqs.h5'
+ fname = "cavity-farfield.h5" if nfreqs == 1 else "cavity-farfield-4-freqs.h5"
ref_file = os.path.join(self.data_dir, fname)
- with h5py.File(ref_file, 'r') as f:
+ with h5py.File(ref_file, "r") as f:
# Get reference data into memory
- ref_ex = mp.complexarray(f['ex.r'][()], f['ex.i'][()])
- ref_ey = mp.complexarray(f['ey.r'][()], f['ey.i'][()])
- ref_ez = mp.complexarray(f['ez.r'][()], f['ez.i'][()])
- ref_hx = mp.complexarray(f['hx.r'][()], f['hx.i'][()])
- ref_hy = mp.complexarray(f['hy.r'][()], f['hy.i'][()])
- ref_hz = mp.complexarray(f['hz.r'][()], f['hz.i'][()])
+ ref_ex = mp.complexarray(f["ex.r"][()], f["ex.i"][()])
+ ref_ey = mp.complexarray(f["ey.r"][()], f["ey.i"][()])
+ ref_ez = mp.complexarray(f["ez.r"][()], f["ez.i"][()])
+ ref_hx = mp.complexarray(f["hx.r"][()], f["hx.i"][()])
+ ref_hy = mp.complexarray(f["hy.r"][()], f["hy.i"][()])
+ ref_hz = mp.complexarray(f["hz.r"][()], f["hz.i"][()])
tol = 1e-5 if mp.is_single_precision() else 1e-7
- self.assertClose(ref_ex, result['Ex'], epsilon=tol)
- self.assertClose(ref_ey, result['Ey'], epsilon=tol)
- self.assertClose(ref_ez, result['Ez'], epsilon=tol)
- self.assertClose(ref_hx, result['Hx'], epsilon=tol)
- self.assertClose(ref_hy, result['Hy'], epsilon=tol)
- self.assertClose(ref_hz, result['Hz'], epsilon=tol)
-
+ self.assertClose(ref_ex, result["Ex"], epsilon=tol)
+ self.assertClose(ref_ey, result["Ey"], epsilon=tol)
+ self.assertClose(ref_ez, result["Ez"], epsilon=tol)
+ self.assertClose(ref_hx, result["Hx"], epsilon=tol)
+ self.assertClose(ref_hy, result["Hy"], epsilon=tol)
+ self.assertClose(ref_hz, result["Hz"], epsilon=tol)
def test_cavity_farfield(self):
self.run_test(nfreqs=1)
@@ -92,5 +108,5 @@ def test_cavity_farfield_four_freqs(self):
self.run_test(nfreqs=4)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_chunk_balancer.py b/python/tests/test_chunk_balancer.py
index 00b0deebc..dd9b4770e 100644
--- a/python/tests/test_chunk_balancer.py
+++ b/python/tests/test_chunk_balancer.py
@@ -30,14 +30,15 @@ def __init__(self, *args, **kwargs):
def _structure_get_chunk_owners(self):
# Hacky workaround to make this test work on single-core systems
- proc_ids = [leaf.proc_id for leaf in bpu.enumerate_leaf_nodes(self.chunk_layout)]
+ proc_ids = [
+ leaf.proc_id for leaf in bpu.enumerate_leaf_nodes(self.chunk_layout)
+ ]
return np.array(proc_ids)
def init_sim(self):
super().init_sim()
- setattr(self.structure, "get_chunk_owners",
- self._structure_get_chunk_owners)
+ setattr(self.structure, "get_chunk_owners", self._structure_get_chunk_owners)
def time_spent_on(self, time_sink: int):
# We're going to pretend the amount of time spent is ~volume so that
@@ -72,51 +73,49 @@ def time_spent_on(self, time_sink: int):
TEST_SIM_1 = lambda: MockSimulation(
cell_size=mp.Vector3(10.0, 5.0, 0),
resolution=20,
- chunk_layout=mp.BinaryPartition(data=[
- (mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]
- ]))
+ chunk_layout=mp.BinaryPartition(
+ data=[(mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]]
+ ),
+)
TEST_SIM_2 = lambda: MockSimulation(
cell_size=mp.Vector3(10.0, 5.0, 3.0),
resolution=10,
- chunk_layout=mp.BinaryPartition(data=[
- (mp.X, -2.0), 0, [(mp.Y, 1.0), [(mp.X, 3.0), 1, [(mp.Y, 0.5), 4, 3]], 2]
- ]))
+ chunk_layout=mp.BinaryPartition(
+ data=[(mp.X, -2.0), 0, [(mp.Y, 1.0), [(mp.X, 3.0), 1, [(mp.Y, 0.5), 4, 3]], 2]]
+ ),
+)
TEST_SIM_3 = lambda: MockSimulation(
cell_size=mp.Vector3(6.0, 4.0, 0),
resolution=10,
- chunk_layout=mp.BinaryPartition(data=[(mp.X, -2.0), 0, [(mp.X, 2.0), 1, 2]])
+ chunk_layout=mp.BinaryPartition(data=[(mp.X, -2.0), 0, [(mp.X, 2.0), 1, 2]]),
)
TEST_SIM_4 = lambda: MockSimulation(
cell_size=mp.Vector3(6.0, 4.0, 0),
resolution=10,
chunk_layout=mp.BinaryPartition(
- data=[(mp.X, -2.0), 0,
- [(mp.X, -0.5), 1, [(mp.X, 1.0), 2, [(mp.X, 2.0), 3, 4]]]]))
+ data=[(mp.X, -2.0), 0, [(mp.X, -0.5), 1, [(mp.X, 1.0), 2, [(mp.X, 2.0), 3, 4]]]]
+ ),
+)
TEST_SIM_DUPLICATE_PROC_ID = lambda: MockSimulation(
cell_size=mp.Vector3(10.0, 5.0, 0),
resolution=10,
- chunk_layout=mp.BinaryPartition(data=[
- (mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 2, 1]], 2]
- ]))
+ chunk_layout=mp.BinaryPartition(
+ data=[(mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 2, 1]], 2]]
+ ),
+)
TEST_CHUNK_DATA_1 = {
- "chunk_layout":
- mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]),
- "cell_size":
- mp.Vector3(6.0, 4.0, 0),
+ "chunk_layout": mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]),
+ "cell_size": mp.Vector3(6.0, 4.0, 0),
"time_stepping": [1.0, 1.0, 1.0],
- "new_chunk_layout":
- mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]),
+ "new_chunk_layout": mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]),
}
TEST_CHUNK_DATA_2 = {
- "chunk_layout":
- mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]),
- "cell_size":
- mp.Vector3(6.0, 4.0, 0),
+ "chunk_layout": mp.BinaryPartition(data=[(mp.X, -2.5), 0, [(mp.X, 2.5), 1, 2]]),
+ "cell_size": mp.Vector3(6.0, 4.0, 0),
"time_stepping": [3.0 - 2.5, 2.5 + 2.5, 3.0 - 2.5],
- "new_chunk_layout":
- mp.BinaryPartition(data=[(mp.X, -1.0), 0, [(mp.X, 1.0), 1, 2]]),
+ "new_chunk_layout": mp.BinaryPartition(data=[(mp.X, -1.0), 0, [(mp.X, 1.0), 1, 2]]),
}
TEST_CHUNK_DATA_3 = {
"chunk_layout": mp.BinaryPartition(data=[(mp.X, 2.0), 0, 1]),
@@ -131,43 +130,40 @@ def time_spent_on(self, time_sink: int):
"new_chunk_layout": mp.BinaryPartition(data=[(mp.X, 0.0), 0, 1]),
}
TEST_CHUNK_DATA_5 = {
- "chunk_layout":
- mp.BinaryPartition(data=[(
- mp.X,
- -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]]),
- "cell_size":
- mp.Vector3(10.0, 5.0, 0),
+ "chunk_layout": mp.BinaryPartition(
+ data=[(mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]]
+ ),
+ "cell_size": mp.Vector3(10.0, 5.0, 0),
"time_stepping": [1.0, 1.0, 1.0, 1.0, 1.0],
- "new_chunk_layout":
- mp.BinaryPartition(data=[(
- mp.X,
- -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]]),
+ "new_chunk_layout": mp.BinaryPartition(
+ data=[(mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]]
+ ),
}
TEST_CHUNK_DATA_6 = {
- "chunk_layout":
- mp.BinaryPartition(data=[(
- mp.X,
- -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]]),
- "cell_size":
- mp.Vector3(10.0, 5.0, 0),
+ "chunk_layout": mp.BinaryPartition(
+ data=[(mp.X, -2.0), 0, [(mp.Y, 1.5), [(mp.X, 4.0), 1, [(mp.Y, 0.5), 4, 3]], 2]]
+ ),
+ "cell_size": mp.Vector3(10.0, 5.0, 0),
"time_stepping": [1500.0, 2400.0, 700.0, 100.0, 300.0],
- "new_chunk_layout":
- mp.BinaryPartition(
- data=[(mp.X, -3.0), 0,
- [(mp.Y, 1.25
- ), [(mp.X, -0.3333333333333335), 1, [(mp.Y,
- -0.625), 4, 3]], 2]]),
+ "new_chunk_layout": mp.BinaryPartition(
+ data=[
+ (mp.X, -3.0),
+ 0,
+ [(mp.Y, 1.25), [(mp.X, -0.3333333333333335), 1, [(mp.Y, -0.625), 4, 3]], 2],
+ ]
+ ),
}
class MockSimulationTest(unittest.TestCase):
-
- @parameterized.parameterized.expand([
- (TEST_SIM_1, [6000.0, 9600.0, 2800.0, 400.0, 1200.0]),
- (TEST_SIM_2, [45000.0, 52500.0, 31500.0, 3000.0, 18000.0]),
- (TEST_SIM_3, [400.0, 1600.0, 400.0]),
- (TEST_SIM_4, [400.0, 600.0, 600.0, 400.0, 400.0]),
- ])
+ @parameterized.parameterized.expand(
+ [
+ (TEST_SIM_1, [6000.0, 9600.0, 2800.0, 400.0, 1200.0]),
+ (TEST_SIM_2, [45000.0, 52500.0, 31500.0, 3000.0, 18000.0]),
+ (TEST_SIM_3, [400.0, 1600.0, 400.0]),
+ (TEST_SIM_4, [400.0, 600.0, 600.0, 400.0, 400.0]),
+ ]
+ )
def test_time_spent_on(self, test_sim_constructor, expected_stepping_times):
test_sim = test_sim_constructor()
test_sim.init_sim()
@@ -175,20 +171,25 @@ def test_time_spent_on(self, test_sim_constructor, expected_stepping_times):
for time_sink in TIMING_MEASUREMENT_IDS.values():
if time_sink == TIMING_MEASUREMENT_IDS["time_stepping"]:
self.assertListEqual(
- list(test_sim.time_spent_on(time_sink)), expected_stepping_times)
+ list(test_sim.time_spent_on(time_sink)), expected_stepping_times
+ )
else:
self.assertListEqual(
list(test_sim.time_spent_on(time_sink)),
- [0.0] * len(expected_stepping_times))
-
- @parameterized.parameterized.expand([
- (TEST_SIM_1, [0, 1, 4, 3, 2]),
- (TEST_SIM_2, [0, 1, 4, 3, 2]),
- (TEST_SIM_3, [0, 1, 2]),
- (TEST_SIM_4, [0, 1, 2, 3, 4]),
- ])
- def test_structure_get_chunk_owners(self, test_sim_constructor,
- expected_chunk_owners):
+ [0.0] * len(expected_stepping_times),
+ )
+
+ @parameterized.parameterized.expand(
+ [
+ (TEST_SIM_1, [0, 1, 4, 3, 2]),
+ (TEST_SIM_2, [0, 1, 4, 3, 2]),
+ (TEST_SIM_3, [0, 1, 2]),
+ (TEST_SIM_4, [0, 1, 2, 3, 4]),
+ ]
+ )
+ def test_structure_get_chunk_owners(
+ self, test_sim_constructor, expected_chunk_owners
+ ):
test_sim = test_sim_constructor()
test_sim.init_sim()
@@ -198,11 +199,12 @@ def test_structure_get_chunk_owners(self, test_sim_constructor,
class ChunkBalancerTest(unittest.TestCase):
-
- @parameterized.parameterized.expand([
- (TEST_SIM_1, False),
- (TEST_SIM_DUPLICATE_PROC_ID, True),
- ])
+ @parameterized.parameterized.expand(
+ [
+ (TEST_SIM_1, False),
+ (TEST_SIM_DUPLICATE_PROC_ID, True),
+ ]
+ )
def test_validate_sim(self, test_sim_constructor, should_raise_exception):
test_sim = test_sim_constructor()
test_sim.init_sim()
@@ -215,31 +217,33 @@ def test_validate_sim(self, test_sim_constructor, should_raise_exception):
else:
chunk_balancer._validate_sim(test_sim)
- @parameterized.parameterized.expand([
- (TEST_SIM_1,),
- (TEST_SIM_2,),
- (TEST_SIM_3,),
- (TEST_SIM_4,),
- ])
+ @parameterized.parameterized.expand(
+ [
+ (TEST_SIM_1,),
+ (TEST_SIM_2,),
+ (TEST_SIM_3,),
+ (TEST_SIM_4,),
+ ]
+ )
def test_chunk_layout_improvement(self, test_sim_constructor):
"""Tests that chunk_balancer improves balance after 1 iteration."""
test_sim = test_sim_constructor()
test_sim.init_sim()
old_timing_measurements = MeepTimingMeasurements.new_from_simulation(
- test_sim, -1)
+ test_sim, -1
+ )
chunk_balancer = ChunkBalancer()
chunk_balancer.adjust_chunk_layout(test_sim, sensitivity=1.0)
new_timing_measurements = MeepTimingMeasurements.new_from_simulation(
- test_sim, -1)
+ test_sim, -1
+ )
- old_step_times = np.array(
- old_timing_measurements.measurements["time_stepping"])
- new_step_times = np.array(
- new_timing_measurements.measurements["time_stepping"])
+ old_step_times = np.array(old_timing_measurements.measurements["time_stepping"])
+ new_step_times = np.array(new_timing_measurements.measurements["time_stepping"])
old_max_time = np.max(old_step_times)
new_max_time = np.max(new_step_times)
@@ -250,12 +254,14 @@ def test_chunk_layout_improvement(self, test_sim_constructor):
self.assertLess(new_max_time, old_max_time)
self.assertGreater(new_min_time, old_min_time)
- @parameterized.parameterized.expand([
- (TEST_SIM_1,),
- (TEST_SIM_2,),
- (TEST_SIM_3,),
- (TEST_SIM_4,),
- ])
+ @parameterized.parameterized.expand(
+ [
+ (TEST_SIM_1,),
+ (TEST_SIM_2,),
+ (TEST_SIM_3,),
+ (TEST_SIM_4,),
+ ]
+ )
def test_chunk_layout_convergence(self, test_sim_constructor):
"""Tests that chunk_balancer converges to load balanced state."""
test_sim = test_sim_constructor()
@@ -269,31 +275,35 @@ def test_chunk_layout_convergence(self, test_sim_constructor):
chunk_balancer.adjust_chunk_layout(test_sim, sensitivity=0.5)
new_timing_measurements = MeepTimingMeasurements.new_from_simulation(
- test_sim, -1)
+ test_sim, -1
+ )
new_step_times = np.array(
- new_timing_measurements.measurements["time_stepping"])
+ new_timing_measurements.measurements["time_stepping"]
+ )
# Check that new stepping times have converged to close to the mean value
tolerance = 0.05
mean_step_time = np.mean(new_step_times)
- self.assertTrue(
- np.allclose(mean_step_time, new_step_times, rtol=tolerance))
-
- @parameterized.parameterized.expand([
- (TEST_CHUNK_DATA_1,),
- (TEST_CHUNK_DATA_2,),
- (TEST_CHUNK_DATA_3,),
- (TEST_CHUNK_DATA_4,),
- (TEST_CHUNK_DATA_5,),
- (TEST_CHUNK_DATA_6,),
- ])
+ self.assertTrue(np.allclose(mean_step_time, new_step_times, rtol=tolerance))
+
+ @parameterized.parameterized.expand(
+ [
+ (TEST_CHUNK_DATA_1,),
+ (TEST_CHUNK_DATA_2,),
+ (TEST_CHUNK_DATA_3,),
+ (TEST_CHUNK_DATA_4,),
+ (TEST_CHUNK_DATA_5,),
+ (TEST_CHUNK_DATA_6,),
+ ]
+ )
def test_split_pos_adjustment(self, test_chunk_data):
chunk_layout = test_chunk_data["chunk_layout"]
sim = MockSimulation(
cell_size=test_chunk_data["cell_size"],
resolution=10,
- chunk_layout=chunk_layout)
+ chunk_layout=chunk_layout,
+ )
sim.init_sim()
chunk_volumes = sim.structure.get_chunk_volumes()
chunk_owners = sim.structure.get_chunk_owners()
@@ -307,20 +317,23 @@ def test_split_pos_adjustment(self, test_chunk_data):
measurements[name] = test_chunk_data["time_stepping"]
else:
measurements[name] = [0] * num_procs
- timing_measurements = MeepTimingMeasurements(measurements, -1, None, None,
- None, None, None)
+ timing_measurements = MeepTimingMeasurements(
+ measurements, -1, None, None, None, None, None
+ )
new_chunk_layout = chunk_balancer.compute_new_chunk_layout(
timing_measurements,
chunk_layout,
chunk_volumes,
chunk_owners,
- sensitivity=1.0)
+ sensitivity=1.0,
+ )
expected_chunk_layout = test_chunk_data["new_chunk_layout"]
self.assertTrue(
- bpu.partitions_are_equal(new_chunk_layout, expected_chunk_layout))
+ bpu.partitions_are_equal(new_chunk_layout, expected_chunk_layout)
+ )
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_chunk_layout.py b/python/tests/test_chunk_layout.py
index 91a8082f1..ea0227a6f 100644
--- a/python/tests/test_chunk_layout.py
+++ b/python/tests/test_chunk_layout.py
@@ -3,38 +3,38 @@
import unittest
-def traverse_tree(bp=None,min_corner=None,max_corner=None):
+def traverse_tree(bp=None, min_corner=None, max_corner=None):
process_ids = []
chunk_areas = []
- def _traverse_tree(bp=None,min_corner=None,max_corner=None):
- if ((min_corner.x > max_corner.x) or (min_corner.y > max_corner.y)):
+ def _traverse_tree(bp=None, min_corner=None, max_corner=None):
+ if (min_corner.x > max_corner.x) or (min_corner.y > max_corner.y):
raise RuntimeError("min_corner/max_corner have been incorrectly defined.")
## reached a leaf
- if (bp.left is None and bp.right is None):
+ if bp.left is None and bp.right is None:
process_ids.append(bp.proc_id)
- chunk_area = (max_corner.x-min_corner.x)*(max_corner.y-min_corner.y)
+ chunk_area = (max_corner.x - min_corner.x) * (max_corner.y - min_corner.y)
chunk_areas.append(chunk_area)
## traverse the left branch
- if (bp.left is not None):
+ if bp.left is not None:
new_max_corner = copy.deepcopy(max_corner)
if bp.split_dir == mp.X:
new_max_corner.x = bp.split_pos
else:
new_max_corner.y = bp.split_pos
- _traverse_tree(bp.left,min_corner,new_max_corner)
+ _traverse_tree(bp.left, min_corner, new_max_corner)
## traverse the right branch
- if (bp.right is not None):
+ if bp.right is not None:
new_min_corner = copy.deepcopy(min_corner)
if bp.split_dir == mp.X:
new_min_corner.x = bp.split_pos
else:
new_min_corner.y = bp.split_pos
- _traverse_tree(bp.right,new_min_corner,max_corner)
+ _traverse_tree(bp.right, new_min_corner, max_corner)
_traverse_tree(bp=bp, min_corner=min_corner, max_corner=max_corner)
@@ -42,40 +42,57 @@ def _traverse_tree(bp=None,min_corner=None,max_corner=None):
class TestChunkLayoutBinaryPartition(unittest.TestCase):
-
def test_chunk_layout_binary_partition(self):
- chunk_layout = mp.BinaryPartition(data=[ (mp.X,-2.0), 0, [ (mp.Y,1.5), [ (mp.X,3.0), 1, [ (mp.Y,-0.5), 4, 3 ] ], 2 ] ])
+ chunk_layout = mp.BinaryPartition(
+ data=[
+ (mp.X, -2.0),
+ 0,
+ [(mp.Y, 1.5), [(mp.X, 3.0), 1, [(mp.Y, -0.5), 4, 3]], 2],
+ ]
+ )
- cell_size = mp.Vector3(10.0,5.0,0)
+ cell_size = mp.Vector3(10.0, 5.0, 0)
- sim = mp.Simulation(cell_size=cell_size,
- resolution=10,
- chunk_layout=chunk_layout)
+ sim = mp.Simulation(
+ cell_size=cell_size, resolution=10, chunk_layout=chunk_layout
+ )
sim.init_sim()
owners = sim.structure.get_chunk_owners()
- areas = [ v.surroundings().full_volume() for v in sim.structure.get_chunk_volumes() ]
+ areas = [
+ v.surroundings().full_volume() for v in sim.structure.get_chunk_volumes()
+ ]
- process_ids, chunk_areas = traverse_tree(chunk_layout,-0.5*cell_size,0.5*cell_size)
+ process_ids, chunk_areas = traverse_tree(
+ chunk_layout, -0.5 * cell_size, 0.5 * cell_size
+ )
- self.assertListEqual([int(f) for f in owners],[f % mp.count_processors() for f in process_ids])
- self.assertListEqual(areas,chunk_areas)
+ self.assertListEqual(
+ [int(f) for f in owners], [f % mp.count_processors() for f in process_ids]
+ )
+ self.assertListEqual(areas, chunk_areas)
def test_meep_default_chunk_layout(self):
- cell_size = mp.Vector3(10.0,5.0,0)
- sim = mp.Simulation(cell_size=cell_size,
- resolution=10)
+ cell_size = mp.Vector3(10.0, 5.0, 0)
+ sim = mp.Simulation(cell_size=cell_size, resolution=10)
sim.init_sim()
owners = sim.structure.get_chunk_owners()
- areas = [ v.surroundings().full_volume() for v in sim.structure.get_chunk_volumes() ]
+ areas = [
+ v.surroundings().full_volume() for v in sim.structure.get_chunk_volumes()
+ ]
chunk_layout = sim.chunk_layout
- process_ids, chunk_areas = traverse_tree(chunk_layout,-0.5*cell_size,0.5*cell_size)
+ process_ids, chunk_areas = traverse_tree(
+ chunk_layout, -0.5 * cell_size, 0.5 * cell_size
+ )
+
+ self.assertListEqual(
+ [int(f) for f in owners], [f % mp.count_processors() for f in process_ids]
+ )
+ self.assertListEqual(areas, chunk_areas)
- self.assertListEqual([int(f) for f in owners],[f % mp.count_processors() for f in process_ids])
- self.assertListEqual(areas,chunk_areas)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_chunks.py b/python/tests/test_chunks.py
index 2af803b07..97db1a712 100644
--- a/python/tests/test_chunks.py
+++ b/python/tests/test_chunks.py
@@ -3,7 +3,6 @@
class TestChunks(unittest.TestCase):
-
@classmethod
def setUpClass(cls):
cls.temp_dir = mp.make_output_directory()
@@ -17,7 +16,7 @@ def test_chunks(self):
cell = mp.Vector3(sxy, sxy, 0)
fcen = 1.0 # pulse center frequency
- df = 0.1 # pulse width (in frequency)
+ df = 0.1 # pulse width (in frequency)
sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3())]
@@ -25,51 +24,87 @@ def test_chunks(self):
pml_layers = [mp.PML(dpml)]
resolution = 10
- sim = mp.Simulation(cell_size=cell,
- boundary_layers=pml_layers,
- sources=sources,
- resolution=resolution,
- split_chunks_evenly=False)
+ sim = mp.Simulation(
+ cell_size=cell,
+ boundary_layers=pml_layers,
+ sources=sources,
+ resolution=resolution,
+ split_chunks_evenly=False,
+ )
sim.use_output_directory(self.temp_dir)
- top = mp.FluxRegion(center=mp.Vector3(0,+0.5*sxy-dpml), size=mp.Vector3(sxy-2*dpml,0), weight=+1.0)
- bot = mp.FluxRegion(center=mp.Vector3(0,-0.5*sxy+dpml), size=mp.Vector3(sxy-2*dpml,0), weight=-1.0)
- rgt = mp.FluxRegion(center=mp.Vector3(+0.5*sxy-dpml,0), size=mp.Vector3(0,sxy-2*dpml), weight=+1.0)
- lft = mp.FluxRegion(center=mp.Vector3(-0.5*sxy+dpml,0), size=mp.Vector3(0,sxy-2*dpml), weight=-1.0)
+ top = mp.FluxRegion(
+ center=mp.Vector3(0, +0.5 * sxy - dpml),
+ size=mp.Vector3(sxy - 2 * dpml, 0),
+ weight=+1.0,
+ )
+ bot = mp.FluxRegion(
+ center=mp.Vector3(0, -0.5 * sxy + dpml),
+ size=mp.Vector3(sxy - 2 * dpml, 0),
+ weight=-1.0,
+ )
+ rgt = mp.FluxRegion(
+ center=mp.Vector3(+0.5 * sxy - dpml, 0),
+ size=mp.Vector3(0, sxy - 2 * dpml),
+ weight=+1.0,
+ )
+ lft = mp.FluxRegion(
+ center=mp.Vector3(-0.5 * sxy + dpml, 0),
+ size=mp.Vector3(0, sxy - 2 * dpml),
+ weight=-1.0,
+ )
tot_flux = sim.add_flux(fcen, 0, 1, top, bot, rgt, lft, decimation_factor=1)
- sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mp.Vector3(), 1e-5))
+ sim.run(
+ until_after_sources=mp.stop_when_fields_decayed(
+ 50, mp.Ez, mp.Vector3(), 1e-5
+ )
+ )
- sim.save_flux('tot_flux', tot_flux)
+ sim.save_flux("tot_flux", tot_flux)
sim1 = sim
- geometry = [mp.Block(center=mp.Vector3(),
- size=mp.Vector3(sxy, sxy, mp.inf),
- material=mp.Medium(index=3.5)),
- mp.Block(center=mp.Vector3(),
- size=mp.Vector3(sxy-2*dpml, sxy-2*dpml, mp.inf),
- material=mp.air)]
-
- sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- boundary_layers=pml_layers,
- sources=sources,
- resolution=resolution,
- chunk_layout=sim1)
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(sxy, sxy, mp.inf),
+ material=mp.Medium(index=3.5),
+ ),
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(sxy - 2 * dpml, sxy - 2 * dpml, mp.inf),
+ material=mp.air,
+ ),
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell,
+ geometry=geometry,
+ boundary_layers=pml_layers,
+ sources=sources,
+ resolution=resolution,
+ chunk_layout=sim1,
+ )
sim.use_output_directory(self.temp_dir)
tot_flux = sim.add_flux(fcen, 0, 1, top, bot, rgt, lft, decimation_factor=1)
- sim.load_minus_flux('tot_flux', tot_flux)
+ sim.load_minus_flux("tot_flux", tot_flux)
- sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mp.Vector3(), 1e-5))
+ sim.run(
+ until_after_sources=mp.stop_when_fields_decayed(
+ 50, mp.Ez, mp.Vector3(), 1e-5
+ )
+ )
places = 3 if mp.is_single_precision() else 7
- self.assertAlmostEqual(86.90826609300862, mp.get_fluxes(tot_flux)[0], places=places)
+ self.assertAlmostEqual(
+ 86.90826609300862, mp.get_fluxes(tot_flux)[0], places=places
+ )
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_conductivity.py b/python/tests/test_conductivity.py
index 9441db99a..8f9176ad2 100644
--- a/python/tests/test_conductivity.py
+++ b/python/tests/test_conductivity.py
@@ -4,8 +4,8 @@
dB_cm_to_dB_um = 1e-4
-class TestConductivity(unittest.TestCase):
+class TestConductivity(unittest.TestCase):
def wvg_flux(self, res, att_coeff):
"""
Computes the Poynting flux in a single-mode waveguide at two
@@ -14,88 +14,105 @@ def wvg_flux(self, res, att_coeff):
coefficient att_coeff (dB/cm).
"""
- cell_size = mp.Vector3(14.,14.)
+ cell_size = mp.Vector3(14.0, 14.0)
- pml_layers = [mp.PML(thickness=2.)]
+ pml_layers = [mp.PML(thickness=2.0)]
- w = 1. # width of waveguide
+ w = 1.0 # width of waveguide
- fsrc = 0.15 # frequency (in vacuum)
+ fsrc = 0.15 # frequency (in vacuum)
# note: MPB can only compute modes of lossless material systems.
# The imaginary part of ε is ignored and the launched
# waveguide mode is therefore inaccurate. For small values
# of imag(ε) (which is proportional to att_coeff), this
# inaccuracy tends to be insignificant.
- sources = [mp.EigenModeSource(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc),
- center=mp.Vector3(-5.),
- size=mp.Vector3(y=10.),
- eig_parity=mp.EVEN_Y+mp.ODD_Z)]
+ sources = [
+ mp.EigenModeSource(
+ src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc),
+ center=mp.Vector3(-5.0),
+ size=mp.Vector3(y=10.0),
+ eig_parity=mp.EVEN_Y + mp.ODD_Z,
+ )
+ ]
# ref: https://en.wikipedia.org/wiki/Mathematical_descriptions_of_opacity
# Note that this is the loss of a planewave, which is only approximately
# the loss of a waveguide mode. In principle, we could compute the latter
# semi-analytically if we wanted to run this unit test to greater accuracy
# (e.g. to test convergence with resolution).
- n_eff = np.sqrt(12.) + 1j * (1/fsrc) * (dB_cm_to_dB_um * att_coeff) / (4 * np.pi)
+ n_eff = np.sqrt(12.0) + 1j * (1 / fsrc) * (dB_cm_to_dB_um * att_coeff) / (
+ 4 * np.pi
+ )
eps_eff = n_eff * n_eff
# ref: https://meep.readthedocs.io/en/latest/Materials/#conductivity-and-complex
sigma_D = 2 * np.pi * fsrc * np.imag(eps_eff) / np.real(eps_eff)
- geometry = [mp.Block(center=mp.Vector3(),
- size=mp.Vector3(mp.inf,w,mp.inf),
- material=mp.Medium(epsilon=np.real(eps_eff),
- D_conductivity=sigma_D))]
-
- sim = mp.Simulation(cell_size=cell_size,
- resolution=res,
- boundary_layers=pml_layers,
- sources=sources,
- geometry=geometry,
- symmetries=[mp.Mirror(mp.Y)])
-
- tran1 = sim.add_flux(fsrc,
- 0,
- 1,
- mp.FluxRegion(center=mp.Vector3(x=0.), size=mp.Vector3(y=10.)))
-
- tran2 = sim.add_flux(fsrc,
- 0,
- 1,
- mp.FluxRegion(center=mp.Vector3(x=5.), size=mp.Vector3(y=10.)))
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(mp.inf, w, mp.inf),
+ material=mp.Medium(epsilon=np.real(eps_eff), D_conductivity=sigma_D),
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=res,
+ boundary_layers=pml_layers,
+ sources=sources,
+ geometry=geometry,
+ symmetries=[mp.Mirror(mp.Y)],
+ )
+
+ tran1 = sim.add_flux(
+ fsrc, 0, 1, mp.FluxRegion(center=mp.Vector3(x=0.0), size=mp.Vector3(y=10.0))
+ )
+
+ tran2 = sim.add_flux(
+ fsrc, 0, 1, mp.FluxRegion(center=mp.Vector3(x=5.0), size=mp.Vector3(y=10.0))
+ )
sim.run(until_after_sources=20)
return mp.get_fluxes(tran1)[0], mp.get_fluxes(tran2)[0]
-
def test_conductivity(self):
- res = 25. # pixels/μm
+ res = 25.0 # pixels/μm
# compute the incident flux for a lossless waveguide
- incident_flux1, incident_flux2 = self.wvg_flux(res, 0.)
- self.assertAlmostEqual(incident_flux1/incident_flux2, 1., places=2)
- print(f"incident_flux:, {incident_flux2 / incident_flux1} (measured), 1.0 (expected)")
-
+ incident_flux1, incident_flux2 = self.wvg_flux(res, 0.0)
+ self.assertAlmostEqual(incident_flux1 / incident_flux2, 1.0, places=2)
+ print(
+ f"incident_flux:, {incident_flux2 / incident_flux1} (measured), 1.0 (expected)"
+ )
# compute the flux for a lossy waveguide
- att_coeff = 37.46 # dB/cm
+ att_coeff = 37.46 # dB/cm
attenuated_flux1, attenuated_flux2 = self.wvg_flux(res, att_coeff)
- L1 = 5.
+ L1 = 5.0
expected_att1 = np.exp(-att_coeff * dB_cm_to_dB_um * L1)
- self.assertAlmostEqual(attenuated_flux1/incident_flux2, expected_att1, places=2)
- print("flux:, {}, {:.6f} (measured), {:.6f} (expected)".format(L1,
- attenuated_flux1/incident_flux2,
- expected_att1))
-
- L2 = 10.
+ self.assertAlmostEqual(
+ attenuated_flux1 / incident_flux2, expected_att1, places=2
+ )
+ print(
+ "flux:, {}, {:.6f} (measured), {:.6f} (expected)".format(
+ L1, attenuated_flux1 / incident_flux2, expected_att1
+ )
+ )
+
+ L2 = 10.0
expected_att2 = np.exp(-att_coeff * dB_cm_to_dB_um * L2)
- self.assertAlmostEqual(attenuated_flux2/incident_flux2, expected_att2, places=2)
- print("flux:, {}, {:.6f} (measured), {:.6f} (expected)".format(L2,
- attenuated_flux2/incident_flux2,
- expected_att2))
+ self.assertAlmostEqual(
+ attenuated_flux2 / incident_flux2, expected_att2, places=2
+ )
+ print(
+ "flux:, {}, {:.6f} (measured), {:.6f} (expected)".format(
+ L2, attenuated_flux2 / incident_flux2, expected_att2
+ )
+ )
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_cyl_ellipsoid.py b/python/tests/test_cyl_ellipsoid.py
index 8ea760d6c..82e717f4b 100644
--- a/python/tests/test_cyl_ellipsoid.py
+++ b/python/tests/test_cyl_ellipsoid.py
@@ -1,9 +1,11 @@
import unittest
import meep as mp
+
def dummy_eps(vec):
return 1.0
+
class TestCylEllipsoid(unittest.TestCase):
ref_Ez = -8.29555720049629e-5
@@ -22,9 +24,11 @@ def init(self):
c = mp.Cylinder(radius=3, material=mp.Medium(index=3.5))
e = mp.Ellipsoid(size=mp.Vector3(1, 2, mp.inf))
- sources = mp.Source(src=mp.GaussianSource(1, fwidth=0.1),
- component=self.src_cmpt,
- center=mp.Vector3())
+ sources = mp.Source(
+ src=mp.GaussianSource(1, fwidth=0.1),
+ component=self.src_cmpt,
+ center=mp.Vector3(),
+ )
if self.src_cmpt == mp.Ez:
symmetries = [mp.Mirror(mp.X), mp.Mirror(mp.Y)]
@@ -32,12 +36,14 @@ def init(self):
if self.src_cmpt == mp.Hz:
symmetries = [mp.Mirror(mp.X, -1), mp.Mirror(mp.Y, -1)]
- self.sim = mp.Simulation(cell_size=mp.Vector3(10, 10),
- geometry=[c, e],
- boundary_layers=[mp.PML(1.0)],
- sources=[sources],
- symmetries=symmetries,
- resolution=100)
+ self.sim = mp.Simulation(
+ cell_size=mp.Vector3(10, 10),
+ geometry=[c, e],
+ boundary_layers=[mp.PML(1.0)],
+ sources=[sources],
+ symmetries=symmetries,
+ resolution=100,
+ )
self.sim.use_output_directory(self.temp_dir)
@@ -45,15 +51,18 @@ def print_stuff(sim_obj):
v = mp.Vector3(4.13, 3.75, 0)
p = self.sim.get_field_point(self.src_cmpt, v)
print(f"t, Ez: {self.sim.round_time()} {p.real}+{p.imag}i")
+
self.print_stuff = print_stuff
def run_simulation(self):
- self.sim.run(mp.at_beginning(mp.output_epsilon),
- mp.at_every(0.25, self.print_stuff),
- mp.at_end(self.print_stuff),
- mp.at_end(mp.output_efield_z),
- until=23)
+ self.sim.run(
+ mp.at_beginning(mp.output_epsilon),
+ mp.at_every(0.25, self.print_stuff),
+ mp.at_end(self.print_stuff),
+ mp.at_end(mp.output_efield_z),
+ until=23,
+ )
ref_out_field = self.ref_Ez if self.src_cmpt == mp.Ez else self.ref_Hz
out_field = self.sim.fields.get_field(self.src_cmpt, mp.vec(4.13, 3.75)).real
@@ -74,5 +83,5 @@ def test_hz_field(self):
self.run_simulation()
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_dft_energy.py b/python/tests/test_dft_energy.py
index db43946ea..bf88c8633 100644
--- a/python/tests/test_dft_energy.py
+++ b/python/tests/test_dft_energy.py
@@ -7,33 +7,60 @@
class TestDftEnergy(unittest.TestCase):
-
def test_dft_energy(self):
resolution = 20
cell = mp.Vector3(10, 5)
- geom = [mp.Block(size=mp.Vector3(mp.inf, 1, mp.inf), material=mp.Medium(epsilon=12))]
+ geom = [
+ mp.Block(size=mp.Vector3(mp.inf, 1, mp.inf), material=mp.Medium(epsilon=12))
+ ]
pml = [mp.PML(1)]
- fsrc = 0.15
- sources = [mp.EigenModeSource(src=mp.GaussianSource(frequency=fsrc, fwidth=0.2*fsrc),
- center=mp.Vector3(-3), size=mp.Vector3(y=5),
- eig_band=1, eig_parity=mp.ODD_Z+mp.EVEN_Y,
- eig_match_freq=True)]
-
- sim = mp.Simulation(resolution=resolution, cell_size=cell, geometry=geom,
- boundary_layers=pml, sources=sources, symmetries=[mp.Mirror(direction=mp.Y)])
-
- flux = sim.add_flux(fsrc, 0, 1, mp.FluxRegion(center=mp.Vector3(3), size=mp.Vector3(y=5)),
- decimation_factor=1)
- energy = sim.add_energy(fsrc, 0, 1, mp.EnergyRegion(center=mp.Vector3(3), size=mp.Vector3(y=5)),
- decimation_factor=1)
- energy_decimated = sim.add_energy(fsrc, 0, 1,
- mp.EnergyRegion(center=mp.Vector3(3), size=mp.Vector3(y=5)),
- decimation_factor=10)
+ fsrc = 0.15
+ sources = [
+ mp.EigenModeSource(
+ src=mp.GaussianSource(frequency=fsrc, fwidth=0.2 * fsrc),
+ center=mp.Vector3(-3),
+ size=mp.Vector3(y=5),
+ eig_band=1,
+ eig_parity=mp.ODD_Z + mp.EVEN_Y,
+ eig_match_freq=True,
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell,
+ geometry=geom,
+ boundary_layers=pml,
+ sources=sources,
+ symmetries=[mp.Mirror(direction=mp.Y)],
+ )
+
+ flux = sim.add_flux(
+ fsrc,
+ 0,
+ 1,
+ mp.FluxRegion(center=mp.Vector3(3), size=mp.Vector3(y=5)),
+ decimation_factor=1,
+ )
+ energy = sim.add_energy(
+ fsrc,
+ 0,
+ 1,
+ mp.EnergyRegion(center=mp.Vector3(3), size=mp.Vector3(y=5)),
+ decimation_factor=1,
+ )
+ energy_decimated = sim.add_energy(
+ fsrc,
+ 0,
+ 1,
+ mp.EnergyRegion(center=mp.Vector3(3), size=mp.Vector3(y=5)),
+ decimation_factor=10,
+ )
sim.run(until_after_sources=100)
- res = sim.get_eigenmode_coefficients(flux, [1], eig_parity=mp.ODD_Z+mp.EVEN_Y)
+ res = sim.get_eigenmode_coefficients(flux, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y)
mode_vg = res.vgrp[0]
- poynting_flux = mp.get_fluxes(flux)[0]
+ poynting_flux = mp.get_fluxes(flux)[0]
e_energy = mp.get_electric_energy(energy)[0]
ratio_vg = (0.5 * poynting_flux) / e_energy
m_energy = mp.get_magnetic_energy(energy)[0]
@@ -48,5 +75,5 @@ def test_dft_energy(self):
self.assertAlmostEqual(m_energy, m_energy_decimated, places=1)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_dft_fields.py b/python/tests/test_dft_fields.py
index 96b557c65..c90af5ab0 100644
--- a/python/tests/test_dft_fields.py
+++ b/python/tests/test_dft_fields.py
@@ -5,8 +5,8 @@
from utils import ApproxComparisonTestCase
import os
-class TestDFTFields(ApproxComparisonTestCase):
+class TestDFTFields(ApproxComparisonTestCase):
@classmethod
def setUpClass(cls):
cls.temp_dir = mp.make_output_directory()
@@ -26,7 +26,10 @@ def init(self):
cell = mp.Vector3(self.sxy, self.sxy)
pml_layers = [mp.PML(self.dpml)]
- geometry = [mp.Cylinder(r + w, material=mp.Medium(epsilon=n**2)), mp.Cylinder(r, material=mp.vacuum)]
+ geometry = [
+ mp.Cylinder(r + w, material=mp.Medium(epsilon=n**2)),
+ mp.Cylinder(r, material=mp.vacuum),
+ ]
self.fcen = 0.118
self.df = 0.1
@@ -41,6 +44,7 @@ def init(self):
sources=sources,
boundary_layers=pml_layers,
)
+
def test_use_centered_grid(self):
sim = self.init()
sim.init_sim()
@@ -51,14 +55,20 @@ def test_get_dft_array(self):
sim = self.init()
sim.init_sim()
dft_fields = sim.add_dft_fields([mp.Ez], self.fcen, 0, 1)
- fr = mp.FluxRegion(mp.Vector3(), size=mp.Vector3(self.sxy, self.sxy), direction=mp.X)
+ fr = mp.FluxRegion(
+ mp.Vector3(), size=mp.Vector3(self.sxy, self.sxy), direction=mp.X
+ )
dft_flux = sim.add_flux(self.fcen, 0, 1, fr)
# volumes with zero thickness in x and y directions to test collapsing
# of empty dimensions in DFT array and HDF5 output routines
- thin_x_volume = mp.Volume(center=mp.Vector3(0.35*self.sxy), size=mp.Vector3(y=0.8*self.sxy))
+ thin_x_volume = mp.Volume(
+ center=mp.Vector3(0.35 * self.sxy), size=mp.Vector3(y=0.8 * self.sxy)
+ )
thin_x_flux = sim.add_dft_fields([mp.Ez], self.fcen, 0, 1, where=thin_x_volume)
- thin_y_volume = mp.Volume(center=mp.Vector3(y=0.25*self.sxy), size=mp.Vector3(x=self.sxy))
+ thin_y_volume = mp.Volume(
+ center=mp.Vector3(y=0.25 * self.sxy), size=mp.Vector3(x=self.sxy)
+ )
thin_y_flux = sim.add_flux(self.fcen, 0, 1, mp.FluxRegion(volume=thin_y_volume))
sim.run(until_after_sources=100)
@@ -69,14 +79,14 @@ def test_get_dft_array(self):
np.testing.assert_equal(thin_x_array.ndim, 1)
np.testing.assert_equal(thin_y_array.ndim, 1)
- sim.output_dft(thin_x_flux, os.path.join(self.temp_dir, 'thin-x-flux'))
- sim.output_dft(thin_y_flux, os.path.join(self.temp_dir, 'thin-y-flux'))
+ sim.output_dft(thin_x_flux, os.path.join(self.temp_dir, "thin-x-flux"))
+ sim.output_dft(thin_y_flux, os.path.join(self.temp_dir, "thin-y-flux"))
- with h5py.File(os.path.join(self.temp_dir, 'thin-x-flux.h5'), 'r') as thin_x:
- thin_x_h5 = mp.complexarray(thin_x['ez_0.r'][()], thin_x['ez_0.i'][()])
+ with h5py.File(os.path.join(self.temp_dir, "thin-x-flux.h5"), "r") as thin_x:
+ thin_x_h5 = mp.complexarray(thin_x["ez_0.r"][()], thin_x["ez_0.i"][()])
- with h5py.File(os.path.join(self.temp_dir, 'thin-y-flux.h5'), 'r') as thin_y:
- thin_y_h5 = mp.complexarray(thin_y['ez_0.r'][()], thin_y['ez_0.i'][()])
+ with h5py.File(os.path.join(self.temp_dir, "thin-y-flux.h5"), "r") as thin_y:
+ thin_y_h5 = mp.complexarray(thin_y["ez_0.r"][()], thin_y["ez_0.i"][()])
tol = 1e-6
self.assertClose(thin_x_array, thin_x_h5, epsilon=tol)
@@ -86,12 +96,14 @@ def test_get_dft_array(self):
fields_arr = sim.get_dft_array(dft_fields, mp.Ez, 0)
flux_arr = sim.get_dft_array(dft_flux, mp.Ez, 0)
- sim.output_dft(dft_fields, os.path.join(self.temp_dir, 'dft-fields'))
- sim.output_dft(dft_flux, os.path.join(self.temp_dir, 'dft-flux'))
+ sim.output_dft(dft_fields, os.path.join(self.temp_dir, "dft-fields"))
+ sim.output_dft(dft_flux, os.path.join(self.temp_dir, "dft-flux"))
- with h5py.File(os.path.join(self.temp_dir, 'dft-fields.h5'), 'r') as fields, h5py.File(os.path.join(self.temp_dir, 'dft-flux.h5'), 'r') as flux:
- exp_fields = mp.complexarray(fields['ez_0.r'][()], fields['ez_0.i'][()])
- exp_flux = mp.complexarray(flux['ez_0.r'][()], flux['ez_0.i'][()])
+ with h5py.File(
+ os.path.join(self.temp_dir, "dft-fields.h5"), "r"
+ ) as fields, h5py.File(os.path.join(self.temp_dir, "dft-flux.h5"), "r") as flux:
+ exp_fields = mp.complexarray(fields["ez_0.r"][()], fields["ez_0.i"][()])
+ exp_flux = mp.complexarray(flux["ez_0.r"][()], flux["ez_0.i"][()])
tol = 1e-6
self.assertClose(exp_fields, fields_arr, epsilon=tol)
@@ -100,13 +112,12 @@ def test_get_dft_array(self):
def test_decimated_dft_fields_are_almost_equal_to_undecimated_fields(self):
sim = self.init()
sim.init_sim()
- undecimated_field = sim.add_dft_fields([mp.Ez], self.fcen, 0, 1,
- decimation_factor=1)
- decimated_field = sim.add_dft_fields([mp.Ez],
- self.fcen,
- 0,
- 1,
- decimation_factor=4)
+ undecimated_field = sim.add_dft_fields(
+ [mp.Ez], self.fcen, 0, 1, decimation_factor=1
+ )
+ decimated_field = sim.add_dft_fields(
+ [mp.Ez], self.fcen, 0, 1, decimation_factor=4
+ )
sim.run(until_after_sources=100)
@@ -115,5 +126,5 @@ def test_decimated_dft_fields_are_almost_equal_to_undecimated_fields(self):
self.assertClose(expected_dft, actual_dft, epsilon=1e-3)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_diffracted_planewave.py b/python/tests/test_diffracted_planewave.py
index 7c0d8b3c0..0096eae22 100644
--- a/python/tests/test_diffracted_planewave.py
+++ b/python/tests/test_diffracted_planewave.py
@@ -10,139 +10,153 @@
# that the results are the same when using either a band number
# or `DiffractedPlanewave` object in `get_eigenmode_coefficients`.
-class TestDiffractedPlanewave(unittest.TestCase):
- @classmethod
- def setUp(cls):
- cls.resolution = 50 # pixels/um
- cls.dpml = 1.0 # PML thickness
- cls.dsub = 3.0 # substrate thickness
- cls.dpad = 3.0 # length of padding between grating and PML
-
- cls.wvl = 0.5 # center wavelength
- cls.fcen = 1/cls.wvl # center frequency
-
- cls.ng = 1.5
- cls.glass = mp.Medium(index=cls.ng)
-
- cls.pml_layers = [mp.PML(thickness=cls.dpml,direction=mp.X)]
-
-
- def run_binary_grating_diffraction(self,gp,gh,gdc,theta):
- sx = self.dpml+self.dsub+gh+self.dpad+self.dpml
- sy = gp
- cell_size = mp.Vector3(sx,sy,0)
-
- # rotation angle of incident planewave
- # counter clockwise (CCW) about Z axis, 0 degrees along +X axis
- theta_in = math.radians(theta)
-
- # k (in source medium) with correct length (plane of incidence: XY)
- k = mp.Vector3(self.fcen*self.ng).rotate(mp.Vector3(z=1), theta_in)
-
- eig_parity = mp.ODD_Z
- if theta == 0:
- k = mp.Vector3()
- eig_parity += mp.EVEN_Y
- symmetries = [mp.Mirror(direction=mp.Y)]
- else:
- symmetries = []
-
- def pw_amp(k,x0):
- def _pw_amp(x):
- return cmath.exp(1j*2*math.pi*k.dot(x+x0))
- return _pw_amp
-
- src_pt = mp.Vector3(-0.5*sx+self.dpml,0,0)
- sources = [mp.Source(mp.GaussianSource(self.fcen,fwidth=0.1*self.fcen),
- component=mp.Ez,
- center=src_pt,
- size=mp.Vector3(0,sy,0),
- amp_func=pw_amp(k,src_pt))]
-
- geometry = [mp.Block(material=self.glass,
- size=mp.Vector3(self.dpml+self.dsub,mp.inf,mp.inf),
- center=mp.Vector3(-0.5*sx+0.5*(self.dpml+self.dsub),0,0)),
- mp.Block(material=self.glass,
- size=mp.Vector3(gh,gdc*gp,mp.inf),
- center=mp.Vector3(-0.5*sx+self.dpml+self.dsub+0.5*gh,0,0))]
-
- sim = mp.Simulation(resolution=self.resolution,
- cell_size=cell_size,
- boundary_layers=self.pml_layers,
- geometry=geometry,
- k_point=k,
- sources=sources,
- symmetries=symmetries)
-
- tran_pt = mp.Vector3(0.5*sx-self.dpml,0,0)
- tran_flux = sim.add_mode_monitor(self.fcen,
- 0,
- 1,
- mp.FluxRegion(center=tran_pt,
- size=mp.Vector3(0,sy,0)))
-
- sim.run(until_after_sources=mp.stop_when_fields_decayed(20,mp.Ez,src_pt,1e-6))
-
- m_plus = int(np.floor((self.fcen-k.y)*gp))
- m_minus = int(np.ceil((-self.fcen-k.y)*gp))
-
- if theta == 0:
- orders = range(m_plus)
- else:
- # ordering of the modes computed by MPB is according to *decreasing*
- # values of kx (i.e., closest to propagation direction of 0° or +x)
- ms = range(m_minus,m_plus+1)
- kx = lambda m: np.power(self.fcen,2) - np.power(k.y+m/gp,2)
- kxs = [kx(m) for m in ms]
- ids = np.flip(np.argsort(kxs))
- orders = [ms[d] for d in ids]
-
- for band,order in enumerate(orders):
- res = sim.get_eigenmode_coefficients(tran_flux,
- [band+1],
- eig_parity=eig_parity)
- tran_ref = abs(res.alpha[0,0,0])**2
- if theta == 0:
- tran_ref = 0.5*tran_ref
- vg_ref = res.vgrp[0]
- kdom_ref = res.kdom[0]
-
- res = sim.get_eigenmode_coefficients(tran_flux,
- mp.DiffractedPlanewave((0,order,0),
- mp.Vector3(0,1,0),
- 1,
- 0))
- tran_dp = abs(res.alpha[0,0,0])**2
- if (theta == 0) and (order == 0):
- tran_dp = 0.5*tran_dp
- vg_dp = res.vgrp[0]
- kdom_dp = res.kdom[0]
-
- err = abs(tran_ref-tran_dp)/tran_ref
- print("tran:, {:2d} (band), {:2d} (order), "
- "{:10.8f} (band num.), {:10.8f} (diff. pw.), "
- "{:10.8f} (error)".format(band,order,tran_ref,tran_dp,err))
-
- self.assertAlmostEqual(vg_ref,vg_dp,places=4)
- self.assertAlmostEqual(tran_ref,tran_dp,places=4)
- if theta == 0:
- self.assertAlmostEqual(abs(kdom_ref.x),kdom_dp.x,places=5)
- self.assertAlmostEqual(abs(kdom_ref.y),kdom_dp.y,places=5)
- self.assertAlmostEqual(abs(kdom_ref.z),kdom_dp.z,places=5)
- else:
- self.assertAlmostEqual(kdom_ref.x,kdom_dp.x,places=5)
- self.assertAlmostEqual(kdom_ref.y,kdom_dp.y,places=5)
- self.assertAlmostEqual(kdom_ref.z,kdom_dp.z,places=5)
-
- print("PASSED.")
-
- def test_diffracted_planewave(self):
- self.run_binary_grating_diffraction(2.6,0.4,0.6,0)
- self.run_binary_grating_diffraction(2.6,0.4,0.6,13.4)
-
- # self.run_binary_grating_diffraction(10.0,0.5,0.5,0)
- # self.run_binary_grating_diffraction(10.0,0.5,0.5,10.7)
-
-if __name__ == '__main__':
- unittest.main()
+class TestDiffractedPlanewave(unittest.TestCase):
+ @classmethod
+ def setUp(cls):
+ cls.resolution = 50 # pixels/um
+ cls.dpml = 1.0 # PML thickness
+ cls.dsub = 3.0 # substrate thickness
+ cls.dpad = 3.0 # length of padding between grating and PML
+
+ cls.wvl = 0.5 # center wavelength
+ cls.fcen = 1 / cls.wvl # center frequency
+
+ cls.ng = 1.5
+ cls.glass = mp.Medium(index=cls.ng)
+
+ cls.pml_layers = [mp.PML(thickness=cls.dpml, direction=mp.X)]
+
+ def run_binary_grating_diffraction(self, gp, gh, gdc, theta):
+ sx = self.dpml + self.dsub + gh + self.dpad + self.dpml
+ sy = gp
+ cell_size = mp.Vector3(sx, sy, 0)
+
+ # rotation angle of incident planewave
+ # counter clockwise (CCW) about Z axis, 0 degrees along +X axis
+ theta_in = math.radians(theta)
+
+ # k (in source medium) with correct length (plane of incidence: XY)
+ k = mp.Vector3(self.fcen * self.ng).rotate(mp.Vector3(z=1), theta_in)
+
+ eig_parity = mp.ODD_Z
+ if theta == 0:
+ k = mp.Vector3()
+ eig_parity += mp.EVEN_Y
+ symmetries = [mp.Mirror(direction=mp.Y)]
+ else:
+ symmetries = []
+
+ def pw_amp(k, x0):
+ def _pw_amp(x):
+ return cmath.exp(1j * 2 * math.pi * k.dot(x + x0))
+
+ return _pw_amp
+
+ src_pt = mp.Vector3(-0.5 * sx + self.dpml, 0, 0)
+ sources = [
+ mp.Source(
+ mp.GaussianSource(self.fcen, fwidth=0.1 * self.fcen),
+ component=mp.Ez,
+ center=src_pt,
+ size=mp.Vector3(0, sy, 0),
+ amp_func=pw_amp(k, src_pt),
+ )
+ ]
+
+ geometry = [
+ mp.Block(
+ material=self.glass,
+ size=mp.Vector3(self.dpml + self.dsub, mp.inf, mp.inf),
+ center=mp.Vector3(-0.5 * sx + 0.5 * (self.dpml + self.dsub), 0, 0),
+ ),
+ mp.Block(
+ material=self.glass,
+ size=mp.Vector3(gh, gdc * gp, mp.inf),
+ center=mp.Vector3(-0.5 * sx + self.dpml + self.dsub + 0.5 * gh, 0, 0),
+ ),
+ ]
+
+ sim = mp.Simulation(
+ resolution=self.resolution,
+ cell_size=cell_size,
+ boundary_layers=self.pml_layers,
+ geometry=geometry,
+ k_point=k,
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ tran_pt = mp.Vector3(0.5 * sx - self.dpml, 0, 0)
+ tran_flux = sim.add_mode_monitor(
+ self.fcen, 0, 1, mp.FluxRegion(center=tran_pt, size=mp.Vector3(0, sy, 0))
+ )
+
+ sim.run(
+ until_after_sources=mp.stop_when_fields_decayed(20, mp.Ez, src_pt, 1e-6)
+ )
+
+ m_plus = int(np.floor((self.fcen - k.y) * gp))
+ m_minus = int(np.ceil((-self.fcen - k.y) * gp))
+
+ if theta == 0:
+ orders = range(m_plus)
+ else:
+ # ordering of the modes computed by MPB is according to *decreasing*
+ # values of kx (i.e., closest to propagation direction of 0° or +x)
+ ms = range(m_minus, m_plus + 1)
+ kx = lambda m: np.power(self.fcen, 2) - np.power(k.y + m / gp, 2)
+ kxs = [kx(m) for m in ms]
+ ids = np.flip(np.argsort(kxs))
+ orders = [ms[d] for d in ids]
+
+ for band, order in enumerate(orders):
+ res = sim.get_eigenmode_coefficients(
+ tran_flux, [band + 1], eig_parity=eig_parity
+ )
+ tran_ref = abs(res.alpha[0, 0, 0]) ** 2
+ if theta == 0:
+ tran_ref = 0.5 * tran_ref
+ vg_ref = res.vgrp[0]
+ kdom_ref = res.kdom[0]
+
+ res = sim.get_eigenmode_coefficients(
+ tran_flux,
+ mp.DiffractedPlanewave((0, order, 0), mp.Vector3(0, 1, 0), 1, 0),
+ )
+ tran_dp = abs(res.alpha[0, 0, 0]) ** 2
+ if (theta == 0) and (order == 0):
+ tran_dp = 0.5 * tran_dp
+ vg_dp = res.vgrp[0]
+ kdom_dp = res.kdom[0]
+
+ err = abs(tran_ref - tran_dp) / tran_ref
+ print(
+ "tran:, {:2d} (band), {:2d} (order), "
+ "{:10.8f} (band num.), {:10.8f} (diff. pw.), "
+ "{:10.8f} (error)".format(band, order, tran_ref, tran_dp, err)
+ )
+
+ self.assertAlmostEqual(vg_ref, vg_dp, places=4)
+ self.assertAlmostEqual(tran_ref, tran_dp, places=4)
+ if theta == 0:
+ self.assertAlmostEqual(abs(kdom_ref.x), kdom_dp.x, places=5)
+ self.assertAlmostEqual(abs(kdom_ref.y), kdom_dp.y, places=5)
+ self.assertAlmostEqual(abs(kdom_ref.z), kdom_dp.z, places=5)
+ else:
+ self.assertAlmostEqual(kdom_ref.x, kdom_dp.x, places=5)
+ self.assertAlmostEqual(kdom_ref.y, kdom_dp.y, places=5)
+ self.assertAlmostEqual(kdom_ref.z, kdom_dp.z, places=5)
+
+ print("PASSED.")
+
+ def test_diffracted_planewave(self):
+ self.run_binary_grating_diffraction(2.6, 0.4, 0.6, 0)
+ self.run_binary_grating_diffraction(2.6, 0.4, 0.6, 13.4)
+
+ # self.run_binary_grating_diffraction(10.0,0.5,0.5,0)
+ # self.run_binary_grating_diffraction(10.0,0.5,0.5,10.7)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/python/tests/test_dispersive_eigenmode.py b/python/tests/test_dispersive_eigenmode.py
index db9820ca0..ea5294f21 100644
--- a/python/tests/test_dispersive_eigenmode.py
+++ b/python/tests/test_dispersive_eigenmode.py
@@ -1,4 +1,3 @@
-
# dispersive_eigenmode.py - Tests the meep eigenmode features (eigenmode source,
# eigenmode decomposition, and get_eigenmode) with dispersive materials.
# TODO:
@@ -13,23 +12,24 @@
import h5py
import os
+
class TestDispersiveEigenmode(ApproxComparisonTestCase):
# ----------------------------------------- #
# ----------- Helper Functions ------------ #
# ----------------------------------------- #
# Directly cals the C++ chi1 routine
- def call_chi1(self,material,frequency):
+ def call_chi1(self, material, frequency):
- sim = mp.Simulation(cell_size=mp.Vector3(1,1,1),
- default_material=material,
- resolution=20)
+ sim = mp.Simulation(
+ cell_size=mp.Vector3(1, 1, 1), default_material=material, resolution=20
+ )
sim.init_sim()
- v3 = mp.py_v3_to_vec(sim.dimensions, mp.Vector3(0,0,0), sim.is_cylindrical)
- chi1inv = np.zeros((3,3),dtype=np.complex128)
- for i, com in enumerate([mp.Ex,mp.Ey,mp.Ez]):
- for k, dir in enumerate([mp.X,mp.Y,mp.Z]):
- chi1inv[i,k] = sim.structure.get_chi1inv(com,dir,v3,frequency)
+ v3 = mp.py_v3_to_vec(sim.dimensions, mp.Vector3(0, 0, 0), sim.is_cylindrical)
+ chi1inv = np.zeros((3, 3), dtype=np.complex128)
+ for i, com in enumerate([mp.Ex, mp.Ey, mp.Ez]):
+ for k, dir in enumerate([mp.X, mp.Y, mp.Z]):
+ chi1inv[i, k] = sim.structure.get_chi1inv(com, dir, v3, frequency)
n = np.real(np.sqrt(np.linalg.inv(chi1inv.astype(np.complex128))))
n_actual = np.real(np.sqrt(material.epsilon(frequency).astype(np.complex128)))
@@ -45,35 +45,38 @@ def setUpClass(cls):
def tearDownClass(cls):
mp.delete_directory(cls.temp_dir)
- def verify_output_and_slice(self,material,frequency):
+ def verify_output_and_slice(self, material, frequency):
# Since the slice routines average the diagonals, we need to do that too:
chi1 = material.epsilon(frequency).astype(np.complex128)
chi1inv = np.linalg.inv(chi1)
chi1inv = np.diag(chi1inv)
N = chi1inv.size
- n = np.sqrt(N/np.sum(chi1inv))
-
- sim = mp.Simulation(cell_size=mp.Vector3(2,2,2),
- default_material=material,
- resolution=20,
- eps_averaging=False
- )
+ n = np.sqrt(N / np.sum(chi1inv))
+
+ sim = mp.Simulation(
+ cell_size=mp.Vector3(2, 2, 2),
+ default_material=material,
+ resolution=20,
+ eps_averaging=False,
+ )
sim.use_output_directory(self.temp_dir)
sim.init_sim()
# Check to make sure the get_slice routine is working with frequency
- n_slice = np.sqrt(np.max(sim.get_epsilon(frequency=frequency,snap=True)))
- self.assertAlmostEqual(n,n_slice, places=4)
+ n_slice = np.sqrt(np.max(sim.get_epsilon(frequency=frequency, snap=True)))
+ self.assertAlmostEqual(n, n_slice, places=4)
# Check to make sure h5 output is working with frequency
- filename = os.path.join(self.temp_dir, f'{sim.get_filename_prefix()}-eps-000000.00.h5')
+ filename = os.path.join(
+ self.temp_dir, f"{sim.get_filename_prefix()}-eps-000000.00.h5"
+ )
- mp.output_epsilon(sim,frequency=frequency)
+ mp.output_epsilon(sim, frequency=frequency)
n_h5 = 0
mp.all_wait()
- with h5py.File(filename, 'r') as f:
- n_h5 = np.sqrt(np.max(mp.complexarray(f['eps.r'][()],f['eps.i'][()])))
- self.assertAlmostEqual(n,n_h5, places=4)
+ with h5py.File(filename, "r") as f:
+ n_h5 = np.sqrt(np.max(mp.complexarray(f["eps.r"][()], f["eps.i"][()])))
+ self.assertAlmostEqual(n, n_h5, places=4)
# ----------------------------------------- #
# ----------- Test Routines --------------- #
@@ -88,33 +91,34 @@ def test_chi1_routine(self):
# Check Silicon
w0 = Si.valid_freq_range.min
w1 = Si.valid_freq_range.max
- self.call_chi1(Si,w0)
- self.call_chi1(Si,w1)
+ self.call_chi1(Si, w0)
+ self.call_chi1(Si, w1)
# Check Silver
w0 = Ag.valid_freq_range.min
w1 = Ag.valid_freq_range.max
- self.call_chi1(Ag,w0)
- self.call_chi1(Ag,w1)
+ self.call_chi1(Ag, w0)
+ self.call_chi1(Ag, w1)
# Check Gold
w0 = Au.valid_freq_range.min
w1 = Au.valid_freq_range.max
- self.call_chi1(Au,w0)
- self.call_chi1(Au,w1)
+ self.call_chi1(Au, w0)
+ self.call_chi1(Au, w1)
# Check Lithium Niobate (X,X)
w0 = LiNbO3.valid_freq_range.min
w1 = LiNbO3.valid_freq_range.max
- self.call_chi1(LiNbO3,w0)
- self.call_chi1(LiNbO3,w1)
+ self.call_chi1(LiNbO3, w0)
+ self.call_chi1(LiNbO3, w1)
# Now let's rotate LN
import copy
+
rotLiNbO3 = copy.deepcopy(LiNbO3)
- rotLiNbO3.rotate(mp.Vector3(1,1,1),np.radians(34))
- self.call_chi1(rotLiNbO3,w0)
- self.call_chi1(rotLiNbO3,w1)
+ rotLiNbO3.rotate(mp.Vector3(1, 1, 1), np.radians(34))
+ self.call_chi1(rotLiNbO3, w0)
+ self.call_chi1(rotLiNbO3, w1)
def test_get_with_dispersion(self):
# Checks the get_array_slice and output_fields method
@@ -125,34 +129,35 @@ def test_get_with_dispersion(self):
# Check Silicon
w0 = Si.valid_freq_range.min
w1 = Si.valid_freq_range.max
- self.verify_output_and_slice(Si,w0)
- self.verify_output_and_slice(Si,w1)
+ self.verify_output_and_slice(Si, w0)
+ self.verify_output_and_slice(Si, w1)
# Check Silver
w0 = Ag.valid_freq_range.min
w1 = Ag.valid_freq_range.max
- self.verify_output_and_slice(Ag,w0)
- self.verify_output_and_slice(Ag,w1)
+ self.verify_output_and_slice(Ag, w0)
+ self.verify_output_and_slice(Ag, w1)
# Check Gold
w0 = Au.valid_freq_range.min
w1 = Au.valid_freq_range.max
- self.verify_output_and_slice(Au,w0)
- self.verify_output_and_slice(Au,w1)
+ self.verify_output_and_slice(Au, w0)
+ self.verify_output_and_slice(Au, w1)
# Check Lithium Niobate
w0 = LiNbO3.valid_freq_range.min
w1 = LiNbO3.valid_freq_range.max
- self.verify_output_and_slice(LiNbO3,w0)
- self.verify_output_and_slice(LiNbO3,w1)
+ self.verify_output_and_slice(LiNbO3, w0)
+ self.verify_output_and_slice(LiNbO3, w1)
# Now let's rotate LN
import copy
+
rotLiNbO3 = copy.deepcopy(LiNbO3)
- rotLiNbO3.rotate(mp.Vector3(1,1,1),np.radians(34))
- self.verify_output_and_slice(rotLiNbO3,w0)
- self.verify_output_and_slice(rotLiNbO3,w1)
+ rotLiNbO3.rotate(mp.Vector3(1, 1, 1), np.radians(34))
+ self.verify_output_and_slice(rotLiNbO3, w0)
+ self.verify_output_and_slice(rotLiNbO3, w1)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_divide_mpi_processes.py b/python/tests/test_divide_mpi_processes.py
index 7a46ab8e8..e0312fffa 100644
--- a/python/tests/test_divide_mpi_processes.py
+++ b/python/tests/test_divide_mpi_processes.py
@@ -1,55 +1,63 @@
import unittest
import meep as mp
+
@unittest.skipIf(mp.count_processors() < 2, "MPI specific test")
class TestDivideParallelProcesses(unittest.TestCase):
-
- def test_divide_parallel_processes(self):
+ def test_divide_parallel_processes(self):
resolution = 20
sxy = 4
dpml = 1
- cell = mp.Vector3(sxy+2*dpml,sxy+2*dpml)
+ cell = mp.Vector3(sxy + 2 * dpml, sxy + 2 * dpml)
pml_layers = [mp.PML(dpml)]
n = mp.divide_parallel_processes(2)
- fcen = 1.0/(n+1)
-
- sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),
- center=mp.Vector3(),
- component=mp.Ez)]
-
- symmetries = [mp.Mirror(mp.X),
- mp.Mirror(mp.Y)]
-
- self.sim = mp.Simulation(cell_size=cell,
- resolution=resolution,
- sources=sources,
- symmetries=symmetries,
- boundary_layers=pml_layers)
-
-
- flux_box = self.sim.add_flux(fcen, 0, 1,
- mp.FluxRegion(mp.Vector3(y=0.5*sxy), size=mp.Vector3(sxy)),
- mp.FluxRegion(mp.Vector3(y=-0.5*sxy), size=mp.Vector3(sxy), weight=-1),
- mp.FluxRegion(mp.Vector3(0.5*sxy), size=mp.Vector3(y=sxy)),
- mp.FluxRegion(mp.Vector3(-0.5*sxy), size=mp.Vector3(y=sxy), weight=-1),
- decimation_factor=1)
+ fcen = 1.0 / (n + 1)
+
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ center=mp.Vector3(),
+ component=mp.Ez,
+ )
+ ]
+
+ symmetries = [mp.Mirror(mp.X), mp.Mirror(mp.Y)]
+
+ self.sim = mp.Simulation(
+ cell_size=cell,
+ resolution=resolution,
+ sources=sources,
+ symmetries=symmetries,
+ boundary_layers=pml_layers,
+ )
+
+ flux_box = self.sim.add_flux(
+ fcen,
+ 0,
+ 1,
+ mp.FluxRegion(mp.Vector3(y=0.5 * sxy), size=mp.Vector3(sxy)),
+ mp.FluxRegion(mp.Vector3(y=-0.5 * sxy), size=mp.Vector3(sxy), weight=-1),
+ mp.FluxRegion(mp.Vector3(0.5 * sxy), size=mp.Vector3(y=sxy)),
+ mp.FluxRegion(mp.Vector3(-0.5 * sxy), size=mp.Vector3(y=sxy), weight=-1),
+ decimation_factor=1,
+ )
self.sim.run(until_after_sources=30)
tot_flux = mp.get_fluxes(flux_box)[0]
tot_fluxes = mp.merge_subgroup_data(tot_flux)
- fcens = mp.merge_subgroup_data(fcen)
+ fcens = mp.merge_subgroup_data(fcen)
- self.assertEqual(fcens[0],1)
- self.assertEqual(fcens[1],0.5)
+ self.assertEqual(fcens[0], 1)
+ self.assertEqual(fcens[1], 0.5)
places = 4 if mp.is_single_precision() else 7
self.assertAlmostEqual(tot_fluxes[0], 9.8628728533, places=places)
self.assertAlmostEqual(tot_fluxes[1], 19.6537275387, places=places)
-
-if __name__ == '__main__':
- unittest.main()
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/python/tests/test_dump_load.py b/python/tests/test_dump_load.py
index 223c98ea6..3fd66c7f1 100644
--- a/python/tests/test_dump_load.py
+++ b/python/tests/test_dump_load.py
@@ -17,8 +17,8 @@
class TestLoadDump(ApproxComparisonTestCase):
- fname_base = re.sub(r'\.py$', '', os.path.split(sys.argv[0])[1])
- fname = fname_base + '-ez-000200.00.h5'
+ fname_base = re.sub(r"\.py$", "", os.path.split(sys.argv[0])[1])
+ fname = fname_base + "-ez-000200.00.h5"
def setUp(self):
print(f"Running {self._testMethodName}")
@@ -33,24 +33,35 @@ def tearDownClass(cls):
mp.delete_directory(cls.temp_dir)
# Tests various combinations of dumping/loading structure & chunk layout in 2d.
- def _load_dump_structure_2d(self, chunk_file=False, chunk_sim=False, single_parallel_file=True):
+ def _load_dump_structure_2d(
+ self, chunk_file=False, chunk_sim=False, single_parallel_file=True
+ ):
from meep.materials import Al
+
resolution = 50
cell = mp.Vector3(5, 5)
- sources = mp.Source(src=mp.GaussianSource(1, fwidth=0.2), center=mp.Vector3(), component=mp.Ez)
+ sources = mp.Source(
+ src=mp.GaussianSource(1, fwidth=0.2), center=mp.Vector3(), component=mp.Ez
+ )
one_by_one = mp.Vector3(1, 1, mp.inf)
- geometry = [mp.Block(material=Al, center=mp.Vector3(), size=one_by_one),
- mp.Block(material=mp.Medium(epsilon=13), center=mp.Vector3(1), size=one_by_one)]
+ geometry = [
+ mp.Block(material=Al, center=mp.Vector3(), size=one_by_one),
+ mp.Block(
+ material=mp.Medium(epsilon=13), center=mp.Vector3(1), size=one_by_one
+ ),
+ ]
pml_layers = [mp.PML(0.5)]
symmetries = [mp.Mirror(mp.Y)]
- sim1 = mp.Simulation(resolution=resolution,
- cell_size=cell,
- boundary_layers=pml_layers,
- geometry=geometry,
- symmetries=symmetries,
- sources=[sources])
+ sim1 = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ symmetries=symmetries,
+ sources=[sources],
+ )
sample_point = mp.Vector3(0.12, -0.29)
ref_field_points = []
@@ -61,25 +72,37 @@ def get_ref_field_point(sim):
sim1.run(mp.at_every(5, get_ref_field_point), until=50)
- dump_dirname = os.path.join(self.temp_dir, 'test_load_dump_structure')
- sim1.dump(dump_dirname, dump_structure=True, dump_fields=False, single_parallel_file=single_parallel_file)
+ dump_dirname = os.path.join(self.temp_dir, "test_load_dump_structure")
+ sim1.dump(
+ dump_dirname,
+ dump_structure=True,
+ dump_fields=False,
+ single_parallel_file=single_parallel_file,
+ )
dump_chunk_fname = None
chunk_layout = None
if chunk_file:
- dump_chunk_fname = os.path.join(dump_dirname, 'chunk_layout.h5')
+ dump_chunk_fname = os.path.join(dump_dirname, "chunk_layout.h5")
sim1.dump_chunk_layout(dump_chunk_fname)
chunk_layout = dump_chunk_fname
if chunk_sim:
chunk_layout = sim1
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell,
- boundary_layers=pml_layers,
- sources=[sources],
- symmetries=symmetries,
- chunk_layout=chunk_layout)
- sim.load(dump_dirname, load_structure=True, load_fields=False, single_parallel_file=single_parallel_file)
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell,
+ boundary_layers=pml_layers,
+ sources=[sources],
+ symmetries=symmetries,
+ chunk_layout=chunk_layout,
+ )
+ sim.load(
+ dump_dirname,
+ load_structure=True,
+ load_fields=False,
+ single_parallel_file=single_parallel_file,
+ )
field_points = []
def get_field_point(sim):
@@ -105,25 +128,38 @@ def test_load_dump_chunk_layout_sim_2d(self):
self._load_dump_structure_2d(chunk_sim=True)
# Tests various combinations of dumping/loading structure & chunk layout in 3d.
- def _load_dump_structure_3d(self, chunk_file=False, chunk_sim=False, single_parallel_file=True):
+ def _load_dump_structure_3d(
+ self, chunk_file=False, chunk_sim=False, single_parallel_file=True
+ ):
from meep.materials import aSi
+
resolution = 15
cell = mp.Vector3(2.3, 2.1, 2.7)
- sources = mp.Source(src=mp.GaussianSource(2.5, fwidth=0.1), center=mp.Vector3(), component=mp.Hy)
+ sources = mp.Source(
+ src=mp.GaussianSource(2.5, fwidth=0.1), center=mp.Vector3(), component=mp.Hy
+ )
one_by_one_by_one = mp.Vector3(1, 1, 1)
- geometry = [mp.Block(material=mp.Medium(index=2.3), center=mp.Vector3(), size=one_by_one_by_one),
- mp.Block(material=aSi, center=mp.Vector3(1), size=one_by_one_by_one)]
+ geometry = [
+ mp.Block(
+ material=mp.Medium(index=2.3),
+ center=mp.Vector3(),
+ size=one_by_one_by_one,
+ ),
+ mp.Block(material=aSi, center=mp.Vector3(1), size=one_by_one_by_one),
+ ]
default_material = mp.Medium(index=1.4)
boundary_layers = [mp.Absorber(0.2)]
k_point = mp.Vector3(0.4, -1.3, 0.7)
- sim1 = mp.Simulation(resolution=resolution,
- cell_size=cell,
- k_point=k_point,
- geometry=geometry,
- boundary_layers=boundary_layers,
- default_material=default_material,
- sources=[sources])
+ sim1 = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell,
+ k_point=k_point,
+ geometry=geometry,
+ boundary_layers=boundary_layers,
+ default_material=default_material,
+ sources=[sources],
+ )
sample_point = mp.Vector3(0.73, -0.33, 0.61)
ref_field_points = []
@@ -134,25 +170,37 @@ def get_ref_field_point(sim):
sim1.run(mp.at_every(5, get_ref_field_point), until=50)
- dump_dirname = os.path.join(self.temp_dir, 'test_load_dump_structure')
- sim1.dump(dump_dirname, dump_structure=True, dump_fields=False, single_parallel_file=single_parallel_file)
+ dump_dirname = os.path.join(self.temp_dir, "test_load_dump_structure")
+ sim1.dump(
+ dump_dirname,
+ dump_structure=True,
+ dump_fields=False,
+ single_parallel_file=single_parallel_file,
+ )
dump_chunk_fname = None
chunk_layout = None
if chunk_file:
- dump_chunk_fname = os.path.join(dump_dirname, 'chunk_layout.h5')
+ dump_chunk_fname = os.path.join(dump_dirname, "chunk_layout.h5")
sim1.dump_chunk_layout(dump_chunk_fname)
chunk_layout = dump_chunk_fname
if chunk_sim:
chunk_layout = sim1
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell,
- sources=[sources],
- k_point=k_point,
- boundary_layers=boundary_layers,
- chunk_layout=chunk_layout)
- sim.load(dump_dirname, load_structure=True, load_fields=False, single_parallel_file=single_parallel_file)
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell,
+ sources=[sources],
+ k_point=k_point,
+ boundary_layers=boundary_layers,
+ chunk_layout=chunk_layout,
+ )
+ sim.load(
+ dump_dirname,
+ load_structure=True,
+ load_fields=False,
+ single_parallel_file=single_parallel_file,
+ )
field_points = []
def get_field_point(sim):
@@ -181,68 +229,103 @@ def test_load_dump_chunk_layout_sim_3d(self):
def _load_dump_fields_2d(self, single_parallel_file=True):
resolution = 50
cell = mp.Vector3(5, 5)
- sources = mp.Source(src=mp.GaussianSource(1, fwidth=0.4), center=mp.Vector3(), component=mp.Ez)
+ sources = mp.Source(
+ src=mp.GaussianSource(1, fwidth=0.4), center=mp.Vector3(), component=mp.Ez
+ )
one_by_one = mp.Vector3(1, 1, mp.inf)
- geometry = [mp.Block(material=mp.Medium(index=3.2), center=mp.Vector3(), size=one_by_one),
- mp.Block(material=mp.Medium(epsilon=13), center=mp.Vector3(1), size=one_by_one)]
+ geometry = [
+ mp.Block(
+ material=mp.Medium(index=3.2), center=mp.Vector3(), size=one_by_one
+ ),
+ mp.Block(
+ material=mp.Medium(epsilon=13), center=mp.Vector3(1), size=one_by_one
+ ),
+ ]
pml_layers = [mp.PML(0.5)]
symmetries = [mp.Mirror(mp.Y)]
- sim1 = mp.Simulation(resolution=resolution,
- cell_size=cell,
- boundary_layers=pml_layers,
- geometry=geometry,
- symmetries=symmetries,
- sources=[sources])
-
- mon_dft = sim1.add_dft_fields([mp.Ez],
- 1.1, 0.1, 3,
- center=mp.Vector3(1.2,0.4),
- size=mp.Vector3(1.5,0.3),
- yee_grid=True)
+ sim1 = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ symmetries=symmetries,
+ sources=[sources],
+ )
+
+ mon_dft = sim1.add_dft_fields(
+ [mp.Ez],
+ 1.1,
+ 0.1,
+ 3,
+ center=mp.Vector3(1.2, 0.4),
+ size=mp.Vector3(1.5, 0.3),
+ yee_grid=True,
+ )
sample_point = mp.Vector3(0.12, -0.29)
- dump_dirname = os.path.join(self.temp_dir, 'test_load_dump_fields')
+ dump_dirname = os.path.join(self.temp_dir, "test_load_dump_fields")
os.makedirs(dump_dirname, exist_ok=True)
ref_field_points = {}
+
def get_ref_field_point(sim):
p = sim.get_field_point(mp.Ez, sample_point)
ref_field_points[sim.meep_time()] = p.real
# First run until t=15 and save structure/fields
sim1.run(mp.at_every(1, get_ref_field_point), until=15)
- sim1.dump(dump_dirname, dump_structure=True, dump_fields=True, single_parallel_file=single_parallel_file)
-
+ sim1.dump(
+ dump_dirname,
+ dump_structure=True,
+ dump_fields=True,
+ single_parallel_file=single_parallel_file,
+ )
# Then continue running another 5 until t=20
sim1.run(mp.at_every(1, get_ref_field_point), until=5)
sim1_mon_dft = sim1.get_dft_array(mon_dft, mp.Ez, 2)
# Now create a new simulation and try restoring state.
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell,
- boundary_layers=pml_layers,
- sources=[sources],
- symmetries=symmetries,
- chunk_layout=sim1)
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell,
+ boundary_layers=pml_layers,
+ sources=[sources],
+ symmetries=symmetries,
+ chunk_layout=sim1,
+ )
# Just restore structure first.
- sim.load(dump_dirname, load_structure=True, load_fields=False, single_parallel_file=single_parallel_file)
+ sim.load(
+ dump_dirname,
+ load_structure=True,
+ load_fields=False,
+ single_parallel_file=single_parallel_file,
+ )
field_points = {}
- mon_dft = sim.add_dft_fields([mp.Ez],
- 1.1, 0.1, 3,
- center=mp.Vector3(1.2,0.4),
- size=mp.Vector3(1.5,0.3),
- yee_grid=True)
+ mon_dft = sim.add_dft_fields(
+ [mp.Ez],
+ 1.1,
+ 0.1,
+ 3,
+ center=mp.Vector3(1.2, 0.4),
+ size=mp.Vector3(1.5, 0.3),
+ yee_grid=True,
+ )
def get_field_point(sim):
p = sim.get_field_point(mp.Ez, sample_point)
field_points[sim.meep_time()] = p.real
# Now load the fields (at t=15) and then continue to t=20
- sim.load(dump_dirname, load_structure=False, load_fields=True, single_parallel_file=single_parallel_file)
+ sim.load(
+ dump_dirname,
+ load_structure=False,
+ load_fields=True,
+ single_parallel_file=single_parallel_file,
+ )
sim.run(mp.at_every(1, get_field_point), until=5)
for t, v in field_points.items():
@@ -262,68 +345,107 @@ def test_load_dump_fields_sharded_2d(self):
def _load_dump_fields_3d(self, single_parallel_file=True):
resolution = 15
cell = mp.Vector3(2.6, 2.2, 2.3)
- sources = mp.Source(src=mp.GaussianSource(1, fwidth=0.4), center=mp.Vector3(), component=mp.Hx)
+ sources = mp.Source(
+ src=mp.GaussianSource(1, fwidth=0.4), center=mp.Vector3(), component=mp.Hx
+ )
one_by_one_by_one = mp.Vector3(1, 1, 1)
- geometry = [mp.Block(material=mp.Medium(index=2.4), center=mp.Vector3(), size=one_by_one_by_one),
- mp.Block(material=mp.Medium(epsilon=7.9), center=mp.Vector3(1), size=one_by_one_by_one)]
+ geometry = [
+ mp.Block(
+ material=mp.Medium(index=2.4),
+ center=mp.Vector3(),
+ size=one_by_one_by_one,
+ ),
+ mp.Block(
+ material=mp.Medium(epsilon=7.9),
+ center=mp.Vector3(1),
+ size=one_by_one_by_one,
+ ),
+ ]
pml_layers = [mp.PML(0.5)]
- symmetries = [mp.Mirror(mp.Y,phase=-1),mp.Mirror(mp.Z,phase=-1)]
-
- sim1 = mp.Simulation(resolution=resolution,
- cell_size=cell,
- boundary_layers=pml_layers,
- geometry=geometry,
- symmetries=symmetries,
- sources=[sources])
-
- mon_dft = sim1.add_dft_fields([mp.Hx],
- 0.9, 0.05, 4,
- center=mp.Vector3(0.5,0.4,0.2),
- size=mp.Vector3(1.5,0.3,0.2),
- yee_grid=True)
+ symmetries = [mp.Mirror(mp.Y, phase=-1), mp.Mirror(mp.Z, phase=-1)]
+
+ sim1 = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ symmetries=symmetries,
+ sources=[sources],
+ )
+
+ mon_dft = sim1.add_dft_fields(
+ [mp.Hx],
+ 0.9,
+ 0.05,
+ 4,
+ center=mp.Vector3(0.5, 0.4, 0.2),
+ size=mp.Vector3(1.5, 0.3, 0.2),
+ yee_grid=True,
+ )
sample_point = mp.Vector3(0.37, -0.42, 0.55)
- dump_dirname = os.path.join(self.temp_dir, 'test_load_dump_fields')
+ dump_dirname = os.path.join(self.temp_dir, "test_load_dump_fields")
os.makedirs(dump_dirname, exist_ok=True)
ref_field_points = {}
+
def get_ref_field_point(sim):
p = sim.get_field_point(mp.Hx, sample_point)
ref_field_points[sim.meep_time()] = p.real
# First run until t=15 and save structure/fields
sim1.run(mp.at_every(1, get_ref_field_point), until=15)
- sim1.dump(dump_dirname, dump_structure=True, dump_fields=True, single_parallel_file=single_parallel_file)
-
+ sim1.dump(
+ dump_dirname,
+ dump_structure=True,
+ dump_fields=True,
+ single_parallel_file=single_parallel_file,
+ )
# Then continue running another 5 until t=20
sim1.run(mp.at_every(1, get_ref_field_point), until=5)
sim1_mon_dft = sim1.get_dft_array(mon_dft, mp.Hx, 3)
# Now create a new simulation and try restoring state.
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell,
- boundary_layers=pml_layers,
- sources=[sources],
- symmetries=symmetries,
- chunk_layout=sim1)
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell,
+ boundary_layers=pml_layers,
+ sources=[sources],
+ symmetries=symmetries,
+ chunk_layout=sim1,
+ )
# Just restore structure first.
- sim.load(dump_dirname, load_structure=True, load_fields=False, single_parallel_file=single_parallel_file)
+ sim.load(
+ dump_dirname,
+ load_structure=True,
+ load_fields=False,
+ single_parallel_file=single_parallel_file,
+ )
field_points = {}
- mon_dft = sim.add_dft_fields([mp.Hx],
- 0.9, 0.05, 4,
- center=mp.Vector3(0.5,0.4,0.2),
- size=mp.Vector3(1.5,0.3,0.2),
- yee_grid=True)
+ mon_dft = sim.add_dft_fields(
+ [mp.Hx],
+ 0.9,
+ 0.05,
+ 4,
+ center=mp.Vector3(0.5, 0.4, 0.2),
+ size=mp.Vector3(1.5, 0.3, 0.2),
+ yee_grid=True,
+ )
def get_field_point(sim):
p = sim.get_field_point(mp.Hx, sample_point)
field_points[sim.meep_time()] = p.real
# Now load the fields (at t=15) and then continue to t=20
- sim.load(dump_dirname, load_structure=False, load_fields=True, single_parallel_file=single_parallel_file)
+ sim.load(
+ dump_dirname,
+ load_structure=False,
+ load_fields=True,
+ single_parallel_file=single_parallel_file,
+ )
sim.run(mp.at_every(1, get_field_point), until=5)
for t, v in field_points.items():
@@ -345,27 +467,39 @@ def test_load_dump_fields_sharded_3d(self):
def test_dump_fails_for_non_null_polarization_state(self):
resolution = 50
cell = mp.Vector3(5, 5)
- sources = mp.Source(src=mp.GaussianSource(1, fwidth=0.4), center=mp.Vector3(), component=mp.Ez)
+ sources = mp.Source(
+ src=mp.GaussianSource(1, fwidth=0.4), center=mp.Vector3(), component=mp.Ez
+ )
one_by_one = mp.Vector3(1, 1, mp.inf)
from meep.materials import Al
- geometry = [mp.Block(material=Al, center=mp.Vector3(), size=one_by_one),
- mp.Block(material=mp.Medium(epsilon=13), center=mp.Vector3(1), size=one_by_one)]
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell,
- boundary_layers=[],
- geometry=geometry,
- symmetries=[],
- sources=[sources])
-
- dump_dirname = os.path.join(self.temp_dir, 'test_load_dump_fields')
+ geometry = [
+ mp.Block(material=Al, center=mp.Vector3(), size=one_by_one),
+ mp.Block(
+ material=mp.Medium(epsilon=13), center=mp.Vector3(1), size=one_by_one
+ ),
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell,
+ boundary_layers=[],
+ geometry=geometry,
+ symmetries=[],
+ sources=[sources],
+ )
+
+ dump_dirname = os.path.join(self.temp_dir, "test_load_dump_fields")
os.makedirs(dump_dirname, exist_ok=True)
sim.run(until=1)
# NOTE: We do not yet support checkpoint/restore when there is a
# non-null polarization_state
- with self.assertRaisesRegex(RuntimeError, 'meep: non-null polarization_state in fields::dump'):
- sim.dump(dump_dirname, dump_structure=True, dump_fields=True)
+ with self.assertRaisesRegex(
+ RuntimeError, "meep: non-null polarization_state in fields::dump"
+ ):
+ sim.dump(dump_dirname, dump_structure=True, dump_fields=True)
+
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_eigfreq.py b/python/tests/test_eigfreq.py
index f73fe73ba..b0f3a7041 100644
--- a/python/tests/test_eigfreq.py
+++ b/python/tests/test_eigfreq.py
@@ -1,42 +1,54 @@
import meep as mp
import unittest
-class TestEigfreq(unittest.TestCase):
- @unittest.skipIf(mp.is_single_precision(), "double-precision floating point specific test")
+class TestEigfreq(unittest.TestCase):
+ @unittest.skipIf(
+ mp.is_single_precision(), "double-precision floating point specific test"
+ )
def test_eigfreq(self):
- w = 1.2 # width of waveguide
- r = 0.36 # radius of holes
- d = 1.4 # defect spacing (ordinary spacing = 1)
- N = 3 # number of holes on either side of defect
- sy = 6 # size of cell in y direction (perpendicular to wvg.)
- pad = 2 # padding between last hole and PML edge
- dpml = 1 # PML thickness
- sx = 2*(pad+dpml+N)+d-1 # size of cell in x direction
-
- geometry = [mp.Block(size=mp.Vector3(mp.inf,w,mp.inf), material=mp.Medium(epsilon=13))]
+ w = 1.2 # width of waveguide
+ r = 0.36 # radius of holes
+ d = 1.4 # defect spacing (ordinary spacing = 1)
+ N = 3 # number of holes on either side of defect
+ sy = 6 # size of cell in y direction (perpendicular to wvg.)
+ pad = 2 # padding between last hole and PML edge
+ dpml = 1 # PML thickness
+ sx = 2 * (pad + dpml + N) + d - 1 # size of cell in x direction
+
+ geometry = [
+ mp.Block(size=mp.Vector3(mp.inf, w, mp.inf), material=mp.Medium(epsilon=13))
+ ]
for i in range(N):
- geometry.append(mp.Cylinder(r, center=mp.Vector3(d/2+i)))
- geometry.append(mp.Cylinder(r, center=mp.Vector3(-(d/2+i))))
+ geometry.append(mp.Cylinder(r, center=mp.Vector3(d / 2 + i)))
+ geometry.append(mp.Cylinder(r, center=mp.Vector3(-(d / 2 + i))))
fcen = 0.25
df = 0.2
- src = [mp.Source(mp.GaussianSource(fcen, fwidth=df),
- component=mp.Hz,
- center=mp.Vector3(0),
- size=mp.Vector3(0,0))]
-
- sim = mp.Simulation(cell_size=mp.Vector3(sx,sy), force_complex_fields=True,
- geometry=geometry,
- boundary_layers=[mp.PML(1.0)],
- sources=src,
- symmetries=[mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=-1)],
- resolution=20)
+ src = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Hz,
+ center=mp.Vector3(0),
+ size=mp.Vector3(0, 0),
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=mp.Vector3(sx, sy),
+ force_complex_fields=True,
+ geometry=geometry,
+ boundary_layers=[mp.PML(1.0)],
+ sources=src,
+ symmetries=[mp.Mirror(mp.X, phase=-1), mp.Mirror(mp.Y, phase=-1)],
+ resolution=20,
+ )
sim.init_sim()
eigfreq = sim.solve_eigfreq(tol=1e-6)
self.assertAlmostEqual(eigfreq.real, 0.23445413142440263, places=5)
self.assertAlmostEqual(eigfreq.imag, -0.0003147775697388, places=5)
-if __name__ == '__main__':
+
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_faraday_rotation.py b/python/tests/test_faraday_rotation.py
index 7c0f337a2..d1c610a8a 100644
--- a/python/tests/test_faraday_rotation.py
+++ b/python/tests/test_faraday_rotation.py
@@ -4,40 +4,55 @@
## Farady rotation rate for gyrotropic Lorentzian medium
def kgyro_lorentzian(freq, epsn, f0, gamma, sigma, b0):
- dfsq = (f0**2 - 1j*freq*gamma - freq**2)
- eperp = epsn + sigma * f0**2 * dfsq / (dfsq**2 - (freq*b0)**2)
- eta = sigma * f0**2 * freq * b0 / (dfsq**2 - (freq*b0)**2)
- return 2*np.pi*freq * np.sqrt(0.5*(eperp - np.sqrt(eperp**2 - eta**2)))
+ dfsq = f0**2 - 1j * freq * gamma - freq**2
+ eperp = epsn + sigma * f0**2 * dfsq / (dfsq**2 - (freq * b0) ** 2)
+ eta = sigma * f0**2 * freq * b0 / (dfsq**2 - (freq * b0) ** 2)
+ return 2 * np.pi * freq * np.sqrt(0.5 * (eperp - np.sqrt(eperp**2 - eta**2)))
+
## Farady rotation rate for gyrotropic Drude medium
def kgyro_drude(freq, epsn, f0, gamma, sigma, b0):
- dfsq = - 1j*freq*gamma - freq**2
- eperp = epsn + sigma * f0**2 * dfsq / (dfsq**2 - (freq*b0)**2)
- eta = sigma * f0**2 * freq * b0 / (dfsq**2 - (freq*b0)**2)
- return 2*np.pi*freq * np.sqrt(0.5*(eperp - np.sqrt(eperp**2 - eta**2)))
+ dfsq = -1j * freq * gamma - freq**2
+ eperp = epsn + sigma * f0**2 * dfsq / (dfsq**2 - (freq * b0) ** 2)
+ eta = sigma * f0**2 * freq * b0 / (dfsq**2 - (freq * b0) ** 2)
+ return 2 * np.pi * freq * np.sqrt(0.5 * (eperp - np.sqrt(eperp**2 - eta**2)))
+
## Farady rotation rate for Landau-Lifshitz-Gilbert medium
def kgyro_llg(freq, epsn, f0, gamma, sigma, alpha):
- df1 = f0 - 1j*freq*alpha
- df2 = freq + 1j*gamma
- eperp = epsn + sigma * df1/(df1**2 - df2**2)
+ df1 = f0 - 1j * freq * alpha
+ df2 = freq + 1j * gamma
+ eperp = epsn + sigma * df1 / (df1**2 - df2**2)
eta = sigma * df2 / (df1**2 - df2**2)
- return 2*np.pi*freq * np.sqrt(0.5*(eperp - np.sqrt(eperp**2 - eta**2)))
+ return 2 * np.pi * freq * np.sqrt(0.5 * (eperp - np.sqrt(eperp**2 - eta**2)))
+
class TestFaradayRotation(unittest.TestCase):
## Simulate a linearly polarized plane wave traveling along the gyrotropy axis.
## Extract Faraday rotation angle by comparing the Ex and Ey amplitudes, and
## compare to a theoretical result corresponding to rotation rate KPRED.
## The default acceptable tolerance TOL is 1.5 degrees.
- def check_rotation(self, mat, L, fsrc, zsrc, resolution, tmax, zout, kpred, tol=1.5):
+ def check_rotation(
+ self, mat, L, fsrc, zsrc, resolution, tmax, zout, kpred, tol=1.5
+ ):
cell = mp.Vector3(0, 0, L)
pml_layers = [mp.PML(thickness=1.0, direction=mp.Z)]
- sources = [mp.Source(mp.ContinuousSource(frequency=fsrc),
- component=mp.Ex, center=mp.Vector3(0, 0, zsrc))]
-
- self.sim = mp.Simulation(cell_size=cell, geometry=[], sources=sources,
- boundary_layers=pml_layers,
- default_material=mat, resolution=resolution)
+ sources = [
+ mp.Source(
+ mp.ContinuousSource(frequency=fsrc),
+ component=mp.Ex,
+ center=mp.Vector3(0, 0, zsrc),
+ )
+ ]
+
+ self.sim = mp.Simulation(
+ cell_size=cell,
+ geometry=[],
+ sources=sources,
+ boundary_layers=pml_layers,
+ default_material=mat,
+ resolution=resolution,
+ )
record_Ex, record_Ey, record_t = [], [], []
@@ -46,15 +61,17 @@ def record_ex_ey(sim):
record_Ey.append(sim.get_field_point(mp.Ey, mp.Vector3(0, 0, zout)))
record_t.append(sim.meep_time())
- self.sim.run(mp.after_time(0.5*tmax, mp.at_every(1e-6, record_ex_ey)), until=tmax)
+ self.sim.run(
+ mp.after_time(0.5 * tmax, mp.at_every(1e-6, record_ex_ey)), until=tmax
+ )
ex_rel = np.amax(abs(np.fft.fft(record_Ex)))
ey_rel = np.amax(abs(np.fft.fft(record_Ey)))
- result = np.arctan2(ey_rel, ex_rel) * 180/np.pi
+ result = np.arctan2(ey_rel, ex_rel) * 180 / np.pi
Ex_theory = np.abs(np.cos(kpred * (zout - zsrc)).real)
Ey_theory = np.abs(np.sin(kpred * (zout - zsrc)).real)
- expected = np.arctan2(Ey_theory, Ex_theory) * 180/np.pi
+ expected = np.arctan2(Ey_theory, Ex_theory) * 180 / np.pi
print("Rotation angle (in degrees): {}, expected {}\n".format(result, expected))
np.testing.assert_allclose(expected, result, atol=tol)
@@ -65,34 +82,47 @@ def test_faraday_rotation(self):
resolution = 24
## Test gyrotropic Lorentzian medium
- epsn, f0, gamma, sn, b0 = 1.5, 1.0, 1e-3, 0.1, 0.15
- susc = [mp.GyrotropicLorentzianSusceptibility(frequency=f0, gamma=gamma, sigma=sn,
- bias=mp.Vector3(0, 0, b0))]
+ epsn, f0, gamma, sn, b0 = 1.5, 1.0, 1e-3, 0.1, 0.15
+ susc = [
+ mp.GyrotropicLorentzianSusceptibility(
+ frequency=f0, gamma=gamma, sigma=sn, bias=mp.Vector3(0, 0, b0)
+ )
+ ]
mat = mp.Medium(epsilon=epsn, mu=1, E_susceptibilities=susc)
k = kgyro_lorentzian(freq, epsn, f0, gamma, sn, b0)
- print('=' * 24)
+ print("=" * 24)
print("Testing Faraday rotation for gyrotropic Lorentzian model...")
self.check_rotation(mat, L, freq, zsrc, resolution, tmax, zout, k)
## Test gyrotropic Drude medium
- susc = [mp.GyrotropicDrudeSusceptibility(frequency=f0, gamma=gamma, sigma=sn,
- bias=mp.Vector3(0, 0, b0))]
+ susc = [
+ mp.GyrotropicDrudeSusceptibility(
+ frequency=f0, gamma=gamma, sigma=sn, bias=mp.Vector3(0, 0, b0)
+ )
+ ]
mat = mp.Medium(epsilon=epsn, mu=1, E_susceptibilities=susc)
k = kgyro_drude(freq, epsn, f0, gamma, sn, b0)
- print('=' * 24)
+ print("=" * 24)
print("Testing Faraday rotation for gyrotropic Drude model...")
self.check_rotation(mat, L, freq, zsrc, resolution, tmax, zout, k)
## Test Landau-Lifshitz-Gilbert medium
alpha = 1e-5
- susc = [mp.GyrotropicSaturatedSusceptibility(frequency=f0, gamma=gamma, sigma=sn,
- alpha=alpha,
- bias=mp.Vector3(0, 0, 1.0))]
+ susc = [
+ mp.GyrotropicSaturatedSusceptibility(
+ frequency=f0,
+ gamma=gamma,
+ sigma=sn,
+ alpha=alpha,
+ bias=mp.Vector3(0, 0, 1.0),
+ )
+ ]
mat = mp.Medium(epsilon=epsn, mu=1, E_susceptibilities=susc)
k = kgyro_llg(freq, epsn, f0, gamma, sn, alpha)
- print('=' * 24)
+ print("=" * 24)
print("Testing Faraday rotation for Landau-Lifshitz-Gilbert model...")
self.check_rotation(mat, L, freq, zsrc, resolution, tmax, zout, k)
-if __name__ == '__main__':
+
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_field_functions.py b/python/tests/test_field_functions.py
index 33cdc41af..ce35758e1 100644
--- a/python/tests/test_field_functions.py
+++ b/python/tests/test_field_functions.py
@@ -33,16 +33,19 @@ def init(self):
fcen = 1.0
df = 1.0
- sources = mp.Source(src=mp.GaussianSource(fcen, fwidth=df), center=mp.Vector3(),
- component=mp.Ez)
+ sources = mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=df), center=mp.Vector3(), component=mp.Ez
+ )
symmetries = [mp.Mirror(mp.X), mp.Mirror(mp.Y)]
- return mp.Simulation(resolution=resolution,
- cell_size=cell,
- boundary_layers=[pml_layers],
- sources=[sources],
- symmetries=symmetries)
+ return mp.Simulation(
+ resolution=resolution,
+ cell_size=cell,
+ boundary_layers=[pml_layers],
+ sources=[sources],
+ symmetries=symmetries,
+ )
def init2(self):
n = 3.4
@@ -55,7 +58,7 @@ def init2(self):
geometry = [
mp.Cylinder(radius=r + w, height=mp.inf, material=mp.Medium(index=n)),
- mp.Cylinder(radius=r, height=mp.inf, material=mp.air)
+ mp.Cylinder(radius=r, height=mp.inf, material=mp.air),
]
pml_layers = [mp.PML(dpml)]
@@ -63,17 +66,24 @@ def init2(self):
fcen = 0.118
df = 0.010
- sources = [mp.Source(src=mp.GaussianSource(fcen, fwidth=df), component=mp.Ez,
- center=mp.Vector3(r + 0.1))]
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=mp.Vector3(r + 0.1),
+ )
+ ]
symmetries = [mp.Mirror(mp.Y)]
- return mp.Simulation(cell_size=cell,
- resolution=resolution,
- geometry=geometry,
- boundary_layers=pml_layers,
- sources=sources,
- symmetries=symmetries)
+ return mp.Simulation(
+ cell_size=cell,
+ resolution=resolution,
+ geometry=geometry,
+ boundary_layers=pml_layers,
+ sources=sources,
+ symmetries=symmetries,
+ )
def test_integrate_field_function(self):
sim = self.init()
@@ -107,5 +117,6 @@ def test_max_abs_field_function(self):
res = sim.max_abs_field_function(self.cs, f, self.vol)
self.assertAlmostEqual(res, 0.27593732304637586)
-if __name__ == '__main__':
+
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_force.py b/python/tests/test_force.py
index 5a3078bb2..7a728db5c 100644
--- a/python/tests/test_force.py
+++ b/python/tests/test_force.py
@@ -3,7 +3,6 @@
class TestForce(unittest.TestCase):
-
def setUp(self):
resolution = 20
@@ -11,21 +10,30 @@ def setUp(self):
pml_layers = mp.PML(1.0)
fcen = 1.0
df = 1.0
- sources = mp.Source(src=mp.GaussianSource(fcen, fwidth=df), center=mp.Vector3(),
- component=mp.Ez)
+ sources = mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=df), center=mp.Vector3(), component=mp.Ez
+ )
- self.sim = mp.Simulation(resolution=resolution,
- cell_size=cell,
- boundary_layers=[pml_layers],
- sources=[sources])
+ self.sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell,
+ boundary_layers=[pml_layers],
+ sources=[sources],
+ )
fr = mp.ForceRegion(mp.Vector3(y=1.27), direction=mp.Y, size=mp.Vector3(4.38))
self.myforce = self.sim.add_force(fcen, 0, 1, fr, decimation_factor=1)
- self.myforce_decimated = self.sim.add_force(fcen, 0, 1, fr, decimation_factor=10)
+ self.myforce_decimated = self.sim.add_force(
+ fcen, 0, 1, fr, decimation_factor=10
+ )
def test_force(self):
- self.sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mp.Vector3(), 1e-6))
+ self.sim.run(
+ until_after_sources=mp.stop_when_fields_decayed(
+ 50, mp.Ez, mp.Vector3(), 1e-6
+ )
+ )
# Test store and load of force as numpy array
fdata = self.sim.get_force_data(self.myforce)
@@ -37,8 +45,10 @@ def test_force(self):
self.assertAlmostEqual(f[0], -0.11039089113393187)
places = 6 if mp.is_single_precision() else 7
- self.assertAlmostEqual(f[0], mp.get_forces(self.myforce_decimated)[0], places=places)
+ self.assertAlmostEqual(
+ f[0], mp.get_forces(self.myforce_decimated)[0], places=places
+ )
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_fragment_stats.py b/python/tests/test_fragment_stats.py
index 497744820..56c4c47fe 100644
--- a/python/tests/test_fragment_stats.py
+++ b/python/tests/test_fragment_stats.py
@@ -2,19 +2,40 @@
import meep as mp
-def make_dft_vecs(flx_reg=None, n2f_reg=None, frc_reg=None, fldc=None, flds=None, fldw=None, fld_cmp=None):
- return {'flux_regions': flx_reg, 'n2f_regions': n2f_reg, 'force_regions': frc_reg, 'fields_center': fldc, 'fields_size': flds, 'fields_where': fldw, 'fields_components': fld_cmp}
+def make_dft_vecs(
+ flx_reg=None,
+ n2f_reg=None,
+ frc_reg=None,
+ fldc=None,
+ flds=None,
+ fldw=None,
+ fld_cmp=None,
+):
+ return {
+ "flux_regions": flx_reg,
+ "n2f_regions": n2f_reg,
+ "force_regions": frc_reg,
+ "fields_center": fldc,
+ "fields_size": flds,
+ "fields_where": fldw,
+ "fields_components": fld_cmp,
+ }
def make_sim(cell, res, pml, dims, create_gv=True, k_point=False):
- sim = mp.Simulation(cell_size=cell, resolution=res, boundary_layers=pml, dimensions=dims, k_point=k_point)
+ sim = mp.Simulation(
+ cell_size=cell,
+ resolution=res,
+ boundary_layers=pml,
+ dimensions=dims,
+ k_point=k_point,
+ )
if create_gv:
sim._create_grid_volume(False)
return sim
class TestFragmentStats(unittest.TestCase):
-
def check_stats(self, fragment, a_eps, a_mu, nonlin, susc, cond):
self.assertEqual(fragment.num_anisotropic_eps_pixels, a_eps)
self.assertEqual(fragment.num_anisotropic_mu_pixels, a_mu)
@@ -22,35 +43,62 @@ def check_stats(self, fragment, a_eps, a_mu, nonlin, susc, cond):
self.assertEqual(fragment.num_susceptibility_pixels, susc)
self.assertEqual(fragment.num_nonzero_conductivity_pixels, cond)
- def get_fragment_stats(self, block_size, cell_size, dims, box_center=mp.Vector3(), dft_vecs=None,
- def_mat=mp.air, sym=[], geom=None, pml=[]):
+ def get_fragment_stats(
+ self,
+ block_size,
+ cell_size,
+ dims,
+ box_center=mp.Vector3(),
+ dft_vecs=None,
+ def_mat=mp.air,
+ sym=[],
+ geom=None,
+ pml=[],
+ ):
mat = mp.Medium(
epsilon=12,
epsilon_offdiag=mp.Vector3(z=1),
mu_offdiag=mp.Vector3(x=20),
E_chi2_diag=mp.Vector3(1, 1),
H_chi3_diag=mp.Vector3(z=1),
- E_susceptibilities=[mp.LorentzianSusceptibility(), mp.NoisyLorentzianSusceptibility()],
+ E_susceptibilities=[
+ mp.LorentzianSusceptibility(),
+ mp.NoisyLorentzianSusceptibility(),
+ ],
H_susceptibilities=[mp.DrudeSusceptibility()],
D_conductivity_diag=mp.Vector3(y=1),
- B_conductivity_diag=mp.Vector3(x=1, z=1)
+ B_conductivity_diag=mp.Vector3(x=1, z=1),
)
if geom is None:
geom = [mp.Block(size=block_size, center=box_center, material=mat)]
- sim = mp.Simulation(cell_size=cell_size, resolution=10, geometry=geom, dimensions=dims,
- default_material=def_mat, symmetries=sym, boundary_layers=pml)
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=10,
+ geometry=geom,
+ dimensions=dims,
+ default_material=def_mat,
+ symmetries=sym,
+ boundary_layers=pml,
+ )
if dft_vecs:
- if dft_vecs['flux_regions']:
- sim.add_flux(1, 0.5, 5, *dft_vecs['flux_regions'])
- if dft_vecs['n2f_regions']:
- sim.add_near2far(1, 0.5, 7, *dft_vecs['n2f_regions'])
- if dft_vecs['force_regions']:
- sim.add_force(1, 0.5, 9, *dft_vecs['force_regions'])
- if dft_vecs['fields_components']:
- sim.add_dft_fields(dft_vecs['fields_components'], 0, 1, 5, where=dft_vecs['fields_where'],
- center=dft_vecs['fields_center'], size=dft_vecs['fields_size'])
+ if dft_vecs["flux_regions"]:
+ sim.add_flux(1, 0.5, 5, *dft_vecs["flux_regions"])
+ if dft_vecs["n2f_regions"]:
+ sim.add_near2far(1, 0.5, 7, *dft_vecs["n2f_regions"])
+ if dft_vecs["force_regions"]:
+ sim.add_force(1, 0.5, 9, *dft_vecs["force_regions"])
+ if dft_vecs["fields_components"]:
+ sim.add_dft_fields(
+ dft_vecs["fields_components"],
+ 0,
+ 1,
+ 5,
+ where=dft_vecs["fields_where"],
+ center=dft_vecs["fields_center"],
+ size=dft_vecs["fields_size"],
+ )
gv = sim._create_grid_volume(False)
return sim._compute_fragment_stats(gv)
@@ -62,18 +110,22 @@ def _test_1d(self, sym, pml=[]):
dft_vecs = make_dft_vecs(
[mp.FluxRegion(mp.Vector3(z=-10), size=mp.Vector3(z=10))],
[mp.Near2FarRegion(mp.Vector3(), size=mp.Vector3(z=10))],
- [mp.ForceRegion(mp.Vector3(z=10), direction=mp.X, size=mp.Vector3(z=10))]
+ [mp.ForceRegion(mp.Vector3(z=10), direction=mp.X, size=mp.Vector3(z=10))],
)
- fs = self.get_fragment_stats(mp.Vector3(z=10), mp.Vector3(z=30), 1, dft_vecs=dft_vecs, sym=sym, pml=pml)
+ fs = self.get_fragment_stats(
+ mp.Vector3(z=10), mp.Vector3(z=30), 1, dft_vecs=dft_vecs, sym=sym, pml=pml
+ )
sym_factor = 2 if sym else 1
- self.check_stats(fs,
- a_eps=300 / sym_factor,
- a_mu=300 / sym_factor,
- nonlin=300 / sym_factor,
- susc=300 / sym_factor,
- cond=300 / sym_factor)
+ self.check_stats(
+ fs,
+ a_eps=300 / sym_factor,
+ a_mu=300 / sym_factor,
+ nonlin=300 / sym_factor,
+ susc=300 / sym_factor,
+ cond=300 / sym_factor,
+ )
# Check DFT regions
self.assertEqual(fs.num_dft_pixels, 40800)
@@ -102,11 +154,15 @@ def test_1d_with_partial_fragment(self):
# dft_flux with 2 volumes, 1 covering the first 10 units and one covering
# half of the second 10
- dft_vecs = make_dft_vecs(flx_reg=[
- mp.FluxRegion(mp.Vector3(z=-9), mp.Vector3(z=8)),
- mp.FluxRegion(mp.Vector3(z=-2.5), mp.Vector3(z=5))
- ])
- fs = self.get_fragment_stats(mp.Vector3(z=16), mp.Vector3(z=26), 1, dft_vecs=dft_vecs)
+ dft_vecs = make_dft_vecs(
+ flx_reg=[
+ mp.FluxRegion(mp.Vector3(z=-9), mp.Vector3(z=8)),
+ mp.FluxRegion(mp.Vector3(z=-2.5), mp.Vector3(z=5)),
+ ]
+ )
+ fs = self.get_fragment_stats(
+ mp.Vector3(z=16), mp.Vector3(z=26), 1, dft_vecs=dft_vecs
+ )
self.check_stats(fs, a_eps=260, a_mu=260, nonlin=480, susc=480, cond=480)
# Check dft stats
@@ -116,13 +172,21 @@ def test_1d_dft_fields(self):
# A z=30 cell with a block covering the middle 10 units.
# dft_fields covering first 10 units
- dft_vecs = make_dft_vecs(fldc=mp.Vector3(z=-10), flds=mp.Vector3(z=10), fld_cmp=[mp.X, mp.Y])
- fs = self.get_fragment_stats(mp.Vector3(z=10), mp.Vector3(z=30), 1, dft_vecs=dft_vecs)
+ dft_vecs = make_dft_vecs(
+ fldc=mp.Vector3(z=-10), flds=mp.Vector3(z=10), fld_cmp=[mp.X, mp.Y]
+ )
+ fs = self.get_fragment_stats(
+ mp.Vector3(z=10), mp.Vector3(z=30), 1, dft_vecs=dft_vecs
+ )
self.assertEqual(fs.num_dft_pixels, 4000)
# Same test with volume instead of center and size
- dft_vecs = make_dft_vecs(fldw=mp.Volume(mp.Vector3(z=-10), mp.Vector3(z=10)), fld_cmp=[mp.X, mp.Y])
- fs = self.get_fragment_stats(mp.Vector3(z=10), mp.Vector3(z=30), 1, dft_vecs=dft_vecs)
+ dft_vecs = make_dft_vecs(
+ fldw=mp.Volume(mp.Vector3(z=-10), mp.Vector3(z=10)), fld_cmp=[mp.X, mp.Y]
+ )
+ fs = self.get_fragment_stats(
+ mp.Vector3(z=10), mp.Vector3(z=30), 1, dft_vecs=dft_vecs
+ )
self.assertEqual(fs.num_dft_pixels, 4000)
def _test_2d(self, sym, pml=[]):
@@ -132,10 +196,20 @@ def _test_2d(self, sym, pml=[]):
dft_vecs = make_dft_vecs(
[mp.FluxRegion(mp.Vector3(-10, 10), size=mp.Vector3(10, 10))],
[mp.Near2FarRegion(mp.Vector3(0, 10), size=mp.Vector3(10, 10))],
- [mp.ForceRegion(mp.Vector3(10, 10), direction=mp.X, size=mp.Vector3(10, 10))]
+ [
+ mp.ForceRegion(
+ mp.Vector3(10, 10), direction=mp.X, size=mp.Vector3(10, 10)
+ )
+ ],
+ )
+ fs = self.get_fragment_stats(
+ mp.Vector3(10, 10),
+ mp.Vector3(30, 30),
+ 2,
+ dft_vecs=dft_vecs,
+ sym=sym,
+ pml=pml,
)
- fs = self.get_fragment_stats(mp.Vector3(10, 10), mp.Vector3(30, 30), 2,
- dft_vecs=dft_vecs, sym=sym, pml=pml)
# Check fragment boxes
self.assertEqual(fs.box.low.x, -15)
@@ -145,12 +219,14 @@ def _test_2d(self, sym, pml=[]):
# Middle fragment contains entire block
sym_factor = 4 if sym else 1
- self.check_stats(fs,
- a_eps=90000 / sym_factor,
- a_mu=90000 / sym_factor,
- nonlin=30000 / sym_factor,
- susc=30000 / sym_factor,
- cond=30000 / sym_factor)
+ self.check_stats(
+ fs,
+ a_eps=90000 / sym_factor,
+ a_mu=90000 / sym_factor,
+ nonlin=30000 / sym_factor,
+ susc=30000 / sym_factor,
+ cond=30000 / sym_factor,
+ )
# Check DFT regions
self.assertEqual(fs.num_dft_pixels, 2040000)
@@ -163,14 +239,17 @@ def test_2d_with_symmetry(self):
self._test_2d([mp.Mirror(mp.X), mp.Mirror(mp.Y)])
def test_2d_with_pml_all_sides(self):
- self._test_2d([], pml=[mp.PML(1, mp.Y), mp.PML(2, mp.X, mp.Low), mp.PML(3, mp.X, mp.High)])
+ self._test_2d(
+ [], pml=[mp.PML(1, mp.Y), mp.PML(2, mp.X, mp.Low), mp.PML(3, mp.X, mp.High)]
+ )
self.assertEqual(self.fs.num_1d_pml_pixels, 19000)
self.assertEqual(self.fs.num_2d_pml_pixels, 1000)
self.assertEqual(self.fs.num_3d_pml_pixels, 0)
def test_2d_with_absorbers(self):
- fs = self.get_fragment_stats(mp.Vector3(10, 10), mp.Vector3(30, 30), 2,
- geom=[], pml=[mp.Absorber(1)])
+ fs = self.get_fragment_stats(
+ mp.Vector3(10, 10), mp.Vector3(30, 30), 2, geom=[], pml=[mp.Absorber(1)]
+ )
self.assertEqual(fs.num_1d_pml_pixels, 0)
self.assertEqual(fs.num_2d_pml_pixels, 0)
self.assertEqual(fs.num_3d_pml_pixels, 0)
@@ -181,17 +260,29 @@ def test_2d_dft_fields(self):
# dft_fields covering 20 by 20 area in center of cell. Test with volume, and center/size
cmpts = [mp.Ex, mp.Ey, mp.Ez]
- dft_fields_size_center = make_dft_vecs(fldc=mp.Vector3(), flds=mp.Vector3(20, 20), fld_cmp=cmpts)
- dft_fields_where = make_dft_vecs(fldw=mp.Volume(mp.Vector3(), mp.Vector3(20, 20)), fld_cmp=cmpts)
+ dft_fields_size_center = make_dft_vecs(
+ fldc=mp.Vector3(), flds=mp.Vector3(20, 20), fld_cmp=cmpts
+ )
+ dft_fields_where = make_dft_vecs(
+ fldw=mp.Volume(mp.Vector3(), mp.Vector3(20, 20)), fld_cmp=cmpts
+ )
for dft_vec in [dft_fields_size_center, dft_fields_where]:
- fs = self.get_fragment_stats(mp.Vector3(10, 10), mp.Vector3(30, 30), 2, dft_vecs=dft_vec)
- self.assertEqual(fs.num_dft_pixels, 300000 + 4*75000 + 4*150000)
+ fs = self.get_fragment_stats(
+ mp.Vector3(10, 10), mp.Vector3(30, 30), 2, dft_vecs=dft_vec
+ )
+ self.assertEqual(fs.num_dft_pixels, 300000 + 4 * 75000 + 4 * 150000)
def test_2d_pml_and_absorber(self):
- blayers = [mp.PML(1, mp.Y, mp.High), mp.PML(2, mp.Y, mp.Low),
- mp.Absorber(1, mp.X, mp.High), mp.Absorber(3, mp.X, mp.Low)]
- fs = self.get_fragment_stats(mp.Vector3(), mp.Vector3(30, 30), 2, pml=blayers, geom=[])
+ blayers = [
+ mp.PML(1, mp.Y, mp.High),
+ mp.PML(2, mp.Y, mp.Low),
+ mp.Absorber(1, mp.X, mp.High),
+ mp.Absorber(3, mp.X, mp.Low),
+ ]
+ fs = self.get_fragment_stats(
+ mp.Vector3(), mp.Vector3(30, 30), 2, pml=blayers, geom=[]
+ )
self.assertEqual(fs.num_nonzero_conductivity_pixels, 12000)
self.assertEqual(fs.num_1d_pml_pixels, 9000)
self.assertEqual(fs.num_2d_pml_pixels, 0)
@@ -205,18 +296,32 @@ def _test_3d(self, sym, pml=[]):
dft_vecs = make_dft_vecs(
[mp.FluxRegion(mp.Vector3(-10, -10, -10), size=mp.Vector3(10, 10, 10))],
[mp.Near2FarRegion(mp.Vector3(-10, -10, 0), size=mp.Vector3(10, 10, 10))],
- [mp.ForceRegion(mp.Vector3(-10, -10, 10), direction=mp.X, size=mp.Vector3(10, 10, 10))]
+ [
+ mp.ForceRegion(
+ mp.Vector3(-10, -10, 10),
+ direction=mp.X,
+ size=mp.Vector3(10, 10, 10),
+ )
+ ],
+ )
+ fs = self.get_fragment_stats(
+ mp.Vector3(10, 10, 10),
+ mp.Vector3(30, 30, 30),
+ 3,
+ dft_vecs=dft_vecs,
+ sym=sym,
+ pml=pml,
)
- fs = self.get_fragment_stats(mp.Vector3(10, 10, 10), mp.Vector3(30, 30, 30), 3,
- dft_vecs=dft_vecs, sym=sym, pml=pml)
sym_factor = 8 if sym else 1
- self.check_stats(fs,
- a_eps=27000000 / sym_factor,
- a_mu=27000000 / sym_factor,
- nonlin=3000000 / sym_factor,
- susc=3000000 / sym_factor,
- cond=3000000 / sym_factor)
+ self.check_stats(
+ fs,
+ a_eps=27000000 / sym_factor,
+ a_mu=27000000 / sym_factor,
+ nonlin=3000000 / sym_factor,
+ susc=3000000 / sym_factor,
+ cond=3000000 / sym_factor,
+ )
# Check DFT regions
self.assertEqual(fs.num_dft_pixels, 102000000)
@@ -229,16 +334,25 @@ def test_3d_with_symmetry(self):
self._test_3d([mp.Mirror(mp.X), mp.Mirror(mp.Y), mp.Mirror(mp.Z)])
def test_3d_with_pml(self):
- self._test_3d([], pml=[mp.PML(1, mp.Y, mp.High), mp.PML(2, mp.Y, mp.Low), mp.PML(3, mp.X),
- mp.PML(1, mp.Z, mp.High), mp.PML(2, mp.Z, mp.Low)])
+ self._test_3d(
+ [],
+ pml=[
+ mp.PML(1, mp.Y, mp.High),
+ mp.PML(2, mp.Y, mp.Low),
+ mp.PML(3, mp.X),
+ mp.PML(1, mp.Z, mp.High),
+ mp.PML(2, mp.Z, mp.Low),
+ ],
+ )
self.assertEqual(self.fs.num_1d_pml_pixels, 8262000)
self.assertEqual(self.fs.num_2d_pml_pixels, 1188000)
self.assertEqual(self.fs.num_3d_pml_pixels, 54000)
def test_3d_with_absorbers(self):
- fs = self.get_fragment_stats(mp.Vector3(), mp.Vector3(30, 30, 30), 3,
- geom=[], pml=[mp.Absorber(1)])
+ fs = self.get_fragment_stats(
+ mp.Vector3(), mp.Vector3(30, 30, 30), 3, geom=[], pml=[mp.Absorber(1)]
+ )
self.assertEqual(fs.num_1d_pml_pixels, 0)
self.assertEqual(fs.num_2d_pml_pixels, 0)
self.assertEqual(fs.num_3d_pml_pixels, 0)
@@ -251,15 +365,25 @@ def test_cyl(self):
dft_vecs = make_dft_vecs(
[mp.FluxRegion(mp.Vector3(-10, z=10), size=mp.Vector3(10, z=10))],
[mp.Near2FarRegion(mp.Vector3(0, z=10), size=mp.Vector3(10, z=10))],
- [mp.ForceRegion(mp.Vector3(10, z=10), direction=mp.X, size=mp.Vector3(10, z=10))]
+ [
+ mp.ForceRegion(
+ mp.Vector3(10, z=10), direction=mp.X, size=mp.Vector3(10, z=10)
+ )
+ ],
+ )
+ fs = self.get_fragment_stats(
+ mp.Vector3(10, 0, 10),
+ mp.Vector3(30, 0, 30),
+ mp.CYLINDRICAL,
+ dft_vecs=dft_vecs,
)
- fs = self.get_fragment_stats(mp.Vector3(10, 0, 10), mp.Vector3(30, 0, 30),
- mp.CYLINDRICAL, dft_vecs=dft_vecs)
self.assertEqual(fs.box.low.x, -15)
self.assertEqual(fs.box.low.z, -15)
self.assertEqual(fs.box.high.x, 15)
self.assertEqual(fs.box.high.z, 15)
- self.check_stats(fs, a_eps=90000, a_mu=90000, nonlin=30000, susc=30000, cond=30000)
+ self.check_stats(
+ fs, a_eps=90000, a_mu=90000, nonlin=30000, susc=30000, cond=30000
+ )
self.assertEqual(fs.num_dft_pixels, 2040000)
def test_no_geometry(self):
@@ -269,13 +393,20 @@ def test_no_geometry(self):
mu_offdiag=mp.Vector3(x=20),
E_chi2_diag=mp.Vector3(1, 1),
H_chi3_diag=mp.Vector3(x=1),
- E_susceptibilities=[mp.LorentzianSusceptibility(), mp.NoisyLorentzianSusceptibility()],
+ E_susceptibilities=[
+ mp.LorentzianSusceptibility(),
+ mp.NoisyLorentzianSusceptibility(),
+ ],
H_susceptibilities=[mp.DrudeSusceptibility()],
D_conductivity_diag=mp.Vector3(y=1),
- B_conductivity_diag=mp.Vector3(x=1, z=1)
+ B_conductivity_diag=mp.Vector3(x=1, z=1),
+ )
+ fs = self.get_fragment_stats(
+ mp.Vector3(), mp.Vector3(10, 10), 2, def_mat=mat, geom=[]
+ )
+ self.check_stats(
+ fs, a_eps=10000, a_mu=10000, nonlin=30000, susc=30000, cond=30000
)
- fs = self.get_fragment_stats(mp.Vector3(), mp.Vector3(10, 10), 2, def_mat=mat, geom=[])
- self.check_stats(fs, a_eps=10000, a_mu=10000, nonlin=30000, susc=30000, cond=30000)
def test_1d_cell_smaller_than_minimum_fragment_size(self):
fs = self.get_fragment_stats(mp.Vector3(z=1), mp.Vector3(z=1), 1)
@@ -303,7 +434,6 @@ def test_3d_cell_smaller_than_minimum_fragment_size(self):
class TestPMLToVolList(unittest.TestCase):
-
def check1d(self, vol, expected_min, expected_max):
min_vec = vol.get_min_corner()
max_vec = vol.get_max_corner()
@@ -356,7 +486,9 @@ def test_1d_high_side(self):
self.check1d(v1[0], 4, 5)
def test_1d_two_sides_different_thickness(self):
- sim = make_sim(mp.Vector3(z=10), 10, [mp.PML(1, side=mp.High), mp.PML(2, side=mp.Low)], 1)
+ sim = make_sim(
+ mp.Vector3(z=10), 10, [mp.PML(1, side=mp.High), mp.PML(2, side=mp.Low)], 1
+ )
v1, v2, v3 = sim._boundary_layers_to_vol_list(sim.boundary_layers)
self.assertFalse(v2)
@@ -390,7 +522,7 @@ def test_2d_all_sides_different_thickness_in_X(self):
pmls = [
mp.PML(thickness=1, direction=mp.Y),
mp.PML(thickness=3, direction=mp.X, side=mp.High),
- mp.PML(thickness=2, direction=mp.X, side=mp.Low)
+ mp.PML(thickness=2, direction=mp.X, side=mp.Low),
]
sim = make_sim(mp.Vector3(10, 10), 10, pmls, 2)
v1, v2, v3 = sim._boundary_layers_to_vol_list(sim.boundary_layers)
@@ -546,7 +678,6 @@ def test_cylindrical_all_directions_all_sides(self):
@unittest.skipIf(mp.count_processors() != 2, "MPI specific test")
class TestChunkCommunicationArea(unittest.TestCase):
-
def test_2d_periodic(self):
sim = make_sim(mp.Vector3(10, 6), 10, [mp.PML(1)], 2, k_point=mp.Vector3(1, 1))
max_comm = sim.get_max_chunk_communication_area()
@@ -555,7 +686,9 @@ def test_2d_periodic(self):
self.assertEqual(avg_comm, 220)
def test_3d_periodic(self):
- sim = make_sim(mp.Vector3(10, 8, 6), 10, [mp.PML(1)], 3, k_point=mp.Vector3(1, 1, 1))
+ sim = make_sim(
+ mp.Vector3(10, 8, 6), 10, [mp.PML(1)], 3, k_point=mp.Vector3(1, 1, 1)
+ )
max_comm = sim.get_max_chunk_communication_area()
avg_comm = sim.get_avg_chunk_communication_area()
self.assertEqual(max_comm, 2360)
@@ -576,5 +709,5 @@ def test_3d(self):
self.assertEqual(avg_comm, 480)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_gaussianbeam.py b/python/tests/test_gaussianbeam.py
index acad564e1..32104cebe 100644
--- a/python/tests/test_gaussianbeam.py
+++ b/python/tests/test_gaussianbeam.py
@@ -3,59 +3,82 @@
import math
import numpy as np
-class TestGaussianBeamSource(unittest.TestCase):
+class TestGaussianBeamSource(unittest.TestCase):
def gaussian_beam(self, rot_angle):
s = 14
resolution = 25
dpml = 2
- cell_size = mp.Vector3(s,s)
+ cell_size = mp.Vector3(s, s)
boundary_layers = [mp.PML(thickness=dpml)]
- beam_x0 = mp.Vector3(0,7.0) # beam focus (relative to source center)
- beam_kdir = mp.Vector3(0,1,0).rotate(mp.Vector3(0,0,1),math.radians(rot_angle)) # beam propagation direction
+ beam_x0 = mp.Vector3(0, 7.0) # beam focus (relative to source center)
+ beam_kdir = mp.Vector3(0, 1, 0).rotate(
+ mp.Vector3(0, 0, 1), math.radians(rot_angle)
+ ) # beam propagation direction
beam_w0 = 0.8 # beam waist radius
- beam_E0 = mp.Vector3(0,0,1)
- beam_x0 = beam_x0.rotate(mp.Vector3(0,0,1),math.radians(rot_angle))
+ beam_E0 = mp.Vector3(0, 0, 1)
+ beam_x0 = beam_x0.rotate(mp.Vector3(0, 0, 1), math.radians(rot_angle))
fcen = 1
src_x = 0
- src_y = -0.5*s+dpml+1.0
- sources = [mp.GaussianBeamSource(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),
- center=mp.Vector3(src_x,src_y),
- size=mp.Vector3(s),
- beam_x0=beam_x0,
- beam_kdir=beam_kdir,
- beam_w0=beam_w0,
- beam_E0=beam_E0)]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=boundary_layers,
- sources=sources)
-
- cell_dft_fields = sim.add_dft_fields([mp.Ez], fcen, 0, 1, center=mp.Vector3(), size=mp.Vector3(s-2*dpml,s-2*dpml))
+ src_y = -0.5 * s + dpml + 1.0
+ sources = [
+ mp.GaussianBeamSource(
+ src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ center=mp.Vector3(src_x, src_y),
+ size=mp.Vector3(s),
+ beam_x0=beam_x0,
+ beam_kdir=beam_kdir,
+ beam_w0=beam_w0,
+ beam_E0=beam_E0,
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=boundary_layers,
+ sources=sources,
+ )
+
+ cell_dft_fields = sim.add_dft_fields(
+ [mp.Ez],
+ fcen,
+ 0,
+ 1,
+ center=mp.Vector3(),
+ size=mp.Vector3(s - 2 * dpml, s - 2 * dpml),
+ )
sim.run(until_after_sources=50)
Ez_cell = sim.get_dft_array(cell_dft_fields, mp.Ez, 0)
- [x,y,z,w] = sim.get_array_metadata(dft_cell=cell_dft_fields)
+ [x, y, z, w] = sim.get_array_metadata(dft_cell=cell_dft_fields)
tol = 0.05
- idx_x = np.nonzero((np.squeeze(x) > (src_x+beam_x0.x-tol)) & (np.squeeze(x) < (src_x+beam_x0.x+tol)))
- idx_y = np.nonzero((np.squeeze(y) > (src_y+beam_x0.y-tol)) & (np.squeeze(y) < (src_y+beam_x0.y+tol)))
-
- Ez_beam_x0 = Ez_cell[np.squeeze(idx_x)[0],np.squeeze(idx_y)[0]]
-
- frac = np.abs(Ez_beam_x0)**2 / np.amax(np.abs(Ez_cell)**2)
- print(f"ratio of the Gaussian beam energy at the focus over the maximum beam energy for the entire cell: {frac}")
-
+ idx_x = np.nonzero(
+ (np.squeeze(x) > (src_x + beam_x0.x - tol))
+ & (np.squeeze(x) < (src_x + beam_x0.x + tol))
+ )
+ idx_y = np.nonzero(
+ (np.squeeze(y) > (src_y + beam_x0.y - tol))
+ & (np.squeeze(y) < (src_y + beam_x0.y + tol))
+ )
+
+ Ez_beam_x0 = Ez_cell[np.squeeze(idx_x)[0], np.squeeze(idx_y)[0]]
+
+ frac = np.abs(Ez_beam_x0) ** 2 / np.amax(np.abs(Ez_cell) ** 2)
+ print(
+ f"ratio of the Gaussian beam energy at the focus over the maximum beam energy for the entire cell: {frac}"
+ )
self.assertGreater(frac, 0.99)
def test_gaussian_beam(self):
self.gaussian_beam(-40)
-if __name__ == '__main__':
- unittest.main()
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/python/tests/test_geom.py b/python/tests/test_geom.py
index 4b2f3a974..2fe9a9bdc 100644
--- a/python/tests/test_geom.py
+++ b/python/tests/test_geom.py
@@ -15,7 +15,6 @@ def ones():
class TestGeom(unittest.TestCase):
-
def test_geometric_object_duplicates_x(self):
rad = 1
s = mp.Sphere(rad)
@@ -26,7 +25,7 @@ def test_geometric_object_duplicates_x(self):
mp.Sphere(rad, center=mp.Vector3(x=4)),
mp.Sphere(rad, center=mp.Vector3(x=3)),
mp.Sphere(rad, center=mp.Vector3(x=2)),
- mp.Sphere(rad, center=mp.Vector3(x=1))
+ mp.Sphere(rad, center=mp.Vector3(x=1)),
]
for r, e in zip(res, expected):
@@ -71,9 +70,11 @@ def test_geometric_objects_duplicates(self):
self.assertEqual(r.center, e.center)
def test_geometric_objects_lattice_duplicates(self):
- geometry_lattice = mp.Lattice(size=mp.Vector3(1, 7),
- basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
- basis2=mp.Vector3(math.sqrt(3) / 2, -0.5))
+ geometry_lattice = mp.Lattice(
+ size=mp.Vector3(1, 7),
+ basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
+ basis2=mp.Vector3(math.sqrt(3) / 2, -0.5),
+ )
eps = 12
r = 0.2
@@ -97,15 +98,16 @@ def test_geometric_objects_lattice_duplicates(self):
self.assertEqual(exp.radius, res.radius)
def test_cartesian_to_lattice(self):
- lattice = mp.Lattice(size=mp.Vector3(1, 7),
- basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
- basis2=mp.Vector3(math.sqrt(3) / 2, -0.5))
+ lattice = mp.Lattice(
+ size=mp.Vector3(1, 7),
+ basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
+ basis2=mp.Vector3(math.sqrt(3) / 2, -0.5),
+ )
res = mp.cartesian_to_lattice(lattice.basis * mp.Vector3(1), lattice)
self.assertEqual(res, mp.Vector3(1))
class TestSphere(unittest.TestCase):
-
def test_kwargs_passed_to_parent(self):
s = gm.Sphere(1.0)
self.assertEqual(s.material.epsilon_diag, ones())
@@ -124,9 +126,9 @@ def test_kwargs_passed_to_parent(self):
def test_invalid_kwarg_raises_exception(self):
with self.assertRaises(TypeError):
- gm.Sphere(invalid='This is not allowed')
+ gm.Sphere(invalid="This is not allowed")
with self.assertRaises(TypeError):
- gm.Sphere(radius=1.0, oops='Nope')
+ gm.Sphere(radius=1.0, oops="Nope")
def test_non_neg_radius_constructor(self):
gm.Sphere(radius=0.0)
@@ -186,7 +188,6 @@ def test_info(self):
class TestCylinder(unittest.TestCase):
-
def test_non_neg_height_constructor(self):
gm.Cylinder(radius=1.0, height=0.0)
gm.Cylinder(radius=1.0, height=1.0)
@@ -220,9 +221,9 @@ def test_wrong_type_exception(self):
class TestWedge(unittest.TestCase):
-
def test_default_properties(self):
import math
+
w = gm.Wedge(center=zeros(), radius=2.0, height=4.0, axis=gm.Vector3(0, 0, 1))
self.assertEqual(w.wedge_angle, 8 * math.atan(1))
@@ -232,37 +233,37 @@ def test_contains_point(self):
class TestCone(unittest.TestCase):
-
def test_contains_point(self):
c = gm.Cone(center=zeros(), radius=2.0, height=3.0, axis=gm.Vector3(0, 0, 1))
self.assertIn(gm.Vector3(0, 0, 1), c)
class TestBlock(unittest.TestCase):
-
def test_contains_point(self):
b = gm.Block(size=ones(), center=zeros())
self.assertIn(zeros(), b)
class TestEllipsoid(unittest.TestCase):
-
def test_contains_point(self):
e = gm.Ellipsoid(size=ones(), center=zeros())
self.assertIn(zeros(), e)
class TestPrism(unittest.TestCase):
-
def test_contains_point(self):
- vertices = [gm.Vector3(-1, 1), gm.Vector3(1, 1), gm.Vector3(1, -1), gm.Vector3(-1, -1)]
+ vertices = [
+ gm.Vector3(-1, 1),
+ gm.Vector3(1, 1),
+ gm.Vector3(1, -1),
+ gm.Vector3(-1, -1),
+ ]
p = gm.Prism(vertices, height=1)
self.assertIn(zeros(), p)
self.assertNotIn(gm.Vector3(2, 2), p)
class TestMedium(unittest.TestCase):
-
def test_D_conductivity(self):
m = gm.Medium(D_conductivity=2)
self.assertEqual(m.D_conductivity_diag.x, 2)
@@ -326,50 +327,82 @@ def check_warnings(sim, should_warn=True):
for s in invalid_sources:
# Check for invalid extra_materials
- sim = mp.Simulation(cell_size=cell_size, resolution=resolution, sources=s, extra_materials=[mat])
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ sources=s,
+ extra_materials=[mat],
+ )
check_warnings(sim)
# Check for invalid geometry materials
- sim = mp.Simulation(cell_size=cell_size, resolution=resolution, sources=s, geometry=geom)
+ sim = mp.Simulation(
+ cell_size=cell_size, resolution=resolution, sources=s, geometry=geom
+ )
check_warnings(sim)
valid_sources = [
[mp.Source(mp.GaussianSource(15, fwidth=1), mp.Ez, mp.Vector3())],
- [mp.Source(mp.ContinuousSource(15, width=5), mp.Ez, mp.Vector3())]
+ [mp.Source(mp.ContinuousSource(15, width=5), mp.Ez, mp.Vector3())],
]
for s in valid_sources:
- sim = mp.Simulation(cell_size=cell_size, resolution=resolution, sources=s, extra_materials=[mat])
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ sources=s,
+ extra_materials=[mat],
+ )
check_warnings(sim, False)
# Check DFT frequencies
# Invalid extra_materials
- sim = mp.Simulation(cell_size=cell_size, resolution=resolution, sources=valid_sources[0],
- extra_materials=[mat])
- fregion = mp.FluxRegion(center=mp.Vector3(0, 1), size=mp.Vector3(2, 2), direction=mp.X)
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ sources=valid_sources[0],
+ extra_materials=[mat],
+ )
+ fregion = mp.FluxRegion(
+ center=mp.Vector3(0, 1), size=mp.Vector3(2, 2), direction=mp.X
+ )
sim.add_flux(18, 6, 2, fregion, decimation_factor=1)
check_warnings(sim)
# Invalid geometry material
- sim = mp.Simulation(cell_size=cell_size, resolution=resolution, sources=valid_sources[0], geometry=geom)
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ sources=valid_sources[0],
+ geometry=geom,
+ )
sim.add_flux(18, 6, 2, fregion, decimation_factor=1)
check_warnings(sim)
def test_transform(self):
- e_sus = [mp.LorentzianSusceptibility(sigma_diag=mp.Vector3(1, 2, 3),
- sigma_offdiag=mp.Vector3(12, 13, 14)),
- mp.DrudeSusceptibility(sigma_diag=mp.Vector3(1, 2, 3),
- sigma_offdiag=mp.Vector3(12, 13, 14))]
+ e_sus = [
+ mp.LorentzianSusceptibility(
+ sigma_diag=mp.Vector3(1, 2, 3), sigma_offdiag=mp.Vector3(12, 13, 14)
+ ),
+ mp.DrudeSusceptibility(
+ sigma_diag=mp.Vector3(1, 2, 3), sigma_offdiag=mp.Vector3(12, 13, 14)
+ ),
+ ]
- mat = mp.Medium(epsilon_diag=mp.Vector3(1, 2, 3), epsilon_offdiag=mp.Vector3(12, 13, 14),
- E_susceptibilities=e_sus)
+ mat = mp.Medium(
+ epsilon_diag=mp.Vector3(1, 2, 3),
+ epsilon_offdiag=mp.Vector3(12, 13, 14),
+ E_susceptibilities=e_sus,
+ )
rot_angle = math.radians(23.9)
- rot_matrix = mp.Matrix(mp.Vector3(math.cos(rot_angle), math.sin(rot_angle), 0),
- mp.Vector3(-math.sin(rot_angle), math.cos(rot_angle), 0),
- mp.Vector3(0, 0, 1))
+ rot_matrix = mp.Matrix(
+ mp.Vector3(math.cos(rot_angle), math.sin(rot_angle), 0),
+ mp.Vector3(-math.sin(rot_angle), math.cos(rot_angle), 0),
+ mp.Vector3(0, 0, 1),
+ )
mat.transform(rot_matrix)
expected_diag = mp.Vector3(-7.72552, 10.72552, 3)
@@ -380,14 +413,21 @@ def test_transform(self):
self.assertEqual(mat.mu_diag, mp.Vector3(1, 1, 1))
self.assertEqual(mat.mu_offdiag, mp.Vector3())
self.assertEqual(len(mat.E_susceptibilities), 2)
- self.assertTrue(mat.E_susceptibilities[0].sigma_diag.close(expected_diag, tol=4))
- self.assertTrue(mat.E_susceptibilities[0].sigma_offdiag.close(expected_offdiag, tol=4))
- self.assertTrue(mat.E_susceptibilities[1].sigma_diag.close(expected_diag, tol=4))
- self.assertTrue(mat.E_susceptibilities[1].sigma_offdiag.close(expected_offdiag, tol=4))
+ self.assertTrue(
+ mat.E_susceptibilities[0].sigma_diag.close(expected_diag, tol=4)
+ )
+ self.assertTrue(
+ mat.E_susceptibilities[0].sigma_offdiag.close(expected_offdiag, tol=4)
+ )
+ self.assertTrue(
+ mat.E_susceptibilities[1].sigma_diag.close(expected_diag, tol=4)
+ )
+ self.assertTrue(
+ mat.E_susceptibilities[1].sigma_offdiag.close(expected_offdiag, tol=4)
+ )
class TestVector3(unittest.TestCase):
-
def test_use_as_numpy_array(self):
v = gm.Vector3(10, 10, 10)
res = np.add(v, np.array([10, 10, 10]))
@@ -439,14 +479,18 @@ def test_rotate_lattice(self):
v = mp.Vector3(2, 2, 2)
lattice = mp.Lattice(size=mp.Vector3(1, 1))
res = v.rotate_lattice(axis, 3, lattice)
- self.assertTrue(res.close(mp.Vector3(2.0, -2.262225009320625, -1.6977449770811563)))
+ self.assertTrue(
+ res.close(mp.Vector3(2.0, -2.262225009320625, -1.6977449770811563))
+ )
def test_rotate_reciprocal(self):
axis = mp.Vector3(1)
v = mp.Vector3(2, 2, 2)
lattice = mp.Lattice(size=mp.Vector3(1, 1))
res = v.rotate_reciprocal(axis, 3, lattice)
- self.assertTrue(res.close(mp.Vector3(2.0, -2.262225009320625, -1.6977449770811563)))
+ self.assertTrue(
+ res.close(mp.Vector3(2.0, -2.262225009320625, -1.6977449770811563))
+ )
def test_complex_norm(self):
# issue #722
@@ -455,15 +499,18 @@ def test_complex_norm(self):
class TestLattice(unittest.TestCase):
-
def test_basis(self):
- lattice = mp.Lattice(size=mp.Vector3(1, 7),
- basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
- basis2=mp.Vector3(math.sqrt(3) / 2, -0.5))
+ lattice = mp.Lattice(
+ size=mp.Vector3(1, 7),
+ basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
+ basis2=mp.Vector3(math.sqrt(3) / 2, -0.5),
+ )
b = lattice.basis
- exp = mp.Matrix(mp.Vector3(0.8660254037844388, 0.5000000000000001),
- mp.Vector3(0.8660254037844388, -0.5000000000000001),
- mp.Vector3(z=1.0))
+ exp = mp.Matrix(
+ mp.Vector3(0.8660254037844388, 0.5000000000000001),
+ mp.Vector3(0.8660254037844388, -0.5000000000000001),
+ mp.Vector3(z=1.0),
+ )
for e, r in zip([exp.c1, exp.c2, exp.c3], [b.c1, b.c2, b.c3]):
self.assertTrue(e.close(r))
@@ -493,16 +540,14 @@ def test_row(self):
self.assertEqual(self.identity.row(2), self.identity.c3)
def test_mm_mult(self):
- m1 = mp.Matrix(mp.Vector3(1, 2, 3),
- mp.Vector3(4, 5, 6),
- mp.Vector3(7, 8, 9))
- m2 = mp.Matrix(mp.Vector3(9, 8, 7),
- mp.Vector3(6, 5, 4),
- mp.Vector3(3, 2, 1))
+ m1 = mp.Matrix(mp.Vector3(1, 2, 3), mp.Vector3(4, 5, 6), mp.Vector3(7, 8, 9))
+ m2 = mp.Matrix(mp.Vector3(9, 8, 7), mp.Vector3(6, 5, 4), mp.Vector3(3, 2, 1))
res = m1 * m2
- exp = mp.Matrix(mp.Vector3(90.0, 114.0, 138.0),
- mp.Vector3(54.0, 69.0, 84.0),
- mp.Vector3(18.0, 24.0, 30.0))
+ exp = mp.Matrix(
+ mp.Vector3(90.0, 114.0, 138.0),
+ mp.Vector3(54.0, 69.0, 84.0),
+ mp.Vector3(18.0, 24.0, 30.0),
+ )
self.matrix_eq(exp, res)
@@ -520,91 +565,105 @@ def test_sub(self):
self.assertEqual(result.row(2), zeros())
def test_mv_mult(self):
- lattice = mp.Lattice(size=mp.Vector3(1, 7),
- basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
- basis2=mp.Vector3(math.sqrt(3) / 2, -0.5))
+ lattice = mp.Lattice(
+ size=mp.Vector3(1, 7),
+ basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
+ basis2=mp.Vector3(math.sqrt(3) / 2, -0.5),
+ )
res = lattice.basis * mp.Vector3(1)
exp = mp.Vector3(0.8660254037844388, 0.5000000000000001)
self.assertTrue(res.close(exp))
def test_scale(self):
- m = mp.Matrix(mp.Vector3(90.0, 114.0, 138.0),
- mp.Vector3(54.0, 69.0, 84.0),
- mp.Vector3(18.0, 24.0, 30.0))
+ m = mp.Matrix(
+ mp.Vector3(90.0, 114.0, 138.0),
+ mp.Vector3(54.0, 69.0, 84.0),
+ mp.Vector3(18.0, 24.0, 30.0),
+ )
res = m.scale(0.5)
- exp = mp.Matrix(mp.Vector3(45.0, 57.0, 69.0),
- mp.Vector3(27.0, 34.5, 42.0),
- mp.Vector3(9.0, 12.0, 15.0))
+ exp = mp.Matrix(
+ mp.Vector3(45.0, 57.0, 69.0),
+ mp.Vector3(27.0, 34.5, 42.0),
+ mp.Vector3(9.0, 12.0, 15.0),
+ )
self.matrix_eq(exp, res)
self.matrix_eq(exp, m * 0.5)
self.matrix_eq(exp, 0.5 * m)
def test_determinant(self):
- m = mp.Matrix(mp.Vector3(2),
- mp.Vector3(y=2),
- mp.Vector3(z=2))
+ m = mp.Matrix(mp.Vector3(2), mp.Vector3(y=2), mp.Vector3(z=2))
- m1 = mp.Matrix(mp.Vector3(1, 2, 3),
- mp.Vector3(4, 5, 6),
- mp.Vector3(7, 8, 9))
+ m1 = mp.Matrix(mp.Vector3(1, 2, 3), mp.Vector3(4, 5, 6), mp.Vector3(7, 8, 9))
self.assertEqual(8, m.determinant())
self.assertEqual(0, m1.determinant())
def test_transpose(self):
- m = mp.Matrix(mp.Vector3(1, 2, 3),
- mp.Vector3(4, 5, 6),
- mp.Vector3(7, 8, 9))
- exp = mp.Matrix(mp.Vector3(1, 4, 7),
- mp.Vector3(2, 5, 8),
- mp.Vector3(3, 6, 9))
+ m = mp.Matrix(mp.Vector3(1, 2, 3), mp.Vector3(4, 5, 6), mp.Vector3(7, 8, 9))
+ exp = mp.Matrix(mp.Vector3(1, 4, 7), mp.Vector3(2, 5, 8), mp.Vector3(3, 6, 9))
self.matrix_eq(exp, m.transpose())
def test_inverse(self):
self.matrix_eq(self.identity, self.identity.inverse())
- lattice = mp.Lattice(size=mp.Vector3(1, 7),
- basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
- basis2=mp.Vector3(math.sqrt(3) / 2, -0.5))
+ lattice = mp.Lattice(
+ size=mp.Vector3(1, 7),
+ basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
+ basis2=mp.Vector3(math.sqrt(3) / 2, -0.5),
+ )
res = lattice.basis.inverse()
- exp = mp.Matrix(mp.Vector3(0.5773502691896256, 0.5773502691896256, -0.0),
- mp.Vector3(0.9999999999999998, -0.9999999999999998, -0.0),
- mp.Vector3(-0.0, -0.0, 1.0))
+ exp = mp.Matrix(
+ mp.Vector3(0.5773502691896256, 0.5773502691896256, -0.0),
+ mp.Vector3(0.9999999999999998, -0.9999999999999998, -0.0),
+ mp.Vector3(-0.0, -0.0, 1.0),
+ )
self.matrix_close(exp, res)
def test_get_rotation_matrix(self):
result = mp.get_rotation_matrix(ones(), 5)
- self.assertTrue(result.c1.close(mp.Vector3(0.5224414569754843, -0.3148559165969717, 0.7924144596214877)))
- self.assertTrue(result.c2.close(mp.Vector3(0.7924144596214877, 0.5224414569754843, -0.3148559165969717)))
- self.assertTrue(result.c3.close(mp.Vector3(-0.3148559165969717, 0.7924144596214877, 0.5224414569754843)))
+ self.assertTrue(
+ result.c1.close(
+ mp.Vector3(0.5224414569754843, -0.3148559165969717, 0.7924144596214877)
+ )
+ )
+ self.assertTrue(
+ result.c2.close(
+ mp.Vector3(0.7924144596214877, 0.5224414569754843, -0.3148559165969717)
+ )
+ )
+ self.assertTrue(
+ result.c3.close(
+ mp.Vector3(-0.3148559165969717, 0.7924144596214877, 0.5224414569754843)
+ )
+ )
def test_conj(self):
- m = mp.Matrix(mp.Vector3(x=1+1j), mp.Vector3(y=1+1j), mp.Vector3(z=1+1j))
+ m = mp.Matrix(mp.Vector3(x=1 + 1j), mp.Vector3(y=1 + 1j), mp.Vector3(z=1 + 1j))
result = m.conj()
- self.assertEqual(result.c1, mp.Vector3(x=1-1j))
- self.assertEqual(result.c2, mp.Vector3(y=1-1j))
- self.assertEqual(result.c3, mp.Vector3(z=1-1j))
+ self.assertEqual(result.c1, mp.Vector3(x=1 - 1j))
+ self.assertEqual(result.c2, mp.Vector3(y=1 - 1j))
+ self.assertEqual(result.c3, mp.Vector3(z=1 - 1j))
def test_adjoint(self):
- m = mp.Matrix(mp.Vector3(1+1j), mp.Vector3(1+1j), mp.Vector3(1+1j))
+ m = mp.Matrix(mp.Vector3(1 + 1j), mp.Vector3(1 + 1j), mp.Vector3(1 + 1j))
getH_result = m.getH()
H_result = m.H
- self.assertEqual(getH_result.c1, mp.Vector3(1-1j, 1-1j, 1-1j))
+ self.assertEqual(getH_result.c1, mp.Vector3(1 - 1j, 1 - 1j, 1 - 1j))
self.assertEqual(getH_result.c2, mp.Vector3())
self.assertEqual(getH_result.c3, mp.Vector3())
np.testing.assert_allclose(getH_result, H_result)
def test_to_numpy_array(self):
- m = mp.Matrix(mp.Vector3(1+1j), mp.Vector3(1+1j), mp.Vector3(1+1j))
+ m = mp.Matrix(mp.Vector3(1 + 1j), mp.Vector3(1 + 1j), mp.Vector3(1 + 1j))
adjoint = m.H
m_arr = np.array(m)
np_adjoint = m_arr.conj().transpose()
np.testing.assert_allclose(adjoint, np_adjoint)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_get_epsilon_grid.py b/python/tests/test_get_epsilon_grid.py
index b5b98191f..07876836a 100644
--- a/python/tests/test_get_epsilon_grid.py
+++ b/python/tests/test_get_epsilon_grid.py
@@ -2,76 +2,98 @@
import parameterized
import numpy as np
import meep as mp
+
try:
import meep.adjoint as mpa
except:
import adjoint as mpa
from meep.materials import SiN, Co
-class TestGetEpsilonGrid(unittest.TestCase):
+class TestGetEpsilonGrid(unittest.TestCase):
def setUp(self):
resolution = 60
- self.cell_size = mp.Vector3(1.0,1.0,0)
+ self.cell_size = mp.Vector3(1.0, 1.0, 0)
matgrid_resolution = 200
- matgrid_size = mp.Vector3(1.0,1.0,mp.inf)
- Nx, Ny = int(matgrid_size.x*matgrid_resolution), int(matgrid_size.y*matgrid_resolution)
- x = np.linspace(-0.5*matgrid_size.x,0.5*matgrid_size.x,Nx)
- y = np.linspace(-0.5*matgrid_size.y,0.5*matgrid_size.y,Ny)
- xv, yv = np.meshgrid(x,y)
+ matgrid_size = mp.Vector3(1.0, 1.0, mp.inf)
+ Nx, Ny = int(matgrid_size.x * matgrid_resolution), int(
+ matgrid_size.y * matgrid_resolution
+ )
+ x = np.linspace(-0.5 * matgrid_size.x, 0.5 * matgrid_size.x, Nx)
+ y = np.linspace(-0.5 * matgrid_size.y, 0.5 * matgrid_size.y, Ny)
+ xv, yv = np.meshgrid(x, y)
rad = 0.201943
w = 0.104283
- weights = np.logical_and(np.sqrt(np.square(xv) + np.square(yv)) > rad,
- np.sqrt(np.square(xv) + np.square(yv)) < rad+w,
- dtype=np.double)
+ weights = np.logical_and(
+ np.sqrt(np.square(xv) + np.square(yv)) > rad,
+ np.sqrt(np.square(xv) + np.square(yv)) < rad + w,
+ dtype=np.double,
+ )
- matgrid = mp.MaterialGrid(mp.Vector3(Nx,Ny),
- mp.air,
- mp.Medium(index=3.5),
- weights=weights,
- do_averaging=False,
- beta=0,
- eta=0.5)
+ matgrid = mp.MaterialGrid(
+ mp.Vector3(Nx, Ny),
+ mp.air,
+ mp.Medium(index=3.5),
+ weights=weights,
+ do_averaging=False,
+ beta=0,
+ eta=0.5,
+ )
- geometry = [mp.Cylinder(center=mp.Vector3(0.35,0.1),
- radius=0.1,
- height=mp.inf,
- material=mp.Medium(index=1.5)),
- mp.Block(center=mp.Vector3(-0.15,-0.2),
- size=mp.Vector3(0.2,0.24,mp.inf),
- material=SiN),
- mp.Block(center=mp.Vector3(-0.2,0.2),
- size=mp.Vector3(0.4,0.4,mp.inf),
- material=matgrid),
- mp.Prism(vertices=[mp.Vector3(0.05,0.45),
- mp.Vector3(0.32,0.22),
- mp.Vector3(0.15,0.10)],
- height=0.5,
- material=Co)]
+ geometry = [
+ mp.Cylinder(
+ center=mp.Vector3(0.35, 0.1),
+ radius=0.1,
+ height=mp.inf,
+ material=mp.Medium(index=1.5),
+ ),
+ mp.Block(
+ center=mp.Vector3(-0.15, -0.2),
+ size=mp.Vector3(0.2, 0.24, mp.inf),
+ material=SiN,
+ ),
+ mp.Block(
+ center=mp.Vector3(-0.2, 0.2),
+ size=mp.Vector3(0.4, 0.4, mp.inf),
+ material=matgrid,
+ ),
+ mp.Prism(
+ vertices=[
+ mp.Vector3(0.05, 0.45),
+ mp.Vector3(0.32, 0.22),
+ mp.Vector3(0.15, 0.10),
+ ],
+ height=0.5,
+ material=Co,
+ ),
+ ]
- self.sim = mp.Simulation(resolution=resolution,
- cell_size=self.cell_size,
- geometry=geometry,
- eps_averaging=False)
+ self.sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=self.cell_size,
+ geometry=geometry,
+ eps_averaging=False,
+ )
self.sim.init_sim()
- @parameterized.parameterized.expand([
- (mp.Vector3(0.2,0.2), 1.1),
- (mp.Vector3(-0.2,0.1), 0.7),
- (mp.Vector3(-0.2,-0.25), 0.55),
- (mp.Vector3(0.4,0.1), 0)
- ])
+ @parameterized.parameterized.expand(
+ [
+ (mp.Vector3(0.2, 0.2), 1.1),
+ (mp.Vector3(-0.2, 0.1), 0.7),
+ (mp.Vector3(-0.2, -0.25), 0.55),
+ (mp.Vector3(0.4, 0.1), 0),
+ ]
+ )
def test_get_epsilon_grid(self, pt, freq):
- eps_grid = self.sim.get_epsilon_grid(np.array([pt.x]),
- np.array([pt.y]),
- np.array([0]),
- freq)
+ eps_grid = self.sim.get_epsilon_grid(
+ np.array([pt.x]), np.array([pt.y]), np.array([0]), freq
+ )
eps_pt = self.sim.get_epsilon_point(pt, freq)
print(f"eps:, ({pt.x},{pt.y}), {eps_grid}, {eps_pt}")
self.assertAlmostEqual(np.real(eps_grid), np.real(eps_pt), places=6)
self.assertAlmostEqual(np.imag(eps_grid), np.imag(eps_pt), places=6)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_get_point.py b/python/tests/test_get_point.py
index 154336d92..146309b85 100644
--- a/python/tests/test_get_point.py
+++ b/python/tests/test_get_point.py
@@ -5,103 +5,115 @@
class TestGetPoint(unittest.TestCase):
-
def test_get_point(self):
- sxy = 6 # cell size
- dpml = 1 # thickness of PML
+ sxy = 6 # cell size
+ dpml = 1 # thickness of PML
def sinusoid(p):
- r = (p.x**2+p.y**2)**0.5
- return mp.Medium(index=1.0+math.sin(2*math.pi*r)**2)
+ r = (p.x**2 + p.y**2) ** 0.5
+ return mp.Medium(index=1.0 + math.sin(2 * math.pi * r) ** 2)
- geometry = [mp.Block(center=mp.Vector3(),
- size=mp.Vector3(sxy,sxy),
- material=sinusoid)]
+ geometry = [
+ mp.Block(center=mp.Vector3(), size=mp.Vector3(sxy, sxy), material=sinusoid)
+ ]
- src = [mp.Source(mp.GaussianSource(1.0, fwidth=0.1),
- component=mp.Ez,
- center=mp.Vector3())]
+ src = [
+ mp.Source(
+ mp.GaussianSource(1.0, fwidth=0.1), component=mp.Ez, center=mp.Vector3()
+ )
+ ]
- sim = mp.Simulation(cell_size=mp.Vector3(sxy,sxy),
- geometry=geometry,
- sources=src,
- k_point=mp.Vector3(),
- resolution=20,
- symmetries=[mp.Mirror(mp.X),mp.Mirror(mp.Y)],
- boundary_layers=[mp.PML(dpml)])
+ sim = mp.Simulation(
+ cell_size=mp.Vector3(sxy, sxy),
+ geometry=geometry,
+ sources=src,
+ k_point=mp.Vector3(),
+ resolution=20,
+ symmetries=[mp.Mirror(mp.X), mp.Mirror(mp.Y)],
+ boundary_layers=[mp.PML(dpml)],
+ )
sim.run(until_after_sources=100)
## reference values for Ez and epsilon from serial run
- ez_ref = [ -0.0002065983,
- -0.0001954795,
- -0.0000453570,
- 0.0000311267,
- -0.0000121473,
- -0.0000410032,
- -0.0000341301,
- -0.0000275021,
- -0.0000397990,
- -0.0000351730,
- 0.0000079602,
- 0.0000227437,
- -0.0001092821,
- -0.0002202751,
- -0.0001408186,
- 0.0006325076,
- 0.0024890489,
- 0.0027476069,
- 0.0014815873,
- 0.0004714913,
- -0.0004332029,
- -0.0007101315,
- -0.0003818581,
- -0.0000748507,
- 0.0001408819,
- 0.0001119776,
- 0.0000395008,
- 0.0000078844,
- -0.0000010431 ]
+ ez_ref = [
+ -0.0002065983,
+ -0.0001954795,
+ -0.0000453570,
+ 0.0000311267,
+ -0.0000121473,
+ -0.0000410032,
+ -0.0000341301,
+ -0.0000275021,
+ -0.0000397990,
+ -0.0000351730,
+ 0.0000079602,
+ 0.0000227437,
+ -0.0001092821,
+ -0.0002202751,
+ -0.0001408186,
+ 0.0006325076,
+ 0.0024890489,
+ 0.0027476069,
+ 0.0014815873,
+ 0.0004714913,
+ -0.0004332029,
+ -0.0007101315,
+ -0.0003818581,
+ -0.0000748507,
+ 0.0001408819,
+ 0.0001119776,
+ 0.0000395008,
+ 0.0000078844,
+ -0.0000010431,
+ ]
- eps_ref = [ 1.6458346134,
- 1.2752837068,
- 1.0974010956,
- 1.0398089537,
- 1.0465784716,
- 1.0779924737,
- 1.1059439286,
- 1.1135579291,
- 1.0971979186,
- 1.0653178566,
- 1.0391657283,
- 1.0513779677,
- 1.1466009312,
- 1.3882154483,
- 1.8496939317,
- 2.5617731415,
- 3.3788212533,
- 3.9019494270,
- 3.6743431894,
- 2.7285622651,
- 1.6635165033,
- 1.0891237010,
- 1.1485969863,
- 1.9498398061,
- 3.3100416367,
- 3.9038800599,
- 2.8471862395,
- 1.4742605488,
- 1.0370162714 ]
+ eps_ref = [
+ 1.6458346134,
+ 1.2752837068,
+ 1.0974010956,
+ 1.0398089537,
+ 1.0465784716,
+ 1.0779924737,
+ 1.1059439286,
+ 1.1135579291,
+ 1.0971979186,
+ 1.0653178566,
+ 1.0391657283,
+ 1.0513779677,
+ 1.1466009312,
+ 1.3882154483,
+ 1.8496939317,
+ 2.5617731415,
+ 3.3788212533,
+ 3.9019494270,
+ 3.6743431894,
+ 2.7285622651,
+ 1.6635165033,
+ 1.0891237010,
+ 1.1485969863,
+ 1.9498398061,
+ 3.3100416367,
+ 3.9038800599,
+ 2.8471862395,
+ 1.4742605488,
+ 1.0370162714,
+ ]
- x = np.linspace(-0.865692,2.692867,29)
+ x = np.linspace(-0.865692, 2.692867, 29)
places = 5 if mp.is_single_precision() else 10
for j in range(x.size):
- self.assertAlmostEqual(np.real(sim.get_field_point(mp.Ez, mp.Vector3(x[j],-0.394862))),
- ez_ref[j],
- places=places)
- self.assertAlmostEqual(sim.get_epsilon_point(mp.Vector3(x[j],2.967158)),
- eps_ref[j],
- places=places)
+ self.assertAlmostEqual(
+ np.real(sim.get_field_point(mp.Ez, mp.Vector3(x[j], -0.394862))),
+ ez_ref[j],
+ places=places,
+ )
+ self.assertAlmostEqual(
+ sim.get_epsilon_point(mp.Vector3(x[j], 2.967158)),
+ eps_ref[j],
+ places=places,
+ )
+
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_holey_wvg_bands.py b/python/tests/test_holey_wvg_bands.py
index 648c0c392..4f15f44d2 100644
--- a/python/tests/test_holey_wvg_bands.py
+++ b/python/tests/test_holey_wvg_bands.py
@@ -3,10 +3,11 @@
class TestHoleyWvgBands(unittest.TestCase):
-
def setUp(self):
cell = mp.Vector3(1, 12)
- b = mp.Block(size=mp.Vector3(mp.inf, 1.2, mp.inf), material=mp.Medium(epsilon=13))
+ b = mp.Block(
+ size=mp.Vector3(mp.inf, 1.2, mp.inf), material=mp.Medium(epsilon=13)
+ )
c = mp.Cylinder(0.36)
self.fcen = 0.25
@@ -15,7 +16,7 @@ def setUp(self):
s = mp.Source(
src=mp.GaussianSource(self.fcen, fwidth=self.df),
component=mp.Hz,
- center=mp.Vector3(0.1234)
+ center=mp.Vector3(0.1234),
)
sym = mp.Mirror(direction=mp.Y, phase=-1)
@@ -26,17 +27,19 @@ def setUp(self):
sources=[s],
symmetries=[sym],
boundary_layers=[mp.PML(1, direction=mp.Y)],
- resolution=20
+ resolution=20,
)
def test_run_k_points(self):
- all_freqs = self.sim.run_k_points(5, mp.interpolate(19, [mp.Vector3(), mp.Vector3(0.5)]))
+ all_freqs = self.sim.run_k_points(
+ 5, mp.interpolate(19, [mp.Vector3(), mp.Vector3(0.5)])
+ )
expected = [
(0.1942497850393511, 0.001381460274205755),
(0.19782709203322993, -0.0013233828667934015),
(0.1927618763491877, 0.001034260690735336),
- (0.19335527231544278, 4.6649450258959025e-4)
+ (0.19335527231544278, 4.6649450258959025e-4),
]
self.assertTrue(any(all_freqs))
@@ -71,5 +74,5 @@ def test_fields_at_kx(self):
self.assertAlmostEqual(m.decay, i, places=places)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_holey_wvg_cavity.py b/python/tests/test_holey_wvg_cavity.py
index 4227074c6..44e7f5386 100644
--- a/python/tests/test_holey_wvg_cavity.py
+++ b/python/tests/test_holey_wvg_cavity.py
@@ -4,7 +4,6 @@
class TestHoleyWvgCavity(ApproxComparisonTestCase):
-
def setUp(self):
eps = 13
self.w = 1.2
@@ -21,8 +20,9 @@ def setUp(self):
cell = mp.Vector3(self.sx, sy, 0)
- blk = mp.Block(size=mp.Vector3(mp.inf, self.w, mp.inf),
- material=mp.Medium(epsilon=eps))
+ blk = mp.Block(
+ size=mp.Vector3(mp.inf, self.w, mp.inf), material=mp.Medium(epsilon=eps)
+ )
geometry = [blk]
@@ -30,11 +30,13 @@ def setUp(self):
for i in range(3):
geometry.append(mp.Cylinder(r, center=mp.Vector3(d / -2 - i)))
- self.sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- sources=[],
- boundary_layers=[mp.PML(self.dpml)],
- resolution=20)
+ self.sim = mp.Simulation(
+ cell_size=cell,
+ geometry=geometry,
+ sources=[],
+ boundary_layers=[mp.PML(self.dpml)],
+ resolution=20,
+ )
@classmethod
def setUpClass(cls):
@@ -45,17 +47,19 @@ def tearDownClass(cls):
mp.delete_directory(cls.temp_dir)
def test_resonant_modes(self):
- self.sim.sources = [mp.Source(mp.GaussianSource(self.fcen, fwidth=self.df),
- mp.Hz, mp.Vector3())]
+ self.sim.sources = [
+ mp.Source(mp.GaussianSource(self.fcen, fwidth=self.df), mp.Hz, mp.Vector3())
+ ]
- self.sim.symmetries = [mp.Mirror(mp.Y, phase=-1),
- mp.Mirror(mp.X, phase=-1)]
+ self.sim.symmetries = [mp.Mirror(mp.Y, phase=-1), mp.Mirror(mp.X, phase=-1)]
self.sim.use_output_directory(self.temp_dir)
h = mp.Harminv(mp.Hz, mp.Vector3(), self.fcen, self.df)
- self.sim.run(mp.at_beginning(mp.output_epsilon),
- mp.after_sources(h),
- until_after_sources=400)
+ self.sim.run(
+ mp.at_beginning(mp.output_epsilon),
+ mp.after_sources(h),
+ until_after_sources=400,
+ )
expected = [
0.23445415346009466,
@@ -123,21 +127,29 @@ def test_transmission_spectrum(self):
]
self.sim.sources = [
- mp.Source(mp.GaussianSource(self.fcen, fwidth=self.df), mp.Ey,
- mp.Vector3(self.dpml + (-0.5 * self.sx)), size=mp.Vector3(0, self.w))
+ mp.Source(
+ mp.GaussianSource(self.fcen, fwidth=self.df),
+ mp.Ey,
+ mp.Vector3(self.dpml + (-0.5 * self.sx)),
+ size=mp.Vector3(0, self.w),
+ )
]
self.sim.symmetries = [mp.Mirror(mp.Y, phase=-1)]
- freg = mp.FluxRegion(center=mp.Vector3((0.5 * self.sx) - self.dpml - 0.5),
- size=mp.Vector3(0, 2 * self.w))
+ freg = mp.FluxRegion(
+ center=mp.Vector3((0.5 * self.sx) - self.dpml - 0.5),
+ size=mp.Vector3(0, 2 * self.w),
+ )
- trans = self.sim.add_flux(self.fcen, self.df, self.nfreq, freg,
- decimation_factor=1)
+ trans = self.sim.add_flux(
+ self.fcen, self.df, self.nfreq, freg, decimation_factor=1
+ )
self.sim.run(
until_after_sources=mp.stop_when_fields_decayed(
- 50, mp.Ey, mp.Vector3((0.5 * self.sx) - self.dpml - 0.5, 0), 1e-1)
+ 50, mp.Ey, mp.Vector3((0.5 * self.sx) - self.dpml - 0.5, 0), 1e-1
+ )
)
res = zip(mp.get_flux_freqs(trans), mp.get_fluxes(trans))
@@ -147,6 +159,5 @@ def test_transmission_spectrum(self):
self.assertClose(e, r, epsilon=tol)
-
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_integrated_source.py b/python/tests/test_integrated_source.py
index 61717090b..f380ceff4 100644
--- a/python/tests/test_integrated_source.py
+++ b/python/tests/test_integrated_source.py
@@ -7,18 +7,24 @@
# https://meep.readthedocs.io/en/latest/Perfectly_Matched_Layer/#planewave-sources-extending-into-pml
# Regression test for issue #2043.
-class TestIntegratedSource(unittest.TestCase):
+class TestIntegratedSource(unittest.TestCase):
def test_integrated_source(self):
- sources = [mp.Source(mp.ContinuousSource(1,is_integrated=True),
- center=mp.Vector3(-2),
- size=mp.Vector3(y=6),
- component=mp.Ez)]
- sim = mp.Simulation(resolution=20,
- cell_size=(6,6),
- boundary_layers=[mp.PML(thickness=1)],
- sources=sources,
- k_point=mp.Vector3())
+ sources = [
+ mp.Source(
+ mp.ContinuousSource(1, is_integrated=True),
+ center=mp.Vector3(-2),
+ size=mp.Vector3(y=6),
+ component=mp.Ez,
+ )
+ ]
+ sim = mp.Simulation(
+ resolution=20,
+ cell_size=(6, 6),
+ boundary_layers=[mp.PML(thickness=1)],
+ sources=sources,
+ k_point=mp.Vector3(),
+ )
sim.run(until=30)
# field in mid-plane should be nearly constant,
@@ -26,7 +32,8 @@ def test_integrated_source(self):
ez = sim.get_array(mp.Ez, center=mp.Vector3(2), size=mp.Vector3(y=6))
std = np.std(ez) / np.sqrt(np.mean(ez**2))
print("std = ", std)
- self.assertAlmostEqual(std, 0.0, places = 4 if mp.is_single_precision() else 8)
+ self.assertAlmostEqual(std, 0.0, places=4 if mp.is_single_precision() else 8)
+
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_kdom.py b/python/tests/test_kdom.py
index f61618c3f..87f430a9a 100644
--- a/python/tests/test_kdom.py
+++ b/python/tests/test_kdom.py
@@ -2,50 +2,59 @@
import meep as mp
import math
+
class TestKdom(unittest.TestCase):
+ def run_kdom(self, theta, num_band):
+
+ resolution = 20 # pixels/um
+
+ sx = 5
+ sy = 10
+ cell_size = mp.Vector3(sx, sy, 0)
- def run_kdom(self, theta, num_band):
+ fcen = 1 # center frequency (wavelength = 1 um)
+ ng = 1.5
+ glass = mp.Medium(index=ng)
- resolution = 20 # pixels/um
+ # angle of incident planewave; CCW about Y axis, 0 degrees along +X axis
+ theta_in = math.radians(theta)
- sx = 5
- sy = 10
- cell_size = mp.Vector3(sx,sy,0)
+ # k (in source medium) with correct length (plane of incidence: XY)
+ k = mp.Vector3(math.cos(theta_in), math.sin(theta_in), 0).scale(fcen * ng)
- fcen = 1 # center frequency (wavelength = 1 um)
- ng = 1.5
- glass = mp.Medium(index=ng)
+ symmetries = []
+ eig_parity = mp.ODD_Z
+ if theta_in == 0:
+ k = mp.Vector3(0, 0, 0)
+ eig_parity += mp.EVEN_Y
+ symmetries = [mp.Mirror(mp.Y)]
- # angle of incident planewave; CCW about Y axis, 0 degrees along +X axis
- theta_in = math.radians(theta)
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ k_point=k,
+ symmetries=symmetries,
+ default_material=glass,
+ )
- # k (in source medium) with correct length (plane of incidence: XY)
- k = mp.Vector3(math.cos(theta_in),math.sin(theta_in),0).scale(fcen*ng)
+ sim.init_sim()
- symmetries = []
- eig_parity = mp.ODD_Z
- if theta_in == 0:
- k = mp.Vector3(0,0,0)
- eig_parity += mp.EVEN_Y
- symmetries = [mp.Mirror(mp.Y)]
+ EigenmodeData = sim.get_eigenmode(
+ fcen,
+ mp.X,
+ mp.Volume(center=mp.Vector3(0.3 * sx, 0, 0), size=mp.Vector3(0, sy, 0)),
+ num_band,
+ k,
+ parity=eig_parity,
+ )
+ kdom = EigenmodeData.kdom
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- k_point=k,
- symmetries=symmetries,
- default_material=glass)
+ self.assertAlmostEqual(k.y, kdom.y, places=15)
- sim.init_sim()
+ def test_kdom(self):
+ self.run_kdom(10.7, 6)
+ self.run_kdom(22.9, 12)
- EigenmodeData = sim.get_eigenmode(fcen, mp.X, mp.Volume(center=mp.Vector3(0.3*sx,0,0), size=mp.Vector3(0,sy,0)),
- num_band, k, parity=eig_parity)
- kdom = EigenmodeData.kdom
- self.assertAlmostEqual(k.y,kdom.y,places=15)
-
- def test_kdom(self):
- self.run_kdom(10.7, 6)
- self.run_kdom(22.9, 12)
-
-if __name__ == '__main__':
- unittest.main()
+if __name__ == "__main__":
+ unittest.main()
diff --git a/python/tests/test_ldos.py b/python/tests/test_ldos.py
index 9807ad6f8..2536c1a74 100644
--- a/python/tests/test_ldos.py
+++ b/python/tests/test_ldos.py
@@ -9,184 +9,214 @@
class TestLDOS(unittest.TestCase):
-
@classmethod
def setUp(cls):
cls.resolution = 25 # pixels/μm
- cls.dpml = 0.5 # thickness of PML
- cls.L = 6.0 # length of non-PML region
- cls.n = 2.4 # refractive index of surrounding medium
- cls.wvl = 1.0 # wavelength (in vacuum)
-
- cls.fcen = 1/cls.wvl
+ cls.dpml = 0.5 # thickness of PML
+ cls.L = 6.0 # length of non-PML region
+ cls.n = 2.4 # refractive index of surrounding medium
+ cls.wvl = 1.0 # wavelength (in vacuum)
+ cls.fcen = 1 / cls.wvl
def bulk_ldos_cyl(self):
- sr = self.L+self.dpml
- sz = self.L+2*self.dpml
- cell_size = mp.Vector3(sr,0,sz)
+ sr = self.L + self.dpml
+ sz = self.L + 2 * self.dpml
+ cell_size = mp.Vector3(sr, 0, sz)
pml_layers = [mp.PML(self.dpml)]
- sources = [mp.Source(src=mp.GaussianSource(self.fcen,fwidth=0.2*self.fcen),
- component=mp.Er,
- center=mp.Vector3())]
-
- sim = mp.Simulation(resolution=self.resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- sources=sources,
- dimensions=mp.CYLINDRICAL,
- m=-1,
- default_material=mp.Medium(index=self.n))
-
- sim.run(mp.dft_ldos(self.fcen,0,1),
- until_after_sources=mp.stop_when_fields_decayed(20,
- mp.Er,
- mp.Vector3(),
- 1e-6))
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(self.fcen, fwidth=0.2 * self.fcen),
+ component=mp.Er,
+ center=mp.Vector3(),
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=self.resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ sources=sources,
+ dimensions=mp.CYLINDRICAL,
+ m=-1,
+ default_material=mp.Medium(index=self.n),
+ )
+
+ sim.run(
+ mp.dft_ldos(self.fcen, 0, 1),
+ until_after_sources=mp.stop_when_fields_decayed(
+ 20, mp.Er, mp.Vector3(), 1e-6
+ ),
+ )
return sim.ldos_data[0]
-
- def cavity_ldos_cyl(self,sz):
- sr = self.L+self.dpml
- cell_size = mp.Vector3(sr,0,sz)
-
- pml_layers = [mp.PML(self.dpml,direction=mp.R)]
-
- sources = [mp.Source(src=mp.GaussianSource(self.fcen,fwidth=0.2*self.fcen),
- component=mp.Er,
- center=mp.Vector3())]
-
- sim = mp.Simulation(resolution=self.resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- sources=sources,
- dimensions=mp.CYLINDRICAL,
- m=-1,
- default_material=mp.Medium(index=self.n))
-
- sim.run(mp.dft_ldos(self.fcen,0,1),
- until_after_sources=mp.stop_when_fields_decayed(20,
- mp.Er,
- mp.Vector3(),
- 1e-6))
+ def cavity_ldos_cyl(self, sz):
+ sr = self.L + self.dpml
+ cell_size = mp.Vector3(sr, 0, sz)
+
+ pml_layers = [mp.PML(self.dpml, direction=mp.R)]
+
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(self.fcen, fwidth=0.2 * self.fcen),
+ component=mp.Er,
+ center=mp.Vector3(),
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=self.resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ sources=sources,
+ dimensions=mp.CYLINDRICAL,
+ m=-1,
+ default_material=mp.Medium(index=self.n),
+ )
+
+ sim.run(
+ mp.dft_ldos(self.fcen, 0, 1),
+ until_after_sources=mp.stop_when_fields_decayed(
+ 20, mp.Er, mp.Vector3(), 1e-6
+ ),
+ )
return sim.ldos_data[0]
-
def bulk_ldos_3D(self):
- s = self.L+2*self.dpml
- cell_size = mp.Vector3(s,s,s)
+ s = self.L + 2 * self.dpml
+ cell_size = mp.Vector3(s, s, s)
pml_layers = [mp.PML(self.dpml)]
- sources = [mp.Source(src=mp.GaussianSource(self.fcen,fwidth=0.2*self.fcen),
- component=mp.Ex,
- center=mp.Vector3())]
-
- symmetries = [mp.Mirror(direction=mp.X,phase=-1),
- mp.Mirror(direction=mp.Y),
- mp.Mirror(direction=mp.Z)]
-
- sim = mp.Simulation(resolution=self.resolution,
- cell_size=cell_size,
- boundary_layers=pml_layers,
- sources=sources,
- symmetries=symmetries,
- default_material=mp.Medium(index=self.n))
-
- sim.run(mp.dft_ldos(self.fcen,0,1),
- until_after_sources=mp.stop_when_fields_decayed(20,
- mp.Ex,
- mp.Vector3(),
- 1e-6))
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(self.fcen, fwidth=0.2 * self.fcen),
+ component=mp.Ex,
+ center=mp.Vector3(),
+ )
+ ]
+
+ symmetries = [
+ mp.Mirror(direction=mp.X, phase=-1),
+ mp.Mirror(direction=mp.Y),
+ mp.Mirror(direction=mp.Z),
+ ]
+
+ sim = mp.Simulation(
+ resolution=self.resolution,
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ sources=sources,
+ symmetries=symmetries,
+ default_material=mp.Medium(index=self.n),
+ )
+
+ sim.run(
+ mp.dft_ldos(self.fcen, 0, 1),
+ until_after_sources=mp.stop_when_fields_decayed(
+ 20, mp.Ex, mp.Vector3(), 1e-6
+ ),
+ )
return sim.ldos_data[0]
-
- def cavity_ldos_3D(self,sz):
- sxy = self.L+2*self.dpml
- cell_size = mp.Vector3(sxy,sxy,sz)
-
- boundary_layers = [mp.PML(self.dpml,direction=mp.X),
- mp.PML(self.dpml,direction=mp.Y)]
-
- sources = [mp.Source(src=mp.GaussianSource(self.fcen,fwidth=0.2*self.fcen),
- component=mp.Ex,
- center=mp.Vector3())]
-
- symmetries = [mp.Mirror(direction=mp.X,phase=-1),
- mp.Mirror(direction=mp.Y),
- mp.Mirror(direction=mp.Z)]
-
- sim = mp.Simulation(resolution=self.resolution,
- cell_size=cell_size,
- boundary_layers=boundary_layers,
- sources=sources,
- symmetries=symmetries,
- default_material=mp.Medium(index=self.n))
-
- sim.run(mp.dft_ldos(ldos=mp.Ldos(self.fcen,0,1)),
- until_after_sources=mp.stop_when_fields_decayed(20,
- mp.Ex,
- mp.Vector3(),
- 1e-6))
+ def cavity_ldos_3D(self, sz):
+ sxy = self.L + 2 * self.dpml
+ cell_size = mp.Vector3(sxy, sxy, sz)
+
+ boundary_layers = [
+ mp.PML(self.dpml, direction=mp.X),
+ mp.PML(self.dpml, direction=mp.Y),
+ ]
+
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(self.fcen, fwidth=0.2 * self.fcen),
+ component=mp.Ex,
+ center=mp.Vector3(),
+ )
+ ]
+
+ symmetries = [
+ mp.Mirror(direction=mp.X, phase=-1),
+ mp.Mirror(direction=mp.Y),
+ mp.Mirror(direction=mp.Z),
+ ]
+
+ sim = mp.Simulation(
+ resolution=self.resolution,
+ cell_size=cell_size,
+ boundary_layers=boundary_layers,
+ sources=sources,
+ symmetries=symmetries,
+ default_material=mp.Medium(index=self.n),
+ )
+
+ sim.run(
+ mp.dft_ldos(ldos=mp.Ldos(self.fcen, 0, 1)),
+ until_after_sources=mp.stop_when_fields_decayed(
+ 20, mp.Ex, mp.Vector3(), 1e-6
+ ),
+ )
return sim.ldos_data[0]
-
- def purcell_enh_theory(self,c):
+ def purcell_enh_theory(self, c):
# equation 7 of reference
- return (3*np.fix(c+0.5)/(4*c) +
- (4*np.power(np.fix(c+0.5),3) -
- np.fix(c+0.5))/(16*np.power(c,3)))
-
+ return 3 * np.fix(c + 0.5) / (4 * c) + (
+ 4 * np.power(np.fix(c + 0.5), 3) - np.fix(c + 0.5)
+ ) / (16 * np.power(c, 3))
def test_ldos_cyl(self):
ldos_bulk = self.bulk_ldos_cyl()
# not a Van Hove singularity
cavity_thickness = 1.63
- gap = cavity_thickness*self.wvl/self.n
+ gap = cavity_thickness * self.wvl / self.n
ldos_cavity = self.cavity_ldos_cyl(gap)
# Purcell enhancement factor (relative to bulk medium)
- pe_meep = ldos_cavity/ldos_bulk
+ pe_meep = ldos_cavity / ldos_bulk
pe_theory = self.purcell_enh_theory(cavity_thickness)
- rel_err = abs(pe_meep-pe_theory)/pe_theory
+ rel_err = abs(pe_meep - pe_theory) / pe_theory
- print("ldos-cyl:, {:.6f} (Meep), {:.6f} (theory), "
- "{:.6f} (error)".format(pe_meep,pe_theory,rel_err))
+ print(
+ "ldos-cyl:, {:.6f} (Meep), {:.6f} (theory), "
+ "{:.6f} (error)".format(pe_meep, pe_theory, rel_err)
+ )
self.assertAlmostEqual(pe_meep, pe_theory, delta=0.1)
-
def test_ldos_3D(self):
ldos_bulk = self.bulk_ldos_3D()
# not a Van Hove singularity
cavity_thickness = 0.75
- gap = cavity_thickness*self.wvl/self.n
+ gap = cavity_thickness * self.wvl / self.n
ldos_cavity = self.cavity_ldos_3D(gap)
# Purcell enhancement factor (relative to bulk medium)
- pe_meep = ldos_cavity/ldos_bulk
+ pe_meep = ldos_cavity / ldos_bulk
pe_theory = self.purcell_enh_theory(cavity_thickness)
- rel_err = abs(pe_meep-pe_theory)/pe_theory
+ rel_err = abs(pe_meep - pe_theory) / pe_theory
- print("ldos-3D:, {:.6f} (Meep), {:.6f} (theory), "
- "{:.6f} (error)".format(pe_meep,pe_theory,rel_err))
+ print(
+ "ldos-3D:, {:.6f} (Meep), {:.6f} (theory), "
+ "{:.6f} (error)".format(pe_meep, pe_theory, rel_err)
+ )
self.assertAlmostEqual(pe_meep, pe_theory, delta=0.1)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_material_dispersion.py b/python/tests/test_material_dispersion.py
index 220df72c1..1ffcd5186 100644
--- a/python/tests/test_material_dispersion.py
+++ b/python/tests/test_material_dispersion.py
@@ -4,11 +4,10 @@
class TestMaterialDispersion(unittest.TestCase):
-
def test_material_dispersion_with_user_material(self):
susceptibilities = [
mp.LorentzianSusceptibility(frequency=1.1, gamma=1e-5, sigma=0.5),
- mp.LorentzianSusceptibility(frequency=0.5, gamma=0.1, sigma=2e-5)
+ mp.LorentzianSusceptibility(frequency=0.5, gamma=0.1, sigma=2e-5),
]
def mat_func(p):
@@ -18,9 +17,7 @@ def mat_func(p):
df = 2.0
sources = mp.Source(
- mp.GaussianSource(fcen, fwidth=df),
- component=mp.Ez,
- center=mp.Vector3()
+ mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=mp.Vector3()
)
kmin = 0.3
@@ -35,7 +32,7 @@ def mat_func(p):
sources=[sources],
material_function=mat_func,
default_material=mp.air,
- resolution=20
+ resolution=20,
)
all_freqs = self.sim.run_k_points(200, kpts)
@@ -54,5 +51,5 @@ def mat_func(p):
np.testing.assert_allclose(expected, res)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_material_grid.py b/python/tests/test_material_grid.py
index 7ffa3e54c..a5d7acf30 100644
--- a/python/tests/test_material_grid.py
+++ b/python/tests/test_material_grid.py
@@ -1,4 +1,5 @@
import meep as mp
+
try:
import meep.adjoint as mpa
except:
@@ -11,118 +12,153 @@
def compute_transmittance(matgrid_symmetry=False):
resolution = 25
- cell_size = mp.Vector3(6,6,0)
+ cell_size = mp.Vector3(6, 6, 0)
boundary_layers = [mp.PML(thickness=1.0)]
- matgrid_size = mp.Vector3(2,2,0)
- matgrid_resolution = 2*resolution
+ matgrid_size = mp.Vector3(2, 2, 0)
+ matgrid_resolution = 2 * resolution
- Nx, Ny = int(matgrid_size.x*matgrid_resolution), int(matgrid_size.y*matgrid_resolution)
+ Nx, Ny = int(matgrid_size.x * matgrid_resolution), int(
+ matgrid_size.y * matgrid_resolution
+ )
# ensure reproducible results
rng = np.random.RandomState(2069588)
- w = rng.rand(Nx,Ny)
+ w = rng.rand(Nx, Ny)
weights = w if matgrid_symmetry else 0.5 * (w + np.fliplr(w))
- matgrid = mp.MaterialGrid(mp.Vector3(Nx,Ny),
- mp.air,
- mp.Medium(index=3.5),
- weights=weights,
- do_averaging=False,
- grid_type='U_MEAN')
-
- geometry = [mp.Block(center=mp.Vector3(),
- size=mp.Vector3(mp.inf,1.0,mp.inf),
- material=mp.Medium(index=3.5)),
- mp.Block(center=mp.Vector3(),
- size=mp.Vector3(matgrid_size.x,matgrid_size.y,0),
- material=matgrid)]
+ matgrid = mp.MaterialGrid(
+ mp.Vector3(Nx, Ny),
+ mp.air,
+ mp.Medium(index=3.5),
+ weights=weights,
+ do_averaging=False,
+ grid_type="U_MEAN",
+ )
+
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(mp.inf, 1.0, mp.inf),
+ material=mp.Medium(index=3.5),
+ ),
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(matgrid_size.x, matgrid_size.y, 0),
+ material=matgrid,
+ ),
+ ]
if matgrid_symmetry:
- geometry.append(mp.Block(center=mp.Vector3(),
- size=mp.Vector3(matgrid_size.x,matgrid_size.y,0),
- material=matgrid,
- e2=mp.Vector3(y=-1)))
+ geometry.append(
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(matgrid_size.x, matgrid_size.y, 0),
+ material=matgrid,
+ e2=mp.Vector3(y=-1),
+ )
+ )
eig_parity = mp.ODD_Y + mp.EVEN_Z
fcen = 0.65
- df = 0.2*fcen
- sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen,fwidth=df),
- center=mp.Vector3(-2.0,0),
- size=mp.Vector3(0,4.0),
- eig_parity=eig_parity)]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=boundary_layers,
- sources=sources,
- geometry=geometry)
-
- mode_mon = sim.add_flux(fcen,
- 0,
- 1,
- mp.FluxRegion(center=mp.Vector3(2.0,0),
- size=mp.Vector3(0,4.0)))
+ df = 0.2 * fcen
+ sources = [
+ mp.EigenModeSource(
+ src=mp.GaussianSource(fcen, fwidth=df),
+ center=mp.Vector3(-2.0, 0),
+ size=mp.Vector3(0, 4.0),
+ eig_parity=eig_parity,
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=boundary_layers,
+ sources=sources,
+ geometry=geometry,
+ )
+
+ mode_mon = sim.add_flux(
+ fcen, 0, 1, mp.FluxRegion(center=mp.Vector3(2.0, 0), size=mp.Vector3(0, 4.0))
+ )
sim.run(until_after_sources=mp.stop_when_dft_decayed())
- mode_coeff = sim.get_eigenmode_coefficients(mode_mon,[1],eig_parity).alpha[0,:,0][0]
+ mode_coeff = sim.get_eigenmode_coefficients(mode_mon, [1], eig_parity).alpha[
+ 0, :, 0
+ ][0]
- tran = np.power(np.abs(mode_coeff),2)
+ tran = np.power(np.abs(mode_coeff), 2)
print(f'tran:, {"sym" if matgrid_symmetry else "nosym"}, {tran}')
return tran
-def compute_resonant_mode_2d(res,default_mat=False):
- cell_size = mp.Vector3(1,1,0)
+def compute_resonant_mode_2d(res, default_mat=False):
+ cell_size = mp.Vector3(1, 1, 0)
rad = 0.301943
fcen = 0.3
- df = 0.2*fcen
- sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
- component=mp.Hz,
- center=mp.Vector3(-0.1057,0.2094,0))]
-
- k_point = mp.Vector3(0.3892,0.1597,0)
-
- matgrid_size = mp.Vector3(1,1,0)
+ df = 0.2 * fcen
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Hz,
+ center=mp.Vector3(-0.1057, 0.2094, 0),
+ )
+ ]
+
+ k_point = mp.Vector3(0.3892, 0.1597, 0)
+
+ matgrid_size = mp.Vector3(1, 1, 0)
matgrid_resolution = 1200
# for a fixed resolution, compute the number of grid points
# necessary which are defined on the corners of the voxels
- Nx, Ny = int(matgrid_size.x*matgrid_resolution), int(matgrid_size.y*matgrid_resolution)
+ Nx, Ny = int(matgrid_size.x * matgrid_resolution), int(
+ matgrid_size.y * matgrid_resolution
+ )
- x = np.linspace(-0.5*matgrid_size.x,0.5*matgrid_size.x,Nx)
- y = np.linspace(-0.5*matgrid_size.y,0.5*matgrid_size.y,Ny)
- xv, yv = np.meshgrid(x,y)
+ x = np.linspace(-0.5 * matgrid_size.x, 0.5 * matgrid_size.x, Nx)
+ y = np.linspace(-0.5 * matgrid_size.y, 0.5 * matgrid_size.y, Ny)
+ xv, yv = np.meshgrid(x, y)
weights = np.sqrt(np.square(xv) + np.square(yv)) < rad
- filtered_weights = gaussian_filter(weights,
- sigma=3.0,
- output=np.double)
-
- matgrid = mp.MaterialGrid(mp.Vector3(Nx,Ny),
- mp.air,
- mp.Medium(index=3.5),
- weights=filtered_weights,
- do_averaging=True,
- beta=1000,
- eta=0.5)
-
- geometry = [mp.Block(center=mp.Vector3(),
- size=mp.Vector3(matgrid_size.x,matgrid_size.y,0),
- material=matgrid)]
-
- sim = mp.Simulation(resolution=res, cell_size=cell_size, default_material=matgrid if default_mat else mp.Medium(), geometry=[] if default_mat else geometry, sources=sources, k_point=k_point)
-
-
- h = mp.Harminv(mp.Hz, mp.Vector3(0.3718,-0.2076), fcen, df)
- sim.run(mp.after_sources(h),
- until_after_sources=200)
+ filtered_weights = gaussian_filter(weights, sigma=3.0, output=np.double)
+
+ matgrid = mp.MaterialGrid(
+ mp.Vector3(Nx, Ny),
+ mp.air,
+ mp.Medium(index=3.5),
+ weights=filtered_weights,
+ do_averaging=True,
+ beta=1000,
+ eta=0.5,
+ )
+
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(matgrid_size.x, matgrid_size.y, 0),
+ material=matgrid,
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=res,
+ cell_size=cell_size,
+ default_material=matgrid if default_mat else mp.Medium(),
+ geometry=[] if default_mat else geometry,
+ sources=sources,
+ k_point=k_point,
+ )
+
+ h = mp.Harminv(mp.Hz, mp.Vector3(0.3718, -0.2076), fcen, df)
+ sim.run(mp.after_sources(h), until_after_sources=200)
try:
for m in h.modes:
@@ -138,8 +174,8 @@ def compute_resonant_mode_3d(use_matgrid=True):
resolution = 25
wvl = 1.27
- fcen = 1/wvl
- df = 0.02*fcen
+ fcen = 1 / wvl
+ df = 0.02 * fcen
nSi = 3.45
Si = mp.Medium(index=nSi)
@@ -147,55 +183,58 @@ def compute_resonant_mode_3d(use_matgrid=True):
SiO2 = mp.Medium(index=nSiO2)
s = 1.0
- cell_size = mp.Vector3(s,s,s)
+ cell_size = mp.Vector3(s, s, s)
rad = 0.34 # radius of sphere
if use_matgrid:
- matgrid_resolution = 2*resolution
- N = int(s*matgrid_resolution)
- coord = np.linspace(-0.5*s,0.5*s,N)
- xv, yv, zv = np.meshgrid(coord,coord,coord)
+ matgrid_resolution = 2 * resolution
+ N = int(s * matgrid_resolution)
+ coord = np.linspace(-0.5 * s, 0.5 * s, N)
+ xv, yv, zv = np.meshgrid(coord, coord, coord)
weights = np.sqrt(np.square(xv) + np.square(yv) + np.square(zv)) < rad
- filtered_weights = gaussian_filter(weights,
- sigma=4/resolution,
- output=np.double)
-
- matgrid = mp.MaterialGrid(mp.Vector3(N,N,N),
- SiO2,
- Si,
- weights=filtered_weights,
- do_averaging=True,
- beta=1000,
- eta=0.5)
-
- geometry = [mp.Block(center=mp.Vector3(),
- size=cell_size,
- material=matgrid)]
+ filtered_weights = gaussian_filter(
+ weights, sigma=4 / resolution, output=np.double
+ )
+
+ matgrid = mp.MaterialGrid(
+ mp.Vector3(N, N, N),
+ SiO2,
+ Si,
+ weights=filtered_weights,
+ do_averaging=True,
+ beta=1000,
+ eta=0.5,
+ )
+
+ geometry = [mp.Block(center=mp.Vector3(), size=cell_size, material=matgrid)]
else:
- geometry = [mp.Sphere(center=mp.Vector3(),
- radius=rad,
- material=Si)]
+ geometry = [mp.Sphere(center=mp.Vector3(), radius=rad, material=Si)]
- sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=df),
- size=mp.Vector3(),
- center=mp.Vector3(0.13,0.25,0.06),
- component=mp.Ez)]
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=df),
+ size=mp.Vector3(),
+ center=mp.Vector3(0.13, 0.25, 0.06),
+ component=mp.Ez,
+ )
+ ]
- k_point = mp.Vector3(0.23,-0.17,0.35)
+ k_point = mp.Vector3(0.23, -0.17, 0.35)
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- sources=sources,
- default_material=SiO2,
- k_point=k_point,
- geometry=geometry)
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ sources=sources,
+ default_material=SiO2,
+ k_point=k_point,
+ geometry=geometry,
+ )
- h = mp.Harminv(mp.Ez, mp.Vector3(-0.2684,0.1185,0.0187), fcen, df)
+ h = mp.Harminv(mp.Ez, mp.Vector3(-0.2684, 0.1185, 0.0187), fcen, df)
- sim.run(mp.after_sources(h),
- until_after_sources=200)
+ sim.run(mp.after_sources(h), until_after_sources=200)
try:
for m in h.modes:
@@ -208,7 +247,6 @@ def compute_resonant_mode_3d(use_matgrid=True):
class TestMaterialGrid(unittest.TestCase):
-
def test_subpixel_smoothing(self):
# "exact" frequency computed using MaterialGrid at resolution = 300
freq_ref = 0.29826813873225283
@@ -223,23 +261,24 @@ def test_subpixel_smoothing(self):
# verify that the relative error is decreasing with increasing resolution
# and is better than linear convergence because of subpixel smoothing
- self.assertLess(abs(freq_matgrid[1]-freq_ref)*(res[1]/res[0]),
- abs(freq_matgrid[0]-freq_ref))
+ self.assertLess(
+ abs(freq_matgrid[1] - freq_ref) * (res[1] / res[0]),
+ abs(freq_matgrid[0] - freq_ref),
+ )
freq_matgrid_default_mat = compute_resonant_mode_2d(res[0], True)
self.assertAlmostEqual(freq_matgrid[0], freq_matgrid_default_mat)
-
def test_matgrid_3d(self):
freq_matgrid = compute_resonant_mode_3d(True)
freq_geomobj = compute_resonant_mode_3d(False)
self.assertAlmostEqual(freq_matgrid, freq_geomobj, places=2)
-
def test_symmetry(self):
- tran_nosym = compute_transmittance(False)
- tran_sym = compute_transmittance(True)
- self.assertAlmostEqual(tran_nosym, tran_sym, places=5)
+ tran_nosym = compute_transmittance(False)
+ tran_sym = compute_transmittance(True)
+ self.assertAlmostEqual(tran_nosym, tran_sym, places=5)
+
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_materials_library.py b/python/tests/test_materials_library.py
index 1e61af952..99d79d544 100644
--- a/python/tests/test_materials_library.py
+++ b/python/tests/test_materials_library.py
@@ -3,34 +3,43 @@
class TestMaterialsLibrary(unittest.TestCase):
-
def test_materials_library(self):
- self.assertAlmostEqual(InP.epsilon(1/3.3)[0][0], (3.1031)**2, places=2)
+ self.assertAlmostEqual(InP.epsilon(1 / 3.3)[0][0], (3.1031) ** 2, places=2)
- self.assertAlmostEqual(Ge.epsilon(1/6.8)[0][0], (4.0091)**2, places=2)
+ self.assertAlmostEqual(Ge.epsilon(1 / 6.8)[0][0], (4.0091) ** 2, places=2)
- self.assertAlmostEqual(Si.epsilon(1/1.55)[0][0], (3.4777)**2, places=2)
+ self.assertAlmostEqual(Si.epsilon(1 / 1.55)[0][0], (3.4777) ** 2, places=2)
- self.assertAlmostEqual(LiNbO3.epsilon(1/1.55)[0][0], (2.2111)**2, places=2)
- self.assertAlmostEqual(LiNbO3.epsilon(1/1.55)[1][1], (2.2111)**2, places=2)
- self.assertAlmostEqual(LiNbO3.epsilon(1/1.55)[2][2], (2.1376)**2, places=2)
+ self.assertAlmostEqual(LiNbO3.epsilon(1 / 1.55)[0][0], (2.2111) ** 2, places=2)
+ self.assertAlmostEqual(LiNbO3.epsilon(1 / 1.55)[1][1], (2.2111) ** 2, places=2)
+ self.assertAlmostEqual(LiNbO3.epsilon(1 / 1.55)[2][2], (2.1376) ** 2, places=2)
- self.assertAlmostEqual(SiO2_aniso.epsilon(1/1.55)[0][0], (1.5277)**2, places=2)
- self.assertEqual(SiO2_aniso.epsilon(1/1.55)[1][0], 0)
- self.assertAlmostEqual(SiO2_aniso.epsilon(1/1.55)[1][1], (1.5277)**2, places=2)
- self.assertAlmostEqual(SiO2_aniso.epsilon(1/1.55)[2][2], (1.5362)**2, places=2)
+ self.assertAlmostEqual(
+ SiO2_aniso.epsilon(1 / 1.55)[0][0], (1.5277) ** 2, places=2
+ )
+ self.assertEqual(SiO2_aniso.epsilon(1 / 1.55)[1][0], 0)
+ self.assertAlmostEqual(
+ SiO2_aniso.epsilon(1 / 1.55)[1][1], (1.5277) ** 2, places=2
+ )
+ self.assertAlmostEqual(
+ SiO2_aniso.epsilon(1 / 1.55)[2][2], (1.5362) ** 2, places=2
+ )
- self.assertAlmostEqual(Ag.epsilon(1/0.65)[0][0], (0.14623 + 1j*3.9367)**2, places=2)
+ self.assertAlmostEqual(
+ Ag.epsilon(1 / 0.65)[0][0], (0.14623 + 1j * 3.9367) ** 2, places=2
+ )
- self.assertAlmostEqual(Cr.epsilon(1/0.71)[0][0], (3.8275 + 1j*4.3457)**2, places=2)
+ self.assertAlmostEqual(
+ Cr.epsilon(1 / 0.71)[0][0], (3.8275 + 1j * 4.3457) ** 2, places=2
+ )
try:
- Ag.epsilon(1/0.2)[0][0]
+ Ag.epsilon(1 / 0.2)[0][0]
except ValueError:
pass
else:
raise AssertionError("Ag is not defined at a wavelength of 0.2 μm")
-if __name__ == '__main__':
- unittest.main()
+if __name__ == "__main__":
+ unittest.main()
diff --git a/python/tests/test_medium_evaluations.py b/python/tests/test_medium_evaluations.py
index 0d74bd93c..ef680563a 100644
--- a/python/tests/test_medium_evaluations.py
+++ b/python/tests/test_medium_evaluations.py
@@ -1,4 +1,3 @@
-
# medium_evaluations.py - Tests the evaluation of material permitivity profiles.
# Checks materials with lorentizian, drude, and non uniform diagonals.
# The extracted values are compared against actual datapoints pulled from
@@ -13,53 +12,53 @@
class TestMediumEvaluations(unittest.TestCase):
-
def test_medium_evaluations(self):
from meep.materials import Si, Ag, LiNbO3, fused_quartz
# Check that scalars work
w0 = LiNbO3.valid_freq_range.min
eps = LiNbO3.epsilon(w0)
- self.assertAlmostEqual(np.real(np.sqrt(eps[0,0])), 2.0508, places=4)
+ self.assertAlmostEqual(np.real(np.sqrt(eps[0, 0])), 2.0508, places=4)
# Check numpy arrays
try:
w0 = Si.valid_freq_range.min
w1 = Si.valid_freq_range.max
- eps = Si.epsilon(np.linspace(w0,w1,100))
+ eps = Si.epsilon(np.linspace(w0, w1, 100))
except ExceptionType:
self.fail("myFunc() raised ExceptionType unexpectedly!")
# Check that regions outside of domain don't work
- self.assertRaises(ValueError,LiNbO3.epsilon,-1.0)
- self.assertRaises(ValueError,LiNbO3.epsilon,10000.0)
+ self.assertRaises(ValueError, LiNbO3.epsilon, -1.0)
+ self.assertRaises(ValueError, LiNbO3.epsilon, 10000.0)
# Check complex vs non complex numbers
- self.assertTrue(np.iscomplex(Ag.epsilon(1.0)[0,0]))
- self.assertFalse(np.iscomplex(fused_quartz.epsilon(1.0)[0,0]))
+ self.assertTrue(np.iscomplex(Ag.epsilon(1.0)[0, 0]))
+ self.assertFalse(np.iscomplex(fused_quartz.epsilon(1.0)[0, 0]))
# Check Silicon
w0 = Si.valid_freq_range.min
w1 = Si.valid_freq_range.max
- eps = Si.epsilon([w0,w1])
- self.assertAlmostEqual(np.real(np.sqrt(eps[0,0,0])), 3.4175, places=4)
- self.assertAlmostEqual(np.real(np.sqrt(eps[1,0,0])), 3.4971, places=4)
+ eps = Si.epsilon([w0, w1])
+ self.assertAlmostEqual(np.real(np.sqrt(eps[0, 0, 0])), 3.4175, places=4)
+ self.assertAlmostEqual(np.real(np.sqrt(eps[1, 0, 0])), 3.4971, places=4)
# Check Silver
w0 = Ag.valid_freq_range.min
w1 = Ag.valid_freq_range.max
- eps = Ag.epsilon([w0,w1])
- self.assertAlmostEqual(np.real(np.sqrt(eps[0,0,0])), 17.485, places=2)
- self.assertAlmostEqual(np.real(np.sqrt(eps[1,0,0])), 0.44265, places=4)
+ eps = Ag.epsilon([w0, w1])
+ self.assertAlmostEqual(np.real(np.sqrt(eps[0, 0, 0])), 17.485, places=2)
+ self.assertAlmostEqual(np.real(np.sqrt(eps[1, 0, 0])), 0.44265, places=4)
# Check Lithium Niobate
w0 = LiNbO3.valid_freq_range.min
w1 = LiNbO3.valid_freq_range.max
- eps = LiNbO3.epsilon([w0,w1])
- self.assertAlmostEqual(np.real(np.sqrt(eps[0,0,0])), 2.0508, places=4)
- self.assertAlmostEqual(np.real(np.sqrt(eps[1,0,0])), 2.4393, places=4)
- self.assertAlmostEqual(np.real(np.sqrt(eps[0,2,2])), 2.0025, places=4)
- self.assertAlmostEqual(np.real(np.sqrt(eps[1,2,2])), 2.3321, places=4)
+ eps = LiNbO3.epsilon([w0, w1])
+ self.assertAlmostEqual(np.real(np.sqrt(eps[0, 0, 0])), 2.0508, places=4)
+ self.assertAlmostEqual(np.real(np.sqrt(eps[1, 0, 0])), 2.4393, places=4)
+ self.assertAlmostEqual(np.real(np.sqrt(eps[0, 2, 2])), 2.0025, places=4)
+ self.assertAlmostEqual(np.real(np.sqrt(eps[1, 2, 2])), 2.3321, places=4)
+
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_mode_coeffs.py b/python/tests/test_mode_coeffs.py
index 8e42a73ee..d826b7f80 100644
--- a/python/tests/test_mode_coeffs.py
+++ b/python/tests/test_mode_coeffs.py
@@ -4,10 +4,9 @@
class TestModeCoeffs(unittest.TestCase):
-
def run_mode_coeffs(self, mode_num, kpoint_func, nf=1, resolution=15):
- w = 1 # width of waveguide
+ w = 1 # width of waveguide
L = 10 # length of waveguide
Si = mp.Medium(epsilon=12.0)
@@ -21,10 +20,12 @@ def run_mode_coeffs(self, mode_num, kpoint_func, nf=1, resolution=15):
prism_x = sx + 1
prism_y = w / 2
- vertices = [mp.Vector3(-prism_x, prism_y),
- mp.Vector3(prism_x, prism_y),
- mp.Vector3(prism_x, -prism_y),
- mp.Vector3(-prism_x, -prism_y)]
+ vertices = [
+ mp.Vector3(-prism_x, prism_y),
+ mp.Vector3(prism_x, prism_y),
+ mp.Vector3(prism_x, -prism_y),
+ mp.Vector3(-prism_x, -prism_y),
+ ]
geometry = [mp.Prism(vertices, height=mp.inf, material=Si)]
@@ -32,25 +33,39 @@ def run_mode_coeffs(self, mode_num, kpoint_func, nf=1, resolution=15):
# mode frequency
fcen = 0.20 # > 0.5/sqrt(11) to have at least 2 modes
- df = 0.5*fcen
+ df = 0.5 * fcen
- source = mp.EigenModeSource(src=mp.GaussianSource(fcen, fwidth=df),
- eig_band=mode_num,
- size=mp.Vector3(0,sy-2*dpml,0),
- center=mp.Vector3(-0.5*sx+dpml,0,0))
+ source = mp.EigenModeSource(
+ src=mp.GaussianSource(fcen, fwidth=df),
+ eig_band=mode_num,
+ size=mp.Vector3(0, sy - 2 * dpml, 0),
+ center=mp.Vector3(-0.5 * sx + dpml, 0, 0),
+ )
symmetries = [mp.Mirror(mp.Y, phase=1 if mode_num % 2 == 1 else -1)]
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=boundary_layers,
- geometry=geometry,
- sources=[source],
- symmetries=symmetries)
-
- xm = 0.5*sx - dpml # x-coordinate of monitor
- mflux = sim.add_mode_monitor(fcen, df, nf, mp.ModeRegion(center=mp.Vector3(xm,0), size=mp.Vector3(0,sy-2*dpml)))
- mode_flux = sim.add_flux(fcen, df, nf, mp.FluxRegion(center=mp.Vector3(xm,0), size=mp.Vector3(0,sy-2*dpml)))
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=boundary_layers,
+ geometry=geometry,
+ sources=[source],
+ symmetries=symmetries,
+ )
+
+ xm = 0.5 * sx - dpml # x-coordinate of monitor
+ mflux = sim.add_mode_monitor(
+ fcen,
+ df,
+ nf,
+ mp.ModeRegion(center=mp.Vector3(xm, 0), size=mp.Vector3(0, sy - 2 * dpml)),
+ )
+ mode_flux = sim.add_flux(
+ fcen,
+ df,
+ nf,
+ mp.FluxRegion(center=mp.Vector3(xm, 0), size=mp.Vector3(0, sy - 2 * dpml)),
+ )
# sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, mp.Vector3(-0.5*sx+dpml,0), 1e-10))
sim.run(until_after_sources=100)
@@ -65,27 +80,34 @@ def run_mode_coeffs(self, mode_num, kpoint_func, nf=1, resolution=15):
# and check that it agrees with the prediction
# of the eig_power() class method in EigenmodeSource.
##################################################
- if nf>1:
- power_observed=mp.get_fluxes(mode_flux)
- freqs=mp.get_flux_freqs(mode_flux)
- power_expected=[source.eig_power(f) for f in freqs]
+ if nf > 1:
+ power_observed = mp.get_fluxes(mode_flux)
+ freqs = mp.get_flux_freqs(mode_flux)
+ power_expected = [source.eig_power(f) for f in freqs]
return freqs, power_expected, power_observed
- modes_to_check = [1, 2] # indices of modes for which to compute expansion coefficients
- res = sim.get_eigenmode_coefficients(mflux, modes_to_check, kpoint_func=kpoint_func)
+ modes_to_check = [
+ 1,
+ 2,
+ ] # indices of modes for which to compute expansion coefficients
+ res = sim.get_eigenmode_coefficients(
+ mflux, modes_to_check, kpoint_func=kpoint_func
+ )
self.assertTrue(res.kpoints[0].close(mp.Vector3(0.604301, 0, 0)))
self.assertTrue(res.kpoints[1].close(mp.Vector3(0.494353, 0, 0), tol=1e-2))
self.assertTrue(res.kdom[0].close(mp.Vector3(0.604301, 0, 0)))
self.assertTrue(res.kdom[1].close(mp.Vector3(0.494353, 0, 0), tol=1e-2))
- self.assertAlmostEqual(res.cscale[0],0.50000977,places=5)
- self.assertAlmostEqual(res.cscale[1],0.50096888,places=5)
+ self.assertAlmostEqual(res.cscale[0], 0.50000977, places=5)
+ self.assertAlmostEqual(res.cscale[1], 0.50096888, places=5)
mode_power = mp.get_fluxes(mode_flux)[0]
TestPassed = True
TOLERANCE = 5.0e-3
- c0 = res.alpha[mode_num - 1, 0, 0] # coefficient of forward-traveling wave for mode #mode_num
- for nm in range(1, len(modes_to_check)+1):
+ c0 = res.alpha[
+ mode_num - 1, 0, 0
+ ] # coefficient of forward-traveling wave for mode #mode_num
+ for nm in range(1, len(modes_to_check) + 1):
if nm != mode_num:
cfrel = np.abs(res.alpha[nm - 1, 0, 0]) / np.abs(c0)
cbrel = np.abs(res.alpha[nm - 1, 0, 1]) / np.abs(c0)
@@ -117,123 +139,162 @@ def test_modes(self):
hz_at_eval_point = emdata.amplitude(eval_point, mp.Hz)
places = 5 if mp.is_single_precision() else 7
- self.assertAlmostEqual(ex_at_eval_point, 0.4887779638178009+0.484240145324284j, places=places)
- self.assertAlmostEqual(hz_at_eval_point, 3.4249236584603495-3.455974863884166j, places=places)
+ self.assertAlmostEqual(
+ ex_at_eval_point, 0.4887779638178009 + 0.484240145324284j, places=places
+ )
+ self.assertAlmostEqual(
+ hz_at_eval_point, 3.4249236584603495 - 3.455974863884166j, places=places
+ )
def test_kpoint_func(self):
-
def kpoint_func(freq, mode):
return mp.Vector3()
self.run_mode_coeffs(1, kpoint_func)
def test_eigensource_normalization(self):
- f, p_exp, p_obs=self.run_mode_coeffs(1, None, nf=51, resolution=15)
- #self.assertAlmostEqual(max(p_exp),max(p_obs),places=1)
- max_exp, max_obs=max(p_exp), max(p_obs)
- self.assertLess(abs(max_exp-max_obs), 0.5*max(abs(max_exp),abs(max_obs)))
+ f, p_exp, p_obs = self.run_mode_coeffs(1, None, nf=51, resolution=15)
+ # self.assertAlmostEqual(max(p_exp),max(p_obs),places=1)
+ max_exp, max_obs = max(p_exp), max(p_obs)
+ self.assertLess(abs(max_exp - max_obs), 0.5 * max(abs(max_exp), abs(max_obs)))
def test_reciprocity_kpoint(self):
resolution = 40
sx = 7.0
sy = 5.0
- cell_size = mp.Vector3(sx,sy)
+ cell_size = mp.Vector3(sx, sy)
dpml = 1.0
pml_layers = [mp.PML(thickness=dpml)]
w = 1.0
- geometry = [mp.Block(center=mp.Vector3(),
- size=mp.Vector3(mp.inf,w,mp.inf),
- material=mp.Medium(epsilon=12))]
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(mp.inf, w, mp.inf),
+ material=mp.Medium(epsilon=12),
+ )
+ ]
fsrc = 0.15
- sources = [mp.EigenModeSource(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc),
- center=mp.Vector3(x=-0.5*sx+dpml),
- size=mp.Vector3(y=sy),
- eig_parity=mp.EVEN_Y+mp.ODD_Z)]
+ sources = [
+ mp.EigenModeSource(
+ src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc),
+ center=mp.Vector3(x=-0.5 * sx + dpml),
+ size=mp.Vector3(y=sy),
+ eig_parity=mp.EVEN_Y + mp.ODD_Z,
+ )
+ ]
symmetries = [mp.Mirror(mp.Y)]
- sim = mp.Simulation(cell_size=cell_size,
- resolution=resolution,
- boundary_layers=pml_layers,
- sources=sources,
- geometry=geometry,
- symmetries=symmetries)
-
- tran = sim.add_mode_monitor(fsrc, 0, 1,
- mp.ModeRegion(center=mp.Vector3(x=0.5*sx-dpml),
- size=mp.Vector3(y=sy)),
- yee_grid=False)
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ boundary_layers=pml_layers,
+ sources=sources,
+ geometry=geometry,
+ symmetries=symmetries,
+ )
+
+ tran = sim.add_mode_monitor(
+ fsrc,
+ 0,
+ 1,
+ mp.ModeRegion(center=mp.Vector3(x=0.5 * sx - dpml), size=mp.Vector3(y=sy)),
+ yee_grid=False,
+ )
sim.run(until_after_sources=50)
- res_fwd = sim.get_eigenmode_coefficients(tran,
- [1],
- eig_parity=mp.EVEN_Y+mp.ODD_Z,
- direction=mp.NO_DIRECTION,
- kpoint_func=lambda f,n: mp.Vector3(+1,0,0))
-
- res_bwd = sim.get_eigenmode_coefficients(tran,
- [1],
- eig_parity=mp.EVEN_Y+mp.ODD_Z,
- direction=mp.NO_DIRECTION,
- kpoint_func=lambda f,n: mp.Vector3(-1,0,0))
+ res_fwd = sim.get_eigenmode_coefficients(
+ tran,
+ [1],
+ eig_parity=mp.EVEN_Y + mp.ODD_Z,
+ direction=mp.NO_DIRECTION,
+ kpoint_func=lambda f, n: mp.Vector3(+1, 0, 0),
+ )
+
+ res_bwd = sim.get_eigenmode_coefficients(
+ tran,
+ [1],
+ eig_parity=mp.EVEN_Y + mp.ODD_Z,
+ direction=mp.NO_DIRECTION,
+ kpoint_func=lambda f, n: mp.Vector3(-1, 0, 0),
+ )
print(f"S11:, {res_fwd.alpha[0,0,1]}, {res_bwd.alpha[0,0,0]}")
print(f"S21:, {res_fwd.alpha[0,0,0]}, {res_bwd.alpha[0,0,1]}")
# |S11|^2
- self.assertAlmostEqual(abs(res_fwd.alpha[0,0,1])**2, abs(res_bwd.alpha[0,0,0])**2, places=4)
+ self.assertAlmostEqual(
+ abs(res_fwd.alpha[0, 0, 1]) ** 2, abs(res_bwd.alpha[0, 0, 0]) ** 2, places=4
+ )
# |S21|^2
- self.assertAlmostEqual(abs(res_fwd.alpha[0,0,0])**2 / abs(res_bwd.alpha[0,0,1])**2, 1.00, places=2)
+ self.assertAlmostEqual(
+ abs(res_fwd.alpha[0, 0, 0]) ** 2 / abs(res_bwd.alpha[0, 0, 1]) ** 2,
+ 1.00,
+ places=2,
+ )
def test_reciprocity_monitor(self):
resolution = 25
sx = 7.0
sy = 5.0
- cell_size = mp.Vector3(sx,sy)
+ cell_size = mp.Vector3(sx, sy)
dpml = 1.0
pml_layers = [mp.PML(thickness=dpml)]
w = 1.0
- geometry = [mp.Block(center=mp.Vector3(),
- size=mp.Vector3(mp.inf,w,mp.inf),
- material=mp.Medium(epsilon=12))]
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(mp.inf, w, mp.inf),
+ material=mp.Medium(epsilon=12),
+ )
+ ]
fsrc = 0.15
# source is at the left edge of the waveguide
- sources = [mp.EigenModeSource(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc),
- center=mp.Vector3(x=-0.5*sx+dpml),
- size=mp.Vector3(y=sy),
- eig_parity=mp.EVEN_Y+mp.ODD_Z)]
+ sources = [
+ mp.EigenModeSource(
+ src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc),
+ center=mp.Vector3(x=-0.5 * sx + dpml),
+ size=mp.Vector3(y=sy),
+ eig_parity=mp.EVEN_Y + mp.ODD_Z,
+ )
+ ]
symmetries = [mp.Mirror(mp.Y)]
- sim = mp.Simulation(cell_size=cell_size,
- resolution=resolution,
- boundary_layers=pml_layers,
- sources=sources,
- geometry=geometry,
- symmetries=symmetries)
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ boundary_layers=pml_layers,
+ sources=sources,
+ geometry=geometry,
+ symmetries=symmetries,
+ )
# monitor is at the right edge of the waveguide
- tran = sim.add_mode_monitor(fsrc, 0, 1,
- mp.ModeRegion(center=mp.Vector3(x=0.5*sx-dpml),
- size=mp.Vector3(y=sy)),
- yee_grid=False)
+ tran = sim.add_mode_monitor(
+ fsrc,
+ 0,
+ 1,
+ mp.ModeRegion(center=mp.Vector3(x=0.5 * sx - dpml), size=mp.Vector3(y=sy)),
+ yee_grid=False,
+ )
sim.run(until_after_sources=50)
- res_fwd = sim.get_eigenmode_coefficients(tran,
- [1],
- eig_parity=mp.EVEN_Y+mp.ODD_Z)
+ res_fwd = sim.get_eigenmode_coefficients(
+ tran, [1], eig_parity=mp.EVEN_Y + mp.ODD_Z
+ )
print(f"S11:, {res_fwd.alpha[0,0,1]}")
print(f"S21:, {res_fwd.alpha[0,0,0]}")
@@ -241,41 +302,56 @@ def test_reciprocity_monitor(self):
sim.reset_meep()
# source is at the right edge of the waveguide
- sources = [mp.EigenModeSource(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc),
- center=mp.Vector3(x=0.5*sx-dpml),
- size=mp.Vector3(y=sy),
- direction=mp.NO_DIRECTION,
- eig_kpoint=mp.Vector3(-1,0,0),
- eig_parity=mp.EVEN_Y+mp.ODD_Z)]
-
- sim = mp.Simulation(cell_size=cell_size,
- resolution=resolution,
- boundary_layers=pml_layers,
- sources=sources,
- geometry=geometry,
- symmetries=symmetries)
+ sources = [
+ mp.EigenModeSource(
+ src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc),
+ center=mp.Vector3(x=0.5 * sx - dpml),
+ size=mp.Vector3(y=sy),
+ direction=mp.NO_DIRECTION,
+ eig_kpoint=mp.Vector3(-1, 0, 0),
+ eig_parity=mp.EVEN_Y + mp.ODD_Z,
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ boundary_layers=pml_layers,
+ sources=sources,
+ geometry=geometry,
+ symmetries=symmetries,
+ )
# monitor is at the left edge of the waveguide
- tran = sim.add_mode_monitor(fsrc, 0, 1,
- mp.ModeRegion(center=mp.Vector3(x=-0.5*sx+dpml),
- size=mp.Vector3(y=sy)),
- yee_grid=False)
+ tran = sim.add_mode_monitor(
+ fsrc,
+ 0,
+ 1,
+ mp.ModeRegion(center=mp.Vector3(x=-0.5 * sx + dpml), size=mp.Vector3(y=sy)),
+ yee_grid=False,
+ )
sim.run(until_after_sources=50)
- res_bwd = sim.get_eigenmode_coefficients(tran,
- [1],
- eig_parity=mp.EVEN_Y+mp.ODD_Z)
+ res_bwd = sim.get_eigenmode_coefficients(
+ tran, [1], eig_parity=mp.EVEN_Y + mp.ODD_Z
+ )
print(f"S12:, {res_bwd.alpha[0,0,1]}")
print(f"S22:, {res_bwd.alpha[0,0,0]}")
# |S21|^2 = |S12|^2
- self.assertAlmostEqual(abs(res_fwd.alpha[0,0,0])**2 / abs(res_bwd.alpha[0,0,1])**2, 1.00, places=2)
+ self.assertAlmostEqual(
+ abs(res_fwd.alpha[0, 0, 0]) ** 2 / abs(res_bwd.alpha[0, 0, 1]) ** 2,
+ 1.00,
+ places=2,
+ )
# |S11|^2 = |S22|^2
- self.assertAlmostEqual(abs(res_fwd.alpha[0,0,1])**2, abs(res_bwd.alpha[0,0,0])**2, places=2)
+ self.assertAlmostEqual(
+ abs(res_fwd.alpha[0, 0, 1]) ** 2, abs(res_bwd.alpha[0, 0, 0]) ** 2, places=2
+ )
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_mode_decomposition.py b/python/tests/test_mode_decomposition.py
index 6d0262475..127f6772c 100644
--- a/python/tests/test_mode_decomposition.py
+++ b/python/tests/test_mode_decomposition.py
@@ -6,7 +6,6 @@
class TestModeDecomposition(unittest.TestCase):
-
def test_linear_taper_2d(self):
resolution = 10
w1 = 1
@@ -24,142 +23,183 @@ def test_linear_taper_2d(self):
symmetries = [mp.Mirror(mp.Y)]
Lt = 2
sx = dpml + Lw + Lt + Lw + dpml
- cell_size = mp.Vector3(sx,sy,0)
+ cell_size = mp.Vector3(sx, sy, 0)
prism_x = sx + 1
half_Lt = 0.5 * Lt
- src_pt = mp.Vector3(-0.5*sx+dpml+0.2*Lw,0,0)
- sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen, fwidth=0.2*fcen),
- center=src_pt,
- size=mp.Vector3(0,sy-2*dpml,0),
- eig_match_freq=True,
- eig_parity=mp.ODD_Z+mp.EVEN_Y)]
-
- vertices = [mp.Vector3(-prism_x, half_w1),
- mp.Vector3(prism_x, half_w1),
- mp.Vector3(prism_x, -half_w1),
- mp.Vector3(-prism_x, -half_w1)]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=boundary_layers,
- geometry=[mp.Prism(vertices, height=mp.inf, material=Si)],
- sources=sources,
- symmetries=symmetries)
-
- mon_pt = mp.Vector3(-0.5*sx+dpml+0.5*Lw,0,0)
- flux = sim.add_flux(fcen,
- 0,
- 1,
- mp.FluxRegion(center=mon_pt,
- size=mp.Vector3(0,sy-2*dpml,0)))
-
- sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, src_pt, 1e-9))
-
- res = sim.get_eigenmode_coefficients(flux,
- [1],
- eig_parity=mp.ODD_Z+mp.EVEN_Y)
+ src_pt = mp.Vector3(-0.5 * sx + dpml + 0.2 * Lw, 0, 0)
+ sources = [
+ mp.EigenModeSource(
+ src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ center=src_pt,
+ size=mp.Vector3(0, sy - 2 * dpml, 0),
+ eig_match_freq=True,
+ eig_parity=mp.ODD_Z + mp.EVEN_Y,
+ )
+ ]
+
+ vertices = [
+ mp.Vector3(-prism_x, half_w1),
+ mp.Vector3(prism_x, half_w1),
+ mp.Vector3(prism_x, -half_w1),
+ mp.Vector3(-prism_x, -half_w1),
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=boundary_layers,
+ geometry=[mp.Prism(vertices, height=mp.inf, material=Si)],
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ mon_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * Lw, 0, 0)
+ flux = sim.add_flux(
+ fcen,
+ 0,
+ 1,
+ mp.FluxRegion(center=mon_pt, size=mp.Vector3(0, sy - 2 * dpml, 0)),
+ )
+
+ sim.run(
+ until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, src_pt, 1e-9)
+ )
+
+ res = sim.get_eigenmode_coefficients(flux, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y)
incident_coeffs = res.alpha
incident_flux = mp.get_fluxes(flux)
incident_flux_data = sim.get_flux_data(flux)
sim.reset_meep()
- vertices = [mp.Vector3(-prism_x, half_w1),
- mp.Vector3(-half_Lt, half_w1),
- mp.Vector3(half_Lt, half_w2),
- mp.Vector3(prism_x, half_w2),
- mp.Vector3(prism_x, -half_w2),
- mp.Vector3(half_Lt, -half_w2),
- mp.Vector3(-half_Lt, -half_w1),
- mp.Vector3(-prism_x, -half_w1)]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- boundary_layers=boundary_layers,
- geometry=[mp.Prism(vertices, height=mp.inf, material=Si)],
- sources=sources,
- symmetries=symmetries)
-
- refl_flux = sim.add_flux(fcen,
- 0,
- 1,
- mp.FluxRegion(center=mon_pt,
- size=mp.Vector3(0,sy-2*dpml,0)))
+ vertices = [
+ mp.Vector3(-prism_x, half_w1),
+ mp.Vector3(-half_Lt, half_w1),
+ mp.Vector3(half_Lt, half_w2),
+ mp.Vector3(prism_x, half_w2),
+ mp.Vector3(prism_x, -half_w2),
+ mp.Vector3(half_Lt, -half_w2),
+ mp.Vector3(-half_Lt, -half_w1),
+ mp.Vector3(-prism_x, -half_w1),
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=boundary_layers,
+ geometry=[mp.Prism(vertices, height=mp.inf, material=Si)],
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ refl_flux = sim.add_flux(
+ fcen,
+ 0,
+ 1,
+ mp.FluxRegion(center=mon_pt, size=mp.Vector3(0, sy - 2 * dpml, 0)),
+ )
sim.load_minus_flux_data(refl_flux, incident_flux_data)
- sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, src_pt, 1e-9))
+ sim.run(
+ until_after_sources=mp.stop_when_fields_decayed(50, mp.Ez, src_pt, 1e-9)
+ )
- res = sim.get_eigenmode_coefficients(refl_flux,
- [1],
- eig_parity=mp.ODD_Z+mp.EVEN_Y)
+ res = sim.get_eigenmode_coefficients(
+ refl_flux, [1], eig_parity=mp.ODD_Z + mp.EVEN_Y
+ )
coeffs = res.alpha
taper_flux = mp.get_fluxes(refl_flux)
- self.assertAlmostEqual(abs(coeffs[0,0,1])**2 / abs(incident_coeffs[0,0,0])**2,
- -taper_flux[0] / incident_flux[0],
- places=4)
+ self.assertAlmostEqual(
+ abs(coeffs[0, 0, 1]) ** 2 / abs(incident_coeffs[0, 0, 0]) ** 2,
+ -taper_flux[0] / incident_flux[0],
+ places=4,
+ )
def test_oblique_waveguide_backward_mode(self):
sxy = 12.0
- cell_size = mp.Vector3(sxy,sxy,0)
+ cell_size = mp.Vector3(sxy, sxy, 0)
dpml = 0.6
pml_layers = [mp.PML(thickness=dpml)]
- fcen = 1/1.55
+ fcen = 1 / 1.55
rot_angle = np.radians(35.0)
- kpoint = mp.Vector3(1,0,0).rotate(mp.Vector3(0,0,1), rot_angle) * -1.0
- sources = [mp.EigenModeSource(src=mp.GaussianSource(fcen,fwidth=0.1),
- center=mp.Vector3(0.5*sxy-3.4,0,0),
- size=mp.Vector3(0,sxy,0),
- direction=mp.NO_DIRECTION,
- eig_kpoint=kpoint,
- eig_band=1,
- eig_parity=mp.ODD_Z,
- eig_match_freq=True)]
-
- geometry = [mp.Block(center=mp.Vector3(),
- size=mp.Vector3(mp.inf,1,mp.inf),
- e1 = mp.Vector3(1,0,0).rotate(mp.Vector3(0,0,1), rot_angle),
- e2 = mp.Vector3(0,1,0).rotate(mp.Vector3(0,0,1), rot_angle),
- material=mp.Medium(index=3.5))]
-
- sim = mp.Simulation(cell_size=cell_size,
- resolution=20,
- boundary_layers=pml_layers,
- sources=sources,
- geometry=geometry)
-
- mode = sim.add_mode_monitor(fcen, 0, 1,
- mp.FluxRegion(center=mp.Vector3(-0.5*sxy+dpml,0,0),
- size=mp.Vector3(0,sxy,0)),
- decimation_factor=1)
- mode_decimated = sim.add_mode_monitor(fcen,
- 0,
- 1,
- mp.FluxRegion(center=mp.Vector3(-0.5*sxy+dpml,0,0),
- size=mp.Vector3(0,sxy,0)),
- decimation_factor=10)
+ kpoint = mp.Vector3(1, 0, 0).rotate(mp.Vector3(0, 0, 1), rot_angle) * -1.0
+ sources = [
+ mp.EigenModeSource(
+ src=mp.GaussianSource(fcen, fwidth=0.1),
+ center=mp.Vector3(0.5 * sxy - 3.4, 0, 0),
+ size=mp.Vector3(0, sxy, 0),
+ direction=mp.NO_DIRECTION,
+ eig_kpoint=kpoint,
+ eig_band=1,
+ eig_parity=mp.ODD_Z,
+ eig_match_freq=True,
+ )
+ ]
+
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(mp.inf, 1, mp.inf),
+ e1=mp.Vector3(1, 0, 0).rotate(mp.Vector3(0, 0, 1), rot_angle),
+ e2=mp.Vector3(0, 1, 0).rotate(mp.Vector3(0, 0, 1), rot_angle),
+ material=mp.Medium(index=3.5),
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=20,
+ boundary_layers=pml_layers,
+ sources=sources,
+ geometry=geometry,
+ )
+
+ mode = sim.add_mode_monitor(
+ fcen,
+ 0,
+ 1,
+ mp.FluxRegion(
+ center=mp.Vector3(-0.5 * sxy + dpml, 0, 0), size=mp.Vector3(0, sxy, 0)
+ ),
+ decimation_factor=1,
+ )
+ mode_decimated = sim.add_mode_monitor(
+ fcen,
+ 0,
+ 1,
+ mp.FluxRegion(
+ center=mp.Vector3(-0.5 * sxy + dpml, 0, 0), size=mp.Vector3(0, sxy, 0)
+ ),
+ decimation_factor=10,
+ )
sim.run(until_after_sources=30)
flux = mp.get_fluxes(mode)[0]
- coeff = sim.get_eigenmode_coefficients(mode,[1],
- direction=mp.NO_DIRECTION,
- kpoint_func=lambda f,n: kpoint).alpha[0,0,0]
+ coeff = sim.get_eigenmode_coefficients(
+ mode, [1], direction=mp.NO_DIRECTION, kpoint_func=lambda f, n: kpoint
+ ).alpha[0, 0, 0]
flux_decimated = mp.get_fluxes(mode_decimated)[0]
- coeff_decimated = sim.get_eigenmode_coefficients(mode_decimated,[1],
- direction=mp.NO_DIRECTION,
- kpoint_func=lambda f,n: kpoint).alpha[0,0,0]
-
- print("oblique-waveguide-flux:, {:.6f}, {:.6f}".format(-flux, abs(coeff)**2))
- print("oblique-waveguide-flux (decimated):, {:.6f}, {:.6f}".format(-flux_decimated,
- abs(coeff_decimated)**2))
+ coeff_decimated = sim.get_eigenmode_coefficients(
+ mode_decimated,
+ [1],
+ direction=mp.NO_DIRECTION,
+ kpoint_func=lambda f, n: kpoint,
+ ).alpha[0, 0, 0]
+
+ print("oblique-waveguide-flux:, {:.6f}, {:.6f}".format(-flux, abs(coeff) ** 2))
+ print(
+ "oblique-waveguide-flux (decimated):, {:.6f}, {:.6f}".format(
+ -flux_decimated, abs(coeff_decimated) ** 2
+ )
+ )
## the magnitude of |flux| is 100.008731 and so we check two significant digits of accuracy
- self.assertAlmostEqual(-1,abs(coeff)**2/flux,places=2)
- self.assertAlmostEqual(flux,flux_decimated,places=3)
- self.assertAlmostEqual(coeff,coeff_decimated,places=3)
-
+ self.assertAlmostEqual(-1, abs(coeff) ** 2 / flux, places=2)
+ self.assertAlmostEqual(flux, flux_decimated, places=3)
+ self.assertAlmostEqual(coeff, coeff_decimated, places=3)
def test_grating_3d(self):
"""Unit test for mode decomposition in 3d with zero k_point.
@@ -179,7 +219,7 @@ def test_grating_3d(self):
SiO2 = mp.Medium(index=nSiO2)
wvl = 0.5 # wavelength
- fcen = 1/wvl
+ fcen = 1 / wvl
dpml = 1.0 # PML thickness
dsub = 3.0 # substrate thickness
@@ -189,40 +229,46 @@ def test_grating_3d(self):
sx = 1.1
sy = 0.8
- sz = dpml+dsub+hcyl+dair+dpml
+ sz = dpml + dsub + hcyl + dair + dpml
- cell_size = mp.Vector3(sx,sy,sz)
+ cell_size = mp.Vector3(sx, sy, sz)
- boundary_layers = [mp.PML(thickness=dpml,direction=mp.Z)]
+ boundary_layers = [mp.PML(thickness=dpml, direction=mp.Z)]
# periodic boundary conditions
k_point = mp.Vector3()
src_cmpt = mp.Ex
- sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen),
- size=mp.Vector3(sx,sy,0),
- center=mp.Vector3(0,0,-0.5*sz+dpml),
- component=src_cmpt)]
-
- symmetries = [mp.Mirror(direction=mp.X,phase=-1),
- mp.Mirror(direction=mp.Y,phase=+1)]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- sources=sources,
- default_material=SiO2,
- boundary_layers=boundary_layers,
- k_point=k_point,
- symmetries=symmetries)
-
- refl_pt = mp.Vector3(0,0,-0.5*sz+dpml+0.5*dsub)
- refl_flux = sim.add_mode_monitor(fcen,
- 0,
- 1,
- mp.ModeRegion(center=refl_pt,
- size=mp.Vector3(sx,sy,0)))
-
- stop_cond = mp.stop_when_energy_decayed(20,1e-6)
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ size=mp.Vector3(sx, sy, 0),
+ center=mp.Vector3(0, 0, -0.5 * sz + dpml),
+ component=src_cmpt,
+ )
+ ]
+
+ symmetries = [
+ mp.Mirror(direction=mp.X, phase=-1),
+ mp.Mirror(direction=mp.Y, phase=+1),
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ sources=sources,
+ default_material=SiO2,
+ boundary_layers=boundary_layers,
+ k_point=k_point,
+ symmetries=symmetries,
+ )
+
+ refl_pt = mp.Vector3(0, 0, -0.5 * sz + dpml + 0.5 * dsub)
+ refl_flux = sim.add_mode_monitor(
+ fcen, 0, 1, mp.ModeRegion(center=refl_pt, size=mp.Vector3(sx, sy, 0))
+ )
+
+ stop_cond = mp.stop_when_energy_decayed(20, 1e-6)
sim.run(until_after_sources=stop_cond)
input_flux = mp.get_fluxes(refl_flux)
@@ -230,34 +276,43 @@ def test_grating_3d(self):
sim.reset_meep()
- geometry = [mp.Block(size=mp.Vector3(mp.inf,mp.inf,dpml+dsub),
- center=mp.Vector3(0,0,-0.5*sz+0.5*(dpml+dsub)),
- material=SiO2),
- mp.Cylinder(height=hcyl,
- radius=rcyl,
- center=mp.Vector3(0,0,-0.5*sz+dpml+dsub+0.5*hcyl),
- material=Si)]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- sources=sources,
- geometry=geometry,
- boundary_layers=boundary_layers,
- k_point=k_point,
- symmetries=symmetries)
-
- refl_flux = sim.add_mode_monitor(fcen,
- 0,
- 1,
- mp.ModeRegion(center=refl_pt,
- size=mp.Vector3(sx,sy,0)))
- sim.load_minus_flux_data(refl_flux,input_flux_data)
-
- tran_flux = sim.add_mode_monitor(fcen,
- 0,
- 1,
- mp.ModeRegion(center=mp.Vector3(0,0,0.5*sz-dpml),
- size=mp.Vector3(sx,sy,0)))
+ geometry = [
+ mp.Block(
+ size=mp.Vector3(mp.inf, mp.inf, dpml + dsub),
+ center=mp.Vector3(0, 0, -0.5 * sz + 0.5 * (dpml + dsub)),
+ material=SiO2,
+ ),
+ mp.Cylinder(
+ height=hcyl,
+ radius=rcyl,
+ center=mp.Vector3(0, 0, -0.5 * sz + dpml + dsub + 0.5 * hcyl),
+ material=Si,
+ ),
+ ]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ sources=sources,
+ geometry=geometry,
+ boundary_layers=boundary_layers,
+ k_point=k_point,
+ symmetries=symmetries,
+ )
+
+ refl_flux = sim.add_mode_monitor(
+ fcen, 0, 1, mp.ModeRegion(center=refl_pt, size=mp.Vector3(sx, sy, 0))
+ )
+ sim.load_minus_flux_data(refl_flux, input_flux_data)
+
+ tran_flux = sim.add_mode_monitor(
+ fcen,
+ 0,
+ 1,
+ mp.ModeRegion(
+ center=mp.Vector3(0, 0, 0.5 * sz - dpml), size=mp.Vector3(sx, sy, 0)
+ ),
+ )
sim.run(until_after_sources=stop_cond)
@@ -265,67 +320,80 @@ def test_grating_3d(self):
Rsum = 0
# number of reflected modes/orders in SiO2 in x and y directions (upper bound)
- nm_x = int(fcen*nSiO2*sx) + 1
- nm_y = int(fcen*nSiO2*sy) + 1
+ nm_x = int(fcen * nSiO2 * sx) + 1
+ nm_y = int(fcen * nSiO2 * sy) + 1
for m_x in range(nm_x):
for m_y in range(nm_y):
- for S_pol in [False,True]:
- res = sim.get_eigenmode_coefficients(refl_flux,
- mp.DiffractedPlanewave([m_x,m_y,0],
- mp.Vector3(1,0,0),
- 1 if S_pol else 0,
- 0 if S_pol else 1))
+ for S_pol in [False, True]:
+ res = sim.get_eigenmode_coefficients(
+ refl_flux,
+ mp.DiffractedPlanewave(
+ [m_x, m_y, 0],
+ mp.Vector3(1, 0, 0),
+ 1 if S_pol else 0,
+ 0 if S_pol else 1,
+ ),
+ )
r_coeffs = res.alpha
- Rmode = abs(r_coeffs[0,0,1])**2/input_flux[0]
- print("refl-order:, {}, {}, {}, {:.6f}".format("s" if S_pol else "p",m_x,m_y,Rmode))
+ Rmode = abs(r_coeffs[0, 0, 1]) ** 2 / input_flux[0]
+ print(
+ "refl-order:, {}, {}, {}, {:.6f}".format(
+ "s" if S_pol else "p", m_x, m_y, Rmode
+ )
+ )
if m_x == 0 and m_y == 0:
Rsum += Rmode
elif (m_x != 0 and m_y == 0) or (m_x == 0 and m_y != 0):
- Rsum += 2*Rmode
+ Rsum += 2 * Rmode
else:
- Rsum += 4*Rmode
-
+ Rsum += 4 * Rmode
# sum the Poynting flux in z direction for all transmitted orders
Tsum = 0
# number of transmitted modes/orders in air in x and y directions (upper bound)
- nm_x = int(fcen*sx) + 1
- nm_y = int(fcen*sy) + 1
+ nm_x = int(fcen * sx) + 1
+ nm_y = int(fcen * sy) + 1
for m_x in range(nm_x):
for m_y in range(nm_y):
- for S_pol in [False,True]:
- res = sim.get_eigenmode_coefficients(tran_flux,
- mp.DiffractedPlanewave([m_x,m_y,0],
- mp.Vector3(1,0,0),
- 1 if S_pol else 0,
- 0 if S_pol else 1))
+ for S_pol in [False, True]:
+ res = sim.get_eigenmode_coefficients(
+ tran_flux,
+ mp.DiffractedPlanewave(
+ [m_x, m_y, 0],
+ mp.Vector3(1, 0, 0),
+ 1 if S_pol else 0,
+ 0 if S_pol else 1,
+ ),
+ )
t_coeffs = res.alpha
- Tmode = abs(t_coeffs[0,0,0])**2/input_flux[0]
- print("tran-order:, {}, {}, {}, {:.6f}".format("s" if S_pol else "p",m_x,m_y,Tmode))
+ Tmode = abs(t_coeffs[0, 0, 0]) ** 2 / input_flux[0]
+ print(
+ "tran-order:, {}, {}, {}, {:.6f}".format(
+ "s" if S_pol else "p", m_x, m_y, Tmode
+ )
+ )
if m_x == 0 and m_y == 0:
Tsum += Tmode
elif (m_x != 0 and m_y == 0) or (m_x == 0 and m_y != 0):
- Tsum += 2*Tmode
+ Tsum += 2 * Tmode
else:
- Tsum += 4*Tmode
-
+ Tsum += 4 * Tmode
r_flux = mp.get_fluxes(refl_flux)
t_flux = mp.get_fluxes(tran_flux)
- Rflux = -r_flux[0]/input_flux[0]
- Tflux = t_flux[0]/input_flux[0]
+ Rflux = -r_flux[0] / input_flux[0]
+ Tflux = t_flux[0] / input_flux[0]
- print("refl:, {}, {}".format(Rsum,Rflux))
- print("tran:, {}, {}".format(Tsum,Tflux))
- print("sum:, {}, {}".format(Rsum+Tsum,Rflux+Tflux))
+ print("refl:, {}, {}".format(Rsum, Rflux))
+ print("tran:, {}, {}".format(Tsum, Tflux))
+ print("sum:, {}, {}".format(Rsum + Tsum, Rflux + Tflux))
## to obtain agreement for two decimal digits,
## the resolution must be increased to 200
- self.assertAlmostEqual(Rsum,Rflux,places=1)
- self.assertAlmostEqual(Tsum,Tflux,places=2)
- self.assertAlmostEqual(Rsum+Tsum,1.00,places=1)
-
+ self.assertAlmostEqual(Rsum, Rflux, places=1)
+ self.assertAlmostEqual(Tsum, Tflux, places=2)
+ self.assertAlmostEqual(Rsum + Tsum, 1.00, places=1)
def test_triangular_lattice_oblique(self):
"""Unit test for mode decomposition in 3d with nonzero k_point.
@@ -342,7 +410,7 @@ def test_triangular_lattice_oblique(self):
glass = mp.Medium(index=ng)
wvl = 0.5
- fcen = 1/wvl
+ fcen = 1 / wvl
dpml = 1.0
dsub = 2.0
@@ -353,13 +421,13 @@ def test_triangular_lattice_oblique(self):
a = 0.6
sx = a
- sy = a*np.sqrt(3)
+ sy = a * np.sqrt(3)
- sz = dpml+dsub+hcyl+dair+dpml
+ sz = dpml + dsub + hcyl + dair + dpml
- cell_size = mp.Vector3(sx,sy,sz)
+ cell_size = mp.Vector3(sx, sy, sz)
- boundary_layers = [mp.PML(thickness=dpml,direction=mp.Z)]
+ boundary_layers = [mp.PML(thickness=dpml, direction=mp.Z)]
# plane of incidence is yz
# 0° is +z with CCW rotation about x
@@ -371,39 +439,44 @@ def test_triangular_lattice_oblique(self):
# The planewave source is incident from within the high-index
# medium which means ω = c|k|/n where n is the index of medium.
# In Meep units (c=1), this implies |k| = nω.
- k = mp.Vector3(0,0,ng*fcen).rotate(mp.Vector3(1,0,0),theta)
+ k = mp.Vector3(0, 0, ng * fcen).rotate(mp.Vector3(1, 0, 0), theta)
- def pw_amp(k,x0):
+ def pw_amp(k, x0):
def _pw_amp(x):
- return cmath.exp(1j*2*math.pi*k.dot(x+x0))
+ return cmath.exp(1j * 2 * math.pi * k.dot(x + x0))
+
return _pw_amp
- src_pt = mp.Vector3(0,0,-0.5*sz+dpml)
- src_cmpt = mp.Ex # S-pol: Ex / P-pol: Ey
- sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.1*fcen),
- size=mp.Vector3(sx,sy,0),
- center=src_pt,
- component=src_cmpt,
- amp_func=pw_amp(k,src_pt))]
-
- symmetries = [mp.Mirror(direction=mp.X, phase=-1 if src_cmpt==mp.Ex else +1)]
-
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- sources=sources,
- default_material=glass,
- boundary_layers=boundary_layers,
- k_point=k,
- symmetries=symmetries)
-
- refl_pt = mp.Vector3(0,0,-0.5*sz+dpml+0.5*dsub)
- refl_flux = sim.add_mode_monitor(fcen,
- 0,
- 1,
- mp.ModeRegion(center=refl_pt,
- size=mp.Vector3(sx,sy,0)))
-
- stop_cond = mp.stop_when_fields_decayed(25,src_cmpt,src_pt,1e-6)
+ src_pt = mp.Vector3(0, 0, -0.5 * sz + dpml)
+ src_cmpt = mp.Ex # S-pol: Ex / P-pol: Ey
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=0.1 * fcen),
+ size=mp.Vector3(sx, sy, 0),
+ center=src_pt,
+ component=src_cmpt,
+ amp_func=pw_amp(k, src_pt),
+ )
+ ]
+
+ symmetries = [mp.Mirror(direction=mp.X, phase=-1 if src_cmpt == mp.Ex else +1)]
+
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ sources=sources,
+ default_material=glass,
+ boundary_layers=boundary_layers,
+ k_point=k,
+ symmetries=symmetries,
+ )
+
+ refl_pt = mp.Vector3(0, 0, -0.5 * sz + dpml + 0.5 * dsub)
+ refl_flux = sim.add_mode_monitor(
+ fcen, 0, 1, mp.ModeRegion(center=refl_pt, size=mp.Vector3(sx, sy, 0))
+ )
+
+ stop_cond = mp.stop_when_fields_decayed(25, src_cmpt, src_pt, 1e-6)
sim.run(until_after_sources=stop_cond)
input_flux = mp.get_fluxes(refl_flux)[0]
@@ -411,55 +484,77 @@ def _pw_amp(x):
sim.reset_meep()
- substrate = [mp.Block(size=mp.Vector3(mp.inf,mp.inf,dpml+dsub),
- center=mp.Vector3(0,0,-0.5*sz+0.5*(dpml+dsub)),
- material=glass)]
-
- grating = [mp.Cylinder(center=mp.Vector3(0,0,-0.5*sz+dpml+dsub+0.5*hcyl),
- radius=rcyl,
- height=hcyl,
- material=glass),
- mp.Cylinder(center=mp.Vector3(0.5*sx,0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl),
- radius=rcyl,
- height=hcyl,
- material=glass),
- mp.Cylinder(center=mp.Vector3(-0.5*sx,0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl),
- radius=rcyl,
- height=hcyl,
- material=glass),
- mp.Cylinder(center=mp.Vector3(0.5*sx,-0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl),
- radius=rcyl,
- height=hcyl,
- material=glass),
- mp.Cylinder(center=mp.Vector3(-0.5*sx,-0.5*sy,-0.5*sz+dpml+dsub+0.5*hcyl),
- radius=rcyl,
- height=hcyl,
- material=glass)]
+ substrate = [
+ mp.Block(
+ size=mp.Vector3(mp.inf, mp.inf, dpml + dsub),
+ center=mp.Vector3(0, 0, -0.5 * sz + 0.5 * (dpml + dsub)),
+ material=glass,
+ )
+ ]
+
+ grating = [
+ mp.Cylinder(
+ center=mp.Vector3(0, 0, -0.5 * sz + dpml + dsub + 0.5 * hcyl),
+ radius=rcyl,
+ height=hcyl,
+ material=glass,
+ ),
+ mp.Cylinder(
+ center=mp.Vector3(
+ 0.5 * sx, 0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl
+ ),
+ radius=rcyl,
+ height=hcyl,
+ material=glass,
+ ),
+ mp.Cylinder(
+ center=mp.Vector3(
+ -0.5 * sx, 0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl
+ ),
+ radius=rcyl,
+ height=hcyl,
+ material=glass,
+ ),
+ mp.Cylinder(
+ center=mp.Vector3(
+ 0.5 * sx, -0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl
+ ),
+ radius=rcyl,
+ height=hcyl,
+ material=glass,
+ ),
+ mp.Cylinder(
+ center=mp.Vector3(
+ -0.5 * sx, -0.5 * sy, -0.5 * sz + dpml + dsub + 0.5 * hcyl
+ ),
+ radius=rcyl,
+ height=hcyl,
+ material=glass,
+ ),
+ ]
geometry = substrate + grating
- sim = mp.Simulation(resolution=resolution,
- cell_size=cell_size,
- sources=sources,
- geometry=geometry,
- boundary_layers=boundary_layers,
- k_point=k,
- symmetries=symmetries)
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ sources=sources,
+ geometry=geometry,
+ boundary_layers=boundary_layers,
+ k_point=k,
+ symmetries=symmetries,
+ )
- refl_flux = sim.add_mode_monitor(fcen,
- 0,
- 1,
- mp.ModeRegion(center=refl_pt,
- size=mp.Vector3(sx,sy,0)))
+ refl_flux = sim.add_mode_monitor(
+ fcen, 0, 1, mp.ModeRegion(center=refl_pt, size=mp.Vector3(sx, sy, 0))
+ )
sim.load_minus_flux_data(refl_flux, input_flux_data)
- tran_pt = mp.Vector3(0,0,0.5*sz-dpml)
- tran_flux = sim.add_mode_monitor(fcen,
- 0,
- 1,
- mp.ModeRegion(center=tran_pt,
- size=mp.Vector3(sx,sy,0)))
+ tran_pt = mp.Vector3(0, 0, 0.5 * sz - dpml)
+ tran_flux = sim.add_mode_monitor(
+ fcen, 0, 1, mp.ModeRegion(center=tran_pt, size=mp.Vector3(sx, sy, 0))
+ )
sim.run(until_after_sources=stop_cond)
@@ -467,76 +562,107 @@ def _pw_amp(x):
Tsum = 0
m = 5
tol = 1e-6
- for nx in range(-m,m+1):
- for ny in range(-m,m+1):
+ for nx in range(-m, m + 1):
+ for ny in range(-m, m + 1):
# convert supercell order to unit cell order
mx = nx
my = (nx + ny) // 2
# consider only propagating modes in high-index medium
- kz2 = (ng*fcen)**2-(k.x+nx/sx)**2-(k.y+ny/sy)**2
+ kz2 = (ng * fcen) ** 2 - (k.x + nx / sx) ** 2 - (k.y + ny / sy) ** 2
if kz2 > 0:
Rpol = 0
for S_pol in [True, False]:
- res = sim.get_eigenmode_coefficients(refl_flux,
- mp.DiffractedPlanewave((nx,ny,0),
- mp.Vector3(0,1,0),
- 1 if S_pol else 0,
- 0 if S_pol else 1))
+ res = sim.get_eigenmode_coefficients(
+ refl_flux,
+ mp.DiffractedPlanewave(
+ (nx, ny, 0),
+ mp.Vector3(0, 1, 0),
+ 1 if S_pol else 0,
+ 0 if S_pol else 1,
+ ),
+ )
coeffs = res.alpha
- refl = abs(coeffs[0,0,1])**2 / input_flux
+ refl = abs(coeffs[0, 0, 1]) ** 2 / input_flux
- pol_str = 'S' if S_pol else 'P'
+ pol_str = "S" if S_pol else "P"
if refl > tol:
# determine whether diffracted order is for the unit cell or super cell
if (nx + ny) % 2 == 0:
Rpol += refl
- print("refl:, {}, {:2d}, {:2d}, {:.5f}, (unit cell)".format(pol_str,mx,my,refl))
+ print(
+ "refl:, {}, {:2d}, {:2d}, {:.5f}, (unit cell)".format(
+ pol_str, mx, my, refl
+ )
+ )
else:
- print("refl:, {}, {:2d}, {:2d}, {:.7f}, (super cell)".format(pol_str,nx,ny,refl))
+ print(
+ "refl:, {}, {:2d}, {:2d}, {:.7f}, (super cell)".format(
+ pol_str, nx, ny, refl
+ )
+ )
Rsum += Rpol
# consider only propagating modes in air
- kz2 = fcen**2-(k.x+nx/sx)**2-(k.y+ny/sy)**2
+ kz2 = fcen**2 - (k.x + nx / sx) ** 2 - (k.y + ny / sy) ** 2
if kz2 > 0:
Tpol = 0
for S_pol in [True, False]:
- res = sim.get_eigenmode_coefficients(tran_flux,
- mp.DiffractedPlanewave((nx,ny,0),
- mp.Vector3(0,1,0),
- 1 if S_pol else 0,
- 0 if S_pol else 1))
+ res = sim.get_eigenmode_coefficients(
+ tran_flux,
+ mp.DiffractedPlanewave(
+ (nx, ny, 0),
+ mp.Vector3(0, 1, 0),
+ 1 if S_pol else 0,
+ 0 if S_pol else 1,
+ ),
+ )
coeffs = res.alpha
- tran = abs(coeffs[0,0,0])**2 / input_flux
+ tran = abs(coeffs[0, 0, 0]) ** 2 / input_flux
- pol_str = 'S' if S_pol else 'P'
+ pol_str = "S" if S_pol else "P"
if tran > tol:
# determine whether diffracted order is for the unit cell or super cell
if (nx + ny) % 2 == 0:
Tpol += tran
- print("tran:, {}, {:2d}, {:2d}, {:.5f}, (unit cell)".format(pol_str,mx,my,tran))
+ print(
+ "tran:, {}, {:2d}, {:2d}, {:.5f}, (unit cell)".format(
+ pol_str, mx, my, tran
+ )
+ )
else:
- print("tran:, {}, {:2d}, {:2d}, {:.7f}, (super cell)".format(pol_str,nx,ny,tran))
+ print(
+ "tran:, {}, {:2d}, {:2d}, {:.7f}, (super cell)".format(
+ pol_str, nx, ny, tran
+ )
+ )
Tsum += Tpol
-
Rflux = -mp.get_fluxes(refl_flux)[0] / input_flux
- err = abs(Rflux-Rsum)/Rflux
- print("refl:, {:.6f} (flux), {:.6f} (orders), {:.6f} (error)".format(Rflux,Rsum,err))
+ err = abs(Rflux - Rsum) / Rflux
+ print(
+ "refl:, {:.6f} (flux), {:.6f} (orders), {:.6f} (error)".format(
+ Rflux, Rsum, err
+ )
+ )
Tflux = mp.get_fluxes(tran_flux)[0] / input_flux
- err = abs(Tflux-Tsum)/Tflux
- print("tran:, {:.6f} (flux), {:.6f} (orders), {:.6f} (error)".format(Tflux,Tsum,err))
+ err = abs(Tflux - Tsum) / Tflux
+ print(
+ "tran:, {:.6f} (flux), {:.6f} (orders), {:.6f} (error)".format(
+ Tflux, Tsum, err
+ )
+ )
- self.assertAlmostEqual(Rsum,Rflux,places=3)
- self.assertAlmostEqual(Tsum,Tflux,places=3)
- self.assertAlmostEqual(Rsum+Tsum,1.00,places=2)
+ self.assertAlmostEqual(Rsum, Rflux, places=3)
+ self.assertAlmostEqual(Tsum, Tflux, places=3)
+ self.assertAlmostEqual(Rsum + Tsum, 1.00, places=2)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_mpb.py b/python/tests/test_mpb.py
index 0ddb79fcf..b50c87608 100644
--- a/python/tests/test_mpb.py
+++ b/python/tests/test_mpb.py
@@ -14,20 +14,25 @@
from meep import mpb
from utils import compare_arrays
-@unittest.skipIf(os.getenv('MEEP_SKIP_LARGE_TESTS', False), 'skipping large tests')
+
+@unittest.skipIf(os.getenv("MEEP_SKIP_LARGE_TESTS", False), "skipping large tests")
class TestModeSolver(unittest.TestCase):
- data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data'))
- examples_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'examples'))
+ data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data"))
+ examples_dir = os.path.abspath(
+ os.path.join(os.path.dirname(__file__), "..", "examples")
+ )
sys.path.insert(0, examples_dir)
def setUp(self):
self.start = time.time()
- self.filename_prefix = os.path.join(self.temp_dir, self.id().split('.')[-1] + '-' + str(mp.my_rank()))
+ self.filename_prefix = os.path.join(
+ self.temp_dir, self.id().split(".")[-1] + "-" + str(mp.my_rank())
+ )
print()
print(self.filename_prefix)
- print('=' * 24)
+ print("=" * 24)
@classmethod
def setUpClass(cls):
@@ -43,12 +48,7 @@ def tearDownClass(cls):
def init_solver(self, geom=True):
num_bands = 8
- k_points = [
- mp.Vector3(),
- mp.Vector3(0.5),
- mp.Vector3(0.5, 0.5),
- mp.Vector3()
- ]
+ k_points = [mp.Vector3(), mp.Vector3(0.5), mp.Vector3(0.5, 0.5), mp.Vector3()]
geometry = [mp.Cylinder(0.2, material=mp.Medium(epsilon=12))] if geom else []
k_points = mp.interpolate(4, k_points)
@@ -63,7 +63,7 @@ def init_solver(self, geom=True):
resolution=resolution,
filename_prefix=self.filename_prefix,
deterministic=True,
- tolerance=1e-12
+ tolerance=1e-12,
)
def test_attribute_accessors(self):
@@ -78,8 +78,8 @@ def test_attribute_accessors(self):
self.assertEqual(ms.mode_solver.get_libctl_ensure_periodicity(), True)
self.assertEqual(ms.mode_solver.eigensolver_flops, 0)
self.assertEqual(ms.mode_solver.negative_epsilon_ok, False)
- self.assertEqual(ms.mode_solver.epsilon_input_file, '')
- self.assertEqual(ms.mode_solver.mu_input_file, '')
+ self.assertEqual(ms.mode_solver.epsilon_input_file, "")
+ self.assertEqual(ms.mode_solver.mu_input_file, "")
self.assertEqual(ms.mode_solver.force_mu, False)
self.assertEqual(ms.mode_solver.use_simple_preconditioner, False)
self.assertEqual(ms.mode_solver.eigensolver_nwork, 3)
@@ -95,8 +95,8 @@ def test_attribute_accessors(self):
ms.ensure_periodicity = False
ms.eigensolver_flops = 20
ms.is_negative_epsilon_ok = True
- ms.epsilon_input_file = 'test'
- ms.mu_input_file = 'test'
+ ms.epsilon_input_file = "test"
+ ms.mu_input_file = "test"
ms.force_mu = True
ms.use_simple_preconditioner = True
ms.eigensolver_nwork = 4
@@ -111,8 +111,8 @@ def test_attribute_accessors(self):
self.assertEqual(ms.mode_solver.get_libctl_ensure_periodicity(), False)
self.assertEqual(ms.mode_solver.eigensolver_flops, 20)
self.assertEqual(ms.mode_solver.negative_epsilon_ok, True)
- self.assertEqual(ms.mode_solver.epsilon_input_file, 'test')
- self.assertEqual(ms.mode_solver.mu_input_file, 'test')
+ self.assertEqual(ms.mode_solver.epsilon_input_file, "test")
+ self.assertEqual(ms.mode_solver.mu_input_file, "test")
self.assertEqual(ms.mode_solver.force_mu, True)
self.assertEqual(ms.mode_solver.use_simple_preconditioner, True)
self.assertEqual(ms.mode_solver.eigensolver_nwork, 4)
@@ -129,12 +129,7 @@ def test_resolution(self):
ms.resolution = [32, 32, 32]
def test_list_split(self):
- k_points = [
- mp.Vector3(),
- mp.Vector3(0.5),
- mp.Vector3(0.5, 0.5),
- mp.Vector3()
- ]
+ k_points = [mp.Vector3(), mp.Vector3(0.5), mp.Vector3(0.5, 0.5), mp.Vector3()]
k_points = mp.interpolate(4, k_points)
ms = mpb.ModeSolver()
@@ -196,13 +191,17 @@ def check_band_range_data(self, expected_brd, result, places=3, tol=1e-3):
self.assertAlmostEqual(exp[0][0], res[0][0], places=places)
# Compare min k
msg = "expected {}, got {}"
- self.assertTrue(exp[0][1].close(res[0][1], tol=tol),
- msg=msg.format(exp[0][1], res[0][1]))
+ self.assertTrue(
+ exp[0][1].close(res[0][1], tol=tol),
+ msg=msg.format(exp[0][1], res[0][1]),
+ )
# Compare max freqs
self.assertAlmostEqual(exp[1][0], res[1][0], places=places)
# Compare max k
- self.assertTrue(exp[1][1].close(res[1][1], tol=tol),
- msg=msg.format(exp[1][1], res[1][1]))
+ self.assertTrue(
+ exp[1][1].close(res[1][1], tol=tol),
+ msg=msg.format(exp[1][1], res[1][1]),
+ )
def check_freqs(self, expected_freqs, result):
for exp, res in zip(expected_freqs, result):
@@ -212,8 +211,8 @@ def check_freqs(self, expected_freqs, result):
def check_gap_list(self, expected_gap_list, result):
self.check_freqs(expected_gap_list, result)
- def check_fields_against_h5(self, ref_path, field, suffix=''):
- with h5py.File(ref_path, 'r') as ref:
+ def check_fields_against_h5(self, ref_path, field, suffix=""):
+ with h5py.File(ref_path, "r") as ref:
# Reshape the reference data into a component-wise 1d array like
# [x1,y1,z1,x2,y2,z2,etc.]
ref_x = mp.complexarray(ref[f"x.r{suffix}"][()], ref[f"x.i{suffix}"][()])
@@ -229,18 +228,25 @@ def check_fields_against_h5(self, ref_path, field, suffix=''):
def compare_h5_files(self, ref_path, res_path, tol=1e-3):
with h5py.File(ref_path) as ref:
- with h5py.File(res_path, 'r') as res:
+ with h5py.File(res_path, "r") as res:
for k in ref.keys():
- if k == 'description':
+ if k == "description":
self.assertEqual(ref[k][()], res[k][()])
else:
compare_arrays(self, ref[k][()], res[k][()], tol=tol)
def test_update_band_range_data(self):
brd = []
- freqs = [0.0, 1.0000000001231053, 1.0000000001577114, 1.000000000183077,
- 1.0000000003647922, 1.4142135627385737, 1.4142135630373556,
- 1.4142135634172286]
+ freqs = [
+ 0.0,
+ 1.0000000001231053,
+ 1.0000000001577114,
+ 1.000000000183077,
+ 1.0000000003647922,
+ 1.4142135627385737,
+ 1.4142135630373556,
+ 1.4142135634172286,
+ ]
kpoint = mp.Vector3()
expected = [
@@ -260,27 +266,50 @@ def test_update_band_range_data(self):
def test_run_te_no_geometry(self):
- expected_freqs = [0.0, 1.0, 1.0000000000000004, 1.0000000000000013,
- 1.0000000000000016, 1.4142135623730958, 1.4142135623730965,
- 1.414213562373097]
+ expected_freqs = [
+ 0.0,
+ 1.0,
+ 1.0000000000000004,
+ 1.0000000000000013,
+ 1.0000000000000016,
+ 1.4142135623730958,
+ 1.4142135623730965,
+ 1.414213562373097,
+ ]
expected_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.7071067811865476, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.5000000000350678, mp.Vector3(0.5, 0.0, 0.0)),
- (1.0000000000464613, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.7071067811884221, mp.Vector3(0.5, 0.5, 0.0)),
- (1.1180339887555244, mp.Vector3(0.5, 0.0, 0.0))),
- ((0.7071067811901163, mp.Vector3(0.5, 0.5, 0.0)),
- (1.1313708499266775, mp.Vector3(0.2, 0.2, 0.0))),
- ((1.000000000001028, mp.Vector3(0.0, 0.0, 0.0)),
- (1.5811388300846416, mp.Vector3(0.5, 0.5, 0.0))),
- ((1.1180339887687103, mp.Vector3(0.5, 0.0, 0.0)),
- (1.5811388300858549, mp.Vector3(0.5, 0.5, 0.0))),
- ((1.2806248475163993, mp.Vector3(0.20000000000000004, 0.0, 0.0)),
- (1.5811388300892486, mp.Vector3(0.5, 0.5, 0.0))),
- ((1.4142135623752818, mp.Vector3(0.0, 0.0, 0.0)),
- (1.8027756376524435, mp.Vector3(0.5, 0.0, 0.0))),
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.7071067811865476, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.5000000000350678, mp.Vector3(0.5, 0.0, 0.0)),
+ (1.0000000000464613, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.7071067811884221, mp.Vector3(0.5, 0.5, 0.0)),
+ (1.1180339887555244, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (0.7071067811901163, mp.Vector3(0.5, 0.5, 0.0)),
+ (1.1313708499266775, mp.Vector3(0.2, 0.2, 0.0)),
+ ),
+ (
+ (1.000000000001028, mp.Vector3(0.0, 0.0, 0.0)),
+ (1.5811388300846416, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (1.1180339887687103, mp.Vector3(0.5, 0.0, 0.0)),
+ (1.5811388300858549, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (1.2806248475163993, mp.Vector3(0.20000000000000004, 0.0, 0.0)),
+ (1.5811388300892486, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (1.4142135623752818, mp.Vector3(0.0, 0.0, 0.0)),
+ (1.8027756376524435, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
]
ms = self.init_solver(geom=False)
@@ -296,27 +325,53 @@ def test_run_te_no_geometry(self):
def test_run_te(self):
- expected_freqs = [0.0, 0.5527092320101986, 0.7732265593069759, 0.773229883948054,
- 0.9229965195855876, 1.0001711176882833, 1.0001720032257042,
- 1.092820931747826]
+ expected_freqs = [
+ 0.0,
+ 0.5527092320101986,
+ 0.7732265593069759,
+ 0.773229883948054,
+ 0.9229965195855876,
+ 1.0001711176882833,
+ 1.0001720032257042,
+ 1.092820931747826,
+ ]
expected_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.49683586474489877, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.4415884497225449, mp.Vector3(0.5, 0.0, 0.0)),
- (0.5931405141160885, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.5931535863117832, mp.Vector3(0.5, 0.5, 0.0)),
- (0.7732265593069759, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.6791690130757013, mp.Vector3(0.5, 0.5, 0.0)),
- (0.80968915516771, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0))),
- ((0.8241814443502151, mp.Vector3(0.5, 0.30000000000000004, 0.0)),
- (0.9229965195855876, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.8819770916660669, mp.Vector3(0.5, 0.5, 0.0)),
- (1.0291597050650205, mp.Vector3(0.5, 0.0, 0.0))),
- ((0.8819818134421844, mp.Vector3(0.5, 0.5, 0.0)),
- (1.086072932359415, mp.Vector3(0.5, 0.0, 0.0))),
- ((1.0878689635052692, mp.Vector3(0.5, 0.0, 0.0)),
- (1.1119173707556929, mp.Vector3(0.5, 0.5, 0.0))),
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.49683586474489877, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.4415884497225449, mp.Vector3(0.5, 0.0, 0.0)),
+ (0.5931405141160885, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.5931535863117832, mp.Vector3(0.5, 0.5, 0.0)),
+ (0.7732265593069759, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.6791690130757013, mp.Vector3(0.5, 0.5, 0.0)),
+ (
+ 0.80968915516771,
+ mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0),
+ ),
+ ),
+ (
+ (0.8241814443502151, mp.Vector3(0.5, 0.30000000000000004, 0.0)),
+ (0.9229965195855876, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.8819770916660669, mp.Vector3(0.5, 0.5, 0.0)),
+ (1.0291597050650205, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (0.8819818134421844, mp.Vector3(0.5, 0.5, 0.0)),
+ (1.086072932359415, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (1.0878689635052692, mp.Vector3(0.5, 0.0, 0.0)),
+ (1.1119173707556929, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
]
expected_gap_list = [
@@ -341,22 +396,41 @@ def test_run_te(self):
def test_run_tm(self):
expected_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.28094795352537366, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.4171142493246634, mp.Vector3(0.5, 0.0, 0.0)),
- (0.5460267793370319, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.49619745276546123, mp.Vector3(0.5, 0.5, 0.0)),
- (0.5576576362977246, mp.Vector3(0.5, 0.0, 0.0))),
- ((0.5520955864542503, mp.Vector3(0.0, 0.0, 0.0)),
- (0.7133951516423513, mp.Vector3(0.5, 0.0, 0.0))),
- ((0.7413109657068678, mp.Vector3(0.5, 0.0, 0.0)),
- (0.8594741069571248, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.8295176150251525, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0)),
- (0.8783155473463833, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.8625159053811312, mp.Vector3(0.5, 0.0, 0.0)),
- (0.9511074539064021, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.8793510958294801, mp.Vector3(0.5, 0.5, 0.0)),
- (1.0825923841450287, mp.Vector3(0.0, 0.0, 0.0))),
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.28094795352537366, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.4171142493246634, mp.Vector3(0.5, 0.0, 0.0)),
+ (0.5460267793370319, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.49619745276546123, mp.Vector3(0.5, 0.5, 0.0)),
+ (0.5576576362977246, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (0.5520955864542503, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.7133951516423513, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (0.7413109657068678, mp.Vector3(0.5, 0.0, 0.0)),
+ (0.8594741069571248, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (
+ 0.8295176150251525,
+ mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0),
+ ),
+ (0.8783155473463833, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.8625159053811312, mp.Vector3(0.5, 0.0, 0.0)),
+ (0.9511074539064021, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.8793510958294801, mp.Vector3(0.5, 0.5, 0.0)),
+ (1.0825923841450287, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
]
ms = self.init_solver()
@@ -378,26 +452,26 @@ def _test_get_field(self, field):
self.check_fields_against_h5(ref_path, fields)
def test_get_bfield(self):
- self._test_get_field('b')
+ self._test_get_field("b")
def test_get_efield(self):
- self._test_get_field('e')
+ self._test_get_field("e")
def test_get_dfield(self):
- self._test_get_field('d')
+ self._test_get_field("d")
def test_get_hfield(self):
- self._test_get_field('h')
+ self._test_get_field("h")
def test_output_field_to_file(self):
- fname = 'tutorial-epsilon.h5'
+ fname = "tutorial-epsilon.h5"
data_path = os.path.join(self.data_dir, fname)
ms = self.init_solver()
ms.run_te()
ms.output_epsilon()
- res_path = f'{self.filename_prefix}-epsilon.h5'
+ res_path = f"{self.filename_prefix}-epsilon.h5"
self.compare_h5_files(data_path, res_path)
def test_compute_field_energy(self):
@@ -415,21 +489,21 @@ def test_compute_field_energy(self):
self.assertAlmostEqual(pt, 1.330368347216153e-9)
expected_fp = mp.Vector3(
- 2.582338850993523e-05+6.674311589555886e-12j,
- -2.5759589225968237e-05-6.657825513845581e-12j,
- 0.0 - 0.0j
+ 2.582338850993523e-05 + 6.674311589555886e-12j,
+ -2.5759589225968237e-05 - 6.657825513845581e-12j,
+ 0.0 - 0.0j,
)
expected_bloch_fp = mp.Vector3(
2.5823356723958247e-5 + 6.713243287584132e-12j,
-2.575955745071957e-5 - 6.696552990958943e-12j,
- -0.0 - 0.0j
+ -0.0 - 0.0j,
)
expected_eps_inv_tensor = mp.Matrix(
mp.Vector3(1.0 + 0.0j, 0.0 - 0.0j, 0.0 - 0.0j),
mp.Vector3(0.0 + 0.0j, 1.0 + 0.0j, 0.0 - 0.0j),
- mp.Vector3(0.0 + 0.0j, 0.0 + 0.0j, 1.0 + 0.0j)
+ mp.Vector3(0.0 + 0.0j, 0.0 + 0.0j, 1.0 + 0.0j),
)
self.assertTrue(expected_fp.close(field_pt))
@@ -440,13 +514,22 @@ def test_compute_field_energy(self):
energy_in_dielectric = ms.compute_energy_in_dielectric(0, 1)
- expected_energy = [1.0000000000000002, 1.726755206037815e-5, 0.4999827324479414,
- 1.7267552060375955e-5, 0.4999827324479377, 0.0, 0.0]
+ expected_energy = [
+ 1.0000000000000002,
+ 1.726755206037815e-5,
+ 0.4999827324479414,
+ 1.7267552060375955e-5,
+ 0.4999827324479377,
+ 0.0,
+ 0.0,
+ ]
expected_energy_in_dielectric = 0.6990769686037558
compare_arrays(self, np.array(expected_energy), np.array(energy))
- self.assertAlmostEqual(expected_energy_in_dielectric, energy_in_dielectric, places=3)
+ self.assertAlmostEqual(
+ expected_energy_in_dielectric, energy_in_dielectric, places=3
+ )
def test_compute_group_velocity(self):
ms = self.init_solver()
@@ -456,8 +539,13 @@ def test_compute_group_velocity(self):
res3 = ms.compute_one_group_velocity_component(mp.Vector3(0.5, 0.5), 8)
expected1 = [
- 0.0, 1.470762578355642e-4, -1.4378185933055663e-4, 1.1897503996483383e-4,
- -4.892687048681629e-4, 1.1240346140784176e-4, 1.5842474585356007e-4,
+ 0.0,
+ 1.470762578355642e-4,
+ -1.4378185933055663e-4,
+ 1.1897503996483383e-4,
+ -4.892687048681629e-4,
+ 1.1240346140784176e-4,
+ 1.5842474585356007e-4,
4.496945573323881e-5,
]
@@ -476,23 +564,23 @@ def test_output_efield_z(self):
mpb.fix_efield_phase(ms, 8)
mpb.output_efield_z(ms, 8)
- ref_fname = 'tutorial-e.k16.b08.z.tm.h5'
+ ref_fname = "tutorial-e.k16.b08.z.tm.h5"
ref_path = os.path.join(self.data_dir, ref_fname)
- res_path = re.sub('tutorial', ms.filename_prefix, ref_fname)
+ res_path = re.sub("tutorial", ms.filename_prefix, ref_fname)
self.compare_h5_files(ref_path, res_path)
def test_output_dpwr_in_objects(self):
ms = self.init_solver()
ms.run_te(mpb.output_dpwr_in_objects(mpb.output_dfield, 0.85, ms.geometry))
- ref_fname1 = 'tutorial-d.k01.b02.te.h5'
- ref_fname2 = 'tutorial-d.k16.b02.te.h5'
+ ref_fname1 = "tutorial-d.k01.b02.te.h5"
+ ref_fname2 = "tutorial-d.k16.b02.te.h5"
ref_path1 = os.path.join(self.data_dir, ref_fname1)
ref_path2 = os.path.join(self.data_dir, ref_fname2)
- res_path1 = re.sub('tutorial', ms.filename_prefix, ref_fname1)
- res_path2 = re.sub('tutorial', ms.filename_prefix, ref_fname2)
+ res_path1 = re.sub("tutorial", ms.filename_prefix, ref_fname1)
+ res_path2 = re.sub("tutorial", ms.filename_prefix, ref_fname2)
self.compare_h5_files(ref_path1, res_path1)
self.compare_h5_files(ref_path2, res_path2)
@@ -500,36 +588,70 @@ def test_output_dpwr_in_objects(self):
def test_triangular_lattice(self):
expected_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.2746902258623623, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.44533108084715683, mp.Vector3(0.0, 0.5, 0.0)),
- (0.5605181423162835, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.4902389149027666, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)),
- (0.5605607947797747, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.5932960873585144, mp.Vector3(0.0, 0.0, 0.0)),
- (0.7907195974443698, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.790832076332758, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)),
- (0.8374511167537562, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.8375948528443267, mp.Vector3(0.0, 0.0, 0.0)),
- (0.867200926490345, mp.Vector3(-0.2, 0.39999999999999997, 0.0))),
- ((0.8691349955739203, mp.Vector3(-0.13333333333333336, 0.4333333333333333, 0.0)),
- (0.9941291022664892, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.8992499095547049, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)),
- (1.098318352915696, mp.Vector3(0.0, 0.0, 0.0))),
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (
+ 0.2746902258623623,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (0.44533108084715683, mp.Vector3(0.0, 0.5, 0.0)),
+ (0.5605181423162835, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (
+ 0.4902389149027666,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ (0.5605607947797747, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.5932960873585144, mp.Vector3(0.0, 0.0, 0.0)),
+ (
+ 0.7907195974443698,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (
+ 0.790832076332758,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ (0.8374511167537562, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.8375948528443267, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.867200926490345, mp.Vector3(-0.2, 0.39999999999999997, 0.0)),
+ ),
+ (
+ (
+ 0.8691349955739203,
+ mp.Vector3(-0.13333333333333336, 0.4333333333333333, 0.0),
+ ),
+ (0.9941291022664892, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (
+ 0.8992499095547049,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ (1.098318352915696, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
]
ms = self.init_solver()
ms.geometry_lattice = mp.Lattice(
size=mp.Vector3(1, 1),
basis1=mp.Vector3(math.sqrt(3) / 2, 0.5),
- basis2=mp.Vector3(math.sqrt(3) / 2, -0.5)
+ basis2=mp.Vector3(math.sqrt(3) / 2, -0.5),
)
k_points = [
mp.Vector3(),
mp.Vector3(y=0.5),
mp.Vector3(-1 / 3, 1 / 3),
- mp.Vector3()
+ mp.Vector3(),
]
ms.k_points = mp.interpolate(4, k_points)
@@ -538,7 +660,6 @@ def test_triangular_lattice(self):
self.check_band_range_data(expected_brd, ms.band_range_data)
def test_maximize_first_tm_gap(self):
-
def first_tm_gap(r):
ms.geometry = [mp.Cylinder(r, material=mp.Medium(epsilon=12))]
ms.run_tm()
@@ -548,34 +669,53 @@ def first_tm_gap(r):
ms.num_bands = 2
ms.mesh_size = 7
- result = minimize_scalar(first_tm_gap, method='bounded', bounds=[0.1, 0.5], options={'xatol': 0.1})
+ result = minimize_scalar(
+ first_tm_gap, method="bounded", bounds=[0.1, 0.5], options={"xatol": 0.1}
+ )
expected = 39.10325687542367
self.assertAlmostEqual(expected, result.fun * -1, places=2)
def test_anisotropic_2d_gap(self):
expected_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.2213165540404889, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.23068427462181276, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.21691192680454566, mp.Vector3(0.5, 0.0, 0.0)),
- (0.319020283148369, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.30110868065428525, mp.Vector3(0.5, 0.0, 0.0)),
- (0.3648353129125716, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.30701621910773247, mp.Vector3(0.5, 0.5, 0.0)),
- (0.3852513546698513, mp.Vector3(0.1, 0.1, 0.0))),
- ((0.341835260571013, mp.Vector3(0.5, 0.30000000000000004, 0.0)),
- (0.391421048600237, mp.Vector3(0.5, 0.10000000000000003, 0.0))),
- ((0.34982139739904294, mp.Vector3(0.5, 0.5, 0.0)),
- (0.4075642914057991, mp.Vector3(0.4, 0.0, 0.0))),
- ((0.3963465468598276, mp.Vector3(0.1, 0.1, 0.0)),
- (0.4772237204606825, mp.Vector3(0.5, 0.5, 0.0))),
-
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.2213165540404889, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.23068427462181276, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.21691192680454566, mp.Vector3(0.5, 0.0, 0.0)),
+ (0.319020283148369, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.30110868065428525, mp.Vector3(0.5, 0.0, 0.0)),
+ (0.3648353129125716, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.30701621910773247, mp.Vector3(0.5, 0.5, 0.0)),
+ (0.3852513546698513, mp.Vector3(0.1, 0.1, 0.0)),
+ ),
+ (
+ (0.341835260571013, mp.Vector3(0.5, 0.30000000000000004, 0.0)),
+ (0.391421048600237, mp.Vector3(0.5, 0.10000000000000003, 0.0)),
+ ),
+ (
+ (0.34982139739904294, mp.Vector3(0.5, 0.5, 0.0)),
+ (0.4075642914057991, mp.Vector3(0.4, 0.0, 0.0)),
+ ),
+ (
+ (0.3963465468598276, mp.Vector3(0.1, 0.1, 0.0)),
+ (0.4772237204606825, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
]
ms = self.init_solver()
- ms.geometry = [mp.Cylinder(0.3, material=mp.Medium(epsilon_diag=mp.Vector3(1, 1, 12)))]
+ ms.geometry = [
+ mp.Cylinder(0.3, material=mp.Medium(epsilon_diag=mp.Vector3(1, 1, 12)))
+ ]
ms.default_material = mp.Medium(epsilon_diag=mp.Vector3(12, 12, 1))
ms.num_bands = 8
ms.run()
@@ -588,7 +728,9 @@ def test_point_defect_state(self):
ms.geometry_lattice = mp.Lattice(size=mp.Vector3(5, 5))
ms.geometry = [mp.Cylinder(0.2, material=mp.Medium(epsilon=12))]
- ms.geometry = mp.geometric_objects_lattice_duplicates(ms.geometry_lattice, ms.geometry)
+ ms.geometry = mp.geometric_objects_lattice_duplicates(
+ ms.geometry_lattice, ms.geometry
+ )
ms.geometry.append(mp.Cylinder(0.2, material=mp.air))
ms.resolution = 16
@@ -613,8 +755,10 @@ def test_point_defect_state(self):
ms.run_tm()
expected_brd = [
- ((0.37730041222979477, mp.Vector3(0.5, 0.5, 0.0)),
- (0.37730041222979477, mp.Vector3(0.5, 0.5, 0.0))),
+ (
+ (0.37730041222979477, mp.Vector3(0.5, 0.5, 0.0)),
+ (0.37730041222979477, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
]
self.check_band_range_data(expected_brd, ms.band_range_data)
@@ -622,7 +766,9 @@ def test_point_defect_state(self):
old_geometry = ms.geometry # save the 5x5 grid with a missing rod
def rootfun(eps):
- ms.geometry = old_geometry + [mp.Cylinder(0.2, material=mp.Medium(epsilon=eps))]
+ ms.geometry = old_geometry + [
+ mp.Cylinder(0.2, material=mp.Medium(epsilon=eps))
+ ]
ms.run_tm()
return ms.get_freqs()[0] - 0.314159
@@ -638,42 +784,60 @@ def test_output_charge_density(self):
mpb.fix_efield_phase(ms, 8)
mpb.output_charge_density(ms, 8)
- ref_fn = 'tutorial-C.k16.b08.te.h5'
+ ref_fn = "tutorial-C.k16.b08.te.h5"
ref_path = os.path.join(self.data_dir, ref_fn)
- res_path = re.sub('tutorial', ms.filename_prefix, ref_fn)
+ res_path = re.sub("tutorial", ms.filename_prefix, ref_fn)
self.compare_h5_files(ref_path, res_path)
def test_bragg_sine(self):
from mpb_bragg_sine import ms
+
ms.deterministic = True
ms.tolerance = 1e-12
ms.filename_prefix = self.filename_prefix
ms.run_tm()
expected_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.19477466366820298, mp.Vector3(0.5, 0.0, 0.0))),
- ((0.306403026230844, mp.Vector3(0.5, 0.0, 0.0)),
- (0.4687748525867193, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.5466257501317459, mp.Vector3(0.0, 0.0, 0.0)),
- (0.7316504426541637, mp.Vector3(0.5, 0.0, 0.0))),
- ((0.7842615905093812, mp.Vector3(0.5, 0.0, 0.0)),
- (0.9893486155437277, mp.Vector3(0.0, 0.0, 0.0))),
- ((1.0240548648147831, mp.Vector3(0.0, 0.0, 0.0)),
- (1.244098004202588, mp.Vector3(0.5, 0.0, 0.0))),
- ((1.266656686185507, mp.Vector3(0.5, 0.0, 0.0)),
- (1.4970379696966822, mp.Vector3(0.0, 0.0, 0.0))),
- ((1.5115800994652884, mp.Vector3(0.0, 0.0, 0.0)),
- (1.7488359039910502, mp.Vector3(0.5, 0.0, 0.0))),
- ((1.7581683208483643, mp.Vector3(0.5, 0.0, 0.0)),
- (1.9999072007119787, mp.Vector3(0.0, 0.0, 0.0))),
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.19477466366820298, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (0.306403026230844, mp.Vector3(0.5, 0.0, 0.0)),
+ (0.4687748525867193, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.5466257501317459, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.7316504426541637, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (0.7842615905093812, mp.Vector3(0.5, 0.0, 0.0)),
+ (0.9893486155437277, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (1.0240548648147831, mp.Vector3(0.0, 0.0, 0.0)),
+ (1.244098004202588, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (1.266656686185507, mp.Vector3(0.5, 0.0, 0.0)),
+ (1.4970379696966822, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (1.5115800994652884, mp.Vector3(0.0, 0.0, 0.0)),
+ (1.7488359039910502, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (1.7581683208483643, mp.Vector3(0.5, 0.0, 0.0)),
+ (1.9999072007119787, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
]
self.check_band_range_data(expected_brd, ms.band_range_data)
def test_bragg(self):
from mpb_bragg import ms
+
ms.deterministic = True
ms.tolerance = 1e-12
ms.filename_prefix = self.filename_prefix
@@ -681,14 +845,15 @@ def test_bragg(self):
mpb.fix_hfield_phase(ms, 8)
mpb.output_hfield_y(ms, 8)
- ref_fn = 'bragg-h.k01.b08.y.tm.h5'
+ ref_fn = "bragg-h.k01.b08.y.tm.h5"
ref_path = os.path.join(self.data_dir, ref_fn)
- res_path = re.sub('bragg', self.filename_prefix, ref_fn)
+ res_path = re.sub("bragg", self.filename_prefix, ref_fn)
self.compare_h5_files(ref_path, res_path)
def test_diamond(self):
from mpb_diamond import ms
+
ms.deterministic = True
ms.filename_prefix = self.filename_prefix
ms.tolerance = 1e-12
@@ -697,46 +862,62 @@ def test_diamond(self):
def get_dpwr(ms, band):
dpwr.append(ms.get_dpwr(band))
- ms.run(mpb.output_at_kpoint(mp.Vector3(0, 0.625, 0.375),
- mpb.fix_dfield_phase,
- mpb.output_dpwr,
- get_dpwr))
+ ms.run(
+ mpb.output_at_kpoint(
+ mp.Vector3(0, 0.625, 0.375),
+ mpb.fix_dfield_phase,
+ mpb.output_dpwr,
+ get_dpwr,
+ )
+ )
expected_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.39455107895905156, mp.Vector3(0.25, 0.75, 0.5))),
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.3967658014080592, mp.Vector3(0.29999999999999993, 0.75, 0.45000000000000007))),
- ((0.4423707668172989, mp.Vector3(0.0, 0.5, 0.0)),
- (0.5955899630254676, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.44355516512198145, mp.Vector3(0.0, 0.5, 0.0)),
- (0.5958191312898851, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.5030135895148902, mp.Vector3(0.0, 0.6, 0.4)),
- (0.5958386856926985, mp.Vector3(0.0, 0.0, 0.0))),
-
-
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.39455107895905156, mp.Vector3(0.25, 0.75, 0.5)),
+ ),
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (
+ 0.3967658014080592,
+ mp.Vector3(0.29999999999999993, 0.75, 0.45000000000000007),
+ ),
+ ),
+ (
+ (0.4423707668172989, mp.Vector3(0.0, 0.5, 0.0)),
+ (0.5955899630254676, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.44355516512198145, mp.Vector3(0.0, 0.5, 0.0)),
+ (0.5958191312898851, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.5030135895148902, mp.Vector3(0.0, 0.6, 0.4)),
+ (0.5958386856926985, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
]
self.check_band_range_data(expected_brd, ms.band_range_data)
- ref_fn = 'diamond-dpwr.k06.b05.h5'
+ ref_fn = "diamond-dpwr.k06.b05.h5"
ref_path = os.path.join(self.data_dir, ref_fn)
- res_path = re.sub('diamond', self.filename_prefix, ref_fn)
+ res_path = re.sub("diamond", self.filename_prefix, ref_fn)
self.compare_h5_files(ref_path, res_path)
# Test MPBData.convert()
md = mpb.MPBData(rectify=True, periods=2, resolution=32)
converted_dpwr = [md.convert(d) for d in dpwr]
- ref_fn = 'converted-diamond-dpwr.k06.b05.h5'
+ ref_fn = "converted-diamond-dpwr.k06.b05.h5"
ref_path = os.path.join(self.data_dir, ref_fn)
- with h5py.File(ref_path, 'r') as f:
- expected = f['data-new'][()]
+ with h5py.File(ref_path, "r") as f:
+ expected = f["data-new"][()]
compare_arrays(self, expected, converted_dpwr[-1])
def test_hole_slab(self):
from mpb_hole_slab import ms
+
ms.deterministic = True
ms.filename_prefix = self.filename_prefix
ms.k_points = [mp.Vector3(1 / -3, 1 / 3)]
@@ -746,58 +927,123 @@ def test_hole_slab(self):
mpb.fix_hfield_phase(ms, 9)
mpb.output_hfield_z(ms, 9)
- ref_fn = 'hole-slab-h.k01.b09.z.zeven.h5'
+ ref_fn = "hole-slab-h.k01.b09.z.zeven.h5"
ref_path = os.path.join(self.data_dir, ref_fn)
- res_path = re.sub('hole-slab', self.filename_prefix, ref_fn)
+ res_path = re.sub("hole-slab", self.filename_prefix, ref_fn)
ms.display_eigensolver_stats()
self.compare_h5_files(ref_path, res_path)
def test_honey_rods(self):
from mpb_honey_rods import ms
+
ms.deterministic = True
ms.filename_prefix = self.filename_prefix
ms.tolerance = 1e-12
expected_tm_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.3351167660354989, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.3351850759916969, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)),
- (0.42984811237816406, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.5751709345431462, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)),
- (0.7255897672261712, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.6918627724774271, mp.Vector3(0.0, 0.5, 0.0)),
- (0.747622077830657, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.7443374497087805, mp.Vector3(-0.06666666666666667, 0.06666666666666667, 0.0)),
- (0.7793792212092525, mp.Vector3(0.0, 0.5, 0.0))),
- ((0.7852786984418492, mp.Vector3(0.0, 0.0, 0.0)),
- (0.8193652861712535, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.7856577771856611, mp.Vector3(0.0, 0.0, 0.0)),
- (0.9122560439014182, mp.Vector3(0.0, 0.5, 0.0))),
- ((1.0540350508135123, mp.Vector3(0.0, 0.5, 0.0)),
- (1.1492769389234725, mp.Vector3(0.0, 0.0, 0.0))),
-
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (
+ 0.3351167660354989,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (
+ 0.3351850759916969,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ (0.42984811237816406, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (
+ 0.5751709345431462,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ (0.7255897672261712, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.6918627724774271, mp.Vector3(0.0, 0.5, 0.0)),
+ (
+ 0.747622077830657,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (
+ 0.7443374497087805,
+ mp.Vector3(-0.06666666666666667, 0.06666666666666667, 0.0),
+ ),
+ (0.7793792212092525, mp.Vector3(0.0, 0.5, 0.0)),
+ ),
+ (
+ (0.7852786984418492, mp.Vector3(0.0, 0.0, 0.0)),
+ (
+ 0.8193652861712535,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (0.7856577771856611, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.9122560439014182, mp.Vector3(0.0, 0.5, 0.0)),
+ ),
+ (
+ (1.0540350508135123, mp.Vector3(0.0, 0.5, 0.0)),
+ (1.1492769389234725, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
]
ms.run_tm()
self.check_band_range_data(expected_tm_brd, ms.band_range_data)
expected_te_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.5535093489972593, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.5203183590840945, mp.Vector3(0.0, 0.5, 0.0)),
- (0.7278447515454929, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.576335859651312, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)),
- (0.7880878930618354, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.8161730293674944, mp.Vector3(0.0, 0.5, 0.0)),
- (0.9209611432140968, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.8385562359606971, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)),
- (0.9220849425898038, mp.Vector3(0.0, 0.0, 0.0))),
- ((1.0168656683915511, mp.Vector3(0.0, 0.0, 0.0)),
- (1.1083536673418435, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((1.0184507253059425, mp.Vector3(0.0, 0.0, 0.0)),
- (1.159370227370719, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((1.1636719050364361, mp.Vector3(-0.2, 0.2, 0.0)),
- (1.2433411839870618, mp.Vector3(0.0, 0.0, 0.0))),
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (
+ 0.5535093489972593,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (0.5203183590840945, mp.Vector3(0.0, 0.5, 0.0)),
+ (0.7278447515454929, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (
+ 0.576335859651312,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ (0.7880878930618354, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.8161730293674944, mp.Vector3(0.0, 0.5, 0.0)),
+ (0.9209611432140968, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (
+ 0.8385562359606971,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ (0.9220849425898038, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (1.0168656683915511, mp.Vector3(0.0, 0.0, 0.0)),
+ (
+ 1.1083536673418435,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (1.0184507253059425, mp.Vector3(0.0, 0.0, 0.0)),
+ (
+ 1.159370227370719,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (1.1636719050364361, mp.Vector3(-0.2, 0.2, 0.0)),
+ (1.2433411839870618, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
]
ms.run_te()
@@ -805,21 +1051,25 @@ def test_honey_rods(self):
def test_line_defect(self):
from mpb_line_defect import ms, k_points
+
ms.deterministic = True
ms.filename_prefix = self.filename_prefix
ms.tolerance = 1e-12
- ms.run_tm(mpb.output_at_kpoint(k_points[len(k_points) // 2]),
- mpb.fix_efield_phase,
- mpb.output_efield_z)
+ ms.run_tm(
+ mpb.output_at_kpoint(k_points[len(k_points) // 2]),
+ mpb.fix_efield_phase,
+ mpb.output_efield_z,
+ )
- ref_fn = 'line-defect-e.k04.b12.z.tm.h5'
+ ref_fn = "line-defect-e.k04.b12.z.tm.h5"
ref_path = os.path.join(self.data_dir, ref_fn)
- res_path = re.sub('line-defect', self.filename_prefix, ref_fn)
+ res_path = re.sub("line-defect", self.filename_prefix, ref_fn)
self.compare_h5_files(ref_path, res_path)
def test_sq_rods(self):
from mpb_sq_rods import ms
+
ms.deterministic = True
ms.filename_prefix = self.filename_prefix
ms.tolerance = 1e-12
@@ -827,22 +1077,44 @@ def test_sq_rods(self):
ms.run_te()
expected_te_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.5036058015219026, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.4446229134706744, mp.Vector3(0.5, 0.0, 0.0)),
- (0.5943440245519593, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.5943566394470321, mp.Vector3(0.5, 0.5, 0.0)),
- (0.7808428121911926, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.6793887413076383, mp.Vector3(0.5, 0.5, 0.0)),
- (0.8173893719542897, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0))),
- ((0.83045738223392, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0)),
- (0.9243716830585584, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.8957817684117546, mp.Vector3(0.5, 0.5, 0.0)),
- (1.0331104139200438, mp.Vector3(0.5, 0.0, 0.0))),
- ((0.8957868745330811, mp.Vector3(0.5, 0.5, 0.0)),
- (1.0958021492221048, mp.Vector3(0.5, 0.0, 0.0))),
- ((1.097416809585406, mp.Vector3(0.5, 0.0, 0.0)),
- (1.1280127648119964, mp.Vector3(0.5, 0.5, 0.0))),
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.5036058015219026, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.4446229134706744, mp.Vector3(0.5, 0.0, 0.0)),
+ (0.5943440245519593, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.5943566394470321, mp.Vector3(0.5, 0.5, 0.0)),
+ (0.7808428121911926, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.6793887413076383, mp.Vector3(0.5, 0.5, 0.0)),
+ (
+ 0.8173893719542897,
+ mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0),
+ ),
+ ),
+ (
+ (
+ 0.83045738223392,
+ mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0),
+ ),
+ (0.9243716830585584, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.8957817684117546, mp.Vector3(0.5, 0.5, 0.0)),
+ (1.0331104139200438, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (0.8957868745330811, mp.Vector3(0.5, 0.5, 0.0)),
+ (1.0958021492221048, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (1.097416809585406, mp.Vector3(0.5, 0.0, 0.0)),
+ (1.1280127648119964, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
]
self.check_band_range_data(expected_te_brd, ms.band_range_data)
@@ -850,28 +1122,48 @@ def test_sq_rods(self):
ms.run_tm()
expected_tm_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.285905779119655, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.42065733839975095, mp.Vector3(0.5, 0.0, 0.0)),
- (0.5503360754831277, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.5029830978365978, mp.Vector3(0.5, 0.5, 0.0)),
- (0.5671632878128118, mp.Vector3(0.5, 0.0, 0.0))),
- ((0.5613397939889757, mp.Vector3(0.0, 0.0, 0.0)),
- (0.7200918204563993, mp.Vector3(0.5, 0.0, 0.0))),
- ((0.7472029910480836, mp.Vector3(0.5, 0.0, 0.0)),
- (0.874359380500508, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.8404509697526803, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0)),
- (0.8833173725822788, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.8770118718330763, mp.Vector3(0.5, 0.0, 0.0)),
- (0.9653253808981632, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.8929933495598104, mp.Vector3(0.5, 0.5, 0.0)),
- (1.089377682009333, mp.Vector3(0.0, 0.0, 0.0))),
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.285905779119655, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.42065733839975095, mp.Vector3(0.5, 0.0, 0.0)),
+ (0.5503360754831277, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.5029830978365978, mp.Vector3(0.5, 0.5, 0.0)),
+ (0.5671632878128118, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (0.5613397939889757, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.7200918204563993, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (0.7472029910480836, mp.Vector3(0.5, 0.0, 0.0)),
+ (0.874359380500508, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (
+ 0.8404509697526803,
+ mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0),
+ ),
+ (0.8833173725822788, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.8770118718330763, mp.Vector3(0.5, 0.0, 0.0)),
+ (0.9653253808981632, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.8929933495598104, mp.Vector3(0.5, 0.5, 0.0)),
+ (1.089377682009333, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
]
self.check_band_range_data(expected_tm_brd, ms.band_range_data)
def test_strip(self):
from mpb_strip import ms
+
ms.deterministic = True
ms.filename_prefix = self.filename_prefix
ms.tolerance = 1e-12
@@ -881,8 +1173,18 @@ def test_strip(self):
y_parities = ms.mode_solver.compute_yparities()
z_parities = ms.mode_solver.compute_zparities()
- expected_y_parities = [-0.9997979443175137, 1.0000061871738222, -1.000010781704281, -0.9997880312884855]
- expected_z_parities = [0.9992335747085693, -0.9955122771195629, -0.9970929846091117, -0.9945407488966614]
+ expected_y_parities = [
+ -0.9997979443175137,
+ 1.0000061871738222,
+ -1.000010781704281,
+ -0.9997880312884855,
+ ]
+ expected_z_parities = [
+ 0.9992335747085693,
+ -0.9955122771195629,
+ -0.9970929846091117,
+ -0.9945407488966614,
+ ]
for e, r in zip(expected_y_parities, y_parities):
self.assertAlmostEqual(e, r, places=3)
@@ -892,28 +1194,40 @@ def test_strip(self):
frequency = 1 / 1.55
- kvals = ms.find_k(mp.NO_PARITY, frequency, 1, ms.num_bands, mp.Vector3(1), 1e-3,
- frequency * 3.45, frequency * 0.1, frequency * 4, mpb.output_poynting_x,
- mpb.display_yparities, mpb.display_group_velocities)
+ kvals = ms.find_k(
+ mp.NO_PARITY,
+ frequency,
+ 1,
+ ms.num_bands,
+ mp.Vector3(1),
+ 1e-3,
+ frequency * 3.45,
+ frequency * 0.1,
+ frequency * 4,
+ mpb.output_poynting_x,
+ mpb.display_yparities,
+ mpb.display_group_velocities,
+ )
expected_kvals = [
1.0395768316060294,
0.9776221778906993,
0.8358057689930384,
- 0.788801145849691
+ 0.788801145849691,
]
for e, r in zip(expected_kvals, kvals):
self.assertAlmostEqual(e, r, places=3)
- ref_fn = 'strip-flux.v.k01.b04.x.h5'
+ ref_fn = "strip-flux.v.k01.b04.x.h5"
ref_path = os.path.join(self.data_dir, ref_fn)
- res_path = re.sub('strip', self.filename_prefix, ref_fn)
+ res_path = re.sub("strip", self.filename_prefix, ref_fn)
self.compare_h5_files(ref_path, res_path)
def test_tri_holes(self):
from mpb_tri_holes import ms
+
ms.deterministic = True
ms.filename_prefix = self.filename_prefix
ms.tolerance = 1e-12
@@ -921,23 +1235,56 @@ def test_tri_holes(self):
ms.run_te()
expected_te_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.2993049473117476, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.4924342823622065, mp.Vector3(0.0, 0.5, 0.0)),
- (0.6568362683499375, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.5269710506448809, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)),
- (0.7156232200212518, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.6568031427446027, mp.Vector3(0.0, 0.5, 0.0)),
- (0.7578382217502109, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.7383774303752574, mp.Vector3(0.0, 0.0, 0.0)),
- (0.7988168792802597, mp.Vector3(0.0, 0.5, 0.0))),
- ((0.8259787164701536, mp.Vector3(0.0, 0.0, 0.0)),
- (0.9629215441012396, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.8271634538840886, mp.Vector3(0.0, 0.0, 0.0)),
- (0.9834563303529568, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.9984200611839882, mp.Vector3(-0.26666666666666666, 0.26666666666666666, 0.0)),
- (1.0411551252079034, mp.Vector3(0.0, 0.0, 0.0))),
-
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (
+ 0.2993049473117476,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (0.4924342823622065, mp.Vector3(0.0, 0.5, 0.0)),
+ (0.6568362683499375, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (
+ 0.5269710506448809,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ (0.7156232200212518, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.6568031427446027, mp.Vector3(0.0, 0.5, 0.0)),
+ (
+ 0.7578382217502109,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (0.7383774303752574, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.7988168792802597, mp.Vector3(0.0, 0.5, 0.0)),
+ ),
+ (
+ (0.8259787164701536, mp.Vector3(0.0, 0.0, 0.0)),
+ (
+ 0.9629215441012396,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (0.8271634538840886, mp.Vector3(0.0, 0.0, 0.0)),
+ (
+ 0.9834563303529568,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (
+ 0.9984200611839882,
+ mp.Vector3(-0.26666666666666666, 0.26666666666666666, 0.0),
+ ),
+ (1.0411551252079034, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
]
self.check_band_range_data(expected_te_brd, ms.band_range_data)
@@ -945,82 +1292,161 @@ def test_tri_holes(self):
ms.run_tm()
expected_tm_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.28009156817399916, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.28015523913784407, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)),
- (0.3985126081046686, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.4390817228448606, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)),
- (0.49288810189980625, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.49336847788268695, mp.Vector3(0.0, 0.0, 0.0)),
- (0.5808701365268192, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.581035246804371, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)),
- (0.6824860801372987, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.682531744671499, mp.Vector3(0.0, 0.0, 0.0)),
- (0.7011061593213783, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.6920145742134771, mp.Vector3(0.0, 0.0, 0.0)),
- (0.7841042622393081, mp.Vector3(0.0, 0.4, 0.0))),
- ((0.7980077872594108, mp.Vector3(0.0, 0.4, 0.0)),
- (0.8982239424823442, mp.Vector3(0.0, 0.0, 0.0))),
-
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (
+ 0.28009156817399916,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (
+ 0.28015523913784407,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ (0.3985126081046686, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (
+ 0.4390817228448606,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ (0.49288810189980625, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.49336847788268695, mp.Vector3(0.0, 0.0, 0.0)),
+ (
+ 0.5808701365268192,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (
+ 0.581035246804371,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ (0.6824860801372987, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.682531744671499, mp.Vector3(0.0, 0.0, 0.0)),
+ (
+ 0.7011061593213783,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (0.6920145742134771, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.7841042622393081, mp.Vector3(0.0, 0.4, 0.0)),
+ ),
+ (
+ (0.7980077872594108, mp.Vector3(0.0, 0.4, 0.0)),
+ (0.8982239424823442, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
]
self.check_band_range_data(expected_tm_brd, ms.band_range_data)
def test_tri_rods(self):
from mpb_tri_rods import ms
+
ms.deterministic = True
ms.tolerance = 1e-12
ms.filename_prefix = self.filename_prefix
- ms.run_tm(mpb.output_at_kpoint(mp.Vector3(1 / -3, 1 / 3),
- mpb.fix_efield_phase,
- mpb.output_efield_z))
+ ms.run_tm(
+ mpb.output_at_kpoint(
+ mp.Vector3(1 / -3, 1 / 3), mpb.fix_efield_phase, mpb.output_efield_z
+ )
+ )
- ref_fn = 'tri-rods-e.k11.b08.z.tm.h5'
+ ref_fn = "tri-rods-e.k11.b08.z.tm.h5"
ref_path = os.path.join(self.data_dir, ref_fn)
- res_path = re.sub('tri-rods', self.filename_prefix, ref_fn)
+ res_path = re.sub("tri-rods", self.filename_prefix, ref_fn)
self.compare_h5_files(ref_path, res_path)
# Test MPBData
- with h5py.File(ref_path, 'r') as f:
- efield_re = f['z.r'][()]
- efield_im = f['z.i'][()]
+ with h5py.File(ref_path, "r") as f:
+ efield_re = f["z.r"][()]
+ efield_im = f["z.i"][()]
efield = np.vectorize(complex)(efield_re, efield_im)
# rectangularize
- md = mpb.MPBData(lattice=ms.get_lattice(), rectify=True, resolution=32, periods=3, verbose=True)
+ md = mpb.MPBData(
+ lattice=ms.get_lattice(),
+ rectify=True,
+ resolution=32,
+ periods=3,
+ verbose=True,
+ )
new_efield = md.convert(efield, ms.k_points[10])
# check with ref file
- ref_fn = 'tri-rods-e.k11.b08.z.tm-r-m3-n32.h5'
+ ref_fn = "tri-rods-e.k11.b08.z.tm-r-m3-n32.h5"
ref_path = os.path.join(self.data_dir, ref_fn)
- with h5py.File(ref_path, 'r') as f:
- expected_re = f['z.r-new'][()]
- expected_im = f['z.i-new'][()]
+ with h5py.File(ref_path, "r") as f:
+ expected_re = f["z.r-new"][()]
+ expected_im = f["z.i-new"][()]
expected = np.vectorize(complex)(expected_re, expected_im)
compare_arrays(self, expected, new_efield)
ms.run_te()
expected_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.49123581186757737, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.4730722390280754, mp.Vector3(0.0, 0.5, 0.0)),
- (0.5631059378714038, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.5631505198559038, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)),
- (0.7939289395839766, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.7676614799039024, mp.Vector3(0.0, 0.5, 0.0)),
- (0.8214230044191525, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0))),
- ((0.865194814441525, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)),
- (1.0334130018594276, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.8652307994936862, mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0)),
- (1.0334230910419813, mp.Vector3(0.0, 0.0, 0.0))),
- ((1.021367669109368, mp.Vector3(0.0, 0.5, 0.0)),
- (1.115966990757518, mp.Vector3(0.0, 0.0, 0.0))),
- ((1.108662658537423, mp.Vector3(-0.26666666666666666, 0.26666666666666666, 0.0)),
- (1.1168107191255379, mp.Vector3(0.0, 0.0, 0.0))),
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (
+ 0.49123581186757737,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (0.4730722390280754, mp.Vector3(0.0, 0.5, 0.0)),
+ (
+ 0.5631059378714038,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (
+ 0.5631505198559038,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ (0.7939289395839766, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.7676614799039024, mp.Vector3(0.0, 0.5, 0.0)),
+ (
+ 0.8214230044191525,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ ),
+ (
+ (
+ 0.865194814441525,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ (1.0334130018594276, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (
+ 0.8652307994936862,
+ mp.Vector3(-0.3333333333333333, 0.3333333333333333, 0.0),
+ ),
+ (1.0334230910419813, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (1.021367669109368, mp.Vector3(0.0, 0.5, 0.0)),
+ (1.115966990757518, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (
+ 1.108662658537423,
+ mp.Vector3(-0.26666666666666666, 0.26666666666666666, 0.0),
+ ),
+ (1.1168107191255379, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
]
self.check_band_range_data(expected_brd, ms.band_range_data)
@@ -1029,11 +1455,11 @@ def test_tri_rods(self):
eps = ms.get_epsilon()
md = mpb.MPBData(rectify=True, resolution=32, periods=3, verbose=True)
new_eps = md.convert(eps)
- ref_fn = 'tri-rods-epsilon-r-m3-n32.h5'
+ ref_fn = "tri-rods-epsilon-r-m3-n32.h5"
ref_path = os.path.join(self.data_dir, ref_fn)
- with h5py.File(ref_path, 'r') as f:
- ref = f['data-new'][()]
+ with h5py.File(ref_path, "r") as f:
+ ref = f["data-new"][()]
compare_arrays(self, ref, new_eps, tol=1e-3)
def test_subpixel_averaging(self):
@@ -1042,33 +1468,52 @@ def test_subpixel_averaging(self):
ms.output_epsilon()
expected_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.49683586474489877, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.4415884497225449, mp.Vector3(0.5, 0.0, 0.0)),
- (0.5931405141160885, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.5931535863117832, mp.Vector3(0.5, 0.5, 0.0)),
- (0.7732265593069759, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.6791690130757013, mp.Vector3(0.5, 0.5, 0.0)),
- (0.80968915516771, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0))),
- ((0.8241814443502151, mp.Vector3(0.5, 0.30000000000000004, 0.0)),
- (0.9229965195855876, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.8819770916660669, mp.Vector3(0.5, 0.5, 0.0)),
- (1.0291597050650205, mp.Vector3(0.5, 0.0, 0.0))),
- ((0.8819818134421844, mp.Vector3(0.5, 0.5, 0.0)),
- (1.086072932359415, mp.Vector3(0.5, 0.0, 0.0))),
- ((1.0878689635052692, mp.Vector3(0.5, 0.0, 0.0)),
- (1.1119173707556929, mp.Vector3(0.5, 0.5, 0.0))),
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.49683586474489877, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.4415884497225449, mp.Vector3(0.5, 0.0, 0.0)),
+ (0.5931405141160885, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.5931535863117832, mp.Vector3(0.5, 0.5, 0.0)),
+ (0.7732265593069759, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.6791690130757013, mp.Vector3(0.5, 0.5, 0.0)),
+ (
+ 0.80968915516771,
+ mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0),
+ ),
+ ),
+ (
+ (0.8241814443502151, mp.Vector3(0.5, 0.30000000000000004, 0.0)),
+ (0.9229965195855876, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.8819770916660669, mp.Vector3(0.5, 0.5, 0.0)),
+ (1.0291597050650205, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (0.8819818134421844, mp.Vector3(0.5, 0.5, 0.0)),
+ (1.086072932359415, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (1.0878689635052692, mp.Vector3(0.5, 0.0, 0.0)),
+ (1.1119173707556929, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
]
expected_gap_list = [
(0.0022038709776893727, 0.5931405141160885, 0.5931535863117832),
(1.7739824912427062, 0.80968915516771, 0.8241814443502151),
- (0.1652326724344101, 1.086072932359415, 1.0878689635052692)
+ (0.1652326724344101, 1.086072932359415, 1.0878689635052692),
]
- ref_fn = 'subpixel_avg-epsilon.h5'
+ ref_fn = "subpixel_avg-epsilon.h5"
ref_path = os.path.join(self.data_dir, ref_fn)
- res_path = re.sub('subpixel_avg', self.filename_prefix, ref_fn)
+ res_path = re.sub("subpixel_avg", self.filename_prefix, ref_fn)
self.compare_h5_files(ref_path, res_path)
self.check_band_range_data(expected_brd, ms.band_range_data)
@@ -1079,36 +1524,55 @@ def test_run_te_with_mu_material(self):
ms.geometry = [mp.Cylinder(0.2, material=mp.Medium(mu=5))]
expected_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.4165291233037574, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.47328232348733695, mp.Vector3(0.5, 0.0, 0.0)),
- (0.6699867281290507, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.6301802646818523, mp.Vector3(0.5, 0.5, 0.0)),
- (0.8037365323032135, mp.Vector3(0.5, 0.0, 0.0))),
- ((0.7017932556977557, mp.Vector3(0.5, 0.5, 0.0)),
- (0.8863448167711359, mp.Vector3(0.5, 0.10000000000000003, 0.0))),
- ((0.9047498485809726, mp.Vector3(0.5, 0.10000000000000003, 0.0)),
- (1.0557468193007016, mp.Vector3(0.5, 0.5, 0.0))),
- ((1.0077925606103986, mp.Vector3(0.2, 0.2, 0.0)),
- (1.1815403744341757, mp.Vector3(0.0, 0.0, 0.0))),
- ((1.122424251973878, mp.Vector3(0.20000000000000004, 0.0, 0.0)),
- (1.2351567679231688, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0))),
- ((1.2059728636717586, mp.Vector3(0.0, 0.0, 0.0)),
- (1.3135062523646421, mp.Vector3(0.30000000000000004, 0.0, 0.0))),
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.4165291233037574, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.47328232348733695, mp.Vector3(0.5, 0.0, 0.0)),
+ (0.6699867281290507, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.6301802646818523, mp.Vector3(0.5, 0.5, 0.0)),
+ (0.8037365323032135, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (0.7017932556977557, mp.Vector3(0.5, 0.5, 0.0)),
+ (0.8863448167711359, mp.Vector3(0.5, 0.10000000000000003, 0.0)),
+ ),
+ (
+ (0.9047498485809726, mp.Vector3(0.5, 0.10000000000000003, 0.0)),
+ (1.0557468193007016, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (1.0077925606103986, mp.Vector3(0.2, 0.2, 0.0)),
+ (1.1815403744341757, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (1.122424251973878, mp.Vector3(0.20000000000000004, 0.0, 0.0)),
+ (
+ 1.2351567679231688,
+ mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0),
+ ),
+ ),
+ (
+ (1.2059728636717586, mp.Vector3(0.0, 0.0, 0.0)),
+ (1.3135062523646421, mp.Vector3(0.30000000000000004, 0.0, 0.0)),
+ ),
]
ms.run_te()
ms.output_mu()
self.check_band_range_data(expected_brd, ms.band_range_data)
- fname = 'tutorial-mu.h5'
+ fname = "tutorial-mu.h5"
data_path = os.path.join(self.data_dir, fname)
- res_path = re.sub('tutorial', self.filename_prefix, fname)
+ res_path = re.sub("tutorial", self.filename_prefix, fname)
self.compare_h5_files(data_path, res_path)
mu = ms.get_mu()
- with h5py.File(data_path, 'r') as f:
- data = f['data'][()]
+ with h5py.File(data_path, "r") as f:
+ data = f["data"][()]
compare_arrays(self, data, mu)
def test_output_tot_pwr(self):
@@ -1116,16 +1580,16 @@ def test_output_tot_pwr(self):
ms.run_te()
mpb.output_tot_pwr(ms, 8)
- ref_fname = 'tutorial-tot.rpwr.k16.b08.te.h5'
+ ref_fname = "tutorial-tot.rpwr.k16.b08.te.h5"
ref_path = os.path.join(self.data_dir, ref_fname)
- res_path = re.sub('tutorial', self.filename_prefix, ref_fname)
+ res_path = re.sub("tutorial", self.filename_prefix, ref_fname)
self.compare_h5_files(ref_path, res_path)
# Test get_tot_pwr
arr = ms.get_tot_pwr(8)
- with h5py.File(ref_path, 'r') as f:
- expected = f['data'][()]
+ with h5py.File(ref_path, "r") as f:
+ expected = f["data"][()]
compare_arrays(self, expected, arr)
@@ -1134,19 +1598,19 @@ def test_get_eigenvectors(self):
ms.run_te(mpb.fix_hfield_phase)
def compare_eigenvectors(ref_fn, start, cols):
- with h5py.File(os.path.join(self.data_dir, ref_fn), 'r') as f:
- expected = f['rawdata'][()]
+ with h5py.File(os.path.join(self.data_dir, ref_fn), "r") as f:
+ expected = f["rawdata"][()]
# Reshape the last dimension of 2 reals into one complex
expected = np.vectorize(complex)(expected[..., 0], expected[..., 1])
ev = ms.get_eigenvectors(start, cols)
np.testing.assert_allclose(expected, ev, rtol=1e-3)
# Get all columns
- compare_eigenvectors('tutorial-te-eigenvectors.h5', 1, 8)
+ compare_eigenvectors("tutorial-te-eigenvectors.h5", 1, 8)
# Get last column
- compare_eigenvectors('tutorial-te-eigenvectors-8-1.h5', 8, 1)
+ compare_eigenvectors("tutorial-te-eigenvectors-8-1.h5", 8, 1)
# Get columns 3,4, and 5
- compare_eigenvectors('tutorial-te-eigenvectors-3-3.h5', 3, 3)
+ compare_eigenvectors("tutorial-te-eigenvectors-3-3.h5", 3, 3)
def test_set_eigenvectors(self):
ms = self.init_solver()
@@ -1169,7 +1633,7 @@ def set_H_to_zero_and_check(start, num_bands):
def test_load_and_save_eigenvectors(self):
ms = self.init_solver()
ms.run_te()
- fn = self.filename_prefix + '.h5'
+ fn = self.filename_prefix + ".h5"
ev = ms.get_eigenvectors(8, 1)
zeros = np.zeros(ev.shape, dtype=np.complex128)
@@ -1183,6 +1647,7 @@ def test_load_and_save_eigenvectors(self):
def test_handle_cvector(self):
from mpb_tri_rods import ms
+
ms.deterministic = True
ms.tolerance = 1e-12
ms.filename_prefix = self.filename_prefix
@@ -1197,22 +1662,30 @@ def get_efields(ms, band):
md = mpb.MPBData(rectify=True, periods=3, resolution=32, verbose=True)
result = md.convert(efields[-1])
- ref_fn = 'converted-tri-rods-e.k11.b08.tm.h5'
+ ref_fn = "converted-tri-rods-e.k11.b08.tm.h5"
ref_path = os.path.join(self.data_dir, ref_fn)
- self.check_fields_against_h5(ref_path, result.ravel(), suffix='-new')
+ self.check_fields_against_h5(ref_path, result.ravel(), suffix="-new")
def test_epsilon_input_file(self):
ms = self.init_solver(geom=False)
- eps_fn = 'eps_input_file_test.h5'
+ eps_fn = "eps_input_file_test.h5"
ms.epsilon_input_file = os.path.join(self.data_dir, eps_fn)
ms.run_te()
- expected_freqs = np.array([
- 0.0, 0.5543986136451342, 0.7613327775255415, 0.7613339178956054,
- 0.8940893915924257, 0.998342969572652, 0.9983441882455961, 1.0747466061007138
- ])
+ expected_freqs = np.array(
+ [
+ 0.0,
+ 0.5543986136451342,
+ 0.7613327775255415,
+ 0.7613339178956054,
+ 0.8940893915924257,
+ 0.998342969572652,
+ 0.9983441882455961,
+ 1.0747466061007138,
+ ]
+ )
expected_gap_list = [
(3.848610367089048e-5, 0.5781812856814899, 0.5781815082009817),
@@ -1221,22 +1694,47 @@ def test_epsilon_input_file(self):
]
expected_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)),
- (0.4970977843772992, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.4402896410505961, mp.Vector3(0.5, 0.0, 0.0)),
- (0.5781812856814899, mp.Vector3(0.5, 0.5, 0.0))),
- ((0.5781815082009817, mp.Vector3(0.5, 0.5, 0.0)),
- (0.761332777525562, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.6689126424359774, mp.Vector3(0.5, 0.5, 0.0)),
- (0.8051999839699242, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0))),
- ((0.8170847453549156, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0)),
- (0.8940893915924548, mp.Vector3(0.0, 0.0, 0.0))),
- ((0.8826671164993868, mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0)),
- (1.0014926328155058, mp.Vector3(0.5, 0.0, 0.0))),
- ((0.8832199143682116, mp.Vector3(0.5, 0.5, 0.0)),
- (1.0580309832489785, mp.Vector3(0.5, 0.0, 0.0))),
- ((1.0660233597945266, mp.Vector3(0.2, 0.2, 0.0)),
- (1.087345829555555, mp.Vector3(0.5, 0.5, 0.0))),
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (0.4970977843772992, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.4402896410505961, mp.Vector3(0.5, 0.0, 0.0)),
+ (0.5781812856814899, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (0.5781815082009817, mp.Vector3(0.5, 0.5, 0.0)),
+ (0.761332777525562, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (0.6689126424359774, mp.Vector3(0.5, 0.5, 0.0)),
+ (
+ 0.8051999839699242,
+ mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0),
+ ),
+ ),
+ (
+ (
+ 0.8170847453549156,
+ mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0),
+ ),
+ (0.8940893915924548, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (
+ 0.8826671164993868,
+ mp.Vector3(0.30000000000000004, 0.30000000000000004, 0.0),
+ ),
+ (1.0014926328155058, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (0.8832199143682116, mp.Vector3(0.5, 0.5, 0.0)),
+ (1.0580309832489785, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (1.0660233597945266, mp.Vector3(0.2, 0.2, 0.0)),
+ (1.087345829555555, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
]
self.check_band_range_data(expected_brd, ms.band_range_data)
@@ -1251,78 +1749,265 @@ def test_hermitian_eps(self):
ms = self.init_solver()
ms.num_bands = 10
ms.geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1))
- ms.k_points = mp.interpolate(2, [mp.Vector3(), mp.Vector3(0.5),
- mp.Vector3(0.5, 0.5), mp.Vector3()])
+ ms.k_points = mp.interpolate(
+ 2, [mp.Vector3(), mp.Vector3(0.5), mp.Vector3(0.5, 0.5), mp.Vector3()]
+ )
if mpb.with_hermitian_epsilon():
mu_offdiag = mp.Vector3(0 + 12.4j, 0j, 0j)
else:
mu_offdiag = mp.Vector3(1.1 + 0j, 0j, 0j)
- mat = mp.Medium(epsilon=15, mu_diag=mp.Vector3(14, 14, 1), mu_offdiag=mu_offdiag)
+ mat = mp.Medium(
+ epsilon=15, mu_diag=mp.Vector3(14, 14, 1), mu_offdiag=mu_offdiag
+ )
ms.geometry = [mp.Cylinder(0.11, material=mat)]
ms.run_tm()
expected_freqs_with_herm_eps = [
- (0.0, 0.4632939699892961, 0.5786056046494645, 0.6510415824942094, 0.895078332795855,
- 0.9065629078750282, 0.9718615669186841, 1.0031527446201098, 1.0142458802909737, 1.0248230445372033),
- (0.12937769848279101, 0.4619527556321284, 0.5815596420443466, 0.6509684019890601,
- 0.8515085512592131, 0.8991327667388375, 0.9483381392427291, 0.9868373331614826,
- 1.0201294704318276, 1.1113539456722876),
- (0.240618523732184, 0.45558173972666255, 0.5943681967388351, 0.650900939169996,
- 0.7483572681471874, 0.9008690943027022, 0.9516677787271349, 0.9850364677965752,
- 1.0516821906747753, 1.1214943845916658),
- (0.2922690373273036, 0.4479821144386504, 0.613801526149148, 0.6509434790185421,
- 0.6876982556529582, 0.9015193133195613, 0.9570671227792547, 0.9847711283698155,
- 1.0828576982954996, 1.1106109238677777),
- (0.30027099141005154, 0.46956697245972573, 0.5973756776701357, 0.6743055424064167,
- 0.6920274562199666, 0.8979504826615435, 0.9268408824618528, 0.9691495966240021,
- 0.9983260085044127, 1.1065083471050117),
- (0.31666208802132145, 0.5137036663942733, 0.5882926042080675, 0.6899229118026092,
- 0.730249913793744, 0.8458381750994521, 0.8595877992328249, 0.9137388415537298,
- 0.9866008233455089, 1.137383764975547),
- (0.3251247277636798, 0.5292011796591106, 0.6018330031246529, 0.7028040151334913,
- 0.7794097325510528, 0.7819161956650196, 0.8016335408886606, 0.910192351683647,
- 0.98598162196522, 1.1535093885340242),
- (0.29904860785910004, 0.49821749875617755, 0.5818628214691952, 0.6702162529015839,
- 0.792305404698029, 0.8010082951265327, 0.9011331789530838, 0.9347832593312477,
- 0.9878915728570912, 1.1274287845362319),
- (0.17916974535365005, 0.46423758343427207, 0.5818626159151191, 0.6522567432851836,
- 0.8578543711269236, 0.8654932847250656, 0.914866301019591, 0.9836433091978996,
- 1.0332068416637614, 1.1280615056475125),
- (0.0, 0.46329396998948535, 0.5786056046501502, 0.6510415824943165, 0.8950783327952294,
- 0.9065629078748172, 0.9718615669185836, 1.0031527446209287, 1.01424588029229, 1.0248230445379556)
+ (
+ 0.0,
+ 0.4632939699892961,
+ 0.5786056046494645,
+ 0.6510415824942094,
+ 0.895078332795855,
+ 0.9065629078750282,
+ 0.9718615669186841,
+ 1.0031527446201098,
+ 1.0142458802909737,
+ 1.0248230445372033,
+ ),
+ (
+ 0.12937769848279101,
+ 0.4619527556321284,
+ 0.5815596420443466,
+ 0.6509684019890601,
+ 0.8515085512592131,
+ 0.8991327667388375,
+ 0.9483381392427291,
+ 0.9868373331614826,
+ 1.0201294704318276,
+ 1.1113539456722876,
+ ),
+ (
+ 0.240618523732184,
+ 0.45558173972666255,
+ 0.5943681967388351,
+ 0.650900939169996,
+ 0.7483572681471874,
+ 0.9008690943027022,
+ 0.9516677787271349,
+ 0.9850364677965752,
+ 1.0516821906747753,
+ 1.1214943845916658,
+ ),
+ (
+ 0.2922690373273036,
+ 0.4479821144386504,
+ 0.613801526149148,
+ 0.6509434790185421,
+ 0.6876982556529582,
+ 0.9015193133195613,
+ 0.9570671227792547,
+ 0.9847711283698155,
+ 1.0828576982954996,
+ 1.1106109238677777,
+ ),
+ (
+ 0.30027099141005154,
+ 0.46956697245972573,
+ 0.5973756776701357,
+ 0.6743055424064167,
+ 0.6920274562199666,
+ 0.8979504826615435,
+ 0.9268408824618528,
+ 0.9691495966240021,
+ 0.9983260085044127,
+ 1.1065083471050117,
+ ),
+ (
+ 0.31666208802132145,
+ 0.5137036663942733,
+ 0.5882926042080675,
+ 0.6899229118026092,
+ 0.730249913793744,
+ 0.8458381750994521,
+ 0.8595877992328249,
+ 0.9137388415537298,
+ 0.9866008233455089,
+ 1.137383764975547,
+ ),
+ (
+ 0.3251247277636798,
+ 0.5292011796591106,
+ 0.6018330031246529,
+ 0.7028040151334913,
+ 0.7794097325510528,
+ 0.7819161956650196,
+ 0.8016335408886606,
+ 0.910192351683647,
+ 0.98598162196522,
+ 1.1535093885340242,
+ ),
+ (
+ 0.29904860785910004,
+ 0.49821749875617755,
+ 0.5818628214691952,
+ 0.6702162529015839,
+ 0.792305404698029,
+ 0.8010082951265327,
+ 0.9011331789530838,
+ 0.9347832593312477,
+ 0.9878915728570912,
+ 1.1274287845362319,
+ ),
+ (
+ 0.17916974535365005,
+ 0.46423758343427207,
+ 0.5818626159151191,
+ 0.6522567432851836,
+ 0.8578543711269236,
+ 0.8654932847250656,
+ 0.914866301019591,
+ 0.9836433091978996,
+ 1.0332068416637614,
+ 1.1280615056475125,
+ ),
+ (
+ 0.0,
+ 0.46329396998948535,
+ 0.5786056046501502,
+ 0.6510415824943165,
+ 0.8950783327952294,
+ 0.9065629078748172,
+ 0.9718615669185836,
+ 1.0031527446209287,
+ 1.01424588029229,
+ 1.0248230445379556,
+ ),
]
expected_freqs = [
- (0.0, 0.2658849785488965, 0.35685238626885807, 0.3689901366690736, 0.5038968919475888,
- 0.5065518587501845, 0.5399110558762593, 0.6356807845993113, 0.6458520209139631, 0.6600163331973673),
- (0.1233059084828522, 0.2782923927646106, 0.3573659215347579, 0.36946091907607376,
- 0.5037974922871195, 0.5066416041828202, 0.538216765672376, 0.6355701950896693, 0.6455953849366743,
- 0.6594309541221774),
- (0.1946550854369502, 0.3314575373594674, 0.3616788807546181, 0.3779471264000764,
- 0.5026931348465893, 0.5067552606455699, 0.5272272884443048, 0.6333347872001693,
- 0.6442148265479308, 0.6532866817588999),
- (0.20879926720698877, 0.34897792345617423, 0.3652783351764913, 0.443855894582484,
- 0.47790148240242897, 0.506844624322928, 0.5090758743980286, 0.6175265666609957,
- 0.6397097609325341, 0.6468898906944409),
- (0.21067290783587236, 0.35110317640925215, 0.3649145592788066, 0.4533551114677223,
- 0.5005024186371949, 0.507017761099229, 0.5101250893240828, 0.6168213478492276,
- 0.6424780509991848, 0.6468935605826212),
- (0.214080585764866, 0.353216867533926, 0.3650014330955567, 0.47197667085082984,
- 0.5071647195850403, 0.5107899381039265, 0.563894415993932, 0.6150518764874886,
- 0.6461781982138443, 0.6483568369087811),
- (0.21564852631365375, 0.3536024256611885, 0.3652692866946287, 0.4807484678430083,
- 0.5073352894281589, 0.5125343692391049, 0.6079200818245155, 0.6197842747116765,
- 0.648907835949042, 0.6503229392874306),
- (0.21087876573006833, 0.35463024054783404, 0.3612449317676656, 0.43948603208371123,
- 0.5070218413172007, 0.508251630347181, 0.5438146806988851, 0.6205991881007313,
- 0.6465891122723096, 0.6511544851425487),
- (0.16235265342991828, 0.2958744870280601, 0.3562142355919711, 0.37216060317897104,
- 0.5042580244528116, 0.5067350381508423, 0.5373546859406302, 0.6332312603115383,
- 0.6459156623195174, 0.6571698237808499),
- (0.0, 0.2658849786929068, 0.3568523862640937, 0.36899013667229497, 0.5038968919421172,
- 0.506551858753244, 0.5399110559018708, 0.6356807846017583, 0.6458520213315968, 0.6600163321775416),
+ (
+ 0.0,
+ 0.2658849785488965,
+ 0.35685238626885807,
+ 0.3689901366690736,
+ 0.5038968919475888,
+ 0.5065518587501845,
+ 0.5399110558762593,
+ 0.6356807845993113,
+ 0.6458520209139631,
+ 0.6600163331973673,
+ ),
+ (
+ 0.1233059084828522,
+ 0.2782923927646106,
+ 0.3573659215347579,
+ 0.36946091907607376,
+ 0.5037974922871195,
+ 0.5066416041828202,
+ 0.538216765672376,
+ 0.6355701950896693,
+ 0.6455953849366743,
+ 0.6594309541221774,
+ ),
+ (
+ 0.1946550854369502,
+ 0.3314575373594674,
+ 0.3616788807546181,
+ 0.3779471264000764,
+ 0.5026931348465893,
+ 0.5067552606455699,
+ 0.5272272884443048,
+ 0.6333347872001693,
+ 0.6442148265479308,
+ 0.6532866817588999,
+ ),
+ (
+ 0.20879926720698877,
+ 0.34897792345617423,
+ 0.3652783351764913,
+ 0.443855894582484,
+ 0.47790148240242897,
+ 0.506844624322928,
+ 0.5090758743980286,
+ 0.6175265666609957,
+ 0.6397097609325341,
+ 0.6468898906944409,
+ ),
+ (
+ 0.21067290783587236,
+ 0.35110317640925215,
+ 0.3649145592788066,
+ 0.4533551114677223,
+ 0.5005024186371949,
+ 0.507017761099229,
+ 0.5101250893240828,
+ 0.6168213478492276,
+ 0.6424780509991848,
+ 0.6468935605826212,
+ ),
+ (
+ 0.214080585764866,
+ 0.353216867533926,
+ 0.3650014330955567,
+ 0.47197667085082984,
+ 0.5071647195850403,
+ 0.5107899381039265,
+ 0.563894415993932,
+ 0.6150518764874886,
+ 0.6461781982138443,
+ 0.6483568369087811,
+ ),
+ (
+ 0.21564852631365375,
+ 0.3536024256611885,
+ 0.3652692866946287,
+ 0.4807484678430083,
+ 0.5073352894281589,
+ 0.5125343692391049,
+ 0.6079200818245155,
+ 0.6197842747116765,
+ 0.648907835949042,
+ 0.6503229392874306,
+ ),
+ (
+ 0.21087876573006833,
+ 0.35463024054783404,
+ 0.3612449317676656,
+ 0.43948603208371123,
+ 0.5070218413172007,
+ 0.508251630347181,
+ 0.5438146806988851,
+ 0.6205991881007313,
+ 0.6465891122723096,
+ 0.6511544851425487,
+ ),
+ (
+ 0.16235265342991828,
+ 0.2958744870280601,
+ 0.3562142355919711,
+ 0.37216060317897104,
+ 0.5042580244528116,
+ 0.5067350381508423,
+ 0.5373546859406302,
+ 0.6332312603115383,
+ 0.6459156623195174,
+ 0.6571698237808499,
+ ),
+ (
+ 0.0,
+ 0.2658849786929068,
+ 0.3568523862640937,
+ 0.36899013667229497,
+ 0.5038968919421172,
+ 0.506551858753244,
+ 0.5399110559018708,
+ 0.6356807846017583,
+ 0.6458520213315968,
+ 0.6600163321775416,
+ ),
]
if mpb.with_hermitian_epsilon():
@@ -1351,7 +2036,9 @@ def f2(F, eps, r):
ms.get_efield(8)
field_integral = ms.compute_field_integral(f2)
- self.assertAlmostEqual(field_integral, 02.0735366548785272e-18 - 3.0259168624899837e-6j)
+ self.assertAlmostEqual(
+ field_integral, 02.0735366548785272e-18 - 3.0259168624899837e-6j
+ )
def test_multiply_bloch_phase(self):
ms = self.init_solver()
@@ -1361,7 +2048,7 @@ def test_multiply_bloch_phase(self):
efield = ms.get_efield(8, False)
bloch_efield = ms.multiply_bloch_phase(efield)
- ref_fn = 'tutorial-e.k16.b08.te.h5'
+ ref_fn = "tutorial-e.k16.b08.te.h5"
ref_path = os.path.join(self.data_dir, ref_fn)
self.check_fields_against_h5(ref_path, bloch_efield)
@@ -1391,9 +2078,9 @@ def test_poynting(self):
ms.run_te(mpb.output_at_kpoint(mp.Vector3(0.5, 0.5), mpb.output_poynting))
- ref_fn = 'tutorial-flux.v.k11.b08.te.h5'
+ ref_fn = "tutorial-flux.v.k11.b08.te.h5"
ref_path = os.path.join(self.data_dir, ref_fn)
- res_path = re.sub('tutorial', self.filename_prefix, ref_fn)
+ res_path = re.sub("tutorial", self.filename_prefix, ref_fn)
self.compare_h5_files(ref_path, res_path)
@@ -1404,14 +2091,38 @@ def test_fractional_lattice(self):
ms.run_te()
expected_brd = [
- ((0.0, mp.Vector3(0.0, 0.0, 0.0)), (2.041241452319313, mp.Vector3(0.5, 0.5, 0.0))),
- ((1.4433756729740665, mp.Vector3(0.5, 0.0, 0.0)), (2.886751345948131, mp.Vector3(0.0, 0.0, 0.0))),
- ((2.041241452319316, mp.Vector3(0.5, 0.5, 0.0)), (3.2274861218395094, mp.Vector3(0.5, 0.0, 0.0))),
- ((2.0412414523193187, mp.Vector3(0.5, 0.5, 0.0)), (3.2659863237109055, mp.Vector3(0.2, 0.2, 0.0))),
- ((2.88675134594813, mp.Vector3(0.0, 0.0, 0.0)), (4.564354645876381, mp.Vector3(0.5, 0.5, 0.0))),
- ((3.227486121839514, mp.Vector3(0.5, 0.0, 0.0)), (4.564354645876382, mp.Vector3(0.5, 0.5, 0.0))),
- ((3.6968455021364752, mp.Vector3(0.20000000000000004, 0.0, 0.0)), (4.564354645876384, mp.Vector3(0.5, 0.5, 0.0))),
- ((4.0824829046386295, mp.Vector3(0.0, 0.0, 0.0)), (5.204164998665332, mp.Vector3(0.5, 0.0, 0.0))),
+ (
+ (0.0, mp.Vector3(0.0, 0.0, 0.0)),
+ (2.041241452319313, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (1.4433756729740665, mp.Vector3(0.5, 0.0, 0.0)),
+ (2.886751345948131, mp.Vector3(0.0, 0.0, 0.0)),
+ ),
+ (
+ (2.041241452319316, mp.Vector3(0.5, 0.5, 0.0)),
+ (3.2274861218395094, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
+ (
+ (2.0412414523193187, mp.Vector3(0.5, 0.5, 0.0)),
+ (3.2659863237109055, mp.Vector3(0.2, 0.2, 0.0)),
+ ),
+ (
+ (2.88675134594813, mp.Vector3(0.0, 0.0, 0.0)),
+ (4.564354645876381, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (3.227486121839514, mp.Vector3(0.5, 0.0, 0.0)),
+ (4.564354645876382, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (3.6968455021364752, mp.Vector3(0.20000000000000004, 0.0, 0.0)),
+ (4.564354645876384, mp.Vector3(0.5, 0.5, 0.0)),
+ ),
+ (
+ (4.0824829046386295, mp.Vector3(0.0, 0.0, 0.0)),
+ (5.204164998665332, mp.Vector3(0.5, 0.0, 0.0)),
+ ),
]
self.check_band_range_data(expected_brd, ms.band_range_data)
@@ -1419,59 +2130,64 @@ def test_fractional_lattice(self):
def test_symmetry_overlap(self):
ms = mpb.ModeSolver(
num_bands=6,
- k_points = [mp.Vector3(0.5, 0.5, 0.5),],
- geometry = [mp.Sphere(0.25, material=mp.Medium(epsilon=13))],
- geometry_lattice = mp.Lattice(size=mp.Vector3(1, 1, 1)),
- resolution = 32,
- filename_prefix = self.filename_prefix,
- deterministic = True,
- tolerance = 1e-12
+ k_points=[
+ mp.Vector3(0.5, 0.5, 0.5),
+ ],
+ geometry=[mp.Sphere(0.25, material=mp.Medium(epsilon=13))],
+ geometry_lattice=mp.Lattice(size=mp.Vector3(1, 1, 1)),
+ resolution=32,
+ filename_prefix=self.filename_prefix,
+ deterministic=True,
+ tolerance=1e-12,
)
ms.run()
# inversion symmetry
- Wi = mp.Matrix([-1,0,0], [0,-1,0], [0,0,-1])
- w = mp.Vector3(0,0,0)
- symeigs = ms.compute_symmetries(Wi, w)
- symeigs_expected = [1,1,1,-1,-1,-1]
- for i in range(0,5):
+ Wi = mp.Matrix([-1, 0, 0], [0, -1, 0], [0, 0, -1])
+ w = mp.Vector3(0, 0, 0)
+ symeigs = ms.compute_symmetries(Wi, w)
+ symeigs_expected = [1, 1, 1, -1, -1, -1]
+ for i in range(0, 5):
self.assertAlmostEqual(symeigs[i].real, symeigs_expected[i], places=3)
self.assertAlmostEqual(symeigs[i].imag, 0, places=3)
-
+
# check that transformed_overlap agrees when called manually, with a
# "preloaded" bfield
- for i in range(0,5):
- ms.get_bfield(i+1, bloch_phase=False)
+ for i in range(0, 5):
+ ms.get_bfield(i + 1, bloch_phase=False)
symeig_bfield = ms.transformed_overlap(Wi, w)
self.assertAlmostEqual(symeigs[i].real, symeig_bfield.real, places=3)
self.assertAlmostEqual(symeigs[i].imag, symeig_bfield.imag, places=3)
- ms.get_dfield(i+1, bloch_phase=False)
+ ms.get_dfield(i + 1, bloch_phase=False)
symeig_dfield = ms.transformed_overlap(Wi, w)
self.assertAlmostEqual(symeigs[i].real, symeig_dfield.real, places=3)
self.assertAlmostEqual(symeigs[i].imag, symeig_dfield.imag, places=3)
# 2-fold symmetry (across MPI xy-transposition dimensions)
- W2 = mp.Matrix([-1,0,0], [0,1,0], [0,0,-1])
+ W2 = mp.Matrix([-1, 0, 0], [0, 1, 0], [0, 0, -1])
symeigs = ms.compute_symmetries(W2, w)
- self.assertAlmostEqual(sum(symeigs[0:3]), -1+0j, places=3)
- self.assertAlmostEqual(sum(symeigs[3:6]), -1+0j, places=3)
+ self.assertAlmostEqual(sum(symeigs[0:3]), -1 + 0j, places=3)
+ self.assertAlmostEqual(sum(symeigs[3:6]), -1 + 0j, places=3)
- # mirror symmetry: compare with run_zeven & run_zodd
- ms.k_points = [mp.Vector3(0,0,0)] # must be at Γ cf. https://github.com/NanoComp/mpb/issues/114
- Wz = mp.Matrix([1,0,0], [0,1,0], [0,0,-1])
+ # mirror symmetry: compare with run_zeven & run_zodd
+ ms.k_points = [
+ mp.Vector3(0, 0, 0)
+ ] # must be at Γ cf. https://github.com/NanoComp/mpb/issues/114
+ Wz = mp.Matrix([1, 0, 0], [0, 1, 0], [0, 0, -1])
ms.run_zeven()
symeigs_zeven = ms.compute_symmetries(Wz, w)
- for i in range(0,5):
+ for i in range(0, 5):
self.assertAlmostEqual(symeigs_zeven[i].real, 1, places=3)
self.assertAlmostEqual(symeigs_zeven[i].imag, 0, places=3)
ms.run_zodd()
symeigs_zodd = ms.compute_symmetries(Wz, w)
- for i in range(0,5):
+ for i in range(0, 5):
self.assertAlmostEqual(symeigs_zodd[i].real, -1, places=3)
- self.assertAlmostEqual(symeigs_zodd[i].imag, 0, places=3)
+ self.assertAlmostEqual(symeigs_zodd[i].imag, 0, places=3)
+
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_multilevel_atom.py b/python/tests/test_multilevel_atom.py
index 33aa17b39..17885d8e8 100644
--- a/python/tests/test_multilevel_atom.py
+++ b/python/tests/test_multilevel_atom.py
@@ -4,8 +4,9 @@
class TestMultiLevelAtom(unittest.TestCase):
-
- @unittest.skipIf(mp.is_single_precision(), "double-precision floating point specific test")
+ @unittest.skipIf(
+ mp.is_single_precision(), "double-precision floating point specific test"
+ )
def test_multilevel_atom(self):
resolution = 40
ncav = 1.5
@@ -37,26 +38,37 @@ def test_multilevel_atom(self):
pumping_rate=Rp,
frequency=freq_21,
gamma=gamma_21,
- sigma_diag=mp.Vector3(sigma_21, sigma_21, sigma_21)
+ sigma_diag=mp.Vector3(sigma_21, sigma_21, sigma_21),
)
t2 = mp.Transition(2, 1, transition_rate=rate_21)
- ml_atom = mp.MultilevelAtom(sigma=1, transitions=[t1, t2], initial_populations=[N0])
+ ml_atom = mp.MultilevelAtom(
+ sigma=1, transitions=[t1, t2], initial_populations=[N0]
+ )
two_level = mp.Medium(index=ncav, E_susceptibilities=[ml_atom])
- geometry = [mp.Block(center=mp.Vector3(z=(-0.5 * sz) + (0.5 * Lcav)),
- size=mp.Vector3(mp.inf, mp.inf, Lcav), material=two_level)]
-
- sim = mp.Simulation(cell_size=cell_size,
- resolution=resolution,
- boundary_layers=pml_layers,
- geometry=geometry,
- dimensions=dimensions)
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(z=(-0.5 * sz) + (0.5 * Lcav)),
+ size=mp.Vector3(mp.inf, mp.inf, Lcav),
+ material=two_level,
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ dimensions=dimensions,
+ )
def field_func(p):
return 1 if p.z == (-0.5 * sz) + (0.5 * Lcav) else 0
def check_field(sim):
- fp = sim.get_field_point(mp.Ex, mp.Vector3(z=(-0.5 * sz) + Lcav + (0.5 * dpad))).real
+ fp = sim.get_field_point(
+ mp.Ex, mp.Vector3(z=(-0.5 * sz) + Lcav + (0.5 * dpad))
+ ).real
self.assertAlmostEqual(fp, -2.7110969214986387)
sim.init_sim()
@@ -64,5 +76,5 @@ def check_field(sim):
sim.run(mp.at_end(check_field), until=7000)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_n2f_periodic.py b/python/tests/test_n2f_periodic.py
index 5cac78d5c..922415b4c 100644
--- a/python/tests/test_n2f_periodic.py
+++ b/python/tests/test_n2f_periodic.py
@@ -4,65 +4,95 @@
import numpy as np
from numpy import linalg as LA
-class TestNear2FarPeriodicBoundaries(unittest.TestCase):
+class TestNear2FarPeriodicBoundaries(unittest.TestCase):
def test_nea2far_periodic(self):
- dpml = 1.0 # PML thickness
- dsub = 3.0 # substrate thickness
- dpad = 20.0 # padding between grating and PML
- gp = 10.0 # grating period
- gh = 0.5 # grating height
- gdc = 0.5 # grating duty cycle
-
- sx = dpml+dsub+gh+dpad+dpml
+ dpml = 1.0 # PML thickness
+ dsub = 3.0 # substrate thickness
+ dpad = 20.0 # padding between grating and PML
+ gp = 10.0 # grating period
+ gh = 0.5 # grating height
+ gdc = 0.5 # grating duty cycle
+
+ sx = dpml + dsub + gh + dpad + dpml
sy = gp
- pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]
+ pml_layers = [mp.PML(thickness=dpml, direction=mp.X)]
- wvl = 0.5 # center wavelength
- fcen = 1/wvl # center frequency
- df = 0.05*fcen # frequency width
+ wvl = 0.5 # center wavelength
+ fcen = 1 / wvl # center frequency
+ df = 0.05 * fcen # frequency width
- src_pt = mp.Vector3(-0.5*sx+dpml+0.5*dsub)
- sources = [mp.Source(mp.GaussianSource(fcen, fwidth=df), component=mp.Ez, center=src_pt, size=mp.Vector3(y=sy))]
+ src_pt = mp.Vector3(-0.5 * sx + dpml + 0.5 * dsub)
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=src_pt,
+ size=mp.Vector3(y=sy),
+ )
+ ]
glass = mp.Medium(index=1.5)
- geometry = [mp.Block(material=glass, size=mp.Vector3(dpml+dsub,mp.inf,mp.inf), center=mp.Vector3(-0.5*sx+0.5*(dpml+dsub))),
- mp.Block(material=glass, size=mp.Vector3(gh,gdc*gp,mp.inf), center=mp.Vector3(-0.5*sx+dpml+dsub+0.5*gh))]
-
- k_point = mp.Vector3(0,0,0)
+ geometry = [
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(dpml + dsub, mp.inf, mp.inf),
+ center=mp.Vector3(-0.5 * sx + 0.5 * (dpml + dsub)),
+ ),
+ mp.Block(
+ material=glass,
+ size=mp.Vector3(gh, gdc * gp, mp.inf),
+ center=mp.Vector3(-0.5 * sx + dpml + dsub + 0.5 * gh),
+ ),
+ ]
+
+ k_point = mp.Vector3(0, 0, 0)
symmetries = [mp.Mirror(mp.Y)]
- n2f_pt = mp.Vector3(-0.5*sx+dpml+dsub+gh+1.0)
- dft_pt = mp.Vector3(0.5*sx-dpml)
+ n2f_pt = mp.Vector3(-0.5 * sx + dpml + dsub + gh + 1.0)
+ dft_pt = mp.Vector3(0.5 * sx - dpml)
- res = [20,25,30]
+ res = [20, 25, 30]
norm = np.empty(3)
for j in range(3):
- sim = mp.Simulation(resolution=res[j],
- cell_size=mp.Vector3(sx,sy),
- boundary_layers=pml_layers,
- geometry=geometry,
- k_point=k_point,
- sources=sources,
- symmetries=symmetries)
-
- n2f_obj = sim.add_near2far(fcen, 0, 1, mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy)), nperiods=10)
- dft_obj = sim.add_dft_fields([mp.Ez], fcen, 0, 1, center=dft_pt, size=mp.Vector3(y=sy))
+ sim = mp.Simulation(
+ resolution=res[j],
+ cell_size=mp.Vector3(sx, sy),
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ k_point=k_point,
+ sources=sources,
+ symmetries=symmetries,
+ )
+
+ n2f_obj = sim.add_near2far(
+ fcen,
+ 0,
+ 1,
+ mp.Near2FarRegion(center=n2f_pt, size=mp.Vector3(y=sy)),
+ nperiods=10,
+ )
+ dft_obj = sim.add_dft_fields(
+ [mp.Ez], fcen, 0, 1, center=dft_pt, size=mp.Vector3(y=sy)
+ )
sim.run(until_after_sources=300)
- n2f_Ez = sim.get_farfields(n2f_obj, res[j], center=dft_pt, size=mp.Vector3(y=sy))
+ n2f_Ez = sim.get_farfields(
+ n2f_obj, res[j], center=dft_pt, size=mp.Vector3(y=sy)
+ )
dft_Ez = sim.get_dft_array(dft_obj, mp.Ez, 0)
- norm[j] = LA.norm(n2f_Ez['Ez']-dft_Ez[1:-1])
- print("norm:, {}, {:.5f}".format(res[j],norm[j]))
+ norm[j] = LA.norm(n2f_Ez["Ez"] - dft_Ez[1:-1])
+ print("norm:, {}, {:.5f}".format(res[j], norm[j]))
sim.reset_meep()
- self.assertGreater(norm[0],norm[1])
- self.assertGreater(norm[1],norm[2])
+ self.assertGreater(norm[0], norm[1])
+ self.assertGreater(norm[1], norm[2])
+
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_oblique_source.py b/python/tests/test_oblique_source.py
index edf0042a0..d5a9c463d 100644
--- a/python/tests/test_oblique_source.py
+++ b/python/tests/test_oblique_source.py
@@ -2,55 +2,69 @@
import math
import unittest
-class TestEigenmodeSource(unittest.TestCase):
+class TestEigenmodeSource(unittest.TestCase):
def test_waveguide_flux(self):
- cell_size = mp.Vector3(10,10)
+ cell_size = mp.Vector3(10, 10)
pml_layers = [mp.PML(thickness=2.0)]
- rot_angles = range(0,60,20) # rotation angle of waveguide, CCW around z-axis
+ rot_angles = range(0, 60, 20) # rotation angle of waveguide, CCW around z-axis
fluxes = []
coeff_fluxes = []
for t in rot_angles:
rot_angle = math.radians(t)
- kpoint = mp.Vector3(math.cos(rot_angle),math.sin(rot_angle),0)
- sources = [mp.EigenModeSource(src=mp.GaussianSource(1.0,fwidth=0.1),
- size=mp.Vector3(y=10),
- center=mp.Vector3(x=-3),
- direction=mp.NO_DIRECTION,
- eig_kpoint=kpoint,
- eig_band=1,
- eig_parity=mp.ODD_Z,
- eig_match_freq=True)]
+ kpoint = mp.Vector3(math.cos(rot_angle), math.sin(rot_angle), 0)
+ sources = [
+ mp.EigenModeSource(
+ src=mp.GaussianSource(1.0, fwidth=0.1),
+ size=mp.Vector3(y=10),
+ center=mp.Vector3(x=-3),
+ direction=mp.NO_DIRECTION,
+ eig_kpoint=kpoint,
+ eig_band=1,
+ eig_parity=mp.ODD_Z,
+ eig_match_freq=True,
+ )
+ ]
- geometry = [mp.Block(center=mp.Vector3(),
- size=mp.Vector3(mp.inf,1,mp.inf),
- e1 = mp.Vector3(1).rotate(mp.Vector3(z=1), rot_angle),
- e2 = mp.Vector3(y=1).rotate(mp.Vector3(z=1), rot_angle),
- material=mp.Medium(index=1.5))]
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(mp.inf, 1, mp.inf),
+ e1=mp.Vector3(1).rotate(mp.Vector3(z=1), rot_angle),
+ e2=mp.Vector3(y=1).rotate(mp.Vector3(z=1), rot_angle),
+ material=mp.Medium(index=1.5),
+ )
+ ]
- sim = mp.Simulation(cell_size=cell_size,
- resolution=50,
- boundary_layers=pml_layers,
- sources=sources,
- geometry=geometry)
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=50,
+ boundary_layers=pml_layers,
+ sources=sources,
+ geometry=geometry,
+ )
- tran = sim.add_flux(1.0, 0, 1, mp.FluxRegion(center=mp.Vector3(x=3), size=mp.Vector3(y=10)))
+ tran = sim.add_flux(
+ 1.0, 0, 1, mp.FluxRegion(center=mp.Vector3(x=3), size=mp.Vector3(y=10))
+ )
sim.run(until_after_sources=100)
- res = sim.get_eigenmode_coefficients(tran,
- [1],
- eig_parity=mp.EVEN_Y+mp.ODD_Z if t == 0 else mp.ODD_Z,
- direction=mp.NO_DIRECTION,
- kpoint_func=lambda f,n: kpoint)
+ res = sim.get_eigenmode_coefficients(
+ tran,
+ [1],
+ eig_parity=mp.EVEN_Y + mp.ODD_Z if t == 0 else mp.ODD_Z,
+ direction=mp.NO_DIRECTION,
+ kpoint_func=lambda f, n: kpoint,
+ )
fluxes.append(mp.get_fluxes(tran)[0])
- coeff_fluxes.append(abs(res.alpha[0,0,0])**2)
- print("flux:, {:.2f}, {:.6f}".format(t,fluxes[-1]))
- print("coef_flux:, {:.2f}, {:.6f}".format(t,coeff_fluxes[-1]))
+ coeff_fluxes.append(abs(res.alpha[0, 0, 0]) ** 2)
+ print("flux:, {:.2f}, {:.6f}".format(t, fluxes[-1]))
+ print("coef_flux:, {:.2f}, {:.6f}".format(t, coeff_fluxes[-1]))
self.assertAlmostEqual(fluxes[0], fluxes[1], places=0)
self.assertAlmostEqual(fluxes[1], fluxes[2], places=0)
@@ -61,9 +75,9 @@ def test_waveguide_flux(self):
# sadly the above line requires a workaround due to the
# following annoying numerical accident:
# AssertionError: 100.33815231783535 != 99.81145343586365 within 0 places
- f0,f2=fluxes[0],fluxes[2]
- self.assertLess( abs(f0-f2), 0.5*max(abs(f0),abs(f2)) )
+ f0, f2 = fluxes[0], fluxes[2]
+ self.assertLess(abs(f0 - f2), 0.5 * max(abs(f0), abs(f2)))
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_physical.py b/python/tests/test_physical.py
index 08b745a89..ef75ea112 100644
--- a/python/tests/test_physical.py
+++ b/python/tests/test_physical.py
@@ -3,7 +3,6 @@
class TestPhysical(unittest.TestCase):
-
def test_physical(self):
a = 10.0
@@ -15,14 +14,22 @@ def test_physical(self):
cell_size = mp.Vector3(xmax, ymax)
pml_layers = [mp.PML(ymax / 3.0)]
- sources = [mp.Source(src=mp.ContinuousSource(w), component=mp.Ez,
- center=mp.Vector3(-dx), size=mp.Vector3())]
-
- sim = mp.Simulation(cell_size=cell_size,
- resolution=a,
- boundary_layers=pml_layers,
- sources=sources,
- force_complex_fields=True)
+ sources = [
+ mp.Source(
+ src=mp.ContinuousSource(w),
+ component=mp.Ez,
+ center=mp.Vector3(-dx),
+ size=mp.Vector3(),
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=a,
+ boundary_layers=pml_layers,
+ sources=sources,
+ force_complex_fields=True,
+ )
sim.init_sim()
sim.solve_cw(tol=1e-5 if mp.is_single_precision() else 1e-6)
@@ -33,7 +40,7 @@ def test_physical(self):
amp2 = sim.get_field_point(mp.Ez, p2)
ratio = abs(amp1) / abs(amp2)
- ratio = ratio ** 2 # in 2d, decay is ~1/sqrt(r), so square to get 1/r
+ ratio = ratio**2 # in 2d, decay is ~1/sqrt(r), so square to get 1/r
fail_fmt = "Failed: amp1 = ({}, {}), amp2 = ({}, {})\nabs(amp1/amp2){} = {}, too far from 2.0"
fail_msg = fail_fmt.format(amp1.real, amp1, amp2.real, amp2, "^2", ratio)
@@ -41,5 +48,5 @@ def test_physical(self):
self.assertTrue(ratio <= 2.12 and ratio >= 1.88, fail_msg)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_prism.py b/python/tests/test_prism.py
index 534f866a2..1dbb0d48f 100644
--- a/python/tests/test_prism.py
+++ b/python/tests/test_prism.py
@@ -3,239 +3,252 @@
import numpy as np
import meep as mp
-class TestPrism(unittest.TestCase):
-
- def nonconvex_marching_squares(self,idx,npts):
- resolution = 25
-
- cell = mp.Vector3(10,10)
-
- data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data'))
- vertices_file = os.path.join(data_dir, f'nonconvex_prism_vertices{idx}.npz')
- vertices_obj = np.load(vertices_file)
-
- ## prism verticies precomputed from analytic "blob" shape using
- ## marching squares algorithm of skimage.measure.find_contours
- ## ref: https://github.com/NanoComp/meep/pull/1142
- vertices_data = vertices_obj[f"N{npts}"]
- vertices = [mp.Vector3(v[0],v[1],0) for v in vertices_data]
-
- geometry = [mp.Prism(vertices,
- height=mp.inf,
- material=mp.Medium(epsilon=12))]
-
- sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- resolution=resolution)
-
- sim.init_sim()
-
- prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps)
-
- print(f"epsilon-sum:, {abs(prism_eps)} (prism-msq)")
- return prism_eps
-
-
- def convex_marching_squares(self,npts):
- resolution = 50
-
- cell = mp.Vector3(3,3)
-
- data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data'))
- vertices_file = os.path.join(data_dir, 'convex_prism_vertices.npz')
- vertices_obj = np.load(vertices_file)
-
- ## prism vertices precomputed for a circle of radius 1.0 using
- ## marching squares algorithm of skimage.measure.find_contours
- ## ref: https://github.com/NanoComp/meep/issues/1060
- vertices_data = vertices_obj[f"N{npts}"]
- vertices = [mp.Vector3(v[0],v[1],0) for v in vertices_data]
-
- geometry = [mp.Prism(vertices,
- height=mp.inf,
- material=mp.Medium(epsilon=12))]
-
- sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- resolution=resolution)
-
- sim.init_sim()
-
- prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps)
+class TestPrism(unittest.TestCase):
+ def nonconvex_marching_squares(self, idx, npts):
+ resolution = 25
- sim.reset_meep()
+ cell = mp.Vector3(10, 10)
- geometry = [mp.Cylinder(radius=1.0,
- center=mp.Vector3(),
- height=mp.inf,
- material=mp.Medium(epsilon=12))]
+ data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data"))
+ vertices_file = os.path.join(data_dir, f"nonconvex_prism_vertices{idx}.npz")
+ vertices_obj = np.load(vertices_file)
- sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- resolution=resolution)
+ ## prism verticies precomputed from analytic "blob" shape using
+ ## marching squares algorithm of skimage.measure.find_contours
+ ## ref: https://github.com/NanoComp/meep/pull/1142
+ vertices_data = vertices_obj[f"N{npts}"]
+ vertices = [mp.Vector3(v[0], v[1], 0) for v in vertices_data]
- sim.init_sim()
+ geometry = [mp.Prism(vertices, height=mp.inf, material=mp.Medium(epsilon=12))]
- cyl_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps)
+ sim = mp.Simulation(cell_size=cell, geometry=geometry, resolution=resolution)
- print(
- f"epsilon-sum:, {abs(prism_eps)} (prism-msq), {abs(cyl_eps)} (cylinder), {abs((prism_eps-cyl_eps)/cyl_eps)} (relative error)"
- )
+ sim.init_sim()
- return abs((prism_eps-cyl_eps)/cyl_eps)
+ prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r, eps: eps)
+ print(f"epsilon-sum:, {abs(prism_eps)} (prism-msq)")
- def convex_circle(self,npts,r,sym):
- resolution = 50
+ return prism_eps
- cell = mp.Vector3(3,3)
+ def convex_marching_squares(self, npts):
+ resolution = 50
- ### prism vertices computed as equally-spaced points
- ### along the circumference of a circle with radius r
- angles = 2*np.pi/npts * np.arange(npts)
- vertices = [mp.Vector3(r*np.cos(ang),r*np.sin(ang)) for ang in angles]
- geometry = [mp.Prism(vertices,
- height=mp.inf,
- material=mp.Medium(epsilon=12))]
+ cell = mp.Vector3(3, 3)
- sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- symmetries=[mp.Mirror(direction=mp.X),mp.Mirror(direction=mp.Y)] if sym else [],
- resolution=resolution)
+ data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data"))
+ vertices_file = os.path.join(data_dir, "convex_prism_vertices.npz")
+ vertices_obj = np.load(vertices_file)
- sim.init_sim()
+ ## prism vertices precomputed for a circle of radius 1.0 using
+ ## marching squares algorithm of skimage.measure.find_contours
+ ## ref: https://github.com/NanoComp/meep/issues/1060
+ vertices_data = vertices_obj[f"N{npts}"]
+ vertices = [mp.Vector3(v[0], v[1], 0) for v in vertices_data]
- prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps)
+ geometry = [mp.Prism(vertices, height=mp.inf, material=mp.Medium(epsilon=12))]
- sim.reset_meep()
+ sim = mp.Simulation(cell_size=cell, geometry=geometry, resolution=resolution)
- geometry = [mp.Cylinder(radius=r,
- center=mp.Vector3(),
- height=mp.inf,
- material=mp.Medium(epsilon=12))]
+ sim.init_sim()
- sim = mp.Simulation(cell_size=cell,
- geometry=geometry,
- symmetries=[mp.Mirror(direction=mp.X),mp.Mirror(direction=mp.Y)] if sym else [],
- resolution=resolution)
+ prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r, eps: eps)
- sim.init_sim()
+ sim.reset_meep()
- cyl_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps)
+ geometry = [
+ mp.Cylinder(
+ radius=1.0,
+ center=mp.Vector3(),
+ height=mp.inf,
+ material=mp.Medium(epsilon=12),
+ )
+ ]
- print(
- f"epsilon-sum:, {abs(prism_eps)} (prism-cyl), {abs(cyl_eps)} (cylinder), {abs((prism_eps-cyl_eps)/cyl_eps)} (relative error)"
- )
+ sim = mp.Simulation(cell_size=cell, geometry=geometry, resolution=resolution)
- return abs((prism_eps-cyl_eps)/cyl_eps)
+ sim.init_sim()
- def spiral_gds(self):
- data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data'))
- gdsii_file = os.path.join(data_dir, 'spiral.gds')
+ cyl_eps = sim.integrate_field_function([mp.Dielectric], lambda r, eps: eps)
- resolution = 25
- cell_size = mp.Vector3(12,16)
- geometry = mp.get_GDSII_prisms(mp.Medium(index=3.5), gdsii_file, 0, 0, mp.inf)
+ print(
+ f"epsilon-sum:, {abs(prism_eps)} (prism-msq), {abs(cyl_eps)} (cylinder), {abs((prism_eps-cyl_eps)/cyl_eps)} (relative error)"
+ )
- sim = mp.Simulation(cell_size=cell_size,
- geometry=geometry,
- resolution=resolution)
+ return abs((prism_eps - cyl_eps) / cyl_eps)
- sim.init_sim()
+ def convex_circle(self, npts, r, sym):
+ resolution = 50
- prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r,eps: eps)
+ cell = mp.Vector3(3, 3)
- print(f"epsilon-sum:, {abs(prism_eps)} (prism-gds)")
+ ### prism vertices computed as equally-spaced points
+ ### along the circumference of a circle with radius r
+ angles = 2 * np.pi / npts * np.arange(npts)
+ vertices = [mp.Vector3(r * np.cos(ang), r * np.sin(ang)) for ang in angles]
+ geometry = [mp.Prism(vertices, height=mp.inf, material=mp.Medium(epsilon=12))]
- return prism_eps
+ sim = mp.Simulation(
+ cell_size=cell,
+ geometry=geometry,
+ symmetries=[mp.Mirror(direction=mp.X), mp.Mirror(direction=mp.Y)]
+ if sym
+ else [],
+ resolution=resolution,
+ )
- # lots of tests, turned off by default since they run too long;
- # rename to test_something to run these tests.
- def bigtest_prism(self):
- print("Testing Non-Convex Prism #1 using marching squares algorithm...")
- d1_a = self.nonconvex_marching_squares(1,208)
- d1_b = self.nonconvex_marching_squares(1,448)
- d1_ref = 458.27922623563074 ## self.nonconvex_marching_squares(1,904)
+ sim.init_sim()
- self.assertLess(abs((d1_b-d1_ref)/d1_ref),abs((d1_a-d1_ref)/d1_ref))
+ prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r, eps: eps)
- print("Testing Non-Convex Prism #2 using marching squares algorithm...")
- d2_a = self.nonconvex_marching_squares(2,128)
- d2_b = self.nonconvex_marching_squares(2,256)
- d2_ref = 506.79940504342534 ## self.nonconvex_marching_squares(2,516)
+ sim.reset_meep()
- self.assertLess(abs((d2_b-d2_ref)/d2_ref),abs((d2_a-d2_ref)/d2_ref))
+ geometry = [
+ mp.Cylinder(
+ radius=r,
+ center=mp.Vector3(),
+ height=mp.inf,
+ material=mp.Medium(epsilon=12),
+ )
+ ]
- print("Testing Non-Convex Prism #3 using marching squares algorithm...")
- d3_a = self.nonconvex_marching_squares(3,164)
- d3_b = self.nonconvex_marching_squares(3,336)
- d3_ref = 640.0738356076143 ## self.nonconvex_marching_squares(3,672)
+ sim = mp.Simulation(
+ cell_size=cell,
+ geometry=geometry,
+ symmetries=[mp.Mirror(direction=mp.X), mp.Mirror(direction=mp.Y)]
+ if sym
+ else [],
+ resolution=resolution,
+ )
- self.assertLess(abs((d3_b-d3_ref)/d3_ref),abs((d3_a-d3_ref)/d3_ref))
+ sim.init_sim()
- print("Testing Convex Prism using marching squares algorithm...")
- d = [self.convex_marching_squares(92),
- self.convex_marching_squares(192),
- self.convex_marching_squares(392)]
+ cyl_eps = sim.integrate_field_function([mp.Dielectric], lambda r, eps: eps)
- self.assertLess(d[1],d[0])
- self.assertLess(d[2],d[1])
+ print(
+ f"epsilon-sum:, {abs(prism_eps)} (prism-cyl), {abs(cyl_eps)} (cylinder), {abs((prism_eps-cyl_eps)/cyl_eps)} (relative error)"
+ )
- print("Testing Convex Prism #1 using circle formula (without symmetry)...")
- r = 1.0458710786934182
- d_nosym = [self.convex_circle(51,r,False),
- self.convex_circle(101,r,False),
- self.convex_circle(201,r,False)]
+ return abs((prism_eps - cyl_eps) / cyl_eps)
- self.assertLess(d_nosym[1],d_nosym[0])
- self.assertLess(d_nosym[2],d_nosym[1])
+ def spiral_gds(self):
+ data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data"))
+ gdsii_file = os.path.join(data_dir, "spiral.gds")
- print("Testing Convex Prism #1 using circle formula (with symmetry)...")
- d_sym = [self.convex_circle(51,r,True),
- self.convex_circle(101,r,True),
- self.convex_circle(201,r,True)]
+ resolution = 25
+ cell_size = mp.Vector3(12, 16)
+ geometry = mp.get_GDSII_prisms(mp.Medium(index=3.5), gdsii_file, 0, 0, mp.inf)
- self.assertLess(d_sym[1],d_sym[0])
- self.assertLess(d_sym[2],d_sym[1])
+ sim = mp.Simulation(
+ cell_size=cell_size, geometry=geometry, resolution=resolution
+ )
- self.assertAlmostEqual(d_nosym[0],d_sym[0],places=3)
- self.assertAlmostEqual(d_nosym[1],d_sym[1],places=3)
- self.assertAlmostEqual(d_nosym[2],d_sym[2],places=3)
+ sim.init_sim()
- print("Testing Convex Prism #2 using circle formula (without symmetry)...")
- r = 1.2896871096581341
- d_nosym = [self.convex_circle(31,r,False),
- self.convex_circle(61,r,False),
- self.convex_circle(121,r,False)]
+ prism_eps = sim.integrate_field_function([mp.Dielectric], lambda r, eps: eps)
- self.assertLess(d_nosym[1],d_nosym[0])
- self.assertLess(d_nosym[2],d_nosym[1])
+ print(f"epsilon-sum:, {abs(prism_eps)} (prism-gds)")
- print("Testing Convex Prism #2 using circle formula (with symmetry)...")
- d_sym = [self.convex_circle(31,r,True),
- self.convex_circle(61,r,True),
- self.convex_circle(121,r,True)]
+ return prism_eps
- self.assertLess(d_sym[1],d_sym[0])
- self.assertLess(d_sym[2],d_sym[1])
+ # lots of tests, turned off by default since they run too long;
+ # rename to test_something to run these tests.
+ def bigtest_prism(self):
+ print("Testing Non-Convex Prism #1 using marching squares algorithm...")
+ d1_a = self.nonconvex_marching_squares(1, 208)
+ d1_b = self.nonconvex_marching_squares(1, 448)
+ d1_ref = 458.27922623563074 ## self.nonconvex_marching_squares(1,904)
+
+ self.assertLess(abs((d1_b - d1_ref) / d1_ref), abs((d1_a - d1_ref) / d1_ref))
- self.assertAlmostEqual(d_nosym[0],d_sym[0],places=3)
- self.assertAlmostEqual(d_nosym[1],d_sym[1],places=3)
- self.assertAlmostEqual(d_nosym[2],d_sym[2],places=3)
+ print("Testing Non-Convex Prism #2 using marching squares algorithm...")
+ d2_a = self.nonconvex_marching_squares(2, 128)
+ d2_b = self.nonconvex_marching_squares(2, 256)
+ d2_ref = 506.79940504342534 ## self.nonconvex_marching_squares(2,516)
- print("Testing Non-Convex Prism from GDSII file...")
- d = self.spiral_gds()
- d_ref = 455.01744881372224
- self.assertAlmostEqual(d,d_ref,places=5)
+ self.assertLess(abs((d2_b - d2_ref) / d2_ref), abs((d2_a - d2_ref) / d2_ref))
+
+ print("Testing Non-Convex Prism #3 using marching squares algorithm...")
+ d3_a = self.nonconvex_marching_squares(3, 164)
+ d3_b = self.nonconvex_marching_squares(3, 336)
+ d3_ref = 640.0738356076143 ## self.nonconvex_marching_squares(3,672)
+
+ self.assertLess(abs((d3_b - d3_ref) / d3_ref), abs((d3_a - d3_ref) / d3_ref))
+
+ print("Testing Convex Prism using marching squares algorithm...")
+ d = [
+ self.convex_marching_squares(92),
+ self.convex_marching_squares(192),
+ self.convex_marching_squares(392),
+ ]
+
+ self.assertLess(d[1], d[0])
+ self.assertLess(d[2], d[1])
+
+ print("Testing Convex Prism #1 using circle formula (without symmetry)...")
+ r = 1.0458710786934182
+ d_nosym = [
+ self.convex_circle(51, r, False),
+ self.convex_circle(101, r, False),
+ self.convex_circle(201, r, False),
+ ]
+
+ self.assertLess(d_nosym[1], d_nosym[0])
+ self.assertLess(d_nosym[2], d_nosym[1])
+
+ print("Testing Convex Prism #1 using circle formula (with symmetry)...")
+ d_sym = [
+ self.convex_circle(51, r, True),
+ self.convex_circle(101, r, True),
+ self.convex_circle(201, r, True),
+ ]
+
+ self.assertLess(d_sym[1], d_sym[0])
+ self.assertLess(d_sym[2], d_sym[1])
+
+ self.assertAlmostEqual(d_nosym[0], d_sym[0], places=3)
+ self.assertAlmostEqual(d_nosym[1], d_sym[1], places=3)
+ self.assertAlmostEqual(d_nosym[2], d_sym[2], places=3)
+
+ print("Testing Convex Prism #2 using circle formula (without symmetry)...")
+ r = 1.2896871096581341
+ d_nosym = [
+ self.convex_circle(31, r, False),
+ self.convex_circle(61, r, False),
+ self.convex_circle(121, r, False),
+ ]
- def test_prism(self):
- print("Testing Non-Convex Prism #3 using marching squares algorithm...")
- d3_a = self.nonconvex_marching_squares(3,164)
- d3_b = self.nonconvex_marching_squares(3,336)
- d3_ref = 640.0738356076143 ## self.nonconvex_marching_squares(3,672)
- self.assertLess(abs((d3_b-d3_ref)/d3_ref),abs((d3_a-d3_ref)/d3_ref))
- self.assertLess(abs((d3_b-d3_ref)/d3_ref), 0.02)
+ self.assertLess(d_nosym[1], d_nosym[0])
+ self.assertLess(d_nosym[2], d_nosym[1])
-if __name__ == '__main__':
- unittest.main()
+ print("Testing Convex Prism #2 using circle formula (with symmetry)...")
+ d_sym = [
+ self.convex_circle(31, r, True),
+ self.convex_circle(61, r, True),
+ self.convex_circle(121, r, True),
+ ]
+
+ self.assertLess(d_sym[1], d_sym[0])
+ self.assertLess(d_sym[2], d_sym[1])
+
+ self.assertAlmostEqual(d_nosym[0], d_sym[0], places=3)
+ self.assertAlmostEqual(d_nosym[1], d_sym[1], places=3)
+ self.assertAlmostEqual(d_nosym[2], d_sym[2], places=3)
+
+ print("Testing Non-Convex Prism from GDSII file...")
+ d = self.spiral_gds()
+ d_ref = 455.01744881372224
+ self.assertAlmostEqual(d, d_ref, places=5)
+
+ def test_prism(self):
+ print("Testing Non-Convex Prism #3 using marching squares algorithm...")
+ d3_a = self.nonconvex_marching_squares(3, 164)
+ d3_b = self.nonconvex_marching_squares(3, 336)
+ d3_ref = 640.0738356076143 ## self.nonconvex_marching_squares(3,672)
+ self.assertLess(abs((d3_b - d3_ref) / d3_ref), abs((d3_a - d3_ref) / d3_ref))
+ self.assertLess(abs((d3_b - d3_ref) / d3_ref), 0.02)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/python/tests/test_pw_source.py b/python/tests/test_pw_source.py
index 797e3c894..4e16c9952 100644
--- a/python/tests/test_pw_source.py
+++ b/python/tests/test_pw_source.py
@@ -4,8 +4,8 @@
import unittest
from utils import ApproxComparisonTestCase
-class TestPwSource(ApproxComparisonTestCase):
+class TestPwSource(ApproxComparisonTestCase):
def setUp(self):
s = 11
dpml = 1
@@ -19,6 +19,7 @@ def setUp(self):
def pw_amp(k, x0):
def _pw_amp(x):
return cmath.exp(1j * k.dot(x + x0))
+
return _pw_amp
fcen = 0.8
@@ -32,22 +33,22 @@ def _pw_amp(x):
component=mp.Ez,
center=mp.Vector3(-0.5 * s, 0),
size=mp.Vector3(0, s),
- amp_func=pw_amp(self.k, mp.Vector3(x=-0.5 * s))
+ amp_func=pw_amp(self.k, mp.Vector3(x=-0.5 * s)),
),
mp.Source(
mp.ContinuousSource(fcen, fwidth=df),
component=mp.Ez,
center=mp.Vector3(0, -0.5 * s),
size=mp.Vector3(s, 0),
- amp_func=pw_amp(self.k, mp.Vector3(y=-0.5 * s))
- )
+ amp_func=pw_amp(self.k, mp.Vector3(y=-0.5 * s)),
+ ),
]
self.sim = mp.Simulation(
cell_size=cell,
sources=sources,
boundary_layers=pml_layers,
- resolution=resolution
+ resolution=resolution,
)
self.sim.use_output_directory(self.temp_dir)
self.s = s
@@ -72,7 +73,11 @@ def test_pw_source(self):
tol = 1e-4 if mp.is_single_precision() else 1e-9
self.assertClose(pt1 / pt2, 27.557668029008262, epsilon=tol)
- self.assertAlmostEqual(cmath.exp(1j * self.k.dot(v1 - v2)), 0.7654030066070924 - 0.6435512702783076j)
+ self.assertAlmostEqual(
+ cmath.exp(1j * self.k.dot(v1 - v2)),
+ 0.7654030066070924 - 0.6435512702783076j,
+ )
+
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_refl_angular.py b/python/tests/test_refl_angular.py
index 1082fc5a4..fb365238e 100644
--- a/python/tests/test_refl_angular.py
+++ b/python/tests/test_refl_angular.py
@@ -18,72 +18,81 @@ def setUpClass(cls):
cls.dpml = 1.0
cls.dz = 7.0
- cls.sz = cls.dz+2*cls.dpml
+ cls.sz = cls.dz + 2 * cls.dpml
cls.wvl_min = 0.4
cls.wvl_max = 0.8
- cls.fmin = 1/cls.wvl_max
- cls.fmax = 1/cls.wvl_min
- cls.fcen = 0.5*(cls.fmin+cls.fmax)
- cls.df = cls.fmax-cls.fmin
+ cls.fmin = 1 / cls.wvl_max
+ cls.fmax = 1 / cls.wvl_min
+ cls.fcen = 0.5 * (cls.fmin + cls.fmax)
+ cls.df = cls.fmax - cls.fmin
cls.nfreq = 11
def refl_angular(self, theta):
theta_r = math.radians(theta)
# wavevector (in source medium); plane of incidence is XZ
- k = mp.Vector3(0,0,1).rotate(mp.Vector3(0,1,0),theta_r).scale(self.n1*self.fmin)
+ k = (
+ mp.Vector3(0, 0, 1)
+ .rotate(mp.Vector3(0, 1, 0), theta_r)
+ .scale(self.n1 * self.fmin)
+ )
dimensions = 1 if theta == 0 else 3
cell_size = mp.Vector3(z=self.sz)
pml_layers = [mp.PML(self.dpml)]
- sources = [mp.Source(mp.GaussianSource(self.fcen, fwidth=self.df),
- component=mp.Ex, # P polarization
- center=mp.Vector3(z=-0.5*self.sz+self.dpml))]
-
- sim = mp.Simulation(resolution=self.resolution,
- cell_size=cell_size,
- dimensions=dimensions,
- default_material=mp.Medium(index=self.n1),
- sources=sources,
- boundary_layers=pml_layers,
- k_point=k)
-
- mon_pt = -0.5*self.sz+self.dpml+0.25*self.dz
+ sources = [
+ mp.Source(
+ mp.GaussianSource(self.fcen, fwidth=self.df),
+ component=mp.Ex, # P polarization
+ center=mp.Vector3(z=-0.5 * self.sz + self.dpml),
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=self.resolution,
+ cell_size=cell_size,
+ dimensions=dimensions,
+ default_material=mp.Medium(index=self.n1),
+ sources=sources,
+ boundary_layers=pml_layers,
+ k_point=k,
+ )
+
+ mon_pt = -0.5 * self.sz + self.dpml + 0.25 * self.dz
refl_fr = mp.FluxRegion(center=mp.Vector3(z=mon_pt))
- refl = sim.add_flux(self.fcen,
- self.df,
- self.nfreq,
- refl_fr)
-
- termination_cond = mp.stop_when_fields_decayed(50,
- mp.Ex,
- mp.Vector3(z=mon_pt),
- 1e-9)
+ refl = sim.add_flux(self.fcen, self.df, self.nfreq, refl_fr)
+
+ termination_cond = mp.stop_when_fields_decayed(
+ 50, mp.Ex, mp.Vector3(z=mon_pt), 1e-9
+ )
sim.run(until_after_sources=termination_cond)
empty_data = sim.get_flux_data(refl)
empty_flux = mp.get_fluxes(refl)
sim.reset_meep()
- geometry = [mp.Block(size=mp.Vector3(mp.inf,mp.inf,0.5*self.sz),
- center=mp.Vector3(z=0.25*self.sz),
- material=mp.Medium(index=self.n2))]
-
- sim = mp.Simulation(resolution=self.resolution,
- cell_size=cell_size,
- dimensions=dimensions,
- default_material=mp.Medium(index=self.n1),
- sources=sources,
- boundary_layers=pml_layers,
- k_point=k,
- geometry=geometry)
-
- refl = sim.add_flux(self.fcen,
- self.df,
- self.nfreq,
- refl_fr)
+ geometry = [
+ mp.Block(
+ size=mp.Vector3(mp.inf, mp.inf, 0.5 * self.sz),
+ center=mp.Vector3(z=0.25 * self.sz),
+ material=mp.Medium(index=self.n2),
+ )
+ ]
+
+ sim = mp.Simulation(
+ resolution=self.resolution,
+ cell_size=cell_size,
+ dimensions=dimensions,
+ default_material=mp.Medium(index=self.n1),
+ sources=sources,
+ boundary_layers=pml_layers,
+ k_point=k,
+ geometry=geometry,
+ )
+
+ refl = sim.add_flux(self.fcen, self.df, self.nfreq, refl_fr)
sim.load_minus_flux_data(refl, empty_data)
sim.run(until_after_sources=termination_cond)
@@ -91,38 +100,48 @@ def refl_angular(self, theta):
refl_flux = mp.get_fluxes(refl)
freqs = mp.get_flux_freqs(refl)
- Rs = -np.array(refl_flux)/np.array(empty_flux)
+ Rs = -np.array(refl_flux) / np.array(empty_flux)
- thetas = [math.asin(k.x/(self.n1*freqs[i])) for i in range(self.nfreq)]
+ thetas = [math.asin(k.x / (self.n1 * freqs[i])) for i in range(self.nfreq)]
return freqs, thetas, Rs
@parameterized.parameterized.expand([(0,), (20.6,)])
- def test_refl_angular(self,theta):
+ def test_refl_angular(self, theta):
fmeep, tmeep, Rmeep = self.refl_angular(theta)
# angle of refracted planewave in medium n2 for an
# incident planewave in medium n1 at angle theta_in
- theta_out = lambda theta_in: math.asin(self.n1*math.sin(theta_in)/self.n2)
+ theta_out = lambda theta_in: math.asin(self.n1 * math.sin(theta_in) / self.n2)
# Fresnel reflectance for P polarization in medium n2 for
# an incident planewave in medium n1 at angle theta_in
- Rfresnel = lambda theta_in: (math.fabs((self.n1*math.cos(theta_out(theta_in))-self.n2*math.cos(theta_in)) /
- (self.n1*math.cos(theta_out(theta_in))+self.n2*math.cos(theta_in)))**2)
+ Rfresnel = lambda theta_in: (
+ math.fabs(
+ (self.n1 * math.cos(theta_out(theta_in)) - self.n2 * math.cos(theta_in))
+ / (
+ self.n1 * math.cos(theta_out(theta_in))
+ + self.n2 * math.cos(theta_in)
+ )
+ )
+ ** 2
+ )
Ranalytic = np.empty((self.nfreq,))
- print("refl:, wavelength (μm), incident angle (°), reflectance (Meep), reflectance (analytic), error")
+ print(
+ "refl:, wavelength (μm), incident angle (°), reflectance (Meep), reflectance (analytic), error"
+ )
for i in range(self.nfreq):
Ranalytic[i] = Rfresnel(tmeep[i])
- err = abs(Rmeep[i]-Ranalytic[i])/Ranalytic[i]
- print("refl:, {:4.2f}, {:4.2f}, {:8.6f}, {:8.6f}, {:6.4f}".format(1/fmeep[i],
- math.degrees(tmeep[i]),
- Rmeep[i],
- Ranalytic[i],
- err))
+ err = abs(Rmeep[i] - Ranalytic[i]) / Ranalytic[i]
+ print(
+ "refl:, {:4.2f}, {:4.2f}, {:8.6f}, {:8.6f}, {:6.4f}".format(
+ 1 / fmeep[i], math.degrees(tmeep[i]), Rmeep[i], Ranalytic[i], err
+ )
+ )
tol = 0.005 if mp.is_single_precision() else 0.004
self.assertClose(Rmeep, Ranalytic, epsilon=tol)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_ring.py b/python/tests/test_ring.py
index 6472f3347..46ed58c24 100644
--- a/python/tests/test_ring.py
+++ b/python/tests/test_ring.py
@@ -3,8 +3,8 @@
import unittest
import meep as mp
-class TestRing(unittest.TestCase):
+class TestRing(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.temp_dir = mp.make_output_directory()
@@ -32,12 +32,14 @@ def init(self):
src = mp.Source(mp.GaussianSource(fcen, fwidth=df), mp.Ez, mp.Vector3(r + 0.1))
- self.sim = mp.Simulation(cell_size=mp.Vector3(sxy, sxy),
- geometry=[c1, c2],
- sources=[src],
- resolution=10,
- symmetries=[mp.Mirror(mp.Y)],
- boundary_layers=[mp.PML(dpml)])
+ self.sim = mp.Simulation(
+ cell_size=mp.Vector3(sxy, sxy),
+ geometry=[c1, c2],
+ sources=[src],
+ resolution=10,
+ symmetries=[mp.Mirror(mp.Y)],
+ boundary_layers=[mp.PML(dpml)],
+ )
self.sim.use_output_directory(self.temp_dir)
self.h = mp.Harminv(mp.Ez, mp.Vector3(r + 0.1), fcen, df)
@@ -48,7 +50,7 @@ def test_harminv(self):
self.sim.run(
mp.at_beginning(mp.output_epsilon),
mp.after_sources(self.h),
- until_after_sources=300
+ until_after_sources=300,
)
m1 = self.h.modes[0]
@@ -68,5 +70,5 @@ def test_harminv(self):
self.assertAlmostEqual(fp, -0.08185972142450348, places=places)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_ring_cyl.py b/python/tests/test_ring_cyl.py
index a6ec6c27d..6762b448b 100644
--- a/python/tests/test_ring_cyl.py
+++ b/python/tests/test_ring_cyl.py
@@ -2,8 +2,8 @@
import meep as mp
from utils import ApproxComparisonTestCase
-class TestRingCyl(ApproxComparisonTestCase):
+class TestRingCyl(ApproxComparisonTestCase):
def setUp(self):
n = 3.4
w = 1
@@ -19,7 +19,7 @@ def setUp(self):
mp.Block(
center=mp.Vector3(self.r + (w / 2)),
size=mp.Vector3(w, mp.inf, mp.inf),
- material=mp.Medium(index=n)
+ material=mp.Medium(index=n),
)
]
@@ -32,7 +32,7 @@ def setUp(self):
mp.Source(
src=mp.GaussianSource(self.fcen, fwidth=self.df),
component=mp.Ez,
- center=mp.Vector3(self.r + 0.1)
+ center=mp.Vector3(self.r + 0.1),
)
]
@@ -44,7 +44,7 @@ def setUp(self):
sources=sources,
dimensions=dimensions,
m=m,
- split_chunks_evenly=False
+ split_chunks_evenly=False,
)
def test_ring_cyl(self):
@@ -67,5 +67,5 @@ def test_ring_cyl(self):
self.assertClose(expected, res, epsilon=tol)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_simulation.py b/python/tests/test_simulation.py
index af69f0620..2a72f9f1b 100644
--- a/python/tests/test_simulation.py
+++ b/python/tests/test_simulation.py
@@ -16,8 +16,8 @@
class TestSimulation(unittest.TestCase):
- fname_base = re.sub(r'\.py$', '', os.path.split(sys.argv[0])[1])
- fname = fname_base + '-ez-000200.00.h5'
+ fname_base = re.sub(r"\.py$", "", os.path.split(sys.argv[0])[1])
+ fname = fname_base + "-ez-000200.00.h5"
def setUp(self):
print(f"Running {self._testMethodName}")
@@ -33,16 +33,106 @@ def tearDownClass(cls):
def test_interpolate_numbers(self):
expected = [
- 1.0, 1.0909090909090908, 1.1818181818181819, 1.2727272727272727, 1.3636363636363635, 1.4545454545454546, 1.5454545454545454, 1.6363636363636365, 1.7272727272727273, 1.8181818181818181, 1.9090909090909092,
- 2.0, 2.090909090909091, 2.1818181818181817, 2.272727272727273, 2.3636363636363638, 2.4545454545454546, 2.5454545454545454, 2.6363636363636362, 2.727272727272727, 2.8181818181818183, 2.909090909090909,
- 3.0, 3.090909090909091, 3.1818181818181817, 3.272727272727273, 3.3636363636363638, 3.4545454545454546, 3.5454545454545454, 3.6363636363636362, 3.727272727272727, 3.8181818181818183, 3.909090909090909,
- 4.0, 4.090909090909091, 4.181818181818182, 4.2727272727272725, 4.363636363636363, 4.454545454545454, 4.545454545454546, 4.636363636363637, 4.7272727272727275, 4.818181818181818, 4.909090909090909,
- 5.0, 5.090909090909091, 5.181818181818182, 5.2727272727272725, 5.363636363636363, 5.454545454545454, 5.545454545454546, 5.636363636363637, 5.7272727272727275, 5.818181818181818, 5.909090909090909,
- 6.0, 6.090909090909091, 6.181818181818182, 6.2727272727272725, 6.363636363636363, 6.454545454545454, 6.545454545454546, 6.636363636363637, 6.7272727272727275, 6.818181818181818, 6.909090909090909,
- 7.0, 7.090909090909091, 7.181818181818182, 7.2727272727272725, 7.363636363636363, 7.454545454545454, 7.545454545454546, 7.636363636363637, 7.7272727272727275, 7.818181818181818, 7.909090909090909,
- 8.0, 8.090909090909092, 8.181818181818182, 8.272727272727273, 8.363636363636363, 8.454545454545455, 8.545454545454545, 8.636363636363637, 8.727272727272727, 8.818181818181818, 8.909090909090908,
- 9.0, 9.090909090909092, 9.181818181818182, 9.272727272727273, 9.363636363636363, 9.454545454545455, 9.545454545454545, 9.636363636363637, 9.727272727272727, 9.818181818181818, 9.909090909090908,
- 10.0
+ 1.0,
+ 1.0909090909090908,
+ 1.1818181818181819,
+ 1.2727272727272727,
+ 1.3636363636363635,
+ 1.4545454545454546,
+ 1.5454545454545454,
+ 1.6363636363636365,
+ 1.7272727272727273,
+ 1.8181818181818181,
+ 1.9090909090909092,
+ 2.0,
+ 2.090909090909091,
+ 2.1818181818181817,
+ 2.272727272727273,
+ 2.3636363636363638,
+ 2.4545454545454546,
+ 2.5454545454545454,
+ 2.6363636363636362,
+ 2.727272727272727,
+ 2.8181818181818183,
+ 2.909090909090909,
+ 3.0,
+ 3.090909090909091,
+ 3.1818181818181817,
+ 3.272727272727273,
+ 3.3636363636363638,
+ 3.4545454545454546,
+ 3.5454545454545454,
+ 3.6363636363636362,
+ 3.727272727272727,
+ 3.8181818181818183,
+ 3.909090909090909,
+ 4.0,
+ 4.090909090909091,
+ 4.181818181818182,
+ 4.2727272727272725,
+ 4.363636363636363,
+ 4.454545454545454,
+ 4.545454545454546,
+ 4.636363636363637,
+ 4.7272727272727275,
+ 4.818181818181818,
+ 4.909090909090909,
+ 5.0,
+ 5.090909090909091,
+ 5.181818181818182,
+ 5.2727272727272725,
+ 5.363636363636363,
+ 5.454545454545454,
+ 5.545454545454546,
+ 5.636363636363637,
+ 5.7272727272727275,
+ 5.818181818181818,
+ 5.909090909090909,
+ 6.0,
+ 6.090909090909091,
+ 6.181818181818182,
+ 6.2727272727272725,
+ 6.363636363636363,
+ 6.454545454545454,
+ 6.545454545454546,
+ 6.636363636363637,
+ 6.7272727272727275,
+ 6.818181818181818,
+ 6.909090909090909,
+ 7.0,
+ 7.090909090909091,
+ 7.181818181818182,
+ 7.2727272727272725,
+ 7.363636363636363,
+ 7.454545454545454,
+ 7.545454545454546,
+ 7.636363636363637,
+ 7.7272727272727275,
+ 7.818181818181818,
+ 7.909090909090909,
+ 8.0,
+ 8.090909090909092,
+ 8.181818181818182,
+ 8.272727272727273,
+ 8.363636363636363,
+ 8.454545454545455,
+ 8.545454545454545,
+ 8.636363636363637,
+ 8.727272727272727,
+ 8.818181818181818,
+ 8.909090909090908,
+ 9.0,
+ 9.090909090909092,
+ 9.181818181818182,
+ 9.272727272727273,
+ 9.363636363636363,
+ 9.454545454545455,
+ 9.545454545454545,
+ 9.636363636363637,
+ 9.727272727272727,
+ 9.818181818181818,
+ 9.909090909090908,
+ 10.0,
]
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
@@ -73,7 +163,7 @@ def test_interpolate_vectors(self):
mp.Vector3(0.42499999999999993),
mp.Vector3(0.44999999999999996),
mp.Vector3(0.475),
- mp.Vector3(0.5)
+ mp.Vector3(0.5),
]
res = mp.interpolate(19, [mp.Vector3(), mp.Vector3(0.5)])
@@ -94,7 +184,7 @@ def test_arith_sequence(self):
0.15240480961923594,
0.15280561122244193,
0.15320641282564793,
- 0.15360721442885392
+ 0.15360721442885392,
]
res = np.linspace(0.15, 0.15 + 0.000400801603206 * 10, num=10, endpoint=False)
@@ -112,17 +202,20 @@ def init_simple_simulation(self, **kwargs):
fcen = 1.0
df = 1.0
- sources = mp.Source(src=mp.GaussianSource(fcen, fwidth=df), center=mp.Vector3(),
- component=mp.Ez)
+ sources = mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=df), center=mp.Vector3(), component=mp.Ez
+ )
symmetries = [mp.Mirror(mp.X), mp.Mirror(mp.Y)]
- return mp.Simulation(resolution=resolution,
- cell_size=cell,
- boundary_layers=[pml_layers],
- sources=[sources],
- symmetries=symmetries,
- **kwargs)
+ return mp.Simulation(
+ resolution=resolution,
+ cell_size=cell,
+ boundary_layers=[pml_layers],
+ sources=[sources],
+ symmetries=symmetries,
+ **kwargs,
+ )
@unittest.skipIf(not mp.with_mpi(), "MPI specific test")
def test_mpi(self):
@@ -130,7 +223,7 @@ def test_mpi(self):
def test_use_output_directory_default(self):
sim = self.init_simple_simulation()
- output_dir = os.path.join(self.temp_dir, 'simulation-out')
+ output_dir = os.path.join(self.temp_dir, "simulation-out")
sim.use_output_directory(output_dir)
sim.run(mp.at_end(mp.output_efield_z), until=200)
@@ -141,7 +234,9 @@ def test_at_time(self):
sim.use_output_directory(self.temp_dir)
sim.run(mp.at_time(100, mp.output_efield_z), until=200)
- fname = os.path.join(self.temp_dir, f'{sim.get_filename_prefix()}-ez-000100.00.h5')
+ fname = os.path.join(
+ self.temp_dir, f"{sim.get_filename_prefix()}-ez-000100.00.h5"
+ )
self.assertTrue(os.path.exists(fname))
@@ -160,9 +255,14 @@ def _done(sim, todo):
def test_with_prefix(self):
sim = self.init_simple_simulation()
sim.use_output_directory(self.temp_dir)
- sim.run(mp.with_prefix('test_prefix-', mp.at_end(mp.output_efield_z)), until=200)
+ sim.run(
+ mp.with_prefix("test_prefix-", mp.at_end(mp.output_efield_z)), until=200
+ )
- fname = os.path.join(self.temp_dir, (f'test_prefix-{sim.get_filename_prefix()}' + '-ez-000200.00.h5'))
+ fname = os.path.join(
+ self.temp_dir,
+ (f"test_prefix-{sim.get_filename_prefix()}" + "-ez-000200.00.h5"),
+ )
self.assertTrue(os.path.exists(fname))
@@ -189,25 +289,29 @@ def test_infer_dimensions(self):
def test_in_volume(self):
sim = self.init_simple_simulation()
sim.use_output_directory(self.temp_dir)
- sim.filename_prefix = 'test_in_volume'
+ sim.filename_prefix = "test_in_volume"
vol = mp.Volume(mp.Vector3(), size=mp.Vector3(x=2))
sim.run(mp.at_end(mp.in_volume(vol, mp.output_efield_z)), until=200)
- fn = os.path.join(self.temp_dir, 'test_in_volume-ez-000200.00.h5')
+ fn = os.path.join(self.temp_dir, "test_in_volume-ez-000200.00.h5")
self.assertTrue(os.path.exists(fn))
def test_in_point(self):
sim = self.init_simple_simulation()
sim.use_output_directory(self.temp_dir)
- sim.filename_prefix = 'test_in_point'
+ sim.filename_prefix = "test_in_point"
pt = mp.Vector3()
sim.run(mp.at_end(mp.in_point(pt, mp.output_efield_z)), until=200)
- fn = os.path.join(self.temp_dir, 'test_in_point-ez-000200.00.h5')
+ fn = os.path.join(self.temp_dir, "test_in_point-ez-000200.00.h5")
self.assertTrue(os.path.exists(fn))
def test_epsilon_input_file(self):
sim = self.init_simple_simulation()
- eps_input_fname = 'cyl-ellipsoid-eps-ref.h5'
- eps_input_dir = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..', 'tests'))
+ eps_input_fname = "cyl-ellipsoid-eps-ref.h5"
+ eps_input_dir = os.path.abspath(
+ os.path.join(
+ os.path.dirname(os.path.abspath(__file__)), "..", "..", "tests"
+ )
+ )
eps_input_path = os.path.join(eps_input_dir, eps_input_fname)
sim.epsilon_input_file = eps_input_path
@@ -219,19 +323,25 @@ def test_epsilon_input_file(self):
# Test unicode file name for Python 2
if sys.version_info[0] == 2:
- sim = self.init_simple_simulation(epsilon_input_file=unicode(eps_input_path))
+ sim = self.init_simple_simulation(
+ epsilon_input_file=unicode(eps_input_path)
+ )
sim.run(until=200)
fp = sim.get_field_point(mp.Ez, mp.Vector3(x=1))
self.assertAlmostEqual(fp, -0.002989654055823199)
def test_numpy_epsilon(self):
sim = self.init_simple_simulation()
- eps_input_fname = 'cyl-ellipsoid-eps-ref.h5'
- eps_input_dir = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..', 'tests'))
+ eps_input_fname = "cyl-ellipsoid-eps-ref.h5"
+ eps_input_dir = os.path.abspath(
+ os.path.join(
+ os.path.dirname(os.path.abspath(__file__)), "..", "..", "tests"
+ )
+ )
eps_input_path = os.path.join(eps_input_dir, eps_input_fname)
- with h5py.File(eps_input_path, 'r') as f:
- sim.default_material = f['eps'][()]
+ with h5py.File(eps_input_path, "r") as f:
+ sim.default_material = f["eps"][()]
sim.run(until=200)
fp = sim.get_field_point(mp.Ez, mp.Vector3(x=1))
@@ -240,51 +350,68 @@ def test_numpy_epsilon(self):
self.assertAlmostEqual(fp, -0.002989654055823199, places=places)
def test_set_materials(self):
-
def change_geom(sim):
t = sim.meep_time()
fn = t * 0.02
- geom = [mp.Cylinder(radius=3, material=mp.Medium(index=3.5), center=mp.Vector3(fn, fn)),
- mp.Ellipsoid(size=mp.Vector3(1, 2, mp.inf), center=mp.Vector3(fn, fn))]
+ geom = [
+ mp.Cylinder(
+ radius=3, material=mp.Medium(index=3.5), center=mp.Vector3(fn, fn)
+ ),
+ mp.Ellipsoid(size=mp.Vector3(1, 2, mp.inf), center=mp.Vector3(fn, fn)),
+ ]
sim.set_materials(geometry=geom)
c = mp.Cylinder(radius=3, material=mp.Medium(index=3.5))
e = mp.Ellipsoid(size=mp.Vector3(1, 2, mp.inf))
- sources = mp.Source(src=mp.GaussianSource(1, fwidth=0.1), component=mp.Hz, center=mp.Vector3())
+ sources = mp.Source(
+ src=mp.GaussianSource(1, fwidth=0.1), component=mp.Hz, center=mp.Vector3()
+ )
symmetries = [mp.Mirror(mp.X, -1), mp.Mirror(mp.Y, -1)]
- sim = mp.Simulation(cell_size=mp.Vector3(10, 10),
- geometry=[c, e],
- boundary_layers=[mp.PML(1.0)],
- sources=[sources],
- symmetries=symmetries,
- resolution=16)
+ sim = mp.Simulation(
+ cell_size=mp.Vector3(10, 10),
+ geometry=[c, e],
+ boundary_layers=[mp.PML(1.0)],
+ sources=[sources],
+ symmetries=symmetries,
+ resolution=16,
+ )
- eps = {'arr1': None, 'arr2': None}
+ eps = {"arr1": None, "arr2": None}
def get_arr1(sim):
- eps['arr1'] = sim.get_array(mp.Dielectric, mp.Volume(mp.Vector3(), mp.Vector3(10, 10)))
+ eps["arr1"] = sim.get_array(
+ mp.Dielectric, mp.Volume(mp.Vector3(), mp.Vector3(10, 10))
+ )
def get_arr2(sim):
- eps['arr2'] = sim.get_array(mp.Dielectric, mp.Volume(mp.Vector3(), mp.Vector3(10, 10)))
-
- sim.run(mp.at_time(50, get_arr1), mp.at_time(100, change_geom),
- mp.at_end(get_arr2), until=200)
+ eps["arr2"] = sim.get_array(
+ mp.Dielectric, mp.Volume(mp.Vector3(), mp.Vector3(10, 10))
+ )
+
+ sim.run(
+ mp.at_time(50, get_arr1),
+ mp.at_time(100, change_geom),
+ mp.at_end(get_arr2),
+ until=200,
+ )
- self.assertFalse(np.array_equal(eps['arr1'], eps['arr2']))
+ self.assertFalse(np.array_equal(eps["arr1"], eps["arr2"]))
def test_modal_volume_in_box(self):
sim = self.init_simple_simulation()
sim.run(until=200)
vol = sim.fields.total_volume()
- self.assertAlmostEqual(sim.fields.modal_volume_in_box(vol),
- sim.modal_volume_in_box())
+ self.assertAlmostEqual(
+ sim.fields.modal_volume_in_box(vol), sim.modal_volume_in_box()
+ )
vol = mp.Volume(mp.Vector3(), size=mp.Vector3(1, 1, 1))
- self.assertAlmostEqual(sim.fields.modal_volume_in_box(vol.swigobj),
- sim.modal_volume_in_box(vol))
+ self.assertAlmostEqual(
+ sim.fields.modal_volume_in_box(vol.swigobj), sim.modal_volume_in_box(vol)
+ )
def test_in_box_volumes(self):
sim = self.init_simple_simulation()
@@ -307,7 +434,7 @@ def test_get_array_output(self):
sim.use_output_directory(self.temp_dir)
sim.symmetries = []
sim.geometry = [mp.Cylinder(0.2, material=mp.Medium(index=3))]
- sim.filename_prefix = 'test_get_array_output'
+ sim.filename_prefix = "test_get_array_output"
sim.run(until=20)
mp.output_epsilon(sim)
@@ -320,21 +447,21 @@ def test_get_array_output(self):
energy_arr = sim.get_tot_pwr(snap=True)
efield_arr = sim.get_efield(snap=True)
- fname_fmt = os.path.join(self.temp_dir, 'test_get_array_output-{}-000020.00.h5')
+ fname_fmt = os.path.join(self.temp_dir, "test_get_array_output-{}-000020.00.h5")
- with h5py.File(fname_fmt.format('eps'), 'r') as f:
- eps = f['eps'][()]
+ with h5py.File(fname_fmt.format("eps"), "r") as f:
+ eps = f["eps"][()]
- with h5py.File(fname_fmt.format('ez'), 'r') as f:
- efield_z = f['ez'][()]
+ with h5py.File(fname_fmt.format("ez"), "r") as f:
+ efield_z = f["ez"][()]
- with h5py.File(fname_fmt.format('energy'), 'r') as f:
- energy = f['energy'][()]
+ with h5py.File(fname_fmt.format("energy"), "r") as f:
+ energy = f["energy"][()]
- with h5py.File(fname_fmt.format('e'), 'r') as f:
- ex = f['ex'][()]
- ey = f['ey'][()]
- ez = f['ez'][()]
+ with h5py.File(fname_fmt.format("e"), "r") as f:
+ ex = f["ex"][()]
+ ey = f["ey"][()]
+ ez = f["ez"][()]
efield = np.stack([ex, ey, ez], axis=-1)
np.testing.assert_allclose(eps, eps_arr)
@@ -346,13 +473,21 @@ def test_synchronized_magnetic(self):
# Issue 309
cell = mp.Vector3(16, 8, 0)
- geometry = [mp.Block(mp.Vector3(1e20, 1, 1e20),
- center=mp.Vector3(0, 0),
- material=mp.Medium(epsilon=12))]
+ geometry = [
+ mp.Block(
+ mp.Vector3(1e20, 1, 1e20),
+ center=mp.Vector3(0, 0),
+ material=mp.Medium(epsilon=12),
+ )
+ ]
- sources = [mp.Source(mp.ContinuousSource(frequency=0.15),
- component=mp.Ez,
- center=mp.Vector3(-7, 0))]
+ sources = [
+ mp.Source(
+ mp.ContinuousSource(frequency=0.15),
+ component=mp.Ez,
+ center=mp.Vector3(-7, 0),
+ )
+ ]
pml_layers = [mp.PML(1.0)]
resolution = 10
@@ -362,14 +497,13 @@ def test_synchronized_magnetic(self):
boundary_layers=pml_layers,
geometry=geometry,
sources=sources,
- resolution=resolution
+ resolution=resolution,
)
sim.use_output_directory(self.temp_dir)
sim.run(mp.synchronized_magnetic(mp.output_bfield_y), until=10)
def test_harminv_warnings(self):
-
def check_warnings(sim, h, should_warn=True):
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
@@ -381,21 +515,30 @@ def check_warnings(sim, h, should_warn=True):
else:
self.assertEqual(len(w), 0)
- sources = [mp.Source(src=mp.GaussianSource(1, fwidth=1), center=mp.Vector3(), component=mp.Ez)]
- sim = mp.Simulation(cell_size=mp.Vector3(10, 10), resolution=10, sources=sources)
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(1, fwidth=1), center=mp.Vector3(), component=mp.Ez
+ )
+ ]
+ sim = mp.Simulation(
+ cell_size=mp.Vector3(10, 10), resolution=10, sources=sources
+ )
h = mp.Harminv(mp.Ez, mp.Vector3(), 1.4, 0.5)
check_warnings(sim, h)
- sim = mp.Simulation(cell_size=mp.Vector3(10, 10), resolution=10, sources=sources)
+ sim = mp.Simulation(
+ cell_size=mp.Vector3(10, 10), resolution=10, sources=sources
+ )
h = mp.Harminv(mp.Ez, mp.Vector3(), 0.5, 0.5)
check_warnings(sim, h)
- sim = mp.Simulation(cell_size=mp.Vector3(10, 10), resolution=10, sources=sources)
+ sim = mp.Simulation(
+ cell_size=mp.Vector3(10, 10), resolution=10, sources=sources
+ )
h = mp.Harminv(mp.Ez, mp.Vector3(), 1, 1)
check_warnings(sim, h, should_warn=False)
def test_vec_constructor(self):
-
def assert_one(v):
self.assertEqual(v.z(), 1)
@@ -429,14 +572,16 @@ def check_iterable(one, two, three, four):
assert_two(v2)
v3 = mp.vec(three)
assert_three(v3)
- assert_raises(four, (NotImplementedError,TypeError))
+ assert_raises(four, (NotImplementedError, TypeError))
check_iterable([1], [1, 2], [1, 2, 3], [1, 2, 3, 4])
check_iterable((1,), (1, 2), (1, 2, 3), (1, 2, 3, 4))
- check_iterable(np.array([1.]),
- np.array([1., 2.]),
- np.array([1., 2., 3.]),
- np.array([1., 2., 3., 4.]))
+ check_iterable(
+ np.array([1.0]),
+ np.array([1.0, 2.0]),
+ np.array([1.0, 2.0, 3.0]),
+ np.array([1.0, 2.0, 3.0, 4.0]),
+ )
with self.assertRaises(TypeError):
mp.vec([1, 2], 3)
@@ -444,7 +589,9 @@ def check_iterable(one, two, three, four):
with self.assertRaises(TypeError):
mp.vec(1, [2, 3])
- @unittest.skipIf(mp.is_single_precision(), "double-precision floating point specific test")
+ @unittest.skipIf(
+ mp.is_single_precision(), "double-precision floating point specific test"
+ )
def test_epsilon_warning(self):
## fields blow up using dispersive material
## when compiled using single precision
@@ -452,9 +599,11 @@ def test_epsilon_warning(self):
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
from meep.materials import Si
+
self.assertEqual(len(w), 0)
from meep.materials import Mo
+
geom = [mp.Sphere(radius=0.2, material=Mo)]
sim = self.init_simple_simulation(geometry=geom)
with warnings.catch_warnings(record=True) as w:
@@ -464,6 +613,7 @@ def test_epsilon_warning(self):
self.assertIn("Epsilon", str(w[0].message))
from meep.materials import SiO2
+
geom = [mp.Sphere(radius=0.2, material=SiO2)]
sim = self.init_simple_simulation(geometry=geom)
with warnings.catch_warnings(record=True) as w:
@@ -475,7 +625,7 @@ def test_epsilon_warning(self):
def test_get_filename_prefix(self):
sim = self.init_simple_simulation()
self.assertEqual(sim.get_filename_prefix(), self.fname_base)
- sim.filename_prefix = ''
+ sim.filename_prefix = ""
self.assertEqual(sim.get_filename_prefix(), "")
sim.filename_prefix = False
with self.assertRaises(TypeError):
@@ -506,16 +656,32 @@ def test_geometry_center(self):
fcen = 0.15
df = 0.1
- sources = [mp.Source(src=mp.GaussianSource(fcen, fwidth=df), component=mp.Ez,
- center=mp.Vector3())]
- geometry = [mp.Block(center=mp.Vector3(), size=mp.Vector3(mp.inf, 3, mp.inf),
- material=mp.Medium(epsilon=12))]
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=mp.Vector3(),
+ )
+ ]
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(mp.inf, 3, mp.inf),
+ material=mp.Medium(epsilon=12),
+ )
+ ]
def print_field(sim):
result.append(sim.get_field_point(mp.Ez, mp.Vector3(2, -1)))
- sim = mp.Simulation(resolution=resolution, cell_size=cell_size, boundary_layers=pml,
- sources=sources, geometry=geometry, geometry_center=center)
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml,
+ sources=sources,
+ geometry=geometry,
+ geometry_center=center,
+ )
sim.run(mp.at_end(print_field), until=50)
self.assertAlmostEqual(result[0], -0.0599602798684155)
@@ -529,29 +695,50 @@ def test_timing_data(self):
fcen = 0.15
df = 0.1
- sources = [mp.Source(src=mp.GaussianSource(fcen, fwidth=df), component=mp.Ez,
- center=mp.Vector3())]
- geometry = [mp.Block(center=mp.Vector3(), size=mp.Vector3(mp.inf, 3, mp.inf),
- material=mp.Medium(epsilon=12))]
+ sources = [
+ mp.Source(
+ src=mp.GaussianSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=mp.Vector3(),
+ )
+ ]
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(mp.inf, 3, mp.inf),
+ material=mp.Medium(epsilon=12),
+ )
+ ]
- sim = mp.Simulation(resolution=resolution, cell_size=cell_size, boundary_layers=pml,
- sources=sources, geometry=geometry, geometry_center=center)
+ sim = mp.Simulation(
+ resolution=resolution,
+ cell_size=cell_size,
+ boundary_layers=pml,
+ sources=sources,
+ geometry=geometry,
+ geometry_center=center,
+ )
sim.run(until=50)
timing_data = sim.get_timing_data()
# Non-exhaustive collection of steps where some time should be spent:
- EXPECTED_NONZERO_TIMESINKS = (mp.Stepping, mp.Boundaries,
- mp.FieldUpdateB, mp.FieldUpdateH,
- mp.FieldUpdateD, mp.FieldUpdateE)
+ EXPECTED_NONZERO_TIMESINKS = (
+ mp.Stepping,
+ mp.Boundaries,
+ mp.FieldUpdateB,
+ mp.FieldUpdateH,
+ mp.FieldUpdateD,
+ mp.FieldUpdateE,
+ )
# Due to the problem setup, no time should be spent on these steps:
EXPECTED_ZERO_TIMESINKS = (mp.MPBTime, mp.GetFarfieldsTime)
- for sink in itertools.chain(EXPECTED_NONZERO_TIMESINKS,
- EXPECTED_ZERO_TIMESINKS):
+ for sink in itertools.chain(
+ EXPECTED_NONZERO_TIMESINKS, EXPECTED_ZERO_TIMESINKS
+ ):
self.assertIn(sink, timing_data.keys())
self.assertEqual(len(timing_data[sink]), mp.count_processors())
- np.testing.assert_array_equal(sim.time_spent_on(sink),
- timing_data[sink])
+ np.testing.assert_array_equal(sim.time_spent_on(sink), timing_data[sink])
for sink in EXPECTED_NONZERO_TIMESINKS:
for t in timing_data[sink]:
@@ -563,34 +750,40 @@ def test_timing_data(self):
self.assertGreaterEqual(
sum(timing_data[mp.Stepping]),
- sum(timing_data[mp.FieldUpdateB]) +
- sum(timing_data[mp.FieldUpdateH]) +
- sum(timing_data[mp.FieldUpdateD]) +
- sum(timing_data[mp.FieldUpdateE]) +
- sum(timing_data[mp.FourierTransforming]))
+ sum(timing_data[mp.FieldUpdateB])
+ + sum(timing_data[mp.FieldUpdateH])
+ + sum(timing_data[mp.FieldUpdateD])
+ + sum(timing_data[mp.FieldUpdateE])
+ + sum(timing_data[mp.FourierTransforming]),
+ )
def test_source_slice(self):
sim = self.init_simple_simulation()
sim.run(until=1)
- vol1d = mp.Volume(center=mp.Vector3(0.1234,0), size=mp.Vector3(0,5.07))
+ vol1d = mp.Volume(center=mp.Vector3(0.1234, 0), size=mp.Vector3(0, 5.07))
source_slice = sim.get_source(mp.Ez, vol=vol1d)
- x,y,z,w = sim.get_array_metadata(vol=vol1d)
+ x, y, z, w = sim.get_array_metadata(vol=vol1d)
self.assertEqual(source_slice.shape, w.shape)
self.assertEqual(np.sum(source_slice), 0)
- vol2d = mp.Volume(center=mp.Vector3(-0.541,0.791), size=mp.Vector3(3.5,2.8))
+ vol2d = mp.Volume(center=mp.Vector3(-0.541, 0.791), size=mp.Vector3(3.5, 2.8))
source_slice = sim.get_source(mp.Ez, vol=vol2d)
- x,y,z,w = sim.get_array_metadata(vol=vol2d)
+ x, y, z, w = sim.get_array_metadata(vol=vol2d)
self.assertEqual(source_slice.shape, w.shape)
self.assertNotEqual(np.sum(source_slice), 0)
def test_has_mu(self):
-
def _check(med, expected, default=mp.Medium()):
- geometry = [mp.Block(center=mp.Vector3(), size=mp.Vector3(1, 1), material=med)]
- sim = mp.Simulation(cell_size=mp.Vector3(5, 5), resolution=10, geometry=geometry,
- default_material=default)
+ geometry = [
+ mp.Block(center=mp.Vector3(), size=mp.Vector3(1, 1), material=med)
+ ]
+ sim = mp.Simulation(
+ cell_size=mp.Vector3(5, 5),
+ resolution=10,
+ geometry=geometry,
+ default_material=default,
+ )
result = sim.has_mu()
if expected:
@@ -633,5 +826,6 @@ def test_iterable_as_v3(self):
self.assertAlmostEqual(pt1, expected)
self.assertAlmostEqual(pt2, expected)
-if __name__ == '__main__':
+
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_source.py b/python/tests/test_source.py
index 5006dac8a..b009a24b6 100644
--- a/python/tests/test_source.py
+++ b/python/tests/test_source.py
@@ -8,11 +8,10 @@
from meep.source import EigenModeSource, ContinuousSource, GaussianSource
-data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data'))
+data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data"))
class TestEigenModeSource(unittest.TestCase):
-
def test_eig_lattice_defaults(self):
src = ContinuousSource(5.0)
center = Vector3()
@@ -23,19 +22,20 @@ def test_eig_lattice_defaults(self):
elc = Vector3(1, 1, 1)
els = Vector3(1, 1, 1)
- custom_lattice = EigenModeSource(src, center, eig_lattice_center=elc, eig_lattice_size=els)
+ custom_lattice = EigenModeSource(
+ src, center, eig_lattice_center=elc, eig_lattice_size=els
+ )
self.assertEqual(custom_lattice.eig_lattice_size, els)
self.assertEqual(custom_lattice.eig_lattice_center, elc)
class TestSourceTime(unittest.TestCase):
-
def test_source_wavelength(self):
g_src = GaussianSource(wavelength=10)
c_src = ContinuousSource(wavelength=10)
- self.assertAlmostEqual(1. / 10., g_src.frequency)
- self.assertAlmostEqual(1. / 10., c_src.frequency)
+ self.assertAlmostEqual(1.0 / 10.0, g_src.frequency)
+ self.assertAlmostEqual(1.0 / 10.0, c_src.frequency)
def test_source_frequency(self):
g_src = GaussianSource(10)
@@ -52,9 +52,7 @@ def test_source_frequency(self):
class TestSourceTypemaps(unittest.TestCase):
-
def setUp(self):
-
def dummy_eps(v):
return 1.0
@@ -88,7 +86,7 @@ def test_custom_source(self):
geometry = [
mp.Cylinder(r + w, material=mp.Medium(index=n)),
- mp.Cylinder(r, material=mp.air)
+ mp.Cylinder(r, material=mp.air),
]
boundary_layers = [mp.PML(dpml)]
@@ -98,25 +96,34 @@ def test_custom_source(self):
# Bump function
def my_src_func(t):
- return math.exp(-1 / (1 - ((t - 1)**2))) if t > 0 and t < 2 else 0j
-
- sources = [mp.Source(src=mp.CustomSource(src_func=my_src_func, end_time=100),
- component=mp.Ez, center=mp.Vector3(r + 0.1))]
+ return math.exp(-1 / (1 - ((t - 1) ** 2))) if t > 0 and t < 2 else 0j
+
+ sources = [
+ mp.Source(
+ src=mp.CustomSource(src_func=my_src_func, end_time=100),
+ component=mp.Ez,
+ center=mp.Vector3(r + 0.1),
+ )
+ ]
symmetries = [mp.Mirror(mp.Y)]
- sim = mp.Simulation(cell_size=cell,
- resolution=resolution,
- geometry=geometry,
- boundary_layers=boundary_layers,
- sources=sources,
- symmetries=symmetries)
+ sim = mp.Simulation(
+ cell_size=cell,
+ resolution=resolution,
+ geometry=geometry,
+ boundary_layers=boundary_layers,
+ sources=sources,
+ symmetries=symmetries,
+ )
h = mp.Harminv(mp.Ez, mp.Vector3(r + 0.1), fcen, df)
sim.run(mp.after_sources(h), until_after_sources=200)
fp = sim.get_field_point(mp.Ez, mp.Vector3(1))
- self.assertAlmostEqual(fp, -0.021997617628500023 + 0j, 5 if mp.is_single_precision() else 7)
+ self.assertAlmostEqual(
+ fp, -0.021997617628500023 + 0j, 5 if mp.is_single_precision() else 7
+ )
def amp_fun(p):
@@ -124,7 +131,6 @@ def amp_fun(p):
class TestAmpFileFunc(unittest.TestCase):
-
def create_h5data(self):
N = 100
M = 200
@@ -145,18 +151,39 @@ def init_and_run(self, test_type):
cen = mp.Vector3(0.1, 0.2)
sz = mp.Vector3(0.3, 0.2)
- amp_file = os.path.join(data_dir, 'amp_func_file')
- amp_file += ':amp_data'
-
- if test_type == 'file':
- sources = [mp.Source(mp.ContinuousSource(fcen, fwidth=df), component=mp.Ez, center=cen,
- size=sz, amp_func_file=amp_file)]
- elif test_type == 'func':
- sources = [mp.Source(mp.ContinuousSource(fcen, fwidth=df), component=mp.Ez, center=cen,
- size=sz, amp_func=amp_fun)]
- elif test_type == 'arr':
- sources = [mp.Source(mp.ContinuousSource(fcen, fwidth=df), component=mp.Ez, center=cen,
- size=sz, amp_data=self.amp_data)]
+ amp_file = os.path.join(data_dir, "amp_func_file")
+ amp_file += ":amp_data"
+
+ if test_type == "file":
+ sources = [
+ mp.Source(
+ mp.ContinuousSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=cen,
+ size=sz,
+ amp_func_file=amp_file,
+ )
+ ]
+ elif test_type == "func":
+ sources = [
+ mp.Source(
+ mp.ContinuousSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=cen,
+ size=sz,
+ amp_func=amp_fun,
+ )
+ ]
+ elif test_type == "arr":
+ sources = [
+ mp.Source(
+ mp.ContinuousSource(fcen, fwidth=df),
+ component=mp.Ez,
+ center=cen,
+ size=sz,
+ amp_data=self.amp_data,
+ )
+ ]
sim = mp.Simulation(cell_size=cell, resolution=resolution, sources=sources)
sim.run(until=200)
@@ -164,15 +191,15 @@ def init_and_run(self, test_type):
def test_amp_file_func(self):
self.create_h5data()
- field_point_amp_file = self.init_and_run(test_type='file')
- field_point_amp_func = self.init_and_run(test_type='func')
- field_point_amp_arr = self.init_and_run(test_type='arr')
+ field_point_amp_file = self.init_and_run(test_type="file")
+ field_point_amp_func = self.init_and_run(test_type="func")
+ field_point_amp_arr = self.init_and_run(test_type="arr")
self.assertAlmostEqual(field_point_amp_file, field_point_amp_func, places=4)
self.assertAlmostEqual(field_point_amp_arr, field_point_amp_func, places=4)
-class TestCustomEigenModeSource(unittest.TestCase):
+class TestCustomEigenModeSource(unittest.TestCase):
def test_custom_em_source(self):
resolution = 20
@@ -181,43 +208,56 @@ def test_custom_em_source(self):
sx = 40
sy = 12
- cell_size = mp.Vector3(sx+2*dpml,sy)
+ cell_size = mp.Vector3(sx + 2 * dpml, sy)
v0 = 0.15 # pulse center frequency
- a = 0.2*v0 # Gaussian envelope half-width
+ a = 0.2 * v0 # Gaussian envelope half-width
b = -0.1 # linear chirp rate (positive: up-chirp, negative: down-chirp)
- t0 = 15 # peak time
+ t0 = 15 # peak time
- chirp = lambda t: np.exp(1j*2*np.pi*v0*(t-t0)) * np.exp(-a*(t-t0)**2+1j*b*(t-t0)**2)
+ chirp = lambda t: np.exp(1j * 2 * np.pi * v0 * (t - t0)) * np.exp(
+ -a * (t - t0) ** 2 + 1j * b * (t - t0) ** 2
+ )
- geometry = [mp.Block(center=mp.Vector3(0,0,0),size=mp.Vector3(mp.inf,1,mp.inf),material=mp.Medium(epsilon=12))]
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(0, 0, 0),
+ size=mp.Vector3(mp.inf, 1, mp.inf),
+ material=mp.Medium(epsilon=12),
+ )
+ ]
- kx = 0.4 # initial guess for wavevector in x-direction of eigenmode
+ kx = 0.4 # initial guess for wavevector in x-direction of eigenmode
kpoint = mp.Vector3(kx)
bnum = 1
- sources = [mp.EigenModeSource(src=mp.CustomSource(src_func=chirp,center_frequency=v0),
- center=mp.Vector3(-0.5*sx + dpml + 1),
- size=mp.Vector3(y=sy),
- eig_kpoint=kpoint,
- eig_band=bnum,
- eig_parity=mp.EVEN_Y+mp.ODD_Z,
- eig_match_freq=True
- )]
-
- sim = mp.Simulation(cell_size=cell_size,
- boundary_layers=pml_layers,
- resolution=resolution,
- k_point=mp.Vector3(),
- sources=sources,
- geometry=geometry,
- symmetries=[mp.Mirror(mp.Y)])
-
- t = np.linspace(0,50,1000)
- sim.run(until=t0+50)
+ sources = [
+ mp.EigenModeSource(
+ src=mp.CustomSource(src_func=chirp, center_frequency=v0),
+ center=mp.Vector3(-0.5 * sx + dpml + 1),
+ size=mp.Vector3(y=sy),
+ eig_kpoint=kpoint,
+ eig_band=bnum,
+ eig_parity=mp.EVEN_Y + mp.ODD_Z,
+ eig_match_freq=True,
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ resolution=resolution,
+ k_point=mp.Vector3(),
+ sources=sources,
+ geometry=geometry,
+ symmetries=[mp.Mirror(mp.Y)],
+ )
+
+ t = np.linspace(0, 50, 1000)
+ sim.run(until=t0 + 50)
# For now, just check to make sure the simulation can run and the fields don't blow up.
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_special_kz.py b/python/tests/test_special_kz.py
index 65f31fd2c..067381d6b 100644
--- a/python/tests/test_special_kz.py
+++ b/python/tests/test_special_kz.py
@@ -7,64 +7,81 @@
class TestSpecialKz(unittest.TestCase):
-
def refl_planar(self, theta, kz_2d):
resolution = 100 # pixels/um
dpml = 1.0
- sx = 3.0 + 2*dpml
- sy = 1/resolution
- cell_size = mp.Vector3(sx,sy)
- pml_layers = [mp.PML(dpml,direction=mp.X)]
+ sx = 3.0 + 2 * dpml
+ sy = 1 / resolution
+ cell_size = mp.Vector3(sx, sy)
+ pml_layers = [mp.PML(dpml, direction=mp.X)]
fcen = 1.0
# plane of incidence is XZ
- k_point = mp.Vector3(1,0,0).rotate(mp.Vector3(0,1,0),theta).scale(fcen)
-
- sources = [mp.Source(mp.GaussianSource(fcen,fwidth=0.2*fcen),
- component=mp.Ez, # P-polarization
- center=mp.Vector3(-0.5*sx+dpml),
- size=mp.Vector3(y=sy))]
-
- sim = mp.Simulation(cell_size=cell_size,
- boundary_layers=pml_layers,
- sources=sources,
- k_point=k_point,
- kz_2d=kz_2d,
- resolution=resolution)
-
- refl_fr = mp.FluxRegion(center=mp.Vector3(-0.25*sx),
- size=mp.Vector3(y=sy))
- refl = sim.add_flux(fcen,0,1,refl_fr)
-
- sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ez,mp.Vector3(),1e-9))
+ k_point = mp.Vector3(1, 0, 0).rotate(mp.Vector3(0, 1, 0), theta).scale(fcen)
+
+ sources = [
+ mp.Source(
+ mp.GaussianSource(fcen, fwidth=0.2 * fcen),
+ component=mp.Ez, # P-polarization
+ center=mp.Vector3(-0.5 * sx + dpml),
+ size=mp.Vector3(y=sy),
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ sources=sources,
+ k_point=k_point,
+ kz_2d=kz_2d,
+ resolution=resolution,
+ )
+
+ refl_fr = mp.FluxRegion(center=mp.Vector3(-0.25 * sx), size=mp.Vector3(y=sy))
+ refl = sim.add_flux(fcen, 0, 1, refl_fr)
+
+ sim.run(
+ until_after_sources=mp.stop_when_fields_decayed(
+ 50, mp.Ez, mp.Vector3(), 1e-9
+ )
+ )
empty_flux = mp.get_fluxes(refl)
empty_data = sim.get_flux_data(refl)
sim.reset_meep()
- geometry = [mp.Block(material=mp.Medium(index=3.5),
- size=mp.Vector3(0.5*sx,mp.inf,mp.inf),
- center=mp.Vector3(0.25*sx))]
-
- sim = mp.Simulation(cell_size=cell_size,
- boundary_layers=pml_layers,
- geometry=geometry,
- sources=sources,
- k_point=k_point,
- kz_2d=kz_2d,
- resolution=resolution)
-
- refl = sim.add_flux(fcen,0,1,refl_fr)
- sim.load_minus_flux_data(refl,empty_data)
-
- sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ez,mp.Vector3(),1e-9))
+ geometry = [
+ mp.Block(
+ material=mp.Medium(index=3.5),
+ size=mp.Vector3(0.5 * sx, mp.inf, mp.inf),
+ center=mp.Vector3(0.25 * sx),
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ sources=sources,
+ k_point=k_point,
+ kz_2d=kz_2d,
+ resolution=resolution,
+ )
+
+ refl = sim.add_flux(fcen, 0, 1, refl_fr)
+ sim.load_minus_flux_data(refl, empty_data)
+
+ sim.run(
+ until_after_sources=mp.stop_when_fields_decayed(
+ 50, mp.Ez, mp.Vector3(), 1e-9
+ )
+ )
refl_flux = mp.get_fluxes(refl)
- return -refl_flux[0]/empty_flux[0]
-
+ return -refl_flux[0] / empty_flux[0]
def test_special_kz(self):
n1 = 1
@@ -72,12 +89,17 @@ def test_special_kz(self):
# compute angle of refracted planewave in medium n2
# for incident planewave in medium n1 at angle theta_in
- theta_out = lambda theta_in: math.asin(n1*math.sin(theta_in)/n2)
+ theta_out = lambda theta_in: math.asin(n1 * math.sin(theta_in) / n2)
# compute Fresnel reflectance for P-polarization in medium n2
# for incident planewave in medium n1 at angle theta_in
- Rfresnel = lambda theta_in: math.fabs((n1*math.cos(theta_out(theta_in))-n2*math.cos(theta_in))
- / (n1*math.cos(theta_out(theta_in))+n2*math.cos(theta_in)))**2
+ Rfresnel = (
+ lambda theta_in: math.fabs(
+ (n1 * math.cos(theta_out(theta_in)) - n2 * math.cos(theta_in))
+ / (n1 * math.cos(theta_out(theta_in)) + n2 * math.cos(theta_in))
+ )
+ ** 2
+ )
# angle of incident planewave; clockwise (CW) about Y axis, 0 degrees along +X axis
theta = math.radians(23)
@@ -92,74 +114,79 @@ def test_special_kz(self):
Rfres = Rfresnel(theta)
- self.assertAlmostEqual(Rmeep_complex,Rfres,places=2)
- self.assertAlmostEqual(Rmeep_real_imag,Rfres,places=2)
-
+ self.assertAlmostEqual(Rmeep_complex, Rfres, places=2)
+ self.assertAlmostEqual(Rmeep_real_imag, Rfres, places=2)
+
# the real/imag algorithm should be faster, but on CI machines performance is too variable
# for this to reliably hold
- # self.assertLess(t_real_imag,t_complex)
-
+ # self.assertLess(t_real_imag,t_complex)
- @parameterized.parameterized.expand([("complex",),("real/imag",)])
+ @parameterized.parameterized.expand([("complex",), ("real/imag",)])
def test_eigsrc_kz(self, kz_2d):
- resolution = 30 # pixels/um
+ resolution = 30 # pixels/um
- cell_size = mp.Vector3(14,14)
+ cell_size = mp.Vector3(14, 14)
pml_layers = [mp.PML(thickness=2)]
- geometry = [mp.Block(center=mp.Vector3(),
- size=mp.Vector3(mp.inf,1,mp.inf),
- material=mp.Medium(epsilon=12))]
+ geometry = [
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(mp.inf, 1, mp.inf),
+ material=mp.Medium(epsilon=12),
+ )
+ ]
fsrc = 0.3 # frequency of eigenmode or constant-amplitude source
- bnum = 1 # band number of eigenmode
- kz = 0.2 # fixed out-of-plane wavevector component
-
- sources = [mp.EigenModeSource(src=mp.GaussianSource(fsrc,fwidth=0.2*fsrc),
- center=mp.Vector3(),
- size=mp.Vector3(y=14),
- eig_band=bnum,
- eig_parity=mp.EVEN_Y,
- eig_match_freq=True)]
-
- sim = mp.Simulation(cell_size=cell_size,
- resolution=resolution,
- boundary_layers=pml_layers,
- sources=sources,
- geometry=geometry,
- symmetries=[mp.Mirror(mp.Y)],
- k_point=mp.Vector3(z=kz),
- kz_2d=kz_2d)
-
- tran = sim.add_flux(fsrc,
- 0,
- 1,
- mp.FluxRegion(center=mp.Vector3(x=5),
- size=mp.Vector3(y=14)))
+ bnum = 1 # band number of eigenmode
+ kz = 0.2 # fixed out-of-plane wavevector component
+
+ sources = [
+ mp.EigenModeSource(
+ src=mp.GaussianSource(fsrc, fwidth=0.2 * fsrc),
+ center=mp.Vector3(),
+ size=mp.Vector3(y=14),
+ eig_band=bnum,
+ eig_parity=mp.EVEN_Y,
+ eig_match_freq=True,
+ )
+ ]
+
+ sim = mp.Simulation(
+ cell_size=cell_size,
+ resolution=resolution,
+ boundary_layers=pml_layers,
+ sources=sources,
+ geometry=geometry,
+ symmetries=[mp.Mirror(mp.Y)],
+ k_point=mp.Vector3(z=kz),
+ kz_2d=kz_2d,
+ )
+
+ tran = sim.add_flux(
+ fsrc, 0, 1, mp.FluxRegion(center=mp.Vector3(x=5), size=mp.Vector3(y=14))
+ )
sim.run(until_after_sources=50)
- res = sim.get_eigenmode_coefficients(tran,
- [1,2],
- eig_parity=mp.EVEN_Y)
+ res = sim.get_eigenmode_coefficients(tran, [1, 2], eig_parity=mp.EVEN_Y)
total_flux = mp.get_fluxes(tran)[0]
- mode1_flux = abs(res.alpha[0,0,0])**2
- mode2_flux = abs(res.alpha[1,0,0])**2
+ mode1_flux = abs(res.alpha[0, 0, 0]) ** 2
+ mode2_flux = abs(res.alpha[1, 0, 0]) ** 2
mode1_frac = 0.99
- self.assertGreater(mode1_flux/total_flux, mode1_frac)
- self.assertLess(mode2_flux/total_flux, 1-mode1_frac)
+ self.assertGreater(mode1_flux / total_flux, mode1_frac)
+ self.assertLess(mode2_flux / total_flux, 1 - mode1_frac)
d = 3.5
- ez1 = sim.get_field_point(mp.Ez, mp.Vector3(2.3,-5.7,4.8))
- ez2 = sim.get_field_point(mp.Ez, mp.Vector3(2.3,-5.7,4.8+d))
- ratio_ez = ez2/ez1
- phase_diff = cmath.exp(1j*2*cmath.pi*kz*d)
- self.assertAlmostEqual(ratio_ez.real,phase_diff.real,places=10)
- self.assertAlmostEqual(ratio_ez.imag,phase_diff.imag,places=10)
+ ez1 = sim.get_field_point(mp.Ez, mp.Vector3(2.3, -5.7, 4.8))
+ ez2 = sim.get_field_point(mp.Ez, mp.Vector3(2.3, -5.7, 4.8 + d))
+ ratio_ez = ez2 / ez1
+ phase_diff = cmath.exp(1j * 2 * cmath.pi * kz * d)
+ self.assertAlmostEqual(ratio_ez.real, phase_diff.real, places=10)
+ self.assertAlmostEqual(ratio_ez.imag, phase_diff.imag, places=10)
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_timing_measurements.py b/python/tests/test_timing_measurements.py
index 93ec0ca02..e748cbbab 100644
--- a/python/tests/test_timing_measurements.py
+++ b/python/tests/test_timing_measurements.py
@@ -6,7 +6,6 @@
class TimingTest(unittest.TestCase):
-
def test_timing_measurements(self):
"""Tests that timing measurements have expected names and can be updated."""
sim = mp.Simulation(
@@ -22,11 +21,15 @@ def test_timing_measurements(self):
set(timing_measurements.measurement_names),
set(timing.TIMING_MEASUREMENT_IDS.keys()),
)
- self.assertTrue(timing_measurements.elapsed_time > 0 or timing_measurements.elapsed_time == -1)
+ self.assertTrue(
+ timing_measurements.elapsed_time > 0
+ or timing_measurements.elapsed_time == -1
+ )
self.assertGreater(timing_measurements.num_time_steps, 0)
self.assertGreaterEqual(timing_measurements.comm_efficiency, 0)
self.assertGreaterEqual(timing_measurements.comm_efficiency_one_to_one, 0)
self.assertGreaterEqual(timing_measurements.comm_efficiency_all_to_all, 0)
-if __name__ == '__main__':
+
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_user_defined_material.py b/python/tests/test_user_defined_material.py
index 5a363e4dc..bed170591 100644
--- a/python/tests/test_user_defined_material.py
+++ b/python/tests/test_user_defined_material.py
@@ -39,22 +39,28 @@ def my_epsilon_func(p):
class TestUserMaterials(unittest.TestCase):
-
def setUp(self):
self.resolution = 10
self.cell = mp.Vector3(10, 10)
self.symmetries = [mp.Mirror(mp.X), mp.Mirror(mp.Y)]
self.boundary_layers = [mp.PML(1.0)]
- self.sources = [mp.Source(src=mp.GaussianSource(0.2, fwidth=0.1),
- component=mp.Ez, center=mp.Vector3())]
+ self.sources = [
+ mp.Source(
+ src=mp.GaussianSource(0.2, fwidth=0.1),
+ component=mp.Ez,
+ center=mp.Vector3(),
+ )
+ ]
def test_user_material_func(self):
- sim = mp.Simulation(cell_size=self.cell,
- resolution=self.resolution,
- symmetries=self.symmetries,
- boundary_layers=self.boundary_layers,
- sources=self.sources,
- material_function=my_material_func)
+ sim = mp.Simulation(
+ cell_size=self.cell,
+ resolution=self.resolution,
+ symmetries=self.symmetries,
+ boundary_layers=self.boundary_layers,
+ sources=self.sources,
+ material_function=my_material_func,
+ )
sim.run(until=200)
fp = sim.get_field_point(mp.Ez, mp.Vector3(x=1))
@@ -63,12 +69,14 @@ def test_user_material_func(self):
self.assertAlmostEqual(fp, 4.816403627871773e-4, places=places)
def test_epsilon_func(self):
- sim = mp.Simulation(cell_size=self.cell,
- resolution=self.resolution,
- symmetries=self.symmetries,
- boundary_layers=self.boundary_layers,
- sources=self.sources,
- epsilon_func=my_epsilon_func)
+ sim = mp.Simulation(
+ cell_size=self.cell,
+ resolution=self.resolution,
+ symmetries=self.symmetries,
+ boundary_layers=self.boundary_layers,
+ sources=self.sources,
+ epsilon_func=my_epsilon_func,
+ )
sim.run(until=100)
fp = sim.get_field_point(mp.Ez, mp.Vector3(x=1))
@@ -78,12 +86,14 @@ def test_epsilon_func(self):
def test_geometric_obj_with_user_material(self):
geometry = [mp.Cylinder(5, material=my_material_func)]
- sim = mp.Simulation(cell_size=self.cell,
- resolution=self.resolution,
- symmetries=self.symmetries,
- geometry=geometry,
- boundary_layers=self.boundary_layers,
- sources=self.sources)
+ sim = mp.Simulation(
+ cell_size=self.cell,
+ resolution=self.resolution,
+ symmetries=self.symmetries,
+ geometry=geometry,
+ boundary_layers=self.boundary_layers,
+ sources=self.sources,
+ )
sim.run(until=200)
fp = sim.get_field_point(mp.Ez, mp.Vector3(x=1))
@@ -93,16 +103,19 @@ def test_geometric_obj_with_user_material(self):
def test_geometric_obj_with_epsilon_func(self):
geometry = [mp.Cylinder(5, epsilon_func=my_epsilon_func)]
- sim = mp.Simulation(cell_size=self.cell,
- resolution=self.resolution,
- symmetries=self.symmetries,
- geometry=geometry,
- boundary_layers=self.boundary_layers,
- sources=self.sources)
+ sim = mp.Simulation(
+ cell_size=self.cell,
+ resolution=self.resolution,
+ symmetries=self.symmetries,
+ geometry=geometry,
+ boundary_layers=self.boundary_layers,
+ sources=self.sources,
+ )
sim.run(until=100)
fp = sim.get_field_point(mp.Ez, mp.Vector3(x=1))
self.assertAlmostEqual(fp, -7.895783750440999e-4)
-if __name__ == '__main__':
+
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_verbosity_mgr.py b/python/tests/test_verbosity_mgr.py
index f36688f98..097e71718 100644
--- a/python/tests/test_verbosity_mgr.py
+++ b/python/tests/test_verbosity_mgr.py
@@ -3,29 +3,28 @@
class VerbosityForTest(Verbosity):
- """Allows for testing of Verbosity without interfering with the singleton."""
- _instance = None
+ """Allows for testing of Verbosity without interfering with the singleton."""
+
+ _instance = None
class MyCvar:
- def __init__(self): self.verbosity = 1
+ def __init__(self):
+ self.verbosity = 1
class TestVerbosity(unittest.TestCase):
-
def setUp(self):
VerbosityForTest.reset()
- self.v1 = VerbosityForTest(name='foo')
- self.v2 = VerbosityForTest(MyCvar(), 'bar')
-
+ self.v1 = VerbosityForTest(name="foo")
+ self.v2 = VerbosityForTest(MyCvar(), "bar")
def test_identity(self):
# Ensure each verbosity is really the same singleton instance
v1, v2 = self.v1, self.v2
self.assertTrue(v1 is v2)
self.assertEqual(id(v1), id(v2))
- self.assertEqual(v1.get_all(), [1,1])
-
+ self.assertEqual(v1.get_all(), [1, 1])
def test_initial_value(self):
v1, v2 = self.v1, self.v2
@@ -33,7 +32,6 @@ def test_initial_value(self):
v2.set(2)
self.assertEqual(v1.get(), 2)
-
def test_properties(self):
v1, v2 = self.v1, self.v2
self.assertEqual(v1.foo, 1)
@@ -43,7 +41,6 @@ def test_properties(self):
self.assertEqual(v2.foo, 2)
self.assertEqual(v2.bar, 3)
-
def test_operators(self):
v1, v2 = self.v1, self.v2
@@ -72,6 +69,5 @@ def test_out_of_range(self):
v2.bar = -5
-
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/test_visualization.py b/python/tests/test_visualization.py
index 064e50635..4a7a5c46b 100644
--- a/python/tests/test_visualization.py
+++ b/python/tests/test_visualization.py
@@ -13,106 +13,168 @@
# Make sure we have matplotlib installed
import matplotlib
-matplotlib.use('agg') # Set backend for consistency and to pull pixels quickly
+
+matplotlib.use("agg") # Set backend for consistency and to pull pixels quickly
from matplotlib import pyplot as plt
import io
+
def hash_figure(fig):
buf = io.BytesIO()
- fig.savefig(buf, format='raw')
+ fig.savefig(buf, format="raw")
buf.seek(0)
data = np.frombuffer(buf.getvalue(), dtype=np.uint8)
return np.sum((data > np.mean(data)) + data)
+
def setup_sim(zDim=0):
- cell = mp.Vector3(16,8,zDim)
+ cell = mp.Vector3(16, 8, zDim)
# A simple waveguide
- geometry = [mp.Block(mp.Vector3(mp.inf,1,1),
- center=mp.Vector3(),
- material=mp.Medium(epsilon=12))]
+ geometry = [
+ mp.Block(
+ mp.Vector3(mp.inf, 1, 1),
+ center=mp.Vector3(),
+ material=mp.Medium(epsilon=12),
+ )
+ ]
# Add point sources
- sources = [mp.Source(mp.ContinuousSource(frequency=0.15),
- component=mp.Ez,
- center=mp.Vector3(-5,0),
- size=mp.Vector3(0,0,2)),
- mp.Source(mp.ContinuousSource(frequency=0.15),
- component=mp.Ez,
- center=mp.Vector3(0,2),
- size=mp.Vector3(0,0,2)),
- mp.Source(mp.ContinuousSource(frequency=0.15),
- component=mp.Ez,
- center=mp.Vector3(-1,1),
- size=mp.Vector3(0,0,2)),
- mp.Source(mp.ContinuousSource(frequency=0.15),
- component=mp.Ez,
- center=mp.Vector3(-2,-2,1),
- size=mp.Vector3(0,0,0)),
- ]
+ sources = [
+ mp.Source(
+ mp.ContinuousSource(frequency=0.15),
+ component=mp.Ez,
+ center=mp.Vector3(-5, 0),
+ size=mp.Vector3(0, 0, 2),
+ ),
+ mp.Source(
+ mp.ContinuousSource(frequency=0.15),
+ component=mp.Ez,
+ center=mp.Vector3(0, 2),
+ size=mp.Vector3(0, 0, 2),
+ ),
+ mp.Source(
+ mp.ContinuousSource(frequency=0.15),
+ component=mp.Ez,
+ center=mp.Vector3(-1, 1),
+ size=mp.Vector3(0, 0, 2),
+ ),
+ mp.Source(
+ mp.ContinuousSource(frequency=0.15),
+ component=mp.Ez,
+ center=mp.Vector3(-2, -2, 1),
+ size=mp.Vector3(0, 0, 0),
+ ),
+ ]
# Add line sources
- sources += [mp.Source(mp.ContinuousSource(frequency=0.15),
- component=mp.Ez,
- size=mp.Vector3(0,2,2),
- center=mp.Vector3(-6,0)),
- mp.Source(mp.ContinuousSource(frequency=0.15),
- component=mp.Ez,
- size=mp.Vector3(0,2,2),
- center=mp.Vector3(0,1))]
+ sources += [
+ mp.Source(
+ mp.ContinuousSource(frequency=0.15),
+ component=mp.Ez,
+ size=mp.Vector3(0, 2, 2),
+ center=mp.Vector3(-6, 0),
+ ),
+ mp.Source(
+ mp.ContinuousSource(frequency=0.15),
+ component=mp.Ez,
+ size=mp.Vector3(0, 2, 2),
+ center=mp.Vector3(0, 1),
+ ),
+ ]
# Add plane sources
- sources += [mp.Source(mp.ContinuousSource(frequency=0.15),
- component=mp.Ez,
- size=mp.Vector3(2,2,2),
- center=mp.Vector3(-3,0)),
- mp.Source(mp.ContinuousSource(frequency=0.15),
- component=mp.Ez,
- size=mp.Vector3(2,2,2),
- center=mp.Vector3(0,-2))]
+ sources += [
+ mp.Source(
+ mp.ContinuousSource(frequency=0.15),
+ component=mp.Ez,
+ size=mp.Vector3(2, 2, 2),
+ center=mp.Vector3(-3, 0),
+ ),
+ mp.Source(
+ mp.ContinuousSource(frequency=0.15),
+ component=mp.Ez,
+ size=mp.Vector3(2, 2, 2),
+ center=mp.Vector3(0, -2),
+ ),
+ ]
# Different pml layers
- pml_layers = [mp.PML(2.0,mp.X),mp.PML(1.0,mp.Y,mp.Low),mp.PML(1.5,mp.Y,mp.High)]
+ pml_layers = [
+ mp.PML(2.0, mp.X),
+ mp.PML(1.0, mp.Y, mp.Low),
+ mp.PML(1.5, mp.Y, mp.High),
+ ]
if zDim > 0:
- pml_layers += [mp.PML(1.5,mp.Z)]
+ pml_layers += [mp.PML(1.5, mp.Z)]
resolution = 10
- sim = mp.Simulation(cell_size=cell,
- boundary_layers=pml_layers,
- geometry=geometry,
- sources=sources,
- resolution=resolution)
+ sim = mp.Simulation(
+ cell_size=cell,
+ boundary_layers=pml_layers,
+ geometry=geometry,
+ sources=sources,
+ resolution=resolution,
+ )
# Line monitor
- sim.add_flux(1,0,1,mp.FluxRegion(center=mp.Vector3(5,0,0),size=mp.Vector3(0,4,4), direction=mp.X))
+ sim.add_flux(
+ 1,
+ 0,
+ 1,
+ mp.FluxRegion(
+ center=mp.Vector3(5, 0, 0), size=mp.Vector3(0, 4, 4), direction=mp.X
+ ),
+ )
# Plane monitor
- sim.add_flux(1,0,1,mp.FluxRegion(center=mp.Vector3(2,0,0),size=mp.Vector3(4,4,4), direction=mp.X))
+ sim.add_flux(
+ 1,
+ 0,
+ 1,
+ mp.FluxRegion(
+ center=mp.Vector3(2, 0, 0), size=mp.Vector3(4, 4, 4), direction=mp.X
+ ),
+ )
return sim
+
def view_sim():
sim = setup_sim(8)
- xy0 = mp.Volume(center=mp.Vector3(0,0,0), size=mp.Vector3(sim.cell_size.x,sim.cell_size.y,0))
- xy1 = mp.Volume(center=mp.Vector3(0,0,1), size=mp.Vector3(sim.cell_size.x,sim.cell_size.y,0))
- yz0 = mp.Volume(center=mp.Vector3(0,0,0), size=mp.Vector3(0,sim.cell_size.y,sim.cell_size.z))
- yz1 = mp.Volume(center=mp.Vector3(1,0,0), size=mp.Vector3(0,sim.cell_size.y,sim.cell_size.z))
- xz0 = mp.Volume(center=mp.Vector3(0,0,0), size=mp.Vector3(sim.cell_size.x,0,sim.cell_size.z))
- xz1 = mp.Volume(center=mp.Vector3(0,1,0), size=mp.Vector3(sim.cell_size.x,0,sim.cell_size.z))
- vols = [xy0,xy1,yz0,yz1,xz0,xz1]
- titles = ['xy0','xy1','yz0','yz1','xz0','xz1']
- xlabel = ['x','x','y','y','x','x']
- ylabel = ['y','y','z','z','z','z']
+ xy0 = mp.Volume(
+ center=mp.Vector3(0, 0, 0), size=mp.Vector3(sim.cell_size.x, sim.cell_size.y, 0)
+ )
+ xy1 = mp.Volume(
+ center=mp.Vector3(0, 0, 1), size=mp.Vector3(sim.cell_size.x, sim.cell_size.y, 0)
+ )
+ yz0 = mp.Volume(
+ center=mp.Vector3(0, 0, 0), size=mp.Vector3(0, sim.cell_size.y, sim.cell_size.z)
+ )
+ yz1 = mp.Volume(
+ center=mp.Vector3(1, 0, 0), size=mp.Vector3(0, sim.cell_size.y, sim.cell_size.z)
+ )
+ xz0 = mp.Volume(
+ center=mp.Vector3(0, 0, 0), size=mp.Vector3(sim.cell_size.x, 0, sim.cell_size.z)
+ )
+ xz1 = mp.Volume(
+ center=mp.Vector3(0, 1, 0), size=mp.Vector3(sim.cell_size.x, 0, sim.cell_size.z)
+ )
+ vols = [xy0, xy1, yz0, yz1, xz0, xz1]
+ titles = ["xy0", "xy1", "yz0", "yz1", "xz0", "xz1"]
+ xlabel = ["x", "x", "y", "y", "x", "x"]
+ ylabel = ["y", "y", "z", "z", "z", "z"]
for k in range(len(vols)):
- ax = plt.subplot(2,3,k+1)
- sim.plot2D(ax=ax,output_plane=vols[k])
+ ax = plt.subplot(2, 3, k + 1)
+ sim.plot2D(ax=ax, output_plane=vols[k])
ax.set_xlabel(xlabel[k])
ax.set_ylabel(ylabel[k])
ax.set_title(titles[k])
plt.tight_layout()
plt.show()
-class TestVisualization(unittest.TestCase):
+
+class TestVisualization(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.temp_dir = mp.make_output_directory()
@@ -129,79 +191,120 @@ def test_plot2D(self):
ax = sim.plot2D(ax=ax)
if mp.am_master():
hash_figure(f)
- #self.assertAlmostEqual(hash_figure(f),10231488)
+ # self.assertAlmostEqual(hash_figure(f),10231488)
# Check plotting of fields after timestepping
f = plt.figure()
ax = f.gca()
sim.run(until=200)
- ax = sim.plot2D(ax=ax,fields=mp.Ez)
+ ax = sim.plot2D(ax=ax, fields=mp.Ez)
if mp.am_master():
hash_figure(f)
- #self.assertAlmostEqual(hash_figure(f),79786722)
+ # self.assertAlmostEqual(hash_figure(f),79786722)
# Check output_plane feature
f = plt.figure()
ax = f.gca()
- vol = mp.Volume(center=mp.Vector3(),size=mp.Vector3(2,2))
- ax = sim.plot2D(ax=ax,fields=mp.Ez,output_plane=vol)
+ vol = mp.Volume(center=mp.Vector3(), size=mp.Vector3(2, 2))
+ ax = sim.plot2D(ax=ax, fields=mp.Ez, output_plane=vol)
if mp.am_master():
hash_figure(f)
- #self.assertAlmostEqual(hash_figure(f),68926258)
+ # self.assertAlmostEqual(hash_figure(f),68926258)
- @unittest.skipIf(call(['which', 'ffmpeg']) != 0, "ffmpeg is not installed")
+ @unittest.skipIf(call(["which", "ffmpeg"]) != 0, "ffmpeg is not installed")
def test_animation_output(self):
# ------------------------- #
# Check over 2D domain
# ------------------------- #
- sim = setup_sim() # generate 2D simulation
+ sim = setup_sim() # generate 2D simulation
- Animate = mp.Animate2D(sim,fields=mp.Ez, realtime=False, normalize=False) # Check without normalization
- Animate_norm = mp.Animate2D(sim, mp.Ez, realtime=False, normalize=True) # Check with normalization
+ Animate = mp.Animate2D(
+ sim, fields=mp.Ez, realtime=False, normalize=False
+ ) # Check without normalization
+ Animate_norm = mp.Animate2D(
+ sim, mp.Ez, realtime=False, normalize=True
+ ) # Check with normalization
# test both animation objects during same run
- sim.run(
- mp.at_every(1,Animate),
- mp.at_every(1,Animate_norm),
- until=5)
+ sim.run(mp.at_every(1, Animate), mp.at_every(1, Animate_norm), until=5)
# Test outputs
- Animate.to_mp4(5,os.path.join(self.temp_dir, 'test_2D.mp4')) # Check mp4 output
- Animate.to_gif(150,os.path.join(self.temp_dir, 'test_2D.gif')) # Check gif output
- Animate.to_jshtml(10) # Check jshtml output
- Animate_norm.to_mp4(5,os.path.join(self.temp_dir, 'test_2D_norm.mp4')) # Check mp4 output
- Animate_norm.to_gif(150,os.path.join(self.temp_dir, 'test_2D_norm.gif')) # Check gif output
- Animate_norm.to_jshtml(10) # Check jshtml output
+ Animate.to_mp4(
+ 5, os.path.join(self.temp_dir, "test_2D.mp4")
+ ) # Check mp4 output
+ Animate.to_gif(
+ 150, os.path.join(self.temp_dir, "test_2D.gif")
+ ) # Check gif output
+ Animate.to_jshtml(10) # Check jshtml output
+ Animate_norm.to_mp4(
+ 5, os.path.join(self.temp_dir, "test_2D_norm.mp4")
+ ) # Check mp4 output
+ Animate_norm.to_gif(
+ 150, os.path.join(self.temp_dir, "test_2D_norm.gif")
+ ) # Check gif output
+ Animate_norm.to_jshtml(10) # Check jshtml output
# ------------------------- #
# Check over 3D domain
# ------------------------- #
- sim = setup_sim(5) # generate 2D simulation
+ sim = setup_sim(5) # generate 2D simulation
- Animate_xy = mp.Animate2D(sim,fields=mp.Ey, realtime=False, normalize=True) # Check without normalization
- Animate_xz = mp.Animate2D(sim,mp.Ey,realtime=False,normalize=True) # Check with normalization
+ Animate_xy = mp.Animate2D(
+ sim, fields=mp.Ey, realtime=False, normalize=True
+ ) # Check without normalization
+ Animate_xz = mp.Animate2D(
+ sim, mp.Ey, realtime=False, normalize=True
+ ) # Check with normalization
# test both animation objects during same run
sim.run(
- mp.at_every(1,mp.in_volume(mp.Volume(center=mp.Vector3(),size=mp.Vector3(sim.cell_size.x,sim.cell_size.y)),Animate_xy)),
- mp.at_every(1,mp.in_volume(mp.Volume(center=mp.Vector3(),size=mp.Vector3(sim.cell_size.x,0,sim.cell_size.z)),Animate_xz)),
- until=5)
+ mp.at_every(
+ 1,
+ mp.in_volume(
+ mp.Volume(
+ center=mp.Vector3(),
+ size=mp.Vector3(sim.cell_size.x, sim.cell_size.y),
+ ),
+ Animate_xy,
+ ),
+ ),
+ mp.at_every(
+ 1,
+ mp.in_volume(
+ mp.Volume(
+ center=mp.Vector3(),
+ size=mp.Vector3(sim.cell_size.x, 0, sim.cell_size.z),
+ ),
+ Animate_xz,
+ ),
+ ),
+ until=5,
+ )
# Test outputs
- Animate_xy.to_mp4(5,os.path.join(self.temp_dir, 'test_3D_xy.mp4')) # Check mp4 output
- Animate_xy.to_gif(150,os.path.join(self.temp_dir, 'test_3D_xy.gif')) # Check gif output
- Animate_xy.to_jshtml(10) # Check jshtml output
- Animate_xz.to_mp4(5,os.path.join(self.temp_dir, 'test_3D_xz.mp4')) # Check mp4 output
- Animate_xz.to_gif(150,os.path.join(self.temp_dir, 'test_3D_xz.gif')) # Check gif output
- Animate_xz.to_jshtml(10) # Check jshtml output
- '''
+ Animate_xy.to_mp4(
+ 5, os.path.join(self.temp_dir, "test_3D_xy.mp4")
+ ) # Check mp4 output
+ Animate_xy.to_gif(
+ 150, os.path.join(self.temp_dir, "test_3D_xy.gif")
+ ) # Check gif output
+ Animate_xy.to_jshtml(10) # Check jshtml output
+ Animate_xz.to_mp4(
+ 5, os.path.join(self.temp_dir, "test_3D_xz.mp4")
+ ) # Check mp4 output
+ Animate_xz.to_gif(
+ 150, os.path.join(self.temp_dir, "test_3D_xz.gif")
+ ) # Check gif output
+ Animate_xz.to_jshtml(10) # Check jshtml output
+
+ """
Travis does not play well with Mayavi
def test_3D_mayavi(self):
sim = setup_sim(4)
sim.plot3D()
- '''
+ """
+
-if __name__ == '__main__':
+if __name__ == "__main__":
unittest.main()
-
diff --git a/python/tests/test_wvg_src.py b/python/tests/test_wvg_src.py
index e4b636398..608ae2515 100644
--- a/python/tests/test_wvg_src.py
+++ b/python/tests/test_wvg_src.py
@@ -5,22 +5,31 @@
class TestWvgSrc(unittest.TestCase):
-
def setUp(self):
cell = mp.Vector3(16, 8)
geometry = [
- mp.Block(center=mp.Vector3(), size=mp.Vector3(mp.inf, 1, mp.inf),
- material=mp.Medium(epsilon=12)),
- mp.Block(center=mp.Vector3(y=0.3), size=mp.Vector3(mp.inf, 0.1, mp.inf),
- material=mp.Medium())
+ mp.Block(
+ center=mp.Vector3(),
+ size=mp.Vector3(mp.inf, 1, mp.inf),
+ material=mp.Medium(epsilon=12),
+ ),
+ mp.Block(
+ center=mp.Vector3(y=0.3),
+ size=mp.Vector3(mp.inf, 0.1, mp.inf),
+ material=mp.Medium(),
+ ),
]
sources = [
- mp.EigenModeSource(src=mp.ContinuousSource(0.15), size=mp.Vector3(y=6),
- center=mp.Vector3(x=-5), component=mp.Dielectric,
- eig_parity=mp.ODD_Z)
+ mp.EigenModeSource(
+ src=mp.ContinuousSource(0.15),
+ size=mp.Vector3(y=6),
+ center=mp.Vector3(x=-5),
+ component=mp.Dielectric,
+ eig_parity=mp.ODD_Z,
+ )
]
pml_layers = [mp.PML(1.0)]
@@ -31,18 +40,23 @@ def setUp(self):
sources=sources,
boundary_layers=pml_layers,
force_complex_fields=True,
- resolution=10
+ resolution=10,
)
def test_wvg_src(self):
self.sim.run(until=200)
- flux1 = self.sim.flux_in_box(mp.X, mp.Volume(center=mp.Vector3(-6.0), size=mp.Vector3(1.8, 6)))
- flux2 = self.sim.flux_in_box(mp.X, mp.Volume(center=mp.Vector3(6.0), size=mp.Vector3(1.8, 6)))
+ flux1 = self.sim.flux_in_box(
+ mp.X, mp.Volume(center=mp.Vector3(-6.0), size=mp.Vector3(1.8, 6))
+ )
+ flux2 = self.sim.flux_in_box(
+ mp.X, mp.Volume(center=mp.Vector3(6.0), size=mp.Vector3(1.8, 6))
+ )
self.assertAlmostEqual(flux1, -1.775216564842667e-03)
places = 5 if mp.is_single_precision() else 7
self.assertAlmostEqual(flux2, 7.215785537102116, places=places)
-if __name__ == '__main__':
+
+if __name__ == "__main__":
unittest.main()
diff --git a/python/tests/utils.py b/python/tests/utils.py
index a249e8e26..771aff7b0 100644
--- a/python/tests/utils.py
+++ b/python/tests/utils.py
@@ -1,6 +1,7 @@
import unittest
import numpy as np
+
def compare_arrays(test_instance, exp, res, tol=1e-3):
exp_1d = exp.ravel()
res_1d = res.ravel()
@@ -18,11 +19,11 @@ def compare_arrays(test_instance, exp, res, tol=1e-3):
class ApproxComparisonTestCase(unittest.TestCase):
"""A mixin for adding proper floating point value and vector comparison."""
- def assertClose(self, x, y, epsilon = 1e-2, msg = ''):
+ def assertClose(self, x, y, epsilon=1e-2, msg=""):
"""Asserts that two values or vectors satisfy ‖x-y‖ ≤ ε * max(‖x‖, ‖y‖)."""
x = np.atleast_1d(x).ravel()
y = np.atleast_1d(y).ravel()
x_norm = np.linalg.norm(x, ord=np.inf)
y_norm = np.linalg.norm(y, ord=np.inf)
diff_norm = np.linalg.norm(x - y, ord=np.inf)
- self.assertLessEqual(diff_norm, epsilon * np.maximum(x_norm, y_norm), msg)
\ No newline at end of file
+ self.assertLessEqual(diff_norm, epsilon * np.maximum(x_norm, y_norm), msg)
diff --git a/python/timing_measurements.py b/python/timing_measurements.py
index dd61e61e4..de19a2e67 100644
--- a/python/timing_measurements.py
+++ b/python/timing_measurements.py
@@ -7,28 +7,28 @@
# https://meep.readthedocs.io/en/latest/Python_User_Interface/#simulation-time
# for more information.
TIMING_MEASUREMENT_IDS = {
- 'connecting_chunks': mp.Connecting,
- 'time_stepping': mp.Stepping,
- 'boundaries_copying': mp.Boundaries,
- 'mpi_all_to_all': mp.MpiAllTime,
- 'mpi_one_to_one': mp.MpiOneTime,
- 'field_output': mp.FieldOutput,
- 'fourier_transform': mp.FourierTransforming,
- 'mpb': mp.MPBTime,
- 'near_to_farfield_transform': mp.GetFarfieldsTime,
- 'other': mp.Other,
- 'field_update_b': mp.FieldUpdateB,
- 'field_update_h': mp.FieldUpdateH,
- 'field_update_d': mp.FieldUpdateD,
- 'field_update_e': mp.FieldUpdateE,
- 'boundary_stepping_b': mp.BoundarySteppingB,
- 'boundary_stepping_wh': mp.BoundarySteppingWH,
- 'boundary_stepping_ph': mp.BoundarySteppingPH,
- 'boundary_stepping_h': mp.BoundarySteppingH,
- 'boundary_stepping_d': mp.BoundarySteppingD,
- 'boundary_stepping_we': mp.BoundarySteppingWE,
- 'boundary_stepping_pe': mp.BoundarySteppingPE,
- 'boundary_stepping_e': mp.BoundarySteppingE,
+ "connecting_chunks": mp.Connecting,
+ "time_stepping": mp.Stepping,
+ "boundaries_copying": mp.Boundaries,
+ "mpi_all_to_all": mp.MpiAllTime,
+ "mpi_one_to_one": mp.MpiOneTime,
+ "field_output": mp.FieldOutput,
+ "fourier_transform": mp.FourierTransforming,
+ "mpb": mp.MPBTime,
+ "near_to_farfield_transform": mp.GetFarfieldsTime,
+ "other": mp.Other,
+ "field_update_b": mp.FieldUpdateB,
+ "field_update_h": mp.FieldUpdateH,
+ "field_update_d": mp.FieldUpdateD,
+ "field_update_e": mp.FieldUpdateE,
+ "boundary_stepping_b": mp.BoundarySteppingB,
+ "boundary_stepping_wh": mp.BoundarySteppingWH,
+ "boundary_stepping_ph": mp.BoundarySteppingPH,
+ "boundary_stepping_h": mp.BoundarySteppingH,
+ "boundary_stepping_d": mp.BoundarySteppingD,
+ "boundary_stepping_we": mp.BoundarySteppingWE,
+ "boundary_stepping_pe": mp.BoundarySteppingPE,
+ "boundary_stepping_e": mp.BoundarySteppingE,
}
@@ -73,14 +73,16 @@ class MeepTimingMeasurements:
transforming. This is zero if no simulation work has been performed.
"""
- def __init__(self,
- measurements: Dict[str, List[float]],
- elapsed_time: float,
- num_time_steps: int,
- time_per_step: List[float],
- dft_relative_change: List[float],
- overlap_relative_change: List[float],
- relative_energy: List[float]):
+ def __init__(
+ self,
+ measurements: Dict[str, List[float]],
+ elapsed_time: float,
+ num_time_steps: int,
+ time_per_step: List[float],
+ dft_relative_change: List[float],
+ overlap_relative_change: List[float],
+ relative_energy: List[float],
+ ):
self.measurements = measurements
self.elapsed_time = elapsed_time
self.num_time_steps = num_time_steps
@@ -91,14 +93,14 @@ def __init__(self,
@classmethod
def new_from_simulation(
- cls,
- sim: mp.Simulation,
- elapsed_time: Optional[float] = -1,
- time_per_step: Optional[List[float]] = None,
- dft_relative_change: Optional[List[float]] = None,
- overlap_relative_change: Optional[List[float]] = None,
- relative_energy: Optional[List[float]] = None,
- ) -> 'MeepTimingMeasurements':
+ cls,
+ sim: mp.Simulation,
+ elapsed_time: Optional[float] = -1,
+ time_per_step: Optional[List[float]] = None,
+ dft_relative_change: Optional[List[float]] = None,
+ overlap_relative_change: Optional[List[float]] = None,
+ relative_energy: Optional[List[float]] = None,
+ ) -> "MeepTimingMeasurements":
"""Creates a new `MeepTimingMeasurements` from a Meep simulation object.
Usage example:
@@ -129,15 +131,22 @@ def new_from_simulation(
Returns:
the resulting `MeepTimingMeasurements`
"""
- measurements = {name: sim.time_spent_on(timing_id).tolist() for name, timing_id in TIMING_MEASUREMENT_IDS.items()}
+ measurements = {
+ name: sim.time_spent_on(timing_id).tolist()
+ for name, timing_id in TIMING_MEASUREMENT_IDS.items()
+ }
return cls(
measurements=measurements,
elapsed_time=elapsed_time,
num_time_steps=get_current_time_step(sim),
time_per_step=time_per_step if time_per_step is not None else [],
- dft_relative_change=dft_relative_change if dft_relative_change is not None else [],
- overlap_relative_change=overlap_relative_change if overlap_relative_change is not None else [],
+ dft_relative_change=dft_relative_change
+ if dft_relative_change is not None
+ else [],
+ overlap_relative_change=overlap_relative_change
+ if overlap_relative_change is not None
+ else [],
relative_energy=relative_energy if relative_energy is not None else [],
)
@@ -147,28 +156,36 @@ def measurement_names(self) -> List[str]:
@property
def comm_efficiency(self) -> float:
- computation_time = np.mean(self.measurements['time_stepping']) + np.mean(
- self.measurements['fourier_transform'])
+ computation_time = np.mean(self.measurements["time_stepping"]) + np.mean(
+ self.measurements["fourier_transform"]
+ )
if computation_time == 0:
return 0
else:
- return np.mean(self.measurements['mpi_all_to_all'] +
- self.measurements['mpi_one_to_one']) / computation_time
+ return (
+ np.mean(
+ self.measurements["mpi_all_to_all"]
+ + self.measurements["mpi_one_to_one"]
+ )
+ / computation_time
+ )
@property
def comm_efficiency_one_to_one(self) -> float:
- computation_time = np.mean(self.measurements['time_stepping']) + np.mean(
- self.measurements['fourier_transform'])
+ computation_time = np.mean(self.measurements["time_stepping"]) + np.mean(
+ self.measurements["fourier_transform"]
+ )
if computation_time == 0:
return 0
else:
- return np.mean(self.measurements['mpi_one_to_one']) / computation_time
+ return np.mean(self.measurements["mpi_one_to_one"]) / computation_time
@property
def comm_efficiency_all_to_all(self) -> float:
- computation_time = np.mean(self.measurements['time_stepping']) + np.mean(
- self.measurements['fourier_transform'])
+ computation_time = np.mean(self.measurements["time_stepping"]) + np.mean(
+ self.measurements["fourier_transform"]
+ )
if computation_time == 0:
return 0
else:
- return np.mean(self.measurements['mpi_all_to_all']) / computation_time
+ return np.mean(self.measurements["mpi_all_to_all"]) / computation_time
diff --git a/python/verbosity_mgr.py b/python/verbosity_mgr.py
index 86832498f..e7bb3e57e 100644
--- a/python/verbosity_mgr.py
+++ b/python/verbosity_mgr.py
@@ -83,18 +83,20 @@ def add_verbosity_var(self, cvar=None, name=None, initial_level=1):
Add a new verbosity flag to be managed. `cvar` should be some object
that has a `verbosity` attribute, such as `meep.cvar` or `mpb.cvar`.
"""
- if cvar is None or not hasattr(cvar, 'verbosity'):
+ if cvar is None or not hasattr(cvar, "verbosity"):
# If we're not given a module.cvar (e.g., while testing) or if the
# cvar does not have a verbosity member (e.g. the lib hasn't been
# updated to have a verbosity flag yet) then use a dummy object so
# things can still run without it.
- class _dummy():
- def __init__(self): self.verbosity = 1
+ class _dummy:
+ def __init__(self):
+ self.verbosity = 1
+
cvar = _dummy()
# If a name is not given then manufacture one
if name is None:
- name = 'cvar_{}'.format(len(self._cvars))
+ name = "cvar_{}".format(len(self._cvars))
self._cvars[name] = cvar
# And create a property for so it can be accessed like `verbosity.mpb`
@@ -116,7 +118,7 @@ def get_all(self):
is mostly intended for debugging this class and won't likely be useful
otherwise.
"""
- return [value.verbosity for value in self._cvars.values() ]
+ return [value.verbosity for value in self._cvars.values()]
def set(self, level):
"""
@@ -124,7 +126,7 @@ def set(self, level):
former value.
"""
if level < 0 or level > 3:
- raise ValueError('Only verbosity levels 0-3 are supported')
+ raise ValueError("Only verbosity levels 0-3 are supported")
old = self._master_verbosity
for cvar in self._cvars.values():
cvar.verbosity = level
@@ -155,23 +157,36 @@ def __repr__(self):
return f"Verbosity: level={self.get()}"
# Some comparison operators
- def __gt__(self, o): return self.get() > o
- def __lt__(self, o): return self.get() < o
- def __eq__(self, o): return self.get() == o
- def __ne__(self, o): return self.get() != o
- def __le__(self, o): return self.get() <= o
- def __ge__(self, o): return self.get() >= o
+ def __gt__(self, o):
+ return self.get() > o
+
+ def __lt__(self, o):
+ return self.get() < o
+
+ def __eq__(self, o):
+ return self.get() == o
+
+ def __ne__(self, o):
+ return self.get() != o
+
+ def __le__(self, o):
+ return self.get() <= o
+
+ def __ge__(self, o):
+ return self.get() >= o
def make_property(self, name):
"""
Add a property to the class with the given name that gets or sets the
verbosity in the cvar with that name in self._cvars.
"""
+
def _getter(self, name=name):
return self._cvars[name].verbosity
+
def _setter(self, level, name=name):
if level < 0 or level > 3:
- raise ValueError('Only verbosity levels 0-3 are supported')
+ raise ValueError("Only verbosity levels 0-3 are supported")
self._cvars[name].verbosity = level
setattr(Verbosity, name, property(_getter, _setter))
diff --git a/python/visualization.py b/python/visualization.py
index b1c7e6f64..b7f7620de 100644
--- a/python/visualization.py
+++ b/python/visualization.py
@@ -20,68 +20,65 @@
# for the different plotting routines.
default_source_parameters = {
- 'color':'r',
- 'edgecolor':'r',
- 'facecolor':'none',
- 'hatch':'/',
- 'linewidth':2
- }
+ "color": "r",
+ "edgecolor": "r",
+ "facecolor": "none",
+ "hatch": "/",
+ "linewidth": 2,
+}
default_monitor_parameters = {
- 'color':'b',
- 'edgecolor':'b',
- 'facecolor':'none',
- 'hatch':'/',
- 'linewidth':2
- }
+ "color": "b",
+ "edgecolor": "b",
+ "facecolor": "none",
+ "hatch": "/",
+ "linewidth": 2,
+}
default_field_parameters = {
- 'interpolation':'spline36',
- 'cmap':'RdBu',
- 'alpha':0.8,
- 'post_process':np.real
- }
+ "interpolation": "spline36",
+ "cmap": "RdBu",
+ "alpha": 0.8,
+ "post_process": np.real,
+}
default_eps_parameters = {
- 'interpolation':'spline36',
- 'cmap':'binary',
- 'alpha':1.0,
- 'contour':False,
- 'contour_linewidth':1,
- 'frequency':None,
- 'resolution':None
- }
+ "interpolation": "spline36",
+ "cmap": "binary",
+ "alpha": 1.0,
+ "contour": False,
+ "contour_linewidth": 1,
+ "frequency": None,
+ "resolution": None,
+}
default_boundary_parameters = {
- 'color':'g',
- 'edgecolor':'g',
- 'facecolor':'none',
- 'hatch':'/'
- }
+ "color": "g",
+ "edgecolor": "g",
+ "facecolor": "none",
+ "hatch": "/",
+}
default_volume_parameters = {
- 'alpha':1.0,
- 'color':'k',
- 'linestyle':'-',
- 'linewidth':1,
- 'marker':'.',
- 'edgecolor':'k',
- 'facecolor':'none',
- 'hatch':'/'
- }
-
-default_label_parameters = {
- 'label_color':'r',
- 'offset':20,
- 'label_alpha':0.3
+ "alpha": 1.0,
+ "color": "k",
+ "linestyle": "-",
+ "linewidth": 1,
+ "marker": ".",
+ "edgecolor": "k",
+ "facecolor": "none",
+ "hatch": "/",
}
+default_label_parameters = {"label_color": "r", "offset": 20, "label_alpha": 0.3}
+
# Used to remove the elements of a dictionary (dict_to_filter) that
# don't correspond to the keyword arguments of a particular
# function (func_with_kwargs.)
# Adapted from https://stackoverflow.com/questions/26515595/how-does-one-ignore-unexpected-keyword-arguments-passed-to-a-function/44052550
def filter_dict(dict_to_filter, func_with_kwargs):
import inspect
+
filter_keys = []
try:
# Python3 ...
@@ -91,11 +88,17 @@ def filter_dict(dict_to_filter, func_with_kwargs):
# Python2 ...
filter_keys = inspect.getargspec(func_with_kwargs)[0]
- return {filter_key: dict_to_filter[filter_key] for filter_key in filter_keys if filter_key in dict_to_filter}
+ return {
+ filter_key: dict_to_filter[filter_key]
+ for filter_key in filter_keys
+ if filter_key in dict_to_filter
+ }
+
# ------------------------------------------------------- #
# Routines to add legends to plot
+
def place_label(ax, label_text, x, y, centerx, centery, label_parameters=None):
if label_parameters is None:
@@ -103,19 +106,25 @@ def place_label(ax, label_text, x, y, centerx, centery, label_parameters=None):
else:
label_parameters = dict(default_label_parameters, **label_parameters)
- offset = label_parameters['offset']
- alpha = label_parameters['label_alpha']
- color = label_parameters['label_color']
+ offset = label_parameters["offset"]
+ alpha = label_parameters["label_alpha"]
+ color = label_parameters["label_color"]
xtext = -offset if x > centerx else offset
ytext = -offset if y > centery else offset
- ax.annotate(label_text, xy=(x, y), xytext=(xtext, ytext),
- textcoords='offset points', ha='center', va='bottom',
- bbox=dict(boxstyle='round,pad=0.2', fc=color, alpha=alpha),
- arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0.5',
- color=color))
+ ax.annotate(
+ label_text,
+ xy=(x, y),
+ xytext=(xtext, ytext),
+ textcoords="offset points",
+ ha="center",
+ va="bottom",
+ bbox=dict(boxstyle="round,pad=0.2", fc=color, alpha=alpha),
+ arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=0.5", color=color),
+ )
return ax
+
# ------------------------------------------------------- #
# Helper functions used to plot volumes on a 2D plane
@@ -127,42 +136,56 @@ def intersect_volume_volume(volume1, volume2):
# volume2 ............... [volume]
# Represent the volumes by an "upper" and "lower" coordinate
- U1 = [volume1.center.x+volume1.size.x/2,
- volume1.center.y+volume1.size.y/2,
- volume1.center.z+volume1.size.z/2]
- L1 = [volume1.center.x-volume1.size.x/2,
- volume1.center.y-volume1.size.y/2,
- volume1.center.z-volume1.size.z/2]
-
- U2 = [volume2.center.x+volume2.size.x/2,
- volume2.center.y+volume2.size.y/2,
- volume2.center.z+volume2.size.z/2]
- L2 = [volume2.center.x-volume2.size.x/2,
- volume2.center.y-volume2.size.y/2,
- volume2.center.z-volume2.size.z/2]
+ U1 = [
+ volume1.center.x + volume1.size.x / 2,
+ volume1.center.y + volume1.size.y / 2,
+ volume1.center.z + volume1.size.z / 2,
+ ]
+ L1 = [
+ volume1.center.x - volume1.size.x / 2,
+ volume1.center.y - volume1.size.y / 2,
+ volume1.center.z - volume1.size.z / 2,
+ ]
+
+ U2 = [
+ volume2.center.x + volume2.size.x / 2,
+ volume2.center.y + volume2.size.y / 2,
+ volume2.center.z + volume2.size.z / 2,
+ ]
+ L2 = [
+ volume2.center.x - volume2.size.x / 2,
+ volume2.center.y - volume2.size.y / 2,
+ volume2.center.z - volume2.size.z / 2,
+ ]
# Evaluate intersection
- U = np.min([U1,U2],axis=0)
- L = np.max([L1,L2],axis=0)
+ U = np.min([U1, U2], axis=0)
+ L = np.max([L1, L2], axis=0)
# For single points we have to check manually
- if np.all(U - L == 0) and ((not volume1.pt_in_volume(Vector3(*U))) or (not volume2.pt_in_volume(Vector3(*U)))):
+ if np.all(U - L == 0) and (
+ (not volume1.pt_in_volume(Vector3(*U)))
+ or (not volume2.pt_in_volume(Vector3(*U)))
+ ):
return []
# Check for two volumes that don't intersect
- if np.any(U-L < 0):
+ if np.any(U - L < 0):
return []
# Pull all possible vertices
vertices = []
- for x_vals in [L[0],U[0]]:
- for y_vals in [L[1],U[1]]:
- vertices.extend(Vector3(x_vals,y_vals,z_vals) for z_vals in [L[2],U[2]])
+ for x_vals in [L[0], U[0]]:
+ for y_vals in [L[1], U[1]]:
+ vertices.extend(Vector3(x_vals, y_vals, z_vals) for z_vals in [L[2], U[2]])
# Remove any duplicate points caused by coplanar lines
- vertices = [vertices[i] for i, x in enumerate(vertices) if x not in vertices[i+1:]]
+ vertices = [
+ vertices[i] for i, x in enumerate(vertices) if x not in vertices[i + 1 :]
+ ]
return vertices
+
# All of the 2D plotting routines need an output plane over which to plot.
# The user has many options to specify this output plane. They can pass
# the output_plane parameter, which is a 2D volume object. They can specify
@@ -181,27 +204,36 @@ def get_2D_dimensions(sim, output_plane):
elif sim.output_volume:
plane_center, plane_size = mp.get_center_and_size(sim.output_volume)
elif (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical:
- plane_center, plane_size = (sim.geometry_center+mp.Vector3(sim.cell_size.x/2), sim.cell_size)
+ plane_center, plane_size = (
+ sim.geometry_center + mp.Vector3(sim.cell_size.x / 2),
+ sim.cell_size,
+ )
else:
plane_center, plane_size = (sim.geometry_center, sim.cell_size)
- plane_volume = Volume(center=plane_center,size=plane_size)
+ plane_volume = Volume(center=plane_center, size=plane_size)
if plane_size.x != 0 and plane_size.y != 0 and plane_size.z != 0:
raise ValueError("Plane volume must be 2D (a plane).")
if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical:
- center = sim.geometry_center+mp.Vector3(sim.cell_size.x/2)
- check_volume = mp.Volume(center=center, size = sim.cell_size)
+ center = sim.geometry_center + mp.Vector3(sim.cell_size.x / 2)
+ check_volume = mp.Volume(center=center, size=sim.cell_size)
else:
check_volume = Volume(center=sim.geometry_center, size=sim.cell_size)
vertices = intersect_volume_volume(check_volume, plane_volume)
if len(vertices) == 0:
- raise ValueError("The specified user volume is completely outside of the simulation domain.")
+ raise ValueError(
+ "The specified user volume is completely outside of the simulation domain."
+ )
intersection_vol = Volume(vertices=vertices)
- if (intersection_vol.size != plane_volume.size) or (intersection_vol.center != plane_volume.center):
- warnings.warn('The specified user volume is larger than the simulation domain and has been truncated.')
+ if (intersection_vol.size != plane_volume.size) or (
+ intersection_vol.center != plane_volume.center
+ ):
+ warnings.warn(
+ "The specified user volume is larger than the simulation domain and has been truncated."
+ )
sim_center, sim_size = (intersection_vol.center, intersection_vol.size)
return sim_center, sim_size
@@ -215,19 +247,23 @@ def box_vertices(box_center, box_size, is_cylindrical=False):
xmin = 0
xmax = box_size.x
else:
- xmin = box_center.x - 0.5*box_size.x
- xmax = box_center.x + 0.5*box_size.x
- ymin = box_center.y - 0.5*box_size.y
- ymax = box_center.y + 0.5*box_size.y
- zmin = box_center.z - 0.5*box_size.z
- zmax = box_center.z + 0.5*box_size.z
+ xmin = box_center.x - 0.5 * box_size.x
+ xmax = box_center.x + 0.5 * box_size.x
+ ymin = box_center.y - 0.5 * box_size.y
+ ymax = box_center.y + 0.5 * box_size.y
+ zmin = box_center.z - 0.5 * box_size.z
+ zmax = box_center.z + 0.5 * box_size.z
return xmin, xmax, ymin, ymax, zmin, zmax
+
# ------------------------------------------------------- #
# actual plotting routines
-def plot_volume(sim, ax, volume, output_plane=None, plotting_parameters=None, label=None):
+
+def plot_volume(
+ sim, ax, volume, output_plane=None, plotting_parameters=None, label=None
+):
import matplotlib.patches as patches
from matplotlib import pyplot as plt
from meep.simulation import Volume
@@ -246,36 +282,40 @@ def plot_volume(sim, ax, volume, output_plane=None, plotting_parameters=None, la
size = volume.size
center = volume.center
- xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(center,
- size,
- sim.is_cylindrical)
+ xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(center, size, sim.is_cylindrical)
# Add labels if requested
if label is not None and mp.am_master():
if sim_size.x == 0:
- ax = place_label(ax,
- label,
- center.y,
- center.z,
- sim_center.y,
- sim_center.z,
- label_parameters=plotting_parameters)
+ ax = place_label(
+ ax,
+ label,
+ center.y,
+ center.z,
+ sim_center.y,
+ sim_center.z,
+ label_parameters=plotting_parameters,
+ )
elif sim_size.y == 0:
- ax = place_label(ax,
- label,
- center.x,
- center.z,
- sim_center.x,
- sim_center.z,
- label_parameters=plotting_parameters)
+ ax = place_label(
+ ax,
+ label,
+ center.x,
+ center.z,
+ sim_center.x,
+ sim_center.z,
+ label_parameters=plotting_parameters,
+ )
elif sim_size.z == 0:
- ax = place_label(ax,
- label,
- center.x,
- center.y,
- sim_center.x,
- sim_center.y,
- label_parameters=plotting_parameters)
+ ax = place_label(
+ ax,
+ label,
+ center.x,
+ center.y,
+ sim_center.x,
+ sim_center.y,
+ label_parameters=plotting_parameters,
+ )
# Intersect plane with volume
intersection = intersect_volume_volume(volume, plane)
@@ -284,57 +324,93 @@ def plot_volume(sim, ax, volume, output_plane=None, plotting_parameters=None, la
def sort_points(xy):
xy = np.squeeze(xy)
xy_mean = np.mean(xy, axis=0)
- theta = np.arctan2(xy[:,1] - xy_mean[1], xy[:,0] - xy_mean[0])
+ theta = np.arctan2(xy[:, 1] - xy_mean[1], xy[:, 0] - xy_mean[0])
return xy[np.argsort(theta, axis=0), :]
if mp.am_master():
# Point volume
if len(intersection) == 1:
- point_args = {key:value for key, value in plotting_parameters.items() if key in ['color','marker','alpha','linewidth']}
- if sim_size.y==0:
- ax.scatter(center.x,center.z, **point_args)
+ point_args = {
+ key: value
+ for key, value in plotting_parameters.items()
+ if key in ["color", "marker", "alpha", "linewidth"]
+ }
+ if sim_size.y == 0:
+ ax.scatter(center.x, center.z, **point_args)
return ax
- elif sim_size.x==0:
- ax.scatter(center.y,center.z, **point_args)
+ elif sim_size.x == 0:
+ ax.scatter(center.y, center.z, **point_args)
return ax
- elif sim_size.z==0:
- ax.scatter(center.x,center.y, **point_args)
+ elif sim_size.z == 0:
+ ax.scatter(center.x, center.y, **point_args)
return ax
else:
return ax
# Line volume
elif len(intersection) == 2:
- line_args = {key:value for key, value in plotting_parameters.items() if key in ['color','linestyle','linewidth','alpha']}
+ line_args = {
+ key: value
+ for key, value in plotting_parameters.items()
+ if key in ["color", "linestyle", "linewidth", "alpha"]
+ }
# Plot YZ
if sim_size.x == 0:
- ax.plot([a.y for a in intersection], [a.z for a in intersection], **line_args)
+ ax.plot(
+ [a.y for a in intersection],
+ [a.z for a in intersection],
+ **line_args,
+ )
return ax
# Plot XZ
elif sim_size.y == 0:
- ax.plot([a.x for a in intersection], [a.z for a in intersection], **line_args)
+ ax.plot(
+ [a.x for a in intersection],
+ [a.z for a in intersection],
+ **line_args,
+ )
return ax
# Plot XY
elif sim_size.z == 0:
- ax.plot([a.x for a in intersection], [a.y for a in intersection], **line_args)
+ ax.plot(
+ [a.x for a in intersection],
+ [a.y for a in intersection],
+ **line_args,
+ )
return ax
else:
return ax
# Planar volume
elif len(intersection) > 2:
- planar_args = {key:value for key, value in plotting_parameters.items() if key in ['edgecolor','linewidth','facecolor','hatch','alpha']}
+ planar_args = {
+ key: value
+ for key, value in plotting_parameters.items()
+ if key in ["edgecolor", "linewidth", "facecolor", "hatch", "alpha"]
+ }
# Plot YZ
if sim_size.x == 0:
- ax.add_patch(patches.Polygon(sort_points([[a.y,a.z] for a in intersection]), **planar_args))
+ ax.add_patch(
+ patches.Polygon(
+ sort_points([[a.y, a.z] for a in intersection]), **planar_args
+ )
+ )
return ax
# Plot XZ
- elif sim_size.y==0:
- ax.add_patch(patches.Polygon(sort_points([[a.x,a.z] for a in intersection]), **planar_args))
+ elif sim_size.y == 0:
+ ax.add_patch(
+ patches.Polygon(
+ sort_points([[a.x, a.z] for a in intersection]), **planar_args
+ )
+ )
return ax
# Plot XY
elif sim_size.z == 0:
- ax.add_patch(patches.Polygon(sort_points([[a.x,a.y] for a in intersection]), **planar_args))
+ ax.add_patch(
+ patches.Polygon(
+ sort_points([[a.x, a.y] for a in intersection]), **planar_args
+ )
+ )
return ax
else:
return ax
@@ -342,6 +418,7 @@ def sort_points(xy):
return ax
return ax
+
def plot_eps(sim, ax, output_plane=None, eps_parameters=None, frequency=None):
# consolidate plotting parameters
if eps_parameters is None:
@@ -351,33 +428,35 @@ def plot_eps(sim, ax, output_plane=None, eps_parameters=None, frequency=None):
# Determine a frequency to plot all epsilon
if frequency is not None:
- warnings.warn("The frequency parameter of plot2D has been deprecated. "
- "Use the frequency key of the eps_parameters dictionary instead.")
- eps_parameters['frequency'] = frequency
- if eps_parameters['frequency'] is None:
+ warnings.warn(
+ "The frequency parameter of plot2D has been deprecated. "
+ "Use the frequency key of the eps_parameters dictionary instead."
+ )
+ eps_parameters["frequency"] = frequency
+ if eps_parameters["frequency"] is None:
try:
# Continuous sources
- eps_parameters['frequency'] = sim.sources[0].frequency
+ eps_parameters["frequency"] = sim.sources[0].frequency
except:
try:
# Gaussian sources
- eps_parameters['frequency'] = sim.sources[0].src.frequency
+ eps_parameters["frequency"] = sim.sources[0].src.frequency
except:
try:
# Custom sources
- eps_parameters['frequency'] = sim.sources[0].src.center_frequency
+ eps_parameters["frequency"] = sim.sources[0].src.center_frequency
except:
# No sources
- eps_parameters['frequency'] = 0
+ eps_parameters["frequency"] = 0
# Get domain measurements
sim_center, sim_size = get_2D_dimensions(sim, output_plane)
- xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(sim_center,
- sim_size,
- sim.is_cylindrical)
+ xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(
+ sim_center, sim_size, sim.is_cylindrical
+ )
- grid_resolution = eps_parameters['resolution'] or sim.resolution
+ grid_resolution = eps_parameters["resolution"] or sim.resolution
Nx = int((xmax - xmin) * grid_resolution + 1)
Ny = int((ymax - ymin) * grid_resolution + 1)
Nz = int((zmax - zmin) * grid_resolution + 1)
@@ -385,36 +464,48 @@ def plot_eps(sim, ax, output_plane=None, eps_parameters=None, frequency=None):
if sim_size.x == 0:
# Plot y on x axis, z on y axis (YZ plane)
extent = [ymin, ymax, zmin, zmax]
- xlabel = 'Y'
- ylabel = 'Z'
+ xlabel = "Y"
+ ylabel = "Z"
xtics = np.array([sim_center.x])
ytics = np.linspace(ymin, ymax, Ny)
ztics = np.linspace(zmin, zmax, Nz)
elif sim_size.y == 0:
# Plot x on x axis, z on y axis (XZ plane)
extent = [xmin, xmax, zmin, zmax]
- xlabel = 'R' if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical else "X"
+ xlabel = (
+ "R" if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical else "X"
+ )
- ylabel = 'Z'
+ ylabel = "Z"
xtics = np.linspace(xmin, xmax, Nx)
ytics = np.array([sim_center.y])
ztics = np.linspace(zmin, zmax, Nz)
elif sim_size.z == 0:
# Plot x on x axis, y on y axis (XY plane)
extent = [xmin, xmax, ymin, ymax]
- xlabel = 'X'
- ylabel = 'Y'
+ xlabel = "X"
+ ylabel = "Y"
xtics = np.linspace(xmin, xmax, Nx)
ytics = np.linspace(ymin, ymax, Ny)
ztics = np.array([sim_center.z])
else:
raise ValueError("A 2D plane has not been specified...")
- eps_data = np.rot90(np.real(sim.get_epsilon_grid(xtics, ytics, ztics, eps_parameters['frequency'])))
+ eps_data = np.rot90(
+ np.real(sim.get_epsilon_grid(xtics, ytics, ztics, eps_parameters["frequency"]))
+ )
if mp.am_master():
- if eps_parameters['contour']:
- ax.contour(eps_data, 0, levels=np.unique(eps_data), colors='black', origin='upper', extent=extent, linewidths=eps_parameters['contour_linewidth'])
+ if eps_parameters["contour"]:
+ ax.contour(
+ eps_data,
+ 0,
+ levels=np.unique(eps_data),
+ colors="black",
+ origin="upper",
+ extent=extent,
+ linewidths=eps_parameters["contour_linewidth"],
+ )
else:
ax.imshow(eps_data, extent=extent, **filter_dict(eps_parameters, ax.imshow))
ax.set_xlabel(xlabel)
@@ -422,6 +513,7 @@ def plot_eps(sim, ax, output_plane=None, eps_parameters=None, frequency=None):
return ax
+
def plot_boundaries(sim, ax, output_plane=None, boundary_parameters=None):
# consolidate plotting parameters
if boundary_parameters is None:
@@ -434,62 +526,59 @@ def get_boundary_volumes(thickness, direction, side):
thickness = boundary.thickness
- xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(sim.geometry_center,
- sim.cell_size,
- sim.is_cylindrical)
+ xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(
+ sim.geometry_center, sim.cell_size, sim.is_cylindrical
+ )
if direction == mp.X and side == mp.Low:
- return Volume(center=Vector3(xmin+0.5*thickness,
- sim.geometry_center.y,
- sim.geometry_center.z),
- size=Vector3(thickness,
- sim.cell_size.y,
- sim.cell_size.z))
+ return Volume(
+ center=Vector3(
+ xmin + 0.5 * thickness, sim.geometry_center.y, sim.geometry_center.z
+ ),
+ size=Vector3(thickness, sim.cell_size.y, sim.cell_size.z),
+ )
elif (direction == mp.X and side == mp.High) or direction == mp.R:
- return Volume(center=Vector3(xmax-0.5*thickness,
- sim.geometry_center.y,
- sim.geometry_center.z),
- size=Vector3(thickness,
- sim.cell_size.y,
- sim.cell_size.z))
+ return Volume(
+ center=Vector3(
+ xmax - 0.5 * thickness, sim.geometry_center.y, sim.geometry_center.z
+ ),
+ size=Vector3(thickness, sim.cell_size.y, sim.cell_size.z),
+ )
elif direction == mp.Y and side == mp.Low:
- return Volume(center=Vector3(sim.geometry_center.x,
- ymin+0.5*thickness,
- sim.geometry_center.z),
- size=Vector3(sim.cell_size.x,
- thickness,
- sim.cell_size.z))
+ return Volume(
+ center=Vector3(
+ sim.geometry_center.x, ymin + 0.5 * thickness, sim.geometry_center.z
+ ),
+ size=Vector3(sim.cell_size.x, thickness, sim.cell_size.z),
+ )
elif direction == mp.Y and side == mp.High:
- return Volume(center=Vector3(sim.geometry_center.x,
- ymax-0.5*thickness,
- sim.geometry_center.z),
- size=Vector3(sim.cell_size.x,
- thickness,
- sim.cell_size.z))
+ return Volume(
+ center=Vector3(
+ sim.geometry_center.x, ymax - 0.5 * thickness, sim.geometry_center.z
+ ),
+ size=Vector3(sim.cell_size.x, thickness, sim.cell_size.z),
+ )
elif direction == mp.Z and side == mp.Low:
xcen = sim.geometry_center.x
if sim.is_cylindrical:
- xcen += 0.5*sim.cell_size.x
- return Volume(center=Vector3(xcen,
- sim.geometry_center.y,
- zmin+0.5*thickness),
- size=Vector3(sim.cell_size.x,
- sim.cell_size.y,
- thickness))
+ xcen += 0.5 * sim.cell_size.x
+ return Volume(
+ center=Vector3(xcen, sim.geometry_center.y, zmin + 0.5 * thickness),
+ size=Vector3(sim.cell_size.x, sim.cell_size.y, thickness),
+ )
elif direction == mp.Z and side == mp.High:
xcen = sim.geometry_center.x
if sim.is_cylindrical:
- xcen += 0.5*sim.cell_size.x
- return Volume(center=Vector3(xcen,
- sim.geometry_center.y,
- zmax-0.5*thickness),
- size=Vector3(sim.cell_size.x,
- sim.cell_size.y,
- thickness))
+ xcen += 0.5 * sim.cell_size.x
+ return Volume(
+ center=Vector3(xcen, sim.geometry_center.y, zmax - 0.5 * thickness),
+ size=Vector3(sim.cell_size.x, sim.cell_size.y, thickness),
+ )
else:
raise ValueError("Invalid boundary type")
import itertools
+
for boundary in sim.boundary_layers:
# boundary on all four sides
if boundary.direction == mp.ALL and boundary.side == mp.ALL:
@@ -504,25 +593,40 @@ def get_boundary_volumes(thickness, direction, side):
else:
raise ValueError("Invalid simulation dimensions")
for permutation in itertools.product(dims, [mp.Low, mp.High]):
- if ((permutation[0] == mp.X) and (permutation[1] == mp.Low)) and (sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical):
+ if ((permutation[0] == mp.X) and (permutation[1] == mp.Low)) and (
+ sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical
+ ):
continue
- vol = get_boundary_volumes(boundary.thickness,*permutation)
- ax = plot_volume(sim,ax,vol,output_plane,plotting_parameters=boundary_parameters)
+ vol = get_boundary_volumes(boundary.thickness, *permutation)
+ ax = plot_volume(
+ sim, ax, vol, output_plane, plotting_parameters=boundary_parameters
+ )
# boundary on only two of four sides
elif boundary.side == mp.ALL:
for side in [mp.Low, mp.High]:
- if ((boundary.direction == mp.X) and (side == mp.Low)) and (sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical):
+ if ((boundary.direction == mp.X) and (side == mp.Low)) and (
+ sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical
+ ):
continue
- vol = get_boundary_volumes(boundary.thickness,boundary.direction,side)
- ax = plot_volume(sim,ax,vol,output_plane,plotting_parameters=boundary_parameters)
+ vol = get_boundary_volumes(boundary.thickness, boundary.direction, side)
+ ax = plot_volume(
+ sim, ax, vol, output_plane, plotting_parameters=boundary_parameters
+ )
# boundary on just one side
else:
- if ((boundary.direction == mp.X) and (boundary.side == mp.Low)) and (sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical):
+ if ((boundary.direction == mp.X) and (boundary.side == mp.Low)) and (
+ sim.dimensions == mp.CYLINDRICAL or sim.is_cylindrical
+ ):
continue
- vol = get_boundary_volumes(boundary.thickness,boundary.direction,boundary.side)
- ax = plot_volume(sim,ax,vol,output_plane,plotting_parameters=boundary_parameters)
+ vol = get_boundary_volumes(
+ boundary.thickness, boundary.direction, boundary.side
+ )
+ ax = plot_volume(
+ sim, ax, vol, output_plane, plotting_parameters=boundary_parameters
+ )
return ax
+
def plot_sources(sim, ax, output_plane=None, labels=False, source_parameters=None):
from meep.simulation import Volume
@@ -532,13 +636,21 @@ def plot_sources(sim, ax, output_plane=None, labels=False, source_parameters=Non
else:
source_parameters = dict(default_source_parameters, **source_parameters)
- label = 'source' if labels else None
+ label = "source" if labels else None
for src in sim.sources:
- vol = Volume(center=src.center,size=src.size)
- ax = plot_volume(sim,ax,vol,output_plane,plotting_parameters=source_parameters,label=label)
+ vol = Volume(center=src.center, size=src.size)
+ ax = plot_volume(
+ sim,
+ ax,
+ vol,
+ output_plane,
+ plotting_parameters=source_parameters,
+ label=label,
+ )
return ax
+
def plot_monitors(sim, ax, output_plane=None, labels=False, monitor_parameters=None):
from meep.simulation import Volume
@@ -548,14 +660,22 @@ def plot_monitors(sim, ax, output_plane=None, labels=False, monitor_parameters=N
else:
monitor_parametesr = dict(default_monitor_parameters, **monitor_parameters)
- label = 'monitor' if labels else None
+ label = "monitor" if labels else None
for mon in sim.dft_objects:
for reg in mon.regions:
- vol = Volume(center=reg.center,size=reg.size)
- ax = plot_volume(sim,ax,vol,output_plane,plotting_parameters=monitor_parameters,label=label)
+ vol = Volume(center=reg.center, size=reg.size)
+ ax = plot_volume(
+ sim,
+ ax,
+ vol,
+ output_plane,
+ plotting_parameters=monitor_parameters,
+ label=label,
+ )
return ax
+
def plot_fields(sim, ax=None, fields=None, output_plane=None, field_parameters=None):
if not sim._is_initialized:
sim.init_sim()
@@ -568,35 +688,48 @@ def plot_fields(sim, ax=None, fields=None, output_plane=None, field_parameters=N
else:
field_parameters = dict(default_field_parameters, **field_parameters)
- if fields not in [mp.Ex, mp.Ey, mp.Ez, mp.Er, mp.Ep, mp.Dx, mp.Dy, mp.Dz, mp.Hx, mp.Hy, mp.Hz]:
- raise ValueError('Please specify a valid field component (mp.Ex, mp.Ey, ...')
-
+ if fields not in [
+ mp.Ex,
+ mp.Ey,
+ mp.Ez,
+ mp.Er,
+ mp.Ep,
+ mp.Dx,
+ mp.Dy,
+ mp.Dz,
+ mp.Hx,
+ mp.Hy,
+ mp.Hz,
+ ]:
+ raise ValueError("Please specify a valid field component (mp.Ex, mp.Ey, ...")
# Get domain measurements
sim_center, sim_size = get_2D_dimensions(sim, output_plane)
- xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(sim_center,
- sim_size,
- sim.is_cylindrical)
+ xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(
+ sim_center, sim_size, sim.is_cylindrical
+ )
if sim_size.x == 0:
# Plot y on x axis, z on y axis (YZ plane)
extent = [ymin, ymax, zmin, zmax]
- xlabel = 'Y'
- ylabel = 'Z'
+ xlabel = "Y"
+ ylabel = "Z"
elif sim_size.y == 0:
# Plot x on x axis, z on y axis (XZ plane)
extent = [xmin, xmax, zmin, zmax]
- xlabel = 'R' if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical else "X"
+ xlabel = (
+ "R" if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical else "X"
+ )
- ylabel = 'Z'
+ ylabel = "Z"
elif sim_size.z == 0:
# Plot x on x axis, y on y axis (XY plane)
extent = [xmin, xmax, ymin, ymax]
- xlabel = 'X'
- ylabel = 'Y'
+ xlabel = "X"
+ ylabel = "Y"
fields = sim.get_array(center=sim_center, size=sim_size, component=fields)
- fields = field_parameters['post_process'](fields)
+ fields = field_parameters["post_process"](fields)
if (sim.dimensions == mp.CYLINDRICAL) or sim.is_cylindrical:
fields = np.flipud(fields)
else:
@@ -605,61 +738,98 @@ def plot_fields(sim, ax=None, fields=None, output_plane=None, field_parameters=N
if not ax:
return fields
if mp.am_master():
- ax.imshow(fields, extent=extent, **filter_dict(field_parameters,ax.imshow))
+ ax.imshow(fields, extent=extent, **filter_dict(field_parameters, ax.imshow))
return ax
-def plot2D(sim, ax=None, output_plane=None, fields=None, labels=False,
- eps_parameters=None, boundary_parameters=None,
- source_parameters=None, monitor_parameters=None,
- field_parameters=None, frequency=None,
- plot_eps_flag=True, plot_sources_flag=True,
- plot_monitors_flag=True, plot_boundaries_flag=True):
+
+def plot2D(
+ sim,
+ ax=None,
+ output_plane=None,
+ fields=None,
+ labels=False,
+ eps_parameters=None,
+ boundary_parameters=None,
+ source_parameters=None,
+ monitor_parameters=None,
+ field_parameters=None,
+ frequency=None,
+ plot_eps_flag=True,
+ plot_sources_flag=True,
+ plot_monitors_flag=True,
+ plot_boundaries_flag=True,
+):
# Ensure a figure axis exists
if ax is None and mp.am_master():
from matplotlib import pyplot as plt
+
ax = plt.gca()
# validate the output plane to ensure proper 2D coordinates
from meep.simulation import Volume
+
sim_center, sim_size = get_2D_dimensions(sim, output_plane)
output_plane = Volume(center=sim_center, size=sim_size)
# Plot geometry
if plot_eps_flag:
- ax = plot_eps(sim, ax, output_plane=output_plane,
- eps_parameters=eps_parameters, frequency=frequency)
+ ax = plot_eps(
+ sim,
+ ax,
+ output_plane=output_plane,
+ eps_parameters=eps_parameters,
+ frequency=frequency,
+ )
# Plot boundaries
if plot_boundaries_flag:
- ax = plot_boundaries(sim, ax, output_plane=output_plane,
- boundary_parameters=boundary_parameters)
+ ax = plot_boundaries(
+ sim, ax, output_plane=output_plane, boundary_parameters=boundary_parameters
+ )
# Plot sources
if plot_sources_flag:
- ax = plot_sources(sim, ax, output_plane=output_plane,
- labels=labels, source_parameters=source_parameters)
+ ax = plot_sources(
+ sim,
+ ax,
+ output_plane=output_plane,
+ labels=labels,
+ source_parameters=source_parameters,
+ )
# Plot monitors
if plot_monitors_flag:
- ax = plot_monitors(sim, ax, output_plane=output_plane,
- labels=labels, monitor_parameters=monitor_parameters)
+ ax = plot_monitors(
+ sim,
+ ax,
+ output_plane=output_plane,
+ labels=labels,
+ monitor_parameters=monitor_parameters,
+ )
# Plot fields
if fields is not None:
- ax = plot_fields(sim, ax, fields, output_plane=output_plane,
- field_parameters=field_parameters)
+ ax = plot_fields(
+ sim,
+ ax,
+ fields,
+ output_plane=output_plane,
+ field_parameters=field_parameters,
+ )
return ax
+
def plot3D(sim):
from mayavi import mlab
if sim.dimensions < 3:
raise ValueError("Simulation must have 3 dimensions to visualize 3D")
- xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(sim.geometry_center,
- sim.cell_size)
+ xmin, xmax, ymin, ymax, zmin, zmax = box_vertices(
+ sim.geometry_center, sim.cell_size
+ )
Nx = int(sim.cell_size.x * sim.resolution) + 1
Ny = int(sim.cell_size.y * sim.resolution) + 1
@@ -672,6 +842,7 @@ def plot3D(sim):
eps_data = sim.get_epsilon_grid(xtics, ytics, ztics)
return mlab.contour3d(eps_data, colormap="YlGnBu")
+
def visualize_chunks(sim):
if sim.structure is None:
sim.init_sim()
@@ -713,10 +884,10 @@ def plot_box(box, proc, fig, ax):
[points[0], points[3], points[5], points[7]],
[points[1], points[4], points[2], points[6]],
[points[3], points[4], points[1], points[5]],
- [points[0], points[7], points[6], points[2]]
+ [points[0], points[7], points[6], points[2]],
]
- faces = Poly3DCollection(edges, linewidths=1, edgecolors='k')
+ faces = Poly3DCollection(edges, linewidths=1, edgecolors="k")
color_with_alpha = matplotlib.colors.to_rgba(chunk_colors[proc], alpha=0.2)
faces.set_facecolor(color_with_alpha)
ax.add_collection3d(faces)
@@ -735,11 +906,9 @@ def plot_box(box, proc, fig, ax):
points += [low + y_len]
points = np.array([np.array(v)[:-1] for v in points])
- edges = [
- [points[0], points[2], points[1], points[3]]
- ]
+ edges = [[points[0], points[2], points[1], points[3]]]
- faces = PolyCollection(edges, linewidths=1, edgecolors='k')
+ faces = PolyCollection(edges, linewidths=1, edgecolors="k")
color_with_alpha = matplotlib.colors.to_rgba(chunk_colors[proc])
faces.set_facecolor(color_with_alpha)
ax.add_collection(faces)
@@ -749,29 +918,32 @@ def plot_box(box, proc, fig, ax):
if mp.am_master():
fig = plt.figure()
- ax = fig.add_subplot(111, projection='3d' if sim.structure.gv.dim == 2 else None)
+ ax = fig.add_subplot(
+ 111, projection="3d" if sim.structure.gv.dim == 2 else None
+ )
chunk_colors = matplotlib.cm.rainbow(np.linspace(0, 1, mp.count_processors()))
for i, v in enumerate(vols):
plot_box(mp.gv2box(v.surroundings()), owners[i], fig, ax)
- ax.set_xlabel('x')
- ax.set_ylabel('y')
- ax.set_aspect('equal')
+ ax.set_xlabel("x")
+ ax.set_ylabel("y")
+ ax.set_aspect("equal")
cell_box = mp.gv2box(sim.structure.gv.surroundings())
if sim.structure.gv.dim == 2:
- ax.set_xlim3d(left=cell_box.low.x,right=cell_box.high.x)
- ax.set_ylim3d(bottom=cell_box.low.y,top=cell_box.high.y)
- ax.set_zlim3d(bottom=cell_box.low.z,top=cell_box.high.z)
- ax.set_zlabel('z')
+ ax.set_xlim3d(left=cell_box.low.x, right=cell_box.high.x)
+ ax.set_ylim3d(bottom=cell_box.low.y, top=cell_box.high.y)
+ ax.set_zlim3d(bottom=cell_box.low.z, top=cell_box.high.z)
+ ax.set_zlabel("z")
else:
- ax.set_xlim(left=cell_box.low.x,right=cell_box.high.x)
- ax.set_ylim(bottom=cell_box.low.y,top=cell_box.high.y)
+ ax.set_xlim(left=cell_box.low.x, right=cell_box.high.x)
+ ax.set_ylim(bottom=cell_box.low.y, top=cell_box.high.y)
plt.tight_layout()
plt.show()
+
# ------------------------------------------------------- #
# Animate2D
# ------------------------------------------------------- #
@@ -792,6 +964,7 @@ def plot_box(box, proc, fig, ax):
# customization_args .. [dict] other customization args
# to pass to plot2D()
+
class Animate2D(object):
"""
A class used to record the fields during timestepping (i.e., a [`run`](#run-functions)
@@ -823,8 +996,17 @@ class Animate2D(object):
Multiple `Animate2D` objects can be initialized and passed to the run function to
track different volume locations (using `mp.in_volume`) or field components.
"""
- def __init__(self, sim, fields, f=None, realtime=False, normalize=False,
- plot_modifiers=None, **customization_args):
+
+ def __init__(
+ self,
+ sim,
+ fields,
+ f=None,
+ realtime=False,
+ normalize=False,
+ plot_modifiers=None,
+ **customization_args,
+ ):
"""
Construct an `Animate2D` object.
@@ -868,6 +1050,7 @@ def mod1(ax):
self.ax = self.f.gca()
elif mp.am_master():
from matplotlib import pyplot as plt
+
self.f = plt.figure()
self.ax = self.f.gca()
else:
@@ -882,20 +1065,20 @@ def mod1(ax):
self.cumulative_fields = []
self._saved_frames = []
- self.frame_format = 'png' # format in which each frame is saved in memory
- self.codec = 'h264' # encoding of mp4 video
- self.default_mode = 'loop' # html5 video control mode
+ self.frame_format = "png" # format in which each frame is saved in memory
+ self.codec = "h264" # encoding of mp4 video
+ self.default_mode = "loop" # html5 video control mode
self.init = False
# Needed for step functions
- self.__code__ = namedtuple('gna_hack',['co_argcount'])
- self.__code__.co_argcount=2
+ self.__code__ = namedtuple("gna_hack", ["co_argcount"])
+ self.__code__.co_argcount = 2
- def __call__(self,sim,todo):
+ def __call__(self, sim, todo):
from matplotlib import pyplot as plt
- if todo == 'step':
+ if todo == "step":
# Initialize the plot
if not self.init:
filtered_plot2D = filter_dict(self.customization_args, plot2D)
@@ -912,11 +1095,13 @@ def __call__(self,sim,todo):
self.init = True
else:
# Update the plot
- filtered_plot_fields= filter_dict(self.customization_args, plot_fields)
+ filtered_plot_fields = filter_dict(self.customization_args, plot_fields)
fields = sim.plot_fields(fields=self.fields, **filtered_plot_fields)
if mp.am_master():
self.ax.images[-1].set_data(fields)
- self.ax.images[-1].set_clim(vmin=0.8*np.min(fields), vmax=0.8*np.max(fields))
+ self.ax.images[-1].set_clim(
+ vmin=0.8 * np.min(fields), vmax=0.8 * np.max(fields)
+ )
if self.realtime and mp.am_master():
# Redraw the current figure if requested
@@ -931,15 +1116,17 @@ def __call__(self,sim,todo):
# to avoid writing to disk.
self.grab_frame()
return
- elif todo == 'finish':
+ elif todo == "finish":
# Normalize the frames, if requested, and export
if self.normalize and mp.am_master():
if mp.verbosity.meep > 0:
print("Normalizing field data...")
- fields = np.array(self.cumulative_fields) / np.max(np.abs(self.cumulative_fields), axis=(0,1,2))
+ fields = np.array(self.cumulative_fields) / np.max(
+ np.abs(self.cumulative_fields), axis=(0, 1, 2)
+ )
for k in range(len(self.cumulative_fields)):
- self.ax.images[-1].set_data(fields[k,:,:])
+ self.ax.images[-1].set_data(fields[k, :, :])
self.ax.images[-1].set_clim(vmin=-0.8, vmax=0.8)
self.grab_frame()
@@ -956,9 +1143,10 @@ def grab_frame(self):
# Saves the figures frame to memory.
# modified from matplotlib library
from io import BytesIO
+
bin_data = BytesIO()
self.f.savefig(bin_data, format=self.frame_format)
- #imgdata64 = base64.encodebytes(bin_data.getvalue()).decode('ascii')
+ # imgdata64 = base64.encodebytes(bin_data.getvalue()).decode('ascii')
self._saved_frames.append(bin_data.getvalue())
def _embedded_frames(self, frame_list, frame_format):
@@ -966,12 +1154,18 @@ def _embedded_frames(self, frame_list, frame_format):
# frame_list should be a list of base64-encoded png files
# modified from matplotlib
import base64
+
template = ' frames[{0}] = "data:image/{1};base64,{2}"\n'
return "\n" + "".join(
- template.format(i, frame_format, base64.encodebytes(frame_data).decode('ascii').replace('\n', '\\\n'))
- for i, frame_data in enumerate(frame_list))
-
- def to_jshtml(self,fps):
+ template.format(
+ i,
+ frame_format,
+ base64.encodebytes(frame_data).decode("ascii").replace("\n", "\\\n"),
+ )
+ for i, frame_data in enumerate(frame_list)
+ )
+
+ def to_jshtml(self, fps):
"""
Outputs an interactable JSHTML animation object that is embeddable in Jupyter
notebooks. The object is packaged with controls to manipulate the video's
@@ -984,36 +1178,44 @@ def to_jshtml(self,fps):
# Only works with Python3 and matplotlib > 3.1.0
from distutils.version import LooseVersion
import matplotlib
+
if LooseVersion(matplotlib.__version__) < LooseVersion("3.1.0"):
- print('-------------------------------')
- print('Warning: JSHTML output is not supported with your current matplotlib build. Consider upgrading to 3.1.0+')
- print('-------------------------------')
+ print("-------------------------------")
+ print(
+ "Warning: JSHTML output is not supported with your current matplotlib build. Consider upgrading to 3.1.0+"
+ )
+ print("-------------------------------")
return
if mp.am_master():
from uuid import uuid4
- from matplotlib._animation_data import (DISPLAY_TEMPLATE, INCLUDED_FRAMES, JS_INCLUDE, STYLE_INCLUDE)
+ from matplotlib._animation_data import (
+ DISPLAY_TEMPLATE,
+ INCLUDED_FRAMES,
+ JS_INCLUDE,
+ STYLE_INCLUDE,
+ )
# save the frames to an html file
fill_frames = self._embedded_frames(self._saved_frames, self.frame_format)
Nframes = len(self._saved_frames)
- mode_dict = dict(once_checked='',
- loop_checked='',
- reflect_checked='')
- mode_dict[f'{self.default_mode}_checked'] = 'checked'
+ mode_dict = dict(once_checked="", loop_checked="", reflect_checked="")
+ mode_dict[f"{self.default_mode}_checked"] = "checked"
interval = 1000 // fps
html_string = ""
html_string += JS_INCLUDE
html_string += STYLE_INCLUDE
- html_string += DISPLAY_TEMPLATE.format(id=uuid4().hex,
- Nframes=Nframes,
- fill_frames=fill_frames,
- interval=interval,
- **mode_dict)
+ html_string += DISPLAY_TEMPLATE.format(
+ id=uuid4().hex,
+ Nframes=Nframes,
+ fill_frames=fill_frames,
+ interval=interval,
+ **mode_dict,
+ )
return JS_Animation(html_string)
- def to_gif(self,fps,filename):
+ def to_gif(self, fps, filename):
"""
Generates and outputs a GIF file of the animation with the filename, `filename`,
and the frame rate, `fps`. Note that GIFs are significantly larger than mp4 videos
@@ -1027,30 +1229,41 @@ def to_gif(self,fps,filename):
if mp.am_master():
from subprocess import Popen, PIPE
from io import TextIOWrapper, BytesIO
- FFMPEG_BIN = 'ffmpeg'
- command = [FFMPEG_BIN,
- '-f', 'image2pipe', # force piping of rawvideo
- '-vcodec', self.frame_format, # raw input codec
- '-s', '%dx%d' % (self.frame_size),
- '-r', str(fps), # frame rate in frames per second
- '-i', 'pipe:', # The input comes from a pipe
- '-vcodec', 'gif', # output gif format
- '-r', str(fps), # frame rate in frames per second
- '-y',
- '-vf', 'pad=width=ceil(iw/2)*2:height=ceil(ih/2)*2',
- '-an', filename # output filename
+
+ FFMPEG_BIN = "ffmpeg"
+ command = [
+ FFMPEG_BIN,
+ "-f",
+ "image2pipe", # force piping of rawvideo
+ "-vcodec",
+ self.frame_format, # raw input codec
+ "-s",
+ "%dx%d" % (self.frame_size),
+ "-r",
+ str(fps), # frame rate in frames per second
+ "-i",
+ "pipe:", # The input comes from a pipe
+ "-vcodec",
+ "gif", # output gif format
+ "-r",
+ str(fps), # frame rate in frames per second
+ "-y",
+ "-vf",
+ "pad=width=ceil(iw/2)*2:height=ceil(ih/2)*2",
+ "-an",
+ filename, # output filename
]
if mp.verbosity.meep > 0:
print("Generating GIF...")
proc = Popen(command, stdin=PIPE, stdout=PIPE, stderr=PIPE)
for i in range(len(self._saved_frames)):
proc.stdin.write(self._saved_frames[i])
- out, err = proc.communicate() # pipe in images
+ out, err = proc.communicate() # pipe in images
proc.stdin.close()
proc.wait()
return
- def to_mp4(self,fps,filename):
+ def to_mp4(self, fps, filename):
"""
Generates and outputs an mp4 video file of the animation with the filename,
`filename`, and the frame rate, `fps`. Default encoding is h264 with yuv420p
@@ -1062,27 +1275,39 @@ def to_mp4(self,fps,filename):
if mp.am_master():
from subprocess import Popen, PIPE
from io import TextIOWrapper, BytesIO
- FFMPEG_BIN = 'ffmpeg'
- command = [FFMPEG_BIN,
- '-f', 'image2pipe', # force piping of rawvideo
- '-vcodec', self.frame_format, # raw input codec
- '-s', '%dx%d' % (self.frame_size),
- #'-pix_fmt', self.frame_format,
- '-r', str(fps), # frame rate in frames per second
- '-i', 'pipe:', # The input comes from a pipe
- '-vcodec', self.codec, # output mp4 format
- '-pix_fmt','yuv420p',
- '-r', str(fps), # frame rate in frames per second
- '-y',
- '-vf', 'pad=width=ceil(iw/2)*2:height=ceil(ih/2)*2',
- '-an', filename # output filename
+
+ FFMPEG_BIN = "ffmpeg"
+ command = [
+ FFMPEG_BIN,
+ "-f",
+ "image2pipe", # force piping of rawvideo
+ "-vcodec",
+ self.frame_format, # raw input codec
+ "-s",
+ "%dx%d" % (self.frame_size),
+ #'-pix_fmt', self.frame_format,
+ "-r",
+ str(fps), # frame rate in frames per second
+ "-i",
+ "pipe:", # The input comes from a pipe
+ "-vcodec",
+ self.codec, # output mp4 format
+ "-pix_fmt",
+ "yuv420p",
+ "-r",
+ str(fps), # frame rate in frames per second
+ "-y",
+ "-vf",
+ "pad=width=ceil(iw/2)*2:height=ceil(ih/2)*2",
+ "-an",
+ filename, # output filename
]
if mp.verbosity.meep > 0:
print("Generating MP4...")
proc = Popen(command, stdin=PIPE, stdout=PIPE, stderr=PIPE)
for i in range(len(self._saved_frames)):
proc.stdin.write(self._saved_frames[i])
- out, err = proc.communicate() # pipe in images
+ out, err = proc.communicate() # pipe in images
proc.stdin.close()
proc.wait()
return
@@ -1092,19 +1317,23 @@ def reset(self):
self.ax = None
self.f = None
- def set_figure(self,f):
+ def set_figure(self, f):
self.f = f
+
# ------------------------------------------------------- #
# JS_Animation
# ------------------------------------------------------- #
# A helper class used to make jshtml animations embed
# seamlessly within Jupyter notebooks.
-class JS_Animation():
- def __init__(self,jshtml):
+
+class JS_Animation:
+ def __init__(self, jshtml):
self.jshtml = jshtml
+
def _repr_html_(self):
return self.jshtml
+
def get_jshtml(self):
return self.jshtml
From 6b47646259f7573637f6fc5edbbdc4b677556ab0 Mon Sep 17 00:00:00 2001
From: Joaquin Matres <4514346+joamatab@users.noreply.github.com>
Date: Fri, 29 Jul 2022 16:30:09 +0200
Subject: [PATCH 03/12] run black and add pre-commit
---
.gitattributes | 2 +-
.github/dependabot.yml | 11 +
.github/workflows/pages.yml | 40 +
.github/workflows/pre-commit.yml | 16 +
.github/workflows/pythonpublish.yml | 30 +
.github/workflows/test_code.yml | 35 +
.../test_code_updated_requirements.yml | 35 +
.github/workflows/test_docs.yml | 30 +
.pre-commit-config.yaml | 108 +
AUTHORS | 2 +-
doc/_api_snippets/class_template.md | 1 -
doc/_api_snippets/function_template.md | 2 +-
doc/_api_snippets/method_template.md | 2 +-
doc/docs/2d_Cell_Special_kz.md | 2 +-
doc/docs/C++_Tutorial.md | 2 +-
doc/docs/Developer_Codes/Makefile.manual | 2 +-
doc/docs/Download.md | 2 +-
doc/docs/FAQ.md | 2 +-
doc/docs/Installation.md | 2 +-
doc/docs/Materials.md | 2 +-
doc/docs/Python_Tutorials/Basics.md | 30 +-
.../Local_Density_of_States.md | 2 +-
.../Python_Tutorials/Mode_Decomposition.md | 2 +-
.../Multilevel_Atomic_Susceptibility.md | 3 +-
doc/docs/Python_Tutorials/Optical_Forces.md | 4 +-
..._and_Transmission_in_a_Waveguide_Cavity.md | 8 +-
doc/docs/Python_User_Interface.md | 4 +-
doc/docs/Scheme_Tutorials/Basics.md | 4 +-
doc/docs/Scheme_Tutorials/Casimir_Forces.md | 1 -
doc/docs/Scheme_Tutorials/Custom_Source.md | 2 +-
.../Cylindrical_Coordinates.md | 2 +-
.../Local_Density_of_States.md | 2 +-
.../Multilevel_Atomic_Susceptibility.md | 6 +-
doc/docs/Scheme_Tutorials/Optical_Forces.md | 2 +-
..._and_Transmission_in_a_Waveguide_Cavity.md | 4 +-
doc/docs/Subpixel_Smoothing.md | 2 +-
...nizing_the_Magnetic_and_Electric_Fields.md | 2 +-
doc/docs/The_Run_Function_Is_Not_A_Loop.md | 4 +-
doc/docs/Yee_Lattice.md | 2 +-
doc/docs/mdx_math.py | 45 +-
doc/docs/setup.py | 19 +-
doc/generate_py_api.py | 156 +-
m4/ax_check_compiler_flags.m4 | 4 +-
m4/ax_compiler_vendor.m4 | 5 +-
m4/ax_gcc_x86_cpuid.m4 | 2 +-
m4/pkg.m4 | 4 +-
python/adjoint/__init__.py | 15 +-
python/adjoint/basis.py | 8 +-
python/adjoint/connectivity.py | 5 +-
python/adjoint/filter_source.py | 5 +-
python/adjoint/filters.py | 5 +-
python/adjoint/objective.py | 8 +-
python/adjoint/optimization_problem.py | 10 +-
python/adjoint/utils.py | 7 +-
python/adjoint/wrapper.py | 7 +-
python/binary_partition_utils.py | 5 +-
python/chunk_balancer.py | 6 +-
python/examples/3rd-harm-1d.ipynb | 593 +---
python/examples/3rd-harm-1d.py | 4 +-
python/examples/README.md | 14 +-
python/examples/absorbed_power_density.ipynb | 217 +-
python/examples/absorbed_power_density.py | 4 +-
python/examples/absorber-1d.py | 6 +-
.../01-Introduction-checkpoint.ipynb | 156 +-
.../02-Waveguide_Bend-checkpoint.ipynb | 46 +-
...3-Filtered_Waveguide_Bend-checkpoint.ipynb | 1740 +---------
.../04-Splitter-checkpoint.ipynb | 1483 +-------
.../05-Near2Far-checkpoint.ipynb | 4 +-
.../06-Near2Far-Epigraph-checkpoint.ipynb | 1620 +--------
.../Bend Minimax-checkpoint.ipynb | 1696 +--------
.../01-Introduction.ipynb | 160 +-
.../02-Waveguide_Bend.ipynb | 216 +-
.../03-Filtered_Waveguide_Bend.ipynb | 1740 +---------
.../adjoint_optimization/04-Splitter.ipynb | 1711 +--------
.../adjoint_optimization/05-Near2Far.ipynb | 1691 +--------
.../06-Near2Far-Epigraph.ipynb | 1620 +--------
.../adjoint_optimization/Bend Minimax.ipynb | 1700 +--------
.../ConnectivityConstraint.ipynb | 118 +-
.../adjoint_optimization/Fourier-Bend.ipynb | 2128 +-----------
python/examples/antenna-radiation.ipynb | 84 +-
python/examples/antenna-radiation.py | 7 +-
python/examples/antenna_pec_ground_plane.py | 10 +-
python/examples/bend-flux.ipynb | 121 +-
python/examples/bend-flux.py | 7 +-
python/examples/bent-waveguide.ipynb | 154 +-
python/examples/bent-waveguide.py | 4 -
python/examples/binary_grating.ipynb | 184 +-
python/examples/binary_grating.py | 10 +-
python/examples/binary_grating_n2f.ipynb | 220 +-
python/examples/binary_grating_n2f.py | 12 +-
python/examples/binary_grating_oblique.ipynb | 179 +-
python/examples/binary_grating_oblique.py | 16 +-
python/examples/binary_grating_phasemap.ipynb | 752 +---
python/examples/binary_grating_phasemap.py | 12 +-
python/examples/cavity-farfield.ipynb | 141 +-
python/examples/cavity-farfield.py | 6 +-
python/examples/cavity_arrayslice.py | 5 +-
python/examples/cherenkov-radiation.py | 1 -
python/examples/chirped_pulse.py | 2 +-
python/examples/coupler.ipynb | 1752 +---------
python/examples/coupler.py | 3 +-
python/examples/cyl-ellipsoid.py | 4 +-
python/examples/cylinder_cross_section.ipynb | 89 +-
python/examples/cylinder_cross_section.py | 5 +-
.../examples/differential_cross_section.ipynb | 285 +-
python/examples/differential_cross_section.py | 5 +-
python/examples/diffracted_planewave.py | 10 +-
python/examples/eps_fit_lorentzian.py | 4 +-
python/examples/faraday-rotation.py | 4 +-
python/examples/finite_grating.ipynb | 126 +-
python/examples/finite_grating.py | 6 +-
python/examples/gaussian-beam.py | 5 +-
.../examples/grating2d_triangular_lattice.py | 7 +-
python/examples/holey-wvg-bands.ipynb | 298 +-
python/examples/holey-wvg-bands.py | 4 -
python/examples/holey-wvg-cavity.ipynb | 769 +----
python/examples/holey-wvg-cavity.py | 5 +-
python/examples/material-dispersion.py | 5 +-
python/examples/metal-cavity-ldos.py | 8 +-
python/examples/metasurface_lens.ipynb | 1305 +------
python/examples/metasurface_lens.py | 12 +-
python/examples/mie_scattering.py | 5 +-
python/examples/mode-decomposition.ipynb | 393 +--
python/examples/mode-decomposition.py | 5 +-
python/examples/mpb_bragg_sine.py | 1 +
python/examples/mpb_data_analysis.py | 6 +-
python/examples/mpb_diamond.py | 1 +
python/examples/mpb_hole_slab.py | 3 +-
python/examples/mpb_honey_rods.py | 3 +-
python/examples/mpb_line_defect.py | 3 +-
python/examples/mpb_sq_rods.py | 7 +-
python/examples/mpb_strip.py | 2 -
python/examples/mpb_tri_holes.py | 3 +-
python/examples/mpb_tri_rods.py | 3 +-
python/examples/mpb_tutorial.py | 7 +-
python/examples/multilevel-atom.py | 3 +-
python/examples/oblique-planewave.ipynb | 132 +-
python/examples/oblique-planewave.py | 5 +-
python/examples/oblique-source.ipynb | 227 +-
python/examples/oblique-source.py | 5 +-
python/examples/parallel-wvgs-force.ipynb | 3038 +---------------
python/examples/parallel-wvgs-force.py | 5 +-
python/examples/parallel-wvgs-mpb.py | 5 +-
python/examples/perturbation_theory.ipynb | 142 +-
python/examples/perturbation_theory.py | 6 +-
python/examples/perturbation_theory_2d.py | 6 +-
python/examples/planar_cavity_ldos.py | 8 +-
python/examples/polarization_grating.ipynb | 3046 +----------------
python/examples/polarization_grating.py | 13 +-
python/examples/pw-source.py | 4 +-
python/examples/refl-angular-kz2d.py | 3 +-
python/examples/refl-angular.ipynb | 1404 +-------
python/examples/refl-angular.py | 3 +-
python/examples/refl-quartz.ipynb | 57 +-
python/examples/refl-quartz.py | 10 +-
python/examples/ring-cyl.py | 3 +-
python/examples/ring-mode-overlap.py | 1 -
python/examples/ring.ipynb | 171 +-
python/examples/ring.py | 2 -
python/examples/ring_gds.py | 6 +-
python/examples/solve-cw.ipynb | 127 +-
python/examples/solve-cw.py | 5 +-
python/examples/stochastic_emitter.py | 7 +-
python/examples/stochastic_emitter_line.py | 7 +-
python/examples/straight-waveguide.ipynb | 147 +-
python/examples/straight-waveguide.py | 6 +-
python/examples/wvg-src.py | 3 -
python/examples/zone_plate.py | 6 +-
python/geom.py | 49 +-
python/materials.py | 3 +-
python/meep.i | 6 +-
python/mpb_data.py | 9 +-
python/simulation.py | 141 +-
python/solver.py | 23 +-
python/source.py | 21 +-
python/tests/test_3rd_harm_1d.py | 4 +-
python/tests/test_absorber_1d.py | 4 +-
python/tests/test_adjoint_cyl.py | 6 +-
python/tests/test_adjoint_jax.py | 8 +-
python/tests/test_adjoint_solver.py | 7 +-
python/tests/test_adjoint_utils.py | 9 +-
python/tests/test_antenna_radiation.py | 6 +-
python/tests/test_array_metadata.py | 4 +-
python/tests/test_bend_flux.py | 4 +-
python/tests/test_binary_grating.py | 22 +-
python/tests/test_binary_partition_utils.py | 4 +-
python/tests/test_cavity_arrayslice.py | 6 +-
python/tests/test_cavity_farfield.py | 6 +-
python/tests/test_chunk_balancer.py | 11 +-
python/tests/test_chunk_layout.py | 3 +-
python/tests/test_chunks.py | 3 +-
python/tests/test_conductivity.py | 2 +
python/tests/test_cyl_ellipsoid.py | 1 +
python/tests/test_dft_energy.py | 1 +
python/tests/test_dft_fields.py | 6 +-
python/tests/test_diffracted_planewave.py | 7 +-
python/tests/test_dispersive_eigenmode.py | 15 +-
python/tests/test_divide_mpi_processes.py | 1 +
python/tests/test_dump_load.py | 4 +-
python/tests/test_eigfreq.py | 3 +-
python/tests/test_faraday_rotation.py | 5 +-
python/tests/test_field_functions.py | 3 +-
python/tests/test_force.py | 1 +
python/tests/test_fragment_stats.py | 1 +
python/tests/test_gaussianbeam.py | 6 +-
python/tests/test_geom.py | 4 +-
python/tests/test_get_epsilon_grid.py | 7 +-
python/tests/test_get_point.py | 6 +-
python/tests/test_holey_wvg_bands.py | 3 +-
python/tests/test_holey_wvg_cavity.py | 6 +-
python/tests/test_integrated_source.py | 4 +-
python/tests/test_kdom.py | 3 +-
python/tests/test_ldos.py | 2 +
python/tests/test_material_dispersion.py | 2 +
python/tests/test_material_grid.py | 4 +-
python/tests/test_materials_library.py | 3 +-
python/tests/test_medium_evaluations.py | 7 +-
python/tests/test_mode_coeffs.py | 4 +-
python/tests/test_mode_decomposition.py | 14 +-
python/tests/test_mpb.py | 10 +-
python/tests/test_multilevel_atom.py | 3 +-
python/tests/test_n2f_periodic.py | 8 +-
python/tests/test_oblique_source.py | 7 +-
python/tests/test_physical.py | 1 +
python/tests/test_prism.py | 2 +
python/tests/test_pw_source.py | 4 +-
python/tests/test_refl_angular.py | 10 +-
python/tests/test_ring.py | 1 +
python/tests/test_ring_cyl.py | 4 +-
python/tests/test_simulation.py | 2 +
python/tests/test_source.py | 6 +-
python/tests/test_special_kz.py | 8 +-
python/tests/test_user_defined_material.py | 1 +
python/tests/test_verbosity_mgr.py | 1 +
python/tests/test_visualization.py | 11 +-
python/tests/test_wvg_src.py | 2 +-
python/tests/utils.py | 1 +
python/timing_measurements.py | 4 +-
python/verbosity_mgr.py | 9 +-
python/visualization.py | 20 +-
scheme/casimir.scm | 34 +-
scheme/examples/3rd-harm-1d.ctl | 6 +-
scheme/examples/bend-flux.ctl | 14 +-
scheme/examples/holey-wvg-bands.ctl | 4 +-
scheme/examples/holey-wvg-cavity.ctl | 12 +-
scheme/examples/material-dispersion.ctl | 6 +-
scheme/examples/ring-cyl.ctl | 10 +-
scheme/materials.scm | 46 +-
scheme/meep_op_renames.i | 1 -
src/dft.cpp | 10 +-
src/fix_boundary_sources.cpp | 2 +-
src/loop_in_chunks.cpp | 14 +-
src/meep.hpp | 2 +-
src/meepgeom.cpp | 16 +-
src/structure.cpp | 2 +-
tests/cyl-ellipsoid.ctl | 2 +-
256 files changed, 1768 insertions(+), 34102 deletions(-)
create mode 100644 .github/dependabot.yml
create mode 100644 .github/workflows/pages.yml
create mode 100644 .github/workflows/pre-commit.yml
create mode 100644 .github/workflows/pythonpublish.yml
create mode 100644 .github/workflows/test_code.yml
create mode 100644 .github/workflows/test_code_updated_requirements.yml
create mode 100644 .github/workflows/test_docs.yml
create mode 100644 .pre-commit-config.yaml
diff --git a/.gitattributes b/.gitattributes
index 579877f02..17cd3619d 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -5,4 +5,4 @@ tests/* linguist-documentation
scheme/examples/* linguist-documentation
python/numpy.i linguist-vendored
src/support/mt19937ar.c linguist-vendored
-src/support/meep_mt.h linguist-language=C++
\ No newline at end of file
+src/support/meep_mt.h linguist-language=C++
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 000000000..0aada4dc0
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,11 @@
+version: 2
+updates:
+ - package-ecosystem: "pip"
+ directory: "/" # Location of package manifests
+ schedule:
+ interval: "daily"
+
+ - package-ecosystem: github-actions
+ directory: /
+ schedule:
+ interval: monthly
diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml
new file mode 100644
index 000000000..3e775a690
--- /dev/null
+++ b/.github/workflows/pages.yml
@@ -0,0 +1,40 @@
+name: Sphinx docs to gh-pages
+
+on:
+ push:
+ branches:
+ - master
+ workflow_dispatch:
+
+jobs:
+ sphinx_docs_to_gh-pages:
+ runs-on: ubuntu-latest
+ name: Sphinx docs to gh-pages
+ steps:
+ - name: Cancel Workflow Action
+ uses: styfle/cancel-workflow-action@0.10.0
+ - uses: actions/checkout@v3
+ - uses: conda-incubator/setup-miniconda@v2
+ with:
+ python-version: 3.9
+ mamba-version: "*"
+ channels: conda-forge,defaults
+ channel-priority: true
+ activate-environment: anaconda-client-env
+ - name: Add conda to system path
+ run: |
+ echo $CONDA/bin >> $GITHUB_PATH
+ - name: Installing the library
+ shell: bash -l {0}
+ run: |
+ pip install -e .
+ pip install -r requirements_dev.txt
+ sudo wget https://github.com/jgm/pandoc/releases/download/1.16.0.2/pandoc-1.16.0.2-1-amd64.deb
+ sudo dpkg -i pandoc-1.16.0.2-1-amd64.deb
+ #sudo apt install pandoc
+ - name: Running the Sphinx to gh-pages Action
+ uses: uibcdf/action-sphinx-docs-to-gh-pages@v1.0-beta.2
+ with:
+ branch: master
+ dir_docs: docs
+ sphinxopts: ""
diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml
new file mode 100644
index 000000000..088c7b916
--- /dev/null
+++ b/.github/workflows/pre-commit.yml
@@ -0,0 +1,16 @@
+---
+name: pre-commit
+
+on:
+ pull_request:
+ push:
+
+jobs:
+ pre-commit:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-python@v4
+ with:
+ python-version: 3.9
+ - uses: pre-commit/action@v3.0.0
diff --git a/.github/workflows/pythonpublish.yml b/.github/workflows/pythonpublish.yml
new file mode 100644
index 000000000..c96bda539
--- /dev/null
+++ b/.github/workflows/pythonpublish.yml
@@ -0,0 +1,30 @@
+---
+name: Upload Python Package
+
+on:
+ release:
+ types: [created, published]
+ push:
+ branches: [master]
+ tags: [v*]
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: 3.x
+ - name: Install dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install setuptools wheel twine
+ - name: Build and publish
+ env:
+ TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
+ TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
+ run: |
+ python setup.py sdist bdist_wheel
+ twine upload dist/*
diff --git a/.github/workflows/test_code.yml b/.github/workflows/test_code.yml
new file mode 100644
index 000000000..2a589bacb
--- /dev/null
+++ b/.github/workflows/test_code.yml
@@ -0,0 +1,35 @@
+name: Test code and lint
+
+on:
+ pull_request:
+ push:
+ schedule:
+ - cron: 0 2 * * * # run at 2 AM UTC
+
+jobs:
+ build:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ max-parallel: 12
+ matrix:
+ python-version: [3.8, 3.9]
+ os: [ubuntu-latest]
+
+ steps:
+ - name: Cancel Workflow Action
+ uses: styfle/cancel-workflow-action@0.10.0
+ - uses: actions/checkout@v3
+ - name: Set up Python ${{ matrix.python-version }}
+ uses: actions/setup-python@v4
+ with:
+ python-version: ${{ matrix.python-version }}
+ cache: 'pip'
+ - name: Install dependencies
+ run: |
+ pip install -e .
+ pip install flake8 pytest
+ - name: Lint with flake8
+ run: |
+ flake8 .
+ - name: Test with pytest
+ run: pytest
diff --git a/.github/workflows/test_code_updated_requirements.yml b/.github/workflows/test_code_updated_requirements.yml
new file mode 100644
index 000000000..4afe7afc8
--- /dev/null
+++ b/.github/workflows/test_code_updated_requirements.yml
@@ -0,0 +1,35 @@
+---
+name: test with updated requirements (bleeding edge versions)
+# https://docs.github.com/en/free-pro-team@latest/actions/guides/building-and-testing-python
+
+on:
+ pull_request:
+ push:
+ schedule:
+ - cron: 0 2 * * * # run at 2 AM UTC
+
+jobs:
+ build:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ max-parallel: 12
+ matrix:
+ python-version: [3.9]
+ os: [ubuntu-latest]
+
+ steps:
+ - name: Cancel Workflow Action
+ uses: styfle/cancel-workflow-action@0.9.1
+ - uses: actions/checkout@v3
+ - name: Set up Python ${{ matrix.python-version }}
+ uses: actions/setup-python@v4
+ with:
+ python-version: ${{ matrix.python-version }}
+ - name: Install dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install pur pytest
+ pur -r requirements.txt
+ pip install .
+ - name: Test with pytest
+ run: pytest
diff --git a/.github/workflows/test_docs.yml b/.github/workflows/test_docs.yml
new file mode 100644
index 000000000..a1e85f3b4
--- /dev/null
+++ b/.github/workflows/test_docs.yml
@@ -0,0 +1,30 @@
+name: Test documentation
+
+on:
+ pull_request:
+ push:
+ schedule:
+ - cron: "0 2 * * *" # run at 2 AM UTC
+ -
+
+jobs:
+ build-linux:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Cancel Workflow Action
+ uses: styfle/cancel-workflow-action@0.10.0
+ - uses: actions/checkout@v3
+ - name: Set up Python 3.9
+ uses: actions/setup-python@v4
+ with:
+ python-version: 3.9
+ - name: Install dependencies
+ run: |
+ pip install -r requirements_dev.txt
+ pip install .
+ sudo apt install pandoc
+ - name: Test documentation
+ run: |
+ cd docs
+ make html
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 000000000..6e666bc53
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,108 @@
+repos:
+ - repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: "b0f06dc9f2260909f3423243de180edfc823ec5a"
+ hooks:
+ - id: check-yaml
+ - id: end-of-file-fixer
+ - id: trailing-whitespace
+
+ # - repo: https://github.com/hakancelik96/unimport
+ # rev: df8eb1a4c91acb84da197828af8157708968b596
+ # hooks:
+ # - id: unimport
+ # args: [--remove, --include-star-import]
+ - repo: https://github.com/pycqa/isort
+ rev: "12cc5fbd67eebf92eb2213b03c07b138ae1fb448"
+ hooks:
+ - id: isort
+ files: "python/.*"
+ args: ["--profile", "black", "--filter-files"]
+
+ - repo: https://github.com/psf/black
+ rev: "6debce63bc2429b1680f8838592f2e56e3df6b27"
+ hooks:
+ - id: black
+
+ # - repo: https://gitlab.com/pycqa/flake8
+ # rev: "21d3c70d676007470908d39b73f0521d39b3b997"
+ # hooks:
+ # - id: flake8
+
+ - repo: https://github.com/kynan/nbstripout
+ rev: 8cafdcc393232045208137698dbeb42d6e0dd9e8
+ hooks:
+ - id: nbstripout
+ files: ".ipynb"
+
+ - repo: https://github.com/asottile/pyupgrade
+ rev: 85f02f45f0d2889f3826f16b60f27188ea84c1ae
+ hooks:
+ - id: pyupgrade
+ args: [--py37-plus, --keep-runtime-typing]
+
+ # - repo: https://github.com/codespell-project/codespell
+ # rev: 4d782511b3999c243feb3858cd7062270eb13291
+ # hooks:
+ # - id: codespell
+ # args: ["-L TE,TE/TM,te,ba,FPR,fpr_spacing,ro"]
+
+ - repo: https://github.com/shellcheck-py/shellcheck-py
+ rev: f87a493c6596a5338d69395905a4e13ed65584f6
+ hooks:
+ - id: shellcheck
+
+ - repo: https://github.com/pre-commit/pygrep-hooks
+ rev: 8e68d79b05355c9e107f81fc267f2bfc3e9e5a04 # Use the ref you want to point at
+ hooks:
+ - id: python-use-type-annotations
+
+ - repo: https://github.com/PyCQA/bandit
+ rev: 44c05fcac53de3a39589173177c931b38de5bb0f
+ hooks:
+ - id: bandit
+ args: [--exit-zero]
+ # ignore all tests, not just tests data
+ exclude: ^tests/
+ # - repo: https://github.com/pre-commit/mirrors-mypy
+ # rev: "214c33306afe17f1cc7d2d55e4da705b6ebe0627"
+ # hooks:
+ # - id: mypy
+ # exclude: ^(docs/|example-plugin/|tests/fixtures)
+ # additional_dependencies:
+ # - "pydantic"
+ # - repo: https://github.com/terrencepreilly/darglint
+ # rev: master
+ # hooks:
+ # - id: darglint
+
+ # - repo: https://github.com/pycqa/pydocstyle
+ # rev: ""
+ # hooks:
+ # - id: pydocstyle
+ # - repo: https://github.com/asottile/reorder_python_imports
+ # rev: 2b2f0c74acdb3de316e23ceb7dd0d7945c354050
+ # hooks:
+ # - id: reorder-python-imports
+ # - repo: https://github.com/PyCQA/pylint
+ # rev: v2.14.1
+ # hooks:
+ # - id: pylint
+ # args: [--exit-zero]
+ # - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
+ # rev: 6565d773ca281682d7062d4c0be74538cc474cc9
+ # hooks:
+ # - id: pretty-format-java
+ # args: [--autofix]
+ # - id: pretty-format-kotlin
+ # args: [--autofix]
+ # - id: pretty-format-yaml
+ # args: [--autofix, --indent, "2"]
+ # - repo: https://github.com/adrienverge/yamllint.git
+ # rev: v1.21.0 # or higher tag
+ # hooks:
+ # - id: yamllint
+ # args: [--format, parsable, --strict]
+ # - repo: https://github.com/jumanjihouse/pre-commit-hook-yamlfmt
+ # rev: 0.1.0 # or specific tag
+ # hooks:
+ # - id: yamlfmt
diff --git a/AUTHORS b/AUTHORS
index 67c49fe38..f26a2989f 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -17,4 +17,4 @@ Ian Williamson
Andreas Hoenselaar
Ben Bartlett
Krishna Gadepalli
-Mo Chen
\ No newline at end of file
+Mo Chen
diff --git a/doc/_api_snippets/class_template.md b/doc/_api_snippets/class_template.md
index 35de0fb34..4de4206ec 100644
--- a/doc/_api_snippets/class_template.md
+++ b/doc/_api_snippets/class_template.md
@@ -12,4 +12,3 @@ class {class_name}({base_classes}):
{docstring}
-
diff --git a/doc/_api_snippets/function_template.md b/doc/_api_snippets/function_template.md
index 89c85b739..adcba9c4c 100644
--- a/doc/_api_snippets/function_template.md
+++ b/doc/_api_snippets/function_template.md
@@ -9,4 +9,4 @@ def {function_name}{parameters}:{other_signatures}
{docstring}
-
\ No newline at end of file
+
diff --git a/doc/_api_snippets/method_template.md b/doc/_api_snippets/method_template.md
index 71cc0ac3d..560b31be2 100644
--- a/doc/_api_snippets/method_template.md
+++ b/doc/_api_snippets/method_template.md
@@ -13,4 +13,4 @@ def {method_name}{parameters}:{other_signatures}
-
\ No newline at end of file
+
diff --git a/doc/docs/2d_Cell_Special_kz.md b/doc/docs/2d_Cell_Special_kz.md
index 11cd1fdcc..655881cf0 100644
--- a/doc/docs/2d_Cell_Special_kz.md
+++ b/doc/docs/2d_Cell_Special_kz.md
@@ -100,4 +100,4 @@ The Meep results are identical to within six decimal digits and agree well with
```
refl:, 0.3272338236967464 (real/imag), 0.3272338244372344 (complex), 0.3272330216564413 (3d), 0.3293821216165117 (analytic)
-```
\ No newline at end of file
+```
diff --git a/doc/docs/C++_Tutorial.md b/doc/docs/C++_Tutorial.md
index 5e158b86b..2e152877a 100644
--- a/doc/docs/C++_Tutorial.md
+++ b/doc/docs/C++_Tutorial.md
@@ -86,7 +86,7 @@ const double half_cavity_width = d2;
const int N = 5;
```
-Meep supports perfectly matching layers (PML) as absorbing boundary conditions. The PML begins at the edge of the computational volume and works inwards. Hence, we specify the size of the cell as follows:
+Meep supports perfectly matching layers (PML) as absorbing boundary conditions. The PML begins at the edge of the computational volume and works inwards. Hence, we specify the size of the cell as follows:
```c++
const double pml_thickness = 1.0;
diff --git a/doc/docs/Developer_Codes/Makefile.manual b/doc/docs/Developer_Codes/Makefile.manual
index 5abb9d261..b0501ad8a 100644
--- a/doc/docs/Developer_Codes/Makefile.manual
+++ b/doc/docs/Developer_Codes/Makefile.manual
@@ -15,5 +15,5 @@ LIBS = -lmeepgeom -lmeep -lctlgeom
WriteChunkInfo: WriteChunkInfo.o
$(CXX) $(LDFLAGS) -o $@ $^ $(LIBS)
-clean:
+clean:
rm *.o *.a
diff --git a/doc/docs/Download.md b/doc/docs/Download.md
index 730c067c0..deb875b33 100644
--- a/doc/docs/Download.md
+++ b/doc/docs/Download.md
@@ -28,4 +28,4 @@ You will also be able to install the [parallel version of Meep](https://packages
sudo apt-get install python3-meep-openmpi
```
-These upcoming Meep packages for Ubuntu 21.04 are derived from the Debian 11 ("Bullseye") packages ([serial](https://packages.debian.org/bullseye/python3-meep) and [parallel](https://packages.debian.org/bullseye/python3-meep-openmpi)). Debian 11 is currently the testing distribution.
\ No newline at end of file
+These upcoming Meep packages for Ubuntu 21.04 are derived from the Debian 11 ("Bullseye") packages ([serial](https://packages.debian.org/bullseye/python3-meep) and [parallel](https://packages.debian.org/bullseye/python3-meep-openmpi)). Debian 11 is currently the testing distribution.
diff --git a/doc/docs/FAQ.md b/doc/docs/FAQ.md
index 6754daa2d..619e9f4b2 100644
--- a/doc/docs/FAQ.md
+++ b/doc/docs/FAQ.md
@@ -320,7 +320,7 @@ Only the [harmonic mean](https://en.wikipedia.org/wiki/Harmonic_mean) of eigenva
### How do I model graphene or other 2d materials with single-atom thickness?
-Typically, graphene and similar "2d" materials are mathematically represented as a [delta function](https://en.wikipedia.org/wiki/Dirac_delta_function) conductivity in Maxwell's equations because their thickness is negligible compared to the wavelength, where the conductivity is furthermore usually anisotropic (producing surface-parallel currents in response to the surface-parallel components of the electric field). In a discretized computer model like Meep, this is approximated by an anisotropic volume conductivity (or other polarizable dispersive material) whose thickness is proportional to (`1/resolution`) *and* whose amplitude is proportional `resolution`. For example, this could be represented by a one-pixel-thick [conductor](Materials.md#conductivity-and-complex) can be represented by e.g. a [`Block`](Python_User_Interface.md#block) with `size=meep.Vector3(x,y,1/resolution)` in a 3d cell, with the value of the conductivity explicitly multiplied by `resolution`.
+Typically, graphene and similar "2d" materials are mathematically represented as a [delta function](https://en.wikipedia.org/wiki/Dirac_delta_function) conductivity in Maxwell's equations because their thickness is negligible compared to the wavelength, where the conductivity is furthermore usually anisotropic (producing surface-parallel currents in response to the surface-parallel components of the electric field). In a discretized computer model like Meep, this is approximated by an anisotropic volume conductivity (or other polarizable dispersive material) whose thickness is proportional to (`1/resolution`) *and* whose amplitude is proportional `resolution`. For example, this could be represented by a one-pixel-thick [conductor](Materials.md#conductivity-and-complex) can be represented by e.g. a [`Block`](Python_User_Interface.md#block) with `size=meep.Vector3(x,y,1/resolution)` in a 3d cell, with the value of the conductivity explicitly multiplied by `resolution`.
### How do I model a continuously varying permittivity?
You can use a [material function](Python_User_Interface.md#medium) to model any arbitrary, position-dependent permittivity/permeability function $\varepsilon(\vec{r})$/$\mu(\vec{r})$ including anisotropic, [dispersive](Materials.md#material-dispersion), and [nonlinear](Materials.md#nonlinearity) media. For an example involving a non-dispersive, anisotropic material, see [Tutorial/Mode Decomposition/Diffraction Spectrum of Liquid-Crystal Polarization Gratings](Python_Tutorials/Mode_Decomposition.md#diffraction-spectrum-of-liquid-crystal-polarization-gratings). The material function construct can also be used to specify arbitrary *shapes* (e.g., curves such as parabolas, sinusoids, etc.) within: (1) the interior boundary of a [`GeometricObject`](Python_User_Interface.md#geometricobject) (e.g., `Block`, `Sphere`, `Cylinder`, etc.), (2) the entire cell via the [`material_function`](Python_User_Interface.md#material-function) parameter of the `Simulation` constructor, or (3) a combination of the two.
diff --git a/doc/docs/Installation.md b/doc/docs/Installation.md
index ead7b677b..c99eb1029 100644
--- a/doc/docs/Installation.md
+++ b/doc/docs/Installation.md
@@ -123,7 +123,7 @@ There are upcoming packages for [Meep version 1.17.1](https://github.com/NanoCom
In the meantime, the following dependencies are already available as precompiled packages: BLAS and LAPACK possibly as part of a package for [Atlas BLAS](https://en.wikipedia.org/wiki/Automatically_Tuned_Linear_Algebra_Software), Guile, MPI, and HDF5. One thing to be careful of is that many distributions split packages into two parts: one main package for the libraries and programs, and a **devel** package for [header files](https://en.wikipedia.org/wiki/Header_file) and other things needed to compile software using those libraries. You will need to install **both**. So, for example, you will probably need both a `guile` package (probably installed by default) and a `guile-dev` or `guile-devel` package (probably *not* installed by default), and similarly for HDF5 etcetera. You will probably also want to install a `libpng-dev` or `libpng-devel` package in order to compile the `h5topng` utility in [h5utils](https://github.com/NanoComp/h5utils/blob/master/README.md).
-Installation from source on macOS
+Installation from source on macOS
---------------------------------
Most macOS users will probably want to install via the Conda packages as described above. It is also possible to compile Meep from source, however.
diff --git a/doc/docs/Materials.md b/doc/docs/Materials.md
index 2c5c131cb..25e6ceda4 100644
--- a/doc/docs/Materials.md
+++ b/doc/docs/Materials.md
@@ -188,7 +188,7 @@ Similar relationships can be found for systems with more than two atomic levels
### Natural Units for Saturable Media
A conversion chart for different choices of parameter nomenclature for the saturable medium.
-
+
There is no standard convention in the literature on lasers and saturable gain media for defining the various constants in the equations above. The following are the relationships among these constants for the three different groups of work discussed in this section:
$$ \omega_n \; (\textrm{Meep}) = \omega_{ba} \; (\textrm{Boyd}) = \omega_a \; (\textrm{SALT}) $$
diff --git a/doc/docs/Python_Tutorials/Basics.md b/doc/docs/Python_Tutorials/Basics.md
index d2a9c28d7..4ab0fde4c 100644
--- a/doc/docs/Python_Tutorials/Basics.md
+++ b/doc/docs/Python_Tutorials/Basics.md
@@ -242,7 +242,7 @@ Above, we outputted the full 2d data slice at every 0.6 time units, resulting in
To create the movie above, all we really need are the *images* corresponding to each time. Images can be stored much more efficiently than raw arrays of numbers — to exploit this fact, Meep allows you to output PNG images instead of HDF5 files. In particular, instead of `output_efield_z` as above, we can use `mp.output_png(mp.Ez, "-Zc dkbluered")`, where Ez is the component to output and the `"-Zc` `dkbluered"` are options for `h5topng` of [h5utils](https://github.com/NanoComp/h5utils/blob/master/README.md) which is the program that is actually used to create the image files. That is:
```py
-sim.run(mp.at_every(0.6 , mp.output_png(mp.Ez, "-Zc dkbluered")), until=200)
+sim.run(mp.at_every(0.6 , mp.output_png(mp.Ez, "-Zc dkbluered")), until=200)
```
will output a PNG file file every 0.6 time units, which can then be combined with `convert` as above to create a movie. The movie will be similar to the one before, but not identical because of how the color scale is determined. Before, we used the `-R` option to make h5topng use a uniform color scale for all images, based on the minimum/maximum field values over all time steps. That is not possible because we output an image before knowing the field values at future time steps. Thus, what `output_png` does is to set its color scale based on the minimum/maximum field values from all *past* times — therefore, the color scale will slowly "ramp up" as the source turns on.
@@ -258,7 +258,7 @@ This will put *all* of the output files (.h5, .png, etcetera) into a newly-creat
What if we want to output an $x \times t$ slice, as above? To do this, we only really wanted the values at $y=-3.5$, and therefore we can exploit another powerful output feature — Meep allows us to output only **a subset of the computational cell**. This is done using the `in_volume` function, which like `at_every` and `to_appended` is another function that modifies the behavior of other output functions. In particular, we can do:
```
-sim.run(mp.in_volume(mp.Volume(mp.Vector3(0,-3.5), size=mp.Vector3(16,0)), mp.to_appended("ez-slice", mp.output_efield_z)), until=200)
+sim.run(mp.in_volume(mp.Volume(mp.Vector3(0,-3.5), size=mp.Vector3(16,0)), mp.to_appended("ez-slice", mp.output_efield_z)), until=200)
```
The first argument to `in_volume` is a volume which applies to all of the nested output functions. Note that `to_appended`, `at_every`, and `in_volume` are cumulative regardless of what order you put them in. This creates the output file `ez-slice.h5` which contains a dataset of size 162x330 corresponding to the desired $x \times t$ slice.
@@ -334,7 +334,7 @@ sim = mp.Simulation(cell_size=cell,
nfreq = 100 # number of frequencies at which to compute flux
# reflected flux
-refl_fr = mp.FluxRegion(center=mp.Vector3(-0.5*sx+dpml+0.5,wvg_ycen,0), size=mp.Vector3(0,2*w,0))
+refl_fr = mp.FluxRegion(center=mp.Vector3(-0.5*sx+dpml+0.5,wvg_ycen,0), size=mp.Vector3(0,2*w,0))
refl = sim.add_flux(fcen, df, nfreq, refl_fr)
# transmitted flux
@@ -348,7 +348,7 @@ The fluxes will be computed for `nfreq=100` frequencies centered on `fcen`, from
As described in [Introduction/Transmittance/Reflectance Spectra](../Introduction.md#transmittancereflectance-spectra), computing the reflection spectra requires some care because we need to separate the incident and reflected fields. We do this by first saving the Fourier-transformed fields from the normalization run. And then, before we start the second run, we load these fields, *negated*. The latter subtracts the Fourier-transformed incident fields from the Fourier transforms of the scattered fields. Logically, we might subtract these after the run, but it turns out to be more convenient to subtract the incident fields first and then accumulate the Fourier transform. All of this is accomplished with two commands which use the raw simulation data: `get_flux_data` and `load_minus_flux_data`. We run the first simulation as follows:
-```py
+```py
pt = mp.Vector3(0.5*sx-dpml-0.5,wvg_ycen)
sim.run(until_after_sources=mp.stop_when_fields_decayed(50,mp.Ez,pt,1e-3))
@@ -372,7 +372,7 @@ We need to run the second simulation which involves the waveguide bend. We reset
```py
sim.reset_meep()
-
+
geometry = [mp.Block(mp.Vector3(sx-pad,w,mp.inf), center=mp.Vector3(-0.5*pad,wvg_ycen), material=mp.Medium(epsilon=12)),
mp.Block(mp.Vector3(w,sy-pad,mp.inf), center=mp.Vector3(wvg_xcen,0.5*pad), material=mp.Medium(epsilon=12))]
@@ -387,7 +387,7 @@ refl = sim.add_flux(fcen, df, nfreq, refl_fr)
tran_fr = mp.FluxRegion(center=mp.Vector3(wvg_xcen,0.5*sy-dpml-0.5,0), size=mp.Vector3(2*w,0,0))
tran = sim.add_flux(fcen, df, nfreq, tran_fr)
-
+
# for normal run, load negated fields to subtract incident from refl. fields
sim.load_minus_flux_data(refl, straight_refl_data)
@@ -402,7 +402,7 @@ flux_freqs = mp.get_flux_freqs(refl)
```
With the flux data, we are ready to compute and plot the reflectance and transmittance. The reflectance is the reflected flux divided by the incident flux. We also have to multiply by -1 because all fluxes in Meep are computed in the positive-coordinate direction by default, and we want the flux in the $-x$ direction. The transmittance is the transmitted flux divided by the incident flux. Finally, the scattered loss is simply $1-transmittance-reflectance$. The results are plotted in the accompanying figure.
-
+
```py
wl = []
Rs = []
@@ -410,7 +410,7 @@ Ts = []
for i in range(nfreq):
wl = np.append(wl, 1/flux_freqs[i])
Rs = np.append(Rs,-bend_refl_flux[i]/straight_tran_flux[i])
- Ts = np.append(Ts,bend_tran_flux[i]/straight_tran_flux[i])
+ Ts = np.append(Ts,bend_tran_flux[i]/straight_tran_flux[i])
if mp.am_master():
plt.figure()
@@ -469,7 +469,7 @@ def main(args):
fcen = 0.5*(fmin+fmax) # center frequency
df = fmax-fmin # frequency width
nfreq = 50 # number of frequency bins
-
+
# rotation angle (in degrees) of source: CCW around Y axis, 0 degrees along +Z axis
theta_r = math.radians(args.theta)
@@ -481,7 +481,7 @@ def main(args):
dimensions = 1
else:
dimensions = 3
-
+
sources = [mp.Source(mp.GaussianSource(fcen,fwidth=df),
component=mp.Ex,
center=mp.Vector3(0,0,-0.5*sz+dpml))]
@@ -495,7 +495,7 @@ def main(args):
refl_fr = mp.FluxRegion(center=mp.Vector3(0,0,-0.25*sz))
refl = sim.add_flux(fcen, df, nfreq, refl_fr)
-
+
sim.run(until_after_sources=mp.stop_when_fields_decayed(50, mp.Ex, mp.Vector3(0,0,-0.5*sz+dpml), 1e-9))
empty_flux = mp.get_fluxes(refl)
@@ -522,10 +522,10 @@ def main(args):
refl_flux = mp.get_fluxes(refl)
freqs = mp.get_flux_freqs(refl)
-
+
for i in range(nfreq):
print("refl:, {}, {}, {}, {}".format(k.x,1/freqs[i],math.degrees(math.asin(k.x/freqs[i])),-refl_flux[i]/empty_flux[i]))
-
+
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('-res', type=int, default=200, help='resolution (default: 200 pixels/um)')
@@ -882,7 +882,7 @@ for n in range(npts):
E[n,:] = [np.conj(ff[j]) for j in range(3)]
H[n,:] = [ff[j+3] for j in range(3)]
-# compute Poynting flux Pr in the radial direction. At large r,
+# compute Poynting flux Pr in the radial direction. At large r,
# all of the flux is radial so we can simply compute the magnitude of the Poynting vector.
Px = np.real(np.multiply(E[:,1],H[:,2])-np.multiply(E[:,2],H[:,1]))
Py = np.real(np.multiply(E[:,2],H[:,0])-np.multiply(E[:,0],H[:,2]))
@@ -1078,7 +1078,7 @@ Finally, we are ready to run the simulation. The basic idea is to run until the
sim = mp.Simulation(cell_size=mp.Vector3(sxy, sxy),
geometry=[c1, c2],
sources=[src],
- resolution=10,
+ resolution=10,
boundary_layers=[mp.PML(dpml)])
sim.run(mp.at_beginning(mp.output_epsilon),
diff --git a/doc/docs/Python_Tutorials/Local_Density_of_States.md b/doc/docs/Python_Tutorials/Local_Density_of_States.md
index 5ceaae47e..fb66cb29b 100644
--- a/doc/docs/Python_Tutorials/Local_Density_of_States.md
+++ b/doc/docs/Python_Tutorials/Local_Density_of_States.md
@@ -25,7 +25,7 @@ In 3D, each simulation uses three [mirror symmetries](../Exploiting_Symmetry.md#
In cylindrical coordinates, the dipole is polarized in the $r$ direction. Setting up a linearly polarized source in cylindrical coordiantes is demonstrated in [Tutorial/Cylindrical Coordinates/Scattering Cross Section of a Finite Dielectric Cylinder](Cylindrical_Coordinates.md#scattering-cross-section-of-a-finite-dielectric-cylinder). However, all that is necessary in this example which involves a single point dipole rather than a planewave is one simulation involving an $E_r$ source at $r=0$ with $m=-1$. This is actually a circularly polarized source but this is sufficient because the $m=+1$ simulation produces an identical result to the $m=-1$ simulation. It is therefore not necessary to perform two separate simulations for $m=\pm 1$ in order to average the results from the left- and right-circularly polarized sources.
-One important parameter when setting up this calculation is the grid resolution.
+One important parameter when setting up this calculation is the grid resolution.
A key feature of the LDOS in this geometry is that it experiences discontinuities, called [Van Hove singularities](https://en.wikipedia.org/wiki/Van_Hove_singularity), any time the cavity thickness/λ passes through the cutoff for a waveguide mode, which occurs for cavity-thickness/λ values of 0.5, 1.5, 2.5, etc. (Mathematically, Van Hove singularities depend strongly on the dimensionality — it is a discontinuity in this case because the waves are propagating along two dimensions, i.e. each cutoff is a minimum in the 2d dispersion relation $\omega(k_x,k_y)$.) This discontinuity also means that the LDOS *exactly at* the cutoff thickness/λ is ill-defined and convergence with discretization can be problematic at this point. (In consequence, the LDOS *exactly* at the Van Hove discontinuity can behave erratically with resolution, and should be viewed with caution.)
diff --git a/doc/docs/Python_Tutorials/Mode_Decomposition.md b/doc/docs/Python_Tutorials/Mode_Decomposition.md
index d3e44ebe6..4565f3cb5 100644
--- a/doc/docs/Python_Tutorials/Mode_Decomposition.md
+++ b/doc/docs/Python_Tutorials/Mode_Decomposition.md
@@ -340,7 +340,7 @@ sx = dpml+dsub+gh+dpad+dpml
sy = gp
cell_size = mp.Vector3(sx,sy,0)
-pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]
+pml_layers = [mp.PML(thickness=dpml,direction=mp.X)]
wvl = 0.5 # center wavelength
fcen = 1/wvl # center frequency
diff --git a/doc/docs/Python_Tutorials/Multilevel_Atomic_Susceptibility.md b/doc/docs/Python_Tutorials/Multilevel_Atomic_Susceptibility.md
index 64fca8bf6..65825035a 100644
--- a/doc/docs/Python_Tutorials/Multilevel_Atomic_Susceptibility.md
+++ b/doc/docs/Python_Tutorials/Multilevel_Atomic_Susceptibility.md
@@ -101,7 +101,7 @@ $$ \mathbf{E} \; (\textrm{SALT}) = \frac{2 |\theta|}{\hbar \sqrt{\gamma_\perp \g
For two-level gain media, $\gamma_\parallel = \gamma_{12} + \gamma_{21}$. We can also verify that the system is not exhibiting relaxation oscillations by directly plotting the electric field as a function of time and looking for very long time-scale oscillations. In the continuum limit, these modes would appear as Dirac delta functions in the spectra. The discretized model, however, produces peaks with finite width. Thus, we need to integrate a fixed number of points around each peak to calculate the correct modal intensity.
-By varying $N_0$ or the pumping rate $R_p$, we can change the total gain available in the cavity. This is used to find the laser's modal intensities as a function of the strength of the gain. We can compare the simulated modal intensity with SALT as well as an independent FDTD solver based on the Maxwell-Bloch equations. All three methods produce results with good agreement close to the first lasing threshold.
+By varying $N_0$ or the pumping rate $R_p$, we can change the total gain available in the cavity. This is used to find the laser's modal intensities as a function of the strength of the gain. We can compare the simulated modal intensity with SALT as well as an independent FDTD solver based on the Maxwell-Bloch equations. All three methods produce results with good agreement close to the first lasing threshold.
@@ -113,4 +113,3 @@ Further increasing the gain continues to yield good agreement.
-
diff --git a/doc/docs/Python_Tutorials/Optical_Forces.md b/doc/docs/Python_Tutorials/Optical_Forces.md
index 39433bd3f..28131a30c 100644
--- a/doc/docs/Python_Tutorials/Optical_Forces.md
+++ b/doc/docs/Python_Tutorials/Optical_Forces.md
@@ -29,12 +29,12 @@ import numpy as np
import matplotlib.pyplot as plt
resolution = 40 # pixels/μm
-
+
Si = mp.Medium(index=3.45)
dpml = 1.0
pml_layers = [mp.PML(dpml)]
-
+
sx = 5
sy = 3
cell = mp.Vector3(sx+2*dpml,sy+2*dpml,0)
diff --git a/doc/docs/Python_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md b/doc/docs/Python_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md
index e1d291ce6..3fac28958 100644
--- a/doc/docs/Python_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md
+++ b/doc/docs/Python_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md
@@ -37,7 +37,7 @@ Next, we'll define some parameters of our structure as in the figure above. All
```py
resolution = 20 # pixels/um
-
+
eps = 13 # dielectric constant of waveguide
w = 1.2 # width of waveguide
r = 0.36 # radius of holes
@@ -206,7 +206,7 @@ The structure is exactly the same as above, and only the sources and analysis ar
```py
if args.resonant_modes:
...new sources and run command...
-else:
+else:
...sources and run from above, to get spectrum...
```
@@ -260,7 +260,7 @@ unix% convert holey-wvg-cavity-hz-*.png holey-wvg-cavity-hz.gif
-The mode has a frequency of 0.235, just as we saw in the transmission spectrum, and a $Q$ of 373 which we could have also found by fitting the transmission spectrum. This lifetime $Q$ includes two independent decay channels: light can decay from the cavity into the waveguide with lifetime $Q_w$, or it can radiate from the cavity into the surrounding air with lifetime $Q_r$, where
+The mode has a frequency of 0.235, just as we saw in the transmission spectrum, and a $Q$ of 373 which we could have also found by fitting the transmission spectrum. This lifetime $Q$ includes two independent decay channels: light can decay from the cavity into the waveguide with lifetime $Q_w$, or it can radiate from the cavity into the surrounding air with lifetime $Q_r$, where
$$\frac{1}{Q} = \frac{1}{Q_w} + \frac{1}{Q_r}$$
@@ -387,7 +387,7 @@ unix% grep freqs: holey-wvg-bands.out > fre.dat
unix% grep freqs-im: holey-wvg-bands.out > fim.dat
```
-Plotting the real parts of ω, where the light cone ω > *ck* is shaded gray, we find:
+Plotting the real parts of ω, where the light cone ω > *ck* is shaded gray, we find:
diff --git a/doc/docs/Python_User_Interface.md b/doc/docs/Python_User_Interface.md
index 3df3c2f2d..a6959c85f 100644
--- a/doc/docs/Python_User_Interface.md
+++ b/doc/docs/Python_User_Interface.md
@@ -80,7 +80,7 @@ control various parameters of the Meep computation.
-
+
@@ -356,7 +356,7 @@ use. See also [SWIG Wrappers](#swig-wrappers).
-
+
diff --git a/doc/docs/Scheme_Tutorials/Basics.md b/doc/docs/Scheme_Tutorials/Basics.md
index e45c00837..7fd12258f 100644
--- a/doc/docs/Scheme_Tutorials/Basics.md
+++ b/doc/docs/Scheme_Tutorials/Basics.md
@@ -108,7 +108,7 @@ This will create `eps-000000.00.png`, where the `-S3` increases the image scale
unix% h5topng -S3 -Zc dkbluered -a yarg -A eps-000000.00.h5 ez-000200.00.h5
```
-Briefly, the `-Zc dkbluered` makes the color scale go from dark blue (negative) to white (zero) to dark red (positive), and the `-a/-A` options overlay the dielectric function as light gray contours. This results in the image:
+Briefly, the `-Zc dkbluered` makes the color scale go from dark blue (negative) to white (zero) to dark red (positive), and the `-a/-A` options overlay the dielectric function as light gray contours. This results in the image:

@@ -433,7 +433,7 @@ The simulation script is [examples/refl-angular.ctl](https://github.com/NanoComp
(define df (- fmax fmin)) ; frequency width of source
(define-param nfreq 50) ; number of frequency bins
-; rotation angle (in degrees) of source: CCW around Y axis, 0 degrees along +Z axis
+; rotation angle (in degrees) of source: CCW around Y axis, 0 degrees along +Z axis
(define-param theta 0)
(define theta-r (deg->rad theta))
diff --git a/doc/docs/Scheme_Tutorials/Casimir_Forces.md b/doc/docs/Scheme_Tutorials/Casimir_Forces.md
index c0e6b2cea..109d0b486 100644
--- a/doc/docs/Scheme_Tutorials/Casimir_Forces.md
+++ b/doc/docs/Scheme_Tutorials/Casimir_Forces.md
@@ -526,4 +526,3 @@ If you examine periodic-sphere-plate.ctl in the example above, you will notice t
As discussed in Part I, the temporal convergence of the force $F(t)$ can be accelerated by picking the right value of the global conductivity $\sigma$. $\sigma$ should be high enough to dampen out oscillations in $F(t)$, but on the other hand a high conductivity reduces the velocity of waves propagating in the medium (see Part I), slowing convergence. We've found that if the characteristic separation between two objects (e.g. the distance between parallel plates) in vacuum is $d$, then picking $\sigma ~\sim~ 0.5/d$. This is illustrated in the function `scale-sigma-T` in periodic-sphere-plate.ctl above. Both the value of $\sigma$ and the total runtime $T$ of the simulation are adjusted depending on the separation between the objects.
If the dielectric of the medium is non-zero, then for non-dispersive media the optimal value of $\sigma$ follows from group velocity considerations. For dispersive media, the convergence should be experimented with to determine the best value. Generally, as the dielectric $\epsilon$ of the medium increases, $\sigma$ should decrease.
-
diff --git a/doc/docs/Scheme_Tutorials/Custom_Source.md b/doc/docs/Scheme_Tutorials/Custom_Source.md
index 88c7422f9..7efb6fe62 100644
--- a/doc/docs/Scheme_Tutorials/Custom_Source.md
+++ b/doc/docs/Scheme_Tutorials/Custom_Source.md
@@ -172,4 +172,4 @@ One situation in which you may need to perform brute-force Monte Carlo simulatio
*Note regarding convergence properties of Method 2:* In this demonstration, the number of point dipoles used in Method 2 is one per pixel. However, because this example is a unit-cell calculation involving *periodic* boundaries, the number of point dipoles (equivalent to the number of simulations) that are actually necessary to obtain results with sufficient accuracy can be significantly reduced. For smooth periodic functions, it is well known that a [trapezoidal rule](https://en.wikipedia.org/wiki/Trapezoidal_rule) converges quite fast — generally even faster than a cosine-series expansion and comparable to a cosine+sine Fourier series. See these [tutorial notes](http://math.mit.edu/~stevenj/trap-iap-2011.pdf) for the mathematical details. In this example, placing one dipole at every fifth pixel for a total of 15 rather than 75 simulations produces nearly equivalent results for the flux spectrum. More generally, an alternative approach for Method 2 would be to sample a set of dipole points and repeatedly double the sampling density until it converges. Sampling every grid point is usually not necessary.
-*Note regarding polarization:* The previous demonstration involved a single-polarization source. For random polarizations, three separate simulations (for $\mathcal{J}_x$, $\mathcal{J}_y$, and $\mathcal{J}_z$) are required. Since the different polarizations are uncorrelated, the results (i.e., the flux spectrum) from each set of single-polarization simulations (which, in general, will have different convergence properties) are then summed in post processing. If the emitters involve *anisotropic* polarizability then the polarizations are correlated. However, in this case choosing the polarizations to correspond to the three principal axes will again make them uncorrelated.
\ No newline at end of file
+*Note regarding polarization:* The previous demonstration involved a single-polarization source. For random polarizations, three separate simulations (for $\mathcal{J}_x$, $\mathcal{J}_y$, and $\mathcal{J}_z$) are required. Since the different polarizations are uncorrelated, the results (i.e., the flux spectrum) from each set of single-polarization simulations (which, in general, will have different convergence properties) are then summed in post processing. If the emitters involve *anisotropic* polarizability then the polarizations are correlated. However, in this case choosing the polarizations to correspond to the three principal axes will again make them uncorrelated.
diff --git a/doc/docs/Scheme_Tutorials/Cylindrical_Coordinates.md b/doc/docs/Scheme_Tutorials/Cylindrical_Coordinates.md
index a15d15f1c..4b6fcc95d 100644
--- a/doc/docs/Scheme_Tutorials/Cylindrical_Coordinates.md
+++ b/doc/docs/Scheme_Tutorials/Cylindrical_Coordinates.md
@@ -551,4 +551,4 @@ Shown below is the far-field energy-density profile around the focal length for

-
\ No newline at end of file
+
diff --git a/doc/docs/Scheme_Tutorials/Local_Density_of_States.md b/doc/docs/Scheme_Tutorials/Local_Density_of_States.md
index ec91d66ca..f900cae5b 100644
--- a/doc/docs/Scheme_Tutorials/Local_Density_of_States.md
+++ b/doc/docs/Scheme_Tutorials/Local_Density_of_States.md
@@ -85,4 +85,4 @@ We run several simulations spanning a number of different notch sizes and plot t

-
\ No newline at end of file
+
diff --git a/doc/docs/Scheme_Tutorials/Multilevel_Atomic_Susceptibility.md b/doc/docs/Scheme_Tutorials/Multilevel_Atomic_Susceptibility.md
index fc6a08009..490369823 100644
--- a/doc/docs/Scheme_Tutorials/Multilevel_Atomic_Susceptibility.md
+++ b/doc/docs/Scheme_Tutorials/Multilevel_Atomic_Susceptibility.md
@@ -57,7 +57,7 @@ The term in parenthesis on the right-hand side is the definition of $D_0$ in nor
(initial-populations N0)))))
(set! geometry (list (make block (center 0 0 (+ (* -0.5 sz) (* 0.5 Lcav)))
- (size infinity infinity Lcav) (material two-level))))
+ (size infinity infinity Lcav) (material two-level))))
```
Definition of the two-level medium involves the `multilevel-atom` sub-class of the `E-susceptibilities` material type. Each radiative and non-radiative `transition` is specified separately. Note that internally, Meep treats `pumping-rate` and `transition-rate` identically, and you can use them interchangeably, but it is important to specify the `from-level` and `to-level` parameters correctly, otherwise the results will be undefined. The choice of these parameters requires some care. For example, choosing a pumping rate that lies far beyond the first lasing threshold will yield large inversion, and thus large gain, which is not realistic, as most physical devices will overheat before reaching such a regime. Meep will still produce accurate results in this regime though. Additionally, choosing the total simulation time is especially important when operating near the threshold of a lasing mode, as the fields contain relaxation oscillations and require sufficient time to reach steady state.
@@ -90,7 +90,7 @@ $$ \mathbf{E} \; (\textrm{SALT}) = \frac{2 |\theta|}{\hbar \sqrt{\gamma_\perp \g
For two-level gain media, $\gamma_\parallel = \gamma_{12} + \gamma_{21}$. We can also verify that the system is not exhibiting relaxation oscillations by directly plotting the electric field as a function of time and looking for very long time-scale oscillations. In the continuum limit, these modes would appear as Dirac delta functions in the spectra. The discretized model, however, produces peaks with finite width. Thus, we need to integrate a fixed number of points around each peak to calculate the correct modal intensity.
-By varying $N_0$ or the pumping rate $R_p$, we can change the total gain available in the cavity. This is used to find the laser's modal intensities as a function of the strength of the gain. We can compare the simulated modal intensity with SALT as well as an independent FDTD solver based on the Maxwell-Bloch equations. All three methods produce results with good agreement close to the first lasing threshold.
+By varying $N_0$ or the pumping rate $R_p$, we can change the total gain available in the cavity. This is used to find the laser's modal intensities as a function of the strength of the gain. We can compare the simulated modal intensity with SALT as well as an independent FDTD solver based on the Maxwell-Bloch equations. All three methods produce results with good agreement close to the first lasing threshold.

@@ -100,4 +100,4 @@ Further increasing the gain continues to yield good agreement.

-
\ No newline at end of file
+
diff --git a/doc/docs/Scheme_Tutorials/Optical_Forces.md b/doc/docs/Scheme_Tutorials/Optical_Forces.md
index 2dd1529e7..d28fc2323 100644
--- a/doc/docs/Scheme_Tutorials/Optical_Forces.md
+++ b/doc/docs/Scheme_Tutorials/Optical_Forces.md
@@ -188,4 +188,4 @@ function force = compute_force(data)
force = -1./f_avg .* df/ds .* 1./vg_avg;
return
endfunction
-```
\ No newline at end of file
+```
diff --git a/doc/docs/Scheme_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md b/doc/docs/Scheme_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md
index b82a4c24c..9f17e834c 100644
--- a/doc/docs/Scheme_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md
+++ b/doc/docs/Scheme_Tutorials/Resonant_Modes_and_Transmission_in_a_Waveguide_Cavity.md
@@ -242,7 +242,7 @@ unix% convert holey-wvg-cavity-hz-*.png holey-wvg-cavity-hz.gif

-The mode has a frequency of 0.235, just as we saw in the transmission spectrum, and a $Q$ of 373 which we could have also found by fitting the transmission spectrum. This lifetime $Q$ includes two independent decay channels: light can decay from the cavity into the waveguide with lifetime $Q_w$, or it can radiate from the cavity into the surrounding air with lifetime $Q_r$, where
+The mode has a frequency of 0.235, just as we saw in the transmission spectrum, and a $Q$ of 373 which we could have also found by fitting the transmission spectrum. This lifetime $Q$ includes two independent decay channels: light can decay from the cavity into the waveguide with lifetime $Q_w$, or it can radiate from the cavity into the surrounding air with lifetime $Q_r$, where
$$\frac{1}{Q} = \frac{1}{Q_w} + \frac{1}{Q_r}$$
@@ -363,7 +363,7 @@ unix% grep freqs: holey-wvg-bands.out > fre.dat
unix% grep freqs-im: holey-wvg-bands.out > fim.dat
```
-Plotting the real parts of ω, where the light cone ω > *ck* is shaded gray, we find:
+Plotting the real parts of ω, where the light cone ω > *ck* is shaded gray, we find:

diff --git a/doc/docs/Subpixel_Smoothing.md b/doc/docs/Subpixel_Smoothing.md
index e9fab5122..c03f28e67 100644
--- a/doc/docs/Subpixel_Smoothing.md
+++ b/doc/docs/Subpixel_Smoothing.md
@@ -85,7 +85,7 @@ for rad in np.arange(1.800,2.001,0.005):
radius=rad,
height=mp.inf,
center=mp.Vector3())]
-
+
sim = mp.Simulation(cell_size=mp.Vector3(sxy,sxy),
geometry=geometry,
eps_averaging=True,
diff --git a/doc/docs/Synchronizing_the_Magnetic_and_Electric_Fields.md b/doc/docs/Synchronizing_the_Magnetic_and_Electric_Fields.md
index d1a4cde8b..a230a2f7d 100644
--- a/doc/docs/Synchronizing_the_Magnetic_and_Electric_Fields.md
+++ b/doc/docs/Synchronizing_the_Magnetic_and_Electric_Fields.md
@@ -41,4 +41,4 @@ it will output the same quantities, but more accurately because the fields will
Alternatively, if you want to synchronize the magnetic and electric fields in some context other than that of a step function, e.g. you are doing some computation like `integrate_field_function` (Python) or `integrate-field-function` (Scheme) outside of the timestepping, you can instead call two lower-level functions. Before doing your computations, you should call `meep.Simulation.fields.synchronize_magnetic_fields()` (Python) or `(meep-fields-synchronize-magnetic-fields fields)` (Scheme) to synchronize the magnetic fields with the electric fields, and after your computation you should call `meep.Simulation.fields.restore_magnetic_fields()` (Python) or `(meep-fields-restore-magnetic-fields fields)` (Scheme) to restore the fields to their unsynchronized state for timestepping. In the C++ interface, these correspond to `fields::synchronize_magnetic_fields` and `fields::restore_magnetic_fields`. If you *don't* call `meep.Simulation.fields.restore_magnetic_fields` or `meep-fields-restore-magnetic-fields` before timestepping, then the fields will be re-synchronized after *every* timestep, which will greatly increase the cost of timestepping.
-In future versions, the fields may be synchronized automatically whenever you output something like the Poynting vector or do another field computation that involves both magnetic and electric fields, but currently you must do this manually (Issue [#719](https://github.com/NanoComp/meep/issues/719)). In any case, Meep does no additional work when you nest synchronization calls, so it is harmless to insert redundant field synchronizations. The `flux_in_box` (Python) or `flux-in-box` (Scheme) and `field_energy_in_box` (Python) or `field-energy-in-box` (Scheme) routines are already automatically synchronized, however.
\ No newline at end of file
+In future versions, the fields may be synchronized automatically whenever you output something like the Poynting vector or do another field computation that involves both magnetic and electric fields, but currently you must do this manually (Issue [#719](https://github.com/NanoComp/meep/issues/719)). In any case, Meep does no additional work when you nest synchronization calls, so it is harmless to insert redundant field synchronizations. The `flux_in_box` (Python) or `flux-in-box` (Scheme) and `field_energy_in_box` (Python) or `field-energy-in-box` (Scheme) routines are already automatically synchronized, however.
diff --git a/doc/docs/The_Run_Function_Is_Not_A_Loop.md b/doc/docs/The_Run_Function_Is_Not_A_Loop.md
index 258bd6681..e7fb49c04 100644
--- a/doc/docs/The_Run_Function_Is_Not_A_Loop.md
+++ b/doc/docs/The_Run_Function_Is_Not_A_Loop.md
@@ -36,7 +36,7 @@ sim.run(meep.output_efield_z, print("Hello World!"), until=200)
**Scheme**
```scm
-(run-until 200 output-efield-z (print "Hello World!\n"))
+(run-until 200 output-efield-z (print "Hello World!\n"))
```
**This is wrong.** It will output "Hello World!" *once*, then give an error. What is going on? The problem is that you are thinking of `run` (Python) or `run-until` (Scheme) in the wrong way, as if it were a loop:
@@ -104,4 +104,4 @@ sim.run(meep.output_efield_z, lambda sim: print("Hello World!"), until=200)
(run-until 200 output-efield-z (lambda () (print "Hello World!\n")))
```
-In Python, `lambda sim: ...` defines a function of one argument `sim`. In Scheme, `(lambda () ...)` defines a function of no arguments `()`. Both functions, when called, execute the `...` statements.
\ No newline at end of file
+In Python, `lambda sim: ...` defines a function of one argument `sim`. In Scheme, `(lambda () ...)` defines a function of no arguments `()`. Both functions, when called, execute the `...` statements.
diff --git a/doc/docs/Yee_Lattice.md b/doc/docs/Yee_Lattice.md
index 7464961c9..34864e30d 100644
--- a/doc/docs/Yee_Lattice.md
+++ b/doc/docs/Yee_Lattice.md
@@ -30,4 +30,4 @@ In two dimensions, the arrangement is similar except that we set $\hat{\mathbf{e
The consequence of the Yee lattice is that, whenever you need to access field components, e.g. to find the energy density $(\mathbf{E}^* \cdot \mathbf{D} + |\mathbf{H}|^2)/2$ or the flux $\textrm{Re}\, \mathbf{E}^* \times \mathbf{H}$, then the components need to be **interpolated** to some common point in order to remain second-order accurate. Meep automatically does this [interpolation](Introduction.md#the-illusion-of-continuity) for you wherever necessary — in particular, whenever you compute [energy density](Python_User_Interface.md#energy-density-spectra) or [Poynting flux](Python_User_Interface.md#flux-spectra), or whenever you [output a field to a file](Python_User_Interface.md#output-functions), it is stored at the centers of each grid voxel: $(i+0.5,j+0.5,k+0.5)$.
-In a Meep simulation, the coordinates of the Yee lattice can be obtained using a [field function](Field_Functions.md#coordinates-of-the-yee-grid).
\ No newline at end of file
+In a Meep simulation, the coordinates of the Yee lattice can be obtained using a [field function](Field_Functions.md#coordinates-of-the-yee-grid).
diff --git a/doc/docs/mdx_math.py b/doc/docs/mdx_math.py
index 75ecd3238..ef2cfc0fd 100644
--- a/doc/docs/mdx_math.py
+++ b/doc/docs/mdx_math.py
@@ -1,57 +1,60 @@
-# -*- coding: utf-8 -*-
-
-'''
+"""
Math extension for Python-Markdown
==================================
Adds support for displaying math formulas using [MathJax](http://www.mathjax.org/).
Author: 2015, Dmitry Shachnev .
-'''
-
+"""
import markdown
+
class MathExtension(markdown.extensions.Extension):
def __init__(self, *args, **kwargs):
self.config = {
- 'enable_dollar_delimiter': [False, 'Enable single-dollar delimiter'],
+ "enable_dollar_delimiter": [False, "Enable single-dollar delimiter"],
}
- super(MathExtension, self).__init__(*args, **kwargs)
+ super().__init__(*args, **kwargs)
def extendMarkdown(self, md, md_globals):
def handle_match_inline(m):
- node = markdown.util.etree.Element('script')
- node.set('type', 'math/tex')
+ node = markdown.util.etree.Element("script")
+ node.set("type", "math/tex")
node.text = markdown.util.AtomicString(m.group(3))
return node
def handle_match(m):
- node = markdown.util.etree.Element('script')
- node.set('type', 'math/tex; mode=display')
- if '\\begin' in m.group(2):
- node.text = markdown.util.AtomicString(m.group(2) + m.group(4) + m.group(5))
+ node = markdown.util.etree.Element("script")
+ node.set("type", "math/tex; mode=display")
+ if "\\begin" in m.group(2):
+ node.text = markdown.util.AtomicString(
+ m.group(2) + m.group(4) + m.group(5)
+ )
else:
node.text = markdown.util.AtomicString(m.group(3))
return node
configs = self.getConfigs()
inlinemathpatterns = (
- markdown.inlinepatterns.Pattern(r'(? 50:
params = []
for idx, param in enumerate(parameters):
- params.append('('+str(param) if idx==0 else ' '*indent+param)
- param_str = ',\n'.join(params)
- param_str += ')'
+ params.append(
+ "(" + str(param) if idx == 0 else " " * indent + param
+ )
+ param_str = ",\n".join(params)
+ param_str += ")"
return param_str
except ValueError as ex:
- print("Warning: falling back to old parameter extraction method for {}\n{}".format(self.name, ex))
+ print(
+ "Warning: falling back to old parameter extraction method for {}\n{}".format(
+ self.name, ex
+ )
+ )
except OSError:
# This happens when there is no source for some function/class (like NamedTuples)
pass
@@ -164,12 +169,13 @@ def get_parameters(self, indent):
parameters = list(self.sig.parameters.values())
params = []
for idx, param in enumerate(parameters):
- params.append('('+str(param) if idx==0 else ' '*indent+str(param))
- param_str = ',\n'.join(params)
- param_str += ')'
+ params.append(
+ "(" + str(param) if idx == 0 else " " * indent + str(param)
+ )
+ param_str = ",\n".join(params)
+ param_str += ")"
return param_str
-
def get_parameters_from_ast(self):
# Use Python's ast module to parse the function's code and pull out parameter names and
# the text for default values.
@@ -185,13 +191,15 @@ def parse_name(node):
func = module.body[0]
if not isinstance(func, ast.FunctionDef):
- raise ValueError('Unsupported node type: {}'.format(type(func)))
+ raise ValueError(f"Unsupported node type: {type(func)}")
# Get the param name and defaults together into a list of tuples
args = reversed(func.args.args)
defaults = reversed(func.args.defaults)
iter = itertools.zip_longest(args, defaults, fillvalue=None)
- parameters = [(parse_name(name), default) for name, default in reversed(list(iter))]
+ parameters = [
+ (parse_name(name), default) for name, default in reversed(list(iter))
+ ]
# Convert each of the parameters (name, ast.node) to valid Python parameter
# code, like what would have been in the actual source code.
@@ -201,13 +209,13 @@ def parse_name(node):
transformed.append(name)
else:
default = self.transform_node(name, node)
- transformed.append("{}={}".format(name, default))
+ transformed.append(f"{name}={default}")
# Check for vararg (like *foo) and kwarg (like **bar) parameters
if func.args.vararg is not None:
- transformed.append('*{}'.format(func.args.vararg.arg))
+ transformed.append(f"*{func.args.vararg.arg}")
if func.args.kwarg is not None:
- transformed.append('**{}'.format(func.args.kwarg.arg))
+ transformed.append(f"**{func.args.kwarg.arg}")
return transformed
@@ -239,42 +247,41 @@ def transform_node(self, name, node):
# print('Using inspect module for {}={} in {}'.format(name, default, self.name))
return default
-
def check_other_signatures(self, docstring):
- """ Search for alternate function signatures in the docstring """
- SIG = '##sig'
- SIG_KEEP = '##sig-keep'
- other_signatures = ''
+ """Search for alternate function signatures in the docstring"""
+ SIG = "##sig"
+ SIG_KEEP = "##sig-keep"
+ other_signatures = ""
if SIG in docstring or SIG_KEEP in docstring:
other_sigs = []
docstring_lines = []
- for line in docstring.split('\n'):
+ for line in docstring.split("\n"):
if line.endswith(SIG):
- line = line.replace(SIG, '')
+ line = line.replace(SIG, "")
line = line.strip()
- line = line.replace('`', '')
+ line = line.replace("`", "")
other_sigs.append(line)
elif line.endswith(SIG_KEEP):
- line = line.replace(SIG_KEEP, '')
+ line = line.replace(SIG_KEEP, "")
line = line.strip()
docstring_lines.append(line)
- line = line.replace('`', '')
+ line = line.replace("`", "")
other_sigs.append(line)
else:
docstring_lines.append(line)
- docstring = '\n'.join(docstring_lines)
- other_signatures = ''.join(['\ndef {}:'.format(item) for item in other_sigs])
+ docstring = "\n".join(docstring_lines)
+ other_signatures = "".join([f"\ndef {item}:" for item in other_sigs])
return docstring, other_signatures
def create_markdown(self):
# pull relevant attributes into local variables
function_name = self.name
- function_name_escaped = function_name.replace('_', '\\_')
- docstring = self.docstring if self.docstring else ''
+ function_name_escaped = function_name.replace("_", "\\_")
+ docstring = self.docstring if self.docstring else ""
parameters = self.get_parameters(len(function_name) + 1)
docstring, other_signatures = self.check_other_signatures(docstring)
@@ -287,20 +294,21 @@ class MethodItem(FunctionItem):
An introspected item that is a method of a class.
Mostly the same as a FunctionItem, but can do extra stuff for methods if needed.
"""
- template_name = 'method_template.md'
+
+ template_name = "method_template.md"
def __init__(self, name, obj, klass):
- super(MethodItem, self).__init__(name, obj)
+ super().__init__(name, obj)
self.klass = klass
self.method_name = name
- self.name = '{}.{}'.format(klass.name, name)
+ self.name = f"{klass.name}.{name}"
def create_markdown(self):
# pull relevant attributes into local variables
class_name = self.klass.name
method_name = self.method_name
- method_name_escaped = method_name.replace('_', '\\_')
- docstring = self.docstring if self.docstring else ''
+ method_name_escaped = method_name.replace("_", "\\_")
+ docstring = self.docstring if self.docstring else ""
parameters = self.get_parameters(4 + len(method_name) + 1)
docstring, other_signatures = self.check_other_signatures(docstring)
@@ -312,10 +320,11 @@ class ClassItem(Item):
"""
An introspected item that is a Class.
"""
- template_name = 'class_template.md'
+
+ template_name = "class_template.md"
def __init__(self, name, obj):
- super(ClassItem, self).__init__(name, obj)
+ super().__init__(name, obj)
self.add_methods()
def add_methods(self):
@@ -323,40 +332,45 @@ def add_methods(self):
# inherited members
def _predicate(value):
if inspect.isfunction(value):
- class_name = value.__qualname__.split('.')[0]
+ class_name = value.__qualname__.split(".")[0]
return class_name == self.name
else:
return False
self.methods = []
for name, member in inspect.getmembers(self.obj, _predicate):
- if inspect.isfunction(member): # unbound methods are just functions at this point
+ if inspect.isfunction(
+ member
+ ): # unbound methods are just functions at this point
self.methods.append(MethodItem(name, member, self))
def create_markdown(self):
# pull relevant attributes into local variables
class_name = self.name
- docstring = self.docstring if self.docstring else ''
+ docstring = self.docstring if self.docstring else ""
base_classes = [base.__name__ for base in self.obj.__bases__]
- base_classes = ', '.join(base_classes)
+ base_classes = ", ".join(base_classes)
# Substitute values into the template
docs = dict()
class_doc = self.template.format(**locals())
docs[class_name] = class_doc
- docs[class_name+'[all-methods]'] = class_doc + '\n' + self.create_method_markdown(False)
- docs[class_name+'[methods-with-docstrings]'] = class_doc + '\n' + self.create_method_markdown(True)
+ docs[class_name + "[all-methods]"] = (
+ class_doc + "\n" + self.create_method_markdown(False)
+ )
+ docs[class_name + "[methods-with-docstrings]"] = (
+ class_doc + "\n" + self.create_method_markdown(True)
+ )
return docs
-
def create_method_markdown(self, only_with_docstrings=True):
method_docs = []
if self.methods:
# reorder self.methods so __init__ comes first, if it isn't already
methods = self.methods[:]
for idx, meth in enumerate(self.methods):
- if meth.name == '__init__':
+ if meth.name == "__init__":
if idx != 0:
methods.remove(meth)
methods.insert(0, meth)
@@ -365,22 +379,24 @@ def create_method_markdown(self, only_with_docstrings=True):
for item in methods:
if only_with_docstrings and not item.docstring:
continue
- if not check_excluded(item.name) and \
- not check_excluded('{}.{}'.format(self.name, item.name)):
- doc = item.create_markdown()
- method_docs.append(doc)
+ if not check_excluded(item.name) and not check_excluded(
+ f"{self.name}.{item.name}"
+ ):
+ doc = item.create_markdown()
+ method_docs.append(doc)
# join the methods into a single string
- method_docs = '\n'.join(method_docs)
+ method_docs = "\n".join(method_docs)
return method_docs
-#----------------------------------------------------------------------------
+# ----------------------------------------------------------------------------
+
def check_excluded(name):
if name in EXCLUDES:
return True
- if name.startswith('_') and not (name.startswith('__') and name.endswith('__')):
+ if name.startswith("_") and not (name.startswith("__") and name.endswith("__")):
# It's probably meant to be private
return True
return False
@@ -428,27 +444,25 @@ def update_api_document(doc_items):
to DESTDOC.
"""
# read
- with open(SRCDOC, 'r') as f:
+ with open(SRCDOC) as f:
srcdoc = f.read()
# manipulate
for name, doc in doc_items.items():
- tag = '@@ {} @@'.format(name)
+ tag = f"@@ {name} @@"
if tag in srcdoc:
srcdoc = srcdoc.replace(tag, doc)
# write results
- with open(DESTDOC, 'w') as f:
+ with open(DESTDOC, "w") as f:
f.write(srcdoc)
-
def main(args):
items = load_module(meep)
doc_items = generate_docs(items)
update_api_document(doc_items)
-
-if __name__ == '__main__':
- main(sys.argv[1:])
\ No newline at end of file
+if __name__ == "__main__":
+ main(sys.argv[1:])
diff --git a/m4/ax_check_compiler_flags.m4 b/m4/ax_check_compiler_flags.m4
index 86eaf15ef..ad166dc8f 100644
--- a/m4/ax_check_compiler_flags.m4
+++ b/m4/ax_check_compiler_flags.m4
@@ -20,13 +20,13 @@ AS_LITERAL_IF([$1],
[AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1), [
ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
_AC_LANG_PREFIX[]FLAGS="$1"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes,
AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no)
_AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])],
[ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS
_AC_LANG_PREFIX[]FLAGS="$1"
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes,
eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no)
_AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])
diff --git a/m4/ax_compiler_vendor.m4 b/m4/ax_compiler_vendor.m4
index 1b8ed401c..6c3db2625 100644
--- a/m4/ax_compiler_vendor.m4
+++ b/m4/ax_compiler_vendor.m4
@@ -4,7 +4,7 @@ dnl @category C
dnl @category C++
dnl
dnl Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm,
-dnl sun, hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi,
+dnl sun, hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi,
dnl microsoft, watcom, etc. The vendor is returned in the cache variable
dnl $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++.
dnl
@@ -17,7 +17,7 @@ AC_DEFUN([AX_COMPILER_VENDOR],
AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor,
[ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown
# note: don't check for gcc first since some other compilers define __GNUC__
- for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do
+ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do
vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[
#if !($vencpp)
@@ -27,4 +27,3 @@ AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compile
done
])
])
-
diff --git a/m4/ax_gcc_x86_cpuid.m4 b/m4/ax_gcc_x86_cpuid.m4
index 50fe009e9..d91509c2c 100644
--- a/m4/ax_gcc_x86_cpuid.m4
+++ b/m4/ax_gcc_x86_cpuid.m4
@@ -57,7 +57,7 @@ AC_CACHE_CHECK(for x86 cpuid $1 output, ax_cv_gcc_x86_cpuid_$1,
fprintf(f, "%x:%x:%x:%x\n", eax, ebx, ecx, edx);
fclose(f);
return 0;
-])],
+])],
[ax_cv_gcc_x86_cpuid_$1=`cat conftest_cpuid`; rm -f conftest_cpuid],
[ax_cv_gcc_x86_cpuid_$1=unknown; rm -f conftest_cpuid],
[ax_cv_gcc_x86_cpuid_$1=unknown])])
diff --git a/m4/pkg.m4 b/m4/pkg.m4
index 1b49cd6b6..72139eadf 100644
--- a/m4/pkg.m4
+++ b/m4/pkg.m4
@@ -34,7 +34,7 @@ AC_DEFUN([PKG_CHECK_MODULES], [
else
$1_CFLAGS=""
$1_LIBS=""
- ## If we have a custom action on failure, don't print errors, but
+ ## If we have a custom action on failure, don't print errors, but
## do set a variable so people can do so.
$1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
ifelse([$4], ,echo $$1_PKG_ERRORS,)
@@ -54,5 +54,3 @@ AC_DEFUN([PKG_CHECK_MODULES], [
ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
fi
])
-
-
diff --git a/python/adjoint/__init__.py b/python/adjoint/__init__.py
index a787e31e7..16de93442 100644
--- a/python/adjoint/__init__.py
+++ b/python/adjoint/__init__.py
@@ -2,21 +2,14 @@
Adjoint-based sensitivity-analysis module for pymeep.
Authors: Homer Reid , Alec Hammond , Ian Williamson
"""
-
-from .objective import *
-
from . import utils
-from .utils import DesignRegion
-
from .basis import BilinearInterpolationBasis
-
-from .optimization_problem import OptimizationProblem
-
+from .connectivity import *
from .filter_source import FilteredSource
-
from .filters import *
-
-from .connectivity import *
+from .objective import *
+from .optimization_problem import OptimizationProblem
+from .utils import DesignRegion
try:
from .wrapper import MeepJaxWrapper
diff --git a/python/adjoint/basis.py b/python/adjoint/basis.py
index 80ea14d64..af54f6877 100644
--- a/python/adjoint/basis.py
+++ b/python/adjoint/basis.py
@@ -1,7 +1,9 @@
-import meep as mp
+from abc import ABCMeta, abstractmethod
+
import numpy as np
from scipy import sparse
-from abc import ABCMeta, abstractmethod
+
+import meep as mp
ABC = ABCMeta("ABC", (object,), {"__slots__": ()}) # compatible with Python 2 and 3
@@ -54,7 +56,7 @@ class BilinearInterpolationBasis(Basis):
def __init__(self, resolution, symmetry=None, **kwargs):
self.dim = 2
- super(BilinearInterpolationBasis, self).__init__(**kwargs)
+ super().__init__(**kwargs)
# Generate interpolation grid
self.symmetry = [] if symmetry is None or len(symmetry) == 0 else symmetry
diff --git a/python/adjoint/connectivity.py b/python/adjoint/connectivity.py
index e8b631d79..450e6f4eb 100644
--- a/python/adjoint/connectivity.py
+++ b/python/adjoint/connectivity.py
@@ -4,13 +4,12 @@
BC: Dirichlet on last slice rho[-Nx*Ny:], 0 outside the first slice, and Neumann on sides.
Mo Chen
"""
-
import numpy as np
+from scipy.sparse import csc_matrix, csr_matrix, diags, eye, kron, lil_matrix
from scipy.sparse.linalg import cg, spsolve
-from scipy.sparse import kron, diags, csr_matrix, eye, csc_matrix, lil_matrix
-class ConnectivityConstraint(object):
+class ConnectivityConstraint:
def __init__(
self,
nx,
diff --git a/python/adjoint/filter_source.py b/python/adjoint/filter_source.py
index 15d0928bd..9c23b3b17 100644
--- a/python/adjoint/filter_source.py
+++ b/python/adjoint/filter_source.py
@@ -1,5 +1,6 @@
import numpy as np
-from scipy import signal, linalg
+from scipy import linalg, signal
+
from meep import CustomSource
@@ -66,7 +67,7 @@ def __init__(
self.nodes, self.err = self.estimate_impulse_response(H)
# initialize super
- super(FilteredSource, self).__init__(
+ super().__init__(
src_func=f,
center_frequency=center_frequency,
is_integrated=False,
diff --git a/python/adjoint/filters.py b/python/adjoint/filters.py
index 233269e81..262f37937 100644
--- a/python/adjoint/filters.py
+++ b/python/adjoint/filters.py
@@ -1,12 +1,11 @@
"""
General filter functions to be used in other projection and morphological transform routines.
"""
-
import numpy as np
from autograd import numpy as npa
+from scipy import signal, special
+
import meep as mp
-from scipy import special
-from scipy import signal
def _proper_pad(x, n):
diff --git a/python/adjoint/objective.py b/python/adjoint/objective.py
index 64d940b42..07aeea618 100644
--- a/python/adjoint/objective.py
+++ b/python/adjoint/objective.py
@@ -1,11 +1,13 @@
"""Handling of objective functions and objective quantities."""
-
import abc
+from collections import namedtuple
+
import numpy as np
+from meep.simulation import py_v3_to_vec
+
import meep as mp
+
from .filter_source import FilteredSource
-from meep.simulation import py_v3_to_vec
-from collections import namedtuple
Grid = namedtuple("Grid", ["x", "y", "z", "w"])
diff --git a/python/adjoint/optimization_problem.py b/python/adjoint/optimization_problem.py
index 7b026171c..707eb8beb 100644
--- a/python/adjoint/optimization_problem.py
+++ b/python/adjoint/optimization_problem.py
@@ -1,12 +1,14 @@
-import meep as mp
+from collections import namedtuple
+
import numpy as np
from autograd import grad, jacobian
-from collections import namedtuple
-from . import utils, DesignRegion, LDOS
+import meep as mp
+
+from . import LDOS, DesignRegion, utils
-class OptimizationProblem(object):
+class OptimizationProblem:
"""Top-level class in the MEEP adjoint module.
Intended to be instantiated from user scripts with mandatory constructor
diff --git a/python/adjoint/utils.py b/python/adjoint/utils.py
index 0c6a461bc..fb37d2b0b 100644
--- a/python/adjoint/utils.py
+++ b/python/adjoint/utils.py
@@ -1,8 +1,9 @@
-from typing import List, Iterable, Tuple
+from typing import Iterable, List, Tuple
-import meep as mp
import numpy as onp
+import meep as mp
+
from . import ObjectiveQuantity
# Meep field components used to compute adjoint sensitivities
@@ -22,7 +23,7 @@
FD_DEFAULT = 1e-3
-class DesignRegion(object):
+class DesignRegion:
def __init__(self, design_parameters, volume=None, size=None, center=mp.Vector3()):
self.volume = volume or mp.Volume(center=center, size=size)
self.size = self.volume.size
diff --git a/python/adjoint/wrapper.py b/python/adjoint/wrapper.py
index f3e5144bc..06d9ad96e 100644
--- a/python/adjoint/wrapper.py
+++ b/python/adjoint/wrapper.py
@@ -46,16 +46,15 @@ def loss(x):
value, grad = jax.value_and_grad(loss)(x)
```
"""
-
from typing import Callable, List, Tuple
import jax
import jax.numpy as jnp
-import meep as mp
import numpy as onp
-from . import utils
-from . import DesignRegion, EigenmodeCoefficient
+import meep as mp
+
+from . import DesignRegion, EigenmodeCoefficient, utils
_norm_fn = onp.linalg.norm
_reduce_fn = onp.max
diff --git a/python/binary_partition_utils.py b/python/binary_partition_utils.py
index fb3558a79..53f1d65b5 100644
--- a/python/binary_partition_utils.py
+++ b/python/binary_partition_utils.py
@@ -1,9 +1,10 @@
-from typing import Dict, Generator, List, Tuple
import warnings
+from typing import Dict, Generator, List, Tuple
-import meep as mp
import numpy as onp
+import meep as mp
+
def is_leaf_node(partition: mp.BinaryPartition) -> bool:
"""Returns True if the partition has no children.
diff --git a/python/chunk_balancer.py b/python/chunk_balancer.py
index fe92ab4b1..8162ca7bc 100644
--- a/python/chunk_balancer.py
+++ b/python/chunk_balancer.py
@@ -2,11 +2,11 @@
import copy
from typing import Optional, Tuple, Union
-import meep as mp
-from meep import binary_partition_utils as bpu
+import numpy as np
from meep.timing_measurements import MeepTimingMeasurements
-import numpy as np
+import meep as mp
+from meep import binary_partition_utils as bpu
class AbstractChunkBalancer(abc.ABC):
diff --git a/python/examples/3rd-harm-1d.ipynb b/python/examples/3rd-harm-1d.ipynb
index c4b7fd017..c4c4df04c 100644
--- a/python/examples/3rd-harm-1d.ipynb
+++ b/python/examples/3rd-harm-1d.ipynb
@@ -20,17 +20,9 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Using MPI version 3.1, 1 processes\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"import meep as mp\n",
"import numpy as np\n",
@@ -48,7 +40,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -69,7 +61,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -90,7 +82,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -106,7 +98,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -127,7 +119,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -162,32 +154,9 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.1691008357827005e-12 / 4.1691008357827005e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420168812386e-08 / 1.0165420168812386e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650785262405232e-06 / 4.650785262405232e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454866366283557 / 0.0005454866366283557 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.017815669509667658 / 0.017815669509667658 = 1.0\n",
- "field decay(t = 350.175): 0.13192124155368243 / 0.13192124155368243 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.2505510561658855 / 0.2505510561658855 = 1.0\n",
- "field decay(t = 450.225): 0.2499503102652878 / 0.2505510561658855 = 0.9976023014638582\n",
- "field decay(t = 500.25): 0.11167289094888443 / 0.2505510561658855 = 0.4457091207587955\n",
- "field decay(t = 550.275): 0.012841517437730344 / 0.2505510561658855 = 0.05125309641172774\n",
- "field decay(t = 600.3000000000001): 0.0003786349795018242 / 0.2505510561658855 = 0.0015112088741351644\n",
- "field decay(t = 650.325): 2.4161065872412755e-06 / 0.2505510561658855 = 9.643170634417973e-06\n",
- "field decay(t = 700.35): 4.490921803004586e-09 / 0.2505510561658855 = 1.7924178296144254e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"sim.run(\n",
" until_after_sources=mp.stop_when_fields_decayed(\n",
@@ -205,22 +174,9 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"freqs = mp.get_flux_freqs(trans)\n",
"spectra = mp.get_fluxes(trans)\n",
@@ -244,7 +200,7 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -309,80 +265,9 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.1691008357817126e-12 / 4.1691008357817126e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420158581846e-08 / 1.0165420158581846e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650783221205379e-06 / 4.650783221205379e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454598673598967 / 0.0005454598673598967 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.017781404956060017 / 0.017781404956060017 = 1.0\n",
- "field decay(t = 350.175): 0.13014055244440104 / 0.13014055244440104 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.2443206506136912 / 0.2443206506136912 = 1.0\n",
- "field decay(t = 450.225): 0.2437445632391615 / 0.2443206506136912 = 0.9976420848050188\n",
- "field decay(t = 500.25): 0.11044620451678894 / 0.2443206506136912 = 0.4520543156682302\n",
- "field decay(t = 550.275): 0.012822890989720101 / 0.2443206506136912 = 0.05248386068681144\n",
- "field decay(t = 600.3000000000001): 0.00037862010232358545 / 0.2443206506136912 = 0.0015496852246118257\n",
- "field decay(t = 650.325): 2.41614906850782e-06 / 0.2443206506136912 = 9.8892543976077e-06\n",
- "field decay(t = 700.35): 4.492194624953141e-09 / 0.2443206506136912 = 1.838647127727241e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835772216e-12 / 4.169100835772216e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420065576282e-08 / 1.0165420065576282e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650764664560235e-06 / 4.650764664560235e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005452160206480376 / 0.0005452160206480376 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.017507545378757882 / 0.017507545378757882 = 1.0\n",
- "field decay(t = 350.175): 0.11744036969268859 / 0.11744036969268859 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.20769602060422127 / 0.20769602060422127 = 1.0\n",
- "field decay(t = 450.225): 0.2072148912173212 / 0.20769602060422127 = 0.9976834925122764\n",
- "field decay(t = 500.25): 0.10101160503184105 / 0.20769602060422127 = 0.48634347802130234\n",
- "field decay(t = 550.275): 0.012670991144119082 / 0.20769602060422127 = 0.06100738525108532\n",
- "field decay(t = 600.3000000000001): 0.00037847776427704205 / 0.20769602060422127 = 0.001822267769868624\n",
- "field decay(t = 650.325): 2.416057119618937e-06 / 0.20769602060422127 = 1.1632659656117805e-05\n",
- "field decay(t = 700.35): 4.491338910111841e-09 / 0.20769602060422127 = 2.162457854053155e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835677209e-12 / 4.169100835677209e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165419135520952e-08 / 1.0165419135520952e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650579070094068e-06 / 4.650579070094068e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005427300142038431 / 0.0005427300142038431 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.015051531229532927 / 0.015051531229532927 = 1.0\n",
- "field decay(t = 350.175): 0.10911319432715134 / 0.10911319432715134 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.22726682483704244 / 0.22726682483704244 = 1.0\n",
- "field decay(t = 450.225): 0.22744269278874502 / 0.22744269278874502 = 1.0\n",
- "field decay(t = 500.25): 0.10405323422921754 / 0.22744269278874502 = 0.45749209593585416\n",
- "field decay(t = 550.275): 0.011388920462070745 / 0.22744269278874502 = 0.05007380242657031\n",
- "field decay(t = 600.3000000000001): 0.00037704599306494387 / 0.22744269278874502 = 0.001657762614581575\n",
- "field decay(t = 650.325): 2.4160426967236526e-06 / 0.22744269278874502 = 1.062264373983533e-05\n",
- "field decay(t = 700.35): 4.491856927586553e-09 / 0.22744269278874502 = 1.9749400926055307e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.16910083472712e-12 / 4.16910083472712e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165409834939769e-08 / 1.0165409834939769e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.648720329217878e-06 / 4.648720329217878e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005182735319569587 / 0.0005182735319569587 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.013974697322011669 / 0.013974697322011669 = 1.0\n",
- "field decay(t = 350.175): 0.07995289002032732 / 0.07995289002032732 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.17867229467477655 / 0.17867229467477655 = 1.0\n",
- "field decay(t = 450.225): 0.23241654769547887 / 0.23241654769547887 = 1.0\n",
- "field decay(t = 500.25): 0.18817882350661239 / 0.23241654769547887 = 0.8096618996043756\n",
- "field decay(t = 550.275): 0.014319414613175686 / 0.23241654769547887 = 0.06161099437694745\n",
- "field decay(t = 600.3000000000001): 0.0003754598154438489 / 0.23241654769547887 = 0.0016154607714756648\n",
- "field decay(t = 650.325): 2.9312708100424914e-06 / 0.23241654769547887 = 1.261214332244172e-05\n",
- "field decay(t = 700.35): 1.8599873539004834e-07 / 0.23241654769547887 = 8.002818096831515e-07\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"k_pow = [-3, -2, -1, 0]\n",
"freqs = []\n",
@@ -395,22 +280,9 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"plt.figure(dpi=150)\n",
"plt.semilogy(freqs, np.array(spectra).T)\n",
@@ -432,33 +304,9 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.1691008357827595e-12 / 4.1691008357827595e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.016542016891584e-08 / 1.016542016891584e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650785283023354e-06 / 4.650785283023354e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454869069704206 / 0.0005454869069704206 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.017816014066636514 / 0.017816014066636514 = 1.0\n",
- "field decay(t = 350.175): 0.13193941695549694 / 0.13193941695549694 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.2506140638300714 / 0.2506140638300714 = 1.0\n",
- "field decay(t = 450.225): 0.2500128531691806 / 0.2506140638300714 = 0.9976010497906516\n",
- "field decay(t = 500.25): 0.11168480654371428 / 0.2506140638300714 = 0.4456446092324733\n",
- "field decay(t = 550.275): 0.012841704978003306 / 0.2506140638300714 = 0.05124095903376999\n",
- "field decay(t = 600.3000000000001): 0.0003786351315011641 / 0.2506140638300714 = 0.001510829542901859\n",
- "field decay(t = 650.325): 2.4161060812423408e-06 / 0.2506140638300714 = 9.640744195747047e-06\n",
- "field decay(t = 700.35): 4.490904760943549e-09 / 0.2506140638300714 = 1.7919603921305078e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "Omega: 225.25726603587026, 3Omega: 5.026979907074879e-16\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"_, _, omega_flux_cal, omega3_flux_cal = run_chi3(-16)\n",
"print(\"Omega: {}, 3Omega: {}\".format(omega_flux_cal[0], omega3_flux_cal[0]))"
@@ -473,348 +321,9 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.1691008357827595e-12 / 4.1691008357827595e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420168905492e-08 / 1.0165420168905492e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650785280961551e-06 / 4.650785280961551e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454868799362667 / 0.0005454868799362667 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.017815979612345514 / 0.017815979612345514 = 1.0\n",
- "field decay(t = 350.175): 0.13193760003745314 / 0.13193760003745314 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.2506077676780644 / 0.2506077676780644 = 1.0\n",
- "field decay(t = 450.225): 0.250006603482365 / 0.2506077676780644 = 0.9976011749305723\n",
- "field decay(t = 500.25): 0.1116836154292776 / 0.2506077676780644 = 0.4456510524955018\n",
- "field decay(t = 550.275): 0.012841686224530456 / 0.2506077676780644 = 0.051242171555620476\n",
- "field decay(t = 600.3000000000001): 0.00037863511629851986 / 0.2506077676780644 = 0.0015108674396115361\n",
- "field decay(t = 650.325): 2.416106131823971e-06 / 0.2506077676780644 = 9.640986607118051e-06\n",
- "field decay(t = 700.35): 4.4909064662334595e-09 / 0.2506077676780644 = 1.7920060929645904e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.1691008357827595e-12 / 4.1691008357827595e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420168894454e-08 / 1.0165420168894454e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650785278757183e-06 / 4.650785278757183e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454868510330065 / 0.0005454868510330065 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.0178159427756053 / 0.0178159427756053 = 1.0\n",
- "field decay(t = 350.175): 0.13193565734819723 / 0.13193565734819723 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.2506010350871025 / 0.2506010350871025 = 1.0\n",
- "field decay(t = 450.225): 0.24999992057177803 / 0.2506010350871025 = 0.9976013087291696\n",
- "field decay(t = 500.25): 0.11168234185404839 / 0.2506010350871025 = 0.4456579431734209\n",
- "field decay(t = 550.275): 0.012841666174342072 / 0.2506010350871025 = 0.05124346820785731\n",
- "field decay(t = 600.3000000000001): 0.00037863510004548367 / 0.2506010350871025 = 0.0015109079653796314\n",
- "field decay(t = 650.325): 2.416106185906883e-06 / 0.2506010350871025 = 9.641245835505452e-06\n",
- "field decay(t = 700.35): 4.490908289112879e-09 / 0.2506010350871025 = 1.7920549639996314e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.1691008357827595e-12 / 4.1691008357827595e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.016542016887149e-08 / 1.016542016887149e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650785274196042e-06 / 4.650785274196042e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454867912281307 / 0.0005454867912281307 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.017815866554169706 / 0.017815866554169706 = 1.0\n",
- "field decay(t = 350.175): 0.1319316371539862 / 0.1319316371539862 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.250587100703692 / 0.250587100703692 = 1.0\n",
- "field decay(t = 450.225): 0.24998608899268374 / 0.250587100703692 = 0.997601585599097\n",
- "field decay(t = 500.25): 0.11167970629203668 / 0.250587100703692 = 0.4456722073020547\n",
- "field decay(t = 550.275): 0.012841624687286904 / 0.250587100703692 = 0.05124615214121316\n",
- "field decay(t = 600.3000000000001): 0.00037863506641780544 / 0.250587100703692 = 0.0015109918481619068\n",
- "field decay(t = 650.325): 2.416106297824614e-06 / 0.250587100703692 = 9.64178240236536e-06\n",
- "field decay(t = 700.35): 4.49091206005567e-09 / 0.250587100703692 = 1.7921561195466212e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835782728e-12 / 4.169100835782728e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.016542016882427e-08 / 1.016542016882427e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650785264758402e-06 / 4.650785264758402e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454866674834187 / 0.0005454866674834187 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.017815708836639688 / 0.017815708836639688 = 1.0\n",
- "field decay(t = 350.175): 0.13192331666924295 / 0.13192331666924295 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.2505582526127686 / 0.2505582526127686 = 1.0\n",
- "field decay(t = 450.225): 0.24995745365544636 / 0.2505582526127686 = 0.9976021585756716\n",
- "field decay(t = 500.25): 0.11167425141378004 / 0.2505582526127686 = 0.4457017489915599\n",
- "field decay(t = 550.275): 0.012841538842926424 / 0.2505582526127686 = 0.05125170976815797\n",
- "field decay(t = 600.3000000000001): 0.000378634996846925 / 0.2505582526127686 = 0.0015111655389459305\n",
- "field decay(t = 650.325): 2.4161065294750964e-06 / 0.2505582526127686 = 9.642893436079026e-06\n",
- "field decay(t = 700.35): 4.49091985908172e-09 / 0.2505582526127686 = 1.7923655725769776e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.1691008357828475e-12 / 4.1691008357828475e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420168726412e-08 / 1.0165420168726412e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650785245230697e-06 / 4.650785245230697e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454864114377906 / 0.0005454864114377906 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.017815382476511977 / 0.017815382476511977 = 1.0\n",
- "field decay(t = 350.175): 0.13190609125009525 / 0.13190609125009525 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.2504984938450849 / 0.2504984938450849 = 1.0\n",
- "field decay(t = 450.225): 0.24989813526348434 / 0.2504984938450849 = 0.9976033445455691\n",
- "field decay(t = 500.25): 0.11166295794325522 / 0.2504984938450849 = 0.4457629913428168\n",
- "field decay(t = 550.275): 0.012841361210895873 / 0.2504984938450849 = 0.05126322723056899\n",
- "field decay(t = 600.3000000000001): 0.00037863485293490557 / 0.2504984938450849 = 0.0015115254671713265\n",
- "field decay(t = 650.325): 2.4161070090188778e-06 / 0.2504984938450849 = 9.645195753205065e-06\n",
- "field decay(t = 700.35): 4.490935979334019e-09 / 0.2504984938450849 = 1.792799593482321e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835782678e-12 / 4.169100835782678e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420168523849e-08 / 1.0165420168523849e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650785204825125e-06 / 4.650785204825125e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454858816409209 / 0.0005454858816409209 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.017814707103397807 / 0.017814707103397807 = 1.0\n",
- "field decay(t = 350.175): 0.13187041021795567 / 0.13187041021795567 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.250374554159776 / 0.250374554159776 = 1.0\n",
- "field decay(t = 450.225): 0.24977510744804346 / 0.250374554159776 = 0.9976058001830729\n",
- "field decay(t = 500.25): 0.11163956208436386 / 0.250374554159776 = 0.4458902082083042\n",
- "field decay(t = 550.275): 0.012840993630635223 / 0.250374554159776 = 0.051287135283087794\n",
- "field decay(t = 600.3000000000001): 0.00037863455532979455 / 0.250374554159776 = 0.0015122725094826118\n",
- "field decay(t = 650.325): 2.4161080020963407e-06 / 0.250374554159776 = 9.649974256387518e-06\n",
- "field decay(t = 700.35): 4.490969255239367e-09 / 0.250374554159776 = 1.7937003503852332e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835782697e-12 / 4.169100835782697e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420168104837e-08 / 1.0165420168104837e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650785121220347e-06 / 4.650785121220347e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454847854047326 / 0.0005454847854047326 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.01781330928257498 / 0.01781330928257498 = 1.0\n",
- "field decay(t = 350.175): 0.1317964137861031 / 0.1317964137861031 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.25011687030360397 / 0.25011687030360397 = 1.0\n",
- "field decay(t = 450.225): 0.24951931317382292 / 0.25011687030360397 = 0.9976108883456933\n",
- "field decay(t = 500.25): 0.11159103280876947 / 0.25011687030360397 = 0.4461555618911866\n",
- "field decay(t = 550.275): 0.012840232906414287 / 0.25011687030360397 = 0.051336932574073034\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "field decay(t = 600.3000000000001): 0.0003786339402465762 / 0.25011687030360397 = 0.0015138280747994807\n",
- "field decay(t = 650.325): 2.416110058754147e-06 / 0.25011687030360397 = 9.659924401826058e-06\n",
- "field decay(t = 700.35): 4.491037714235971e-09 / 0.25011687030360397 = 1.795575687791284e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835782566e-12 / 4.169100835782566e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.016542016723775e-08 / 1.016542016723775e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650784948230582e-06 / 4.650784948230582e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454825170836912 / 0.0005454825170836912 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.01781041537070784 / 0.01781041537070784 = 1.0\n",
- "field decay(t = 350.175): 0.1316425937154995 / 0.1316425937154995 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.24957847104378408 / 0.24957847104378408 = 1.0\n",
- "field decay(t = 450.225): 0.2489848350078133 / 0.24957847104378408 = 0.99762144533746\n",
- "field decay(t = 500.25): 0.11149010814744109 / 0.24957847104378408 = 0.4467136435333084\n",
- "field decay(t = 550.275): 0.012838658222915229 / 0.24957847104378408 = 0.05144136899798106\n",
- "field decay(t = 600.3000000000001): 0.0003786326703923277 / 0.24957847104378408 = 0.0015170886687814647\n",
- "field decay(t = 650.325): 2.4161143069600103e-06 / 0.24957847104378408 = 9.680780144438605e-06\n",
- "field decay(t = 700.35): 4.4911771950517e-09 / 0.24957847104378408 = 1.7995050519657217e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.1691008357823855e-12 / 4.1691008357823855e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420165443837e-08 / 1.0165420165443837e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650784590290659e-06 / 4.650784590290659e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454778233702294 / 0.0005454778233702294 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.017804420515894783 / 0.017804420515894783 = 1.0\n",
- "field decay(t = 350.175): 0.13132132371111363 / 0.13132132371111363 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.24844276804284895 / 0.24844276804284895 = 1.0\n",
- "field decay(t = 450.225): 0.24785728763909465 / 0.24844276804284895 = 0.9976433992892346\n",
- "field decay(t = 500.25): 0.11127911965592859 / 0.24844276804284895 = 0.4479064556096729\n",
- "field decay(t = 550.275): 0.01283539726004091 / 0.24844276804284895 = 0.05166339660902179\n",
- "field decay(t = 600.3000000000001): 0.0003786300533999004 / 0.24844276804284895 = 0.0015240131817183668\n",
- "field decay(t = 650.325): 2.416122931610749e-06 / 0.24844276804284895 = 9.725068476108912e-06\n",
- "field decay(t = 700.35): 4.491452301556477e-09 / 0.24844276804284895 = 1.8078418369504868e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.1691008357820155e-12 / 4.1691008357820155e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420161731733e-08 / 1.0165420161731733e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650783849662967e-06 / 4.650783849662967e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454681103843687 / 0.0005454681103843687 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.0177919867184528 / 0.0177919867184528 = 1.0\n",
- "field decay(t = 350.175): 0.13064418737686334 / 0.13064418737686334 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.24608078239905923 / 0.24608078239905923 = 1.0\n",
- "field decay(t = 450.225): 0.2454910539147474 / 0.24608078239905923 = 0.9976035167047076\n",
- "field decay(t = 500.25): 0.11083352926803994 / 0.24608078239905923 = 0.45039489954280826\n",
- "field decay(t = 550.275): 0.012828638329285625 / 0.24608078239905923 = 0.052131817057058695\n",
- "field decay(t = 600.3000000000001): 0.00037862466733590196 / 0.24608078239905923 = 0.0015386194063781123\n",
- "field decay(t = 650.325): 2.4161389249309716e-06 / 0.24608078239905923 = 9.818478718150437e-06\n",
- "field decay(t = 700.35): 4.491929211746334e-09 / 0.24608078239905923 = 1.8253880566999964e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835781244e-12 / 4.169100835781244e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420154050911e-08 / 1.0165420154050911e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650782317199479e-06 / 4.650782317199479e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454480084043649 / 0.0005454480084043649 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.017766133980041062 / 0.017766133980041062 = 1.0\n",
- "field decay(t = 350.175): 0.12943453172485406 / 0.12943453172485406 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.24162814253773343 / 0.24162814253773343 = 1.0\n",
- "field decay(t = 450.225): 0.2410719556831018 / 0.24162814253773343 = 0.9976981702181286\n",
- "field decay(t = 500.25): 0.10987489072588702 / 0.24162814253773343 = 0.45472720839514214\n",
- "field decay(t = 550.275): 0.012814604477285866 / 0.24162814253773343 = 0.05303440378549736\n",
- "field decay(t = 600.3000000000001): 0.00037861349073161515 / 0.24162814253773343 = 0.0015669262973889296\n",
- "field decay(t = 650.325): 2.4161558408009105e-06 / 0.24162814253773343 = 9.999480256831406e-06\n",
- "field decay(t = 700.35): 4.492861541918341e-09 / 0.24162814253773343 = 1.8594115299366343e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835779622e-12 / 4.169100835779622e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420138158315e-08 / 1.0165420138158315e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650779146309852e-06 / 4.650779146309852e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454063955002492 / 0.0005454063955002492 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.01771662173687749 / 0.01771662173687749 = 1.0\n",
- "field decay(t = 350.175): 0.12689706943678725 / 0.12689706943678725 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.23320693569541642 / 0.23320693569541642 = 1.0\n",
- "field decay(t = 450.225): 0.23267453504759023 / 0.23320693569541642 = 0.9977170462523398\n",
- "field decay(t = 500.25): 0.10799807195922452 / 0.23320693569541642 = 0.46309974288362116\n",
- "field decay(t = 550.275): 0.012785358594898285 / 0.23320693569541642 = 0.05482409241720325\n",
- "field decay(t = 600.3000000000001): 0.000378589249816587 / 0.23320693569541642 = 0.0016234047614735157\n",
- "field decay(t = 650.325): 2.416107138602139e-06 / 0.23320693569541642 = 1.0360357128304853e-05\n",
- "field decay(t = 700.35): 4.493125804229867e-09 / 0.23320693569541642 = 1.9266690293028782e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835776254e-12 / 4.169100835776254e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420105274407e-08 / 1.0165420105274407e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.6507725852541425e-06 / 4.6507725852541425e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005453202108380395 / 0.0005453202108380395 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.017624098227291815 / 0.017624098227291815 = 1.0\n",
- "field decay(t = 350.175): 0.12218039718656669 / 0.12218039718656669 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.21924792050420605 / 0.21924792050420605 = 1.0\n",
- "field decay(t = 450.225): 0.21875381922070578 / 0.21924792050420605 = 0.9977463809811103\n",
- "field decay(t = 500.25): 0.10436138938509092 / 0.21924792050420605 = 0.47599716861665214\n",
- "field decay(t = 550.275): 0.012733297749038119 / 0.21924792050420605 = 0.05807716542877698\n",
- "field decay(t = 600.3000000000001): 0.00037853854019597556 / 0.21924792050420605 = 0.0017265319521637774\n",
- "field decay(t = 650.325): 2.4161208970651143e-06 / 0.21924792050420605 = 1.102004019700047e-05\n",
- "field decay(t = 700.35): 4.491390315511021e-09 / 0.21924792050420605 = 2.0485440888935858e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835769312e-12 / 4.169100835769312e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420037232922e-08 / 1.0165420037232922e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650759009321587e-06 / 4.650759009321587e-06 = 1.0\n",
- "field decay(t = 250.125): 0.000545141533396581 / 0.000545141533396581 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.017421291008439022 / 0.017421291008439022 = 1.0\n",
- "field decay(t = 350.175): 0.11463570073897522 / 0.11463570073897522 = 1.0\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "field decay(t = 400.20000000000005): 0.20163815113463796 / 0.20163815113463796 = 1.0\n",
- "field decay(t = 450.225): 0.20120253259282825 / 0.20163815113463796 = 0.9978396025783889\n",
- "field decay(t = 500.25): 0.10109030457587416 / 0.20163815113463796 = 0.5013451274326259\n",
- "field decay(t = 550.275): 0.01262521101057978 / 0.20163815113463796 = 0.06261320558404479\n",
- "field decay(t = 600.3000000000001): 0.0003784354270167391 / 0.20163815113463796 = 0.0018768046864506805\n",
- "field decay(t = 650.325): 2.4161436765026146e-06 / 0.20163815113463796 = 1.1982572062413455e-05\n",
- "field decay(t = 700.35): 4.492170330890932e-09 / 0.20163815113463796 = 2.2278374928618628e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835754938e-12 / 4.169100835754938e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.01654198964457e-08 / 1.01654198964457e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650730917976917e-06 / 4.650730917976917e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005447703360772811 / 0.0005447703360772811 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.01702522296927303 / 0.01702522296927303 = 1.0\n",
- "field decay(t = 350.175): 0.10518227880576582 / 0.10518227880576582 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.1772727477817735 / 0.1772727477817735 = 1.0\n",
- "field decay(t = 450.225): 0.17689224598144007 / 0.1772727477817735 = 0.9978535798361865\n",
- "field decay(t = 500.25): 0.0941896635654982 / 0.1772727477817735 = 0.5313262458223283\n",
- "field decay(t = 550.275): 0.01239882951385902 / 0.1772727477817735 = 0.06994210711463807\n",
- "field decay(t = 600.3000000000001): 0.00037822000681681363 / 0.1772727477817735 = 0.0021335485095679255\n",
- "field decay(t = 650.325): 2.4160847007280536e-06 / 0.1772727477817735 = 1.3629194170907224e-05\n",
- "field decay(t = 700.35): 4.493256393452313e-09 / 0.1772727477817735 = 2.5346571594769923e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835725167e-12 / 4.169100835725167e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.016541960513757e-08 / 1.016541960513757e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650672789399802e-06 / 4.650672789399802e-06 = 1.0\n",
- "field decay(t = 250.125): 0.000543995966140328 / 0.000543995966140328 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.016307143716002143 / 0.016307143716002143 = 1.0\n",
- "field decay(t = 350.175): 0.09153211905255858 / 0.09153211905255858 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.22855260392168325 / 0.22855260392168325 = 1.0\n",
- "field decay(t = 450.225): 0.22862376766772263 / 0.22862376766772263 = 1.0\n",
- "field decay(t = 500.25): 0.0829714083179759 / 0.22862376766772263 = 0.36291680941311816\n",
- "field decay(t = 550.275): 0.011966639931831521 / 0.22862376766772263 = 0.0523420642302755\n",
- "field decay(t = 600.3000000000001): 0.0003777734295152949 / 0.22862376766772263 = 0.0016523803862087667\n",
- "field decay(t = 650.325): 2.416110201923171e-06 / 0.22862376766772263 = 1.0568062221049122e-05\n",
- "field decay(t = 700.35): 4.492316812744696e-09 / 0.22862376766772263 = 1.9649386669516103e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835663596e-12 / 4.169100835663596e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165419002380455e-08 / 1.0165419002380455e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650552497483136e-06 / 4.650552497483136e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005423672260522596 / 0.0005423672260522596 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.01462324952255367 / 0.01462324952255367 = 1.0\n",
- "field decay(t = 350.175): 0.11286948557899079 / 0.11286948557899079 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.22340193165372965 / 0.22340193165372965 = 1.0\n",
- "field decay(t = 450.225): 0.22423295751360775 / 0.22423295751360775 = 1.0\n",
- "field decay(t = 500.25): 0.10875776760662008 / 0.22423295751360775 = 0.4850213314428591\n",
- "field decay(t = 550.275): 0.011253173596244885 / 0.22423295751360775 = 0.050185190085458235\n",
- "field decay(t = 600.3000000000001): 0.0003768391018113586 / 0.22423295751360775 = 0.0016805696450241478\n",
- "field decay(t = 650.325): 2.416028682322177e-06 / 0.22423295751360775 = 1.0774636829091274e-05\n",
- "field decay(t = 700.35): 4.491221029097323e-09 / 0.22423295751360775 = 2.002926366800817e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835536189e-12 / 4.169100835536189e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.016541775519228e-08 / 1.016541775519228e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650303529004109e-06 / 4.650303529004109e-06 = 1.0\n",
- "field decay(t = 250.125): 0.000538888737006022 / 0.000538888737006022 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.012940856099568963 / 0.012940856099568963 = 1.0\n",
- "field decay(t = 350.175): 0.10610514124453076 / 0.10610514124453076 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.21497310015816543 / 0.21497310015816543 = 1.0\n",
- "field decay(t = 450.225): 0.22343131384615714 / 0.22343131384615714 = 1.0\n",
- "field decay(t = 500.25): 0.12060305444368463 / 0.22343131384615714 = 0.5397768664007654\n",
- "field decay(t = 550.275): 0.010356579521407651 / 0.22343131384615714 = 0.046352408456670664\n",
- "field decay(t = 600.3000000000001): 0.0003748549630386882 / 0.22343131384615714 = 0.0016777190116547107\n",
- "field decay(t = 650.325): 2.4161257892828187e-06 / 0.22343131384615714 = 1.0813729497855586e-05\n",
- "field decay(t = 700.35): 4.502116718465644e-09 / 0.22343131384615714 = 2.0149891440756423e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835272573e-12 / 4.169100835272573e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165415174584912e-08 / 1.0165415174584912e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.649788088402476e-06 / 4.649788088402476e-06 = 1.0\n",
- "field decay(t = 250.125): 0.00053174759709517 / 0.00053174759709517 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.01247454839135486 / 0.01247454839135486 = 1.0\n",
- "field decay(t = 350.175): 0.08976065034162566 / 0.08976065034162566 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.18870963593996914 / 0.18870963593996914 = 1.0\n",
- "field decay(t = 450.225): 0.22826836798863853 / 0.22826836798863853 = 1.0\n",
- "field decay(t = 500.25): 0.12497876557323505 / 0.22826836798863853 = 0.5475080348384299\n",
- "field decay(t = 550.275): 0.009665581444509555 / 0.22826836798863853 = 0.042343061063066935\n",
- "field decay(t = 600.3000000000001): 0.0003923542204648252 / 0.22826836798863853 = 0.0017188286923940053\n",
- "field decay(t = 650.325): 2.7457665901575746e-06 / 0.22826836798863853 = 1.2028677535795227e-05\n",
- "field decay(t = 700.35): 5.739133736098904e-09 / 0.22826836798863853 = 2.5142045683633898e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.16910083472712e-12 / 4.16910083472712e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165409834939769e-08 / 1.0165409834939769e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.648720329217878e-06 / 4.648720329217878e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005182735319569587 / 0.0005182735319569587 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.013974697322011669 / 0.013974697322011669 = 1.0\n",
- "field decay(t = 350.175): 0.07995289002032732 / 0.07995289002032732 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.17867229467477655 / 0.17867229467477655 = 1.0\n",
- "field decay(t = 450.225): 0.23241654769547887 / 0.23241654769547887 = 1.0\n",
- "field decay(t = 500.25): 0.18817882350661239 / 0.23241654769547887 = 0.8096618996043756\n",
- "field decay(t = 550.275): 0.014319414613175686 / 0.23241654769547887 = 0.06161099437694745\n",
- "field decay(t = 600.3000000000001): 0.0003754598154438489 / 0.23241654769547887 = 0.0016154607714756648\n",
- "field decay(t = 650.325): 2.9312708100424914e-06 / 0.23241654769547887 = 1.261214332244172e-05\n",
- "field decay(t = 700.35): 1.8599873539004834e-07 / 0.23241654769547887 = 8.002818096831515e-07\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"pts = np.linspace(-6, 0, 20)\n",
"_, _, omega_psd, omega3_psd = zip(*[run_chi3(k_iter) for k_iter in pts])"
@@ -822,22 +331,9 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzwAAAIwCAYAAABDQ24hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAXEQAAFxEByibzPwAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nOzdd3hU1dbH8e9OD72jVCmChl4EFBTBfhGvhYsiXgtFUSwIKiCi4FVfFS+iqKgUURFFUK+iYkFUikpvAiK9CtJbema/f5y0gbSZzGQmk9/neeZJzj5tJSeBWdl7r22stYiIiIiIiISisEAHICIiIiIi4i9KeEREREREJGQp4RERERERkZClhEdEREREREKWEh4REREREQlZSnhERERERCRkKeEREREREZGQpYRHRERERERClhIeEREREREJWUp4REREREQkZCnhERERERGRkKWER0REREREQpYSHhERERERCVkRgQ5AfMcYsw8oBewKdCwiIiIiIj5UG4i31p7l6YnGWuuHeCQQjDHHo6OjyzZo0CAg9z916hQApUuXDsj9JX96RsWDnlPxoOdUPOg5BT89o+Ih0M9py5YtJCUlnbDWlvP0XPXwhJZdDRo0iFu3bl1Abj5v3jwAunbtGpD7S/70jIoHPafiQc+peNBzCn56RsVDoJ9TkyZNWL9+vVejmDSHR0REREREQpYSHhERERERCVlKeEREREREJGQp4RERERERkZClhEdEREREREKWEh4REREREQlZSnhERERERCRkKeEREREREZGQpYRHRERERERClhIeEREREREJWUp4REREREQkZEUEOgAp/g6cSGLG0p3MWZ5EYqrlnW2L6VC/Mj3b1qZq2egijWHxtsOcTEqlTHREkccQLHHkFUNRCYbvQ7DEoRiCK45giCFY4lAMIlJSGGttoGMQHzHGrIuLi4tbt25dkdwvMSWN0bPXMWv5blLSzvw5igw39GhTm6e6xxETGR6yMQRLHAWJ4aKzw7i1cSRXXXFZwGLQ88g/hnnz5gHQtWvXgMXgS8EQhz9i8OY5her3IphjKMhzCobEKxhiCBRf/Zsn/hXo59SkSRPWr1+/3lrbxNNz1cMjXklMSeOOKUtYvO1wrsekpFk+XLKTrQdO8m6fdj7/jzMYYgiWOAoaw8+709h3ytL50jQ9jyB4HqEeQ7DEEQwxBEsciuHMWHJLvBZsOsi4uX8GNPkrqhhEQp3m8IhXRs9el+d/Vtkt3naY0bPXh2QMwRKHJzFsPOIKeAx6HiUjhmCJIxhiCJY4FEOWjMTrwyW7cuxlgqzE644pS0hMSQvJGLI7cCKJ1+Zt4t+TF3PDG4v49+TFvP7jZg6cSPLrfUX8TQmPeOzvE4nMWr7bo3NmLd/l038wgyGGYIlDMQRXHIohuOIIhhiCJQ7F4C4YEq9giAGcxGv4p2u46PkfeOm7P1mw6SArdx5lwaaDjPl2Ixc9/wPDP13r94RLxF80pE089vHS3P8SlZuUNMvzczZwbfMaPolh9uq9AY8hWOJQDMEVhy9iWHPAeVNh/vg7YDH4QjDEUagYWuQdQ+Zz2pj/cypMHNe1rJnvsSa//QY+X+VdDGO+/YMbWtXKvE7G/Uz6Rva27NsZLdn35zZnJ78Y3vx5C7dfWJcwYzAGwoxJfzlxhKW3mdO2w4whJc1iDKSmuTKPOXAyyavEa/AVjXw2n8bb5M+XMUBwDTGU4GWt5eeff2bjxo3Fcq6VihaEkKIqWvDvyYtZsOmgX+8hIiISbGqUj6F2pVJEhocRGW6cjxFhRIZlfR4VHkZEmHHaw9P3pX8eFW6ICHc+//GP/Xy1dp/HMTx6VWMGdmnos69p+Kdr+HDJrgIf36tdHf7vxmY+uz8EfjK85O2vv/7ivvvu43//+x8Ac+fO5bLL/FP8KC8qWiBF6mRSaqBDEBERKXJ7jyWy91hiQGN49YdNfL5qD7FREZSOCqdUVDiloiIoFRVObFQ4paMi0j867bFR4ZSODic2MoLS0eHpxznnnkxKDYpeptOV5Ip1wcRayzvvvMPgwYM5duxYZvtDDz3EmjVrCAsrPjNjlPCIx8pEe/djExsZTs2KsT6JYc+RBBK8GEvsyxiCJQ7FEFxx+CKGU6dOAVC6dOmAxeALwRCH9zGEUaNC3jHEx8cDUKpUqXyvt/doAgkpLq/iOLt83nHkN04jYyTHvuOJJHoRQ3REGFXKZL3JtNZm3jNjkEhGS9a2+36wWAvHE1JIcXk+ssQZQgdenBpyklJd/Ln/ZMDun5Jm+XjZLp/2MmVQxbrgsXXrVu655x7mzp3r1t6iRQtmzZpVrJIdUMIjXmhfr5JXQ9ru79rQZ/9AvjZvEy9992dAYwiWOBRDcMXhixiyhnd0DlgMvhAMcXgfw7n5xpD1nC4NaBwF5W0MD14W+BgeyTaMy1qLy4LLWlzWSaRc2dqsy0nAMrYXLFiIy8JFHS9y2lyWh2esYtmOIx7H0bh6WfpdXI+UNEtKmiv95XyemuYiOYfPnW1L8mmfb/jrOCcSi+eIiVd+2MS8P/6mZoVYalSIpWbFWGpWiHE+rxBL2ZhIj6+ZnGY1lygIpKWlMX78eEaMGJH5Rx2AcuXK0a9fP6655hoaNvR9sutvSnjEYz0vqM0rP2zyaOJpZLihZ9vaIRVDsMShGIIrDsUQXHEEQwzBEkeoxGCMIdxAeL6lGhzlo53jsveUXdq4qlcJz3Uta/AvH30/vE3+eratxZVxZxGfkkZ8UirxyWnEJ2d8zP3zhOQ0TqVvJ6d63tOXXXKqi+U7jrA8l+9h2ZgIaqYnPxkJUUYyVLNCLFXLRhMe5v78pv+RwuI9nlWs8/VcopJu/fr19O3bl99++82tvXv37kyYMIGNGzcGKLLCU8IjHqtWNoYebWp5NMmxRxvfjrsNhhiCJQ7FEFxxKIbgiiMYYgiWOBRDluKc/D161XmF/n6kprmIT0mj37vLWFLAstieOJGYyh/7TvDHvhM57o8MN5xVPoYa5Z0E6PihZBbu8WzoaVHMJSopkpOTeeGFF3jmmWdITk7ObK9SpQrjx4/n5ptvxhhTrBOe4jUAT4LGU92b0L5epQId275eJZ7qHheSMQRLHJ7E0LhiWMBj0PMoGTEESxzBEEOwxKEYHBmJlyf8lfwFIoaI8DDKxURyyblVvDq/Z9tavHhTcx667Fz+1aYWFzWozDmVSxEVXrC3lSlpll2HE1i87TCfrtzD3J1peNrnlDGXSApn2bJlXHDBBTz55JNuyc6tt97Khg0buOWWWzJL0Bdn4aNGjQp0DOIjo0ePHli1atWqAwcO9Pu9IsLD6N6iBodOJbNx3/EcJ5JGhhtuvqAO425p6ZdxtsEQQ7DEUdAYLq4Zzt3Nojjv3AYBi0HPI/8Ytm3bBkC9evUCFoOvBEMc/orB0+cUyt+LYI4ht+fUqWEVlm4/zJ6jCfleo329Soy7pSURBXxDX1CBjuGcKqWZ+st2j4pBRIYbptzZjnb1KnFhg8pc2eQsbmpTizs71mNgl4b07lCHbs1rcPG5VWlVuwINqpahatloYiPDSUlzeVU4IzfhYYYbW3uWNIojPj6eESNG0KdPH/btyyqPXrNmTaZPn87w4cPPKMjii/+bCuONN97gwIEDB0aNGvWGp+dqHZ4QUlTr8JzuwIkkPl62i6+XbSIx1VKjWuUiLx+ZEcNvWw8FtIRlMMSRVwxrly4C/L/WQTB8H4IlDm9i8PWaFMHwfQiWOHwZQ2GeU6h9L4I5hryek1MVbD2zlue8oHZkuPF7VbBAx1DU6/CcSkpl79EE9hxNYO/RRPYcjefdhVs4meL5tVrVqcBn93X0OpaS6ueff6Zfv35s3rzZrX3AgAE8//zzlC9fPsfzAr1eUmHW4VHCE0IClfBkCPQvguRPz6h40HMqHvScioeCPKeSkvzlJDElLd/qaBna16vkl+po3cbMYd0hz3t+Lj63Cu/3be/TWELZ8ePHGTp0KG+++aZbe8OGDZk0aRKdO+ddGTTQ/+Zp4VERERERL1UtG83ALr4ty15cYoiJDOfdPu0C2svUqGKYVwlPuwLOBRP46quvGDBgALt3Zy00GxYWxpAhQxg1alSB1hMrzpTwiIiIiJRgMZHh/N+NzRh8RaOA9DJdUjOCL7ak4kHBOgB+/ONvbmhVk1oVQ/vNemEcOHCAQYMGMX36dLf2Zs2aMWXKFNq2bRugyIqWEh4RERERCVgvU/loQ8ca4cz3sDT1ip1HuWbcAkZd14QbW9cMiWpivmKtZcaMGTzwwAMcPJi1WHxkZCQjR45k6NChREVFBTDCoqWy1CIiIiISULeeF1ngcuWVSkVmfn4iKZUhM1dz77QVHD6VnMdZJceePXv45z//Sa9evdySnQ4dOrBq1SpGjhxZopIdUMIjIiIiIgEWFW54t087erWrQ2R4zj01keGGXu3q8Muwrozt2YKy0VkDlb5Zt48rX57PvD/2F1XIQcday8SJE4mLi2P27NmZ7aVKlWLcuHEsXLiQuDj/rDMW7DSkTUREREQCzpO5RDe2rkX7+pV55OPV/Lr1EAAHTybRZ+oyerWrwxPdzqd0dMl5m7tlyxb69+/Pjz/+6NZ+2WWX8fbbb1O/fv0ARRYcSs5PgoiIiIgEvYLOJapZIZYP+rVnyqJtvPjtRpJTnUpvHy7ZyS9bDjK2Zwva1A3tSm5paWmMGzeOkSNHkpCQtYBt+fLlGTt2LHfddZfmNqEhbSIiIiJSTIWFGfpdXJ8vH+hEkxrlMtt3HIrnX2/+yovf/JGZCIWa33//nQsvvJBHHnnELdm5/vrrWb9+PX369FGyk04Jj4iIiIgUa42ql+Wz+zpyf5eGhKW/x3dZeOOnLVz/+iI27jsR2AB9KDk5mVGjRtG6dWuWLl2a2V6tWjU+/vhjPv30U2rUqBHACIOPEh4RERERKfaiIsJ45KrGzBxwEedUzlqbZ/1fx+n+2kImLdiKy+XhYj9BZsmSJbRu3ZrRo0eTkpKS2X777bezfv16/vWvf6lXJwdKeEREREQkZLSpW5GvHryY3u3rZLYlp7p45qsN3DrpN3YfiQ9gdN6Jj49nyJAhXHjhhaxbty6zvXbt2nz99de8++67VK5cOYARBjclPCIiIiISUkpHR/DsDc14584LMiu7Afy29TDXjFvAJ8t3Y23x6O2ZN28ezZo1Y+zYsbhcWfORBg4cyLp167jmmmsCGF3xoIRHREREREJSl/Oq8e2gS/hHs7My24rLYqVHjx6lf//+XHbZZWzdujWzvVGjRsyfP5/XXnuNsmXLBjDC4kMJj4iIiIiErEqlo3j91ta8fHPxWaz0iy++oEmTJkyaNCmzLTw8nGHDhrF69WouvvjiAEZX/GgdHhEREREJacYYbmhVi3b1clustDZPdIvLXKz0wIkkZizdyeJth3Nd/NQf/v77bx588EFmzJjh1t6yZUsmT55M69at/XbvUKaEJ0CMMW2BB4GLgAbAs9baJwIblYiIiEjoylis9J1ftvNCtjV6Plyyi0WbD/H8TU2ZvfovZi3fTUqa+xyfBZsOMm7un/RoU5unuscRExnus7istUyfPp2HHnqIQ4cOZbZHRUXx1FNP8eijjxIZGemz+5U0SngCpyPQAVgIVAlwLCIiIiIlQliYoW+nelxybhUe/ngVv+85DsDOw/HcOnFJnuempFk+XLKTrQdO8m6fdj5Jenbt2sW9997LV1995dZ+0UUXMebVCaw4Fkuf91YUaU9TqFHCEzjjrbWvABhjtgc4FhEREZES5dzqZfn03o6Mn7eJ13/cjCdL9CzedpjRs9fzfzc28/r+LpeLt99+m8cee4wTJ7IWRi1dujT/efY59te8hDs+LdqeplClogUBYq115X+UiIiIiPhLVEQYQ65szNu3t/X43FnLd3HgRJJX9920aRNdunTh3nvvdUt2rrzySpavXM1vMRfw0bI9ZyQ7GTJ6mu6YsoTElDSvYihJQj7hMca0McYMM8Z8aozZbYyxxph8c3hjTKwx5mljzJ/GmERjzF5jzBRjTM2iiFtEREREisYffx33+JyUNMvL329k0/4T7DuWyKmk1HzX9klNTeXFF1+kefPmzJ8/P7O9YsWKTJ06lW+++Yapa0+xeNvhAsWQ0dMkeSsJQ9pGAv/05ARjTAwwD2eOzV/A58A5wF3AtcaYDtbarblfQURERESKi4ImGKebvmQX05fsytwODzOUiY6gbEwEZWMiKZft46m/tvD1G0+xe9M6t2tcdk13/vPiWOrXqcXOw/HMWr7boxhmLd/F4CsaaU5PHkpCwvMrsAZYmv7aDuT3E/EETrLzK3CltfYkgDFmMPBfYApwacbBxpgKwFlnXsZNvLV2p+fhi4iIiIg/nUxK9cl10lyWYwkpHEtIARIAsKkpHPvlI44tngWurOFnYaUrUOmKe9ncuCO9pm0ENnp1z5Q0y8fLdjGwS0MffAWhKeQTHmvtC9m3jTF5Hm+MiQLuT98cmJHspF9rrDHmDqCzMaaNtXZ5+q5bgAn5hPIz2ZIkEREREQkOZaK9e0scGW4wxmSWtz5d0p4NHJrzKimHdrm1l256ORW79iU8tqxX9z3db1sPKeHJQ8gnPF7oCJQHtlhrV+awfxbQHOgOLAew1r4JvFlkEYqIiIiIz7SvV4kFmw56fN6gyxsxsEtDklLTOJGYmv5KYf+hY7w+5hm+mD7ZbV5Puapn0+nOxyl/btvMY08kpnI8MSXXAgUF4aseqlClhOdMLdI/rshlf0Z78yKIRURERET8rOcFtXnlh00eJR2R4YaebWsDEB0RTnSZcKqUiWbu3Lnc3b8/27dvzzzWGMMDDzzAs88+S5kyZc64lrWWpFQXd0xZ4tV8or+OJrJu7zGa1Cjv8bklgcmvmkSoMcYkAtHW2hzHthljxgIPAy9bawfnsL8FsApYYa1tU4g4qgKd0zffAOYDHwGnrLVz8jl3XS67GtStWzd6ypQp3oZVKKdOnQKc+vESnPSMigc9p+JBz6l40HMKfsHyjKauS2b+noKXeO5cK5w74qIyt0+ePMmECRP45ptv3I6rU6cOQ4YMoWnTpvlec/bWFD7b7H1vTf3yhs61Imh3VjjR4XlP4/BUoJ9Tnz592LFjx3prbRNPz1UPz5ky0u74XPafSv9Y2EGXTYCZ2bZvSn/twKkIJyIiIiJF5NbzItkfb9l4JP+lEhtXDOPWxpGZ2wsXLuTVV1/l0KFDmW1hYWH06tWL2267jaioqJwuc4ZLakbwxZZUvB3dtvWYZeuxFD7amMJFNcK5tFYENcuE/Co0+VLCEyDW2p8Ar1Lv3DJbY8y60qVLx3Xt2rUwoXlt3rx5AATq/pI/PaPiQc+peNBzKh70nIJfMD2jSy9NY/Ts9cxavivH4W2R4YYebWrzVPc4YiLD2b9/Pw888AAzZ850O65Vq1ZMmTKFli1behzDkoQ1fLhkV/4HpmtfrxKJqS5W7zqa2ZaQCj/sTOOHnWm0rVuR3h3qcE3Ts4mJDPc4ngyBfk6F6VlSwnOmjKpspXLZn/HdPpHLfhEREREphmIiw/m/G5sx+IpGfLxsF79tPcTJpFTKREfQoX5leratTdWy0Vhree+99xg0aBBHjhzJPD86OprRo0czZMgQIiK8e5v9VPcmbD1QsMVH29erxLt92hETGc7ve44xfclOPl+5h1PJWUPzlu04wrIdRxg9ez03ta5Fr3Z1aFjtzHlEoUwJz5ky1sqplcv+jPYdRRCLiIiIiBSxqmWjGdilYY6lnnfu3Mk999xzxlydiy++mIkTJ9K4ceNC3TsmMpx3+7TzqKcJoGnN8jx3QzMe/8f5fLFqLx8s3sG6vcczzzkan8LkhduYvHAb7etVoneHulzVpDrREXn3+hw4kcSMpTuZszyJxFTLO9sWuyV/xYESnjOtTv/YOpf9Ge1riiAWEREREQkCLpeLCRMmMGzYME6ezFymkTJlyvDCCy8wYMAAwsJ8M1+moD1NOSkTHcGt7evQq11t1uw+xvTFO/li9V4SUrJ6fRZvO8zibYepVDqKf7Vxen3OqeI+ZCwxJY3Rs9cxa/lut6Rry7GDLNh0kHFz/zwj6QpWSnjOtAg4BjQwxrS01q46bX+P9I+zizYsEREREQmEjRs30q9fPxYuXOjWfvXVV/PWW29Rp04dv9w3r56m/BhjaFG7Ai1qV2DEtefz+co9fLB4J3/sy5qVcfhUMm/N38pb87fSqWEVbm1fhyviqpPmsvmWyE5Js3y4ZCdbD5zMHFYXrJTwnMZam2yMeQ0YAbxujLnSWnsKwBgzGGf9nZ+ttcsDGaeIiIiI+FdqaiovvfQSo0aNIikpKbO9UqVKjBs3jttuuw1jfFv+2R/KxUTy7wvP4bYOdVmx8yjTF+/kyzV7SUrNqki3cPNBFm4+SJUy0VQrG8X6vwo2XX3xtsOMnr2e/7uxmb/CL7SQT3iMMd2AkdmaotLbf8vW9h9r7VfZtp8BLgcuAjYZYxYAdYH2wAGgj1+DFhEREZGAWrVqFX379mXFCve16Hv27Mmrr75K9erVAxSZ94wxtKlbkTZ1K/LktXF8smI305fsZPPfWUP0Dp5M4uDJpDyucqZZy3cx+IpGQTunpyQU5q6Kk6hkvDLS8OxtVbOfYK1NBLoA/8FZj+d6nIRnKtDaWru1KAIXERERkaKVmJjIiBEjaNu2rVuyc/bZZ/PZZ58xY8aMYpnsnK58qUj6dKrH9w9fwsf3XMj1LWsQFe5dapCSZvl4WcFLaRe1kE94rLVTrbUmn9fUHM5LsNY+aa1taK2Nttaeba29y1q7OwBfhoiIiIj42aJFi2jZsiXPPfccaWlZk/z79u3L+vXruf766wMYnX8YY2hXrxLjbmnFb49fRr0q3q1389vWQ/kfFCAhn/CIiIiIiOTl5MmTPPjgg1x88cVs3Lgxs71evXrMnTuXSZMmUaFChQBGWDQqlY6iQqlIr849mZTq42h8J+Tn8IiIiIgEvZN/w4p3YfsiSD4JUWXgnE7Q+nYoUy3Q0YW07777jrvvvpsdO7KWWDTG8NBDD/HMM89QurR3PR7FVZlo79IDb88rCsEbmYiIiEioS0mAOUNh1XRwpbjv2/oj/PQ8tOoNV78AkTGBiTFEHT58mCFDhjB16lS39ri4OCZPnkyHDh0CE1iAta9XiQWbDnp8Xof6lf0QjW9oSJuIiIhIIKQkwLQeTs/O6clOBlcKLJ8K025yjhef+OSTT4iLi3NLdiIiIhg5ciQrVqwosckOQM8LahMZ7lmp7chwQ8+2tf0UUeEp4REREREJhDlDYcfC/I8D57hvhvk3nhLgr7/+4qabbqJHjx7s378/s71NmzYsX76cp59+mujo4CytXFSqlY2hR5taHp3To03toC1JDUp4RERERIreif3OMDZPrPzAmesjHrPWMnXqVOLi4vj0008z22NiYnjxxRf57bffaN68eQAjDC5PdW9C+3qVCnRs+3qVeKp7nJ8jKhwlPCIiIiJFbeV7uQ9jy40rBVa85594Qtj27du56qqruOuuuzh69Ghme+fOnVmzZg2PPvooERGa1p5dTGQ47/ZpR692dXId3hYZbujVrg7v9mlHTGR4EUfoGT1dERERkaK2fZF3521bAJc84ttYMoRYpTiXy8Xrr7/O8OHDOXXqVGZ72bJlGTNmDP379ycsTH/7z01MZDj/d2MzBl/RiI+X7eLrZZtITLXUqFaZDvUr07NtcA9jy04Jj4iIiEhRSz7p3XnbfoLXLoCqjaHqeVClsfN5lXMhMta7a4ZgpbgNGzbQr18/fvnlF7f2bt268eabb1KrlmdzVEqyqmWjGdilIefbnQB07do+wBF5zmcJjzFmPrDDWvtvX11TREREJKSkpcCf38KhLd5f4+CfzmvD7GyNBirWdZKgqo3TE6HzoGojiC6b+7UyKsXlVTwho1Lcwc1w2yzvE6sikJKSwpgxYxg9ejTJycmZ7ZUrV+bVV1+lV69eGONZBTIp/nzZw9MW2OPD64mIiIiEhiM7nPk3K6fByX1+uIGFI9ud15/fuO8qV8tJfNySocZQqpJ3leK6v+Lr4H1ixYoV9OnTh9WrV7u133LLLbz66qtUrVo1QJFJoPky4dkClPfh9URERESKr7QUJ/lY9g5smQfYwl0vLBJu/xziD8KBjXDgDziQ3tuTlpT7ecd3O68t89zbYytDwmHPYlj5AXQZEVRzehISEhg9ejQvvfQSaWlpme01atRgwoQJXHfddQGMToKBLxOeqcB/jDH1rbVbfXhdERERkeLjyPZsvTn7z9wfFglx10HSSdj0bcGv26o3nNPxzHZXmnPPAxvh4Eb3ZCjl1JnHZ0g4VPB7Z94rvVKcvwoneGjBggX069ePP//80629f//+jBkzhvLl9bd48W3CMxZoCfxsjHkamG2t9UefrYiIiEhwSUuBjXNg+Tuw5Udy7M2p3BDa3AktekHpKgWbP5OhbienaEBOwsKhcgPnxT+y2l0uOL4nWyL0R1YylHjMiy8y3faFAU94Tpw4wbBhw3jjjTfc2uvXr8/EiRPp2rVrgCKTYOTLhCfjN6cM8CbwpjEmBUjO4VhrrVXKLSIiIsXb4W1ZvTmnclgUNDwKzr/OSXTO6QTZJ8xHxjpFAL4Z5gwVy2ldnrBI7yukhYVBhdrO69zLs9qtdUpQv9vdSYQ85W2FOR+ZM2cO99xzD7t27cpsCwsL4+GHH+bpp5+mVKlSAYxOgpEvE55knD9n5DGIVERERCTIeLr+TFoKbPzamZuz9cecr1n53Gy9OZVzv3dkrFMEoMsIJ3HavtD/a+AYA2WrQ7ka3iU8UWV8G08BHTp0iIcffpj333/frb1p06ZMnjyZdu3aBSQuCX4+S3istVV8dS0RERERv/N0/ZnDW9N7cz7IvTcn7p9OolO3o3tvTn7KVHOGiRXlULFzOuaesOV5Xiffx5IHay0zZ87k/vvv58CBA5ntkZGRjBgxguHDhxMVFVWkMUnxooVHRUREpOTxZP2Znb9B6aqwfUHOx1U+F9reBc1vybs3J9i0uh1+eiHnoXS5CYt0ep2KyN69exk4cCD/+9//3NrbtaFMNkUAACAASURBVGvH5MmTadq0aZHFIsWXXxMeY0xZIM1aG+/P+4iIiIh4xJP1Zw784byyC4/O1ptzkWe9OcGibHVoeasznK+gWvUukpLU1lqmTJnCkCFDOHYsq8BCbGwszzzzDA899BDh4eF+j0NCg88THmPMrcC9OAuRRgHvAn3S910H9ACestZu8/W9RURERPJ1Yr8zjM0bVRpBm7ugxS3Owp3F3TUvwKEtBUv+SlXJvVKcD23dupW7776bH374wa29S5cuTJw4kQYNGvg9BgktYb66kHF8ALwPXATsA07/c8dG4DbgZl/dV0RERMQjK9/zbBhXhtZ3wMAlcOF9oZHsQFaluDZ3OsPV8hJ/EHb+6rdQ0tLSGDduHM2aNXNLdsqVK8fbb7/NDz/8oGRHvOKzhAcYAPQCfgTqWWvrnX6AtXYjsBW3IvEiIiIiRWj7Iu/OO7qzeA5dy09GpbjB66HrSKjfBWpd4Hzs8gSc3TLr2K8fhdScVhwpnO3bt9OpUycefvhh4uOzZkJ0796d9evX079/f0wofu+lSPhySFtf4CBwk7U2r9Ws1gGtfHhfERERkYLzdh2ZAK8/43e5VYo79wqY2AWsCw5tgt9eh04P++SWycnJvP/++0ybNo3U1NTM9qpVqzJ+/Hh69uwZmETH01LlEtR8mfCcB/yQT7IDcALQT4qIiIgUveN/wdFd+R+XkwCtPxNwNVpC276wdKKz/fOL0LSHs6BpISxdupS+ffuydu1at/bevXszbtw4qlQJwIonnpYql2LBl0PaXEA+gz8BqA2E+J9IREREJKgkxzslmMe3hpP7vLtGEa8/E1S6jnCKFgCkxMO3j3t9qfj4eB577DE6dOjgluzUqlWLL7/8kmnTpgUu2ZnWw+nZyW2OV0ap8mk3OcdLseDLhGcD0MYYUyq3A4wxlYCWwBof3ldEREQkZ9ZF9f0/wWtt4afnnDfr3iji9WeCTmxFuOLprO0NX8DmuR5f5ueff6ZFixaMGTMGl8uV2d69e3fWrVtHt27dfBGtdzwpVb5jIXwzzL/xiM/4MuH5EKgKvGqMya0w+jigDDDNh/cVEREROdPO32i7aihNNr4Cx/dktZeqAnU6eHatIlp/Jqi16AW122dtf/0YpCYV6NRjx44xYMAALr30UjZv3pzZ3rBhQ8aOHcugQYMoV66cryMuOG9Kla/8wJnrI0HPlwnP68BvOGvurDXGvJTe3sQY86wxZi1OSeoFwFQf3ldEREQky5EdMPNOmHIV5U5kvbkmPAo6PgQProB//w/qFnCIWt1ORbL+TNALC4N/vAQm/e3j4S3wy/h8T/vqq69o0qQJb731VrZLhfHYY4+xZs0aWrRo4a+IC86bUuWuFFjxnn/iEZ/yWcJjrU0BrsJZh6cRMDh91wXAcCAOpxfoWmutK8eLiIiIiHgr8TjMHQWvXQDrPnPfF/dPZw2dK56GmPIFW38mLNLZf9snmqCe4ezmcEH/rO35LznlunNw4MABevfuzbXXXsuePVk9bM2aNWPx4sW88MILxMbG+jvigvG2VPn2Ag6Bk4DyZZU2rLUngDuMMU8AlwPn4CRVu4G51totvryfiIiICK40WPk+zHsGTh1w23W8TAM2NehDmxvuP/O8jPVnuoxw/lK/faFKEBdEl8edhPLU35CaAN8Mh1s+yNxtrWXGjBk88MADHDx4MLM9KiqKkSNH8thjjxEVFRWIyHOnUuUhzacJTwZr7S7gHX9cW0RERCTTlh/h2xHw9zr39rJnw2VPsexQ1awhWLnJbf0ZyVlsBbjyP/DZPc72H1/Cpu/h3CvYs2cP9957L7Nnz3Y7pUOHDkyePJm4uLgABFwA3pYcDw+yxE1y5LMhbcaYK/Oq0CYiIiLiMwc3wfSb4f3r3ZOdiFjoPAweWA4te+Wf7Ih3mt8MdS7M3LRfPcLEN98gLi7OLdkpVaoU48aNY+HChcGb7ACc09G783Ythm8ehxNeljqXIuHLHp5vgBRjzHLgZ+AnYKG19pQP7yEiIiIlWfxh+PkFWDoJXKnu+5rfApc9CeVrBia2ksQYp4DBW5ew+VAKd7+7jh+3D3Q75PLLL+ftt9+mXr16AQrSA61ud9Zp8rhwQSr89rrz89jmTqcohn7+go4vE563gUuBDumvx4A0Y8wKnOTnJ5wESIMdRURExDNpKc6byp+eh8Sj7vtqd4Crn4OabQITWwmVVvV8xu1uycipP5KQLfcsX748Y8eO5a677sIYE7gAPVG2OlQ5F/5eX/BzImIgNdH5PC0JlrwFy9+BVv+GTg9Dhdr+iVU85rOEx1o7AMAYcxZO4nMp0AVol/56FCcBWgn8aK3Vak0iIiIl2cm/nVXtty/KvViAtfDnN/DdE3Bos/v5Feo4Vdfirnd6HKTI/P777/Tp04elS5e6tV/ftiavf76EGjVqBCgyL614z7Nkp24nuPl9WP0RLHoFTqYPaUtLhmWTneu1vBUuHgwVz/FLyFJwPi9aYK3dB3yU/sqeAF0O3IpTprotoIRHRESkJEpJcFa1XzX9zCFEW390enFa9XaGGf0wGrb97H5MVFm4ZAi0v1flootYcnIyzz33HM899xwpKVnPrlppw+v/iOGm849jTqwBilHCs30RfDk4azu2EiSdyHl4W1ik87N59QvOz96F90HbPk6VwIUvZy1w60pxkvmV05wFWy8eDJUbFM3XI2fwS5U2AGNMGE5ic2n6qyOQ8a/SwZzPEhERkZCWkgDTesCOPNYvcaXA8qnOKzsT5vT+dBmhctEBsGTJEvr06cO6de4V8W6//XbGtt1L5UNLnIY5j0H9zk7Z72B3ZDt8/O+s5KZ0Nbj7R6f6WkFLlUfGQLv+zr5VH8CCsXBsl7PPpsGqabB6OjTr6VQCrHJukX6J4sOEJ5cEpwxggAPAd6TP5bHWrsvxIiIiIhLa5gzNO9nJTf1L4arnoHoTX0ck+YiPj2fkyJGMGzcOlytr7fg6derw1ltvcfXVV8PfG2BCR+cN/tEdsHAcdBkewKgLIPE4TL8F4g852+HRcMt0KF/L2fa0VHlEtNPb0/I2WPNR+qKsO5x91uW0rZkBTW9yrlvtfN9+PZIrX/bwHMFJcMDpwVGCIyIiIllO7HeGsXnq+regxc2apxMA8+bNo3///mzdutWt/f777+e5556jbNmyTkO186HDvfDra872wpedZ1apfhFHXECuNPi0PxzYkNV23XiofUHhrx0R5fT2tOgFa2fC/DFwOOP7Z+H3WfD7JxB3HVzyGJzVNPdrFWSem+TLlwlP+k88vwMTcAoT/OHD64uIiEhxtvI9z8v+AhzfrWSniB09epRHH32USZMmubU3btyYSZMm0alTpzNPunSY80b+xF9O1bI5Q+HWj4Pz2c0d5RTDyNDpYSdB86XwSKdwQbOesO5TJ/E5+Gf6TgvrP3de510LlzwKNVpmnVvQeW4Zc4kkT75cjetJYB7QAHgNWGeM2WuM+dAYc48xppEP7yUiIiLFzfZFXp7nxRA48doXX3xBkyZN3JKd8PBwhg8fzqpVq3JOdgCiy8KVz2Rtb/oONs7xc7ReWPkB/PJq1nbjbtD1Sf/dLzwCmveE+36DHlOg6mlD2f74Et7u7Cyku3t51jy3Fe/m/geCjHlu025yjpc8+SzhsdY+Y629HKgAdAZGARuA63B6fDYYY/YYY6YbY/r76r4iIiJSTCR7uRSft+eJR/7++29uueUW/vnPf7J3797M9pYtW7JkyRKee+45YmLy6U1oehOcc3HW9pyhkBzvp4i9sPM3+HJQ1nb1pnDj2xDmyz6AXISFO9+fe3+Bnu9B9Wbu+//8BiZ1hfFtCj7PbcdC+EaFj/Pj86drrU2x1i601v7HWnsZTgJ0CU6vT0XgZpwESEREREqSsEjvzosqk/8x4jVrLR988AFxcXHMmDEjsz06OprnnnuOJUuW0Lp164JdzBj4x0sQlj5r4thOZz5PMDiyAz7q7ayVA1C6KvT6EKKL+OcrLAzi/gkDFsAtH8LZLd33Z5S2LqiVHzhzfSRXfktnjTGVjTE3Av8F3gAG4pSlNukvERERKQnSUuHXN2DPMu/OPyeXIVRSaLt27eLaa6/ltttu49ChQ5ntHTt2ZNWqVQwfPpzISA8T1WrnQYf7srYXjYNDW3wUsZeSTsKHvSA+fWWU8Ci4+QNn8dpAMQbO+wfc/RPcOhNqtvHuOq4Up4S25MpnCU9GgmOMedUYswbYD8wE7gfigDXAOOAGoIqv7isiIiJBbPdymNgFvh2e9Zd1T4RFOhWpxKdcLhcTJkygSZMmfP3115ntpUuXZvz48cyfP5/zzjvP+xt0Hgpl0xcfTUt21uaxtpBRe8nlgk/vhr+zFQ3u/grUaR+YeE5nDDS6Evr9AGe38O4amueWJ19WacvoSzOAC1hNellqYIG19qgP7yUiIiLBLPEY/PAfWDoJyPZGNzzKs8SnVW+V3/WxTZs20a9fP+bPn+/WftVVV/HWW29Rt27dwt8kugxc/RzMvNPZ3jzXmZx/fvfCX9tT856GjV9lbV/0oFM9LdgY4/x+eEPz3PLkyyFtK4GXcYoUVLbWtrHWDrHWzlayIyIiUkJYC2tnwWsXwNKJuCU7LW6FB1ZC3QIOUavbySm7Kz6RmprKiy++SPPmzd2SnYoVKzJ16lTmzJnjm2QnQ9z1zoKxGb4ZDsmnfHf9glj9kfscokZXw+WjijYGT3g7X03z3PLkyyptba21j1hrv7TWHvPVdUVERKSYOLQFpt0In/SFk/uz2qs0gju+hBsmQIVacNssaHNn7kUMwiKd/bd9ojVGfGT16tV06NCBoUOHkpiYmNneo0cP1q9fzx133IHx9Xo5xsA1Y7Ke87FdsOC/vr1HXnYtgS8eyNquFgc3TXKqpQWrczp6eZ7mueXFrzX4jDGRxhgvS7KELmPMHcaYZcaYo8aYU8aYFcaYWwIdl4iIiFdSk+DnMfDGhbBlXlZ7RAx0fQIGLIJ62UoVR8Y6cygGr4euI6F+F6h1gfOx60invfsrSnZ8ICkpiZEjR9K2bVuWL1+e2V69enU++eQTZs6cyVlnneW/AKo2govuz9pe9Coc3Oy/+2U4ugs+ujVr+GSpytDrI2etoGDW6nbvqhkmHNV6PHnw5RweAIwxnYEHgYuByulth4D5wKvW2vl5nF5SVAT+B6wCEoHrgQ+NMYnW2v8FNDIRERFPbFsAXw3OtoJ8ugaXQbeXoFL93M8tUw0uecR5ic/9+uuv9O3blw0bNri133XXXfz3v/+lYsWKRRPIJY/CmplwfLdTUWzOo3Dbp04PkD9kVGQ7dcDZDot0KrJV9OFwPX8pW92ZX7TiXc/O+3U8/DHb6VFrdKV/YivGfNrDY4z5DzCPrEpsKemvKsCNwI/GmKd9ec/iyFo7Ln2h1i+ttXOttfcDi4DegY5NRESkQE4dhM8GwLvXuic7ZapDj3ec4Wh5JTviNydPnmTQoEF07NjRLdk555xz+O6775gyZUrRJTsAUaWdAgYZtsyDDV/4514uF3x2D+xfm9V27ctQ90L/3M8frnmh4PPcshc5OLIdpv/LWWvo6E6/hFZc+bIs9fXACOAo8DhQG4i11sYAtYDhwBFghDHmn766bwg5BGj4n4iIBDeXC5a/66wGv/rDbDsMtLsb7l8KTW/031/vJU/ff/89zZo145VXXsGml4E2xvDggw+ydu1arrjiisAEdv510KBr1ra/Chj8+KxTDS7DhfdD63/7/j7+FBlb8Hlug9c7X6PJNi/pjy/htXbOfKlUL0rBhyBf9vA8ACQDl1prn7fW7rHpv2nW2r3W2heALjg9Pg/kcR2fMca0McYMM8Z8aozZbYyxxph8i8AbY2KNMU8bY/40xiQaY/YaY6YYY2r6OL4IY0w5Y8zNwBXAW768voiIiE/tXw/vXAOzH4TEbAVYz2oO/X+Af4yBmPKBi68EO3LkCH379uXKK69k+/btme3nnXceCxcu5JVXXqFMmQBW8jIG/vFSVo/E8T3w84u+vceambDgpaztc6+EK4rpwKKCznMrXRWuehYGLIA6F2Wdn5oAPzwNEy6CrT8F7MsIFr6cw9MamGetXZvbAdbatcaYeUBR9SuOBDzqTTLGxOAMy+sA/AV8DpwD3AVca4zpYK3dWtjAjDFnpV8fIA24z1o7p7DXFRER8bnkU86b019fA1dqVntUWacowQX9INzn04KlgD777DPuu+8+9u3bl9kWERHB0KFDeeKJJ4iJCZLiD5UbOGvgZCQlv77mu/Vwdi+DzwdmbVc9D26aHNwV2QqioPPcqjeBu752ynB/PzJr/tKhTfDeP6HJjU5iVK6G/2MOQr781ykaKEg56uPpxxaFX4E1wNL01/YC3PsJnGTnV+BKa+1JAGPMYOC/wBTg0oyDjTEVgPzKm8Rba08fTHkQuAAoC1wNvGaMOWSt/STfr0pERKSwTv7tTIzevshZtDCqjFPatvXt7gt9/vktfPUIHDvtv7Hzr3PmGpTQN1DBYP/+/TzwwAPMnDnTrb1169ZMnjyZli1bBiiyPFw8BNbMcEpUu1Lh60eh1kOFGwJ5bHd6RbYkZzu2klORLaacb2IuLoyBlr2g8TUw7xlYNhmsy9m37lPY9B1cOhza3wPhJWsWhS8Tnu3AJcaYGGttYk4HpPeeXJx+rN+lD6PLfv88jzfGRAEZtRMHZiQ76dcaa4y5A+hsjGljrc2o7XgLMCGfUH4mW5KUfr1UYFn65o/GmErA/wFKeERExH9SEmDOUFg13amYld3WH+Gn56FVb7joIZj7JGyY7X5MhTrO0KRGVxVdzOLGWsv777/PoEGDOHLkSGZ7dHQ0o0ePZsiQIUREBGmPW1QpuPp5mJFep2nbz1SLuYC/q3q5/kzyKaciW8a6T2ERcPP7UKmeb+ItjmIrOBUSW93mVFDck/6WNfkkfDfC+d3v9hLUvSjv64QQX87hmQWcDXxsjKl1+k5jTA3gQ5zekJmn7w8SHYHywBZr7coc9s9K/9g9o8Fa+6a11uTzurQA914FqJyNiIj4T0oCTOvh9OycnuxkcKXA8qnwWhv3ZCcsAjo9DPctVrITQDt27OCaa67hjjvucEt2Lr74YtasWcPQoUODN9nJcF43aJhVPOHcLVMIT/ViDRmXC/53L+xbk9XWbawW4cxQoyX0nevM9YnNVpXv73XOXLzPBjg9vSWAyajgUegLGVMGZxhYE5zCBAvJ6smpC3QCooC1QMfsvSdFxRiTCERba3Ps6jHGDAJeBmZaa3vmsL8b8CXwmbX2Rh/H9gHQ3lrbsADHrstlV4O6detGT5kyxZehFdipU061ldKlSwfk/pI/PaPiQc+peCiOz6nxn29Qc9/3WMCTAURHy53PxnMHcKp0HX+F5jfF8TnlxOVy8cUXXzBp0iQSErKSg9jYWO6++26uvfZawsL8up68T8Um/EX7ZQ8SZp05YZurd2Nn434eXaPe9g+pt/PjzO1dNa9lU4O+Po0zVESmHKfBtvepsW+uW3tKeCm21uvNnrOvcq/0loNA/y716dOHHTt2rLfWNvH0XJ/9CcBae9IYcwkwFrgVpyJbdinAu8DgQCQ7BZTxL/nuXPZntBdq5SpjzI84Q9f+AGJwCivcCtxdmOuKiIjkJir5CGfvnwcUPNmxwKb6d7G75rVgis+b6VCza9cuXnrpJX7//Xe39nbt2jFo0CCqV68eoMi8lxB7Njtq30C9nc6gn/r7v+FgrauIL127QOdX+3uhW7JzqGIrNte/0x+hhoSUyHL80Wgge8+6jMab3qbsqW0ARKbF03jzRM7e9wN/NryH4+UaBThS//Bpn6e19ghwV/oE/w5AxkzGvcBv6fuDWUa9xvhc9mcUjC9byPusxinNXTv9muuB7tbaL/M8K11uma0xZl3p0qXjunbtmtNuv5s3z/mPNFD3l/zpGRUPek7FQ7F7TvPHgE3z6BQDNDqnFo0uudw/MRWBYvecsklJSeG///0vo0aNIikpKbO9UqVKvPLKK/Tu3Tvf+clBLeVCeH0xHN1JGGl0ODQTrp2dfwGDPcvhl9eztqs0onK/z+mikugF0BXS7nYKGsx7BpKOA1Du5FbarhoGbe6Ay56CUpWyTkkvcHJ4y2zC0xIoX7VmzgVO/KwwPUt+GeSZntioxHIurLWDgEGBjkNEREqQ7Yu8PG9h/iVxxedWrlxJ3759WbnSfUpxz549GT9+PNWqFd0bTb+JjIVrXoQPb3G2ty+A3z+BZj1yP+f4XvjwVkhNr48VWzG9IpuSnQILj3AqtcVd75SwXjMjfYd15u+t/wIuHwVNe8C3wzMLnGSmQCf+dC9wcvULEBkkpc9zUej+aWPMJcaYscaYmcaYacaYx9LXmCmOMobalcplf0ZqeaIIYhEREfGdZC9Hk3t7nnglMTGRxx9/nAsuuMAt2Tn77LP57LPPmDFjRmgkOxkaX8PBSm2ztr8dAYnHcz42Od4pP30yfb2hsAjo+Z6zvo94rmx1uPFtuPMrZ92iDAmHncWF/9u4YAVOpt3kFEQJYoXq4THGvA1kzA7L6H/sBTxhjLnJWvt9Ya4fABmLDJxRZe609h1FEIuIiIjvRJXJ/xhfniceW7RoEX379mXjxo1u7X379uWll16iQoUKAYrMv/5s0JeKR1YTblOcZOb7p6B8jTPXiNqzHPZm6/H6xxiod0ngAg8V53SCAQvhtwlOr01K+gyO5AL+fX/HQvhmmFMNLkh5nfAYY/4N9ANcOBPwV+LMbfkH0AL40BhTz1pbnHpDVqd/bJ3L/oz2NbnsFxERCT4pCVmLMnpKJX797sSJEzz++OO8/vrrZK+eW69ePSZOnMhll10WwOj8LzH2LHbUuYn6Oz5yGpbnUG1264/u2+3uhrZ9/B9cSREeCR0fhKY3OWv3/PmNZ+ev/AC6jCjSOT2eKMyQtj44BVyut9bebK193lo7AicpmAFUBG7wQYxFaRFwDGhgjMlpeeKMQaWzc9gnIiISfLbNhwkXwY5fPD83LNKZmCx+8+2339K0aVNee+21zGTHGMOgQYNYu3ZtyCc7GXaf/Q+IiC7YwTEVoOuT/g2opCpfE2q1zf+407lSYMV7vo/HRwqT8DQHlpxeWcw6v62jcYa4tSjE9YuctTYZeC1983VjTGY5iPTKc82Bn621ywMRn4iISIHFH4bPB8K73eHwVu+u0ap30P7Ftrg7fPgwd9xxB1dffTU7d+7MbI+Li+OXX37h5ZdfLvZrB3miwfb3IbWAvZCJR+H7J/wbUElWmAInQaowCU8FYFMu+/5M/xjQkhnGmG7GmN8yXjgLn5K9LX0x0eyeARYDFwGbjDEz0s/9L3AAp2dLREQkOFnrVLp6vR2snJbVbsKg/b1Q58KCXaduJ6f6kvjcrFmzOP/883nvvay/iEdERPDkk0+yYsUKOnToEMDoil72NaIKbOUHTrlk8b0QLHBSmKIFBkjNaYe11pVeFz7Qq5RVBdrn0N7+tGMyWWsTjTFdgOE4i4FeDxwGpgIjrbW5LUoqIiISWEd3wVdDYNO37u1nNYfrXoUarZz5PN8Mc94w5lR9KSyy2JSaLW7++usv7r//fj799FO39rZt2zJ58mSaN28eoMgC6+x9cwnzcI2ozCFUKpnueyFY4MQv6/AEC2vtVJxExdPzEoAn018iIiLBzZUGSyfBD0+7/5U1Iha6DIcOA521N8BZ+6T7K84E4xXvOcNQslfCKuLFBEsCay1Tp05l8ODBHD16NLM9JiaG//znPwwaNIiIiJB+S5anikfXeXei1ojyj3M6nlkkokDnBW+Bk8L+dvU2xuS2OpTNY7+11mqFKBERkcLavw6+eBD2LHNvr38pXPsyVKqf83llqjlvFvWG0a+2b9/O3Xffzfffu6/U0blzZyZNmkTDhg0DFFnwCE/zcg2XIB5CVay1uh1+eiH39XdyEuQFTgqb8ESmv7zdLyIiIt5ISYT5Y2DROHBlG2EeWxGu+j9ocQsYk/v54ldpaWm8/vrrPP7445w6dSqzvWzZsowZM4b+/fsTFhbokf/BIS081rsTg3gIVbFWtjq0vNVZdLSggrzASWESnrI+i0JEREQKbvtCmP0QHNrs3t7sX06yU6ZqzudJkdiwYQN9+/bl119/dWvv1q0bb775JrVq5ba+ecl0pEITKh1dnf+BpwviIVTF3jUvwKEtzqKi+SkGBU68/tOCtfZUYV6+/CJERERKhIQj8MUDMLWbe7JTvg70ngU3TVKyE0ApKSk8++yztGzZ0i3ZqVKlCtOnT2f27NlKdnLw11mX4zLhnp0U5EOoir3IWLhtFrS50/le5yQs0tl/2ydBX+Ck5M6QExERKS6shfWfw5zH4OT+rPaMUtNdHodoDe8JpOXLl9OnTx/WrFnj1t6rVy9eeeUVqlZVIpqb5KiK/FW9KzX3fZ//wRmCfAhVSDitwMnhFV8QnpZA+ao1i12BEyU8IiIiwezYHvj6Edj4tXt79aZOqemabQITlwCQkJDA6NGjeemll0hLyyqtXLNmTSZMmED37t0DGF3xsalBX2pGJ4TMEKqQkl7gZFVqawC6du0a4IA8p4RHREQkGLlcsGwyzB0NySey2iNioPNQuOgBCFddoECaP38+/fr1Y9Mm93XY7777bl588UXKl1dB2oJyhUc7Q6i0RpT4gRIeERGRonbyb6cC0vZFOa+B8/cGp9T07iXu59W7BK4dB5UbBCZuAeD48eMMGzaMCRMmuLU3aNCAiRMn0qVLlwBFVsxpjSjxEyU8IiIiRSUlAeYMhVXTz/wL9tYf4afnoVqcs7aOzVZqOqYCXPUstOytUtMB9vXXXzNgwAB27dqV2RYWFsbgwYMZPXo0pUqVCmB0IUJrRImPKeEREREpCikJMK1H3nMUXCmw77TyvE1vgquf11+2A+zgwYM8/PDDVdNo3gAAIABJREFUTJs2za29adOmTJ48mXbt2gUoMhHJjxIeERGRojBnaMEmZGeILA3/egcaXeW/mCRf1lpmzpzJ/fffz4EDBzLbIyMjeeKJJxg2bBhRUVEBjFBE8uOzJX6NMWuMMaMLcNwoY4wXq0uJiIgUUyf2O8PYPJGWDDVa+SceKZC9e/dyww03cPPNN7slO+3atWPFihU8+eSTSnZEigGfJTxAU6B2AY6rmX6siIhIybDyvZyrTuXFleJM3JYiZ61l0qRJxMXF8fnnn2e2x8bGMnbsWH755ReaNtVbGZHiwpcJT0GVAlLzPUpERCRUbF/k5XkeDIETn9i6dSuXX345/fv359ixY5ntXbt2Ze3atTz88MOEh4cHMEIR8VSRJjzGmNrAJcCu/I4VEREJGckni/Y88VhaWhovv/wyTZs2Zd68eZnt5cqVY+LEicydO5cGDVQOXKQ4KlTRAmPM8dOaehtjeuRxr2jAAFoeV0RESoa0VIg/7N25UWV8G4vkaN26dfTt25fFixe7tV933XW88cYb1KxZM0CRiYgvFLZKWzJg0z8vDbiApFyOPQHsBb4Ani/kfUVERILfX2vgi/vh8Bbvzj+nk2/jETfJyck8//zzPPPMM6SkZM2xqlq1KuPHj6dnz54YrXskUuwVKuGx1lbJ+NwY4wI+tNb2KXRUIiIixVlKAvz8Aix6FWyad9cIi3RWlhe/WLp0KX379mXt2rVu7b1792bcuHFUqVIllzNFpLjx5To83dHcHBERKem2L4QvHjyzV6dyQzi0ueDXadVbi436QXx8PE899RRjx47F5XJltteqVYs333yTbt26BTA6EfEHnyU81tqvfHUtERGRYifxGHz/FCx/x7294jnQ/RWo3R6m9SjY4qN1O8HVmu7qaz/99BP9+vVjyxb3ZPTee+/l+eefp1y5cgGKTET8yZc9PAAYY6oDHYGzcYoU5MhaO9bX9xYREQmIP76Cr4bAib+y2kwYdLgPujwOUaWdtttmwTfDYOUHOa/LExbp9Oxc/QJExhRN7CXAyZMnueeee3j77bfd2s8991wmTpxI586dAxSZiBQFnyU8xphwYDzQD8goUH/6TD+b3mYBJTwiIlKsRSYfhY/vgPX/c99RvSlc9yrUbHPaCbFOb0+XEc6iotsXOqWno8o4BQpa365hbD7266+/Mm7cOA4ePJjZFhYWxiOPPMKoUaOIjY0NYHQiUhR82cPzFDAAiAc+Bv7EqcwmIiISWqzlrH3zOHfrO5Caba2c8Cjo/Bh0HAThkbmfX6YaXPKI8xK/OHDgAA899BAffvihW3vz5s2ZPHkybdu2DVBkIlLUfJnw/BsnwWlrrd3kw+uKiIgEjyPbYfYg4rb+6N5e50Lo/ipUbRSQsMRhreWjjz7iwQcfdOvViYqKYuTIkQwdOpTIyDySUREJOb5MeM4GvlOyIyIiIcmVBovfhHnPQEp8VntUGbh8FLTtC2FhgYpOgN27d3Pvvffy5ZdfurWff/75zJo1i7i4uABFJiKB5MuEZzfg5WIDIiIiQWz/Ovj8fti7wq35YKU2VLnjPShfK0CBCYDL5WLSpEk8+uijHD9+PLO9VKlS3HnnnVx//fVKdkRKMF8mPO8Cg40xFa21R3x4XRERkcBITYL5Y2Dhy+BKzWovVYXf69zO31U70VXJTkBt3ryZ/v3789NPP7m1X/7/7N13eFZF+v/x9yQktCC9KkXEAghIcQFFRFBERXGVXfnprq4k9CICSm8qIFWRKhBE1vIVQVcUUFFAiiBIKCKrsCCoSFGkBQJp8/vjPClPSAhJTnJSPq/rei587jNz5nbPCtyZOTN3383cuXP56aefvElMRHINN+fexwPrgVXGmFtdvK+IiEjO+3kzzGnhFDzJi536naDXFo5XuANMys1IJafExsYyZcoU6tev71fslCxZkvDwcD7//HOuvfZa7xIUkVzDzRmeCJwCqjaw2RhzBjgMxKfS1lprG7g4toiISPoij0PEm3BwY9rbQV88C1+Mga3zcU5R8ClZFdq/Ctff7UnqkuS7774jNDSUrVu3+sUffvhhZs6cSZUqVTzKTERyIzcLnptTfC/p+6TGphEXERFxX0wUrBwEO9659MDPA2tg7cvOgZ+17nHanfk1WQMDTbtB6xFQOCRH0xZ/Fy9eZNy4cYwbN47Y2KRZtwoVKjBz5kweffRRjGbdRCQFNwueEi7eS0RExB0xUfBWRzi0Ie028TGwbaHzSa78TfDQdKj6l+zMUK7AN998Q2hoKN9//71f/Mknn2Tq1KmULVvWo8xEJLdzreCx1p5z614iIiKuWTno8sVOagKC4I4BcEd/KFQ4e/KSK3Lu3DlGjBjBq6++irVJC0SqVavG66+/Trt27TzMTkTyAjdneERERHKXs8ecZWwZYuDJ/zjv9oinVq9eTZcuXThw4IBfvFevXowfP54SJbS4RETS5/oJacaY240x/zbG/GiMOWGMmZXsWmtjzAvGmIpujysiInKJ7YsufWcnXdbZoU08c+rUKbp06UKbNm38ip0bbriBdevWMWPGDBU7InLFXC14jDFjgXXAE8C1QGmgSLImp4FhwN/dHFdERCRVBzdmsl8Gl8CJa5YtW0bdunWZP39+YiwwMJDBgwezc+dO7rjjDg+zE5G8yLWCxxjzGDAE2A20BIqnbGOt3QYcAR5ya1wREZE0RUfmbD/JtOPHj9OpUyc6dOjAb7/9lhi/5ZZb2LJlC+PHj6dIkSKXuYOISOrcnOHpDZwB7rPWbrDWprWGYCdQy8VxRUREUhecyW2kM9tPMsxay9tvv02dOnV47733EuOFCxdm3LhxbNmyhUaNGnmYoYjkdW5uWtAA2Git/S2ddn8CeodHRESyV/R5iI3KXF9tWJAjfvnlF7p3786KFSv84rfddhvh4eHcdNNNHmUmIvmJmzM8AcDFK2hX+QrbiYiIZM5P62D2bZnbfCAgCBo96X5Okig+Pp7Zs2dTt25dv2KnePHiTJ8+nfXr16vYERHXuDnDsx9oZIwJtNbGpdbAGFMMZybovy6OKyIi4og6BatGQsSbmb9HwycgpIJ7OYmfffv2ERYWxrp16/zibdu25fXXX6dGjRreJCYi+ZabMzxLgWuA0ZdpMwYoA7zv4rgiIiLwwwqY1cy/2DGB0KwXVGt+Zfeo3gLaTcie/Aq42NhYJk6cSP369f2KndKlS7Nw4UI+/fRTFTsiki3cnOGZCjwODDXGNAf+44tXN8Z0Af4K3At8D8x2cVwRESnIIo/Dyufh+w/94xXrQYfpUKUhxETBp4Nh+9upn8sTEOTM7LSbAEHaCcxtO3fupHPnzkRERPjFO3bsyPTp06lUqZJHmYlIQeBawWOtjTTGtAbeBVoDd/kutfJ9DPA18Hdr7QW3xhURkQLKWtj1nlPIRJ1MigcWhlaD4La+EBjkxIKKwoPT4K5hELHIOWcnOtLZja1GC+edHS1jc93Fixd56aWXePnll4mNjU2MV6xYkVmzZvHII494mJ2IFBRuzvDg26HtTmPM7UBboAbOsrlfgVXW2tVujiciIgXUqZ/h436w/0v/eNVm8NB0KH9D6v1CKkDLgc5HstWmTZsIDQ3lv//1f2336aefZsqUKZQuXdqjzESkoHG14Elgrd0IZPJ4axERkTTEx8PWefDFGIg5lxQPDoG7R0OTUAhw8/VUyajIyEiGDx/Oa6+9hrU2MV69enXmzp1L27ZtPcxORAqibCl4REREXPf7j7CsD/zyjX+81j3Q/hUoVdWbvCTRqlWr6Nq1KwcPHkyMGWPo06cPY8eOJSREB7qKSM7LdMFjjMnSwltr7QdZ6S8iIgVEXAxseBXWTYS46KR40TLQ7mWo/3cwxrv8hJMnTzJgwADeeOMNv/hNN91EeHg4t912m0eZiYhkbYZnCWDTbXUp4+sXmIWxRUSkIDgc4czqHNvtH7/5UWdHtZDy3uQliT788EN69uzJ0aNHE2OFChVi0KBBDB8+nCJFtOudiHgrKwXPVC4teK4BHgOigXXAQV+8OtASCAb+DzichXHzPGPMv4A3Url0l7V2bc5mIyKSC0Wfh7XjYdMMsPFJ8RJVoP1UuPE+73ITAI4ePUqfPn1YsmSJX7xRo0aEh4dzyy23eJSZiIi/TBc81lq/LW6MMTWALcAHQF/fjm3Jr1cCpgNtgGaZHTefaQHEJfu+x6tERERyjZ/WwbK+cPIn/3jjp+GeMVCkpDd5CQDWWhYtWsSzzz7LyZNJ24EXKVKEMWPG0L9/fwoV0ivCIpJ7uPk70nggCvh/1tpLTnWz1h41xjwB7PO17eTi2HnVN9ba2PSbiYjkA5HHIeJNOLgx9TNwLpyGVSNh20L/fmVqOltN12jhSdqS5NChQ3Tr1o3PPvvML37HHXcwf/58brghje3ARUQ85GbB0wb4IrViJ4G1NtoY87WvrYiIFAQxUbByEOx4B+JT/BFxYA2sfRmubQnHvofIpPdAMIFwW29oNcQ5OFQ8Ex8fz6xZsxg8eDDnziVtBx4SEsLEiRPp1q0bAdoOXERyKTcLnuLAlbw9Ws7XNtsZYxoD9wB/8X2uBrDWXnY7H2NMUWAIzixUNeBP4FNghLXWzfePDhtjyuIsZXvBWrskvQ4iInlKTBS81REObUi7TXzMpQeIVqwHHaZDlYbZm5+k64cffiAsLIyNG/2P17vvvvuYM2cO1apV8ygzEZEr4+aPY74H7jTG3J5WA9+1Vr62OWEEzvK5v+IrdtJjjCkCrPb1DQE+An4Bnga2G2NqupDXEWAY8DjwMLAfeN8Y08GFe4uI5B4rB12+2EnJBEDrEdB1jYodj8XExDBu3DgaNGjgV+yUKVOGf//73yxfvlzFjojkCW7O8EwC3gM+N8aE+/75kO9adeDvQChOkTXJxXEvZxOwC9jq+xwECqfTZzjOpgqbgLbW2kgAY0x/YAqwAKdowxcvBVRK557nrbU/J3yx1n4GJF8A/YkxZj0wFKfAEhHJ+84ec5axZYQJcN7pCQzKnpzkimzfvp3OnTuzY8cOv/hjjz3Ga6+9RoUKFTzKTEQk41wreKy17xtjqgPjgF6+T3IGiAWGWGvfd2vcdHKa4JdAOgfTGWOCgd6+r70Sih3fvaYaY57CmcVqbK3d5rvUCZidTipfkaxISsNHwNh02oiI5B3bF136zk564mMhYhG0HJh+W3HdhQsXGDNmDJMmTSIuLmkT0cqVKzN79mw6dNBCBBHJe1x9w9BaOxmoB7wKfAv85vtsA14BGlhrJ7o5pstuB0oC+62121O5nvCOzYMJAWvtHGutSefTKgdyFxHJXQ5uTL9Nqv0ysAROXLNhwwYaNGjAyy+/7FfshIWFsWfPHhU7IpJnGWtTnh2afxljLgCF09q0wBjTD6cwe99a+/dUrj8AfAJ8aK19xMW8DLABCLTWpntGkTEmrXegrqtevXrhBQsWuJVahiTs3FO8eI7sSSGZoGeUN+SX59R4+yBKnt2b4X6nS9zAtoYT0m/osfzynM6fP8/8+fP56CP/FdWVK1emf//+NGrUyKPM3JFfnlN+pmeUN3j9nDp37syhQ4f2WGvrZrSvTgbzl/D25a9pXE+IV8/KIMaYJTiHtO7CeacoDGgOPJSV+4qI5AdxgdqCOqds2bKFV155hePHjyfGAgICeOSRR/jXv/5F0aJ6FiKS96ng8Rfi+/V8GtcTDh8okcVx9uIUOdf4vm8H2ltrV1xJ57QqW2PM98WLF6/TunXrLKaXOatXrwbAq/ElfXpGeUOef04xUc7ZOmf3Zap7mUYP0bpl7v93z8vP6cSJE/Tv359Fixb5xevUqcOCBQto2rSpR5m5Ly8/p4JCzyhv8Po5ZWVmKdMFjzHmLBAPNLbW/s8YcyYD3a21tmRmx87rrLVDcXZkExHJXw5uhGV94M/9mesfEOTs0ibZwlrL0qVL6dWrl9+sTqFChRg2bBhDhgyhcOH0NjMVEclbsjLDcxGwOEUPQLTve16WsCtbsTSuJ5SWZ3MgFxGRvOPCGfhiNHwb7h8PLgHRGfgts+ETEKItj7PDkSNH6NWrFx9++KFfvEmTJixYsIB69ep5lJmISPbKdMFjrS13ue95VMJZOdekcT0hfiiN6yIiBc/ez+CTZ+HM4aSYCYDmveD2Z2Hxk1d2+Gj1FtAu929WkNdYa1m4cCH9+/fn1KlTifGiRYvy4osv8swzz1CokFa4i0j+pd/h/O30/ZrWljQJ8V05kIuISO527g/4dDB8l+JotQp1ocN0uLqx8/0fS5x2299O/VyegCBnZqfdBAgqkv15FyA//fQTXbt25YsvvvCLt2rVinnz5lGrVi2PMhMRyTkqePxtBE4D1xljbrHW7khxvaPv149zNi0RkVzEWti9FFY+D+dPJMUDguDO5+H2flAoOCkeVBQenAZ3DXMOFT24AaIjITgEarRw3tnRMjZXxcXFMWPGDIYOHcr580n78Fx11VVMmjSJsLAwAgJcPYpPRCTXcq3gMca0B54HRllr16TRpjUwGhhvrV3p1thusdZGG2NmAMOAmcaYttbacwDGmP5AfeAra+02L/MUEfHM6cOwvD/s/dQ/fs2t8NB0qFA77b4hFaDlQOcj2WbPnj2EhYWxadMmv3j79u2ZPXs211yT1qptEZH8yc0ZnjCgHrD5Mm024xQNoUC2Fzy+g0JHJAsF++LJc3zRWrs82feXgLuB24B9xpj1OOfuNAV+Bzpna9IiIrlRfDxELITPR/pvQhBUDNqMhL90hYBAz9ITiImJYcKECbz44otER0cnxsuVK8drr71Gp06dcM65FhEpWNwseBoCO6y1UWk1sNaeN8ZsBxq7OO7llMcpVFJqmqJNImvtBWPMXcAQ4HHgYeBPYCEwwlqb1qGkIiL504n98PEzcHC9f7xmK2epWukaHiQlyW3bto3OnTuza5f/K6aPP/44r776KuXLl0+jp4hI/udmwVMRWJ9uK/gNaObiuGmy1i7EKVQy2i8KGOn7iIgUTHGxsHkmrBkHsReS4kVKwr3j4JYnQDMGnoqKimL06NFMnjyZ+Pj4xPjVV1/NnDlzaN++vYfZiYjkDm4WPGdIezvn5K4Gzrk4roiIuO3od/BRbziSYu+Wm9rDA1OgRCVv8pJE69atIywsjH379vnFu3XrxoQJEyhZssCe7y0i4sfNgudboI0x5kZr7Y+pNTDG3IjzbkyqmxqIiIjHYi/Cukmw4RWIj02KF68AD0yGOh28y00AOHPmDIMHD2b27Nl+8euuu4758+fTqlUrbxITEcml3Cx45gDtgOXGmN7WWr8tfIwx7YAZQCDwuovjiojI5UQeh4g34eDGy28H/fM3sKwP/JHiZ1a3PAFtX4JiZXI2b7nEihUr6NatG7/+mvQ6aUBAAP3792fMmDEUK1bMw+xERHIn1woea+0yY8w8oAtO0XMY2O+7fB3OUjYDLLDWfuDWuCIikoaYKFg5CHa8c+mBnwfWwNqXnQM/W49wZnW+eR2wSW1KVoMHX4VabXI0bbnUH3/8Qb9+/Xj77bf94vXq1SM8PJxbb73Vo8xERHI/Vw8etdZ28+3CNhTnfZ7k7/T8DEyw1s5OtbOIiLgnJgre6giHNqTdJj4Gti2EHe9C3MVkFww07eYUQoVDsjtTuQxrLYsXL6ZPnz78/vvvifGgoCCGDx/O4MGDCQ4OvswdRETE1YIHwFo7B5hjjLkeqOoL/2Kt3XeZbiIi4qaVgy5f7CSXvNgpdwM8NAOqpbajv+Sk3377jR49erBs2TK/eNOmTQkPD6du3boeZSYikre4XvAk8BU4KnJERHLa2WPOMraMatYL7h4FhQq7n5NcMWst4eHhDBw4kNOnTyfGixUrxtixY+nTpw+BgTrkVUTkSmVbwSMiIh7ZvujSd3auRLEyKnY8duDAAbp06cLq1av94m3atGHu3LnUrFnTo8xERPIuVwseY0xJnE0LWgKVgbT+5LTW2gZuji0iIj4HN2ay3wZoOdDdXOSKxMXF8dprrzFs2DCioqIS4yVLlmTKlCl07twZo0NeRUQyxbWCxxhzHfAVTqGT3u/KNp3rIiKSWdGROdtPsmT37t2EhYXxzTff+MU7dOjArFmzqFKlikeZiYjkDwEu3msyUAX4FGjl++cSaXyucnFcERFJLjiTO6tltp9kSnR0NGPGjKFRo0Z+xU758uV57733+PDDD1XsiIi4wM0lbXcB/wM6WGtj02ssIiLZpNyNzjk7GVWjhfu5SKq2bt1K586d2b17t1/8n//8J6+88gply5b1KDMRkfzHzRmeQGCbih0REY/ERsNXk+Db8Iz3DQiCRk+6n5P4OX/+PAMHDqRZs2Z+xU7VqlVZsWIFixYtUrEjIuIyN2d4tgNXu3g/ERG5UocjYFkfOLY7/bapafgEhFRwNyfxs3btWsLCwti/f79fvEePHrz88stcdZVWe4uIZAc3Z3heBG4zxtzt4j1FRORyos/D5yNgfhv/YiekMlSoc2X3qN4C2k3InvyE06dP061bN+666y6/Yuf666/nq6++YtasWSp2RESykZszPCeAV4Dlxpj5wCrgVyA+tcbW2ggXxxYRKXgObnBmdf484B9v/DTcMwYCg+HTwbD97dTP5QkIcmZ22k2AoCI5k3MB8/HHH9OjRw8OHz6cGAsMDGTgwIGMGjWKokWLepidiEjB4GbB8y3OdtMG6O77XI6OiRYRyYwLp2HVKNj2hn+8TE148DW49o6k2IPT4K5hELHIKZCiI53d2Gq0cN7Z0TK2bPH777/zzDPP8O677/rFGzRoQHh4OI0bN/YoMxGRgsfNgucDdL6OiEj22vsZfNwPzv6WFDMB0Lw3tBoCwcUu7RNSwTlQVIeKZjtrLe+++y59+/blxIkTifHg4GBGjhzJ888/T1BQkIcZiogUPK4VPNbajm7dS0REUjj3h7M87bv3/eMV6kKHGXB1I2/ykkS//vorPXr04JNPPvGLN2/enPDwcGrXru1RZiIiBZubMzwiIuI2a2H3Ulj5PJxPmjEgMBhaPg+3PwOFgr3LT4iPj2fevHk899xznD17NjFevHhxxo8fT8+ePQkM1CpuERGvqOAREcmtTh+G5f1h76f+8WtuhYdmQIWbvMlLEh0+fJg2bdqwdu1av/g999zD3LlzqVGjhid5iYhIkkwXPMaY/lkZ2Fo7NSv9RUTyLRtPlSOrYPOTEJ00Y0BQMWgzCv7SBQI0Y+Cl2NhYFi9ezBtvvEF0dHRivFSpUrzyyis89dRTGGM8zFBERBJkZYZnMpnbpMD4+qngERFJ6cR+Gu4aRenTKQ4QrdnK2XGtdA0PkpLkdu3aRWhoKN9++61f/K9//SszZ86kcuXKHmUmIiKpyUrBMxXtyiYi4o64WNg8C9aMpXTshaR4kZJw7zi45QnQjIGnLl68yLhx4xg3bhyxsbGJ8YoVKzJz5kweffRRD7MTEZG0ZLrgsdZqf1MRkfREHoeIN+HgxrTPwDm6G5b1ht+2+/e9qT08MAVKVMr5vMXP5s2bCQ0NZc+ePX7xtm3b8u6771KmTBmPMhMRkfRo0wIRkewQEwUrB8GOdyA+xv/agTWw9mVo0AmKl4evX4P4pBmDi0Gl2FurK/UeG5bDSUtK586dY8SIEbz66qtYm7SooVq1avTs2ZNbb71VxY6ISC6ngkdExG0xUfBWRzi0Ie028TGw/d+Xxhs8zjfF2hEbVCL78pMr8uWXX9KlSxd++umnxJgxhl69ejFu3Di2bt3qYXYiInKlArxOQEQk31k56PLFTmpKVoN/LIW/zlax47FTp07RpUsX7r77br9i58Ybb2TdunVMnz6dEiX0jERE8grN8IiIuOnsMWcZW0aYAHhqGZS5Nntykiv20Ucf0aNHD44cOZIYCwwM5Pnnn2fkyJEUKVLEw+xERCQzNMMjIuKm7YsufWcnPTYedi/Nnnzkihw7dozHHnuMhx9+2K/YueWWW9i6dSvjxo1TsSMikkep4BERcdPBjZnsl8ElcOIKay1vvfUWderUYfHixYnxwoULM27cOLZs2ULDhg09zFBERLJKS9pERNwUHZmz/STTfv75Z7p3787KlSv94rfffjvz58/npptu8igzERFxU6ZneIwxHxtjwowxOlJaRCRBcEjO9pMMi4+PZ/bs2dStW9ev2ClevDjTp09n3bp1KnZERPKRrMzwtAXuB6wxJgJYBnxsrd3pSmYiInnNqZ/h1KHM9a3Rwt1cJFV79+4lLCyM9evX+8XvvfdeXn/9dapXr+5RZiIikl2y8g5PWeAx4B3gWuAFIMIYc8gYM90Yc68xJsiNJEVEcrX4eNgyD2Y1hz8PZLx/QBA0etL9vCRRbGwsEyZMoH79+n7FTunSpXnzzTdZuXKlih0RkXwq0zM81tpIYAmwxBgTANwGPAQ8CPQCegLnjDGf4cz+rLDWnsh6yiIiucgf+2BZH/h5U+bv0fAJCKngXk7iZ+fOnXTu3JmIiAi/eMeOHZk+fTqVKlXyKDMREckJruzSZq2Nt9ZusNY+b62tDdwAPA9EAB2AN4Gjxpj1xpjnjDFaHC0ieVtcDKyfArNv9y92ipaGh2ZA9duv7D7VW0C7CdmTYwF34cIFhg8fTpMmTfyKnUqVKrF06VLef/99FTsiIgVAtmxLba39n7V2irW2FVAB+CfwAVAPmAB8b4zZa4zpkB3ji4hkqyM7YV5r+PIFiLuYFK/7V+i1FRr9E/6xFBr/y1mulpqAIOf6P5ZCkM53cdvXX39Nw4YNGTt2LLGxsYnxp59+mj179vDII494mJ2IiOSkbN+W2lp7CngbeNsYUwi4E2fpW3ugAfBRducgIuKKmAvw1QTYOA1sXFI8pBI8MAVqt0+KBRWFB6fBXcMgYpFzzk50pLMbW40Wzjs7WsbmusjISIYNG8b06dOx1ibGa9Sowdx34BStAAAgAElEQVS5c7nnnns8zE5ERLyQo+fwWGtjgS99n2eMMcVzcnwRkUw7tAmW9YYT//OPN3oS7nkRipZKvV9IBWg50PlItlq1ahVdu3bl4MGDiTFjDH379uWll14iJERbf4uIFETZVvD4ipnCaV231v5prT2XXeOLiLji4ln4YgxsnecfL1UdHnoNarbyIitJ5uTJkwwYMIA33njDL167dm3Cw8Np3ry5R5mJiEhu4GrBY4y5DRgK3AFc7kdp1u2xRURct+8L+KQfnP4lKWYCoFlPuGsoBGuS2msffPABvXr14ujRo4mxQoUKMXjwYIYPH07hwmn+3E1ERAoI14oOY8w9wCdAEBAF7APOunV/EZEcc/5P+Gwo7HzXP17+JugwE65p4k1ekujo0aP07t2bpUuX+sUbN25MeHg4DRo08CgzERHJbdycZXkBp9gZAUyx1l5w8d4iItnPWtjzEawYCOd+T4oHFII7BsId/aGQZgy8ZK1l0aJFPPvss5w8eTIxXqRIEV544QWeffZZChXSAgIREUni5p8KDYAt1tqxLt5TRCRnnD0KywfAD5/4x6s0dGZ1Ktb1Ji9JdOjQIbp168Znn33mF2/ZsiXz5s3jhhtu8CgzERHJzdwseM4DB1y8n4hI9rMWtr8Fnw+DC6eT4oWKQuth0LQHBGrGwEvx8fHMmjWLwYMHc+5c0l43JUqUYOLEiXTt2pWAgGw5Vk5ERPIBN/8UXwPc4uL9RESyJvI4RLwJBzemfgbOyYPw8TNwYK1/vxp3OGfolL3Oi6wlmR9//JHQ0FA2btzoF7///vuZM2cOVatW9SgzERHJK9wseAYBW40xI4EXbfIT38SPMWYtzgGsqalirT2Sg+mI5D8xUbByEOx4B+Jj/K8dWANrX3aWqh39DmKjkq4VvgrueQEaPQWaMfBUTEwMkydPZsyYMVy8eDExXrZsWaZNm8bjjz+OMcbDDEVEJK9ws+B5GFgKjAL+boz5AvgViE+tsbV2qotj5zU9gatSxGYAQSp2RLIoJgre6giHNqTdJj4Gft3iH7uhHTwwFUpenb35Sbq2b99OaGgo27dv94t36tSJadOmUaFCBY8yExGRvMjNgmcyzvk6Bqjj+6SUcN0CBbbgsdbuSf7dGFMaqA+M9iQhkfxk5aDLFzspFSoMHWbBzY+CZgw8deHCBV544QUmTpxIXFxcYrxKlSrMnj2bhx56yMPsREQkr3Kz4Onj4r0Kmr/ibOn9nteJiORpZ485y9gyIj4erm2pYsdjGzZsIDQ0lL179/rFu3TpwsSJEylVqpRHmYmISF7nWsFjrZ3p1r3cYoxpDNwD/MX3uRrAWnvZv9kYY4oCQ4BOQDXgT+BTYIS19nA2pPoYsM1auz8b7i1ScGxfdOk7O+mJj4GIRdByYPbkJJd19uxZhgwZwsyZ/n+E1KxZk3nz5tG6dWuPMhMRkfwiv7+VOwIYjzODckUL840xRYDVvr4hwEfAL8DTwHZjTE03EzTGlANao9kdkaw7uDH9Nqn2y8ASOHHNZ599xs033+xX7AQEBNC/f3++++47FTsiIuKKbDlcwhhTD7iDpCLjMLDeWvtddox3GZuAXcBW3+cgkN4x6cOBZr6+ba21kQDGmP7AFGAB0CqhsTGmFFApnXuet9b+nMa1R3Gew+J07iEi6YmOzNl+kil//vknzz77LIsWLfKL161bl/DwcJo2bepRZiIikh+5WvAYY6oDb5C05XLC0jHru74W6GytPeTmuGmx1k5Ikd9l2xtjgoHevq+9Eood372mGmOeAu40xjS21m7zXeoEzE4nla9IViSl8Hdgc079byKSr8VeTL9NaoJD3M1D0rRkyRJ69erF8ePHE2NBQUEMHTqUoUOHEhwc7GF2IiKSH7lW8BhjygPrgWtw3nn5EGdGxQI1cJaV3QV8ZYy51Vr7u1tju+h2oCSw31q7PZXrS3B2U3sQ2AZgrZ0DzMnMYMaYijjFoV4eEMmKc3/Ap4Ph6K7M9a/Rwt185BJHjhyhV69efPjhh37xW2+9lfDwcOrVq+dRZiIikt+5OcMzDKfYmQsMsNaeS37RGNMPZ0lYN2Ao8KyLY7ulge/XiDSuJ8TruzReR5z3qN536X4iBYu1sHsprHwezp/I3D0CgqDRk+7mJYmstSxcuJD+/ftz6tSpxHjRokV56aWXeOaZZwgMDPQwQxERye+MtdadGxnzP5zZnBtsGjc1xgQAPwIB1trrXBk4A4wxF4DCae3SZoyZilOIvWKt7Z/K9QbADiDCWtvYhXzWAVhrW2aw3/dpXLquevXqhRcsWJDV1DLl3Dmnxi1evLgn40v68tMzCr54ghv3vU75P7f6xaODShIcczrx0K+0JFw/XKktP97QIxszzbj88pyOHDnC1KlTiYjw/xlSgwYNGDBgAFdfnbcPec0vzym/03PK/fSM8gavn1Pnzp05dOjQHmtt3Yz2dXOG5xpgaVrFDoC1Nt4YsxV4xMVx3ZSwkP98GtcTZq1KZHUgY0wVoAU6v0gkY2w8VY5+Qa0Db1IoLuk/1biAwuy/9gl+q9iGBt+Po/TptH4u4DDAyZJ12VcrNJsTLnji4uL46KOPCA8P58KFC4nx4sWL061bN+6///5036kUERFxi5sFz1mgyhW0qwQU+C2RrLW/kcltwdOqbI0x3xcvXryOV1u5rl69GkBbyeZief4ZndgPHz8DB9f7x2u2IvDBadxQugY3ANzVxnmnZ/vbqZ/LExAEDZ+gdLsJtAoqkgOJZ0xefk579uwhLCyMTZs2+cUffPBBZs+enedndZLLy8+pINFzyv30jPIGr59TVmaW3Cx4vgHaGWNaW2tXp9bAGHMX0BJY6eK4bkooxIqlcT3hf+mzOZCLiCSIj4PNs2D1WIiNSooXLgn3joWG/4DkMwZBReHBaXDXMOdQ0YMbnK2ng0OcDQoaPQkhFXL+3yMfi4mJYcKECbz44otER0cnxsuVK8f06dN57LHHNKsjIiKecLPgmQTcByw3xiwE3sHZpQ2gOvD/cA7vTGibGyWclXNNGtcT4tpCWiSnHNsDH/WC31LsJXJTe7h/MlxVOe2+IRWg5UDnI9lm27ZtdO7cmV27/HfJe+KJJ3j11VcpV66cR5mJiIi4WPBYa78yxvQEpgFdfZ/kDBAN9LTWrnNrXJft9P3aKI3rCfFM7n0rIlcs9iKsnwrrp/gvSyte3il06nTwn9WRHBcVFcXo0aOZPHky8fHxifFrrrmGOXPm8MADD3iYnYiIiMPVg0etta8bY1YD3XFeyE94p+c3nDN6XrfW7nNzTJdtBE4D1xljbrHW7khxvaPv149zNi2RAubXb+Gj3vD7f/3jDf4f3DsOipXxJi9JtG7dOsLCwti3z/+39O7duzNhwgSuuuoqjzITERHx52rBA+AraAa4fd+cYK2NNsbMwDlTaKYxpm3CeULGmP445+98Za3d5mWeIvlW9DnnPZ3Ns3A2jvYpWRXavwrX3+1ZauI4c+YMgwcPZvbs2X7xWrVqMX/+fO68806PMhMREUmd6wVPbmKMeQAYkSwU7ItvThZ70Vq7PNn3l4C7gduAfcaY9TjvIDUFfgc6Z2vSIgXVga/g475w8qB//C9doc1IKJzl3eAli1asWEG3bt349ddfE2MBAQEMGDCA0aNHU6xYWvu9iIiIeCdfFzxAeZxCJaWmKdokstZe8O0mNwR4HHgY+BNYCIyw1v6KiLgn6hSsGuHsppZc2evhoelQvbk3eUmiP/74g379+vH222/7xevVq8eCBQto0qSJR5mJiIikL9MFjzHmLBAPNLbW/s8YcyYD3a21tmRmx87AIAtxCpWM9osCRvo+IpJRkcch4k04uPHy20H/sBw+6Q+RR5NiJhBufwbuHAS58IycgsRay+LFi+nTpw+///57YjwoKIgRI0YwaNAggoODPcxQREQkfVmZ4bmIs8g+YWueaPwW3YtIgRMTBSsHwY53Lj3w88AaWPsyNHwC7njOmdX5/gP/NpXqQYeZULlBzuUsqTp8+DA9e/Zk2bJlfvGmTZsSHh5O3bqpnn8sIiKS62S64LHWlrvcdxEpYGKi4K2OcGhD2m3iY2DbQtj+FsTHJsUDC0OrQXBbXwgMyvZUJW3WWubPn8/AgQM5cyZp4r5YsWKMHTuWPn36EBgY6GGGIiIiGZPf3+ERkZyyctDli53kkhc7VZs57+qUvyF78pIrtn//frp06cKaNWv84m3atGHu3LnUrFnTo8xEREQyLyCnBjLGaDG+SH519pizjC2jWo+Ep1eq2PFYXFwcU6dOpV69en7FTsmSJQkPD2fVqlUqdkREJM9yreAxxtQ3xvQ3xtyYIn6vMeZ/wDljzDFjTJhbY4pILrF90aXv7FwRCwE59nMXScXu3bu57bbbGDBgAFFRUYnxDh06sGfPHjp37owxxsMMRUREssbNv2n0A14GTiYEjDFVgQ+BmkAkzhbQrxtjbnNxXBHx2sGNmex3hUvgxHXR0dGMGTOGRo0asWXLlsR4hQoVWLx4MR9++CFVqlTxMEMRERF3uFnwNAe2W2uPJ4uFAkVwzq8pCdyJs5Pbsy6OKyJei47M2X6SJVu2bKFx48aMHj2amJikmbl//vOf7Nmzh7/97W+a1RERkXzDzYKnEnAoRawtcB6YAmCtXQ9sBBq5OK6IeC04JGf7SaacP3+egQMH0rx5c3bv3p0Yr1q1KitWrGDRokWULVvWwwxFRETc52bBE5T8fsaYYkBjYJO19kKydr8AlV0cV0S8Vqp65vrVaOFuHpKmNWvWUL9+faZMmUJ8fHxivGfPnuzevZv77rvPw+xERESyj5vbUv8MNEz2vR1OEfRlinYhwBlEJO+7GAmrX4SIhRnvGxAEjZ50PSXxd/r0aZ577jnmzZvnF7/++uuZP38+LVu29CgzERGRnOFmwfMp8Iwx5t/AamA4zvs6/0nR7hac4khE8rL9q+HjZ+BUJv9zbvgEhFRwNyfx8/HHH9O9e3d+++23xFhgYCADBw5k1KhRFC1a1MPsREREcoabBc9E4O/AE8DjgAFet9b+kNDAGNMIqAYsdXFcEclJUSfhs+Gw4y3/eNnrIagoHN2V/j2qt4B2E7InP+H333+nb9++/N///Z9fvEGDBoSHh9O4cWOPMhMREcl5rhU81tqjxph6OAVPeWCbtXZZimY1gXDgXbfGFZEctGcZrBgIkceSYgGFoMWz0PI5sPHw6WDY/nbq5/IEBDkzO+0mQJDOInabtZZ3332Xvn37cuLEicR4cHAwo0aN4rnnniMoKMjDDEVERHKemzM8WGtPAjMuc30JsMTNMUUkB5w95hQ6/03xM4zKt0CHGVCpXlLswWlw1zCIWOScsxMd6ezGVqOF886OlrFli19++YUePXqwfPlyv3jz5s0JDw+ndu3aHmUmIiLiLVcLnrQYY4JxZneOWGtP58SYIuICa2Hnu/DpELhwKileqAjcNRSa9YLAVH4bCakALQc6H8lW8fHxzJs3j+eee46zZ88mxosXL8748ePp2bMngYGBHmYoIiLiLdcKHmNMK+ARYL61dleyeGfgNaAoEGuMmWitHeHWuCKSTU79DB/3g/0pNlqsfjs8+BqUq+VNXpJo3759dOnSha+++sovfs899zB37lxq1KjhTWIiIiK5iJvn8HQDwoCDCQFjzE3AXKAIsBuIAYYaY+53cVwRcVN8PHwzF2Y28y92gkvAA1PhqU9U7HgsNjaWSZMmUb9+fb9ip1SpUrzxxht89tlnKnZERER83FzS1gSIsNYmP2PnaZzd2rpaa8ONMTcCO4FewAoXxxYRN/y+F5b1gV82+8dr3QMPvgolr/EmL0m0a9cuQkND+fbbb/3ijzzyCDNnzqRSpUoeZSYiIpI7uVnwVAS2pYjdDZwFFgJYa380xqwDbnZxXBHJqrgY2DgNvpoAcdFJ8aJl4L4JUO9vYIx3+QkXL15k7NixjB8/ntjY2MR4xYoVmTlzJo8++qiH2YmIiORebhY8FghO+GKMKQU0AFZaa+OStTsG3OHiuCKSFUd2wke94Oh3/vG6j8B9EyGkvDd5SaLNmzcTGhrKnj17/OJPPfUUU6dOpUyZMh5lJiIikvu5WfAcApoZYwJ9BU4HnHeEVqVoVxr408VxRSQzYi7AVy/Dxtcg+c8kQipB+6lw0wPe5SYAnDt3juHDhzNt2jSstYnxatWqMXfuXO69914PsxMREckb3Cx4lgKjgFXGmPVATyAW+ChFu8bAfhfHFZHkIo9DxJtwcOOlZ+AkOLQJlvWGE//z79voSbjnRShaKmdzlktEREQQFhbGTz/9lBgzxtC7d2/Gjh1LiRIlPMxOREQk73Cz4HkFZ1vqVr4PwAhr7aGEBsaYO3He9Ql3cVwRAYiJgpWDYMc7EB/jf+3AGlj7MjeVv4P4gEKw7nP/66VrOAeG1myVQ8lKWk6dOsXkyZNZuXKlX/zGG28kPDyc22+/3aPMRERE8ibXCh5r7RljTBPgXqA8zo5tO1M0KwyMAN53a1wRwSl23uoIhzak3SY+hirHVvvHTAA06+kcIhpcPHtzlHR99NFH9OjRgyNHjiTGAgMDGTRoECNGjKBIkSIeZiciIpI3uTnDg7U2BvjkMtc/Bz5P67qIZNLKQZcvdlJT/iboMBOuaZI9OckVO3bsGH379mXx4sV+8YYNG7JgwQJuueUWjzITERHJ+1wteETEA2ePOcvYMsIEwBNLoFTV7MlJroi1lrfeeot+/frx559Je7kEBQXx1FNPMWvWLIKCgjzMUEREJO/LdMFjjHnE94+fWWvPJft+Ray1H2R2bBFJZvuiS9/ZSY+Nh13vQcuB2ZOTpOvnn3+me/ful7yr06JFC8LCwqhataqKHRERERdkZYZnCc7ZO7WBvcm+p8f42gVmYWwRSXBwYyb7bVDB44H4+HjmzJnDoEGDiIyMTIyHhIQwYcIEunfvztq1a71LUEREJJ/JSsEzFadwOZHiu4jkpOjI9Nu42U8ybe/evYSFhbF+/Xq/eLt27ZgzZw7Vq1f3KDMREZH8K9MFj7V24OW+i0gOyezuasEh7uYhaYqNjWXKlCmMGjWKixcvJsbLlCnDq6++yj/+8Q+MMR5mKCIikn9p0wKRvOz4D/DH/9Jvl5oaLdzNRVK1c+dOOnfuTEREhF/8b3/7G9OnT6dixYoeZSYiIlIwBHidgIhkQlwMfDUJXr8Dzvya8f4BQdDoSffzkkQXLlxg+PDhNGnSxK/YqVSpEh988AGLFy9WsSMiIpIDXJ3hMcYEAg8DdwKVcQ4aTY211nZwc2yRAuNwBCzrA8d2Z7irxdk1hIZPQEgFtzMTn6+//prQ0FB++OEHv3jnzp2ZPHkypUuX9igzERGRgse1gscYUxn4FLgZ39+pLkObG4hkVEwUrBkHm2Y420onKFEF2r0MW+ame/ioAU6WrEvpdhOyN9cCKjIykqFDhzJjxgysTfptrkaNGsybN4+7777bw+xEREQKJjdneKYB9YBNwAzgAKBtoETccHCDM6vz5wH/eOOn4Z4xUKQk3NAWPh0M299O/VyegCAOV7iLfbVCaRVUJGfyLkA+//xzunbtyqFDhxJjxhieeeYZXnrpJYoXz+TmEiIiIpIlbhY89+IUOa2ttRfTaywiV+DCGfhiFHy7wD9e+lp4aDpce0dSLKgoPDgN7hoGEYucIik60tmNrUYLaPQkP27J+DI4ubyTJ0/Sv39/Fi5c6BevXbs24eHhNG/e3JvEREREBHC34IkDtqrYEXHJ3s/gk2fhzOGkmAmA5r2g1VAILpZ6v5AKzoGiOlQ0233wwQf06tWLo0ePJsYKFSrEkCFDGDZsGIULp/Uao4iIiOQUNwueLUANF+8nUjCdO+EsTftusX+8Ql3oMB2ubuxNXpLo6NGj9O7dm6VLl/rFGzduTHh4OA0aNPAoMxEREUnJzW2pRwO3GGP+n4v3FCk4rIXvlsDMW/2LnYAgZ5la17UqdjxmrWXhwoXUqVPHr9gpUqQIEydOZPPmzSp2REREchnXZnistZuNMQ8CbxhjngBWAYeB+DTaf+DW2CJ53pnfYPkA+HGFf/zqJtBhBlSo7U1ekujgwYN069aNzz//3C/esmVL5s2bxw033OBRZiIiInI5rp7DAzQAQoD7fJ/UGJxtqQNdHlsk77EWIt6Ez0fAxTNJ8aBi0HoENO0GAfpPxUvx8fHMnDmTIUOGcO7cucR4iRIlmDhxIl27diUgQGc4i4iI5FZunsPTF5iEs3nBF2hbapHL+/MALOsLB9f7x6+909ltrcy13uQliX744QfCwsLYuHGjX/z+++9nzpw5VK1a1aPMRERE5Eq5OcPTBzgHtLDW7nTxviL5S3wcbJ4Nq1+C2KikeOGScO9L0PCfYNI7u1eyU0xMDJMmTWLMmDFER0cnxsuWLcu0adN4/PHHMXpGIiIieYKbBc/VwJcqdqRAizzuLFE7uPGSM3AIqQDH9sCy3nB4m3+/Gx+AB6bAVZW9yVsSRUREEBoayo4dO/zinTp1Ytq0aVSoUMGjzERERCQz3Cx4DuIsZxMpeGKiYOUg2PEOxMf4XzuwBta+DBXrwtHdYGOTrhUvD/dPgjoPa1bHY1FRUbzwwgtMmjSJuLik38qqVKnC7NmzeeihhzzMTkRERDLLzYJnPjDaGFPFWvubi/cVyd1iouCtjnBoQ9pt4mPgiP+MAfU7QbvxUKxM9uYn6dqwYQOhoaHs3bvXL96lSxcmTpxIqVKlPMpMREREssrNbamnGmNuAtYbYwYBq6y1p926v0iutXLQ5YudlIKKw9/fhOvvyb6c5IqcPXuWIUOGMHPmTL94zZo1mTdvHq1bt/YoMxEREXGLm7u0JeypGwK854tFkfo5PNZaW9KtsUU8c/aYs4wtI+KiobIOp/Tap59+Srdu3fj5558TYwEBAfTr148XXniB4sWLe5idiIiIuMXNwyOigYvACeBP3yfKF0v5iU7jHgWGMaanMWa/MeaCMWanMaa91zlJJmxfdOk7O+mJj4GIRdmTj6TrxIkTPPXUU9x3331+xU7dunX5+uuvmTJlioodERGRfMS1gsdaW85aW/5KP26NmxcZY/4BTAfeBh4CIoAPjTHNPE1MMu7gxvTbpNovA0vgxBXWWt5//33q1KnDokVJBWdQUBCjRo0iIiKCpk2bepihiIiIZAc3Ny2QKzcSWGCtHen7/rkxpq4vfr93aUmGRWfybN3M9pNMOXLkCD179uQ///mPX/zWW28lPDycevXqeZSZiIiIZDc3l7SlyRgTbIy5yRhT4N/bMcYUA2oBq1Jc+hJoY4wpnPNZSaZYC9HnMtc3OMTdXCRV1loWLFhA7dq1/YqdokWLMnnyZDZt2qRiR0REJJ9zreAxxrQyxrxmjKmfIt4Z532e74HjxpgX3RrzCnJqbIwZbIz5wBjzqzHGGmPsFfQraox5wRiz1/eOzW/GmAXGmKtdSKsIYLj0PaaLQDBwrQtjSHY7/Su88xgc35O5/jVauJuPXOKnn36ibdu2hIaGcvp00oaRrVq1YteuXQwYMIDAwEAPMxQREZGc4OYMTzcgDOcAUgB821TPxflL/m4gBhhqjMmpZVsjgPHAX4ErKlaMMUWA1b6+IcBHwC/A08B2Y0zNrCRkrf0TOAncmuJSwncdypKbxcfD1nCY2Qz2fZa5ewQEQaMn3c1LEsXFxTFt2jRuvvlmvvjii8T4VVddxeuvv86XX35JrVq1PMxQREREcpKb7/A0ASKstWeSxZ7Gmc3oaq0NN8bcCOwEegErXBw7LZuAXcBW3+cgkN6SseFAM1/fttbaSABjTH9gCrAAaJXQ2BhTCqiUzj3PW2t/Tvb9daC3MWYTsBHoBLT1XUttG2/JDU7sh2V9Lz1zp0RlOHvkyu/T8AkIqeBubgLAnj17CA0NZfPmzX7x9u3bM3v2bK655hqPMhMRERGvuFnwVAS2pYjdDZwFFgJYa380xqwDbnZx3DRZayck/26MuWx7Y0ww0Nv3tVdCseO711RjzFPAncaYxtbahH/XTsDsdFL5imRFEvASUBv42Pf9MDAWGAUcTedektPiYmHzTFgzDmIvJMWLlIR7x0Pdv8Lbf7uyw0ert4B2E9JvJxkSHR3NhAkTeOmll4iOTlotWq5cOaZPn85jjz2W7n//IiIikj+5uaTN4ryDAiTOfDQA1ltr45K1Owbk1h9v3w6UBPZba7encn2J79cHEwLW2jnWWpPOp1Xym1hrz1lrHwaq4BR/1+IUhsettQez4d9LMuvobgi/G1aN9C92aj8IvbY6szXBxeAfS6Dxv5zlaqkJCHKu/2MpBBXJicwLjG+//ZZbb72VkSNH+hU7jz/+OP/973/p1KmTih0REZECzFib7jv8V3YjY3YB5YCq1to432zIG0A/a+1rydp9AjS01rqxAUBGc7wAFLbWpvq3H2NMP+AV4H1r7d9Tuf4A8AnwobX2ERfzKowzO7bcWjvoCtp/n8al66pXr154wYIFbqWWIefOOTuW5YdDG018DDV+fp/qv3xAQLJ6/WJQKfbW6srv5Zun2i8o+hRVjn5B6VO7CYyLIi6wKCdL3cxvle4mJrhUTqWfpvz0jC5evMjChQtZsmQJ8fFJK0HLlStHv379aN489WeUF+Sn55Sf6TnlDXpOuZ+eUd7g9XPq3Lkzhw4d2mOtrZvRvm4uaVuKsyRrlTFmPdATiMV56T+5xsB+F8d1UzXfr7+mcT0hXj0rgxhjHsKZ3fnR92s/nGcxLiv3FXdcdeYHau+dSfHz/v83OFKxNftq/ovYoBJp9o0JLsWhah05VK1jdqdZoO3cuZMpU6Zw+PBhv3j79u3p0qULISHa9ltEREQcbhY8rwCP4Lyr0soXG2GtPZTQwBhzJ867PuEujuumhL8lnU/jesKhK2n/jffKxOG8KzRg+wIAACAASURBVHQdEInzLs9ga+3py/bySauyNcZ8X7x48TqtW7fOYnqZs3r1agC8Gj/Los/Bly/Cjjk4KzR9SlaDB1+lcq02VPYsOXfk9Wd05swZBg0axJw5c/zitWrVYt68ebRq1cqbxFyW159TQaHnlDfoOeV+ekZ5g9fPKSszS64VPNbaM8aYJsC9QHmcHdt2pmhWGGe75/fdGjcvstYuB5Z7nYcks38NfNwXTiXfTM/AX7pCm5FQWDMGXlu+fDndu3fn11+TZt4CAgIYMGAAo0ePplixYh5mJyIiIrmVmzM8WGtjcN5xSev658Dnbo7psoRd2dL6m1NCaXk2B3KRnBB1Cj4fBtvf8o+XvR46zIBqzbzJSxL98ccf9OvXj7ffftsvXq9ePRYsWECTJk08ykxERETyAlcLnnwg4cf7aR3WkRA/lMZ1yUv++wksHwCRyXYCN4HQoh+0fF67qXnMWst7771Hnz59+OOPPxLjQUFBjBgxgkGDBhEcHHyZO4iIiIhkQ8HjW9bWEqhM2od8WmvtM26P7YKEJXiN0rieEN+VA7lIdok8Diuegz3/8Y9Xqg8dZkLl+t7kJYkOHz5Mz549WbZsmV+8WbNmzJ8/n7p1M7xBi4iIiBRQrhU8xpjiOO/m3JsQukxzC+TGgmcjcBq4zhhzi7V2R4rrCVtvfYzkLpHHIeJNOLgRoiMhOARqtIBGT0KI79gna2HXe/DpYIg6mdQ3sDC0Ggy39YHANM7RkRxhrWX+/PkMHDiQM2fOJMaLFSvGuHHj6N27N4GBgR5mKCIiInmNmzM844F2OFs3zwf2ksfedbHWRhtjZgDDgJnGmLbW2nMAxpj+QH3gK2vtNi/zlGRiomDlINjxDsTH+F87sAbWvuwcDtq8D3w6CP73hX+bas3hoelQ7vqcy1lStX//frp06cKaNWv84m3atGHu3LnUrFnTo8xEREQkL3Oz4HkU+ANoYq097uJ9M813UOiIZKFgX3xzstiLvl3TErwE3A3cBuzznSlUHWgK/A50ztak5crFRMFbHeHQhrTbxMfAtoUQsQhs0uGUBIfA3aOhSSgEBGRzonI5cXFxTJs2jeHDhxMVFZUYL1myJFOnTuXpp5/GmMtNGIuIiIikzc2CpwywMrcUOz7lcQqVlJqmaJPIWnvBGHMXMAR4HHgY+BNYiHOuUFqHkkpOWzno8sVOcsmLnVp3Q/tXoFS1tNtLjti9ezehoaFs2bLFL/7www8zc+ZMqlSp4lFmIiIikl+4WfDsxzeDkltYaxfiFCoZ7RcFjPR9JDc6e8xZxpZR902Cv3QBzRh4Kjo6mvHjxzN27FhiYpKWIlaoUIEZM2bQsWNHzeqIiIiIK9wseGYDE40x1ay1P6fbWiQrti+69J2dK3HxjIodj23ZsoXQ0FB2797tF3/yySeZOnUqZcuW9SgzERERyY9ce3nBWjsTZzblK2PM34wxpdy6t/z/9u48zua6///44z1jxjAzyIRElopkyRZZsiZUl1JUUpdiKFeuSPiqVIiytKCFyEhcaBFZy1XJkq2yZfsRLkuRNKKZYRgz798fZ2aaY2bMdmY+55x53m+3z+0478/2OvNyZs7rfN6f91vSObQul/tlswuceNzZs2cZNGgQTZs2dSt2rrnmGpYvX86HH36oYkdEREQ8zpPDUqeMIRsGfJTcdg5IymBza60t6alzSyF0IbZg95M8+fbbb+nduzcHDx50a+/Xrx9jxowhPDzcochERETE33myS9sFXPPrnPfgMUUyFhxWsPtJrpw5c4YhQ4bw/vvvu7VXr16d6dOn06JFC4ciExHJGWst1lqnw/BrSUkZfUcu3iaveTLGFPh9uh4reKy1V3rqWCJZCi+fu/2q3OrZOCRTS5YsoW/fvhw7diy1LTAwkCFDhjB8+HBCQkIcjE5EJGuJiYlER0cTExPDhQsXnA7Hb4WGhgKwd+9ehyORy/FknoKDgwkPDyciIqJAJhT35BUekfx39hT89wXYnosR2gKCoEEPz8ckbn7//XcGDBjARx995NZer149oqKiaNCggUORiYhkX2JiIkeOHCE+Pt7pUPxeygdp8W6ezNOFCxeIjo4mLi6OSpUq5XvRo4JHfMfuRbBsMMTlcqqn+g9DWFnPxiSprLXMnTuXAQMGEB0dndoeHBzM8OHDGTJkCEFBQQ5GKCKSfdHR0cTHxxMYGEi5cuUIDQ0lQBNV54u//nLdBl6iRAmHI5HL8VSekpKSiIuL48SJE8THxxMdHU3Zsvn7+SxfCh5jTGWgGhAOZNhJz1q7ID/OLX4o5gQsHwx7Fru3X3UTmAA4vi3rY1S+FTqOy5/4hKNHj/Kvf/2LZcuWubU3a9aMqKgoatSo4VBkIiK5ExMTA0C5cuUoWVLjLOWnlEJSBaV381SeAgICUt9Tx44dIyYmxrcKHmNMc+Ad4KbLbYZrcIP877Anvs1a1+SiK56H+NN/txcJgTbPQ5N+rrl4vnwWts7JeF6egCDXlZ2O4yBI94x4WlJSEtOmTeP//u//Uj8cgOuy99ixY3nyySf1B0xEfI61NvWeHXW3EskfKe+tCxcuYK3N14EMPDks9U3AV0AQsBjXFZ4bcRVA1wKtgFBgDvCbp84rfurPw7D0aTiw0r29cnPo9BZceb3reWAR6DQJ2gyDLbNc8+xciHWNxlblVtc9O+rGli9+/vln+vTpw+rVq93a27dvz9SpU6lSpYozgYmI5FHa0dj0pY1I/kj73vKZggcYBhQF7rXWLjbGfADcaK0dAGCMKQtMB9oAN3vwvOJPkpLgh/fh65GQEPd3e3A43D4SGvaEjP74hJWFloNdi+SrixcvMmHCBF566SW3m3mvuOIKJkyYQI8ePQp8uEkRERGRzHiy4GkB/GStXZzRSmvt78aYh4CDwGigtwfPLf7g5D5Y/BQc3ejeXq09/GMClKzoTFySavv27URGRrJ582a39i5duvDOO+9w1VVXORSZiIiISMY8WfBEAGvSPE8AMMYUt9aeBbDWxhlj1gAdPXhe8XWJCbBuEqweB4lp5jkoVhruGAd17gddMXDU+fPnGT16NGPHjuXixYup7eXKlePdd9+lS5cuDkYnIiIikjlPFjx/4LpHJ+1zgKrArjTtwcAVHjyv+LJj22Dxv+G3He7ttbu4BhoIK+NMXJJqw4YNREZGsmfPHrf2xx57jDfeeIPSpUs7FJmIiIhI1jxZ8BwAqqR5/iOuEdkeA4YAGGMqAW2BQx48r/iihHOuKzrr3gKb+Hd7eHm4602ocadzsQkAcXFxDBs2jLfeesvtBt7KlSszbdo02rdv72B0IiIiItnjyYLnS2CUMaaatfZnYDnwK/CMMaZ+8r87AsWBWR48r/iawxtcV3Wi97u3N3gUbn8ZipVyJi5J9fXXX9OnTx8OHTqU2maM4amnnuKVV14hLCzMueBERPzMyZjzfPzDETb97xSx5y8SVrQITa6N4IGbr6FMeFGnwxPxeZ4seGYB53EVNFhr440x9wLzcV3VSTEPeN2D5xVfcT7GNfraD++7t19RxTXU9LWtHAlL/nb69GkGDRrEjBkz3Npr1KjB9OnTad68uUORiYj4n/iEREYu2cX8zb+QkGjd1q39+Q8mfr2Prg2vYXinmoQEafpCkdzy2ODy1tpfrLVvWGu3p2n7EdccPI2BDkBVa+3D1qbtwyQ+L/Z3WPMa9X4aQcOtQ2FWZ1jzuqs9xc9fw+Sm7sWOCYCm/4Z/rVex4wU+//xzatas6VbsBAYGMmzYMLZu3apiR0TEg+ITEnl0xvfM+/5oumInRUKiZd73R3h0xvfEJ3jPR6eNGzcSEBBA/fr1SUpKynS7RYsWYYyhQ4cOBRidSHqenHi0FxBvrZ2btt1am4Trfh7xNwnn4IuhsG0uJCWQeut6zD44+C2sGgt1ukJSIuz4xH3fMjfCPe9ARU3J5LQTJ07w1FNP8emnn7q1169fnxkzZlCvXj2HIhMR8V8jl+xi0/9OZWvbTf87xcgluxlzX518jiprSUlJ9O3bF2stkyZNuuzErA0aNABcg9/k98SSIpfjyemDpwEPefB44s0SzsF/usKWDyEpIeNtkhJg+zz3YicgCFo9C0+sUbHjMGsts2bN4sYbb3QrdooWLcrYsWP5/vvvVeyIiOSD32Pimb/5lxztM3/zUU7GnM+niLJv7ty5bN++nXbt2tGyZcvLbluhQgWCgoKIiYnh119/LaAIRdLz5D08J4BYDx5PvNkXQ+Hwdznb5+oGrqs65WrlT0ySbUeOHOGJJ57gyy+/dGu/9dZbmT59OjfccINDkYmIeD9rLX/FX8x6w0zMWn84025smUlItMzacIjeLa7N9XlLhBTJ81WWcePGATBo0KAstw0ICKBUqVKcPHmS3377jYoVNYG4OMOTBc/XQBtjTBFrbe5/C4j3iznh6saWEyYAus2FEuXzJybJlqSkJBYvXswHH3xAbOzf30+EhYUxbtw4+vbte9nuCSIiAn/FX6TuyP8W+HnfXrmft1fuz3rDTGwf3p6SxYJyvf+mTZvYuXMn5cuXTzc1wcaNGylWrBh169Z1a0+5x+dy9/qI5DdPfrIZhmtS0ShjjCYW9WdbZ2XejS0zNgm2zcmfeCRb9u7dy8CBA3n77bfdip2OHTuya9cunnzySRU7IiKSqRUrVgDQrl07t78X0dHRNG3alJEjR7ptf/78eU6dct2nVK5cuYILVOQSnrzC83/AeuAR4F5jzHrgCBCfwbbWWjvAg+eWgnRoXS73+w5aDvZsLJKlhIQE3njjDUaMGMH583/3/y5dujQTJ07kkUce0Y2kIiKSpW3btgF/D0aQYt061+eCatWqubXv2LEDay0RERFUqlSpYIIUyYAnC55/p/l3GHC5adgtoILHV13I5a1aud1Pcm3r1q1ERkaydetWt/YHHniAt956S9+4iYjkQomQImwffrmPOZf3/pqDvPNtzrumPdX2+jzfw5MXR44cAUh3L86yZcsAKFu2rFv7V199BUDbtm31xZo4ypMFTycPHku8WXBYwe4nORYfH8+oUaMYN24ciYl/z91QunRpBgwYwEsvveRgdCIivs0Yk6d7YXo0q8zUNQdyNHBBUKChR9MqeTpvXiUkuLqzp/27EhMTwyeffJKuPTExkZkzZwLwyCOPFFyQIhnwWMFjrV3mqWOJl6vS3DXPTo73u9XzsUg669atIzIykr1797q1R0ZG0qlTJ8LDwx2KTEREAMqGh9C1YUXmfX802/t0bXgNZcKL5mNUWatUqRI//fQTK1eu5MEHHwRg6NChlChRgkqVKrFx48bUbUeNGsW+ffto0KABnTrpO3FxVq7vUDbGHDTGjPNkMOIj6vdwzaeTEwFB0KBH/sQjAMTGxtK/f39atGjhVuxUqVKFr776iunTp6vYERHxEsM71eKWqqWz3hC4pWpphneqmc8RZe3hhx8GYNq0aXTs2JHmzZszZcoUxo8fz0033cTChQu58847adasGSNHjqRMmTLMmTNH3dnEcXkZkqkKUMZDcYgvCS8H9brnbJ/6D0NY2ay3k1z573//S+3atXn77bex1tVFwhjDgAED2LlzJ+3atXM4QhERSSskKJAPezXmocaVCArMuCAICjQ81LgSH/ZqTEhQYAFHmF63bt14/fXXqVy5MqtXryYmJoaPPvqIBx98kNGjR9OmTRtWr17N/v376dGjBz/88AM1atRwOmwRj97DI4XJHeMg+kD2Jh+tfCt01MXA/HDq1CkGDRqU2k86xY033khUVBRNmzZ1JjAREclSSFAgY+6rwzO3V+eTH4+y8WA0secvEla0CE2ujeCBm53vxnapQYMGZTjpaOXKlVm5cqUDEYlkTQWP5E5QMXhkPnz5LGydk/G8PAFBris7HcdBUEjBx+jnPvvsM/r168eJEydS24oUKcJzzz3HsGHDKFrUu/5IiohIxsqEF6Vfm+vp1+Z6p0MR8UsqeCT3gopBp0nQZhhsmcWpLYsJTDxHyTIVXAMUNOihbmz54Pjx4/z73/9mwYIFbu0NGzZkxowZ3HTTTQ5FJiIiIuJ98lrw1DPG5Gp8W2vty3k8t3iLsLLQcjDbLromImvbtq3DAfknay0ffvghAwcO5PTp06ntISEhvPzyywwcOJAiRfQdhoiIiEhaef10VDd5yQmDa+JRFTwi2XTo0CEef/zx1EncUrRs2ZLp06enm91aRERERFzyWvAcANZ5IhARSS8xMZHJkyfz3HPPERcXl9oeHh7O+PHjefzxxwkIyMtgiyIiIiL+La8Fz3fW2l4eiURE3OzZs4fevXuzfv16t/a77rqLKVOmcM011zgUmYiIiIjv0FfDIl4mISGBV155hXr16rkVOxEREcyZM4clS5ao2BERERHJJt3hLOJFtmzZQq9evdi+fbtbe7du3XjrrbcoU0Zz/YqIiIjkhK7wiHiBc+fO8eyzz9K4cWO3Yufqq69m0aJFzJs3T8WOiIiISC7oCo+Iw9auXUvv3r3Zt2+fW3ufPn147bXXKFmypEORiYiIiPi+XBc81lpdHRLJg7/++ovnnnuOyZMnu7Vfe+21vP/++5rPSERERMQDVLSIOOCLL76gdu3absVOQEAAgwYNYseOHSp2RERERDxEXdpEClB0dDQDBw5k9uzZbu21a9cmKiqKxo0bOxSZiIiIiH/SFR6RAmCt5ZNPPuHGG290K3aCgoIYMWIEmzdvVrEjIiIikg9U8Ijks2PHjnHffffx4IMPcvLkydT2xo0bs2XLFoYPH05wcLCDEYqIiGTPm2++yX333Ue1atUoWbIkRYsWpXLlyvTo0YMdO3Y4HZ5IhtSlTSSfWGuZMWMGgwYN4syZM6ntxYoVY/To0QwYMIDAwEAHIxQREa8Q+zts+RAOrYMLsRAcBlVuhQY9IKys09G5efXVV4mLi+Omm26iTp06AOzatYvZs2fz0UcfsWDBAv7xj384HKWIOxU8Ivng4MGDPP7443zzzTdu7W3atOH999/nuuuucygyERHxGgnn4IuhsG0uJCW4rzv4LawaC/Ufho7jICjEmRgvsWjRIho2bEhIiHs8kydPpl+/fvTu3ZtffvmFIkX0EVO8h7q0eZgx5mZjzCxjzH5jjDXGjM7NNuKbEhMTmThxInXq1HErdkqUKMG0adP45ptvVOyIiIir2PlPV9eVnUuLnRRJCbB5Jvyni2t7L9C8efN0xQ7Ak08+yXXXXceJEyfYvXu3A5GJZE4Fj+c1B5oA3wFn8rCN+Jhdu3bRvHlzBg4cyNmzZ1PbO3XqxO7du+nTpw/GGAcjFBERr/HFUDj8Xfa2PfwdfPls/sbjAUFBQQAZ3pe6ceNGAgICqF+/PklJSZkeY9GiRRhj6NChQ77FKYWPCh7Pe9taW91a+xhwOg/biI+4cOECo0aNon79+mzatCm1vUyZMnz00UcsWrSIChUqOBihiIh4lZgTrm5sObF1juteHy81e/Zs9u7dS7Vq1ahWrZrbuqSkJPr27Yu1lkmTJhEQkPnHzwYNGgCwYcMGrLX5GrMUHupg6WHW2sy/tsjBNuIbfvjhByIjI9ONTPPwww8zceJErrzySociExGRfGMtxOehg8b30zLvxpaZpATXfk3/nfvzhpQED/U0eO2119i1axdxcXHs2bOHXbt2cfXVVzNv3rx0A/LMnTuX7du3065dO1q2bHnZ41aoUIGgoCBiYmL49ddfqVixokfilcLNZwseY0xD4HagcfJSAcBae9l3sjGmGPAc0A2oBJwCvgRetNb+mp8xi/84e/Ysw4cP580333S7NF+xYkXee+897rrrLgejExGRfBV/BsZVLvjzrnnNteTW0MNQrJRHQlmxYoXbvaqVK1dm1qxZNGzYMN2248aNA2DQoEFZHjcgIIBSpUpx8uRJfvvtNxU84hG+3KXtRWAMcC/JxU5WjDEhwMrkfcOARcBRoCew1Rhzbf6EKv5k1apV1K1bl9dff92t2Onbty+7du1SsSMiIn7v66+/xlrLn3/+yZo1a6hWrRqtWrXilVdecdtu06ZN7Ny5k/Lly9O+fXu3dRs3bmT79u3pjp3yt/Vy9/qI5IQvFzwbgFHA3UB54Hw29nkB12ABG4Dq1toHrbW3AIOAMsCMtBsbY0oZY2pksVTy6KsSr3XmzBn69u1LmzZt2L9/f2r79ddfz6pVq5gyZQolSpRwMEIREZGCVapUKVq0aMHy5ctp2LAhL774Ij/88EPq+hUrVgDQrl07t3t3oqOjadq0KSNHjnQ73vnz5zl16hQA5cqVK4BXIIWBz3Zps9aOS/s8q9GvjDHBQErH137W2tg0x3rTGPMo0MoY09Bauzl5VTdgShahrAZa5yB08UHLli3jiSee4Ndf/+71GBAQwODBgxkxYgTFihVzMDoRESlQISVd3cNya/3bsPb1nO/Xckje7+HJJ0FBQTz44INs3ryZJUuW0KhRIwC2bdsG/D0YQYp169YBpBvgYMeOHVhriYiIoFIlfacsnuGzBU8uNAdKAgestVszWD8fuAnoBGwGsNa+B7xXYBGK1zl58iRPP/00c+e6j6ZTp04dZsyYwc033+xQZCIi4hhj8nYvTOPHYd2knA1cEBDk2s9D9+Dkh5SBek6ePJnaduTIEYB09+IsW7YMgLJly7q1f/XVVwC0bdtWUzmIx/hyl7acqpv8uCWT9SntNxVALOLlrLXMmzePmjVruhU7wcHBjBo1ih9//FHFjoiI5E54OajXPWf71H8YwspmvZ2DVq9eDeA2wXZCgquoS0xMTG2LiYnhk08+SdeemJjIzJkzAXjkkUfyO1wpRArTFZ6U66K/ZLI+pT1Pw64YY8oArZKfFgdqGGO6AnHW2i+yu00W59iVyarr4uLiWLlyZV5eQq7FxcUBOHZ+Tzl58iQTJ05k48aNbu033ngjgwcPpkqVKnz3XTYni/My/pIjf6c8+QblyTfkNk+hoaGEhoby119/XXbemFxrPoziv++lyC8bs9z0YsUmnG0+DP76y/Nx5MDGjRuJjY2lbdu2bj+ThIQEZsyYwezZsylWrBh33nknfyXHevXVV/PTTz/x5ZdfcscddwDwzDPPEB4eTsWKFVm7di2PP/44AC+88AL79u2jbt26tGrVKvUY4h1SBpHwVF6SkpJITEwkLi6OVatWZbl9yns5NwpTwROW/Hg2k/UpP8XwPJ6nFvBpmuddkpfDQJUcbCMFLCkpieXLlzNt2jS3N1VISAi9evWic+fO6eYWEBERyZWgYpy9dxYhq0YStOsTTAbd22xAEAm1HiC+zQgoElLwMV7iwIEDPPnkk0RERFCvXj1Kly5NdHQ0u3fv5rfffiMkJITJkye7dV+7//77+fLLL5k5cyZHjx4lNjaWTZs2MWPGDFasWMHHH3/M/fffz5kzZ/jhhx+48sormT59urqziUcVpoKnQFhrVwGXfZdmZ5ss9q+VUbsxZldoaGjNtm3b5vbQeZLy7ZlT58+L/fv306dPn3TfMLRr145p06ZRtWpVZwLzMF/OUWGiPPkG5ck35CZPSUlJ7N27F4ASJUrkzxUe19Ghy2ToMAK2zIJD38GFWAgOgyq3Yhr0IDisLMH5dPac6tixI88//zyrV69m9+7d/PHHHwQHB1OlShXuv/9++vfvz/XXX++2T69evfjzzz95++23WbduHdWqVeOjjz7iwQcfpG3btvz++++sX7+e4sWL06NHD15++WUqV3ZgjiPJUsqVHU+NSJuUlERgYCAlSpSgUaNGWb7PQkNDc32uwlTwpIzKVjyT9Sk/xZgCiEW8RGJiIhMnTuTFF1/k3Llzqe0lS5bkzTffpGfPnvqWSURE8ldYWWg52LV4sapVq6abZyc7Bg0alOGko5UrV2blypUe/yAtcqnCVPAcSX7MbMrelPY8jDMpvmTHjh1ERka6zRcA0LlzZ959912uvvpqhyITEREREU8pTKO0pUzl2yCT9SntPxVALOKg8+fPM3z4cBo0aOBW7JQtW5ZPP/2UBQsWqNgRERER8ROF6QrPOuAMcJ0xpp61dtsl67smPy4p2LCkIG3atInIyEh27XIf6K5Hjx68+eabREREOBSZiIiIiOSHQnOFx1p7AXgn+em7xpjUO5+MMc/gmn9ntbV2sxPxSf6Ki4vjmWeeoWnTpm7FTqVKlfjiiy/48MMPVeyIiIiI+CGfvcJjjLkLeDFNU3Bye9oB7UdZa5eleT4aaAc0A342xqzFNe/OLcBJoFe+Bi2OWLlyJX369OHgwYNu7f369WPMmDGEh+d1JHIRERER8VY+W/AAZXAVKpe65ZJtUllr440xbYDngO5AZ+AUMBN40Vqb2aSk4oNOnz7NkCFDmD59ult79erVmT59Oi1atHAoMhEREREpKD5b8FhrZ+IqVHK63zngpeRF/NSiRYv417/+xfHjx1PbAgMDGTJkCMOHDyckxPkJ3EREREQk//lswSOSkd9//53+/fvz8ccfu7XXq1ePqKgoGjTIbJA+EREREfFHhWbQAvFv1lrmzJlDzZo13YqdokWL8uqrr/L999+r2BEREREphHSFR3ze0aNH6du3L8uXL3drb9asGVFRUdSoUcOhyERERETEabrCIz4rKSmJKVOmUKtWLbdiJzQ0lLfeeou1a9eq2BEREREp5HSFR3zSvn376NOnD2vWrHFrb9++PVOnTqVKlSrOBCYiIiIiXkVXeMSnXLx4kfHjx1O3bl23YueKK65g5syZfPnllyp2RERERCSVCh7xGdu3b+eWW25h6NChxMfHp7Z37dqV3bt38+ijj2KMcTBCERER8TYzZ87EGMOIESOcDoVDhw5hjKF169YFevxVq1ZhjOGxxx7Ll/N6OxU84vXOnz/Piy++yM0338yWLVtS28uVK8dnn33Gp59+ylVXXeVghCIiIiLeVVzJ33QPj3i1DRs2W3l0IwAAHGVJREFUEBkZyZ49e9zae/bsyRtvvMEVV1zhUGQiIiIiOVOhQgX27NlD8eLFC/S8jRs3Zs+ePZQsWbJAz+stVPCIV4qNjeWFF17grbfewlqb2l65cmWmTZtG+/btHYxOREREJOeCgoIcGUG2ePHihXrkWnVpE6/z1VdfUadOHSZNmpRa7Bhj6N+/Pzt37lSxIyIi4pDFixfTtGlTihcvTkREBF26dGHfvn2MGDECYwwzZ850294Yk+lgQindv8aMGePWvn//fkaMGEHTpk256qqrCA4OpmLFivTo0YN9+/ZlGtu6deto164d4eHhlCpVig4dOrBp06ZMt2/dujXGGA4dOsTcuXNp0qRJ6r4pli1bRq9evbjxxhspUaIEoaGh1K1bl1dffZXz58+nO17Pnj0BGDlyJMaY1CXl55LVPTybNm2iW7duVKhQgaJFi1K+fHluu+023n///UxfR3Zkdg9P2rzt2LGDu+++myuuuILQ0FBatWrF+vXrMz3mpk2buP/++ylfvnxqjnr37s2RI0fyFGt+UMEjXuPPP/8kMjKS9u3bc+jQodT2GjVqsHbtWiZNmkRYWJhzAYqIiBRi7733Hvfccw+bNm2iUaNG3H777WzevJnGjRtz4MABj51n+vTpvPzyy8TFxdGoUSPuvvtuSpQowezZs2nUqBE//fRTun2WLl1K69at+eabb6hZsyZ33HEHR48epWXLlmzYsOGy5xszZgz//Oc/CQ4O5h//+Ae1a9dOXRcZGclnn31G6dKlueOOO2jRogVHjx5l2LBh3HnnnSQmJqZu27FjR5o3bw5A3bp1efTRR1OX66+/PsvXPWnSJJo1a8bHH39M+fLlue+++6hduzY7d+5kyJAh2f3x5cqPP/5IkyZNOHToEB06dKBatWqsWbOG2267jZ07d6bbfvLkyTRr1owFCxZQuXJlOnfuTEREBFFRUdx8883pbkVwmrq0iVdYuHAhTz75JL/99ltqW5EiRRg6dCgvvPACISEhDkYnIiJSuB0+fJiBAwcSFBTEkiVL6NChAwAJCQn07NmT//znPx47V+fOnXniiSeoWrWqW/sHH3xAr169ePrpp1m5cmVqe0xMDL169eLixYvMmDEj9SqLtZbnnnuOcePGXfZ8s2bNYuXKlbRq1SrduqlTp9K+fXuKFSvmdr7u3buzdOlS5syZQ48ePQB49tlnueqqq1i3bh2dO3fO0cAFa9asYeDAgYSFhbFw4UJuu+221HUXL17kv//9b7aPlRvvvvsukyZNon///qltAwcOZOLEiYwfP55Zs2altm/cuJH+/ftTvnx5Fi1aRMOGDVPXRUVF0bt3b3r27MnGjRvzNeacUMEjjvrtt9946qmnmD9/vlt7gwYNiIqKol69eg5FJiIikjFrLWfOnHE6jBwrWbJkrqdvmDFjBvHx8fTo0SO12AHXPSmTJk1i4cKFnD171iNxNmnSJMP2nj17EhUVxapVqzhz5kzqDfjz58/n5MmTtGzZMrXYAVd3ulGjRjFnzhx++eWXTM8XGRmZYbEDcM8996RrCw8PZ8KECSxdupRFixalFjx5MXbsWKy1DBs2zK3YAdcXwHfeeWeez3E5zZs3dyt2AF544QUmTpyYbpL3sWPHkpiYyHvvvedW7IDrZ7l48WIWL17M1q1bqV+/fr7GnV0qeMQR1lpmz57N008/zZ9//pnaXrRoUUaOHMmgQYMoUkT/PUVExPucOXPGJ0cJ/fPPP93uT8mJtWvXAtCtW7d06yIiImjfvj2ff/55nuJLKzY2liVLlrBt2zZOnTpFQkICAMePH8day4EDB2jQoEGWsQUFBdG1a1cmTpyY6bnuvvvuy8by888/s3z5cvbv309cXBxJSUmp9xj//PPPuXp9aV28eJFVq1YB8Pjjj+f5eLmR0f3RERERlC5dmuPHj6e2JSUl8c0331C8eHG3wjetFi1asHjxYr7//nsVPFJ4HT58mCeeeIIVK1a4tbdo0YLp06dTvXp1hyITERGRjBw7dgxwjZaakcwGJsiNlStX0q1bN06ePJnpNjExMR6LrVKlShm2W2sZPHgwEyZMcBsxNrM4cis6Oppz585RunRpxwrpihUrZtgeHh7OqVOnUp9HR0cTGxsLQHBw8GWP+ccff3guwDxSwSMFJikpiSlTpvDss8+mvlkAwsLCGDduHH379iUgQONoiIiIFAZJSUnp2mJjY3nggQc4deoUL730Et26daNy5coUK1YMYwzdu3dn3rx5mRYguZHZfcIff/wxb775Jtdccw0TJkygadOmlClThqCgIC5cuEDRokU9GoeTsvv5KyVnYWFhdOnS5bLb1qpVK89xeYoKHikQe/fupXfv3nz33Xdu7R07dmTq1KmZfrsiIiLibUqWLOnWHdtX5GXSyfLly7N3714OHz5MzZo1060/fPhwhvsFBQW5fcmZ1tGjR9O1rV27lujoaLp27crIkSPTrT948GCGsV0uhszas7Jw4UIApkyZwl133ZVlHLl15ZVXUqxYMU6dOsXp06dz3e2wIERERBASEkJAQAAffPBBru8JK2j6Ol3yVUJCAmPHjqVu3bpuxU7p0qWZNWsWy5cvV7EjIiI+xRhDqVKlfG7Jy4fTFi1aAPDJJ5+kW3fq1KlMRxErX7480dHRREdHp1v39ddfp2tLKSQz6mK1f/9+tmzZkqPYLl68yGeffZZhbFm5XCwZnQv+7uZ18eLFbJ8nMDAwdV6eadOm5TDKglWkSBFat27NX3/9xTfffON0ONmmgkfyzdatW7nlllt47rnn3CbneuCBB9i9ezf//Oc/feabARERkcKsZ8+eFC1alDlz5rgVKgkJCQwcOJC4uLgM90sZ/Wz06NFu7ePHj0/X6wNIvY93wYIFbvfwnD59msjIyNTBC9K6//77iYiIYNWqVXz44Yep7dZahg8fnuuJMFNimTZtmlvXtbVr1/Laa69luM/VV18NuHq25MTQoUMxxvDKK6/w7bffuq27ePEiy5cvz9Hx8tOwYcMICAigZ8+eqYMtpBUbG8uMGTM4d+5cwQeXCRU84nHx8fE8//zzNGrUiK1bt6a2ly9fnoULF/Lxxx9Trlw5ByMUERGRnKhatSpvvPEGCQkJdOjQgTZt2vDQQw9RvXp1Fi1axMMPP5zhfkOHDqVYsWJMnDiR+vXr07VrV2644QZGjBjBk08+mW77m2++mdtvv50jR45QvXp17r33Xu69916qVq3KsWPHMh0mOioqisDAQB577DGaNGlC9+7dqV27Nq+99hp9+vTJ1Wvu378/oaGhTJ48mdq1a/PQQw/RsmVLWrVqRd++fTPcp0mTJpQtW5b58+fTunVrevXqRe/evVm/fv1lz9WqVSvGjx9PTEwMbdu2pVGjRnTv3p327dtToUIFunfvnqvXkB9uvfVW3n33XY4fP06bNm2oU6cOXbp0oVu3bjRp0oQrr7ySyMhIty+7naaCRzxq586d1KtXjzFjxrjNPhwZGcnu3bvp3Lmzg9GJiIhIbvXr14+FCxfSqFEjNm3axIoVK6hbty4bN27k+uuvz3CfWrVqsXLlSlq3bs2+ffv46quvuO6669iwYQONGjXKcJ9FixYxbNgwypQpwxdffMHmzZvp1q0bGzduzPT+lnvuuYdvv/2WNm3asHPnTpYtW0b58uVZvXo1zZo1y9XrrV69Oj/++COdOnXijz/+YPHixcTGxjJ16tRMr/CEhISwbNkybr/9drZt28bMmTOJiopi3759WZ5v8ODBrF69mnvvvZcjR44wf/58du7cSZ06dXjjjTdy9RryS9++ffnxxx959NFHiYmJYenSpaxYsYLY2Fgefvhhli5dmqd7xjzN+MvoEgLGmF01a9asuWvXrgI/d0xMDD169GDRokVul32rVq3K+++/n24SLXFGyszUbdu2dTgSuRzlyTcoT74hN3lKSkpK7ZJ0ww03aATRbBgxYgQjR47kgw8+4LHHHsvRvn/99RcAJUqUyIfIxFM8naecvs9q1arF7t27d1trczz8m0Zpkzz73//+R+vWrd36yBpjGDBgAKNHjyY0NNTB6ERERESkMNNXFpJnlSpVSh0SEqBmzZqsX7+eCRMmqNgREREREUep4JE8CwwMJCoqipCQEB555BG2bNlCkyZNnA5LRERERERd2sQzatWqxdy5cylZsiRFixZ1OhwREREpQCNGjGDEiBFOhyGSIV3hEY/xptE4RERERERABY+IiIiIiPgxFTwiIiIiIuK3VPCIiIiIpGGMSf13UlKSg5GI+K+0762077n8oIJHREREJA1jDMHBwQDExcU5HI2If0p5bwUHB+d7waNR2kREREQuER4eTnR0NCdOnAAgNDQ0y5ngJXdSvunX1TTv5qk8JSUlERcXl/reCg8Pz3NsWVHBIyIiInKJiIgI4uLiiI+P59ixY06H49cSExMB17x+4r3yI08hISFERER47HiZ0VcVIiIiIpcIDAykUqVKREREpHZvk/wRFxenroM+wJN5Cg4OJiIigkqVKhVIoasrPCIiIiIZCAwMpGzZspQtWxZrLdZap0PyS6tWrQKgUaNGzgYil+WpPBlj8v2enUup4BERERHJghMf0gob3SPlG3wxT74XsYiIiIiISDap4BEREREREb+lgkdERERERPyWCh4REREREfFbKnhERERERMRvqeARERERERG/pYJHRERERET8ltEkWv7DGPNX0aJFw6+77jpHzp8y+25oaKgj55esKUe+QXnyDcqTb1CevJ9y5BucztOBAwc4f/58jLW2RE73VcHjR4wxvwHFgaOZbBIARADRQFIe12XUllJpHcjdK8izy72G/D5OTvbJatvc5Cm77f6So9weK7v7ZGc7T+XJn99LuT2Wp/Kk33n5dxxf+Z0HzubJX95LWW2j33l5O1ZB/M673HpfydM1wFlr7VU53tNaq6WQLEAVwAJV8rouk7ZdwC5vfH35fZyc7JPVtrnJU3bb/SVH+Z2n7GznqTz583vJ6TzlJkeFMU/5maP8ylMO32OO5clf3kuezJO35cif8pTb9b6Sp7wsuodHRERERET8lgoeERERERHxWyp4CpfTwMjkx7yuu9z2TvFUTLk5Tk72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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"quad = (10**pts) ** 2\n",
"\n",
@@ -863,50 +359,9 @@
},
{
"cell_type": "code",
- "execution_count": 15,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.1691008357817126e-12 / 4.1691008357817126e-12 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420158581846e-08 / 1.0165420158581846e-08 = 1.0\n",
- "field decay(t = 200.10000000000002): 4.650783221205379e-06 / 4.650783221205379e-06 = 1.0\n",
- "field decay(t = 250.125): 0.0005454598673598967 / 0.0005454598673598967 = 1.0\n",
- "field decay(t = 300.15000000000003): 0.017781404956060017 / 0.017781404956060017 = 1.0\n",
- "field decay(t = 350.175): 0.13014055244440104 / 0.13014055244440104 = 1.0\n",
- "field decay(t = 400.20000000000005): 0.2443206506136912 / 0.2443206506136912 = 1.0\n",
- "field decay(t = 450.225): 0.2437445632391615 / 0.2443206506136912 = 0.9976420848050188\n",
- "field decay(t = 500.25): 0.11044620451678894 / 0.2443206506136912 = 0.4520543156682302\n",
- "field decay(t = 550.275): 0.012822890989720101 / 0.2443206506136912 = 0.05248386068681144\n",
- "field decay(t = 600.3000000000001): 0.00037862010232358545 / 0.2443206506136912 = 0.0015496852246118257\n",
- "field decay(t = 650.325): 2.41614906850782e-06 / 0.2443206506136912 = 9.8892543976077e-06\n",
- "field decay(t = 700.35): 4.492194624953141e-09 / 0.2443206506136912 = 1.838647127727241e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-----------\n",
- "Initializing structure...\n",
- "field decay(t = 100.05000000000001): 4.169100835782652e-10 / 4.169100835782652e-10 = 1.0\n",
- "field decay(t = 150.07500000000002): 1.0165420167882405e-06 / 1.0165420167882405e-06 = 1.0\n",
- "field decay(t = 200.10000000000002): 0.0004650785076841832 / 0.0004650785076841832 = 1.0\n",
- "field decay(t = 250.125): 0.05454842035005856 / 0.05454842035005856 = 1.0\n",
- "field decay(t = 300.15000000000003): 1.7812567092193932 / 1.7812567092193932 = 1.0\n",
- "field decay(t = 350.175): 13.175704416847648 / 13.175704416847648 = 1.0\n",
- "field decay(t = 400.20000000000005): 24.99794167845129 / 24.99794167845129 = 1.0\n",
- "field decay(t = 450.225): 24.9382864152439 / 24.99794167845129 = 0.9976135929919857\n",
- "field decay(t = 500.25): 11.156520728608672 / 24.99794167845129 = 0.44629757410090326\n",
- "field decay(t = 550.275): 1.2839829021813205 / 24.99794167845129 = 0.051363544994912066\n",
- "field decay(t = 600.3000000000001): 0.03786336141250103 / 24.99794167845129 = 0.0015146591627237845\n",
- "field decay(t = 650.325): 0.0002416111150361613 / 24.99794167845129 = 9.665240368347396e-06\n",
- "field decay(t = 700.35): 4.491073802270905e-07 / 24.99794167845129 = 1.7965774382705666e-08\n",
- "run 0 finished at t = 700.35 (28014 timesteps)\n",
- "-------------------------------\n",
- "Difference between powers: 1.3663690082658835%\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"_, _, omega_flux_1, omega3_flux_1 = run_chi3(-3, 1)\n",
"_, _, omega_flux_2, omega3_flux_2 = run_chi3(-6, 10)\n",
diff --git a/python/examples/3rd-harm-1d.py b/python/examples/3rd-harm-1d.py
index 9082e8bdf..022efaac5 100644
--- a/python/examples/3rd-harm-1d.py
+++ b/python/examples/3rd-harm-1d.py
@@ -1,10 +1,8 @@
# 1d simulation of a plane wave propagating through a Kerr medium
# and generating the third-harmonic frequency component.
-
-from __future__ import division
+import argparse
import meep as mp
-import argparse
def main(args):
diff --git a/python/examples/README.md b/python/examples/README.md
index 13e1e2d4f..e7aac224f 100644
--- a/python/examples/README.md
+++ b/python/examples/README.md
@@ -4,7 +4,7 @@ Meep simulations are Python scripts which involve specifying the device geometry
Python libraries such as NumPy, SciPy, and Matplotlib can be used to augment the simulation functionality and will also be demonstrated. Much of the functionality of the low-level C++ interface has been abstracted in Python which means that you don't need to be an experienced programmer to set up simulations. Reasonable defaults are available where necessary.
-Several tutorials and examples are found here. These tutorials are meant to illustrate Meep's various features in an interactive and application-oriented manner.
+Several tutorials and examples are found here. These tutorials are meant to illustrate Meep's various features in an interactive and application-oriented manner.
## iPython/Jupyter Notebooks
@@ -16,7 +16,7 @@ The recommended method to run the tutorial notebooks is by 1.) installing `meep`
### nbviewer
-`nbviewer` is a web platform that can render interactive features found inside Jupyter notebooks openly stored on web-servers. While `nbviewer` can't run python code, it can execute stored javascript code used to animate the simulations.
+`nbviewer` is a web platform that can render interactive features found inside Jupyter notebooks openly stored on web-servers. While `nbviewer` can't run python code, it can execute stored javascript code used to animate the simulations.
### GitHub
@@ -26,7 +26,7 @@ GitHub is able to render some of the smaller notebooks as plain text. However, t
Below are summaries for each tutorial, along with the features the tutorials highlight. While there is no particular order to the tutorials, they progressively incorporate more complicated features.
-#### Basics
+#### Basics
* __`straight-waveguide.ipynb`__ -
A simple 2D straight waveguide tutorial that explores basic meep features like `geometry`, `sources`, and `PML` layers. The tutorial also explores basic visualization and animation features.
@@ -47,12 +47,12 @@ Computes the resonant mode frequencies of a 2D ring resonator using `harminv`.
* __`holey-wg-cavity.ipynb`__ -
Calculates the transmission and resonant modes of a waveguide photonic crystal cavity. Demonstrates the `harminv` routines and how to estimate the $Q$ of cavities.
-* __`holey-wg-bands.ipynb`__ -
+* __`holey-wg-bands.ipynb`__ -
Computes the band diagram of the infinite periodic waveguide by itself with no defects in the time domain. Explores the `k_point`, `run_k_point`, and periodic boundary conditions features.
#### MPB and Band diagrams
-* __`mpb_strip.ipynb`__ -
+* __`mpb_strip.ipynb`__ -
#### Eigenmode Source
@@ -79,12 +79,12 @@ Computes the band diagram of the infinite periodic waveguide by itself with no d
#### Nonlinear Optics
-* __`3rd-harm-1d.ipynb`__ -
+* __`3rd-harm-1d.ipynb`__ -
Examines 3rd harmonic generation in a $\chi^{(3)}$ material. Explores the proper way to do 1d simulations, how to include nonlinearities in materials, and compares experimental results to theory.
#### Near to Far Field Spectra
-* __`antenna-radiation.ipynb`__ -
+* __`antenna-radiation.ipynb`__ -
Computes the radiation pattern of a simple point source "antenna". Explores `add_near2far`, `add_flux`, `get_fluxes`, and `get_farfield` features.
* __`metasurface_lens.ipynb`__ -
diff --git a/python/examples/absorbed_power_density.ipynb b/python/examples/absorbed_power_density.ipynb
index fbce592f8..191be8d9d 100644
--- a/python/examples/absorbed_power_density.ipynb
+++ b/python/examples/absorbed_power_density.ipynb
@@ -13,168 +13,9 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "-----------\n",
- "Initializing structure...\n",
- "Halving computational cell along direction y\n",
- "time for choose_chunkdivision = 0.00278592 s\n",
- "Working in 2D dimensions.\n",
- "Computational cell is 8 x 8 x 0 with resolution 100\n",
- " cylinder, center = (0,0,0)\n",
- " radius 1, height 1e+20, axis (0, 0, 1)\n",
- " dielectric constant epsilon diagonal = (1,1,1)\n",
- "time for set_epsilon = 0.94641 s\n",
- "lorentzian susceptibility: frequency=9.67865, gamma=0.0806554\n",
- "-----------\n"
- ]
- },
- {
- "data": {
- "application/vnd.jupyter.widget-view+json": {
- "model_id": "d636f14778924d5ca3612af32c90cddd",
- "version_major": 2,
- "version_minor": 0
- },
- "text/plain": [
- "FloatProgress(value=0.0, description='0% done ', max=200.0)"
- ]
- },
- "metadata": {},
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Meep progress: 3.24/200.0 = 1.6% done in 4.0s, 243.3s to go\n",
- "on time step 650 (time=3.25), 0.00616112 s/step\n",
- "Meep progress: 6.595/200.0 = 3.3% done in 8.0s, 234.8s to go\n",
- "on time step 1322 (time=6.61), 0.00595972 s/step\n",
- "Meep progress: 10.0/200.0 = 5.0% done in 12.0s, 228.2s to go\n",
- "on time step 2003 (time=10.015), 0.00587584 s/step\n",
- "Meep progress: 13.16/200.0 = 6.6% done in 16.0s, 227.3s to go\n",
- "on time step 2635 (time=13.175), 0.00632952 s/step\n",
- "Meep progress: 16.52/200.0 = 8.3% done in 20.0s, 222.3s to go\n",
- "on time step 3308 (time=16.54), 0.00595308 s/step\n",
- "Meep progress: 19.39/200.0 = 9.7% done in 24.0s, 223.7s to go\n",
- "on time step 3882 (time=19.41), 0.00697273 s/step\n",
- "Meep progress: 22.77/200.0 = 11.4% done in 28.0s, 218.1s to go\n",
- "on time step 4559 (time=22.795), 0.00591308 s/step\n",
- "Meep progress: 26.085/200.0 = 13.0% done in 32.0s, 213.5s to go\n",
- "on time step 5223 (time=26.115), 0.00603051 s/step\n",
- "Meep progress: 29.465/200.0 = 14.7% done in 36.0s, 208.5s to go\n",
- "on time step 5898 (time=29.49), 0.00592621 s/step\n",
- "Meep progress: 32.87/200.0 = 16.4% done in 40.0s, 203.5s to go\n",
- "on time step 6579 (time=32.895), 0.00587512 s/step\n",
- "Meep progress: 36.265/200.0 = 18.1% done in 44.0s, 198.8s to go\n",
- "on time step 7258 (time=36.29), 0.00589753 s/step\n",
- "Meep progress: 39.63/200.0 = 19.8% done in 48.0s, 194.4s to go\n",
- "on time step 7931 (time=39.655), 0.00595055 s/step\n",
- "Meep progress: 43.075/200.0 = 21.5% done in 52.0s, 189.6s to go\n",
- "on time step 8621 (time=43.105), 0.00580339 s/step\n",
- "Meep progress: 46.385/200.0 = 23.2% done in 56.0s, 185.6s to go\n",
- "on time step 9282 (time=46.41), 0.00605481 s/step\n",
- "Meep progress: 49.795/200.0 = 24.9% done in 60.0s, 181.1s to go\n",
- "on time step 9965 (time=49.825), 0.00586147 s/step\n",
- "Meep progress: 53.120000000000005/200.0 = 26.6% done in 64.0s, 177.1s to go\n",
- "on time step 10629 (time=53.145), 0.0060261 s/step\n",
- "Meep progress: 56.52/200.0 = 28.3% done in 68.1s, 172.8s to go\n",
- "on time step 11309 (time=56.545), 0.00588784 s/step\n",
- "Meep progress: 59.885/200.0 = 29.9% done in 72.1s, 168.6s to go\n",
- "on time step 11982 (time=59.91), 0.00594881 s/step\n",
- "Meep progress: 63.22/200.0 = 31.6% done in 76.1s, 164.6s to go\n",
- "on time step 12649 (time=63.245), 0.0059984 s/step\n",
- "Meep progress: 66.57000000000001/200.0 = 33.3% done in 80.1s, 160.5s to go\n",
- "on time step 13319 (time=66.595), 0.0059716 s/step\n",
- "Meep progress: 69.935/200.0 = 35.0% done in 84.1s, 156.3s to go\n",
- "on time step 13993 (time=69.965), 0.00593998 s/step\n",
- "Meep progress: 73.265/200.0 = 36.6% done in 88.1s, 152.3s to go\n",
- "on time step 14659 (time=73.295), 0.00600958 s/step\n",
- "Meep progress: 76.64/200.0 = 38.3% done in 92.1s, 148.2s to go\n",
- "on time step 15335 (time=76.675), 0.00592433 s/step\n",
- "Meep progress: 80.035/200.0 = 40.0% done in 96.1s, 144.0s to go\n",
- "on time step 16013 (time=80.065), 0.00590122 s/step\n",
- "Meep progress: 83.44/200.0 = 41.7% done in 100.1s, 139.8s to go\n",
- "on time step 16694 (time=83.47), 0.00587495 s/step\n",
- "Meep progress: 86.82000000000001/200.0 = 43.4% done in 104.1s, 135.7s to go\n",
- "on time step 17371 (time=86.855), 0.00591555 s/step\n",
- "Meep progress: 90.22500000000001/200.0 = 45.1% done in 108.1s, 131.5s to go\n",
- "on time step 18052 (time=90.26), 0.00587912 s/step\n",
- "Meep progress: 93.58500000000001/200.0 = 46.8% done in 112.1s, 127.5s to go\n",
- "on time step 18723 (time=93.615), 0.00596502 s/step\n",
- "Meep progress: 96.95/200.0 = 48.5% done in 116.1s, 123.4s to go\n",
- "on time step 19397 (time=96.985), 0.00593889 s/step\n",
- "Meep progress: 100.32000000000001/200.0 = 50.2% done in 120.1s, 119.3s to go\n",
- "on time step 20071 (time=100.355), 0.00594026 s/step\n",
- "Meep progress: 103.68/200.0 = 51.8% done in 124.1s, 115.3s to go\n",
- "on time step 20743 (time=103.715), 0.00596124 s/step\n",
- "Meep progress: 107.11500000000001/200.0 = 53.6% done in 128.1s, 111.1s to go\n",
- "on time step 21430 (time=107.15), 0.00582342 s/step\n",
- "Meep progress: 110.525/200.0 = 55.3% done in 132.1s, 106.9s to go\n",
- "on time step 22113 (time=110.565), 0.00586115 s/step\n",
- "Meep progress: 113.855/200.0 = 56.9% done in 136.1s, 103.0s to go\n",
- "on time step 22779 (time=113.895), 0.00601218 s/step\n",
- "Meep progress: 117.17/200.0 = 58.6% done in 140.1s, 99.0s to go\n",
- "on time step 23442 (time=117.21), 0.00604035 s/step\n",
- "Meep progress: 120.55/200.0 = 60.3% done in 144.1s, 95.0s to go\n",
- "on time step 24119 (time=120.595), 0.00591443 s/step\n",
- "Meep progress: 123.93/200.0 = 62.0% done in 148.1s, 90.9s to go\n",
- "on time step 24795 (time=123.975), 0.00591771 s/step\n",
- "Meep progress: 127.345/200.0 = 63.7% done in 152.1s, 86.8s to go\n",
- "on time step 25478 (time=127.39), 0.00586339 s/step\n",
- "Meep progress: 130.695/200.0 = 65.3% done in 156.1s, 82.8s to go\n",
- "on time step 26148 (time=130.74), 0.00597442 s/step\n",
- "Meep progress: 134.075/200.0 = 67.0% done in 160.1s, 78.7s to go\n",
- "on time step 26824 (time=134.12), 0.005918 s/step\n",
- "Meep progress: 137.465/200.0 = 68.7% done in 164.1s, 74.7s to go\n",
- "on time step 27502 (time=137.51), 0.005903 s/step\n",
- "Meep progress: 140.85/200.0 = 70.4% done in 168.1s, 70.6s to go\n",
- "on time step 28179 (time=140.895), 0.00591219 s/step\n",
- "Meep progress: 144.24/200.0 = 72.1% done in 172.1s, 66.5s to go\n",
- "on time step 28858 (time=144.29), 0.00590082 s/step\n",
- "Meep progress: 147.625/200.0 = 73.8% done in 176.1s, 62.5s to go\n",
- "on time step 29535 (time=147.675), 0.0059085 s/step\n",
- "Meep progress: 151.025/200.0 = 75.5% done in 180.1s, 58.4s to go\n",
- "on time step 30216 (time=151.08), 0.00587643 s/step\n",
- "Meep progress: 154.425/200.0 = 77.2% done in 184.1s, 54.3s to go\n",
- "on time step 30896 (time=154.48), 0.00588855 s/step\n",
- "Meep progress: 157.82500000000002/200.0 = 78.9% done in 188.1s, 50.3s to go\n",
- "on time step 31577 (time=157.885), 0.00588064 s/step\n",
- "Meep progress: 161.245/200.0 = 80.6% done in 192.1s, 46.2s to go\n",
- "on time step 32261 (time=161.305), 0.00585296 s/step\n",
- "Meep progress: 164.605/200.0 = 82.3% done in 196.1s, 42.2s to go\n",
- "on time step 32933 (time=164.665), 0.00595906 s/step\n",
- "Meep progress: 167.955/200.0 = 84.0% done in 200.1s, 38.2s to go\n",
- "on time step 33603 (time=168.015), 0.00597094 s/step\n",
- "Meep progress: 171.31/200.0 = 85.7% done in 204.2s, 34.2s to go\n",
- "on time step 34275 (time=171.375), 0.00596032 s/step\n",
- "Meep progress: 174.695/200.0 = 87.3% done in 208.2s, 30.2s to go\n",
- "on time step 34953 (time=174.765), 0.00590648 s/step\n",
- "Meep progress: 178.01500000000001/200.0 = 89.0% done in 212.2s, 26.2s to go\n",
- "on time step 35617 (time=178.085), 0.00602658 s/step\n",
- "Meep progress: 181.37/200.0 = 90.7% done in 216.2s, 22.2s to go\n",
- "on time step 36288 (time=181.44), 0.00597098 s/step\n",
- "Meep progress: 184.735/200.0 = 92.4% done in 220.2s, 18.2s to go\n",
- "on time step 36961 (time=184.805), 0.0059467 s/step\n",
- "Meep progress: 188.035/200.0 = 94.0% done in 224.2s, 14.3s to go\n",
- "on time step 37621 (time=188.105), 0.00606458 s/step\n",
- "Meep progress: 191.455/200.0 = 95.7% done in 228.2s, 10.2s to go\n",
- "on time step 38307 (time=191.535), 0.00583756 s/step\n",
- "Meep progress: 194.79/200.0 = 97.4% done in 232.2s, 6.2s to go\n",
- "on time step 38973 (time=194.865), 0.00600972 s/step\n",
- "Meep progress: 198.16/200.0 = 99.1% done in 236.2s, 2.2s to go\n",
- "on time step 39649 (time=198.245), 0.00592657 s/step\n",
- "run 0 finished at t = 200.0 (40000 timesteps)\n",
- "flux:, 0.13120421825956843 (dft_fields), 0.13249534167200247 (dft_flux), 0.0097446702362583 (error)\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
@@ -271,32 +112,9 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 2,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"plt.figure()\n",
"sim.plot2D()"
@@ -311,32 +129,9 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 3,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"plt.figure()\n",
"x = np.linspace(-r, r, Dz.shape[0])\n",
diff --git a/python/examples/absorbed_power_density.py b/python/examples/absorbed_power_density.py
index 3bf34183d..7e82f8489 100644
--- a/python/examples/absorbed_power_density.py
+++ b/python/examples/absorbed_power_density.py
@@ -1,11 +1,11 @@
-import numpy as np
import matplotlib
+import numpy as np
matplotlib.use("agg")
import matplotlib.pyplot as plt
+from meep.materials import SiO2
import meep as mp
-from meep.materials import SiO2
resolution = 100 # pixels/um
diff --git a/python/examples/absorber-1d.py b/python/examples/absorber-1d.py
index 606e01b80..49fb6a862 100644
--- a/python/examples/absorber-1d.py
+++ b/python/examples/absorber-1d.py
@@ -1,9 +1,9 @@
-from __future__ import division
-
import argparse
-import meep as mp
+
from meep.materials import Al
+import meep as mp
+
def main(args):
diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb
index dfc36d0cd..311f3b285 100644
--- a/python/examples/adjoint_optimization/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb
+++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/01-Introduction-checkpoint.ipynb
@@ -17,21 +17,9 @@
},
{
"cell_type": "code",
- "execution_count": 1,
- "metadata": {},
- "outputs": [
- {
- "ename": "ModuleNotFoundError",
- "evalue": "No module named 'meep'",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)",
- "Input \u001b[0;32mIn [1]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mmeep\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mmp\u001b[39;00m\n\u001b[1;32m 2\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mmeep\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01madjoint\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mmpa\u001b[39;00m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mnumpy\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m \u001b[38;5;21;01mnp\u001b[39;00m\n",
- "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'meep'"
- ]
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"import meep as mp\n",
"import meep.adjoint as mpa\n",
@@ -55,7 +43,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -77,7 +65,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -111,7 +99,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -175,7 +163,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -200,7 +188,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -219,7 +207,7 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -236,7 +224,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -261,7 +249,7 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -278,22 +266,9 @@
},
{
"cell_type": "code",
- "execution_count": 10,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"opt.plot2D(True, frequency=1 / 1.55)\n",
"plt.show()"
@@ -310,19 +285,9 @@
},
{
"cell_type": "code",
- "execution_count": 11,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"f0, dJ_du = opt()"
]
@@ -336,32 +301,9 @@
},
{
"cell_type": "code",
- "execution_count": 12,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 12,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"plt.figure()\n",
"plt.imshow(np.rot90(dJ_du.reshape(Nx, Ny)))"
@@ -378,7 +320,7 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -396,7 +338,7 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -412,22 +354,9 @@
},
{
"cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0wAAAGeCAYAAACn9IG6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOzdeXhU1f3H8feXCCRABEXLWgUEcWFJMCxSQdAKVkXRWqt1CxasVTFKi4pWRWuVFjdQW3dRq4hlCSr8RK2mSKmCZAEUcEGsBHAtyBIU4/f3x9zEJCQhQCZ3MvN5Pc88zJx7Z+73TPIw88m551xzd0RERERERGRnDcIuQEREREREJFYpMImIiIiIiFRBgUlERERERKQKCkwiIiIiIiJVUGASERERERGpggKTiIiIiIhIFRSYREQqYWZTzOzWvXj+O2Y2qBZLihtmNsjM1oZdh4iISE0oMIlIzDOzNWZWZGZbzGxDEGaahV1XicrClbsf6e45dXDsv5jZJ2b2tZl9bGbXVdieZmZLzGxb8G9aNa91pJm9bGZfmdnGYP+Tot2H6pjZj8xsqpmtM7NNZvZvM+tbxb6PmZmbWecybfub2Swz2xq8P7+q5ljjg+efVaZtn6CtQy30ZbCZvR70Y00l2zsE27eZ2Uoz+2k1rzUlqKtPmbbOZlYrF1c0s7PMbGFQS04l22v8eyUiUt8pMIlIfTHM3ZsBaUA6MC7kemLFo8Bh7r4v0B8418zOADCzRsBs4O/AfsATwOygvTIvAK8ArYEfAVcAX0e3/F1qBiwGjgL2J9KHORUDs5kdAxxSyfPvB74FWgHnAn8zsyOrOd5XwM1mllQLtVe0FXgMGFvF9qlAHtASuB6YbmYHVvN6XwF7PAq6C18B9wATKm7Yg98rEZF6TYFJROoVd98AzCMSnAAws8ZmdoeZ/dfMPjWzB8wsJdh2gJm9GIyYfGVmb5hZg2Db4WaWE2x7x8xOreyYZpZpZgsqtHnwF/2LiXwRvzoYAXsh2L6mZIQgqO+eYJRkXXC/cbBtkJmtNbPfmdlnZrbezEbsxvuxyt23lmn6HigZYRkE7APc4+7fuPtkwIDjKunjAUBH4GF3/za4/dvdF5TZ5xQzyw/er4Vm1qPMtrZmNsPMPjezj8zsijLbUoIRkf+Z2btA793o32p3v8vd17t7sbs/BDQCupZ5/X2Ae4HRFfrUFPg5cIO7bwn68jxwfjWHfIlIwDqvkveoUdD/0cHjpGDE68Ya9mWRuz8FrK7ktQ8FegE3uXuRu88AlgX1V+UJoIeZHVvJ6/3CzJZUaBtjZrNrWOur7v4csK6SzYOo4e+ViEg8UGASkXrFzNoDPwM+KNM8ATiUSIjqDLQDSr7E/g5YCxxIZJThOsDNrCGREZWXiYymjAaeNrOu7IbgC/zTwF/cvZm7D6tkt+uBfkF9PYE+wB/KbG8NNA/q/jVwv5ntF/T3V2a2tLoazOxaM9sS9LMp8Eyw6UhgqbuXPU1radBe0ZdE3tO/m9lwM2tV4RjpREZHfkNkBORB4PkgDDYg8l4WBH04HrjSzIYGT7+JyOjPIcBQ4MIKr/1XM/trdX0ss28akcBU9ud/FTDf3Su+T4cC37n7e2XaCqrofwkHbgBuCn5HftjgXhKkbjGzw4FrgSTgT0Ftx5jZxpr0oxJHAqvdffNu1LoNuK3k+BU8D3QM6ixxPvBkUOsuf692UWtNf69EROo9BSYRqS+yzWwz8AnwGZEv4ZiZARcDV7n7V8EXztuAs4Pn7QDaAAe7+w53fyP4otePyOleE4LRlNeAF4FzolD7ucAt7v6Zu38O3Ez5UY4dwfYd7j4X2EIwguLuz7h7j51esQx3nwCkEhmheArYFGxqVuZ+iU3BvhVfw4HBwBrgTmC9mc03sy7BLhcDD7r7W8FIzxPAN0Tex97Age5+S/BergYe5oefwVnAn4KfzyfA5ArHvtTdL62ujwBmtm/Qv5vdfVPQ9mMiIa6yUZ5m7HxKYaX9r1DP88DnwMhKti0nchpcNvB74Hx3Lw62LXD3FrvqRxVq/LOq4EHgIDP7WYU6vwGmEYyUBachdiDyO16j36so1CoiUi8pMIlIfTHc3VOJnA50GHBA0H4g0ARYEpwqtpHIaVUlcz8mEhmNeNnMVpvZtUF7W+ATd/++zDE+JjJCUtvaBq9d9jhtyzz+0t2/K/N4G5EvpTXmEXlAEZFABpHgtW+FXfcFNlMJd1/r7pe7+yHAwUTm3DwZbD4Y+F3Jexy8zz8O+nEw0LbCtuuIjOgR7PNJmUOVfS9qJDjF8gXgTXe/vcyme4iEzYpf4GE3+1/BH4iMDCZXsu0JIn2e6+7v1+C1amKPag2C0R+DW0VPAL8K/qhwPvBcsH8otYqI1FcKTCJSr7j7v4ApwB1B0xdEQsKR7t4iuDUPFojA3Te7++/cvRNwKjDGzI4nMjfjxyXzmQIHAYWVHHYrkVAGgJm1rljWLspeR+QLdtnjVDY3pDbsww+LH7xDZI6LldneI2ivVjASdD/QLWj6hMgoUYsytybuPjXY9lGFbanuXrLC3noi4arEQbvToWC+VzaRUw5/U2Hz8cBEi6yeuCFo+49FVsN7D9inzCgZRE6JrEn/XyEStCsb+forkZGaoRZZbKI2vAN0MrOyozQ1qhV4HGgBnFG20d3fJDIfawDwKyKjc7Vhj3+vRETqIwUmEamP7gFOMLOewQjRw8DdZvYjADNrVzJ/JliooHPw5W4TUExkYYS3iIzkXG1mDS1yzaRhwLOVHK8AONIiSyknA+MrbP8U6FRNvVOBP5jZgcHiCjcSWWFsr5hZAzP7jZntZxF9gMuAfwa75BDp7xXBXKPLg/bXKnmt/czs5uC9ahDUeRHwZrDLw8AlZtY3OFZTMzs5+IK/CNhsZtcECzwkmVk3MytZ3OE5YFxwjPZUWJxhF31sCEwnEoovrDAiCJF5Sj2JzA8rWQhkGDArWAxjJpE5R03N7CfAadQ8OFwPXF2hnvOJrNiXSWQVwSeshkvcB+9rMtAw8tCSLVhZLphnlU9k7lSymZ1OJITM2NXrBqOTNwHXVLL5SeA+YEfZBTxqUGtSUOs+QIOgppI5XTnU8PdKRCQeKDCJSL0TzAN6kh/mrVxDZDTgTTP7GniVH1ZR6xI83gL8B/iru78eTOAfRmQBiS+IjBpc4O4rKznee8Atweu8D1T84vkocERwOlp2JSXfCrxNZGL8MiCXGi4HbWbnmll1f7k/HfiQyOlQfyeyWty9Qd3fAsOBC4CNRALQ8KC9om+JzHF5lci8n+VE5ihlBq/1NjCKyJfv/xF5v0u2FQOnEAksHxF5Px8hspAFRE4R/DjY9jIVAotFVjV8oIr+9Q9eewiw0SIrEW4xswHBsT9z9w0lt+A5X7h7UXD/UiCFyLy3qcBv3b1GIyHu/m8iYbCkzoOIhPULglX3niHyc7072D7AIotvVGUgkeA3l8goW1HwfpQ4G8gg8v5OAM4MftdrYiqRkbyKniIySlguoNfg9+r8oL6/ERmhKiISmnf390pEpN6z8ovciIiISLwI5n59BvSqxflWIiIJRSNMIiIi8eu3wGKFJRGRPbdP2AWIiIhI7TOzNUQuKDs85FJEROo1nZInIiIiIiJSBZ2SJyIiIiIiUgUFJhERERERkSooMImIiIiIiFRBgUlERERERKQKCkwiIiIiIiJVUGASERERERGpggKTiIiIiIhIFRSYREREREREqqDAJCIiIiIiUgUFJhERERERkSrsE3YBte2AAw7wDh06hFrD1q1badq0aag1RFM89099q7/iuX+x1LclS5Z84e4Hhl1HLImFz52yYun3JdoSqa+QWP1VX+NXrPa3us+3uAtMHTp04O233w61hpycHAYNGhRqDdEUz/1T3+qveO5fLPXNzD4Ou4ZYEwufO2XF0u9LtCVSXyGx+qu+xq9Y7W91n286JU9ERERERKQKCkwiIiIiIiJVUGASERERERGpQtzNYarMjh07WLt2Ldu3b6+T4zVv3pwVK1bUybHCUN/7l5ycTPv27WnYsGHYpYiIiIhIjEuIwLR27VpSU1Pp0KEDZhb1423evJnU1NSoHycs9bl/7s6XX37J2rVr6dixY9jliIiIiEiMS4hT8rZv307Lli3rJCxJbDMzWrZsWWejjSIiIiJSvyVEYAIUlqSUfhdEREREpKYSJjBJ3Vq3bh1nnnlm2GWIiIiIiOwVBSapdd999x1t27Zl+vTpYZciIiIiIrJXFJjqwI033sg999xT+vj6669n0qRJu3zepk2b6Nq1K6tWrQLgnHPO4eGHH95pv8WLF9O/f3969uxJnz592Lx5M9u3b2fEiBF0796d9PR0Xn/9dQCmTJnC8OHDOeGEE+jQoQP33Xcfd911F+np6fTr14+vvvoKgEGDBpGVlUVaWhrdunVj0aJFACxatIjjjz+e9PR0+vfvX1rblClTOPXUUznuuOM4/vjjWbNmDd26dQPgnXfeoU+fPqSlpdGjRw/ef/99AO666y66detGt27dSt+fNWvWcPjhhzNq1CiOPPJIhgwZQlFR0R697yIiIiIieyshVskr6+YX3uHddV/X6mse0XZfbhp2ZJXbL7roIs444wyuvPJKvv/+e5599lkWLVrE5s2bGTBgQKXPeeaZZzjiiCO47777yMzMJCsri//973+MGjWq3H7ffvstv/zlL5k2bRq9e/fm66+/JiUlhUmTJmFmLFu2jJUrVzJkyBDee+89AJYvX05eXh7bt2+nc+fO/PnPfyYv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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"min_g = np.min(g_discrete)\n",
"max_g = np.max(g_discrete)\n",
@@ -469,19 +398,9 @@
},
{
"cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"resolution = 20\n",
"opt.sim.resolution = resolution\n",
@@ -491,22 +410,9 @@
},
{
"cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0kAAAGeCAYAAABB3Ur+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nOzdeXhU5d3/8feXAIKAoKhsLqAoyiIJBBQskAASqoK4i1GKVqyPFrH2oYpaRatPbWmttCooiogi4oKoxV9RH02BagVkEdnE8mDNJmHJJIRBknD//pgz6SQkIfuZJJ/XdeVK5j4z53zPYXTyyb0cc84hIiIiIiIiIU38LkBERERERCSaKCSJiIiIiIhEUEgSERERERGJoJAkIiIiIiISQSFJREREREQkgkKSiIiIiIhIBIUkEZEIZjbPzB6txus3mVlCDZbUYJhZgpml+l2HiIjI0SgkiUjUMrOdZhY0s/1mlukFmNZ+1xVWWqByzvVyzqXUwbH/YGbbzSzXzLaa2YQS22PN7AszO+B9jy1nX73M7AMz22tm2d7zL67tcyiPmZ1sZgvNLN3MAmb2DzM7v4znzjUzZ2bdI9pOMLO3zSzPzL41s+vLOdZ07/XXRLQ19dq61sC5JJrZJ9557Cxle1dv+wHv33JkOfua59U1MKKtu5nVyE0PzewaM/vUqyWllO0Vfl+JiNRnCkkiEu3GOOdaA7FAHDDN53qiRR4wBmgL/ASYaWaDAcysOfAO8ApwPPAS8I7XXpr3gA+BjsDJwJ1ATq1Wf3StgdVAf+AEQuewtGRINrMfAWeW8vqngUNAByAZmGVmvco53l7gYTOLqYHaS8oD5gJTy9i+EFgHtAfuB940s5PK2d9eoMq9nUexF3gSeLzkhiq8r0RE6i2FJBGpF5xzmcAyQmEJADM7xutR+beZfW9ms82spbftRDP7q9czstfMVphZE2/buWaW4m3bZGZjSzummU00s5Ul2pz3l/tbCf3y/Suvp+s9b/vOcE+AV9+TXm9IuvfzMd62BDNLNbNfmtkuM8sws5sqcT0ecs5tdc4dds59DqwABnmbE4CmwJPOuR+cc38GDBheyjmeCHQD5jjnDnlf/3DOrYx4zqVmtt67Xp+a2XkR2zqb2VtmlmVm/2dmd0Zsa+n1fOwzs83AgEqc3w7n3BPOuQznXKFz7jmgOdAjYv9Ngb8Ak0ucUyvgSuDXzrn93rm8C9xYziH/RihU3VDKNWrunf9k73GM17P1YAXPZZVz7mVgRyn7PhvoBzzknAs6594CNnr1l+Ul4DwzG1bK/q42sy9KtN1tZu9UsNaPnHOvA+mlbE6ggu8rEZH6TiFJROoFMzsF+DHwTUTz48DZhIJTd6ALEP7F9ZdAKnASod6E+wBnZs0I9Zx8QKjXZDKwwMx6UAneL+0LgN8751o758aU8rT7gQu8+voCA4EHIrZ3JNQT1AX4KfC0mR3vne/1ZvZlRWrxguEAYJPX1Av40jkXOQTrS6+9pD2ErukrZjbOzDqU2HccoV6QnxHq6XgWeNcLgE0IXcsN3jmMAO4ysyTv5Q8R6uU5E0gi1OMVue9nzOyZCp5jLKGQFPnv/wtguXOu5HU6Gyhwzn0d0bahjPMPc8CvgYe898h/NjgXDk+PmNm5wL1ADPCYV9uPzCy7IudRil7ADudcbiVqPQD8T/j4JbwLdPPqDLsRmO/VWuH3VRm1VvR9JSJSrykkiUi0W2JmucB3wC5Cv3hjZgbcCvzCObfX+yXzf4DrvNflA52A051z+c65Fd4vdxcQGsr1uNdr8jHwV2B8LdSeDDzinNvlnMsCHqZ4b0a+tz3fOfc+sB+vp8Q596pz7rwj9li62YR+sV7mPW4NBEo8JwC0KflC75okAjuBPwIZZrbczM7ynnIr8Kxz7nOvR+cl4AdC13EAcJJz7hHvWu4A5vCff4NrgMe8f5/vgD+XOPbtzrnbj3ZyZnYc8DLwsHMu4LWdSii4ldab05ojhwuWev4l6nkXyAJuKWXbV4SGuC0B/hu40TlX6G1b6Zxrd7TzKEOF/61KeBY4zcx+XKLOH4BFeD1i3hDDroTe45V9X9VUrSIi9Y5CkohEu3HOuTaEhvqcA5zotZ8EHAt84Q0DyyY0ZCo8l2MGoV6HD8xsh5nd67V3Br5zzh2OOMa3hHpCalpnb9+Rx+kc8XiPc64g4vEBQr+IVpiZzQB6A9dE/IV/P3BciaceB+RSCudcqnPu5865M4HTCc2hme9tPh34Zfgae9f5VO88Tgc6l9h2H6GeO7znfBdxqMhrUdHza0mot+qfzrnfRmx6klDALPlLO1Ty/Et4gFAPYItStr1E6Jzfd85tr8C+KqJKtXph6DfeV0kvAdd7f0i4EXjde74vtYqI1EcKSSJSLzjn/g7MA/7gNe0GgkAv51w776utt8gDzrlc59wvnXNnAGOBu81sBKG5FqeG5yd5TgPSSjlsHqEgBoCZdSxZ1lHKTif0S3XkcUqb61ElZvYwoSGIo5xzkT0nmwjNWbGItvP4z3C8Mnk9Pk8TCl4QCjmPRVzjds65Y51zC71t/1diWxvnXHhlvAxCgSrstEqe3zGEem5SCfUaRRoBzLDQqoeZXttnFlrF7mugaURvGISGO1bk/D8kFK5L6+F6hlCPTJKFFoyoCZuAM8wssjemQrUCLwLtgCsiG51z/yQ0v2oIcD2hXriaUOX3lYhIfaOQJCL1yZPARWbW1+sJmgP8ycxOBjCzLuH5MN5iA929X+gCQCFwGPicUI/Nr8ysmYXuaTQGeK2U420Aello2eMWwPQS278Hziin3oXAA2Z2krdAwoOEVgarNjObRugX4JHOuT0lNqcQOt87vblDP/faPy5lP8eb2cPetWri1Xkz8E/vKXOA28zsfAtpZWaXeL/UrwJyzeweb5GGGDPrbWbhBRpeB6Z5xziFEgssHOX8mgFvEgrCPynR8weheUd9Cc33Ci/mMQZ42zmXBywmNIeolZldCFxGxcPC/cCvStRzI6GV9iYSWv3vJavgcvTedW0BNAs9tBbmrQjnzZtaT2guVAszu5xQ8HjraPv1eiEfAu4pZfN84CkgP3IRjgrUGuPV2hRo4tUUnqOVQgXfVyIi9Z1CkojUG968nvn8Zx7KPYT+6v9PM8sBPuI/q5+d5T3eD3wGPOOc+8SbhD+GUA/MbkK9AxOcc1tLOd7XwCPefrYDJX/ZfAHo6Q01W1JKyY8CawhNbt8IrKWCSzebWbKZlfcX+v8h1DPzjYVW19tvZvd5dR8CxgETgGxCoWec117SIUJzVj4iNI/nK0JzjiZ6+1oDTCL0C/c+Qtc7vK0QuJRQSPk/QtfzeUKLUUBoDta33rYPKBFSLLQa4ewyzm+wt+9RQHbEOQ7xjr3LOZcZ/vJes9s5F/R+vh1oSWge20Lgv5xzFerxcM79g1AADNd5GqGAPsFbLe9VQv+uf/K2DzGz/eXsciihsPc+oX+zoHc9wq4D4gld38eBq7z3ekUsJNRjV9LLhHoDi4XyCryvbvTqm0WoJypIKChX9n0lIlKvWfFFakRERKS+8+Zy7QL61eD8KRGRRkM9SSIiIg3PfwGrFZBERKqmqd8FiIiISM0xs52EbvI6zudSRETqLQ23ExERERERiaDhdiIiIiIiIhEUkkRERERERCIoJImIiIiIiERQSBIREREREYmgkCQiIiIiIhJBIUlERERERCSCQpKIiIiIiEgEhSQREREREZEICkkiIiIiIiIRFJJEREREREQiNPW7gMo48cQTXdeuXf0uwzd5eXm0atXK7zKilq5P+XR9yqfrA1988cVu59xJftcRjRr7509Z9N9N1ei6VZ2uXdXoupWuvM+9ehWSunbtypo1a/wuwzcpKSkkJCT4XUbU0vUpn65P+XR9wMy+9buGaNXYP3/Kov9uqkbXrep07apG16105X3uabidiIiIiIhIBIUkERERERGRCApJIiIiZTCzMWb2XCAQ8LsUERGpQ/VqTlJp8vPzSU1N5eDBg36XUuvatm3Lli1b/C4jarVu3Zr8/HyaNWvmdyki0kA4594D3ouPj5/kdy0iIlJ36n1ISk1NpU2bNnTt2hUz87ucWpWbm0ubNm38LiMqOedITU0lNTWVbt26+V2OiIiIiNRj9X643cGDB2nfvn2DD0hSPjOjbdu2jaJHUURERERqV70PSYACkgB6H4iIiIhIzWgQIUnqVnp6OldddZXfZYiIiIiI1AqFJKmUgoICOnfuzJtvvul3KSIiIiIitUIhqZoefPBBnnzyyaLH999/PzNnzjzq6wKBAD169GDbtm0AjB8/njlz5hzxvNWrVzN48GD69u1LQkICubm5HDx4kJtuuok+ffoQFxfHJ598AsC8efMYN24cF110EV27duWpp57iiSeeIC4ujgsuuIC9e/cCkJCQwJQpU4iNjaV3796sWrUKgFWrVjFo0CDi4uIYPHhwUW3z5s1j7NixDB8+nBEjRrBz50569+4NwKZNmxg4cCCxsbGcd955bN++HYAnnniC3r1707t376Lrs3PnTs4991wmTZpEr169GDVqFMFgsErXXURERESkttT71e0iPfzeJjan59ToPnt2Po6HxvQqc/vNN9/MFVdcwV133cXhw4d57bXXWLVqFbm5uQwZMqTU17z66qv07NmTp556iokTJzJlyhT27dvHpEnFV5g9dOgQ1157LYsWLWLAgAGkpaXRsmVLZs6ciZmxceNGtm7dyqhRo/j6668B+Oqrr1i3bh0HDx6ke/fu/O53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e62o3TnHz3/+c3r06MHIkSPZtWtX0baEhATWrFkDhAJWnz596N27N/fcc0/Rc7p27cru3bvZuXMn5557LpMnT6ZXr16MGjWKYDDIm2++yZo1a0hOTiY2NpZgMFisrm+++YaRI0fSt29f+vXrx7/+9S+cc0ydOpXevXvTp08fFi1aBEBKSgrDhg3jsssu44wzzuDee+9lwYIFDBw4kD59+vCvf/0LCPWG3XbbbcTHx3P22Wfz17/+FYCdO3cyZMgQ+vXrR79+/YqCUEpKCkOGDGHs2LFFobB169YAZGRkMHToUGJjY+nduzcrVqwo93q0bt2a+++/n759+3LBBRfw/fffV+vfTaS25ezdpYAkIiJSDzWqkDRz7UwOFh4s1naw8CAz186s1n7feecdRo8ezdlnn0379u354osvAHj77bfZtm0bmzdvZv78+aX2oKSnp3PPPffw8ccfs379elavXs2SJUuOeN727duZNGkSmzZtol27drz11ltcddVVxMfHs2DBAtavX0/Lli2LvSY5OZk77riDDRs28Omnn9KpUycWL17M+vXr2bBhAx999BFTp04lIyMDgA0bNjB79my2bNnCyy+/zNdff82qVau45ZZb+Mtf/lK03507d7Jq1SqWLl3KbbfdxsGDBzn55JP58MMPWbt2LYsWLeLOO+8sev7atWuZOXMmX3/9dbH6Xn31VZKSkorqiY2NLfd65OXlccEFF7BhwwaGDh3KnDlzqvgvJlL7AsF8JizYyieHeikgiYiI1DONKiRl5mVWqr2iFi5cyHXXXQfAddddVzTkbvny5YwfP56YmBg6d+7M8OHDj3jt6tWrSUhI4KSTTqJp06YkJyezfPnyI57XrVs3zjvvPAD69+/Pzp07y60pNzeXtLQ0Lr/8cgBatGjBsccey8qVK4tq6tChA8OGDWP16tUADBgwgE6dOnHMMcdw5plnMmrUKAD69OlT7HjXXHMNTZo04ayzzuKMM85g69at5OfnM2nSJPr06cPVV19dbL7VwIED6dat2xE1DhgwgBdffJHp06ezceNG2rRpU+71aN68OZdeemmFr4GIX3KyUvnlc++xKXM/ncf/RQFJRESknmlUS4B3bNWRjLyMUturau/evXz88cds3LgRM6OwsBAzY8aMGdUp9QjHHHNM0c8xMTFHDK2r6WM0adKk6HGTJk2K5hMB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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"min_g = np.min(g_discrete)\n",
"max_g = np.max(g_discrete)\n",
diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/02-Waveguide_Bend-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/02-Waveguide_Bend-checkpoint.ipynb
index 4df3e0677..c2e360d25 100644
--- a/python/examples/adjoint_optimization/.ipynb_checkpoints/02-Waveguide_Bend-checkpoint.ipynb
+++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/02-Waveguide_Bend-checkpoint.ipynb
@@ -13,17 +13,9 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Using MPI version 3.1, 1 processes\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"import meep as mp\n",
"import meep.adjoint as mpa\n",
@@ -46,7 +38,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -143,22 +135,9 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"x0 = 0.5 * np.ones((Nx * Ny,))\n",
"opt.update_design([x0])\n",
@@ -178,7 +157,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -209,7 +188,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -228,16 +207,7 @@
"cell_type": "code",
"execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Starting forward run...\n",
- "Starting adjoint run...\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"x = solver.optimize(x0);"
]
diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/03-Filtered_Waveguide_Bend-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/03-Filtered_Waveguide_Bend-checkpoint.ipynb
index 18cf5784d..7a759ed66 100644
--- a/python/examples/adjoint_optimization/.ipynb_checkpoints/03-Filtered_Waveguide_Bend-checkpoint.ipynb
+++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/03-Filtered_Waveguide_Bend-checkpoint.ipynb
@@ -17,17 +17,9 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Using MPI version 3.1, 1 processes\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"import meep as mp\n",
"import meep.adjoint as mpa\n",
@@ -53,7 +45,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -81,17 +73,9 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0.20124611797498096\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"minimum_length = 0.09 # minimum length scale (microns)\n",
"eta_i = (\n",
@@ -113,7 +97,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -151,7 +135,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -177,7 +161,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -208,7 +192,7 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -241,7 +225,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -283,7 +267,7 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -315,7 +299,7 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -337,22 +321,9 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"rho_vector = np.random.rand(Nx * Ny)\n",
"opt.update_design([mapping(rho_vector, eta_i, 1e3)])\n",
@@ -369,22 +340,9 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"beta = 2048\n",
"\n",
@@ -417,7 +375,7 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -465,1594 +423,9 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 1\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 2\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 3\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 5\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 6\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 7\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 9\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 10\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 11\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 12\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 13\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 14\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO1dO29r6XXdfFOkKFGidGc8gDFA4DiIDaRwb4yBIEWmTec+SJfGVf5B2vyFNAOkS+POVSobGSBp4sDX8AAznqurByWRlEiKr5Nisj6ts/gd8lD3euZenb0AQroSdR68Z337tfb+SkmSmMPhKA7K3/UFOByObxdOeoejYHDSOxwFg5Pe4SgYnPQOR8FQ3fJ7T+2/R0iSxM7OzuxXv/qV/frXv7ZqtWq1Ws2Wy+WTjlcqlWw8HttHH31kn376qf34xz+2ZrP5lq/a8SdEKfbDbaR3vAdIksRKpZKVSiVbrVb2u9/9zn75y19ao9GwZrP5JNLjeDc3N/ajH/3IfvrTn1q57I7hc4CT/pkhSRL78ssv7Ysvvnhrx5zP5zYej61UihoOx3sGX7qfIarVx7X8bRC10Wg44Z8RnPTPEOyG8wKw6zHwt9Vq1Un/jODu/TPHU5N4q9XKINF+6jEc7ybc0j9DrFar7/oSHO8wnPTPEJ5ld2yCPx0OR8HgpHc4CgYnvcNRMDjpHY6CwUnvcBQMTnqHo2Bw0jscBYOT3uEoGJz0DkfB4KR3OAoGJ/0zhGvvHZvgpH+GcO29YxP86XA43iL+/b++tk//5T/s7//1P+36fvZdX04U3k/vcLwlXI4e7Bf/9t+2WCX2P2dD67X/1/757/7qu76sNbildzjeEqbzpS1WjwOkR9PFd3g12XDSOxxvCd8/btk/fPJnViqZfXjQtH/86z//ri8pCnfvHY63iH/627+0X/zNX1i9+u7a03f3yhyO9xTvMuHNnPQOR+HgpHc4CgYnvcNRMDjpHY6CwUnvcBQMTnqHo2Bw0jscBYOT3uEoGJz0DkfB4KR3OAoGJ73DUTA46R2OgsFJ73AUDE56h6NgcNI7HAWDk97hKBic9A5HweCkdzgKBie9w1EwOOkdjoLBSe9wFAxOeoejYHDSOxwFg5P+GeJPsVV1kiTb3+R4L+Ckf4Z4W1tVl0ql8BXfO95/OOkdmXDr/jzhpH8GYCtcrVZT7v2bEBd/O5/PzcysUqk8+ViOdwdO+vcYSZJYkiS2WCxstVrZZDKxV69e2cPDQ3hPrVbb2TUvlUpWLpet0WiYmdnR0ZENBgO7ubmx1Wpli8XClstlOL/j/YLvWvtE8MOe9f3bjoP1PEmS2HK5tMlkYvP53C4uLuw3v/mNjUYj+/jjj200GtlisbByuRysf5IkqRg96xprtZq1223r9Xr2wx/+0M7Pz+0Pf/iDff/737dqtWr1et3q9bpVKpVwvO8q7ufzeu5hO5z0TwAIp69dkPfh1OPi36vVylarlc1mMxuNRnZ+fm4vX760ly9f2mw2s8PDQ0uSxMbjsZVKpWCZQc5yuRy+KsrlslWrVet2u/a9733PTk9PbbVa2evXr61cLtvh4aG1221brVZWq9VSxM97b0/5vGILamzBceJvhpN+B+ChS5IkkA6vLPLHHsBdHsqYdYeFXywWNp1O7ebmxs7OzuzLL7+029vbYN0rlUpw75fLpZXL5fACWavVaor4SZKE3x8eHtrx8bF1Oh2rVqv28PBgw+Ew/E2SJFav18O/cZxN5OfPcBu2fU68gPH58/xtkeGk3xEg/HK5DMRDjAvym60/dFmWKOvhzCI7Fpnlcmmz2czu7++t3+/b9fW13d3d2XQ6tfl8bkmSBDccCTgsArVazRqNhjUaDatWq1apVNYIU6/XrdPpWK/Xs3a7bfV6PYQJ0+nUyuVyuAY+BlvebaTPIn4ewuL4WLh4AXPCb4aTPieYdMvl0ubzuc1ms/Caz+fBhTaLEzur7p2HHEz4xWJh8/ncptOpjUYju7y8tMvLSxsMBjadTm25XJpZmuSw3o1Gw1qtlu3t7Vmz2bRarWb1ej0QCF9rtZq1Wi07ODiwTqdjtVothBOTycRWq5U9PDwEjwGkx4tDiNjnuMkzinkKsffx/eEeYp+3Iw0nfQ7ECP/w8GCTycQmk4lNp1N7eHgI1t4sTvBN32edM2bhseCMx2MbDod2fX1t/X7fRqNRID1IYWbBCjabTWu1Wra/v2/tdjsQv9FopMgLMjUaDWs2m2FxSJIk3Od0Oo2SnY/BC0Dss1RXXz2ETaTHuXB97OYjd+GIw0mfE3hQF4tFsHZ3d3d2d3dn9/f39vDwEEpnAD/wsQd6E/GzCA+X+uHhIUX6wWBg4/HYFotFeOiZfLDw+/v7tr+/b4eHh4H8zWbT6vW61Wo1q1arwV1WAidJEjwbXCPfKxKAWDQ41kcibpOl19AAn4m+F4Sv1+u2Wq2sVCqF616tVm9Nkfhc4aTPAU2egXCj0cgGg0GIpZlwAMe5ZusPNv8sds5YDoFJf3d3Z6PRKLXw4Jh4+OH+1ut1azab1m63A/E7nY61Wq0U8Tk+5/Mjf4Fwhuv1ZulwAvkEjrOziM+fgX5e+CzYM0CoAgsPr0S9B7f2cTjpcwLWFrE0E240GgXCxergTyG9mUWt/Hw+T10DXg8PDyGBx9DsdrVaTcX2+/v7gfic2ANBeaHDdSC0mU6nNpvN1nIIWGBiiwjuS8mpmXh9ry4uiOHr9XrwsJ5aPi0anPRboBaXk2iI6SeTSZT028gdc//13Ex6nHs2m9l0Og0vLARcPozdA743s1Tcvre3F9x8JP1KpVIqnEmSJCwquP/7+/uUhwMLXK/XQ3UA1YNYaVA/B00E8mfA+RLkKmq1Wqpq4mTPByf9DlA3FwQE6VQAkxW3b7L6sXPGzouvfG4QQMnPngLLZxELx0hqZrZcLq1arVqpVAoWHsTFYgBrj1i6VqulXP/FYhGssSb18D1idF5gmfR8b/g97tkJvzuc9DkRS6ypS6kPLP8t3OWsY8fIn3VOkImJzDE/k5+JhQWCE44gXExaC0ufJN/o++Gqm1kIdZDYQ8UAHoeWHDlseEpeA+Q3s9TCFftMPZbfDCd9DsQerG3Ckm3ZebV4WQ+q/j2fl+v2bA15EcDflEql4ClwDIwsP7LfeIH0+DqfzwNxcUz8HPE+PAdeaDQLr8m6TZ17WCiz8h36Xid7PjjpcyD2MMUsFstQN7nuMcJnnSN2fhXqcK4Bbq+WDyuVylq2HaTDi8t1fD+LxWItGRdTJTJJq9WqLRaL8BV/U6lUQijA5FdF4CbCb4ITfzuc9E9EVnyO72OluqzjaHIPiI290hIa6vZs7fl7HF8lwsjkI5uv4hz8jZKTLbzmFPB7hBJc48e1s7WHlefrU5d9W6zuFn53OOl3gD5g6sbye7a593oMPU4sA6+khnXnUh5bevydCls4y54lyondM2fz4dajegDSm1mqH0GvhReS2EKkll+vX+v6+pnHPldHGk76JyDWWJInft/0IGapyNiVZ+IzyVUsg+QbrC7ODReeM/VMenXhAW7wAdFRp8f5l8tl+HsOOZT0uB5dXGLlOr7/bUk7J3l+OOlzIo+l3hSr5yE8W3keesHxu1pafM/Ex/v5WjhD32w2bW9vz1qt1pqARiWzTHjU5iEIQs8By3JRegNRueIAKw93XvMLmvTT+8+y9rEQy5ENJ/2OyHIrNz1seR9EtWSaLGPrDgUeSmZaquMkGOJ3FuJwww3r5Jl0KNWh1+D+/j4l+4UoaT6fh3PEYnIQF4sJUK2mHz8+P3sBsRKk/n842fPDSb8DsuJvfvB2EYlkufRZ0luQnV9wsbUUB1eapbcgPBptIL2N6e0RSrD6bjgc2mAwsOFwaKPRKJAe74eVj1UbYu45/4xjevxOPQ54CtrJqN87NsNJvyO2WZa8VmcT4bMy9CA5f8XPEVezlUfpjNtqDw4OQo/83t5e0NvHpK+w8ujmGwwGdnt7a8PhMBXTm1loveVEnI7RUvIzeXX6jaryYvJi/lt879gOJ/0bQMtZeS19HsIz6ZXc0NzDtWb3l5tfEMs3m83QVdftdkNb7d7e3lonnJmlrDxaiIfDod3c3ISuwslkEhYatN2ardf+cR183FhMvo30sZCB4VY/P5z0T8CmctG2pNImwpul6/Ds1oPk3N3GcT3r6kEibqhh0h8cHKQabLJce5xvNBrZ7e1tsPJotEECr1arhXvTHnzu2FMSl0qloMnHAqflQn4/oGGBE343OOl3xKYknj7c/H6z7YSPaetBanbp8cLvWCOP84BwjUYjEP7o6CiQHq49k56vIebag/Acy/M9s46fx3ThPVxRiMmJsdjwYsCfDz7PrBKeEz4fnPQ7IGbNs76qBcpj4VWAw2U5EB8vnsvHLjPOr9Nyjo6O7OjoKOXax6w8rglhxf39vY1GIxsOh8Gt545CWGa28qzwQ4YeMl3cq4Ljff4s+HdYDLLKd458cNI/EUp0jWt3JTzXspn0GtNvIz2Pkmo0GtZut63b7QYrzwk8tfKcKdcJQXd3d2FYB7wQM0stGtABqMIv5v1syn2oToFJv8nSO/LBSf8GiMXvanF2IXysHq9WXnX23GbKyTCU6DqdzloCT2N5XrBipTrMAWTJrWbqYd1Z3cdJPP0c+DPj2B9QcQ7Ot6mt2ZEPTvo3RMyC8cOsD7JasNhkHCU8j9nWnnh1b3kiDkp0IDwEOcjY67x7s7TkFoIcqO/Us9DuPI7lucUWx419dqoE1Ok6XJHAZ+qW/s3gpH/LyLJsmn2ODcXgaTwsvtHpPLGHnglUr9fXrDwy9jExDq5JXfvJZGLj8ThUDLhdF+cD2aHnVw+CrTJfN3sJ+IqFAp6HJvvYtXfiPx1O+h0QKxvleejYwivZdcosCKfxu0ptlfCIqTGrXuvysPIxwvM1qs4e2XqO43mBQYVAB2EyQXXIR2yx4uPx7/Rz1u8du8NJvyNiWWZ9MPHAw2JtKsmxS68tq1yPB+nV2nKpDGOh2+12cOu73a7t7++H5hoeksH3xNqArFge9weS8mw9EJ8HYDLhWSoMopulu+v4uvAZxq5TG4pioYMjG076JyBG9pgFy+qUYxKA5DzPXuvy7Nbz8ZkwkNru7e0FwqNE1+l0Uq63SmP52jhjz/P0s4Q/OCd2yuGNMVRngGOw8s4sXe7jaT15y3BZyVJHHE76HRAjOrusSkogK1nHSToW28QEODxwEqRiwmt57vj42I6Pj+3g4CBsZpHVSYdJOLyBBgQ54/E4eBlm6Y49eBV7e3shQci75PLEXFh5s0eJMCv5VIbLpT62/tp37/X53eGkzwmNKWODLTjLzPGoJuvYoms5LpapZ5mtWVrzDxFOs9kMqrter2enp6d2dHQU6vJs5fU+cA7o7CG5RW0erj0r7rhFF+EDLD0+G+35h8qORT0x/T2TPSZ4ivU8OPnzw0mfA1mE52QcT6zJcp2zEnWI3fkF15jPwWTguBra+m63ax988IF98MEH1uv1QgIPnXRKeMTcIDw09tfX13ZzcxPdEBN5g/39/dCxB9JDfcfXzx6NDtHgHAhbcM2PaCgQs/ZO+vxw0u+AWF2d3XXWv5ul3XptnNFuOVh8ni+nNWozC1l6HoqB0tzJyYm9ePHCTk9Pg2vPQhwlPWfqYeH7/b71+327vb21+/v7sPAg3tZEIUqB2GYKrbY4NocusPBca8c9ZUmXVcSjiT+da+DYDid9TmgdW3e4gRXXxB7H8Zyg0754Xji0Fs+WkLeNgq6+2+1ar9ezk5MTOz09tZOTk2DlEcuDEMg7cKaeCX95eWn9fj/0zCOhhkWm1Wqlmnc6nY41m02rVCopOTCX/3Bv+Byxu6wmPhnq1nOrsG6F7cTfDU76HFDCZ02w0XFVPPmGCQ93WmP72Lx6s3TXHLL0sLZI2p2cnFiv17Pj4+NQplMrH0vc3d3d2c3NjV1dXdnFxYVdXl4G155dcngV3W43JAmxsCAhx7vmaoUCP+eqBhAjamxB4M+Bie8u/m5w0m8Bu8JMeN68Eoo1FqCAWGztYgsFD7rkBcNsfSqMWtvj4+Ng4Xu9XqqLDnV53ZFGO+hub2/t8vLSzs/P7fz83K6urmw4HIb7YR0/exTHx8fBypfL5UDq6XQa3PfYDH4ls7rw7CVlCXnUvVehkWMznPRbwPVm3qIaAyKR4eauN37g4fZrDZ5Vdjq6GtAHHORDqyyy9LDwSKphr3mue+O6sPjc39/bYDCwfr9vr1+/trOzMzs/Pw9Ze1wLznl4eBjOd3p6mrLyq9Uq3AtLb7WkmVV648/aLN1fH1sEeRdcL93tjlykL6LcEQ/RYrEIpazBYGA3Nzchuw2CwFXXbLsq7WLlOC33xZJbTPhOpxNcbBC+1+tZp9NZ65OHZVW13Xg8tsFgEFz6169f2/n5ud3c3NhwOAyhBgQ4nU7Hjo6O7PT01F68eBHO12g0wtQbs/XNOrgDEPeU5Z7Hypu8YDC5Yxl8/j9zbEYu0hf9wxyPx3Z+fm6Xl5eBKP1+P4hXYLn1gdVaO8e3sY0ptD7Nyjcm/MnJSSqG73Q6wdWOWXjO0mMgBu4D98UlOmTZq9VqCCVwzpOTE+t2u2slutlslgollPCal+DWW1wrhx/4rLTfwSz/6HFHHO7eb8F8Prd+v28vX760i4uLYO2R3WaZrMawnJHn7ae09q4Ps2rbuUUWcXyv1wslM3Xp2cKz8AZ1eCU8PBbsPsudegcHByFRCMKzlQdRlbjs0sMaq1Yfbbhm6Tn7vDhyWLAt4+/Ih42kH4/Hax90EQB30szs5cuX9vnnn9vvf/97GwwGod2U582DvJx95z3l8BBrrMtkx1dYQexEw0k7uNeow+tU2xjh4c4Ph0O7vr62y8vLQPirqyu7vb0N9wOCYQGBrJerApivB7LO5/Nw/bzYcVMQ4m+QHl+544+rI1zNYNkxSn1czizas/k2sJH0t7e39vnnn9tvf/tbq9frqQkrzx0oLZ2dndnXX39td3d30a2jNNvM+7ixC8+EZ0KYpcdVYwAFq95gaV+8eBFi6tgUHBA+qwaPDD2HJ3d3d2GBKpVKQUrbbDZTJUEQHlUBWHk+Jy9u2pEH6W6r1Qp6fZ65z4sji5RYsqu7+Cj5i/Jsvim2WvrPPvvMPvvsMzMzazQaQWTxnIHkVJIk9uLFC/vwww+t0WiEh9tsXR6qVlxjdiZCLCkFV7derwdiwKVH1hylMtThQRxW28HCw52/ubmxy8vLVIb+6uoq7FDDs+sh4qnX62HB4YGavPedWdol1/30+Jio8+O+Wq1WyjtRwRAfy+xx+6tqtbomYtI+fSf+dmwkfZIkdn9/H/798PDwJ7+gdwEsHrm6urJKpWJ7e3upLjX+nrPP/BBmxexZCju48zwAA0IYkI9n1qN/na0tx+/9ft8uLi7s1atX9urVK3v9+rVdX1/bcDgMjTSw1iBorVazVqsVMvZo2uEtsDiWV7EStAe4XyxmKDViSy1YeTMLC2OsFZf/PyqVSio5mqVgdOJvxkbSl0ola7fb4d+NRmNNC/5cgQetXq+HeBeuN89zz1KTxeJ1TtRhcixvKglSYPgFXoeHhyFhx5tOqoWH6GY0Gtn19bWdn5/b119/bV999ZW9fv06Ja+dzWYpF5x78tvtdnTMlg7IwCLDYiWW3OJzwjG1rAiPCosjx/PwQHB9+KqNSaqPcMJvx9bsPVs9TtAUBbBkACvk2CXGQ8udYmaPnx+XrJjssKqHh4fhxUTvdDqpGFin33A8jYk3UNm9evXKvvrqKzs7O7Orq6uQiARJcF0gPaz8wcFBuA6uDDDhuVd+PB6vbYKB+0VCEGXF/f39sIAkSRKIi2Oyix+z9OxRQNLM+RMtfzrW4SW7LYAF5diTB0mA9MvlMrifbMHwfpCL3XgeXMkvblflGfU6+YbFLHDrobI7OzsLLv3FxUXYnUZ18ExOXBOuA734IDwvbkx4jNXCgoKuvEqlEsIVkB4qPiTvWJ6bJMmajsHscV87HSWWtaefW/vNcNJvgVoOWMRmsxncbMS4XF+OjZeCJUWSLpYd50k3vHe8NpdwxQCZenbrQXgk7ZjwbAWxGPEwTbx4MIaWAnnKDs/S4+k4cOvZ0iM3wkTmY2uPAID3YrHRSb3I+Dvpt8NJvwOQ2cZcOPSRc4MJbxltliYViIUkmVp3uPEg+6bJtWaWIiBKc8jUc/MMknZZI6yZ8LguuPWI41k4gzAC6r7RaBSUicja43PCAscJPCa5SndZjgugvReqP3gYeMHDYNI78bPhpM8BlcTCDeZ+dY6t2ZpyRhzJOk6SMSEQO4PssSGWbAmzCH9xcWHX19ehLKcDPjgfwYRHlYDLc+pVoFmHN7UE6RGbI0mJe8YL91cqlULIlNUhx/eMa8CiirwIkx7xPYueHHE46XNCW1uR4UbMbZaelGP2uNsMYniQnpNaHLfrzjNZ1j3WLcf98NwXwEMtzSwVw7MlBuG73W6wyLEOvclkYsPhMMzRGwwGYWIuyn9YTHDfHK4gE4/38j3GSppcwzf7RucPL6XZbIbZ/KyQdBd/M5z0W4CHkEtsrJaDG8zNJvg7/A3CARCA3Xiut3NWPsvCI7ut7bEXFxd2cXERpLWYesMPvw7iQNIOwh90z/H9YMHgvAEIj/3qY1Ye03l5PDbujwmf1VWIazVLT/vhBZW33FJL76TPhpM+B7iNky033OJWq5Wq3WcJb/Dwa8MJW/eYhY+1xyrhkbRDWU7r3FyLx571aJflEVu4F1QktBwIK8+txbDy8Gz4nnGfuskGJ+5YqYjFT0vDKnYql8shtmf3PjZ5yJGGkz4nOD7ndlcIajjpBZKBAPyVia5kjxGeM9k8pprltSD8zc3NmqvNXXuck4CFh54fLbpITDLhkalHHA+3HiO1eI4ePiN4MLFdb7QPgVuK8ffaUqvDSUqlUmpyEer3XrbbDif9DuAhEEx8uO0ckzMBeFfX2FBHroEDbN2V8DziCok7EB5uNpOdqw6tViuUCXkIBybnsmgmlqm/vb0NE4NQJmNZMj4X3ddOE5Cx0iZ/ZuwJwGPBZ2H2zViuRqMRynW4Fif9djjpd0SWjJabUZjgMaJnxeyAEh4yVxD+6uoqdMydn5/b9fV1ICHELvV63cws1RuPPARaZdGTzyIcM0vVwzlTD+vOW12ZWcimqyejkl0QkiW07I7DvV8sFqk2Wm69xWCNJEnWNvnkRcSRDSf9DtDYkzvj8FWTcjGy8/FwTK1Rc8IOIhgQ/vLyMkzx0U0pQHK+RohjUIdnMVCs+WU2m4VzguyI3+FNaL6AvRvcu9mjloArGzzzn5Nv3F5sZuF+8PlwVx1Ir7MG3cpvh5M+B7hpxiz9oMceeI3X2bIryVWFxu48byaJnWeurq6s3++HbjnE1eg751ZWHsKhDTzIrLO4COfFXnY4J/rutQTICxt/BmyZMUbMzFLnYAvNY7EQPiExyBN5tF9fFZBMeCd+Npz0W8APNA+5iJGas/fqwptZiuB4SLnvnnvJebtolMcwkJNJyL3r8Dy4q40Jz+OxtW8ABIU7f319ndreihV3Zo/k5HAHHo3Zo8eggza4V54ba1TBiDAFnxsPz8A16EATRz5sJT0PiqjVaoVsrUU8zCq82Hiq2CQXHIf77eGKxubho/yE5Bm72DpyG3V4LEKbyM7dekiwmaUHZ/LgjX6/n1pg+HwaQvALiwimCPPnExsMqpLb2P8DVzC4Vs+eEqBemWMdPkQjB1i8Al06jw9jt5xdUsSpsTide9BZR44X4mc0tECEgiw1Z7xZGoy4Heo6nqPHQzC4lRWkR+0fNXge8a0NRHghb4AFkJNt+Ax0TiATl8U42njDZTodTMJk56oKexuOOHYaotFsNlOSzueKcrkcHtyPPvrIfvCDHwS1GnrcWUM+n8/XBlpoPMoJLGTisWEGLDgUZuhP19ZRVtjx3DlultEhlpum7GgDDdfhh8NhaqY/3HQOb1g6jHvF54ZQAAudJtqYqKxvMHtcKNit56y8kp09Du1XcKxjI+lbrZb9/Oc/t5/85CdhNS9SgmS5XIa4GSo6HuMMVxYeED/kOuSC6+yaFUcZDESHJ6BJKrPHHANn5UF29kbgzvPUWe6H50k72PwCL87Sc0mN8xtciwdpQWge+801eTYYXJPHv/FsqRBHk3SsQUDplHUBbuk3YyPpu92u/exnP7NPPvnk27qedwYgyB//+Ef74osvbDgchngWwAMOl7ZWq9nDw0PK8iFBhsm0sKaIl7ElNEtJs/a1wwMNXTtq7titFvvZ8Uw7Lp9x2YvlvMPhMFwXd8yB8JysQ1WAx1hzuMDiGy6p4X5U52D2OCgUx4ntAMTlTS7tqcSZZxc64thq6YuOjz/+2KrVqr169SrMyuMda3hnVy5fYdHg5pjRaBSIri60jn3WB5xdaoy0AtmRc2DCw/JpnVvVfSy8QfMM5w1iU3/QQAQrrzr9WEmOvQVoAlCag9cBT5JDD1Xt4bNlRSReTvp88JLdFpTLZWu329br9YIFxCYgrCzjklPMrVeLiuQcBlxwkouPw/PrkJ3X/ejZpWcLrzPtePML7ZbTkdi4Bk7WgfDc9w/rjHuFV8MhCkiLEIB79HF9ZukW3lj9nfMAPFAUY7Wd9PngG1hmgB+aer1unU7HqtWq3d/fhzgeXznZxaU6WHlYVWTj2Z3nhBf+lhtltLlHR2Nrwo67/bhqABIifgfZsUUXpLU87ooTbYjhmfQcx8Oqc/MLFhDU3JmQWX0HauW5UsGzAEB4zCaILXaOOHwDyy1A/RsPJZJf+Exg+THEAQ8tx/J46Uw3XShwPpANCSo84LyfHQ/QZGWd2aNlx1ceYskhBvIKkPEy4TmswMKDGJ7PxR6PEl43oGQBkWr0NUTQOj4vGqxHYNLr4FBHHO7ebwHc23q9HlxYHgaBRYCz3XCldU96JOpUb84Wj8tPOiYbo6lj8+PNHnXunP3WqbUcw6vwhonFVQLuL0AMz+fjpF2M8GgA4j571g1wOMSqOw4LcCwsgshrcP+A7gXgiMNJnwOqPOMHC5lwzVaDcIhrdZY7jqnuPBNeSY9ZejFVHejwtskAAA2oSURBVO9WwzE2Ex6kZ2WfWnjcG+6TyR4rQyJPoKOoWU/AWXYenYWRXJy8M7NU5YJFSKhcYDddHjmGtuCY/NmRhpN+C9gSc3Zek0Ww+rxhgwpMzB7JztJTrjlzt57OmePpu2aP+nZ8zwsRFiAW+7AACF4HKg8QG+H6QFb8W3XwIDiHKuxlaE0fOQmeCYjjQiAUi8VVgINRZbEdc7xGnw9O+pzgphptNolNvdG/5Vp5rPbOcS5Ir6O2uIMNQyqXy+UaKdkCI4/As+RY3QcycdKOdfTsTXDIwCGLWniuw/NoMZ76y9ta8Q43/Dnq5B/1fLhTkHMDbuU3w0mfA+wy6vQcbTjhuJRLTdoJpvJRHCs2jIJdeWyxhUETGmpwJxs38qgOQMMJ3acvpuDjYyNpxxaeFxEdJ4ZcBG+gwYvXavXNeG2dKsSLD8fzeOk+947tcNLvACZ8zB2PZau5rMU941mE5550PPCwiGbp6oFO3uEWXVhQ/IzjY/UsWEOvakImNFcCVCqM+4p1++GFWYI8eBMS5sVisTaAhO9fdQLcT8ALn1v57XDS74CYpWc3XEUty+UyWDQlnXoIsFbal85tu9gckr0ILmtp37kuQLFr5ix6LDOPewJBOWnHWXp2wbknAJN64I6DqLDy/P1kMklNITJ71AtwzwOLgzx5tzuc9DnBloTjX1hKHSEF0uOhhmuvybJYVYC9A65bay86D5DgjDnOowNA2EpqFh3v4WEXPPFGQwYmvLrfIPzJyUnQFGCePqw8jsmJPM5lcCYfpOfGmlgMX0QR2VPgpN8Rau3ZxYfyjEnP9WaAQwS4rlyn13FQIJgOlFSrrqU/HBPbaqECgAw6NPoYCGJmKY9C+wd4P3gOZbjNFxtoYMru8fFx2JQTsbzZ4/w7JB5hwXluHhYHlgKrzFZ765342+Gk3wFq7TUu58EQ5XJ5TVkW6wNXlxRExt8hhlbhizbngPDs7nJ8zWUuZNCR+YaHwcMqkFGPeRq8iGFRYcFMt9sNQzxQT9cdfuFFLJfLlOveaDRCrgC/xzn43kB29nZ8ZFY+OOl3gFoRLSlxT7iWnTSZx8fjUpW2v4IAbOVRX2fywXuA5xDTp+v+eVzqgmeBxJomBnWhwb2BsCijIXnH8lg+F+6RlY1aqmw0GinBEO6PqxScsNSF1a39Zjjpd4Q+VEr8mKvJf6NJPRyDZ+nFJs6wRcvyGljUA1ce8l2d8Ye6P7vb7DJra6v29rNij8+Hc0E0g/NoXz+GX7LgSUuHiPsBLRvy/AG9Tv58HWk46XNCrUfMmqjbjkWArTgn9VilB3ACL2t4BH7P51ExDFx6fiF5x4k7vS525dnCc/wOII6Ha88yYS2paRye9bmxx8JVELNvNAr4PXQCWfJfRzac9DuArXTMleTSkRIesayZrVlrjUVjlhxjpZj4/G/uhOM94UH0WE2b6/uaMIz1snMlgGN5hBG85XaM6Ly48LHVi+DPgZOh/FnVarWgNmTSa6nSsQ4n/Y7gmngsTmeCs9XXOrIuGuqKsgQW7j/Irso+riDwttg6TcbsMWvO2XnOH6johrUFcOdxXvYsWOCjOn3WL/Dnx+EDv3g+HicQzSyEOeVy2fb29tbammP/J440nPQ7IBaXZyX3QBImK+JmPPxMPP5bXgCQHGSrDLA7jFiYxSucOEOykK8D98Kk5zgZ58KiYmYpAoP0XErjMAHuuNmjdgG/1zIglwJj7ciI7UulUhg8imEk7t7vBif9jtDsu1prttD6Hs7u4/0xLyHLO1BwaU519LgGJbuWCZWkIBtLa2HhOeHIWXcsLrDOGA6K96NPgL0NlvQiLsd4cPwM+wJwxyK8KLj3ui+9W/ntcNLnRIzsAMjKsXwWYUulks1ms1QZDz/X42gtH6ThY/Pf8PtZRsslwdg1cezMpTAcH1ae8xJYbLjcByktexeYEsyk5/IgOgExApxbgXmDD27oAel988qnwUn/htDkHT+Y/Dt98dAIPpYOsuAstlma+FmIiVViYUiev+WkIasF+f3c189WHKTmIZq8IPDQUAz5QM+/jgXHeXGM2D54jnxw0j8BSmBtkDGzVPZe3fVYM44uHjHyq4XXjLiOmtqkzccx2KMwS5cP8W8OV8zSG3GqroDJzio7bn/F3+B9sak+2PhDR2jXarW1DUDY2/Ha/HY46XMill3X+jL/DlaJLTM/mBCnxFx8kEPr1VnxOCf5VEHHG0aofBa5ANbqsxsegy4sDBbY8IgsiIb42BzTY08AvDhBx2o7LJZcQuQyIhZJJ/5mOOl3hFpsjbfxHrPHDSzNLEWQUqkUxlvFFHb64CrRVVCjZGfprrrB7KrHVHBMKJyPLTl/5YYfHBOaAuz2M51OU9UETuZhPDhm+PH2XiA8d/LhcwDBIdnVLa2c+JvhpN8BWYk5TqTxz9Wd5vIdvy8mHY3V42O/VxUdCK9dcWyZuaTIdXEcEz/HefC3PPBTwwc+Lg/35JmBXMNn0nMSj0twLMHFZ5ClR9CRWY5sOOmfALXG+D6WOdYsOyf6OOGnGgA+JltSfqB5og3rz3WzCBbBAMg5aBIMuQY+tw771I0o9Pq44xBYrVYp3QBvBIKMvRJeQxGEDDwdmLfh3haaOL6Bk35HZJW8+MUkzlM7Zlcd/8a5+MUWNSZpZWut8T6fC9UDHJcHU6pMl137mIqOj8mEx6KCv9XPBIM7UYvXtmElPLcJo32Xt/JS6a9b+2w46d8Q7GZr3B7LrG/qwlPFHSNLsKPutdb6eTHQkIEXGXgcDE7YqTvPx9EKhnpArMTjch0r71RVh2PAwqOJ6PDwMIzgAul1LoATfjOc9E+EWvesZo8Y6VW3r4TX42ABiZWmOOkGxR8ScgxYW/YGYu69LmJM/CwFItx2rgDoJhlc0uRQgZOMWsmA6g8dfCA8JvJ0u93UsE32UhzZcNK/AWL1cRWu4H1Z7jaDFW96Hs3ma+KQ+9PhpiNZh++1N18JzuGCNsDgOnB+Lu9xay9PweHptpywjH12XFXg4/PGncfHx2Hu3vHxsR0eHqbGcLlrnw9O+h2h1pl/FnPN9b1mlrJ6QMx1Z2i/Odfz+VyczKvX68F9rlQqoYwHcJzOpTiec6+1fT6/ZtP5xRN24d7zzH7NV/BxkRtoNBq2v79vBwcHgfCnp6d2enqacu11lJZjM5z0T4A+rHhVq9WopVY5bFasz3kBzeKbPdan2XqrMIiTbboTzXQ6DSScTqepGB/nx0KA7LmWEnHPvPsObz7B/fuYfIv7QfIOi9NisQgKO7PHxRBxPJJ2mKzb6/Xs9PQ0WHnduDJvo1LR4aTfEUx2uK7oMees8yaoi8sLQMwz4MUli/hc/9ZkmXat4bonk0m4DngqsMpcq1f1G+blY1AHT+fhqTlc+kODjW4njbgdXgasPE/WPT4+DnH80dFRmMGnpTonez446XeAEh5uLZeqlKz8Vb/X8IBjWxXmqHuvUt1YmQ2WHoRHPbzZbNp4PE7tcjOdTlOda+x94Dxw5UF21Mox8Zan56j6juvycP+bzWZKbgsNA2rxh4eHa5N1sTU1PAoOIbxGnw9O+pzguBPxJiwhZt6ra6+lK/0eUPLzz7JCCSW8KvXYxWdLz22reHFPu+55Z2ZrFp73hudBmIjntaNOSb+/vx/EODrnvlKphJAhNlmXw4fYDD639NvhpN8CJR2sHerasPCxcl2Wck8tv4pnNl2DmaUe8lgTDoimgzF0F1t8z0MmVb2Hc3D8jsm6sO5q4bmbjq9Fww0egIG8AUQ4EOKwVWedvZYDs7wpxzqc9DnBybpGoxEe0KzhDeraxxaAXZC1eOgioko9WFmegQcLi68sjtGxU5qhh0gGROdhmDw0E9fECUocn0dk8YLJYRO35XLNnzvqYm3LTvjtcNLnAFtYAG5+jPD6d1lf9X1ALC+w7Zj691qD5y48zurrfDrtU+caPKw9rC6X5WKtrVqpYGWfbstllu7805dWK1Sr4ITPDyd9DuBh4gcMD+e2bP02gmf9LO81xRBLEMYktdyoo5tp4BwgM7ffKtG1gsCkj10HnydLzqs5i1g57k08pyKjtOWh9YFj/4+YTj5PeY7xNh/MPKTH92pxY1JbrR7gHJzA1ERiVl1cSa/XEfs3ny/mrm/ycJzwmYh+MG7pc2JT8u3bPHde6PVlkS32bz1vHjJmXWfWdcR+p+fcdFwn+tPhlr6AeNMFywn33sAtveMbOGmLDZcwORwFg5Pe4SgYnPQOR8HgpHc4CgYnvcNRMDjpHY6CwUnvcBQMTnqHo2Bw0jscBYOT3uEoGJz0DkfB4KR3OAoGJ73DUTA46R2OgsFJ73AUDE56h6NgcNI7HAWDk97hKBic9A5HweCkdzgKBie9w1EwOOkdjoLBSe9wFAxOeoejYHDSOxwFg5Pe4SgYnPQOR8HgpHc4CgYnvcNRMDjpHY6CwUnvcBQMTnqHo2Bw0jscBYOT3uEoGJz0DkfB4KR3OAoGJ73DUTA46R2OgsFJ73AUDE56h6NgcNI7HAWDk97hKBic9A5HweCkdzgKBie9w1EwOOkdjoLBSe9wFAxOeoejYHDSOxwFg5Pe4SgYnPQOR8HgpHc4Cobqlt+XvpWrcDgc3xrc0jscBYOT3uEoGJz0DkfB4KR3OAoGJ73DUTA46R2OguH/AJpGGkHBm/wCAAAAAElFTkSuQmCC\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 15\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 16\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 17\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 18\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO19OW9k6ZXljT3IIBkMLsmsQg0gDDBqdAloQ74gAY02Ru548gfjjdNW/4Nx5y+0U0B748iTNYZQQAuYcaY6y1FBpVzIIBkLY1/HyD4fzzvxvYgXrKwl+e4BAsxkRsRb8p3v3nvu8hXW67U5HI78oPhjn4DD4fhh4aR3OHIGJ73DkTM46R2OnMFJ73DkDOUd/+7S/keE9Xptb9++tT/84Q/25ZdfWrlctkqlYsvl8knfVygUbDQa2aeffmq//e1v7Re/+IXV6/UPfNaO7xGF2C93kd7xEWC9XluhULBCoWCr1cq+/vpr+/3vf2+1Ws3q9fqTSI/v63Q69vnnn9uvfvUrKxbdMXwOcNI/M6zXa/vLX/5if/7znz/Yd87ncxuNRlYoRA2H4yODL93PEOXy41r+IYhaq9Wc8M8ITvpnCHbDeQHY9zvw2XK57KR/RnD3/pnjqSLearUylGg/9TscP024pX+GWK1WP/YpOH7CcNI/Q7jK7tgGfzocjpzBSe9w5AxOeocjZ3DSOxw5g5Pe4cgZnPQOR87gpHc4cgYnvcORMzjpHY6cwUnvcOQMTvpnCK+9d2yDk/4ZwmvvHdvgT4fD8QHxv/7Pa/vt//zf9l//+V/tfjj7sU8nCu+ndzg+ENoPU/vHf/m/tlit7f+97dt549/sf/yXv/uxT2sDbukdjg+EyXxpi9XjAOmHyeJHPJt0OOkdjg+E/3B2aP/t1//RCgWzlyd1++9//59+7FOKwt17h+MD4p/+89/aP/7D31i1/NO1pz/dM3M4PlL8lAlv5qR3OHIHJ73DkTM46R2OnMFJ73DkDE56hyNncNI7HDmDk97hyBmc9A5HzuCkdzhyBie9w5EzOOkdjpzBSe9w5AxOeocjZ3DSOxw5g5Pe4cgZnPQOR87gpHc4cgYnvcORMzjpHY6cwUnvcOQMTnqHI2dw0jscOYOT3uHIGZz0zxDfx1bV6/V695scHwWc9I5UFAqF8BN/dnz8cNI7HDmDk/4ZgK1wuVy2YvHD/LciTJhOp7Zerz/Y9zp+XPj/4keM9Xptq9XKFouFrVYrG4/H9vr1axsOh+E9pVJp5/fAfedXpVKxer1uZmaXl5c2HA6t3+/barWy5XJpy+XS1uu1x/ofIXzX2ieCH3b98/cV/+px1uu1LRYLG4/HNp/P7fr62v74xz9at9u1ly9f2mg0suVyaYVCIUFQEBuWGwsDzrtYLFq5XLaTkxO7urqyzz//3Hq9nn377be2XC6tXC5bpVKxcrlspVIpEft/l2t66nfwZ1x72A0n/RMAAvELv9+F70oMPuZyubTZbGa9Xs/evXtnr169sq+++spGo5EdHx/ber22yWRiZmbL5TJ8R6lUCi8mbrFYDD9rtZq1Wi372c9+Zp999plVKhXrdrtWrVbt6OjIDg4OrFqthnBiH7HvQ3kHfEz9syMdTvo9wORerVaJly4AsQcv7WHU3ysp+LhM+Pl8buPx2Dqdjr1+/dq++eYbu7u7s+l0mrDmTGy47tVq1SqVitVqNatUKgniw7U/Ozuzq6srOzs7s8PDwxBCVCoVKxaL4Tz4u7NcU9qft92jtPtWLBYTr6d8T97gpN8TIDzi2sViYYvFwpbLZTQ/HrM+WdzRNOuOYy8WC5tOpzYYDKzdbtvd3Z31+32bTCYhxi8UClYul225XAZSgOgHBwd2eHho9Xo9EL9cLgfX/eDgwE5PT+3q6sqazabV63Url98/LvP53AqFQnD11dLHrlm9oW16QJrF5veD8OqxcLjhiMNJnxFKuvl8brPZLLzm83mw+GabD26aK8rv0ePpcZnw8/ncRqOR9ft9a7fb1m63rdfrBdKbvXfj1+t1IEK1WrVarWaHh4d2dHRkjUYjEL9er1u1Wk285+TkxE5PT+3k5MRqtZqZvQ8TptOpLRaLVMLzK3YPY6FR7B7hZ2xxKBQKViqVgteiekXafXU46TMhRvjpdGrj8djG47FNJhObzWa2WCwSQl5MFd9G/m3HxQuEn06nNhwOrdfrWbvdtvv7exuNRjafz8N3s0BXKpWsWq0Gwh8fH9vJyYk1Gg1rNBp2cHAQyA8v4PDwMPwbW3noA0pIvr5YnK8eCy9safeHP8vvZa8F58NuvhM+HU76jOD02Gw2s/F4bIPBwAaDgY1GI5tMJiGNZWYbD/6uV+x4MSs/n89tPp/bZDIJpO90OjYYDMI5mNnGww+LWKvVEsRuNpt2fHwcrP7BwUF4wfrDoq/X6+DRwONAWMOLHd6v56CEj2UUYvdFxVK49VjEcEyEKJ5G3A4nfQaweIZYejQa2cPDg/X7/QThVqtVQgVPs378921QK49FB6Tv9/s2HA6DW88kKpVK4XwQ70LYA/kPDw+D1WfLzgIf7gG8jNlsZtPp1KbTafBwoGfgWBpjc9pQLT3OlxeJ2GfwfhYboVvU6/XEovt9pk4/djjpMwLEg2s9Go1sMBjYw8ODPTw82HQ6DQ+dpr+yLAAxV5iPC+EQx4e3waEFW3nE89ti3HK5bNVqNZAfxIeFB2Gx4HBdwGg0CovNbDZLkJ6tLsf9uK40K5/mnrO3g2NAY6hWqxvFQm7pt8NJvwNqnWBpp9OpTSaTQDx2rZXsWRYAfE6hlh4EZwExFlZsi6nZynJszDG9puVAOFh6LHqj0SgseDg+QgKkBTWllybgaViA92LRwzlgQatUKmGxc7Jnh5N+D6iYxi+1tLCyeGj5dxwC4O9p1l6FPDNLxNH8PrNNcZDfw94CQgWcE6wz3PpKpZIQ6piwCHHG43Gw9iBeqVSy6XRqtVotKPxYQGLnhUUKYQQIjWvVFCmOUSqVnPBPhJM+I5SASsYP+dCpxU9TtWMPu7rPWIhAbngGiMM5HOGcd7lcDgsS8vz4Ho3tJ5OJzedzW6/XwcLj/uDPnE3Q68KfsTDyNbGnwefLC58Tfj846b8D0tJT+nt2b7PE9vz9LEhpzIvf88PPVpFdYqjeunDhOPheEJ7PuVwuh4KcWJiDvD2fC1+DmQVRURcurgSMfU69mZgm4NgPTvo9ECO2xuVmj0Larlg+tmCkiVggrb4fDz8sN36C/Ph3JrySnSvx9NzxPj4X1hRAengU7KbDBcdiwdqFXjMvWttaeGNkd5V+PzjpnwB+eGN131oPvovw+IySISZ24fdq0RGrq5VnS89qPlez4YVYHoTVc1DCQ7mfTqfBioPc8/k8cf3qsfBCifBB3XrGLsuuXpIjHU76jIilvdKsfky1T1Psd7n3LAKaJdNXXJILJZ9FOrxP42bE3UjX1Wq1QHpW0FUEhICHOH4ymdh0Og3HZCuPRYdbe5nk6tLzIsnWXgt5srj2Tv7tcNI/AUpatfQaw8es/a48vdmmldV8PXL2ENJihGcC4bggO1fhcTEOzl9TlTjWaDQKVYiw9hxGsJehWQe+h1Dq9T7yYqfCqf4/pImcjnQ46fdATKhTVxX/HnPvdaF4CuFBPrjX7GKz1cXioOfEDTVcd1+r1TaGYsDCc6/BcDi0wWBgw+EwEB8iXrlc3rDMTHp8J6cuOXug9yuWMdF7o/8v+jvHJpz0eyIWk+9S5JnwOrAiZqVipOHOPtTe4wXycVksVwfiu5GH56YbkF4HYrBugGIclB2j9Hg8Hod4Hp+LtRizgMgWW+P42H3i+gLWJ/j/g386dsNJ/0TsctNjVjym6G+z8uxac14c3X2j0ShUBCJtBm+ALSrieNSrNxoNOz4+tqOjIzs8PEy49hxLg/BoLur3+9btdq3X6wXSc34eMX1aNSAWIpAXP3GOi8UiUQ+giw/ez00127wlRxxO+j2xTbTT9+yK52PkiFWicU6cCc+kZyFPhS6Qnvvk0V0H0rNrr3E8+va73a51u91E+e18Pk+EBLhmLCDsOeD6EA5oCo8XHfZSOP2o3gE+H/uzIw4n/R7Yptarm64k35XGM0s+6LGcOGr9Oa4ej8dhQWABz+yxXqBUKlmtVrNGoxEIf3JyEp11x8fGMR8eHqzX61m320249izgod9er49Tf2kKPN6HBU6JyzG96gRu6feHk35PZCG+knnbe7QQRUU0uPYgPFt4de21tBbWE2r90dGRNZvNMA2n0WhYvV5PNMXg2Dyd5+HhIVj5h4eHhJXXIh4OJXQhgcVX0qNaD2k/1SNiYqDj6XDSZ4S6kGpdYu79rpg/Vnmm5bSI5dWtB/FBPh3XhfOAlcfAjFarZa1WK7TR6mBMFg4xnaff71uv10v07qOdlq18bF4d3PGYbrFNuIzdD4C7CmP/P47tcNJ/B7A1RcEJ/57/nBYKmFnIRwNKeuTHh8NheIHw6tZDSecinIODgzDv7uzszJrNZnDtVcDDsXkkF2YGgPBca89xOar81NIrkWNQ8RJIy9Gzp+CE3w9O+icgJhzFiL7NyjPSxDtYeU7Pwc3nnLzG8rwYwa0H4VutljWbTWs0GhtWXsU2pANVP0AKja9Xp+lqkY9ec8xzAlTh504/LCIxF5/Px5EO39ZqT2S15rECHCBWSqoFODqsA2RnCw/Sa/FKsfg4Turg4MCOj4+t1WrZ2dmZnZ6ebgh4aunhYbB3gTgepIeSXigUwnegdl976NMIH1P5Gdo4pC22u7wHRxxu6fdElnRRbEGIfT7WzMKDL5XwXIHHs+k4xoV1xdy44+PjYOUh4Cnh1cojnkemgAmvbjWsOzftcP1+Ws87Ez+W2eB7xJ/3HvrvDif9E6APIoitbmwa4ZX4bF2Z8LDsqtTzRFoV7mDlsaFFmpXXMVYsmLF4yIJhWjqQd8zhARwAW+hto722bVShpNffO7LDSZ8RaQ9XzFU3i89s1/fjBYvNoh2r9NzcAm9Ax0Sx1YVrD/Hu/Pw8KPYxt15jeXbtsdhgocGxoNKjlh+detVqNWHlQXgdbaVpS3gHyOtz30Ds/qbdb4/nd8NJ/wTEcs2x97D1j4l1nIvnGB6TZqGYa3pOLSaTB1tSHR8fW7PZtPPz86DYx8Q7gLMFWHTYtefcOafmMFATxEcsj2vFtfH2Xzhn/GSvgdOYsXvrqbrvDif9HmCSa245lkKKvVctH1x6Fu1g3TFiG6kyFu7YWprZRstss9m0s7MzOz8/3xDvtBAHrjcWHhTkcLktjovj8aYZeKGcl608VxTyfPxKpRLuFYufaLflAqM03cTxNDjp9wSTXHvGoWiD3Nqxpuk43TiCq+4gonFOHqRn7QCk4JZZFOGolddOOr4eneff7/fDgqOER8HPwcFBtD0X38uE522/UIEH8NbZ3FKr1X5myWaetOyAYzuc9HsgVjmmpGeXW3PN7MYj/84KPTfQpKXomBA4jlbdnZ2d2cXFhV1cXFir1bLj4+OE6w2SqIVHN12v1wsVeMgWmD1mBnAsdOpxt16x+DhEAwuJztHDArJarRIEZi1gW1FTTOl34meHkz4jtGKMY1RYb7PHCbZpfeks1qk6z4Id3HnNx6sIxnu6IYa/vLy0Fy9e2Pn5uTWbzbBrDavq+C5tn+12u3Z/f2+dTseGw6FNp9PEQoYKP2yFhW49fL/WGvCOPOr9aPYDf+bSXf47zkGbergq0LEbTvoMYHWbFWl+uNkF5geR03GxuJ3d+dFoFN4Db0D7480eH3ykyjAU4/z83C4uLuzq6souLy+DlQchQRR4IDgvJvzd3Z3d399br9ez4XC40S+P3D8adzh0MLNEey+3+0KAZGvO4IWMf5dW8AQPJ63K0ZEOJ31GsBAXi8k51lYrzxYPVh3KeGzeHOJfJjtbPuTGIaSdnJxYq9UKhL+6ukpYecTysXz8ZDJJEP729tZub2+t1+vZeDxOjMLiTj1u3EEszxtowgMC8TlEiDUG8StW78AqP6cbY5V8ju1w0mcAu+haHgurDOvGVoetvAp16ElnwnOLLBe0qHjFKj2Kby4vL+3y8tKurq7s4uLCTk9PQ4qOCc9xPHLxIHy73bZ2u23dbjfsdY9QBf34nAZstVrWaDSsUqkkLLuZJUIgVu3xb0CWAiZ+n6b30kqdHelw0u+AWngW3dhFV1XdzDYWCRBcC294M0qQBMcuFN7PnYN7jmo7DMSAS//ixQu7vLwMhTjHx8eJjSjNHuN4TMQB4W9vb+36+tqur6/t/v7eHh4eQiEQMgOYuAOREI07BwcHViwWwzlzcQ2un0ddcfytsbze81i1Ib94/JgTPjuc9DvAqSdYZgyIjG1TDeBB50GWPPyCy2ph4WFZ1RJyYwtSZSA8RLsXL14kSm21UIYtPBagXq8XCP/u3Ttrt9tBwMO5cHWfZgVg5c0sLFxcXMMZDRY3QVa21rjXmhlRi69CXloe35GOTKTPY30zHh7sx87K9u3trd3f31u32w0E4Y0izZK7wcQ65fB7aAO8KytbRa1x57Qc3HlYeLj0qJCD1VXCYzDG3d1dsPBq5ZFPh1eBct6Liws7Pz+3k5MTq9friUk3WACYuKrQ84ANbr/FefL58istxnfXfn9kIn2eb+h6vbbhcGhv3761m5sba7fbdnNzY51OxwaDQXCDmexmj8o456rZskOs47JaJQlbeI3h1aVnC6+EZ10BLv39/b3d3NzY9fW1tdvtBOGhI6Ckl3P/OBYEwkKhYNPpNJEOZNLztfDiheYcLb1VLUDDBnwf/9T/L8d2uHu/A4vFwu7u7uzVq1f29u1b6/f7wQUG4dkdj4l+moZL24mGCQ8yoNKOO+bgYscIj4YXs6S3wYU3d3d3dnNzE16YcIvrATFrtVoYwAGt4PT0NKQBocSvViubTCbh+rWTjusJsChx+MHny9kRnaHPJbo4Fn462bNjK+lHo1HqlJLnDK54+/rrr+3LL7+0V69e2f39fYjNYaljYOvKFp03ooi585qagkp/eHgYiPfixYuQltNGGtTVmz2KiIjfHx4erNPp2O3tbSA7K/Ww8PAsNJTAC2Oz4crzXnW8KQXCnUKhEMjNe+fx/nlMeiyIHPLgfsS2y8rS/ORIYivpu92u/elPf7KvvvoqWJA83FiQfrVa2evXr+2bb75JlKTGLJm6ttxQw2k4FuvwUzvOuD0WeXHE8C9fvgxpuVarZUdHR1av1xOE5xz8cDi0Xq+34c4jFz8cDsM1mVn4nlqtttGLz3Pyuccg1lOAe4iNKViERIUgrD3Omffp4/uMgiJsfa2LCxsmJ/9u7LT0X3zxhX3xxRdm9r6zCnnY5wzUj6/X65ADr1QqqW5rrJ5dU1Yxy26W3OYK/fDoYDs6OgqqOav0cOlRU88xPLfHYnR1u922d+/e2fX1td3c3Njt7W0YZQ3vAxYZP5Gig0vP03MRv0PL0B14mKx4L64JDTpYqLC4qvbAzUVYYHgB5YVUZwQ6tmMr6SFiAdPp9Hs/oZ8C+OHpdDrB8ml3V7lcDu4nwJZeLSFX1plZ4nt4IAWaWZCWQ2qOu+bYwuN7uJbg4eEhWPd3797Zmzdv7Pr62u7u7qzf74cMAq6Vt5nm6bk8I59bZ3EtWm3ImQwsiFjIQHgsHojRca/UYwCZ8b5isZjo2uNS5ZjFz7MAvQ1bSV8oFKzRaIS/12q1xEST5wyQoVqthgcLDzxU58ViEdxXjmu19ZbjW1aedfoMWlVR1w7X+uLiIpAdm07yMAycL2L4wWBgnU7Hbm5u7M2bN/bXv/7Vrq+vg0uPZh4+LxCUC39AeM776/F4uy3OSpg9tsyiuAeEhyaAhYrvF8jO7j1P3y2Xy4nOPRZG03L7jiR2qvds9XhkUl6AmnGUmsLNZ+tutllFpl1kABekgOxw5THEEmRHLA1XnnPwKoChzh0Kfbvdtrdv39q3334bCm/YwvMEG4QY3EGHZhqu7OMtqnA8bR7iFlqk5kB01gRgvWezWaImQlN2vKDOZjMrlUqJegfuSNQRYo44PGW3A2yxeYgEN35wXTs3jMAN5m4wkJ2VeXStMdlR5srbSYPs2iLL02sHg0Eounnz5k0gfK/XS8Tw2sDDm2Lw1lfcsIP7AUvMY7XQQKQiHoQ73iUXVp47E7lRh+N1dtNx/yqVSqKyUSfzOPG3w0mfESA0u+Q8lAIWiodIMPnxOd4jnl15Tothg0mQHfvN6dQbrbQbDAYhjucYHoTXbkCz+I62acIdNxAx4bEZBtctsFqPQRvQIWDlC4WCzefzjQWMy3E1J18oFBIbecLLgPin5dCOTTjpM4J72Ov1ekJEM7OEigzSc84dve9s+aDMw7KjVZUn0aRtSBErrUXzDKw7i3Y8584sqSnomC1Oz8Eqa9ORjtWCF4HQB1WEWNzYW+GFUcMkXB9fp1myjp+rBblL0V38bHDSZwC75Sy4xYph4N7ic5xzh9VjFxok4/3iMcCS95nTdl1tj0XzTIzw7NLz9cBjQfEPFh7uwwcpsWDw4Mx+v5/YuhqkwwIH0uOadJgHrHyays7XzC/cV+5U5JFcedOd9oWTPgM47uX4FA8xW0F2n3nYRaPRCIQH6eHGa9yOxSQ2Elot/Hg8DqW16IeHS69pObPHNCEX/4DwXNILN9zMwjVhyg72q8ccvcFgEDyJmEjJnhHuF8IlJTynRLXdlr2oUqm00d6sY8UccTjpdwAPH8fiIC83nYCIeOA4FICLe3x8nHgdHR1tkJ2te6xNVV16WHhU293d3YXSWhBey3x5v3oQHmlBbIgB4Y6LjDBlp9frhf3qOXwwsw2PiLMNPB4bYFecm3KwOHAeH6nA5XJppVIpxPVQ8VXMc8ThpM8APIgsTIG4bBE5BuVtorFQcHEKYnZ25XkPOCw2LGqxag7Cw8IjD9/tdqNpOdYXUGJ7enoauvV42g7n0PFCDT/2qgfp4VojPudmHW6sSdMkWPDEvUbRE66dKxnhIfAkIh415u79bjjpdyBWD8+xucb2+AyX03K9Oaw6yMAtppzaM4tvRMG9/TzxhgdgcPMMl8Ky54F6/qurqzCAA0U46J4DibhpB6Tv9/thWi679bG97XhmoIZCrLazlefCHG3IAXhyMBfpuJC3HU76DOD4nIkM4vNYKlb5Oa4FyZECwyvmyrNoxS26McKjph79/Tyymr9bx2yh0u/y8jKkCQ8PD0M6jQd/KuEHg4ENBoMNbwILoxLeLDlyG9cDkoLgnNrE79AXwNWNuD5U5HFlnlv63XDSZwAX1nCKC3E67x7D1ooJwDu66nw3s/iWWdxxxgIat8fe3NyEARhaDWdmG2IiFwHxPD2k54rFYiAjwggmPO9vx5NyOQWom2NqLwLv6hMrB8b8fAh2uEfaXMP19zyByC39djjpd4CrwUBkdpNBfhar+OHX8VCxeB3g+J07zpAT5zHVNzc3dnd3Z51OJxBeu+VUh+DR1agJQGkvhDv1KkB23tuOLXysS5CrFHFOLHYy6bl+AOcMsscWRV5A1FvwarxscNJnAB5GWE2o0rp5o8bnsVHNZvHNL9l91Qm6aJHtdDp2d3cXyI502WQyCbEvu9lw56HSQ6lHl14sFz+bzYJ173a7ITWHXDxEO7Nk3T4r77Dw8ATYynPYwC45W3v+Lq1PYILzvAK38NnhpN8BxMMcz8PKc6weE+XSyB7ruceL97njWBq7zsCV54IYjoe5PReaAwgf69KDBeb4HSPBOp1OsPI6AJQtMRZDtvAQANGwhGPgxYVMTNS0oSQ6m6BYLG5YeHzesR07Sc8CEzrM8gA8SLzJAxfTgPSaaosRHT/54Y3Nz9ONLLFVNSwtk5032OB+ACY7qv5QVqvbVeO8kN/mPDxIzyo9rGnMpceiY2bBpcf56VQdJTsWjtjiyC69tiqrO68LhiMOH6KxA8Vi0T799FP75JNP7JNPPrGLi4ugdLN1AzhXHxuhxZacN67UF3euxQpQ0F/O7atq2bW8VwdnQlTT0didTie49sgI8A4+LFYilICYx62x/Ge28Jyb50IczuPrGC7N7bMxwgKkNQ6OOPYaolGv11OHQT4nQMFer9f22Wef2c9//nN7+fJlULsx8x3iFx5EdrWV8KzCsxWHJUWnmm5XrYMiuHqN69sx2iom1PHe8TzbDi9OyyEHj/NCIwuENhYqOaThOB7E5tFXuH5umkFYwClGHqyh+XxOx3GXoIqIsSYexyO2kv7w8NB+97vf2S9/+ctg1fIilDAxyuVywj1GHbmW3yLO1MozHifFijiLZJg5D6LHNsFgK8tjsbU1l0dccQii3XI8Cx9ERwwf68zTijvWMNAfb5ac08ebeuh1VKvVaCyOhYg9A17w8H4eM4aXqv6OTWwl/enpqf3mN7+xX//61z/U+fxkAIK8ffvW3rx5E6a2cMEJWzZ8xsxCfTmKXEB4WHYo8Zg3jzgd/eg66JHd11KpFHLucOUxB58JD3deBTa2wlDq1evAuTBJucBHx1hzPh6LVcxTYYuOOgJcE3uQrHlwExOg1h3nozMOHHHstPR5B4px7u/vg0AFS6YpJBaVYpV0IDziZaji3P6qAzTZunOjDO86wzvPIH5XArDnAk2BhUKk/7RRhwmP4zPJtLVYa+J5sq3Z4xx8s/fk5zDDLLlngM7Kw2fMLJwP2nY1hHHSp8NTdjtQKpXs8PBwQ/RKqyzjXne0onK8zJtfMjFYsMJx2aKheQc5922E54ffLLlltqYCQXgdhGFmQbPgVCB3zsGD4M4/nV/H02ph1bnRRstrkU3QslrWMrSPgCfs8nU74vANLFPAlqJSqVij0bByuRzcXsS7KFWF4MWuKUgAFxovdqG1uMTs8cHmNlWepcf7yvFIbE7HccUfFiAmPDwOtMeitFY787iBht16Fe9wrSxEgryctgQh1RprI45W2plZWDC0FoEnDbml3w3fwHIHYOXMHh9MVKVxmyty2WyldHtqJgS8A47dmWja1YfxWlDmWayLkR2LCG+iicVHwwwsWlx4g+/i6j7tizd7rOLTNle+Ps5ocLUdrhP3lnUBLljiMEO9Hh64yfcgz8/sLrh7vwN48FerlVUqlcTI5nn/7ZAAAA35SURBVOVymRgQCcUbFpy3qE4Ttbj1lfPWOpoLVh4FQmzdOG5H7MzNLTzTjmN4HpjJLr1256GZCKIdsjhM+FibK+fj4ZLzJpYgKU/T4SpF9n743vDIcB4NzqR3pMNJvwNMRi4A4TgZ6jzPauPNGLgLTNVwQEmGghsmPacNdQ49LyQxlx6hBar6WFPArDpYXT4XLrHVGD5m4VV4w3eljc/CNeA703rt2QPCPQHxuWnIXfvdcNJnALfWag6eLRPSYByPshAFC1mtVjfScezSwwrCteeJOzyDHouO2WPpq7avYqQUXHsNMbSjjc+Frb7m+LGoqUvPSjz3LbDSDsLzhB4sPNqMZJbccotnGfBsQU5Nunu/HU76DOAHKfZQcZ04/xngbjQQn78HDyz33rNohj8jDGAlfrFYJApvOAcPK6xVfrqzLMfvIDx7NrgeWOBYWg6aAIcJCAmgsnNXIghvZuFcptNpuI7Yvcf9wCQiVu11JJcjHU76J0AtPzeMcE/4crkMuXKtZtxW0sqCGSw7Qgq27JPJJCHeca279qwj2wAPxMwSx8efeQKQWXLLLHbpMW+eR08r4eHGQ2HnkmBuzhmPx2Hxwr0xs3DNLCjy+DEdFe7WPRuc9BmhVl5TWiAoj2qCVebY1OwxB8/xMsgN0jH58D0g/WQy2XjAufiGi1q40AbnoGSHF8HH5Nl8WChYu9ANK9EAxDl9Hvutrji0ATRxwYPQxZNDDm1vZjGQG22c/NvhpN8T/GAxcarVaiK9BOuEmJ7jU42bdcoOHnSzx2YeLmbR1lIubtH2U1hKs0cLzGIhavPZPWZlHoTmugPOw/OmprimWq2WaO/FT97uGgsYvKLpdJoYKcaiYqFQCAsJ/3SX/mlw0j8BMfENxOc4OTbkQUkfi6EBLknl0lQsLuxFpPWVxwRCrqzTRhVO+4HQsMKoN+AqRM2hw53XmgKdwwfPAcfR6cAgvVlSEORFIWbV81hIti+c9E+EEr9arQaC87/FJrtogYrG0PjJE2a0RRWk1+IerdXnFlwW0pj0bC2Z8GzxY3vCcx5eB4aiVBikx3htnsWHMAL9CbDeCJPw7xxCpc0w4EXPib8dTvonQGN7tqaw9OjJ5/hYP2/2uBsuYmJ213mWHFtXrlZj8BQbWF5Wu1G2yqO+uLoOIQFPvGG3XttdmfBYWHgnXrx4NyAImjjGfD5PtMZWq9Xg2eB+cEcdp0x52IYPxcwOJ/0ToCo8i3p4qFer99s1MzE1B40Hmr9PS1F50o5aes31a+sqUmWsnute9zy4olAoJKbU6Ew7rj3AcXVUF1p+8eLiGRbwzN5be54vCCuP+B7nxWlF3COdLaidjqxlOJJw0meEuo5qUWLWX0mNh5WhIhTnxLnYh1tQ1aJpXToUbrbuIL1ugc0FMTg+6wdpY664IYiPxXv0waPgzS9wvkxm9pQQlvDCgp9cBakTdfn8HNvhpN8DTF6NIwG485o+4iaY2MPJ5NN201hogDy32aNbr7vvIGXG20Uz4WPVhbrY8MQbHJ/1CNYLdFtq3gAkVh7LhOaQhPUQvh/csqwaQ0w0dcThpN8TTNptsWRMaDJ7rDHf9mAq0eE1cHzLJOSiHpTtphGQyadkV6LzebI3wX/mhSa2qOixOA7f5rXE7gWHL7FBHbHvc2zCSb8HNCbnFyPNoqmHoLEnfy6NZGp1YUnZrdcNONgr4CIe/F0VehCfNQMecYWfulcfp9LMLLGg8PVp+MBWmhdSLjbCfUKPgdb8a++9Ez8dTvqMUNdeia45cp4Sg79nEZa4BBXfi6yAWjGeIgMRDO62lu9CmEMqjDMFPPce7jIvLoi3zSyxgLDijsXH7DHdiLmC6/V6I0ugG09qVkLHZXGJL/L2qBnQmN4Jvx1O+j2gD1NaQQyIhrgU7ji/X0tz8R1aUpoGbvPllJaOpIZVhUWPudzs2uvecpyKxPUAXEWI79NyWiwATHr8LjZvgON0JjSOC6+hVqt5PP9EOOkzQB8kFdbwEw+1iniaT8d79Xu4uIbr7tVTSOsDgHeBc+bJt1qbzhqDinjcGosFC+elhUY8+QZ9Afg7LHpMOOShoTxdKDZ0hEMEVPTFWpid8NngpP8AYNIxoXURYFLHqumUvDHy64IS0wNAwKxQrYLTZTyqmguNmGAIETiMQG0BC3ucItSOPd7RhwU6ncwLj0NTdFm8I8d7OOmfACazWlgWkkB8uNXcMQdxSpVrJrtO69F4H+DS3bQXC3d87vyT3X5NCwJYTPR7UYE4m82sXC7beDxOzNVLCzuwMy8Iz6RXQRHnzfdNF0sn/m446TMgZlX1YeOFAECKTb2AxWIRXOVYDj5m6dMeaCY8iARrywU9nM6KHYeHfKRdL1tb3pCD43wutplMJgmhj/fRg3cAVx4TftIGh/IixNkM1TFino8jCSf9ntC4Wi09W2Et0uGUU7FYjIpPWZV+TR2q8s0vHtsF8KLCrbVYFFhzYHJrt1/su7kTDqSvVCo2mUyCBqBiXsytZ9We7y/XB3Bfvc/IywYnfUZoDl2FNFbtdWEAYkIT3H1GLB3I38u/VxFOq+lYCOPjcz8/vr9cLie0CDMLxINKzgp/rIiHv7tSqSSGXXIOH7pDbPQWK/K4RyA7T8/hXgInfXY46fdEmqDG/572OXaRVb3nOgAsBJxTjx2PC1i0AYWHYGjhClJpXBkHb0GJic9qAxCHEqycp4l9+C5YbI7peWMM9kwAeCWVSiWQHQ09OvPe4/rdcNLvgawuN5NGi3r4vbHPxqr0lPC8YID4GmNryavG3io+YoHRwp20IR54aa0Cugu5KAjnwdfJi0issQjgvgL0EjSbTWu1WtZsNu34+Dhh6Z3wu+Gk/47QklxNZeGnKulMKv29QhV29RB4YTFLpq/Yu4idM7rdtGhHy2DZk+DPp50jfqdZAf4sV+Jp3TyEO0zjQQcfb8uNiTw8AlszG45NOOmfCH2AY4JW2nv4d0wwtfZmj8TB33lwpIJLf7kSEMfBAsBlxGxV9VzYg9ACGPZGuEeAewE0VYcFS1+6sQWP5MY0HmzLfX5+HjbsbDabiRHY7tpng5P+CVAyx0ivBFarnubqp4UBu4REkJ2zA5gjb2aJ4hmzxxQfLwoa36fl+WGFOXNRLBYTSj330HMaMDbswuwxZOHBoOgaxCSe8/PzxMadvC13WvuuYxNO+j0Rc791EeDf6cNtZhuuN9eps1Xn92u+nrvv+His5JfLZZvNZhtkmM1m4TMs9LFVZzc+VkAE8vOMe92njmf+mz3OxWNRD/+u6j+29cK8PWzLfXl5aefn52EEF7r7fO59djjp90AacdnS6nuZ9CpuQfTiv7M1NktuW62WNRaLw0rzoAm2uJPJJLFA4HOcc2fys+IPkptZYkoPevbTeur5GFiEdDHUhQSDQLA1N6w8Ynns2Btz7d3F3w4n/R5Ql5oLUDhmNtvMtZulT97J6hWA8Bw7x0gPpR0NLZPJJBFfs+AF8nP8z7E6wIU8sOy6zx5y5piHp7X2vNkntwPXarVEEQ7H8a1WKyHcMeF5mq+799nhpN8DHD+D7AcHB1YoFEIhiirp/FlFLJ0X+xwr49vKc2OkR5kr6tqHw6HV63UbjUZWrVZDqSxaWUFOdutxfCYpyI6ZeLptlbbSouWW5+fzAAxoEZgHwLPzIdrxXvR8HC/K2Q9O+owAsRBvMuF5d5uYhTdLNunwTyCmFfBx1cXXtJzZo3fBwyOZZLHGFuxJx4MmuZUV54Brxphr3h8eE285xlYrz1112j/P2QUtwNEturnsVjMD7tZng5N+B/hh0nHPUKy3ET6Wt8af+ee24/Nn2aJxA4pZUlBkd1p3sNVutlhFHBMR18lDN/mFeXzwAtLGVesMf1QM4r7p6G6e9weic5uuuvVZ72ne4aTPCDz8iGdh/dgV1lhcf6YRfl/ix77TLL0JhzesiLnX3MbK+XjWLnTUNci4bfKtLkLaDMT5eV5UQXDeditG9Fj3oRN+N5z0GRCzrLB+aRNYNa++7ee2Y+76TkWsIIgJx6Oo2PLGOuZUv+DONp3Fxzvr6EKktQw6CBPgtlx+qUXXn7gfTvhscNJnAD9Y3Hces/Bpn9U/x/6e9Tx2QYuCmHCcx4/tEINr4pBG95LjjSRj033SzkULmmKVh6pb6HfvCpccu1HY9sCamQ8d+3ekpdv43xT7WvIPidj5xkpg00iIc9xWH5AlN673KO3exUKYGMn53GJ/diQQvTFu6TNCH7Idi+UPch4x6HnFSnxjxIstYDGrylmIfa2snsu2a9tFaif60+GWPmfY9v+dpbYgy785fjKI/ic56R2O54so6b352OHIGZz0DkfO4KR3OHIGJ73DkTM46R2OnMFJ73DkDE56hyNncNI7HDmDk97hyBmc9A5HzuCkdzhyBie9w5EzOOkdjpzBSe9w5AxOeocjZ3DSOxw5g5Pe4cgZnPQOR87gpHc4cgYnvcORMzjpHY6cwUnvcOQMTnqHI2dw0jscOYOT3uHIGZz0DkfO4KR3OHIGJ73DkTM46R2OnMFJ73DkDE56hyNncNI7HDmDk97hyBmc9A5HzuCkdzhyBie9w5EzOOkdjpzBSe9w5AxOeocjZ3DSOxw5g5Pe4cgZnPQOR87gpHc4cgYnvcORMzjpHY6cwUnvcOQMTnqHI2dw0jscOYOT3uHIGZz0DkfO4KR3OHIGJ73DkTOUd/x74Qc5C4fD8YPBLb3DkTM46R2OnMFJ73DkDE56hyNncNI7HDmDk97hyBn+P/FALNPWF3ypAAAAAElFTkSuQmCC\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 19\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 20\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 21\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 22\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 23\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 24\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 25\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO19SW9jWZrdoURxFkWKFDXPiqGy0V7UvlENGF64tt713vDOm175H3jrv9CbArzzpna9MtBAN9xAZVZWZkwZ0anQRJESRVIkRQ2UF1nn6ryrR4lURldmxvsOQChCQb6B8c79pvN9N3Z7ewuDwRAdTPzUF2AwGP6yMNIbDBGDkd5giBiM9AZDxGCkNxgihvgj/26p/V8Qbm9vcXh4iH/8x3/EP//zPyMej2Nqago3NzdPOl4sFkO328XS0hJ++9vf4q/+6q+QSqU+8VUb/h0RC/vlY6Q3/AJwe3uLWCyGWCyGwWCAN2/e4Pe//z2SySRSqdSTSM/jNRoNfPHFF/ibv/kbTEyYY/g5wEj/meH29ha7u7v48OHDJzvm1dUVut0uYrFQw2H4hcGW7s8Q8fjdWv4piJpMJo3wnxGM9J8h1A3XBWDcY/Cz8XjcSP8Zwdz7zxxPTeINBgNQov3UYxh+njBL/xliMBj81Jdg+BnDSP8ZwrLshodgT4fBEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSP8ZwrT3hodgpP8MYdp7w0Owp8Ng+IT4P3/Yx2//1//Ff/2H/4fTzuVPfTmhsH56g+ETodbu4+//95e4Htzim8MWStlX+J//5T/81Jd1D2bpDYZPhIurG1wP7gZIty+uf8KrGQ4jvcHwibA6m8F/+80WYjFgIZ/Cf/+Pz37qSwqFufcGwyfE//jPv8Lf/6cXSMR/vvb053tlBsMvFD9nwgNGeoMhcjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSP8Z4t9jq+rb29vH32T4RcBIb3gUsVgMsVjsp74MwyeCkd5giBiM9J8B1ArH43FMTHza/9bLy0sMBoNPflzDTwP7X/wMwBj+4uIC+/v7OD8//yTH5WJSLpfR6/XQbrcB/BDfW4z/y4XtWvsZ4Pr6GldXV9jb28M//dM/4fDwEOl0GhcXF2OTk0SPxWJIJpNYXV3FX//1X6Pb7eL4+BiJRAJTU1OYnJy0OP8XCiP9Lxi0uNfX16jX63j9+jX+9Kc/4fT0FMlkEtfX17i+vg79LJNzk5OTmJiYCCTrJiYmMDExgWw2i/X1dWxubiKXy+Hy8hKdTge5XM6934j/y4OR/hPhL+Xu8jxK+F6vh+PjY3z33Xf4+PGjc8PDCEmix+NxJBIJJBIJJJNJTE1NObIDP+QGisUiNjc3sbKyglKphKmpKdzc3ODm5gaTk5MA4BaMH3s/w653FNjCMx6M9D8St7e3GAwGD8a5/kM5zkOqx+Q5bm9vHfkuLi5wenqK/f197O3todFooNfrOQs/OTnpYv6JiQlMTk4ikUggnU4jm80in88jk8kglUohkUg40qdSKVQqFTx//hwrKyuYmZlBKpXCxMQEbm5ucH197RYJDQnGvZ9Rvq9hUG/DvI7RYaT/ERgMBhgMBri+vsbNzY0jPxCMjX1SjEoS36rzfDc3N7i6ukK/30er1cLR0RHev3+Pvb09NJtNXF5e4ubmxp2DxCThM5kMCoUCisUiCoUC8vk80uk0pqamEI/HEY/HkcvlMD8/j/X1dczNzSGbzSIe/+Fxub6+dtn8x+4tFosF7kPvx18o/e9Kvx9/seC/x+NxTE5OWo5hDBjpnwgl3+XlJfr9Pq6vrwMPpL40bn6M/GHk4PmYtLu4uECn08Hp6Sl2d3exu7uLWq0WSN7p8ScmJhCPx5FMJpHL5VAoFFAqlTA7O4tsNot0Oo1kMolUKuUWhUqlgkqlgunpaSSTScRiMedhPERc3iu9BhJfvSLfOwr7rvSz/vdBwjM80WMYHoaR/glQwpN8vV7P1bNpVfkA6+uxBWAUwvf7fXQ6HTSbTdRqNezv7+P4+BjdbtdZ+ImJiXuEohVPJpNIp9PIZDIBF59/n5mZQbFYxOzsrHPrGcMzOcjFjn/nfTOE4Iv3qmEJPRaVC+t3xe9OCcz36z3Ra+H98rOGh2GkHxN8+K6urtDr9XB+fo5Wq4VOp4N+v4/b29vAA6gPvz6UuigA4dZeCa9excXFBdrtNs7OzlCv13F6eopOp4PLy0t3LH8xCUu8TU5OIplMIpvNolAoYGZmxr3y+TxyuRxSqRTi8biz8ldXV+h2u+h2u+h0Ou6+udgwhJiamkIikQiIhfR+lMRcJMMWC37n9C64UExOTiKdTiMWiwXOxeMZhsNIPwY0Y67Wttlsot1uO9LxwdV4M2wBCLP4/rk0b0Ar3+v10Ol00G63nZdxdXUFAM6NZ4bdb77RHATwQ5Y+m82iWCyiVCqhUChgenoa2WzWEUnd+n6/j/PzczQaDZycnODs7AzdbheXl5fu3KlUyr2SyaQ7Bs/v5z+4GGpOgYsivQNeMxfVRCIBAEgmk+73htFgpB8TtPJ061utFprNJjqdjiMeH1x9jUJ8IOjmh5FeX/ydWlk9rk94Eujy8hKXl5e4urpCLBZDKpVCPp93ib1MJhMgqxKVpD85OcHh4SHq9Tra7Tb6/T4mJiYwNTWFVCqFXC6HTCaDdDqNRCLhPA219kCQ8LTYFP/oNfOeb29vEY/H3XF1ATHijwYj/RjQB5Zudr/fd6/r6+tA/Op/Vl+0whq/hmWsHzoWERYP6++VFLSYvF4AmJqacjF+Op1GKpVydXs9B++70+mg0WigVqvh+PgYrVbLeTmJRAKpVMp5C9ls1ukA1Nrz+lUzkEwm3XfM++Aiy9BmMBi4a2MuwTAejPRjwi+d+a4qEVabH+bKD/s3/3ckg3oP/LPvMRCaLSeJSHxWG5R0tLS08potVzEQcwqNRgOtVitg6dPpdMAl9xcRTcbF43G3IPB+9F40aXp1deVITsKbhR8fRvofAT9bDdzF1A+59/zMYxl9AAHCAncxOYnpZ7qVALoY+cIeFeyoW81jatad7yXpLy4ucH5+jna7jXa7jfPzcxcqJBKJQDKTVYSrq6t7mXV6IbFYLKB10HsPq2Lwc2GLreFxGOnHhNaSlfC0ZMwmk+yMT4cRPiyhF2at+bubm5t7xOR71LpqSYzE8EteftKNiTs9tr/gXF5eotvtOtIzkcjQhu9njE6PgcdVTE5OugViamoqYLnpXainEvby/28Mj8NI/wSQmEpmPtxq6dVyhpXudPFQsmssTZeef/atuibm/Lq5WmlabXWj0+k0pqenkcvlXGKM7rVfSvStPCsW3W4XvV4vsDgwu07iM/7W++B3wM8xxOCCRYuu96lkNwv/dBjpx4SvHKOVurm5CZA+jPBhFj7MvffPx2P7Lj6TiRcXF+j1euj3+y7uZbweJnONx+PIZDJOhKMyXN+1B+4I3+/30W630Wg0AqS/vLx0FptWXqsLKpPVhUi/N9b3men3y3WaQ6GHoPdlGB1G+ieChPW13/7vHiM9cCfUCYvn9c++7r7b7bqYutPp4OLiwll7lbpqNp9xdz6fdzLc6elpJ8LxFx8e5+rqKlCfbzQaTpjDUiXv0Sfp5eWls/JaU2e5kaRnll+/Dy5gfDG8CZMaG0aDkf4JCIvr4/G4c1sfqs2rJR1VoAPcWXcqAakRaLfbaLVa6Ha7rgznVxRIfM2uFwoFlMtlFItF5HK5gGvvawWurq7Q6XRwdnaGWq2GWq0WEOUwntdsv68z8NWFAFzHHr0PJT3/XUt2/mKm/xeG0WGkHxPDEnlUwfny22GE97P3YfV5/lmtO6W/LJfR1aalp3uvbrQuMrTybKYpFArOtddr0Uw/BTnHx8c4ODhArVZzZToKZnx9goYivA4Sl/oAP/GnwhzVMqggCcC9LL8RfzwY6ceA7yarm67WybfkSvhRZLiaxfbj93a7jWaziZOTE5yenuL09BTn5+e4uLhwbnVYMwsXmkwmg2KxiEqlgnK57Dro/GoAAGflu90u6vU6Dg4OcHBwgJOTE2flVQ2oghu9VwDOwtNb0YVicnISvV4vENMzR8BrUAWhhgj63Rn5R4OR/olQ4tPKA3eyUnXvhy0E+ntCY3DfyjNrfnJygpOTE9TrdbRaLZyfnzvXPqyUxetNJBKuT35hYQGzs7PIZDL34mi18peXl2g2m6hWq9jb20O1WnWyW4YSSvhhuQ4Agfhcs/39fh9TU1O4uLgIJT0XPSYFfdLrT8PjMNI/AcMsfdjvldhaDlPLGhYPa/aatXFmzuv1Our1OhqNBtrt9j23HkDA6tJ9TqfTKJfLWFpaQqVScW2zLDf63sb19TW63a6bzLO/vx+w8ppv0PvnoqeuOt+negK+X2W2/X7fJeqU9Ez6+eIis+7jw0g/JnxXUklOhJHer8uHufeqvlPXnh19bKWt1+s4OTlBs9l0wpiwGrZeXyKRwMzMDBYWFrC8vIxKpYJcLheI5QlN4DGW39vbQ61Wc41FfmWA962z91i2pBdEwuoQDnX7dUCIHpu/5zl9zb0RfzwY6X8EtL6uYpZhNfhRavN+Pd7vn6drz+y579aH9QCwLl8ul7G6uoqlpSUUi8XQMp2fwGs2mzg+PsbR0RFOT09d7sBP2qkGgKTnzD1ac8JPVOoCp4k+uvIMcfiZMPfeMDqM9E+APuQ+eYfJav3fDUvihcXz3W4XrVbLJe4ajQa63a6ry6v11OPwWhKJBAqFAlZXV7G+vo6FhQVMT08HhDA+eTh0s9FooFqtolarodvt3mt00XtgBl5fXEgeIqeGNSQ9E3baHMT70t56/c4Mo8FI/yOh7n4Y+YctAv7nCbW06tq3Wi00Gg2cnZ0F9O4PdZqxLj89PY35+XlsbGxgdXUVs7OzSKfT9+ryBK1ur9dzOQTmDtQ11/MwcZdMJt2LgzSHud9hCyC/Ay3P6cwA1vZH6Ww0hMNI/wmgD6yfkX+snORn633Caxvr2dlZQPqqYhX/engdyWQSxWIRq6ur2NjYwMLCghPjhHXoqcVlEo/juIa59cxZkOycmDM1NeUs9DCC+iVPfS9r9GEuvxH+6TDSfyKExeUPCW80aecn7pjJJuGbzabrW6f0VaWuw6w8S3SLi4vY3t7GysoKisUi0un0ULceuMslsFpwdnYWsPL+fbPLUAnvb6Tpd9DxGnXR8Mdk6dQgWvqHZhgYRoOR/hPDd+N9wgMIlJv03/wJu7TwjONbrZabh+er0vT8rI+nUinMzc1hfX0dGxsbmJ+fRzabfXAvOl7HxcWFCylardbQBh6dfKMtujruytfOE75kWUnPz+oCye8u7DoMo8NI/wT4+nL+7rHP8GcsFrs3LEKn3XLg5snJCWq1Gur1uovl1cqHnVfd+nw+j6WlJWxubmJpaQmFQsGNsw6z8uptdLtdNBoNnJ6eBnbMIWihWY/nCG2tCITtC6B7A/hCHn6OLrxafB2eYfhxMNKPCb/UpFZoGPHDPqOf1Xp8r9dDq9XCyckJjo6OcHR0hFqtFhi+6Y+DJkgkCnHm5uawsbGBjY0NlMtlZDKZock7v1TXarVcY02v13Pn1FichNcZ+hyNpfLZfr/vfvI4KltmW62Ozgoj9zDPxjAejPRPgE9an/g+yflnFdD4WnRN2p2enqJer+Pw8PDexNlhbjaAgFtfKpWwtrYWsPLU2A8jChNnnU4HJycnqFaraDQaAfUdEJTaptNp5HK5wJx8tfLs9edmILrdFn9q0xIXg7BeAL1fE+Q8HUb6MRAmKPEbXCgd9S2xWnRqyXUIBmP4ZrPpVHfHx8fOtWeNfFg9nuRJJpOYnp7G4uIitra2sL6+jnK57Ep0w+J4LkSszdPL4N54fk2eMTw3yuC8/FQqBQCBhYwDPkh6klwTejptKEwDoPfIz6ggyjA6jPRjQgmt1lotGC2dLgBahqOWnm2y7Ilnppyx9NnZGZrNplPeUZWmZOHPiYkJN79+YWEBW1tb2NnZweLiouukC6sm8J6o8W+326hWq9jd3UW1WkW32w0sahTh8FylUskN48jlcpicnHQeiU96vX6S3i/78ffcFdcXPGkOwJc/G0aDkX5MKOE1K00VGXA3j44PpLbH6u40zWbT1d9JeO6Ywy2jqLrzG2r8Ojct/Pz8PHZ2dvDixQusra2hVCoNjeV1AaNbX6/Xsbu7i48fPzrZLYeDAHDhw/T0NGZnZzE/P4/5+XnMzs4imUy6cIXz9Lhg6Zx9fj+8fn/2AL0BXaDCEn++8MkwGoz0Y8Kvp/OBZraZxNS58Up4tsfSmrNbTq06iaKDLv1qgVpHVd1tbW3h5cuX2N7eDshtlfB+noHTeE5OTrC7u4t3794Ftr3WbDt3vS2Xy1hZWcHKygrm5uaQy+Vwe3vrugHVq9HZfZTXqk5hWNehCnd4Df7WV8PifsNwGOnHgBKeD3O/33dNKHwor6+vnQTVb5rRUhwHYajS7jGyA8FyWSKRwPT0NCqVCra2tvDFF1/g+fPnWFlZCZTofDdY74Vx/N7eHt68eYMPHz6gWq2i1+u58zLDns1mMTc35xR+bN6ZmpoKLH46pZfhj/be0xPyRUz8u94rX/4GHw8JjAzDYaQfEeoK04px/rvWsXV2PK08E3UU2rD2TsLzGD7Z/VKgkoIKuFwuh4WFBWxubuLly5d4+fIl1tfXUSqVnBBHSaQCIV7b2dkZ9vf38ebNG7x58wZ7e3tuQ0669qzFk/Db29vY2NjA3Nyc2y6aAzonJiYCrbKagAxbvPxORR9+ht+39HyPYTQY6ceAEkU3r2RmXbPQdPW5OLBLjq2xJycnbpIth2D4DTSa/dekHYdITk9Pu6Tdy5cv8eLFC6yvrzt3W/X1wMOEf/36Nb755hu8f/8e9XrdxfIkYzqdRrFYxMrKCp49e4adnR0sLS1hZmYG8Xjcue/JZNLdO38XNs1HY3nV3mvS0+8eVAWgWfqnw0g/Ipi8062aGY9TvKIuKABXp9ZBlurOaynLnxoLBJtxNPalS7+wsIDt7W386le/wvPnz7G2tuYI79fk/SaWi4sLNJtNHBwc4NWrV/j666/x5s0bVKtVJwKiC0513/LyMra3t/Hs2TOXJEyn0wCAXq+Hi4uLQFijOgb/HnyLrYIcfyDIMK2+39xkGA0jkT7KjQ20PDc3N06aWq1Wsb+/j4ODA9eMAgQn5jCW1y65ZrPpXOButxuw7sOGYPC4fNg5zXZ+ft4Rnpn6sEGXvAdN2vku/ZdffolXr15hf3/f7UBLt15zBpubm3j27BnW19fd5B2O/h4MBq5CwLBGp+vQSmvy0d/6itfp79ijSVI/6WcYHyORPspf7mAwcFaxXq9jb28P79+/x8ePH934KMbz6qYy2dftdl2JjrV537rrOKkwaOZcCfjixQtHeLXw2uGmOgFejybt/vSnP+H169fY399Hs9lEv98PuPWpVAqzs7NYX1/Hzs4ONjY23OhsuvJXV1cBwvsyYY3JmYtgR542/3CxYC5Ad6rV1lsfUTZKT4G594/g8vIS1WoV7969w+7urnvV63W3Wytw92Drw8vMPl1f1qr9WPchsqu0VgmvFv4hwmvi8fz8HPV6HR8/fnQx/Nu3b3F0dIRWq+U8D524w6adra0tbPy5H1/bc3kOtfBhYiXNRaRSKWQyGaTTaUd84G5gBr83X3ZMj0tba7X8aBgND5KeaqyofaEqrHn79i3+5V/+xbm/fhxPK+THz/oA67RXP3YP+26VKLS2rMNvb2/jiy++cEm7crn8IOFZg2+1WqhWq/jw4QNevXqFV69e4cOHD4HFS9teJycnXdPO2tqaK8/p5hh+HK7yYvV+6L4nk0lkMhlMT0+7jTPZlQfceUeUJqughw08muDTBcAwOh4k/dnZGf71X/8V3377rRN4RGEBIOlvb2/x/fff482bNzg8PAz0s6vWnm49Sa87r6pijyR/yJ3X2JeWkdLa7e3tQFlOY3if8L47v7+/j7dv3+LVq1d4/fo1Pn786BYvlceqwq9QKLjWXA7g0Dn5wF3CTmW3DBGA+yO48/k8ZmZmMDMzE5AHc9Eh4Ul6TWrG4/FA157G/FE0Tk/Fo5b+d7/7HX73u98BAJLJZGCq6ecKJuJub2+RzWZdHZoNIxqrhklBldy6xfI41j2ZTLo95zj55sWLF3j27BlWVlYCFt5P2pHwdOd3d3ddhv7du3c4PDxEs9l0ZTltcAHurHylUsHa2hpWV1fd+fxdZTV8oHSYIh2GCACct1IoFDA7O4uZmRknD9YYnq495cfMLzBRqLv0qrYhrOJhCMeDpL+9vUWn03F/7/f7/+4X9HOAuouso9MF9bXvGstrBlrFKH4pjvD1877oplKpYHl5GTs7O04Ms7i46HamoRCI56Z3QcIfHx/jw4cP+Prrr/HVV1/h/fv3qFarAXdePRbt1CsUClheXsba2hoWFhaQz+cDC4z2IPB87XY7MECT3wuVfCR8qVRyC4g/E1+lzUp6Hq/X67nkKImv92INOI/jQdLHYjFks1n392QyGYj7ogA+2D451LLTqvH9WhP3VWhAkOyarGN5bHZ2FouLi1hfX8fm5iY2NzexvLyMcrl8by95zSNo40ytVsP79+/x1Vdf4csvv8Tbt29xfHyMbrcbOjKb18UZ+fPz84EZ+To9N+x8nKdH0gNwNfhMJuN2yS2Xyy4vEIvFAgM+w4Zu0HLf3t7eE0W1223XlORvgGEYjkez9/pFaiwbNfDh0/KRupG+ZHZYvZ2f88U2tISVSgXr6+suW768vIy5uTnnDmv8roRnXN3r9XB6eorvv/8eX3/9Nf7whz/gzZs3OD4+duQI68nnT07PXVpawurqKiqVCrLZbKBpx08Sttttt2f9+fm5qwAwjp+ZmcHc3BwqlQpKpZJrArq5ucH5+bnzoug1MKHHxUlzSZQ+sx1ZpwOn02lz70eAleyeAG0SUXdy2DgnfQi1eYSTZ7jd1OrqKjY3N7GxsYGVlRVXD89ms47sw8ZWM65uNpvY29vDt99+i6+++grv3r3D8fHxvYRd2P1w8aGXsbCw4Pa7C4vjqTZsNBqueYi6BeYlZmZmUC6XMT8/7+4nk8lgYmLCtQz7gh7+ZP6I3hYTjexUpOCp3W5jZmbGLU6Gh2GkHxOaWVdry9iTsWkY2VWCmslkkMvlMDc3h+XlZWz8eZYdY+hisejITld+WD+8DsA4OjrC27dvXdKuWq06bf9DhJ+YmHANNWyZLZfLyGazgYk7fuKu0Wjg+PjYzfHjPnTxeNx5L+VyGXNzcy48SSQSgVZZP2RQrb7W+/mZ8/Nz5+LzVSwWMTMz4+J6s/bDYaQfA4y/uWWT6sy1JOe3hqrYhVnsYrGIhYUFrK2tYX19Hevr6y5Jx/q1T/YwwtMidrtdF8d/8803ePfuHWq1WmAnnIfuKZVKYWZmxiXvFhcXHUE1X6GlwLOzMxwfH6Narbo5fpeXl4jFYkilUsjlcoFYniW/yclJV8b0Z/ZpK7HmRvQnG5hIeN0PgBUBw3DYtzMG2L9ONRktFrPHqrQDghNjleyVSgVLS0vOoi4sLLiau9bBHxoHFRbH7+7u4ttvv3W6AsbXw5KvJDyHcCwsLGB9fT2w9ZU2w2jijoQ/PDx0AzR7vR4Gg4G735mZGczOzroSXTabdQ06ftVDrymskUY3u4jFYi55SKt/fn4emLZrln44jPQjgq45M9EUlvhZZ20yYSKLFo/JrMXFRSwuLgZcXi3BKdn9h1ctvLbH7u7u4vXr105H3263743YUmibKgdj0Otg8k5Vd7zPXq/ndrI9ODjAwcEBarVawMpzZ52ZmRkUCgXMzMwgl8s5K8zFyr83P1fiLwhcTOlpnJ+fB170akyk8zCM9CNCJ82WSiUUCgW3Kyv75nXPNXoEMzMzzrrPz89jbm7OfZ6WnXu5q+ULs1RKeKrX2C339u1bfPPNN/j+++/RaDQCC5APJTzzCqwY6DbWFCnpAtNsNlGr1bC3t4e9vT0cHR252fiDwQCJRMLpDKi803n4vnRXhUHalKNVBm3gocXnWDHW7LmLr5H+cRjpRwQHSdBlZRaallndesbI+XwexWIR5XIZs7OzKBaLyOfzzs1VsodZNh9q4Xu9Hs7OznBwcIA3b97g66+/xnfffefi+DBNura40sKXSiU3CYcDOOjW050n4VutFur1Ovb397G7u4u9vT2cnJw4sQ8Jq/p6Et5PBlKBp/kGfj6RSAQ09vR6SH56VSS9KvSiXFYeFUb6EaBtptPT08jn8468jO+VvLTy1Jnn83ln1ZPJZGCkVpjYx8dD/fCvXr3CH//4R7x9+9aNrB5Wh+f5pqamAi79ixcvAoM0dYcaLjAk/MHBAfb29nBwcBBI3gFwVj6bzTp3Xuv7tOzaL6/NOZokVfmyNt0wptfGHL9Bx5cVG4Iw0o8Ivy2U1owxK2vEJDW3euKiwNKbxuxK9scIz0Qh94zniKs//vGPoQMwCI2PGaKoS7+9vY2dnR0sLy+7HnkAjozM0pPwBwcHODo6cuO+WEvXhKUmOrWDjpabo7GppmM5kZY+lUoFKgUqzvEXP5Jd98sz9/5hGOlHAIlDXby/u0u5XHYiFn0Pf9ILCHPjVWTjw9e3c7spTrzRARgkoPYGMEfAa2dGfX5+Hmtra86lX1hYcNn6WCzmEpMU3mjS7vj4OKC8A+7CGS523K6aIYJaXybhWHILa9Bhd+Ll5WWg/KYiHbX2/sANI/3DMNKPCC0lkUDMylMYwgdf578Ns+yE/4BqjVp3xWm3265jji2y79+/dy2/JI5eKwA3koqa/uXlZacL4Mz6fD4f2INO4/fDw0OXsKMAR7Pkuh0VF0MmOLlYqdBGt/DSwaAUN+mxfOGOvnQMufbZG+kfh5F+DGhdm5l5xuwqlY3rYGAAABTGSURBVB22A0uYVVe3VS27jts6OztzW0199913ePv2Lfb29lwDjfad+w08qulfWVlxdXjq4KkLoIVngpBzAD9+/OjKcjq5F8A9wtOz4UQdegsA3FBRltp0dJhWPaht8BWI2q2ooh3V6YcpDg33YaQfAf5gSt20kV1v+sAPS9D5BFeS6w62OlCTW1bv7u7i3/7t3/Dx40dUq1U3eluz1SQL3ex8Ph/YiYZKu1Kp5Kw7CcqW1mazGTifT3h6E7q7rJKe8Tc75AAE9glgSywXD712DXl8soeNyNLRY0b20fEo6VURNjU1FbnWWgBOK5/P5zE7O+tENaqP9914hZ+E8q05Y1Puc8fNLOlecwfZarXqdrDVOjzPSfc6n89jbm7OyXxXVlbudevRdaZFvrq6wvn5uavBc4GhS++fTzefIOE5646qvfPzc3dvWlOnO67JO10wVX/vk9239L4C0nT3j8OGaDyCRCLh+sqfPXuGra0tRyAdN+13vRFhMTqJoBtZ+ptZnpycBHbB0VhaM9T+4I25uTksLi46V355eRmVSuXeAsUSGrP0nU4Hp6enODw8xMePH7G/v4/j42O0Wq1Av7puFU3FIQnPY3Y6HWftSXS18EpSLlSDwQ8bZag2QHf88YeSaKwP4J6HZRiOsYZopFIpF3t9zuDMttvbW2xubuLXv/411tfXsbGxgdXVVZf80j3f+TACwZFNPtlZ82YZrFaruX3oT05OHMFVZebvWktry/bVTCbjBm9wiOXq6qrLynPfeFp31dLf3Nw4aa3O8yfhVfDCz3KRYZaex769vXUhABc1lciqNl4Tovp9sRmH9/1YvM6wiyVVnSRkCMeDpM9kMvi7v/s7/PrXv3Zlp6jETiTrYDBAOp127aGzs7OuJq8Wk9lnfeBIKh02cXp6imq1ioODA+zv7+Po6Aj1et257Zz7pvP49IHXZKJOyWUvPqfs0JXXerlelzbrtFotV5Y7PDx0E3I17vZlsqpXYLaejUfcnZfZeU3Y6U5ADAcYLvDPSnp/pLZC1YX0GOhxGIbjQdIXCgX87d/+LX7zm9/8pa7nZwNab+4uy2GR/tgo3WwyLLOsfee1Wg0HBwcuI87uNG0WeajspFn5TCaDYrGIxcVFbGxsYGdnB5ubm1haWnLtuf7gDb/kxdJcrVbD4eFhoHlmWEWAijslfDwed94MFze+fMLzeNo8o1uBcfFQ0U3Y2DFd/Ji4pDLS5uQ9jEctfdTB6S8XFxfuQdOMMrPtjEP5cPPB5ew4WtL9/X0cHh7i9PQ0EC+rgEWh3oOW4TjsYnNzE8+fP8fGnzeiYE+APyUXCA6fpEvPhYiE9+vwOuKbeQPKbOlF0NNhOU637/IJD/ywePnjwVVYpJY+rIeA1xSPx51IKkzjbwiHleweARtT9OFWYmuXl+5kQ4vHLHy1WsXx8TFOTk5czB62Uy3hq/ZUEETN/M7OTmBvOQ6w1D4AINioQ2Xf2dmZs/AMM9gt55fldI5ALpdzxFcRDl16br3N/nb1XoC78ufNzY3bB8/fF4DlQz+X4X83vCY296jmwDActoHlCKD7SaLzIeZWUaenpzg9PXUxLLPy3J660Wig0Wi42roOqBw2MRcIzq5j/F4ul52E9tmzZ9jY2MD8/LyL38Om5GoiUQdg7O3tYXd3FwcHB26+HQlP+Su9C8bw2jikCj5aeCbvfA8m7N78IRlcVFVlpwlS/U40p8EhHTrLzzActoHlI+DDqbG69tBTrlqtVp0V96e1cmKrZqTD8gB6PrrUfLjz+TxKpZJz6be2trCysuJmyA/b1oqEZzadFp5qO27VpfvyMX4n4VkhYEswCa8Ln+7Gqyq7sHBF6/w6igtAQEev1p+f5U/mFjhLn3P5rWT3OMy9HwF8iFT8oQ88VXP1et3NbFO3n5s3qPUKe5D1xY48utSlUsnV3zkpV617WNmQ2nfmFpTw7Jaj2o4aDJYBmRVPpVKuiYYlOrrn7AngIqdeTFgyUgU9KuFlGEFPSr0g38prqMPZBsViEblczpJ4I8JIPyLCynGM6UkoHcnM+F57xsOIrsdXC8j6N+fqlctlLC4uumSdP85Ku8/4d+YWqPA7Pj526r5areY2p2A/vBKRhOd1UDEHIODSc0YdCc/wxy+xMUTyuxD9kVysLPhegtbxOfGH34sONDEr/ziM9E8Arapm6XWog7+7Kj/DDLw/LVcFJtq3n8vl3Hguyn7pymsXG/CDW0zyaKmQeYVareZerBxQE0B3mVZUm2dU8ELJLpN2voX3t8ri/ZHw3JdeexUYJoSFPH48r94Hvxf2EfjKSMNwGOl/JGiNwlRjJLm+189ih2nYmTTLZrNuSg9Vdaxjd7tdAHd1bpInjPB80bIz5GAGXUtyfOl0H99z0H3rlPAql1XPhQsZh4RmMhlXXtPkqGoJ+H3xvtQL4tgyzhrUXgLD4zDSjwl1zfWhJkmmpqYcEfnwkzj8u5+o44txM+NoTqDR3V273a6Tu2rPOd1iJWar1XIvFcpoZxvHU+m5dWdakp06evYKqEzYd+nDlHLZbDbQhsydaNh+S4/JD3lUK6Bdjvl8HoVCIbBzr1n50WCkfwKUtD5hVKcej8fv7SwT1qHG2FnjZ7rZLJ0xQdbtdt3ntbKgAzfY1aa6ARW/cHGi9U2n007cov3wFPHwvCS89sP7dXgen9N0dJhoqVRyXX7U2LPfvt/v39s1iN8zcNfCSy8on8+7TUFUb2/EfxxG+jHgP4zqtjLLTsLT4usOsYxvabH82Fm9BZ0Aq1l/EkzHQjNb7qvcfFGMJgipYgsbYskOOdbttSOQsTwba8IsPAmvm3tUKhXXD8D9Anq9nmvXpppPZxcAuBcqqORWdwEyso8OI/2Y8BNvfAhzuZzbx01JryOeteRES65bZCnZdUw0x0LRYvN3qhDUODjsXFr+Y55Ap/TSwg8GA9f+quTnLjJalvMz7CqNZaKNZUYO72D8zZ77iYkJtw8fFz7eG3UD+l1r3kN1CYbRYaR/IvxuNxKKgyH8LjFC3XuSURtiaK0ZS+tMd21C4fv8mj+9CXohrLszBi4Wi4GpP6rTZxZdm2Ho1j8mvOF5KY0tlUpYWlpy47nm5+fdtN1Y7IehlolEwg3v0PCCCT4AgbwIQyK17lz4NONvVv9hGOmfCC3BaZlNZ72xTdTPavsSWb6f+QAdtEHCa90/rEFHvQ/q0nV/eG4iWSqV3CBPDtXQGJ7XyI45DsBg88yw8VQkI7f9qlQqWF1dxdraGpaXl1EqlZy2gK49E5KtVst17p2fn7thGvyOVKyk7cy6QNoGF6PDSD8mwtxoHQ7JEc6+Ok7jceCu1z5so0ZtOFFFH0mneQJegyb2eD06FJMxNevanPpDEqnlVtkuJ95oSDFMeMMuvHK5jIWFBSwtLbnNOVlLZxWC59QqBeN0ncWnCVANfZi01O9EJ/sYhsNIPwaU8GFNMtqG6j+kmnDT8p1/fBKacbz+VMJrnkBbTXUopm6aSdJTzafyXU0MkvC6V5xm/4dJa6nPZ/28Uqk4tZy24fJ6B4PBvUm6fDHm9xc2AIEqBT0g29lmPBjpnwBVi/n68GHv18x62KAMXzPv9+f7bjwQFPiwBKc773DaD9163S6aBNRzUm3X6/UCU3weksRq2VLr59ypNqzVV6FaB9Us6GAO/b5ZTWDooVoBc/FHg5F+TPiE18YQ/6HT9+mwCCVy2GdUjgoE43WGBPy9r3gj4dmI4ifs/A0k1Ksg4f0Y3s/QawOS1vuz2Symp6dd/TzsXAAC3orvtfCnahB4fm6SSd2/H37o4mgYDiP9mPCtjp89Vqgl1Zp6WOZd388/a2JOFxn+u29pKVrxs/MquFHZq7rzuutMt9t1FQK9Fm4hrZoDFRhRU09BkU4W0nBH43F/hxr9nvm9ahKUSkR/eImO1TI8DCP9E+C79n6Mrok1jfEfUoz5Vk7zAb4ene/1G3To2qvUVRtaVMfOhYTyVx1zRaUd425ODeK9aBmNll7JrptbqNxW5+KHWWsuAlqh8MMbZvx144ywkVyG4TDSj4GwRF6YC87fs/Tkl5b8Jh1Nxmmc7mf2/UVFtft0sSkH1q2luH31xcVFoP1UB2xQEdfpdJzV1EUFgFs0tPTIioV24Z2fn9/bG0/lsjwnW5LZG6BJQ98DYEMOr4saBs3eh3lbhvsw0o8J3x0Pa7wJs+j+e32BC0nO4+jfdTHQBUHbcTUJpmSjfl534CF0uKcKga6urpxUOJ1OA7hTxflzAVRYRPWeTtXpdDqBhB6beBhSNJtNt6EHRUC8Br7oWZH0ui21kX18GOmfCF+Oy9KT/t0nsMbAOg4KQIDg/Kwewy8HhnkHXGhIlrBrDoPmKFT6SrUh43cOBPFDGhKc8Tdd+1arhenpaae285V/3W43sLOPDuNQIZCey59GrP8X1nAzGoz0Y8B/uHwLz8QYH0jtlJuamnJJqGHtqHo8/6Uz5cIe7LBEoTbEaG5Ar5/n9LPlvluvCwsHd/A8BL0FJgXT6TTOzs4CEluN61kp8Lv3fMGNLoxq1TWRaf30o8NI/wT4BKVbDcDF9IPBILDPujbXJJPJUA27eg5hFl/JCQR34WE5kNZYX1otIHRx0cVJz8Fz8/hhPQJ+fZyhRDweR6fTQTKZRLvddiU8dfFp7Ul2Et7vTiSouKPnQV2CPwPA8DCM9GPiIUsP3JH+9vbWKcvCrDZ77XVMFHBXBx8Wg9O99QnPOJeuMX8OW1w01Egmk7i+vg7kBAA4z4UE9DenYJbdj6v1+MwT+KO36OJzxBiz8LpI8RpUF8Bcg1YqqAsw0o8GI/0T4LvGfMB9vb1vmRXqLvtlKQAB7TldXCbo9Pcsj7EMpi8tf4X11jMxR5KR/NSva9KM4h0tqzG+D2v+0UWC+QuKa5T0fKlLP2x0Nj0PHZelW3gZ6UeDkf6J8ON7tf6a4GLiigTjAkFysfkEuKvJEyxT+Q01qpenm6ykV+GLb4157ZOTkwFVHAnKMILnZ2bfF9NoItJXD8ZisVCt/s3NTWBB0Qy9yo7DwEWKe/hVKhXMz8+jXC5jenraJVENj8NI/yOgVkVVd/w7gHuk8IU22mSjRNGEGxcTX56qhNX99PzZ8X5CTBcNlQhfXFw4D4b/xkWD5Od1DlMi6vVSMsyfKqDRPISf1PSPp2273LRzfX0dKysrbhdhf9SWYTiM9D8CfOD5MGtSyyezWjOVwup71NINI5I+2Orih0lQw0ILn/isf/f7/XtdgbqoKNF5Lv+c9CD03P75/YVOrz1Mkuz36S8uLmJzcxMbGxtYXFx0gznMtR8dRvonQi2tElvLY/pg+5l1tcj+PuxKKr8mHybT1aQis/56DUz+EQ/JVf0+AV9yrF4KEPR2fDUhra8/1kqTkL6ykcfUGJ4WfmlpCVtbW3j27BnW1tYC47fMtR8dRvonQi2WZs+VKH7W27f2vkurL1pkEl9JoaIcfpb5g8nJSaez9z0C/7i+i67n5r3ptfHPwP1denxFoS9QUumv3kuYdVe1IQeBLC0tYXt7G8+fP8fm5ibm5+fvbXJhln40GOmfAJ8cfvusb+l9gQwQnJWnvwvLhAN302n8l19e01Fb7EDjAsCZ9ySe3yWopbcwovtQwmvpUod9aoJNk3c8vlpo/lmz9LTwGxsbePnyJZ49e4alpaXAttwWy48HI/0T4JNCLRwQtGZh5b1EIhEokanlV3kpP68kpwXVRUCtqHa4caglx1ZzEaCqjtUBveYw0mupT+9J6/FhG3WQ+MwfqMafSUOW9/QcGsPTpd/Z2cHW1lZg3h4FOUb68WCkfwLUDdVZ7LTUfqJLvQE/Rvaz65oI1GRYmDRXFXQAAsTS7aeazWZgC21Vv7GsByA0iegTXl1vavM5O59jtXU8Fj/H62JDjW7GQYFSLBZzFr5QKGBhYQFra2vY2trC2toa5ufnHeHp1hvhx4eRfkwoCfnQA3BNNGHJqTD32C/bhSW0gGD87lt8P5uv6jzq2lutlmtq0S2uOp2O653XGXx+ll7vmyTj0AxusMnRXJzUQ7GMej5ciHhekp+kB+AWUE7vXVpawurqKpaWltxwTR0KYoR/Goz0Y0AJT903AKRSqXvZ6GGf9f/82PmAu6y4LgD6O8JvlaWunYRvNpsB0tPa+jP1/U46lb/6c/i4XdXs7KxTx1FnT7dee/Y5NEMn3jCcofiGi4gO12TTjo7Btoz902CkHxN+y6mOvB5Waw4jvE/8sEXAz5CHKQD5ew0jfOIXCgU3GafZbLo4n22stLb+4Ap17Rm3cw5esVh0ZOdoLiWmJu/8Of5++yxdew4Cyefzgc0utaHG924M4yM2LDP7Z9hkAg9awx51iINP0LCfYZ8Z9rthn9GFR0uJOhmHc/Do2queXltyNRGpk3kYu+vEW7rzTDCG1eTDtArUNQDBDSr58o85TPBjGIrQL8pI/wT4JbtHvsORLfo4CPuMnyfQUqI/HWfYzjlq4UlEHbzJF0dzMXb3ielfjyYt9RVWwtTjqR7ByD42jPSfGo+R/Sn4sQ92mPBFE3O+UEg1+0p4AIEsvc4E0JLhqBbYLwGGiX2GvQxPhpE+yhjmBYSp8ghf8+8nEfmep15LGIzknxRGekMQw+SwisdCE8PPGkZ6gyFiCCW9FToNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgY4o/8e+wvchUGg+EvBrP0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFi+P/8QdzcSWrCKAAAAABJRU5ErkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 26\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 27\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 28\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 29\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO19OXNjaZbdAYmNAIidJLhvmZXZPREyJsYYZ6InQiFD7cobXyFPjiz9A7n6C3I6Qp6c8caSMxOhjuia6q7MysyqrGJyBQGCBEAABBfIqDkfz/v4QBLM7K6qfPdEIMhiksAD6p3vbufeGxuNRjAYDNHB1E99AQaD4S8LI73BEDEY6Q2GiMFIbzBEDEZ6gyFiiD/w75ba/wVhNBrh4OAA//RP/4R/+Zd/QTweRyKRwPX19ZOeLxaLodfrYWlpCb/97W/xV3/1V0in05/4qg1/RsTCfvgQ6Q2/AIxGI8RiMcRiMdzc3ODNmzf4x3/8R6RSKaTT6SeRns/XarXw61//Gn/3d3+HqSlzDD8HGOk/M4xGI+zs7OD9+/ef7DkvLy/R6/UQi4UaDsMvDHZ0f4aIx2/P8k9B1FQqZYT/jGCk/wyhbrgeAJM+B/82Ho8b6T8jmHv/meOpSbybmxtQov3U5zD8PGGW/jPEzc3NT30Jhp8xjPSfISzLbrgPdncYDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPSfIUx7b7gPRvrPEKa9N9wHuzsMhk+I//OHPfz2f/5f/Of/9f9wcj78qS8nFNZPbzB8Ihx3LvDf/veXuLoZ4euDNirZ1/gf/+nf/dSXdQdm6Q2GT4TB5TWubm4HSHcGVz/h1YyHkd5g+ERYLWfwX36zhVgMqOXT+K///vlPfUmhMPfeYPiE+O//8Vf4b//hBZLxn689/flemcHwC8XPmfCAkd5giByM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNJ/hvhzrKoejUYP/5LhFwEjveFBxGIxxGKxn/oyDJ8IRnqDIWIw0n8GUCscj8cxNfVp/7deXFzg5ubGrP1nAiP9ZwDG8IPBAHt7e+h2u5/keUnyubk5XFxcoNfruX+zGP+XC9ta+xng+voag8EAu7u7+Od//mccHR0hm82i1+s9iZwkezKZxMbGBv7mb/4G19fXaLVaSKVSfxZvwvCXg5H+F4zRaITRaISrqys0m028efMGX3/9NVqtFpLJJIbDIS4vL+99DibppqamAt9PT09jdnYWGxsb2N7eRqFQwM3NDS4uLtzv8u8NvywY6T8R/pLuLl9rNBo5K99oNLCzs4ODgwN0u12MRiNH4rBrI7Gnp6cRj8cRj8eRSCTcfyeTSczNzWFzcxMrKyuoVCpIJpMYjUa4ubm5Y+nvI/+f+7Oxg2cyGOk/ErS2Nzc3d25u/2Z8ys2pz6lkv7m5wfX1NYbDIU5PT3F0dITDw0O0Wi2cn5/j6uoq8Jp6CJDsiUQC6XQaMzMzyGQySKfTSKVSSCaTyGazqNVqePbsGRYXF5HP55FKpTA9Pe1en8837mDxf6bXH/bvk35G+vpWVnw8jPQfgZubG0c+Pgh1f31X+DE3p092ffC1hsMhzs/PcXh4iJ2dHezu7uLs7AxXV1fu76emphxBp6am3INkz+fzyOfzyOVyyOVymJmZQTqdRj6fx+LiIlZXV1EqlZBOpzE9Pe3e96Tvw38PYYfkuM8r7Lk0DOHDSP84GOmfCBL+8vISw+HQxc96Q4ZZosdYpTCLqAfM1dUVhsMh+v0+Tk9Psbe3h93dXTSbTQwGA/d3GqMDcIRPJpNIp9OYnZ1FoVBAuVxGoVBANpt1j2KxiMXFRczNzSGbzSIej7v37ZNWyRz2XpTo/sO/1nGfkf8a9FiSySRSqZRZ+wlgpH8CeMMOh0MMBgP0ej30+31cXl66eDfsEXYYhMG3iurOX11d4fLyEoPBAJ1OB81mEwcHB2g0Guh2u3fcbrWaahkTiQRSqRQymQwymQxmZ2fdI5/Po1KpYG5uDvl8Hslk0rnw9GZ8D8e33D5h/UPL/xv9bGi19Tn0sCF4/fwbTTAaxsNIPyF445F43W4X7XYbvV4PFxcXAH68gVnWIslIfN7Q4zLgvvXUm/3q6spZ+V6vh3a7jVarhdPTU5yfn+P6+jrgxvN7JSOvgb8Tj8cdefL5PEqlEkqlEqrVKkqlEjKZzB0rf319HfBwhsPhnZBCPQz+LQlP0l9fXwf+htflE5ivyYODJJ+ZmUEsFkMikUAymQw9LAx3YaSfAEq+i4sLnJ+fo91uO9INh0MAcDdiPB4PxJz+ATDO4odZeZKGZOv3+87DuLi4cBaYRCZ5rq6u7hwuJC8JF4/HkU6nUSgUUKlUUKlUUCqVkM/nkU6nHen90KLX6+H8/Dzg5ZDsrASQ+CQuSX91deWuQ5OLrCQo6dU7GI1GLkQBfrT2PBAMj4ORfkKQ9HTrO50OOp0Ozs/PXU2c7jNvYN7M9xEfQCALzq9q6X3SqLUkcbTsdnNzg+np6UCCkc+tcXU8Hkcmk3HxfblcRj6fRyaTQTKZdMTloXN+fo5ut4vT01OcnZ2h2+06qa6W/JLJJOLxeIC8l5eXgZAAuD2oEolE4LDktephB/x4SM3MzCCZTIaGFob7YaSfAJo9p3s/GAxwcXGBwWDgrCrLWn7ySb/yd8Li78fewOrKk2x+DoG/Ny6LzoOC7n0+n8fs7Cyy2awjLRBMXA4GA7TbbTQaDZycnKDdbmMwGLgDhInCdDrtDqFYLBYa0zMUSiQS7jCgq87rJeHpTfA5zcI/DUb6CaFWV63lYxAWw49Luunr8XDgf19fX4/NGYTFs2F1cY2N0+k0crmcS+RlMhmkUikkEonA61L9xyTi6ekpGo0Gzs7O0O/3MRqNXKigtX9aey03ajii36tn4h8U9BIABNx9s/KTwUj/RGg5jDcryalufRgx/WTaQ6U8VcGRCJeXl6Fxc1h5zH8u4NalTqfTyGazzrqTqL61JWl90p+cnOD09NQlMROJhMsxkOTM/gNwsTyvi69Bj8N31X19glYNjPBPg5H+CVDCa/IJuCUTSe/H9mEHgJ/NDwNverrkKkbRJB8toCbKtCxGTE9PI5VKIZfLoVQqoVgsIp/Pu1hZm2poXelq9/t9tNttnJycOPd+OBwiFou5OJuvx+vmoehn7ekF0MKHCXfCSpj8uWFyGOknhG/hleT8t4cIfx/px1n66+tr9/v8mYqDLi4ucHFxEYh9fWvI52b2O5PJoFwuo1KpoFgsIpfL3YnDx1n5VqvlrHyn03H5jHQ6HUgqsmRIZaCftedhOT097bwXJiHp1dwn6tH/L4bHwUj/BCjxNTvPnz+G8Pe59+OUaGq5Ly8vcXFxgX6/j263i263i/PzcwwGAwyHw4DV5DXzKzX3xWIRc3NzqFarKBaLLluvVl6rB8PhEN1uFycnJ2g0Gmg2m2i1WhgMBgFrzvfNEIEE5yGl9fZEIgEgmMFXL0YTp3Tvp6en7wh7DI+Hkf4J8NVtaul9l/8hwt9Xsw/L+pMAHGrRbrfRbrfR6XScQChM8Uawhp7L5VCtVjE/P49yuYxcLhfoldeMP8na6/VwenqK4+Nj1Ot1NJtNdDqdQCltamrKEZTJN4IHB118/i7zFfqZ8VrpHWiZzwj/cTDST4AwWauS3Cf9fYRX1dlDrr1WDFgyOz8/x9nZmXOzz87OHOlJpLCYl659oVBAtVrF3Nycs/JqZUl6vu5gMMDZ2Rnq9ToODg5wfHyMdrvtlIAa/ys5+W/qnVBnwBwAgMABSu9A/44HCMuCvuTXyP94GOmfgLBEHiWwqi57iPAPWXnfwlPrT2FMs9l0Lnan08FgMHBNP5oh19dQK1+r1VCtVpHL5cbKWNWtPz4+xv7+Pg4ODtBsNp0ohwSlZfYPGz2weCix9VfFRRTnhJFeB4JofX5cqdMwHkb6J0Cts1p7/ltYpn4S114J71v4breLs7MzNJtNNBoNNBoNnJ6eotfrOdd5nHaAOvtCoYD5+XksLCygUCjca+Wvrq7Q7/fRarWwv7+PDx8+4OjoyNXmLy8vHWHV5dakI69HewdIYF5nPB5Hv993IYKSnn9D7+A+FZ4R/2EY6SeE3lR+zZ3/7tfm7yM+fz8MmqGn7LfdbqPZbOL4+BjHx8duaIYm8LTEphn76elpZ+WXlpYwPz+P2dnZUCuvybtOp4OjoyN8+PABe3t7aLVa6PV6gXhcCe/nOoBbMQ2tNi29ioQo3aWl51e69ldXV66fwLf0RvbHw0j/BOiN5lt6n9T3Wfgw0vtW3m+lbbVajvDNZjNgcf0ed4Kvz4z9ysoKlpaWUKlUnJVXnYCq7/r9Pk5OTlzP/vHxMTqdTqDJR1+PlQtO4PHLb3qQ8e+GwyGSySQGg0FAFKSCHh4a1BdMooQ0BGGkfyLCiM+f30fy+1x7X5CizT1M3NGlp1vPLjtVuoW52YlEAoVCAUtLS1hfX8fS0hIKhYKTyfqkJzEZy+/u7uLw8BBnZ2eB3AGtNHBbGUilUgHSa6efXiMPlng87jL+w+HQeQcq7tEknspx9f+F4XEw0n8klPj8bz/ev4/w+ndAsDynbaxUwDUaDefWd7tdR8BxohWWwrLZLBYWFrCxsYGNjQ1Uq1XXVOOrAX3Xvl6vY39/H41Gw83f8yWwSnhq7zlTTz8XPr/v0fD9apmP8TtJ78txTZH3NBjpPwJhopowK+4fAuOEOIQ2mbBvX5N3WqJTt94vY9HbSKfTKJfLWF9fx7Nnz7C8vByYe+dbeeB2lj6Hbh4fH6Pb7QY0APoZkPQkPB8AnDUf937DPAz9LBjPM0ygpTfSPw1G+k+IcQeAX4sfV2LSUps/IUdVcBrH+w0sCtbkc7kclpaWsL29jc3NTTf3zle/8RpUcsscApV3PGT89x02WZcjs9mtp+973IOgN6FqPJbvwkZtGR4PI/0ngt54993MPtSdVwtPt57JO63Jn5+fB0Q4vqvrW3nOr9/e3sbS0lJgnLWfsQduE4i9Xs811XAykHoUqlNIJpOYmZm506nHeD7s8wFwpxNRcxtq5Znt1z56098/DUb6j0BYa+dDFk1Bd1VjVdXUs32VJbqTkxN0u9072fqwOH5qasrV5JeXl7G9ve3GWc/MzNxJ3vnXRUEOZ/BRX6/WlR4MW3QzmYwjPQ8VklX7APj3qrdXbYMm/eh16EBOi+c/Dkb6JyKs9VMRRii1YL7qjdZVNfWtVssl7ujW0+L6DTWEkjGdTqNarWJ9fR0bGxuYn593bv04wvM5Ly4u3DWwdTYsY85SoI7P1rl6QHBMFgmruQ8dlUWrryTX9znuoDMr/3gY6Z8Adckfsjh+vBz2975Lzxj++PgYR0dHqNfrodn6sGSWb+VXVlawubmJWq2GQqEQcOvD3pe69qenpy6c0OQaCU+Fn87Q9628KvDoqmt4oJae32t93v+ctS1Xr8XweBjpJ4RPWL/8FPb7GqdqA824GP7k5AT1eh17e3uuuYXZ+vsSd5pFz2azmJubw+rqKlZXV1GtVp1b74cgPqkuLi7Q6XTQaDSc+k5dao3ldUsOh2myXZaei84SJPHVUyDZdSYfvQGf1GFVEcNkMNI/AUp0dTfH3YD+4aDtohyAoTH88fExDg8PcXBwgMPDw0ALK+vVPjR5l0wmUSwWsby8jPX1ddRqNSe3DavJE9pCe3JygqOjI5yenmI4HAZCElp5WvhSqRSYoEsrz4Ps/Pw8IBWmxBYIHiC0+PyM/BInX9snvBF/Mhjpn4gw4vPn+juarFPLzoQd1Xacn99sNlGv13F4eOhi+U6n45J3+prA7Q3PJFgqlUI+n8fCwgI2NzexurqKcrmMmZmZOzV5/71cX1/j4uIisBDz9PQ0cNDo65DwHMRBhR+AwHs7Pz9Hr9dzoYled5iLT7ltWPux37Y8rm/BMB5G+gkQZrH1wZtT3W/e3Exi+WTvdDquL14lthxF1e12nVvvJ8JoDUkG1uTn5+exsbGBzc1NLC4uBppqxr0veh3dbhf1eh27u7uo1+vodDqBef7MF2SzWZTLZSwsLGB+fh7VahX5fB7T09POjaeV53vgmHDq8ekdkfi66EItPSfl+KQP8wQMD8NI/wSo1dbH1NSU+6o3NX+XrjyXZJDsrMGr2k5XZWnmW8GEHF16xvGbm5v44osvsLa25qz8OEWcquDOz8/RaDTw4cMH/PDDD2g0Gm6JBV+PM/JLpRJqtRpWVlawvLyMcrnsts0o6TnKq9/vB+r8Ks/1B2jwPYX1L+jhENb/b3gYRvoJ4RNeO8B8HT3dehJBV2GR7LTszWYTp6enbhpNv98PTIvxE4aq+KPlJeFfvHiBZ8+ejY3l/Thee+Y/fPiA7777zq295igsknBmZgalUsk17qyurmJhYQG5XA6xWAz9fh8AnJqQsTwPAv18eCgq8XkYaMxPsmv8r9beSD8ZjPQTIKzExodaeB4KwO0eNrq6Z2dnrhx3fHwcILzupvPd+TBRjLr01WoVGxsb+PWvf42XL18GYnldLaXvRbv4uPL63bt3+O6771Cv111YAcARvlAooFarufBheXkZxWIRiUTCHYCj0chN+en3+y6W53Qh9YKYFFSrrqESANevz99VMY9/0BoehpH+kfAlqnTVWY7ijapxqWrYOeJKCc/6O115xrxhM+sVtHzJZBL5fN7F8C9evMDLly+xsbER0NeHWXkl/NnZGfb39/H27Vu8fv0aOzs7zsqTbMlkErOzs+61tre3sb6+7kqBsVgMvV7PxeucAaAz8biZBwgq8pTw/DeFfziYe/9xMNJPAB1dxXiVs+mYcdabkZ1qvV7PdcnV6/VAP7zGuySZr0IDguufaeHz+TxqtRo2Nzfx8uVLvHjxAuvr624iji/E8Ql/cXGBs7Mz7O7u4s2bN/j666/x/v17NBqNO6OwMpmMU/c9e/bMCX5mZ2fdHrqbmxvnluuEHF1BBQQJHya/pTfl5zD0kDDX/ukw0j8SmuHWSbRnZ2cu2aWxJ4BAl5xm57kVRhV2uvklrIGGX5m0I+G3t7cd4dfW1jA3N+cIr9eiOYEwC//HP/4R33zzDQ4ODtDtdl0sT5ltuVzGysoKtra2sLm5iaWlJZRKJaRSKcRiMTf8gu677p7zyc5DS111vU79HDRU8hN8j2loMtzFo0gf5eYGTdyRKBTPHB0dOV06gEAiajQauTieclbdCMPYncKXcY0kWqNm0m52dtbV4V++fImXL186V1sJr5ZTs/Q+4b/66iu8fv3aJe8Gg4ErC8bjcczOzjqPYnt7G8vLy27Ulpbf+N510o0up1TCU77LRZkkvXpTemioqtHI/nF4FOmj/OHe3Ny41cxUqe3s7GBvbw+NRsMlu3yxCJN3nU7HCW86nY6z7r7be1/nGLPb3D3HpN2vfvUrR/i5ubmxCyvUS+HMu/39fefSv379Gvv7+24RpeYn1K3f2tpykt5cLufIenV15d43E5c6oFPVgqlUyg3YYHOOjr2mh6Cz7nV2vuY5HpJAG8Jh7v0DGA6HODo6wvv377G3t+fGQDebTTc6CkAglmf22hen0LprH/x9E2C0lMXdcyT8ixcvXC2eJAxz6TV+73a7aDab+PDhA968eYNXr17h3bt32N/fd8MuGUczUci5epubmy584GvRsmsHnC7SpPVn8o5afd2Sy4WZYXoG9YRUpON/dkb8yXAv6f1Gi6iAri0AvH37Fr///e/x5s0bt+RB97cBCE3g0Y3Wh2bm7+sL1xo8rWMul3N1eJblaOHHxfDqzrfbbRwdHeH777/H69ev8c033+C7775z02116wzfTyaTwfz8PNbX17G+vo6FhQXMzs7e2TkPBJODzNj7nw07//jQBh1eq7+QUwdi6oHCz9Hm5U2Oe0l/enqK3//+93j16pUTeEThw1WZ687ODt69e4d6ve7GVDHLDiCQTabl02YaZrB9687XUaiO3i/LkfCM4Tf+rT9+nIUnQdg8c3BwgHfv3uHVq1f45ptvsLOzg1ardef9AHAHTbFYdCKcWq2GYrHo6v50x33dPst0rMnzulKpFDKZDIrFIqrVKkqlkjusALi/UZmy7xVNT0/f8QI0RIrCvfkp8KCl/93vfoff/e53AIBUKhXoq/5coTJaDoZghtrvB9f6sU580T3xunXmvjFPfrLLF8N88cUXeP78uXOzOfYqjPCsMjSbTezs7OD169f405/+5DwWxu/jsuvZbNZZ+ZWVlcCMfP+9kvAMZ7SEyTCA76VSqaBcLqNQKGBmZsblBHQEtu8d8XWmpqYCgh/VASjxo5yDegzuJf1oNML5+bn774uLiz/7Bf0coPVh7mvTrDxwS1Rmr7XbSy261tzDptwACLjyyWQS6XTaufNLS0vY2NjA1tYWNjY23JIKjav91ybhj4+P8f79e/zpT3/CV199hbdv3+Lw8NBN3/Gz65owZGvu6upq6CYcfZ/MX1Bnz/12auXz+TzK5TLm5uZQKpWccOj6+tpJd8eJnpgboMyX8l7KlXWSkOFh3Ev6WCyGbDbr/psNFVECrTbjXZWGxmIxl7lXQqvVCRPaKNlJNE6TZXZ+cXERq6urWF9fx9raGpaWlpx1Z/JLCe+79I1GA+/fv8eXX36JL7/8Em/evMHx8bFLPoaRhF4LO/VWV1exuLiIYrEYiOP5epoz6Ha7TntA0nMEVjabRbVaRbVaRblcRrFYdPV9bbfVtVeawednBQDJZNKJorrdrvMstEfBLP39eDB7rzdr2PjjKEHdR72xGL/yd/R3CYYM/F5VaZS4lstlLC4uYn193fXCLy4uurZVjqKiBfWFN9o488MPP+Crr77CH/7wB7x58wZHR0euiccnvB5CqVQK5XIZy8vLWFlZQbVaDay+4utp4o5aBJYlh8Mhpqam3Oy8UqmE+fl5Z+X5fDQg/X7/Tn1e6/S8RnoPPGDOzs7Q6XRwfn6OfD6P6+trN7XHMB5WsvtIhHWu+YTXBJ02zDBuLxaLWFxcxMbGBp49e4a1tTVHOJI9mUw64vlaehJeZbWvX7/Gv/7rvzrCczFGWMLLb89dWFjAysoKFhYWAuOy9f3pXH6qEzlai/E8d+fNzc0Feu5VxXd5eRmo8fv1eVp64EcDdH5+jkQigbOzM/eglDmXy90JtQx3YaR/AtRSA3eJr16AP9KJJSyOmlLhCwm/sLCAYrHoyO43l/iEJ1m63S4ODw+drJZVB3/qjkLLgzMzM5ibm8PKykogeaduvdbStaeAnYL9ft+59rlcDqVSCZVKBZVKBcVi0cXy2qPveyx00/0uQ/4Npc0kPRuWzMV/HIz0E0JJErYdxp+Yo3G7lq7oytO6b21tYWlpCeVyGblczsXQYWTna6mbrYm7V69e4e3bt4H22HElLb6fdDrthDjskddefOA2cceGI53a22w20e12XZOOPz+vWCy6Gr/q8/1GmzCxjTbfUP3XbrfRbrfdMBLmEjQHZQiHkX4CqEJOY1xiXGKMo6JZtqpWq1heXsbGv/Wkr6ysYH5+3o2QZllM3fhxOQN/AAaFN/v7++h2u4FGnnHvhzmFhYUFrK2tuUk4nKsHBGfzU17cbDZxdHSEo6OjwNRc9vjn83mUSiUUi0XkcjmXgATg4v6wNlqtZvhJUWb7OWqMD5JetfqGcBjpJ4CWtFKpVGDog1onzcjTshcKBTdTbmlpyY2ZqtVqroTFJN1DfeJq4TkAY3d3F998841rnGFC7SHCq75+bW0Na2trgaUYQJDwg8HAjcc+OjrCwcEBGo2GazyamrodwU3VHeW2zA1o3K2WXfMdXHGtdXrVSGjZjll8JiqtdHc/jPQTQC12NpsNSFHVrVfpLMnOMtzCwgIWFhYwNzcXcHnZYnpfB5lv8fxuuVevXuGHH35wMuH7ZL4kfDabRaVSwdramtMBsERHN5zxNUtzzWYTBwcH2Nvbw+HhoVuIMRqNkMlk3HorJbzW+Pm8qmXgdXH+vSb5/MYh7WDs9XruwdKdkf5+GOkfCZ0RVygUnIRUu7/ozrPeTjHK/Py8y16XSiXk83kXtzNR52flgdsylUItbrvdxsHBAd6+fYuvv/4a7969cwMwxomBNETJZDKoVCoukcj23Ewm4zwYZtHZsENJ78HBAfb3910sf3V15erymUwm0FCjKj4SVzP1LMvp0gsuv9QMPt876/ske7/fdyo9avIN42GkfyS0xFYoFJwOXctoFNhwPHS1WsXc3BwqlYrTmrPW7s95C7Pufvzuj7jixJs//vGPePPmDQ4PDx0Bx5UMeZ1K+OfPn2Nrawu1Wg35fB6JRMJ1CvoWni49l3Dw9bQqQUvvt82qgo/KO5U28zOm3JtlQV8BCCAg16UWn6Q3Oe79MNI/Erwh6bJTZELXlTe7JrA0a61k98c93XdzqlvLJNrp6anrh//qq6/w6tUr7O3tuey5n1/wJbZU/a2urmJ7exvb29tYWVlxSjkSnq/XbrcDhOfmGxI+Fou5A5CfAwlPj0GnB1PQQyut7bPMg5Dw/oANhhsq1+Xh4fdGGMJhpH8kSHpasdnZWUfw2dlZ91V/RrJrzK5ufFgZTqHxO+W1rVYLe3t7gQEYnHjjZ691hjwJWSgUMDc351R/6+vrWFxcRLlcRiaTcdJi6vd1zRa37rAer+U5VgH8aTj0TrS+T50+x32zj5/JT7r2qVQKvV4v8FnwQXEPO/HoGVib7cMw0j8CJKe678xOq0UvFArI5XIumcWY3VfS+QIbhfanjxuA8e7dO7x+/RrffvttoGNOZb68bpKIOQbW4dfX17G8vIz5+Xnk83mk02lXImOGvtlsBnbqMUvf7/ed9JglOK1qcPMscwE8iKjTZ8ZdtfPaf59MJnF5eenCH34eKtzR5hy/x95Ifz+M9I+EluBIfHaOaX843XiN28PGO2u8zq9qzXQB5NnZGer1OoPD8GIAABRjSURBVD58+IBvv/0W3377Lb7//ns0Go3ANF5ep7bnsoedpUK2ylL1l8vl3GQbEr7VaqFer2N/fx+7u7sufm+3264qQO8BuK1qaFKSz0Uyk/DjOuRIVhU+qQ4iTLjjLxsZJ0AyBGGkfwT8kVVaimOSTnez8+bXWXWEf/Nq6Yo3MGNVZssPDw+xu7uL77//Hjs7O866c/yWVg50Dl2hUMD8/Lyz7isrK6jVaiiXy65UyCQbk2E8YHZ2dvDDDz+4OryO01LREWvqfN/T09OO8GrhmWnXZZaawNMhJPpZMReg8TyvQasLgO2qfyweJL2ettoZFRVwVBPXOVWr1UCtnSuaKT4JU9MBd7fckuScFMMhFNxzd3p6GhDAHBwcuOUYjINpRenG8zqV7NTR12o1p3/XqgOz6dfX126XHQ+Y3d1dHB8fO+ENk3Y6r55xPAnPA4REpUaf7rzu5wNuvQQ/D6ATdcNm52vNnj97TGLUYEM0HkQymXTS1GfPnuGLL75wE2EZw/v97bzxND5XsjMWZWzL5hG2p3JcNhtZdAsORSsav5N4nEzDtlj24VerVdfAowswlPBMEtKr2N/fx/HxsRuJHTZsQxN3DBF02aZu5mUuQF1+thVnMhn32VCJx/fpu/9ajlPC+3MKDeMx0RCNdDodaHX8XDE1NeVKX1tbW/jbv/1bbGxsOBKVy2Unm6UgJWxDS1hnGpNkuuKqXq/j+PgYJycnjuC66kpXQ2kpjjkGDqng4I2NjY07cXvYfHlV9rXbbRfHcwCoJu3YLusTnqSnW88GHyrmeKCphddMfSaTCRyOJL3W4FnSC+tt8OcSjNvOa7jFvaTPZDL4h3/4B/z1X/91QGQRBTBDHI/H3b44nVyjc+mU3IxR+RyMO5mBPz09deTa29vDwcEBjo+P0Wq17ri/PHhUYaZjtdiLX6vVsLa2FijBVSoVl5UfN+aK2fVOpxMoyzWbTRfDk/CMu7WfgDoFdetJeA648LfwMh5nv73G9MCPFps5AB2yyc/AFx1pToGdidZPfz/uJX2xWMTf//3f4ze/+c1f6np+NqD722q10Ol0nBtK6a1q7v0xzNoBpxn4RqPhMuJ0odWiMlHmj9jy23NnZmZcCY6WfWtrC2tra25qrT9lR91hXpuWAuv1eijhgaCSj+IbPvga7H5jB54OuAibaquLLDUfQJ0ADwqV6vqEV7JzgQbLhYbxeNDSRx2ZTMbdfLRIfvOH6sg1CcWYltZ9b28PHz58wN7eHur1ultPraOcgfBhHCTdzMyM8zyomaeiTj0RTSgSKuVVwh8dHeHw8BD1eh3tdjtAeB4YqjqkCInZf03YcZsPXXpaa42/dYAGwx72MMRiMZfU1MMizMLTW2BFxUj/OFjJ7gHwxkomk3ey7yS8Tm9lko7yVda82aByeHiIk5MTV1/XfW1henmNobPZrHPnOXyD/fiVSiWwiMLPMfiKOO2HZ2VAk3a0pOqK88BhMw1n1vM5NSFJ0Y3f3st4W2W5mq+gxJak9xtotGmI+Qw2QPlhlyEctsDyEaDFVJfbL0npdFZm5E9OTtBoNJzrfHJygrOzM1dy05jdt+7a/sqbu1QquZHY29vb2NzcdAMv/GTdfYRvt9toNBo4PDzE/v6+G4KhSjsdFsL8QS6XQy6Xc4QnecMIr8IbLfPSUwqb4kvi63abMNIzjp+ZmXHTeQqFgvM8DPfDFlg+An48DCBg5enCMz5n2a3ZbLrV1LqtVq1fGNm1Fs6xUzopl22wXBedzWYDmWten7rz6n5TXru7u+sy9Zyyo6/NVteZmRnXc8DyJFV3fgyvTTQ+4fn+NEeh7bYA7qzG0s467Rb0x3HpAM+o368Pwdz7R8InJZNhVM5x//zJyYl7tFqtQHzrJ7T0+fg9rbta13K5jFqthpWVFSej5Q47P2PtK/1YOVDCq+CHizhVS09S83tm6elJALhD+E6n4wjPkMUnPD0mWmo+lPia3xjn2tPKc0UWPR2L5x8HI/2E0Ky9tonSwpPwJLuq5zQbH4/H77S/aj+5uq7z8/NuLLWO1+K2V00qAhibTKQu4OjoyOkCdJglXXa9DlXLMWmnc/JIeI6hvo/w9BxY9tPmHC0jqqvvf/YMd2ZnZ1GpVJzwiPG8kf5hGOmfCO1xVwktrZ1OcdFWVwBO6AIEl1VqSSyfz6NYLLrpOxzGwdl1jKf9DTB+qbDb7box1Y1GA81mM5Bb4AAM7pWjl8EHyc7r1km4PuH9KgQQ9F60YUk9FH/MtT5UcafTizhP31z7yWGkfyI0QaaZaD9Trd1ouv7Kt+4kAgmfz+fdSme27VIIc3Nz48pguixC6++0xKwgNJvNwIx4XT1FctO6k5w6kZZegxLej+H9968HmnYnMlTgHkDdmhvWKaedd6wicJ4+5wCETSc2hMNI/wngz57TnnBmqrVZib+jsTvn6mWz2cBXimAogGFJbTAYBOrwGm74I6K5Y45lMMbvHO5BV9sfgKE98CS3X4f3BTT8PDT7T7Kzvk/SA3DXyxBj3GerhwcnE+m664cmCBtuYaSfEONEIuq6akMMia0uLzviaN11MAeVZTo0E4CzpGyA0oqCxsHUC+iwSE0g6mANWk0m6ngIMMamQlCltZqr0Dq8P7FHm2lmZ2dRLBbdUFAO3tT3MxgM7gwH1YEjOoNPx2v7izUND8NI/wQo8X33dWZm5g7hNSmltXcm7JTomjRj3E5isRVXv+qDv6drqLXurgeN1tw5xDJsAIbW4enWj6vD+9oCDvDQnATj75ubG/T7fSQSCXeoJJPJAPkJbS5iglMn7VpL7WQw0n8E/A4vWiF16TnkURtNNH7mjazDN1SxpgMgmSykkk/bbMNEMP5r0cXWmX5KeB2AwWtmBx7zAfcJb/yJPZVKxU3sWVhYcIlINtV0u13EYjHXecjcwuXlZUBkw9Keeic+4QETkT0WRvqPhBKZ1p4E100tfkusJtBo1egi66hrxtNU+6menRZdS4E8bJgr4AYbzvMrFosoFouBRRS8BoqNeL3D4dDtgmeWXqXDYVl6Er5UKqFWq7mJPfPz827aLvBjLE+Cd7vdQHKP+Qt+Lvqe/MMRMLJPCiP9E+G7+GpVteuO5OfPNPFGS86sO8tXzGgzIadTZ9ig4497Vo+DCT7q9TnWi18LhcIdwpPkJLISnolAxvB+WQ4IbuP1x3QtLS2hUqm4eXyj0cgt5Oj1eoGOPXpGKnnmZ6vjw/Uz1IOPn7lhPIz0E8Ife+VLaXkAqMVSi6QjrujGagzrZ+F1rhwTczqdhs9FMqhiLZ/Po1KpuC07JDyVfLqRVht/WItnBYCE92WxhCbu2CMwPz/v1njpmC4egMCP1l5zGsxrsOqhGgT9nDR5yUPIpuA+Hkb6J0DVY2H1eULFJky++WT1E1AqrhmXhdfXI8lJDH9hJgmvE3v9ygBJSNmujrnqdruOWGEqOT9Tz3Ia1XKasWdlQPX9vk6A3/Ow9Ids+IIohjlhn78hHEb6CaBWXttCldj+QUCLxCYSFfMo6NoDt8o3Tdb5RGcCyyc7y2MczU23nvP8dLyVquFYoiPhNWGnE2d5rUBQfMREIZWEHNOlq618t1vLcXTfeRDQyqu7ruVDXV6pMmdz7x+Gkf4JCLPgSnJacy2zKYEZx/vdY1p753Pr72hJjT/TpB377cPI7pcCgWB7MAk/bkw1X8+vo5Ow2onHRR+8Xr4f7RPQCbd+mOKX7PTfVXykyzJUG2G4H0b6CaHyW79Orkkl3/prLZ0HAZ9PSaSxPXCbuaZghoeCEs7X67O/nJaW5ThtYSUB6YX4CUN/Ai4ls7xmAO55VU/vhw08UHi9mjPQkEVLj75HxddlIlRDDy1hWlz/OBjpJ8S4xhB9AOPjdU0A+gMv9XutU/u9/EBwAQeTYNTs68gsuvCUuWpikaTUTL12y/F16Hrz2lRoxENHp/Ww3NjpdJBIJJw3wffEwZc+cfVA1INAST8ajZBMJl0Z03fvDQ/DSP8E+MRX66vNISQFm2Li8bj73m8OofuuTSr+7/lxPBNoOp2WU210dh2J6A/J1EYa9tv3er3AIgoeKgAC0354zRqLs+zHVl6drKOz8RmXswNQdfz+bjo//0Eln+oVxo0cM4TDSP8J4BORCGsTpYtK9Zt/WDDu5le1oNpeGtafzsw3cEssftUDQ69Nt+zQ5WbrLzPywK33QTLqe2foQcIDt3vxut1uYFc9DwIO5qS8V9V+YWRWjQOTorTwRvjJYKT/CChZdQoMScl/00c8HncuNYnnHxpqPfWhz6vfq4dAa8sVVGGZbL+N1U86AnBuu99E4187/177A/zWXm3mUY+A1p6jxBhaMEb343R+VrxOzdaHhVOGcBjpn4gworLGzpKTT1o+mMX3XWUV9ZD4fNALUKGKf5PriCmtIKhCMIwk2paqzUKUzPL6CCbjtLuOvzMYDJBIJNDtdgMJPn/9FT0Bf88dy4S61cZXNurr8bOyKbiPh5H+CfBjd5bNALgsN5NnPuETicSdVVWEWnC66npTq/egKj/fUrNKoIkxtcxhBwy/6mHi5yX8/n3t6PMPFD63P3KLI774t9qrrzG9L6/1S4X0RPwZAGbpH4aRfkKohQyz9JqdD3PLlWj+Mko+v98frtl7zfrTs6B7TQ2Axrwq7gmzkLqEkrE8S2taNtOuP30dFShpHwCJyd/TVdZMJPJg0p0BJLx/vXrdujKcjUP+6i7DeBjpnwAlvVp8xqt8PDTNhf+ms+4ABLLVwO08Ph4GvkJNk3EkkF8DV7dYW2DZ4MLn0ImyTLipaEef3xcl+aFKmGaB74GeEK+bB4BPeEJHi7FPv1KpoFQqIZfLBfoIDPfDSP9E+MRXMqqyjll6Nt9QV86WWz0Q/KQVyajJO74On19FP7TuJLxPTCbCSEol++Xl5R1L7JPe3ySrenwlKf9ePycmCFVT79flNQRR0PvQDb21Wg21Ws1tEDb3/vEw0k+I+0Q3vuvtd+Lpzazf+/JdX/aqhFfRjl92I/HVpdeHH3erxp8JOI3ZaX31edk/ELadh9esX8M+Iw0Z/LKcL7DR3EAul0O1WsXy8jJWV1exuLho46+fACP9E6EWWRNpdM3D5Lo6y+6+n/sk0gSexq1KIF+g4hPMl7QyEz41NYWLi4s7z6vXpSO6wnQHfD5er5/zCEs+6gEX1iGnyUZa+EqlgpWVFbeSe35+HrOzsxbPTwgj/YRQix1maZV4YTG3Skx9Pb7fgALAWWQSSEUqek1+1l3FNDqcg0TTHIL/XH7bcJjISEGyaY7DLzlq2OB/lvqZ6rQc7R6kheeWXq704qRgc+0fDyP9E6FWVEmvU1/8UprW59Wl9y2fr0ALU5r58T3J7Ut39TpJfn1dddF9C+7LjPVafDfeHx7C3nh+r2EDy38qINL3yv9mI1G1WsXKygqeP3+O58+fY21tDXNzcy6BZ1Z+MhjpnwAli5Jb43L/535Jy9fnA7fiGoVq8pVUWjMnVEtPVVyY267f67WFdbmNIzvfh16f1uR1i412CfL69KBjUlPfr476Wltbw9bWFr744gtsbm6iVqsFxl9b1n4yGOmfCN8l1fo2cDe29eW6WiMPs/x8Dp/sviw3rIFGR211Oh3XNsvr0R30eoBpQs0nu4LvKRaLORERrbIu62CnH8MSXabJh7/DnqFBLpdzMfzW1pbb1Fur1VAsFgNbbUx+OxmM9B8BkphDJOiy+ll73/L7gpcwb4DPr+q2SUnPxZocYc32WZ23NzU1heFwCOA2waaHgcInO8d3c/mEP2mXlpjPq/V+DsDQ6TwU9LAOv7S0hPX19cCm3kKhgEwmExgAaoSfDEb6CcEbn8RjUwpFLpq9962l/zN1q8Nq3ZoBD3to/M7nYe7AJ/3p6an7ntZf5a9+clEz80BQZadrtDm0g8ssOIePVl5LgzrxhocPLT1zGFxbVa1Wsbi4iOXlZSwsLLh11BzUYYR/Ooz0E0B15Yw5eaP6sXDY34Z9H/a7+lp+eOCLgXwNvlYK6N7rsgqOs/ZJ78t2/fJe2JSeUqmEarXqHjp4U0drU75L0ofNtwPgPCYO9eTueQ7WZGLQCP9xMNJPCFr5dDrt3NyH+rl9tV7YV//3w/7Of/Dn40qIJD4tK4nvt7HS2qqWXhV8jLO5wSefzwdm6XPiLQd4qMhHww4SX1+XJUF+rtTUc9kl5+EzN2Ax/McjNu5G/TfYVAIPalHHxeJEGLHv+1nY3973d2HX5ouC2NCibnXYthwq7TREAYK79+jS6/psrsYKI6Z+Xlq61PKmDhJhmY8VgDDLboSfCKEflJH+CQiT2IbhMWR+6OeP/d0w0YtPNl9Hr669klB76nVdF0dy6ZZbZu99svuqwbCEpsputVLh5ywec+AZQmGk/9R44LP7KDz1Bh+nePNVdr5YKGwcNRN3untPSe4nEx+6Zj+RGVYdCAtfDE+GkT7K8OXD41R3fgWBllYt+aeyvuPkvIZPBiO94Ra+RzAOD+UeDD9rGOkNhoghlPQmWjYYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWKIP/Dvsb/IVRgMhr8YzNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojh/wMwoFTfKQ2wOgAAAABJRU5ErkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 30\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO19SW9jWXrlISkO4jxIIjVPoajMMtCADXhplIFGL7q2vfO+0bveeNX/oLf+C70poHe98c6r3thAF5BVmRWZERnpyIwISRQlUaREUqTGXpTP1XlXj5SoCOcQ7zsAEZrIN8Q795vO993Y7e0tDAZDdBD/qU/AYDD8uDDSGwwRg5HeYIgYjPQGQ8RgpDcYIoaZB35vqf1fEG5vb7G/v49/+qd/wr/8y79gZmYGyWQS19fXT/q8WCyGwWCApaUl/Pa3v8Vf/MVfIJPJfOSzNvw7Ihb2w4dIb/gF4Pb2FrFYDLFYDDc3N3j16hX+8R//Eel0GplM5kmk5+ednJzg17/+Nf7mb/4G8bg5hp8CjPSfGG5vb/H27Vu8efPmo33m5eUlBoMBYrFQw2H4hcGW7k8QMzN3a/nHIGo6nTbCf0Iw0n+CUDdcF4BpP4PvnZmZMdJ/QjD3/hPHU5N4Nzc3oET7qZ9h+HnCLP0niJubm5/6FAw/YxjpP0FYlt0wCfZ0GAwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0nyBMe2+YBCP9JwjT3hsmwZ4Og+Ej4v98sYvf/sP/xX/9X/8P7f7FT306obB+eoPhI+HwbIS//99/wNXNLV7sn6KW+wb/87/8h5/6tO7BLL3B8JEwvLzG1c3dAOmz4dVPeDbjYaQ3GD4SVqtZ/LffbCEWAxrFDP77f9z5qU8pFObeGwwfEf/jP3+Ov/9Pv0Jq5udrT3++Z2Yw/ELxcyY8YKQ3GCIHI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0nyD+Pbaqvr29ffiPDL8IGOkNDyIWiyEWi/3Up2H4SDDSGwwRg5H+E4Ba4ZmZGcTjH/e/9eLiAjc3N2btPxEY6T8BMIYfDofY3d1Fv9//KJ9Lks/NzWE0GmEwGLjfWYz/y4WR/hPA9fU1BoMB3r17h3/+539Gs9lEoVBAPB5/MjljsRhSqRSeP3+Ov/zLv8T19TVOTk4wGo1wfX39ka/A8GPCtqr+hePm5sYR8vXr13j58iW63S7S6TRGoxEuLy8f/Awm6uLxeODrQqGAlZUVbG1toVAo4Pr6GqPRyP0d32v4ZcFI/5HwY7q7PNbt7S2ur68xHA5xfHyMd+/eodlsot/vPxiDx2IxJBIJxONxxONxJJNJJBIJzMzMYGZmBqlUCtVqFevr61haWkK1WkUqlcLt7S1ubm7u5Q3GHevHuC+28EwHI/0H4vb21hGB34c9hB/yYCpx9Hg3Nze4uLhAt9vF4eEhWq0Wut0uzs/PcXV1NfZcEomEI3gymUQmk3GvdDqNVCqFbDaLhYUFbG5uYmFhAfl8HqlUyoUMXFT082Ox2ESS62LlX9dT7hOPry/DwzDSfwBIvOvra1xfXwdEMb77G+YOhz2kPsH9f/WYl5eXGAwGODw8xPv377G3t4fT01NcXFw4wsfjcXdedMsTiYQjezabRT6fR6FQQDabRTabRSaTQT6fR71ex9LSEsrlMtLptCP89fW1+3xew0MWnYuVLlrjSD8udPD/Ph6PuwUskUgY6R8JI/0TQfJdXl7i8vISFxcXuLq6cr/X+DjMGk16QJXkPlFubm5wdXWFy8tLDIdDdLtd7O/vY3d3F8fHxxgOh+79Gqfr98lkEul0GtlsFoVCAeVyGaVSCYVCAbOzs8jlcigUCqjX66jVapidnb1HeD3XMMut1+efv7789/j3bdw94eJFz8Ss/eNhpH8ClPAsZQ2HQ1xeXgYsLF/6/STyj7PsYRZ+OByi3+/j5OQEzWYTR0dH6Pf7uL6+vkceQi0j4/bZ2dmAtc/n88jn8yiXy6jVasjn80gmkwDgQgaeGz0cejm62OjLP/+w9/D8/Pum91zDqHg8jlQq5RZa5ieM9A/DSD8l+OCReIPBAGdnZxgMBs6tVnLxAdavJ8WhYYTn19fX17i6usLFxQWGwyHOzs7Q6XRcHE/CU6CTSCTuxfW62HBxSCQSbgEoFAoolUqoVqsolUrIZrMuRLi6usLV1ZVbeEajES4uLpy3A+De9ar7T7LzM/wwQV31sPfqIjEzM4NMJgMASCaTSKVSmJmZGZvHMNzBSD8FlHwXFxeO8N1uF/1+P/Dgz8zMuIdXv9YHmqRTaF7At/RK+vPzcwyHQwyHQ1xcXDjCawZe3+uTQcMGniNJX6lUUKlUUCwWkclkHJl4HHo3/X4f/X7feTk3NzcuOZhMJt15qLXXhYP1fv+8NUbX93GRiMfjSKfTuL29RTqdDvUaDONhpJ8SfABHoxHOz8/R6/XQ6/UwGAwc6fnQahnMt2K+1Vf4sbxPeiUOFwkeL51Ou+PqouJ33t3e3uLq6spl4ZPJJLLZLIrFoovx8/k8MpmM8xh43WdnZzg9PUW73cbp6WlgwWOczUqAnoteg547F52ZmRmk02l3v0h6Xu/FxQUAuAUtlUoZ4Z8AI/0UIAE1rh4OhxiNRhiNRri6unIPd1h8TvLScqpr+1CmmvCFNOpO+wuMZu7DroPHSCQSyGQyLqlXLpdRLBaRzWaRTCYRj8cdWYfDIXq9HtrtNlqtFtrtNnq9niOkVgVmZ2edp6CJQN+1p3dAHQC9BJ4rCU9vggsJFy3DdDDSPwGaeQ7LQvuY9LuH4nt/cQDgiO3/65etwspjfracljmXy6FYLKJUKqFYLCKfzyOdTjsrz/exTNjpdHB0dITj42OcnZ05pV4ymcTs7Czy+TxyuRxmZ2ddfZ/3zrfyyWTyXi6E4YqGBJeXly4kUHffrPx0MNI/AX4JjA8qf6au/KSEnrrgk8pN6mHQ5fUturrP/Ne36AACCwDd6VwuF7Dw+Xwes7OzSCaTiMViActM0jOJeHJygrOzM1xcXDgCs4qhSU918fnivQLgiM7f6WKj4Y1WAIzwT4OR/gkY51ZrFtpPSo1bBNRNH0d8tfYA7ll1KvNoDWkRSRB+hr9YpVIpR/harYZKpeJEOrTy/HsS+fLyEufn5zg9PUWn00Gn00Gv18P19bVLsAF3OgXgzw1BdNeV9IzleU3JZDJU2RhGfiP802GkfyLUymuWWkk/ifB+Ce8h0itR9GeaWzg/P3dNNiS+1rZ53pq4K5fLWFhYwPz8vCN9JpNxsTyPC8Dp/GnlO50OTk9PXblQ3XLG6bTYXEB80lMDQNIzOcef+dZdy5hG+qfBSD8lNJHmW3v+PozwvvBkGkuvzTNawmLp7OzsDL1eD2dnZ+j3+679NUw0w2Om02kUCgUsLCygXq+jWq265B0lt+oZ3NzcYDQaodfr4eTkBO1221n50WjkEmzAXdgwGo0CllwTebTkTN5xIeJCodfqC3oSiUToQmZ4HIz0U2CcsCXMvZ9k2WmtH0N6v1vOV+T5bvb5+Xkg0+2HBiTX7OwsarUa6vU65ufnUa1WkcvlnMiFuQOegybwjo+PXda+3+8HqhbxeNyFGcy6x2Ixl2lnUo7nxJ/T6nPB5P3hsfk+P943TA8j/RMRFtf7Mfc4wnNh8L2Gh9R5qsbr9XrodDpot9s4OTkJWF2SyieGxvLFYhFzc3NoNBqYm5tz2fqwcVt069nNd3BwgHa7jbOzMwyHw0DYoTE3Fx1KZXn+qg9grkDDJJKd9Xj2NlALoCGHWfjpYaR/ArTE5nd5+R5AmCs/7ud+uY3/+k02JPzR0REODw9xfHyMbrfrBEIkFWNjJXEikcDs7Cyq1SoajQbm5+dRKpVctt5PEFKBd3p6isPDQ6fzPz09dWpArSb4bjddeir6SF4tvakqkJ/DxcKv0wN34hwlvpH/8TDSTwk/Az7J0ofp0McR3reuaql9l77b7eL4+BhHR0c4OjrCycmJi+Xp1vsjrbQmn8/nMT8/j8XFRWflU6mUOzc9/tXVFc7Pz3FycoL9/X3s7+87155WnmU9LcPpdQJ3Cwg1+zw//kvCc+FREZN6CAxPJrUxGybDSP8E+IIarbkD90k/ifAPWXklisbUHJpxfHyM09NT1/DjC3H4uaqvn5+fx/LyMhqNBsrlMmZnZ51bTevMY9PKHxwcYHd3FwcHB+h2uxgOhwErrXkKZuI1KaeNOvRGgLucBTP3w+HQWXqSXmN6Jv98JZ4R//Ew0j8RYVl8/vwphNfsPP/VOP78/NyVykj4o6OjgFs/qU+dUttKpYKlpSWsrq4GJuKolefxaeXb7Tb29vawt7eH4+Njl7wjcf3FjgRmYo7E9rPxPM9EIuFcf5Let/R8JZPJgBrPMD2M9B8A39rzZ2HqO3+B8LP2CpJB3XqN41utltO9UwLLOD6sREciFotFLC8vY2trC6urq6jVak5fr56KagB6vR5arRZ2d3fRarVwdnbmLC89CR6PGfh0Ou2GW1ChF1Zy5LUyxteBJAACMb0SXTUIvE7D42GkfwL0IfOJH0busJ+Hlen8OJ5WfjAY4PT0FMfHx2i1Wjg8PES73b7X1hqWqadbn8vlUK/Xsbm5ie3tbSwuLqJQKDjlHc9DlW+j0QjdbhetVgvNZhOdTidwPL1+WvlUKoVMJuOabeiq6+Lmhy8zMzOO1ExY8rOV5LxG/d4wPYz0HwC/bg8Ex2SFEd5fIMLKdNqzz/ZdWnk2uTCOf4xbz5r85uYmdnZ2sLq6imq1ei+WV7BM1+l03EJzdnYWKAfq9fuEJ+n5WX6i0r9veu06dsyv7QMIde/N2j8eRvqPBD+rP64OH0YwIHzoJRVwfra+0+m4xJ02qYS59el0GqVSCaurq3j+/Dl2dnbQaDRQKBTGxvJ+PE/CaxjBv+XxqMLj+C3209N99xV+RFj1Q2v9Gs/zvTwHi+mfBiP9B2DSQ+dn+NWqTUrcKeH7/T7Ozs7QbrcD5TmdyacEUWi2vl6v49mzZ3j27BmWl5dRKpXGCnGAoALv5OQEJycn6PV6AWvL6+CxwvromXQLW+T0vX7Yw3NQd1+luyrl1c8yPA5G+ifgIbLr12Fk998fprgj4U9OTgKEp9RWE3f+8Wm9U6kUarUa1tbW8OzZM6ytraFSqYx16zWev7i4cGFFp9Nx+np17WnhU6mUm65L0rOHngtFmDfC8wxrE+b56Fw94M7dN0v/dBjpnwhNuoU9fGGE5/v8fzWGp4XnOCotz3U6HfT7/YCU1X/4SZpkMol8Po9Go4GtrS1sbGxgYWEBuVzOddBNCjNYn2e/PONo/9oYy3N0Nht2dDrQuBFZqrfXuj5luLoI8X2TyG4W/3Ew0n8gwogf5jKPs+5hLr1m6g8ODly2niq4cZZOcwisya+urmJzcxOLi4soFouBbP24a1HXvt1uB+b/6bFYCuTmGPl83pGebjgXMtbhNSfAz6AaT1uU+XtgMtEN08NI/wT4Vl5JTzJTiea/Bwj2lLPmzXHatPCtVgt7e3sBrTvd+nF98pq8y+VyaDQaWF9fx8rKCiqViiuh+Uk1v1RIK0/vgnJbgu/XyTuFQsFtlsF2Wn9yL0l/dXUV0DUwRKC196sDvH8+fG/K8DgY6aeET24lzDjrqV/7ZPdjeLr0+/v7aDabaLVaLpZXSzmpJj87O4u5uTmsra1hfX3dKe/o1k86P1r5druNg4MDtz21X5enCCeXy6FUKqFcLjvSJxKJgOdyfn4eGPCh90pbk+nq8z6ptNcvD4YtXobHwUj/BPiW0bf0+jf6tWakSXbW4TWGZxzfarVcy+w4EQ4Q3GAilUqhXC5jeXkZm5ubWFpactl6LSP616ODObhrzsHBQaA2D9xZZp28U6vV3BAOzqOn98Lr04qDn+vQDjvKdrUt2RdAhakdDY+HkX4KhJFYrTcfSv093Wc/dj8/Pw8MwdCyHAU43W43kK33S3O+8CeTyaBYLGJxcRGbm5vOyj82eXdxcYGzszMcHBzg/fv3bttrrZHTKivhFxYWUKvVUCgUkEgknEXv9/tuXwBaelpwP67XLD5/5hMdCM4q0GlFhsfDSD8l/IwyyUyC6880hlcdve6M0263XdKOX3e7XRfDk0CT9otjTFwqlRzht7e3sbKygnK57GL5SYQnSY+OjvD27Vv88MMPODk5CWyIScLPzs662Xrs1qtWq8hkMs7C68JG9143xGDsrpY+TLXoL2x8rz/224j/eBjpp0SYq85asi+t1cYZnXjj1985COPk5MTtGEPrzhh4XBxPwheLRTQaDTx79gyfffYZtre3MT8/H7Dy/nXwHFV99/btW3z33Xd4//49Op3Ovf35MpkMSqWSa89dXV1FvV5HLpdDPB7HYDAAADc1l249h2DwHmn5T8U5iUTCJfp88vs1fV9NaHgcjPRTQuvO2hWmbqtm1mnhafUoqdX6O6372dlZYMbduC2btBbPnWkWFxexvb2Nzz//HM+fPw+N5fUaNI7nkIzd3V18++23ePPmDQ4PDwNZe1YFOExzbW0Nm5ubrjKQSqUCs/m4yNHqc/G4vb2bjAvc3556HHxLr52BZuWng5H+kfAtPGNzWjG69zMzM87qMxtOwusAjIODg8AOMVqDn2Td+aIghi791tYWPvvsMzx//hxra2uoVquBban0OoA7C8/Zd3t7e3j16hVevnyJ9+/f4/T0FKPRyFl5Ju6o8Nve3sbm5ibm5+eRzWYRi8UwGAzQ6/Uc6XW7L16LnotvxRXjmofCJgwb6aeDkX4KaPzL2JylND7QOs2VNW9tmmFWnrJa3eaai4fvLfi9+iR8pVLB4uKic+l3dnawsrKCWq3mJttOIvxoNEKn08Hu7i5evnyJFy9ehFr5eDzuOvWU8CsrKygWi4HBFqzR61issD3nNIHnS281X+JrEbiwWsnu6TDSPxIam+sOL6enp27ogyakNDlGhZ3G751Ox02T1WGWYXp64I7wdOnL5TIWFxfx/PlzfP755y5xR8LTrfdJH2bhX758ia+++govX75Es9kMKPDi8bjr1FtaWsL29rbT8bM9NxaLucQdk5naHz/uOnT6LUnL/IiO1dL7ETaVyAg/HR5F+ihLINWl5+4uarE5SUYtEBNV9AQ44orjqjniirGub93HdbIxrmZZbmdnB59//rmz8HTpw+J4TTyen58HXPo//vGPePHiBXZ3d90ixhxFMplEoVAIDODgqK1cLheYTKvXrtN1eB1a42cC0p+zr+/VTS78RqWwHIXhcXgU6aO8kt7e3jqyc4rM+/fv3by48/Nz98BrqyqVbWxaIdl1L3t/AAaPR/gxbyqVQqFQcE006tLrZhX+VFvNQ1BtR8L/6U9/cnF8t9sNqO/o1lerVayurmJ7e9vV/ovFIlKpFGKxP/e3k/D0cHyPRbPv7LvPZDIB0vO9DHX4YmmP+ZKHmp0Mk2Hu/QMYjUZotVr4/vvvsbe356bCHh8fu6QVM+lMMDGW5zDL09NTF7uz7q7JrXHNM5qxZqmsXq87wrM//iHCM35nHf7du3d49eoVXrx4gdevX2Nvb88NySBRtRTIROHGxgbq9bqbk+/vNKPyYhX0UFqrPffsyOP+9fQQqFZkEpALiHoU/svIPx0mkn4wGESyw0mzzK9fv8bvf/97vH792u3s0ul0nIXX9lIm8NiaymQfa9X6ED9k3f06fKlUQqPRwM7ODn7961/j+fPnD1p4dec5xvr777/HN998g6+//hpv3rzB0dGRC1F0Bj2t/NzcHDY2NrCxsYHFxUU3MpvbWOs1kLCc6APc7WEXi8Vcz30ul3MdeSS9vp/3bjgcBiw7a/ga79u21dNjIuk7nQ5+//vf4+uvv3aZ4CjcWJL+5uYG7969w3fffYdWqxXYu40xL91uLY3xwWStWuvu/pZPhMbu+rlM2jUaDWxvb+Ozzz7Dr371KzfNdhLhmXRkDf7169f4+uuv8fLlS7x9+xbtdtsp5fzYm8m7lZUVbGxsuHp8WBlQvQmqCHUBUSVfoVBApVJxDTpsw+VCoaRngxGPQYkvX3pfVSId5XD0MXjQ0v/ud7/D7373OwBAOp2+11f9KUJFNvl8Hrlczs1m1y4xuq7D4dARQS2stpKqPBcYb91JkFQqhXw+j2q16oQ3Ozs72NrampilV8L3+30cHx/j7du3+OabbwIZek7D8cdO8Ryy2Szq9TrW1tawtrbmdsJRUYxeEzfjYAhDl5zGgsKeSqWCSqWCYrEY6MjjvWKpj+RX0sfjcbcgaOeezcGfDhNJf3t7i36/774fjUb/7if0c4AmoBjrhsk9Gb9zLBQzzLqXnKrqfMKHufLJZBK5XM5p26l829jYcFlzWtxJFr7f7+Pw8BBv3rzBV199hS+//BLffvstms0mer3evTHSuuik02mUy2UsLS1hbW0N9XrdddDpkAs9nm6ZTbecuQhO8SHhGZJweyreD7X0JL5m7mOxmBM68cVFRrexNkzGRNLHYjHkcjn3fTqdvrdH2qcOJqeA+yTlgzZuFxd14x9y5ZnR1kaWjY0NrK+vB5pa8vm8i4P9efU818FggKOjI/zrv/4r/vjHP+KLL77Aq1evcHh46MKTMMtIz4Uz8tfX17G0tBSYq+eLaKg4ZHWDiyQAtyixAlCr1VCr1VAqldx4bJIbuJMs06NSpSMtPlt1mSBln4K2HZt7PxkPZu/V6ukmB1GFauw1hudioBZ9XGZZFw4dN1Wv190ONJubm66ZpVKpOLKrdfcJqI0zP/zwA7766it88cUXePnyJQ4ODsa26KqqLZ1Oo1qtYnl5GSsrK/eadrSZSMd0c4AmFxVWMpiTmJ+fx/z8vLsWbnABwCXyGBbpjjY8V1rwRCLhFI5K/NFohGw2ay7+I2AluymgpSnfjfQz8T6p9MHVRB3lrSsrK9ja2sLOzo7LlNdqtVCy+yo7EoZjrnZ3d/H111/jD3/4gyM8tQFhi5DKe2nlueD4TTt8PxN3JDy7BHu9nnPtWfKbm5vDwsKC2xabVp5xPO8LP1cn4Go9nlaflr7b7QYalQqFgpH+ETDSPwGPlX/q7/U9HDVF676xseE2olDxC0tjKlX1lWgAAgMwms0mXr16ha+++gqvX79Gq9UKZOgn6QFYoqOVn5ubQzabDSjm/Di+2+0GOgWp2WcislKpoFarYX5+3i1iutW0v1sur0eJrj8HEJhHcHp66qz9xcUFZmdnzcV/AEb6KaE93vqv/8D6cbtKUDl1hgMvfvWrXzl5K+N2KtUmjbgC7uJgjeNfvHiBV69eOQuvFjMMvr6eCUOq7uhZMFvvE54NRBytpW241WoV8/PzqFarTtTDxOfV1VXohhthi5t6UJpDIOl7vZ5L6CWTyY/wP/3pwkg/BUhyltV8lxcIjr9Wss/MzLhxVurOU9rKveL9XWTHWfdxcTzr8Pv7++j3+/d2g/GvhwuR9smzJMiSGstzbBVWwh8cHLhZfrTyrECUSiVUq1VUKhWUSiVXYuSxwzrl+HPeP/UutFTK7D1dfSW9WfrJMNJPAVXf6Yx2bQcFggMf0um0G3RRqVSwsLCApaUlrK+vY21tDcvLy26+XDqdDiTMxj24Gldzk8n379+7fnhtnJlEeCbbstks5ubmsLq6irW1tcD0XCU8j8fx2M1mE/v7+87KX1xcBJR3xWIRpVIJxWIxoL5jbO6fjzYtMQTQv1VXn9aexNdpQxbXT4aRfgrwYWR5TRNQJLzf806y12o1NBoNLC0tYWlpKZDYYs193A6yPsYNwHjx4gW+//77wNjqSYTngEt6HhsbG1haWkK5XHZKORXgsPHo6OgIe3t7eP/+Pfb393FycuJkybw3JHyhUAjsesPKh943KiCV8Mzu+223PB+KcygIGgwGgdKd1evHw0j/SKiVz+Vyroyllp6EZ5KOpap6ve5ec3NzTpFGd1e3c1LC++2k6tL7hP/Tn/6E7777DkdHR46AYYMrAAQITwu/tbWF9fV1l7xLJBIufifhe70ejo+Psb+/j3fv3rlOQ8byVODNzs4GdrzRBU2vQdWKKgzSaTu+ipHvp+SXfQ3cUCNsK21DEEb6R4KuJ623bhFF8KFl1nphYQH1eh0LCwuYm5sLbAhBsvtTYBUav/uE14k3X375JV69ehUYWe1PnNFrSCQSyOVygc0tt7a20Gg0UCwWXd1cCc+5/M1mE3t7e86tp7qPbj03wFDCayOSts/qpF/grrOPW1yzbOfrEQC491OK63flGcbDSP9IqHUsFosu6aYuKWPZSqXiatO07D7ZHzu+WRNZVL+R8K9evcKXX34ZGICh7bHAfV0/PZW5uTmsrKzg2bNnrnJQqVRcoo01dM4EYNJuf3/fdRuyTBaLxZzclvvTc+dadtlp7Z07+tAlpyKPpM9kMoGuO7+5h56BP3hzUg7DcAcj/SMRi8UCrivd80wm43rE+XPqy7nrC914X2DjZ+f9h1UlvSyTtdvtwEy7b775Bru7u+h2u/e65biohCn/uLElhUCcusNyGvX7JycnODw8RLPZdNtsdTodVwrkfWFYk8lknL6A8TvltGyoYfLt9PTUiYaosed50oUPmw+giyAlu3wZ6R+Gkf6RUOKQ4HzR3S+VSu5VLBZdEktr7n5mXuPPMHdepa7ciOLbb7/Fy5cv8d1332F/f99l6ilr1UGaWpLjIE3ucbe8vOzq8ZlMxhGe+nZa993dXTSbTbTbbSfAIeE5CYeeDi2+Ep5E9PftY9mNpT7eYy4QWrr0+xi0k1F76821fxhG+kdAy0l8sLUkVS6X3Yu7t6qLq3E74ct1leh86GndO50OWq2W24ji9evXePfuHVqtlnOx2e3H86UrTyEQm3hWV1cDmn5NSGr40Gq1sLu7i93dXezv77tJQeyg0woAj6Ulx5ubm8AQDE4Q1u44uvY6QYilTq98bpEAABQuSURBVA1/fMLz73SenlYqzNJPhpH+EVDC08oXCgWUSiXXLloul50rz/lvflZ+HME1aaXDKLiLbbPZxLt37/DmzRtHdk7vUdfY79ij7p2y2tXVVafpLxQKbrsrWuGLiws3Yefdu3f44YcfsLe3h6OjI9fUosfS3n8NX+iah1l4JTwTeFqu03uuVt0XGXFhDBMfWdZ+Mh4kvVqnZDIZydZauvWM12u1Gubm5lCtVh3Zad112KPGokp4TWqRbCw70fXltleMpZvNJg4PD90utmoh/Uk7pVIJtVrNWfaVlRUsLi5ibm7O6QJ8F/zy8tK59Lu7u/jhhx/w9u1bHB8fB4Q+QHB7aZ1qqwsIXW16KxTQaP87P4tZfy6Seo90vJg23+j/j3oeYXMPDEHYEI0HkEqlsLq6ikajgY2NDWxtbblhlIVCwQ14ZPJqXOJJS25+bMsZ+t1uF51OBycnJ24XW07S5YaWYaOldVGq1WpOP7+6uuri9nK5HJi0Q+ENCUopb7PZxPv377G7u4ujoyOcnp4G3HS+V6XFOtGWJGWpT6WyDEW0pZYhCO8RB5NwMaT348uPteYPBL0Fs/STMdUQDe5K+qkjHo+7TPjW1hb++q//2mnS6/W6Gw7J2Xi6aQNwZ31YWtIMPN12tqO2Wi23J/3JyYkjvw7U1FHQqvxjLM0kXaPRwPr6Ojb+bcpOvV4PDN5QiS9JTMJ3u10cHh4GavAkPN1oEopWnpULldfy7weDgdvog9tVk8T0TuiZ8Hpub2+dEk+n50xK0vlhRpjIyRDERNJns1n83d/9Hf7qr/4q4HpFASREPB5HsVh0raGFQiEgOPFdTVo61YuzNt3r9dBut9FqtbC3t+dGah8eHjqiU2yim2D4dXfqAnQHWR2rtby87CS+Wi/XcwLgzovS2v39fTSbTSe60flzjON1br3mLgA4cQyz/+yA09HfPDa3wuICoF2JbOrxh4r60AVIKwdG+MmYSPpyuYy//du/xW9+85sf63x+NqCF5n5zFJ5wgwctG/Gh1KGh4/rO9/f3sbu7i729PTSbTTd4gttbTZqWy1iaLnG1WsXS0hI2NzfdXPqlpSU3g44W2J94Q+ELS4HHx8eBvAEJr14FS39asuQxSFTu6qOjs1iS4+Kh9xYI5gf4vZJex2D594Pegi5CYdtyG4J40NJHHdls1sXSfNBIaADuYaZV0iw8rTu3tSLhDw4OnGadIhd/SgwQlM+qS10oFFCr1Zxm/tmzZ1hfX3ehhz800+8E1G45En5/fz+U8HSfk8mkW2zYe8C5edpyq33uzPjrYsZ76H82k3tcQKilD7PyvCZqA/R8zNI/DCvZPQCd6KoJOR1iQReZ1ombXGgWnnvfcfNKdXnDstK+Xp66f3XnKaFlOyyn7fjuvJa+6HmQ8Pv7+9jb20Or1UK323XtqcD9FmEtV/I4AAKbeuokG53Jx3vGsEhLckxucmHgoqQhwTgrn8vlnDbCH95pCIdtYPkI0GLqMAfgbkwV957nTrSMZ5msa7fbbmcc7lSrHWb+/VV5LhOFHEqxsLCA9fV1N4BjdXUV8/PzgfFaPuF9sc/p6alL2qnaTqW1mpz0O+fYQ0AFHz2as7Mz59KHVRp4z3yREs9Pu+/8Tju9N76smF2LukWWYTxsA8tHQN1jjY/9BB1LbFwA+GJ8Sy/AL0P5x/Iz0kp4Ttxhwo5z5/ydan25Kjej0NyCbsRJDTwJBSCQYc9ms6406RNe9+sLI7yGKzpmTO+tr10I09Kr96P7A3AUF88r6s/rQzD3/pHwm2M0NlY3/ujoyJGdri7j07DBFvqZmqxjRjqfzzuXfnl5GWtra043oPvK+RteaFMK6+Usy7Fbjmo7ltNIJsbFJDybaCigicVi9yw8XXp/UVPCqmpQj6PDOnS3m7CQh+eYzWadCEnnCloS72EY6aeAWhDNgDN+p1X3M9dhFotyVSAYO2uWnISv1Wqo1+tYWlpym17oLHo/7NA4WZOJOtOu1Wq5ygEtPGN0hhQsg/lqOS4kdOdZbvSv1Sc8xTOU7PJaqQzUHYF8194fAJLL5VCtVl3rsk7tNUyGkf6JUL28brroi0oYFvhZa0Iz8zqKiy493deFhYXALD0KbCja8WfH+4vR8fGx80RYOej3+64qweSfymp10Adwl7QMq8OzecYvzQHBshw/12/O0XAkrESnn5NOp5360O8jMNI/DCP9B0DLYH6Hl7+Ljd9lB9zt6EpXN5PJuPITM9Larqvjo4fDodO5K+HZiqvls3a77XINJCkXCy42JLoSnpZTW3xZ6tOkne4wq+W1cQsavQd6O1qWU68lLGPPQSb0gLRT0Fz7x8FI/4HwE2862JFTaCgtZZ2aFotkV+vOhBnHTVF0MjMz4ySzFMGo8EbjYUpgSUxWFGiNSTC62HTj+dLYmAsMh1+wBu+HL2GE5/1gToBjtJiHAO7KfZPk3aye6OSfcrnsJhL5SUzDZBjpPwAqLtE+e91BNZlMBra3Bu5iZiWaNu6QeCr3ZcjQ6/UC5+D335NEOiySVphhho6l4iJDYpLw2iGngzX8jSO1vZVQd14nDXE6Ll1xCnpub29DdwbmAsl7rd6Q1uYfMzbccAcj/QdAm15IIGbo4/H4vYy9uvtqXVXH7rflas2aZSx+rRNl/Zf2metxWeqi1VU5LQnPffGYs/B3lJlUh9d7wp5+zgykZU6lUm6MNTX4/JoLhoZL6knxPivhzcpPByP9E6ExppJehzzSMqlrT9ELM9hq7fUBVnedVpuWWxtRuACoqk/LY1xgSHbNFRSLRdeBxxq3Ep5dc5q0e4jwvD7G3XNzc278N+PvmZkZXF5e4uzsDAACAzb4O7+Wr0lAbfSxOH56GOk/EH7nGZtu+HPN4gMIxPNhgyO0KsCEnG7hpJp0WnRf/KILDmNqWlxO+dGNKHyXnucxGo1ceywTgHpsvyznTwzm1B7t6eexhsOhI3i/3w8seno/gLsFVBOO/tyCqKtGp4GR/gkIU5mpJQorWZFI2gBDySuz7iQe43NO0mFSTkU+OkKKx9C5ciQJZ+SxvMX5+9xqKmziDQBHRsbwjyU8BUXVahWNRgMrKytYWlrC3NxcYMfawWCA6+tr9Pt9l1PIZDKBgR1a4qQHwWsEgnMLtMxnrv5kGOmnhLrR48jvv/yuPCraWAbze911Iwfu4sKv6daHCVf8iTa5XC4wg5+7x5LwulkHcwEAXJdbmHcxTnijLb8spzUaDdTrdczPzzv1IEOIm5sbl8vQMl4qlXKLis7Q00Sdr94La8oxjIeR/glgfZ5u+Di5KKGTc8IaSPji5zJhR+Lrhg4kXthn6LZSnKZDwlPco7vHsg6vST8dguGX5ZRY4xaaQqGAcrnsZghWKpXAbjex2J9HanHqkO+2p1Ip53HwnjCRp+pD5jr81l3DwzDSTwG17upaqmRUf68bPPDh1Oz6uGPQ2tPN9xt0xvWkU7qrm2by5W+ppXvLqWxXN4XkFB9/Ew2SUWvx/kYg3AvAP54PX+fAF/sGdPFUBaSep78omXs/GUb6J0B14iSwlsnCdORaR1dX2rec/HxdTAC4uFunzvgZepayuLsOk3YUxOgAS34GraYmDXu9nuv318oDEJQQ68htlh61G0+38lbLrZ10YeOr1ZXXuQWxWOxeroOk13tlmAwj/ZTwLb1fF1f33f87LbFpmQ0IdqEBCAhp1H33a/608rSydK9LpdK9gZiaPFQC6tRaJbw/AZdCIy2l0TVnTK7bUbMCMRwOASCQMGTpUcVDfp6E94/XS1ef4YeS3uL6x8NIPyUmufcPxfZ8vz/DXd1l4M5l94/pq95o5elaU3Cjk220MYcJRM1+a4ssJ9eSRECw447npv0FWk6j5WdjTq/XcxOHmLBk3kC3ttJhoLqQ6j3WpiI/wWnJvOlgpH8C/NieCItPGe+qR+DXodWSk0iasebfECS8kl430tRmFkppSURNiGkjDVV3FN7wODqmWjPv/F4bimjFB4OBW3A4DpuaBHoXqvKj1WaHooZDeo/pRamXMG6klmE8jPRPhF8TVlebv9esuJ/5Zu1eP8Mv9bEmTfLTzdb+e52QS6vMDDmn4Zyfn9/7LD/ZSDecm0kyG69lM7r3GsJoww/JTO+CYQPr8ByaQdUfKwTsx1fiq9XX+8aFRf9mXCuuIRxG+idCS20kqY6ZUqvvf08lmq+m80mvu93qRhOa6NKFgKSg9dPwQs83DLTAtPIkvXYGqjDIl/5yMdDseq/XczV4zq/zB3Ewj6DjxJjw9NuW2Vas+RP//8PwMIz0T4RPYirNaMFZb+aD7ktJ/f5ztdxav9ZFwHf5FRr/jisl+ufOUCJsVxi64voe/ktvQONuQjvsWEb096qj26+ZeMbpasHDau+a/1AlpD/f3zAeRvonQK2szoQH4DLs19fXAcIqkRk3+9beJ76+Vy09oXp9rQroYEkeQ4mpoYgKY7gAKKGur69dJ5yW67Qq4VcttP/9/PzchR5+yVAHc+jUIbXkvjZBz003ufDHfhvGw0g/JbS0ppaSlpHu683NjSOuxt60gmEPuMbuPBYQ1PrrhBm65IzJSSKNi/3GnLBeAdbZSUodj+VrDjS7rlnzsAQf3fGLiwvn3ZCYWq/nuYb1FPj3XuW+7BjM5XI2FHMKGOmfgHHEp5UHECBxmPXhz8O65Vij17iZpTbV6Gv9n0T34+Iw0mteQasKl5eXLvNPL4KfSfdbZcH6fq2t6/3RJCYrFyQ9368xvBJek5xaouTkHEp9w0aAG8bDSP9EjEuS8UFXkY1aeHoF6hoDd646QXea/6prSxKpW6/DOUlKEsofqJFIJAJKQiU9J9hwoVHS87M1dBiXM+C9oZLO/57v06k+6i34hOdATCoOG41G6GRgI/3DMNJPiUlZcK0p+yIcH0rcMBeax1JX2T8m/1ZJrw05/NpvCtIknBJeR0hrYwu9CD9PwHPXLLqq9cLuj94bP/HoKxSBu5HXlBlXq1WsrKxgbW0Ni4uLqFartp3VlDDSPxFKZCWttp6q7t4ntb7Hd7P9xpFxQh09hq/y0/PT81FSaRjBYxDqBeiuvLpIhWXW+a96PmELpSYhw4ROQJDwuVwOc3NzbtNObthpgzGnh5F+SvgW03ex9UH2k15+nO271j7pgWBHnV+j5/koqVSEQ1UelXQ8p3Fk5efx2rTk5xM9rJynXgnjb4YzuqiMa4xh6MJrpUufzWZRq9WwsrKC7e1tbG9vY2VlJWDlzbV/PIz0T4Tq4ZX0Gqf71lJLaRpTh1lp31KrFVUXmvE3SUKNvX+utOr6fVgI4ife/PPx3W8/0aYSZFYv/G236DEofLERs/S08CsrK9jZ2cHOzg7W1tYwPz9vCbwnwkj/BKg76sfkSmJ1+X3rzQdbRTCaqCNUheeX/9TiM4anV6HJNxJOVW56TnodYQvPOHmr711oGVA3zNAWW633+269zghIpVIoFAoBC//8+XNsbW2h0WgEdqm1Ut10MNI/ET5R/YGOvtvt6+WpY9d2W39xAIKCHV+mqy6zn3hjFxqbWXSQJCsKfjztk1BdfZ4Lr1nr/b5QJpfLOfmtjgxjNUDn8vNecL4Av8/n847w3JZ7Y2MDjUbD7V1n8+6fBiP9B0Ct9ezsrCuF+a6zxv6+BxDWi681ftXvq0qPiwAfeK1767ZW2tTiD9hkPV/jfcInvH/NOq2H0291rDZdbxX6kPDsg9eaPxdJDvOsVCpYXFzE+vo6Nv5tW+56vY5SqRQY6Gmx/PQw0k8J38Kx7TSdTt8T2YxzlcctCmEJNr+bTl39MEuve9lxfDU3qeBuumdnZ4FRU6oOHFd71wQdFXyco6+juXQsF7vqWI8fDoeBkd7+Tre8n8ViEfPz81hcXMTS0pIrzXF3HCP8h8FIPwVoVRm75nI5xONx14IalhTj+8ZhXNwcFhr4Ih2NZdWDIMF0hDWJzw0rfGurKjs/1Aiz7KqKI+FJTN15RuW2DDmU8FxsANzbd56frdN7xzUIGR4PI/2UoJWdnZ1FLPbnLZ41yx0GP9PtP6zjZLr8N+zlv88PI0gy3VaaxNexWDpp1y8n6jXrHL5SqYRKpRKYxccpu7ppBc9LpcKaYKRqkOEMNfUcrskpuvqZFsN/OGLjHtR/g00l8KCCGL+ve1L9O4yo4x7ccYvCpPdqGKGiIBKNVp+E13n2auE1JwEgkJXXabflctm58kp2v2au6jtt0glrLebCwhe783yyG+EfjdAbZaR/AsIy3uPwGKs+ze/D/jZMfRdGNrW0fiLN30SDCTtm5nWHW91CWyf2hFlh/3x8ybGGQH6PwjglouHRMNJ/bDxw7z4KpnnQ/fNRwoX13fuCIV3I/Cy9bkahLcOPtcBhyU39+WNCGMPUMNJHFWGE0wy9L8wBxktrP5b1DXvujOAfHUZ6wx38kGASzOr+YmGkNxgihlDSm2jZYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIYeaB38d+lLMwGAw/GszSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaI4f8DOamMD0Io4J4AAAAASUVORK5CYII=\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 31\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 32\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 33\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 34\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO19S3Nb13rlAoj3gwAIEnxTpChakq99K5V56qbqpgd9pz3LvKtnPcko/6Cn/Rd6cqt61pPMMupRKp2KndiiJcuWLZEECT7AFx4kQaAHztpcZ/OABCjda1vnW1UokiJxcM7RWft7re/bscFgAIPBEB3Ef+4TMBgMf14Y6Q2GiMFIbzBEDEZ6gyFiMNIbDBFD4p7fW2r/V4TBYIB6vY5//Md/xD/90z8hkUggmUzi+vr6QceLxWJot9tYWFjAH/7wB/zmN79BJpP5wGdt+BMiFvaP95He8CvAYDBALBZDLBZDv9/Hq1ev8A//8A9Ip9PIZDIPIj2P12w28emnn+Kv/uqvEI+bY/gxwEj/kWEwGODt27d48+bNBzvm1dUV2u02YrFQw2H4lcGW7o8QicTNWv4hiJpOp43wHxGM9B8h1A3XBWDcY/C9iUTCSP8Rwdz7jxwPTeL1+31Qov3QYxh+mTBL/xGi3+//3Kdg+AXDSP8RwrLshrtgT4fBEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSP8RwrT3hrtgpP8IYdp7w12wp8Ng+ID4P19s4w//8//iv/6v/4ej1uXPfTqhsH56g+EDYf/sAn/3v79Erz/Ai/opqvlv8D/+y29/7tO6BbP0BsMHQvfqGr3+zQDps27vZzyb4TDSGwwfCMtTOfy33z1GLAbMTWbw33+/8XOfUijMvTcYPiD+/j8/x9/9p6dIJX659vSXe2YGw68Uv2TCA0Z6gyFyMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFI/xHiT7FV9WAwuP+PDL8KGOkN9yIWiyEWi/3cp2H4QDDSGwwRg5H+I4Ba4UQigXj8w/63ttttXF1dfdBjGn4+GOk/AjCG73a72NnZQavV+iDH5WKyurqKiYkJI/5HAtu19iPA9fW1I/w///M/4/DwEOVyGefn57i+vh77ePF4HPF4HOl0Gp9++in+5m/+BpOTk7i8vEQmk7EY/1cOI/2vHIPBANfX1zg+Psb333+PV69e4fT0FJlMBt1udyTSk8QTExOIx+NIJpNIJBIolUpYX1/HxsYGpqamEI/H0e/3MTEx8We4MsOfCkb6DwiWtT6EFbyvRDYYDDAYDNDv93F5eYnj42PU63UcHByg0+kEziXsWEr0iYkJR/R0Oo1sNot8Po9qtYqFhQVUKhXk8/kA2QeDwYOu80OX/szjGB9G+vcEH2KSkHifh9Enhv7M7/v9Pvr9Pnq9Hs7OznB0dITDw0Ocnp6i0+m4+Dsej986npI9lUo5oudyORSLReTzeRQKBUxNTaFWqyGbzQZcehJ+VAL756/3zP+9f9/8n/2FNRaLIR6PG/nHgJH+PaDWtt/vhz68wx7i+4gdRgz/83q9HrrdLg4PD1Gv17G3t4fT01NcXl665B4z+foz3fh0Oo1MJoNisYhisYhSqYTJyUnkcjkUCgUUCgVkMhn3Wb1eD4lEwhF+GCH9n/Xc/ful1+rfs/uIzGvh9XzoqsXHCiP9A8GH9/r6GtfX1+j1eo5YtIr64r/7x/C/DnuRJPzMXq+Hy8tLnJ+fo9FoYG9vD81mE5eXl+6zJiYmMBgMnCXkSwlPgpfL5QDpM5kM8vk84vE4Li4u0G63cXFxETimXkeYN6JeCXMPes/4s5J+2L3zP4fXl0qlkEqlkEwmLcE4Ioz0D4CS7+rqCpeXl7i6unJJM1odJRkQtGBhhFdi+1/1RcJ3u12cnJyg0Wjg+PgYnU4H/X4fsVgMiUQiQCpaZv4uHo8jkUg4956LAL8nkQDg8vIS7XYbrVYLsVgMqVQqQHolbpjHQsLzfvV6PVxdXeHq6uoWkTWhGEZ4/m08HkcqlXKhh95zw90w0o8Jn/AXFxfodru4vLy8RXp9EH3ihx0zjOD6ur6+xmAwQK/Xw8XFBTqdDs7Pz50VHgwGSCaTSKfT6Ha7uLq6QiKRQK/Xc5/tn48PXaj4N5eXl2i1Wjg7OwOAAOl9V12PEXa/uEhyodQFg5/JRUnvlX4OFy6WD5PJJJLJpPUHjAgj/ZjgQ6zWttPp4OLiwpFeY0yf/GEuqB/rhhHdt/QkUK/Xc+52KpUKWOvr62vn7mvoAcCFCLyOXq/nPAPgJl6OxWK4vr5Gp9PB2dkZrq+vkUql3DF5jnp831JzoSLhLy4ubnlHfF8ikXBxOt+vnzEYDDAxMYF0Og0A7jrVEzBrfzeM9GNAyUlrS9LT0tNK6oOvi8BDiO97AX5cm0wmXXyey+WQzWbdQqSfF5YnIPF1AQEQICAA9Ho9tNtt9Ho9V6/XhYdhBd3/RCLhkn4AAp4RSc+FhveMZUN+Ls9ZzxP4SWrc7/eRSqVu5QUM98NIPybCEnj6lQ9wv9935Kf1CbP6elz9SvB9GpOTDIzHfcKn0+lb1hIIWns/QUhvgVY0k8kgm80ik8k4y06Cc5HQBU9zCZoX4DlwkaBrT9LzPjEMoavOBcMPDQC43+siZRgdRvoHwreaw/5d3WUS467SnhKc3+txADiiAD9Z4Ewm49z6ZDLpFhY/kRZWJeDnMDRgrb5YLAYy+YnET48Kyc4Yv9VqodvtOg9Aj5PJZFxWnedKa89FEvjJq+C98RdF9SiY+ON5mJV/GIz0D4Sf8FKSjVI6GlaWAoYLfnQB4OfROjL5pe4wSeFn8CmlZXiQyWRc2W56ehrT09MolUrI5/PIZrMBwjMmPzs7Q7PZxMnJCTqdDnq9nvMScrkcut0u8vk80um0e7+fi+BCwd/TbefL90joXcXjcSP8e8BIPyb8erfG6+oma6Zc//6unxVhdW9+T0JcX1+Hus8aN2s93Afr3Pl8HpVKBbOzs1hYWMD09DSKxaIjfCwWczE9AKcPOD4+RrPZdLE+M+p09+lhkNTqpqtrr6EB43n9nRLez22EeVuGu2GkfyDUwjN+9l3m97X4RJhbzp+ZT+h2u2i32zg/Pw+43CQXicXPBH4ifTabxdTUFBYWFrC0tITFxUWntadrfn197RaSwWCAbreLs7MzR3pa+mQy6eJuLoYAbpFek3iJRCIgGVb33ic8Fy+ek1n6h8FI/wD41tp38e9Slfnvv+9vgduyXL+CcH5+jpOTE+dun5+f4+LiwtXB+QLgsvGsbxeLRczMzGBhYQGLi4uYnZ3F5OSkS8INBgN3nHg8jqurK7TbbZyenuL4+BgnJyfodrsusQjAJfOYXyA5eb5ao6c6kCDh6TH5JUq+xxceGUaHkf494LvxPukBDP1eMUp8z+9p+S4vL13tvNlsYn9/H/v7+87d1kSX1sK13JdKpVAqlVCr1TA3N4eZmRmUy2XkcjlnnUksElCt/PHxMc7Pz3F5eemOzaw6PQxWNGjlWUpkCMCFxO8V4Gdy0WHGn+/hZxjhx4eRfkz4BFUX3xeHKIHftxnEVwG2222cnJy4Zpvd3V0cHBzg9PTUqfGU8EBwAYnH48hmsyiXy6jVapiennbZ+nQ67QhH0vb7fedVNJtNR/hWq3WrPMlrV6vd7/ddvkHFTLFYDOl0+lbOgclG9RCYvZ+YmHCENxd/fBjpH4gw8vuWWol+X9weBk1aKeFbrRZOTk5wcHCAnZ0d7OzsYHd3F4eHh86118SXngO/plIp5HI5VKtVVKtVlEol5HK5QG1dS31XV1dotVpoNps4OjpypO92uwB+kubSOlMKrPp9xvD0UFi2Y5LQt/RMUvK9tPS8176YyDA6jPTvCSW8CnH4O/27hyTtNKZVwu/v72NnZwdbW1vY3t5Go9FwrvZdSS6eZzqdRrlcRrVadYk7El5dbCX80dERGo0GDg4OcHZ2hk6n40powE0szyEcuVwOyWTSLVj+4sUEnkqJSfR+vx8o9TEPoKS3uP5hMNJ/IPgxPf/N/5v74nZCLTzd4vPzc5yenjoL/+7dO2xtbWFvb8912dGiDiM86+JM4M3NzaFcLrvynLrkdK07nY7r5mML79nZmSNeKpVy3kM+n8fk5CQmJydRKBQwMTHhCKuJOVpuXisXI9X7JxIJdw7M+HNh4KIx7FoNw2Gk/wAYZsXDSO//vYIPr+/SUwFHwtfrdbx9+xZbW1uo1+s4Pj52cbw2n/ifTT19oVDAzMyMy9aXSiUn3VUrzwXn/Pwc+/v7gUEdnL/H62C4UCwWUalUUC6Xkc/nEYvF0Ol00O12A1bcDz+4GHHhYUyvng4FQIlEIlD2M9KPByP9B0JYln4Y6f3vw1x6P4Yn4Xd3d7G1teXi+GazGYjjw0Q4akWz2Symp6exurqKtbU1zM7OolAoIJlMBmJ5tfLNZhO7u7uo1+s4OjpCq9VyhGNZjhN4mCOoVCrIZrPOirfbbeeuc0Hx6+4axqg4h9l71elrstKSeePBSD8mlKA+SOT7hDlh/66ddLSwHF5xenqKw8ND7O3tYXt7G9vb2y5x12q1Aso738rzPCi3rVarWF1dxdOnT7G2toZqtRpw7fV81Mrv7Oyg0Wjg9PTUudZq5fP5PKampjA9PY2pqSlMTU0hlUq5jDsbd7TzzhcZ6UQg/k4bfJjcS6VS5t6/B4z0D8AwbTwwesIu7DjqypLwHHrZaDRQr9dvZeqpvAuzdmrhM5kMKpUK1tbW8Pnnn+P58+dYXFzE5OSkc+3VylOFx1i+Xq879R1jceCn5B1LfzMzM5iZmcH09DQKhULADadYhyEEz0s7E4Gb0IaLhSbxSPp0Oh06hMMwGoz0D4Sv+76P/Po+/6taOrq3KryhW8+Y+ujoyLn0/vALrZOTTKlUCuVyGaurq/j888/x+eefY3V1FVNTUy7Drlae59PtdtFsNrG3t+c0ANrpxhi8UCigUqlgZmYmUP7j53e7XVe+U329Nv3ogEsAtzweSoATiUTodRtGh5H+gdAauj/Ygl/vk9by6zDCHx8fY39/H7u7u9jd3XWE55hrvzznE54z8CYnJ7G0tITPPvsMv/3tb7G+vo5areb09f6UG5bp2u02jo6OsL+/H6gOaHlNBT4zMzOoVCooFApIp9PuHtHC+y921XEh0OEZJD3de71OHURqVn58GOkfAN/C68MXFk8Py9KHJe2U8AcHB9jb2xtKeL53WAw/MTGBXC6HWq2GTz75BJ9//jk2NjZc8k6FOHpddK/Pz89xeHjoQgkVwzCWZ/KuVquhWq1icnLS5QjojvvdiBTwqMdAQY+vXKSLr9N5dKEdR+xk+AlG+jHhkz2s/3vUY9xFeCbuSPiDg4NA77rvYSgBSKx0Oo1KpYLV1VX85je/wcbGBubm5lAsFgPZeh907U9OTpz6jrkDfo7G8rTyqupTzQKtszb9MCHHBSCZTLp6/2AwwOXl5a2QQ78Co3UoGm7DSP9AhBGfD99dxPcJz5g1jPD1eh2NRgOHh4c4OTlxU2+V9ISGFSRSsVjEwsICPvnkEzx58gTz8/MoFouBLLqfSWcysd1uo9ls4vDw0AlxfCtfKBQCVp5uPUtzPJ6/NwAXDZLfl+xyMdMKAe+r78lwgTOMDiP9A+Br4vm9P6Iq7H2+hdcsPV36RqOBnZ0d7O3tuXiahNeM9bBsPZtppqam8OjRI6yvr2NxcRGlUsmNvhoWdrCxhroAJg05lJILCq387Oyss/Ja+uN9US+GtfXBYOC8DI7X8kdysWSoiwNwM7CTIYGqCM3ijwYj/Zi4y70HcMslVUvKv2MZit1yfpZ+d3cXjUbDtcqenZ252fp6HAUtPMtzpVIJCwsLePz4MR49eoSpqanAJJxhhGcCj1n7w8PDwO63auVnZmYwOzvrrDxzBADcsTib//z83O2xxzId4/hsNuvOjQsCh3Jo4o8eAt/nk94wGoz0D0AY6e9q+girw6vS7ujo6FbS7uDgAMfHx47wqj4j9EHXOLlYLGJ2dhbr6+tYW1tDrVZzqrswgmjZsNvt4vj42C0+x8fHgfn0auVnZmZQq9VueRA64IPXyOEeXEC4QKmlZ3KPDTWXl5eO+FwQGPszJDDSjw8j/RhQUivZtUbuu/f3SWsPDw9vleVI+Ha7HaqpV+Jrhx+VcTMzM1hbW8PGxgaWl5dRqVQCApyw61IFXqPRcI08rVYrMM4qmUwin89jenraWfliseiOD8DlKtgReHh4iGaz6SoPg8HAeQVq7ZnxHwwGbpcelh157f72W0b68WGkHxM+sZWMwywo/47NM9otx/idpOeACk3aad4AuAkhVICTTqedy72+vo6nT5/i8ePHqNVqAQGOn7xTt77VauHg4ADv3r3D27dvcXBwgHa77T5XM/azs7OYnZ11GnvfyrMz7/Dw0OUGzs7OcHFxEWisoeVmIo8LqWb0dbIO/1ZlvaPOIzT8BCP9A+An8Rijhqn0lFQcXqnNMxyCoXX4drsdkJkOk9iy+URn3a2uruL58+d49uxZIHnn1+P5lXXwTqeDo6MjbG1t4fvvv8fW1hZOTk5uad65sHC8VrFYdMfnvdEJO/v7+85z4ZSdwWDg9qGjtSeBuWgwgccFgqSnV+DH9IbRYaQfE75sVne2oaVTwQ5J5U+8qdfrgQEYLI1xvp0qznzCs0zFkdOFQgGzs7NYW1vDs2fP8OzZMzx69AjVatXNu/NdYM0xMI6v1+t4/fo13rx5g0aj4c4FuJmcW6lUMDc3h7m5OVSr1YCqj9fa7Xbdwra/v++sfLfbDQwQ1XZazdCrNl/Ve0wi6ouLmVn50WGkHxF+bK6NIBzuoC2ihB/f6sSbra0t7O7uBkjBtlI/XwAER0QzoVYqlTA7O4vHjx/j6dOn+OSTT/Do0SPMzMwMVd0BCCTbTk5OHOFfvnyJd+/e4fT01FUL1MrXarVAH7669gxhdH7f4eEhTk9P0Wq1Ah6DSoW5KOkMfCCoLuR7dRSXxfMPg5F+DKh15I61mo3WB1a7xTqdjqvB68QbbY9lSc4vASpUeMPYmmW558+f48mTJ1heXnZdbn7yTgmvXXS7u7t4/fo1Xrx4gR9++AEHBwdO+Qf8FMvncrnAqGx/UdFkYKvVcjPxSXjth9fr8EtyPE/fw1GLz3jfrPzDYKQfEb473Gq13N7wnPKSyWSci0vLx5HRYYTnAAxKXHUHF19uqlN3WYdfXFzExsaGI/zS0hKmpqYCyji/mYaE53nt7u7i22+/xVdffYVvv/0W9XrdzdobDAZu7h0XmEePHmF+ft6N2NINMZT0JycngRn8OpVX3Xp/RJd6Uv6sP3X7LXn3cIxE+lH05B8rtB7PBBWt9tHRETqdjos1Ly8vA3JSNq2wBs8YnnPmSC6dET/sXpP0dLPn5+exvr6O58+f45NPPnGE1wGXYVl6uvSnp6fOpf/3f/93bG5uYmtrC8fHx66Nle436/4rKyuhnoSfuzg7O8Pp6anL1vO6SHbeI38Qpz9PgN+r52N6+/fHSKSP8s0dDAaO7GdnZ27OfKPRwPHxsROQcGtnEqHf77vYljp6fZ/Ofh+WoQeC0tp0Oo3JyUkXwz979sxZeCbthunqtWTIGP7bb7/F119/jc3NTfz4449oNpvodrsuTEkmk25M9srKirPyYWIcTeK12+3A1lp6PN0Gm7G5ztjnOfrbXwG4dY/ukjwbhsPc+3twcXGBRqOBd+/eOWksLXWn0wEAt1MrSReLxZzQheIbzdBrL7xv3bXer40lvvDm6dOnTnzDYRgaw2sJkclE9sfX63W8fPkSL168wMuXL7G9ve0sPAlGr4Jy3tXV1VBvAridv2i1Wm5TS4Y+sVjMkT2fz6NQKCCbzQZIr/JkJjWZKOW90AYeG4H9MNxJesarUbuhdEUB4PXr1/jiiy/w5s0b1/zCTDsHRFA7zhhXm1aazWZgRxhfcKM1cwAjEf7Zs2fY2NgY6tL78TE9lcPDQ7x9+xYvX77E5uYmXr9+je3tbeeGa+KOyrvZ2Vk8evQIKysrqNVqAfVd2D51tPI8nibf8vm82/e+WCwG2nDpync6HdecQ+KrbNff6lpzIVF7Th+KO0l/fHyMf/mXf8Hm5mZgRf7YQdL3+31sb2/j+++/dzE4m0b4N9owog8wE2XabKLlOFpUP2HHpB1Jn06nnfCGMfyzZ8+wsrLi6uS+S+8nHc/OzrC3t4c3b95gc3MTm5ub+O6777C/v4/z8/OAtl4VfmHJO7r1/qhsHdVNcRFwk3XPZDKYnJxEuVxGpVJxW2ilUil3T9TKU4LM/IJPeu6iG7bpRZTD0VFwr6X/4x//iD/+8Y8AfnJjKdb4mKEWbHJyEqVSyTWBkPBKjk6n44gHINBOSleeFumuufTaKcc8QaFQwNzcHNbW1hzhV1dXXcmMWfowwlMK6yfsfvjhBxwdHQVccD2HiYmJgJXXnAFLZUBQqETxkTbVcNGilddpuZywA8CFOrxv3W731kaXXGh8L8Cm4o6PO0k/GAzQarXczxcXF3/yE/olQGvkJycnTi+uLriKRpjM0zntfOkcuzDr7h+PRGECjXX4jY0NrK+vY3l5OdDkchfhj4+Psb29jW+++QZffvmlS9hxEo6vB9DPr1QqWFxcxPLy8i23PixfoC20JD1LctQUTE9Pu51x8/m8a7AhaXkcElqn9fA8ubjwpQlRI/1ouJP0sVgM+Xze/ZxOpwP11iiA8TnHN6n7raUqxsP6s064uWurKe0Tz+VyrqFleXkZ6+vrePz4MVZWVlyDi2bp/f59uvQnJyfY2trC119/jS+//BJfffWV09P7AzV5TQBu7YCjbr2/A472FLCJyN/Ukq2+JDzn6HFw5sXFhasA8D5TqKSbVPIrcwZcYHTWQDabNfd+BNybvVdLoN1OUYMfLzJ25+94X5TkJPp9hGfNmjJXTrt58uQJVlZWMDc350Q37Du/K2l3enqKnZ0dfPPNN/jXf/1XfPXVV05aq0Ti9aj4hbH8/Pz8Lbfe39jS7ylgklMTeByPPT09jenpabdocVAGjYgvbdaEnU4lisfjTgfARUYTh9RIGIbDSnZjwO9OoxJN4avqhi2SvjvPpNnTp09d/X1xcdG58qwM3NU8wzLh3t4eXr16hS+++AIvXrzA27dvcXZ25nILfonQ1/NPT09jcXERtVrt1mYYwI2IhmXAk5MTNJvNwOBOVQ6S8FNTU25GHwA3E5/3jRl8vnTh1G5GHcxBEZCO5zbcDSP9B4Bq2ocJRpSk2habyWRQLpextraGTz/9FJ999hk2NjYCUtdhfeOqtNN++O+++w5fffUVNjc38e7du6GEJ3R6brlcxtzcHObn51GpVAIiHF6j1v056kun5gJwnku5XMbU1JTL2Gssrxbcl95q6zJfXCRo7Ul6bUdmAtFc/OEw0j8AKgMd1sutYUBYp5y/meRnn32Gv/iLv3Bz6ScnJwPlMR2cAdzulmM//I8//ogXL17gxYsXgW65YYTXnEI+n0etVsPCwoKT2upYahXhsBTIzTC4sSW3pGbloVwuo1wuO8Kzj17vnVpyXTA1WagLQywWw9nZmXvRzWem3+L6u2GkHxM6dllHPWttH0AgVmaJiw97KpVCNpvFzMwMHj9+7LaaevLkiduIQgUwYQ+wX4vXTL1m6e/KbGuIwQz73NwcZmdnUS6XA5tPqAin0+m42X6c2EuFYr/fd9fHfeqLxaIjvI651utQoZJWMzRM0r9R0lMPwWx/Op3+IP/XHyuM9GNA3XJfoMKXL2BSq8aONSbsVv9jys2nn37qBliqus637v5n+Ym7V69eYXNzE2/evMHR0ZEryw2Lc1VrUCwWUavV3HAMDt/g5/DFhhrO5udMP4YQXNSoviPhdQNLDYPCqghMAtKqcwHV8h33CfDLd5r4M4TDSD8GSETdgkmtkD682v/N2J1DL2q1GpaWlvDkyROsr6+7LHmYnFahMbxOqNnZ2XH98K9fv0aj0UCn0wnV9hPa8cYS3fz8vAstmGzTRBoz9bTw2jHIgZdUKBYKBRQKhVuE53XwGrS0qR4Up+n4bbdMEnY6HbTb7cBL6/qG4TDSjwi1itls1sXbWpcn4Vlzz2QyzuKVSiVMTU25WfELCwuYn593YhVVu41CeFr43d1dfPfdd/j666/x6tUr7O7uOqXdfTE8CT89PY35+XksLCy4+fixWCxQ2tPhGBzVXa/XXSzPchkrAPl83jUB6Tgtbayh7FY30mDbbTqddnE+VZC6wFLxyG4+vvRvLa4Ph5F+RNB6ZzIZ1yySTCYd4SlPJpmKxSIqlYojOoUp1WoVlUoF5XIZpVIpYAmHDYYYZuHr9TpevXqFf/u3f8M333yD7e1tl7jze9D1GvwmnqWlJSwvL2N2dhbFYtHV0Gm9lfDsGGw0GgHC+2pCLowcssFzYYhAqa0mGVV+rFUCuuoaClCC60tyVVZsCIeRfkToA10qldzmEayPM2utO7my9DU7O4vp6Wn3vlwu50Y4h9XefdGMnzXXIZbU0zNxx4k3QHC3HT+vMDk5ienpaSwsLGBlZcV17FEpR/fZHxyi020ZQ8fjcacjYBijhNd43N/1hp9B915Jf3V1dUsURNJz+g/VeHyZHPd+GOlHhCa8SqWS2/mVDzTbP7mH3NzcHJaWllz5S7vKlOh+TdkvV6m+ndtN7ezs4Ntvv8Xm5iZevnwZmHjDh96fMKPtrdydhuc4NzfnSnTxeNzF7szSc8stDrqkS81rZn6D8+jpuVC8xI47VfCx1ObPz+PGFnrNAAJk5z1ib4Oq+Iz098NIPwJoJTVGn5ycdOUnPmjJZDKgW6eqTbdwHjbfzRf00LqTKOyHf/fuHV6/fo1Xr17h9evXqNfrThSj7bG+K88kInemoQeie8rH4z9tPElS0rrzpTvncsrFYFMAABSoSURBVGHhJBzG82rhee4kI/vtaeVp6XVQBmfcU5Dkd/TpQsjcgCYDjfD3w0g/ApQ4LEMxpqf7quOsuF87W0j9MtywEpw+0GrpTk5O3PSe77//Ht999x1+/PFHVyqje8xzVYUd6+9TU1OO7PPz8y7coFvO2F03qdjb23OxOyW2OkuAGX6Nxaneu4/wmm3XzD1DEC1Z8j5pbR/ALX2+TdEZDUb6EUAC5XI5l5WmRSOJtYVUk3Qkgk94PxtNy0WyMO5leezdu3f44Ycf8O7dO7exJBNhnEHHkCGVSrncA0txWi2oVCpuIdKhH9S0NxoNbG9vo16vY39/323CwbicsTerDbpDjR6PMbb22vNYDEXokfiWnfdIx2L5xKYnFBbSGIbjXtLraptMJiPZWjsxMeFIROuoO8co0YrFouuG05q7WnIlOuNSWkJ/62p/qGaz2Qx0lWmZkPPpuQEGO+UWFhYwOzvrGl50L3hm6fnZnKHHrbbo0uvwEOYHtKauwhu18Fy8qJxjPsAfltnv990IcZKZx6A19/cN1EVBW54Nd8OGaNyDbDaLp0+fuvHPMzMzyGazgS2YaPnoCfiZ67C2W/aN091lp1qz2cTh4aHbvpqjtkk+f0Ksin9o2RcWFrC8vIzl5WXnymsikQs5LfJgMAhsRUVpLfef0118+F4VKekobB1dTXeeHXG6KSfPnR6U5iF4HB1C4uc7fMWdhgVG/Lsx1hCNTCYT2LLpY0U8HncZ588++wy///3vsbKy4rrOtEyn02OZudYpsWohtc7OMphOy2VJ7Pj42DWR6HbVSna1kvl8HtVqFfPz81heXsba2hqWlpZQq9VQLpdvbX6hWXCN5bV5hjG836zDRYZ7xOsYa85b6PV6bqNO9tjrRB0NEfg88Z4xkcdRY/44LD9eV9mubXU1Gu4kfS6Xw9/+7d/iL//yL537FoUkCUtNvV4P1WoVS0tLmJ6eDsx0oxpM42oSArgpT9GNJbmYmNNda3d3d13tm73hnCLjS2lVTad72S0vL2N1dRUrKytYWFhwWfmwMEPjY1944xNe42UlV9icfy6EJDx3ueHCpRoChgQAAkk7jiDjgE0V3PjPnp4TqwjaBmwIx52kL5fL+Ou//mv87ne/+3Odzy8KfJC1hETyaqzKGJtuPONkCnYY5zIz3mg0XJzOhhVOzB02D1/dV1YRpqam3By71dVVp6rjDDp/aytf3MIEm+7Yo4MwVOTDZBsXG6ruSFzd6IIWnnV43acPuFlUAbj5g0p6egr+UFG/kUnFRplMJpBcNQzHvZY+6lA1GYnjb6DIv6N1VgmrbvVEwu/u7rq4mdlsWklNVKmwRrelprhmaWkJKysrWFlZwfz8fKDmzvMLK3upSIYWnu2xmqWnJfU7BNlIo/0HTAbqcAvO+dc+dwCBvMDExAQuLi4C3YlMADKs8ZPHXMR0zwFWVZhLMQyHlezuAUmnSjk+VDrB1a9Nc5wziXB0dOSSc4eHhzg+Pr7l9qoLH0Z2imvm5uawuLjoMvM6YVZ1/GFDKnSQJRch3X1H1XGanWd1IpfLueoEQxmWGDnFhhae3o56DdoHoKVK9QSY5AxbMPheTZ6yZ1+3zTYMh21gOSL0QdLpN7T2dOHp7pPsjG2ZmfdnutG68zOU7GxRLZVKqFarrt9dBTYsw3GsVpgeQEtgJCf74Xd3d9FoNAKNOszdMJzQGfz5fN5p65m84zF140pNPvI8CF1ASXqqAZn8pOejjUP+PeI5VSoVt7+eZe/vh21g+QD4iyAfVD78nAzL18nJictgM0nnZ+JpVZmRp8a/Wq26dty5uTnUajXXqUeya7+6Ep4koiXl4Imjo6NAEpFeB7X0jN3VracLrXGzdvwNI7zvwYSBuRPeW5XXqhhHR5BR8ky1YdgAT0M4zL1/D6jb7A+K5IuE94c80FqR8CyBsSGGE2RJdN0Zhp16JLs/xUeTdbrHHEdcMa+wu7sbaI+llp4NNFqaYzlSd/HhIqLNM8MID9zetivsnLVVmQlNvpdfKUKanJxEtVp148EtiTcajPQPhC8FVVUdG1b8jDyAW2TXYRu0WrVazb2q1aobLOm35NKy+7p0XwDEufTU1FMX0Gw2cXZ2hqurKzcrALjR0tPia/2bVpmDMVVpx5BlGOF5bJbZGCIBNwM+9WtYLM8Enm6TRVmxJfFGg5H+PaAEU+28CmlIRhKcD7tucMGpOuyAm5mZcQ0xvgvvT8fVrbJ8aS/LiiQ8W2OZW2i1Wk5fwAVES3O09FxYtDKhLr0m7bQCQWh/AhcU5i1IUrX0qiMglPDpdDowT99c+/FgpH8A/K44H7TiGqerbJcx8uTkpCO7Ttcpl8u3yM7jqeZcZb1Kdq2Xs0VWQw3tYSexWYbk5+k5c2DF9fV14LjDsvR+YpJk1Q0t7/JSwrrlVJSUy+Xcrjl+85Dhfhjp3xMkuA7BZBxMnQMFLCR8Pp93hFeyMxPvD5PUTLx6FTpEglNk2DijTS5aUWCszPidRGfMroIeJigZ82tFQpN2fhWC98VX8fGlUmWKhHRSUNg9ppfAJCdHkVF1aFZ+dBjpHwi1ZnRZSXQms4CbzkQ+uEp4zszTUVoqbfUtu+YOtDOOhOYoaP47BS5a/uI5sSSoLyU8ycgwxRfehBF+WOmRiwpLfdxAg3kHxvE+aTXpx7CDMwvYvqz77Flb7Wgw0o+JYfpvJuRyuZwT2yQSCSfPpZViwq5SqbjSm/be6wOsca7q/bX+TwLqvDklK89XLS5FNvl8/tbUWoqMuFj4zTOjlOV8YREFPbzGVCrlEoKs9fsThXhftZzJcy8UCi6xqdt1G0aDkf4B8ON5bTPNZrOB6TLsymN2nJae03fUugI3WWx+T2UfB1xw3zi232oHGxcYfrY2o9ALKRQKbvqPX/qj9Q0jPJtn7irLDRMXUXNAV1xFPUwQ0sX3m7r8EMEfZDJsZLhhOIz0HwC+i0+ix2KxW+OlNDEH3JCc4QAJT3de23BZY9fmGOrbdaoNXWF6DlxoSqWSK//5G1H4hOf36lGo1mAY4UlQ7RPgBpaspQNAt9t196fb7SKVSgUy94RWOjRM0M5BwFSj48BI/wD47alh8b3G8vxKl111+cCNhp81bN1CiiU39t2zMSZsKIUq6Eg8Jr2YKGQZ0Cc83W0lPGN4Li73CW/Us1D5MMMY7ljb6/XczrXdbjdQLeA1+F4USR82MFP/D1S5ZwiHkX4M+KU63ePNJ7+Wj1Qhp5adwhm/550EpOJNXXr23LPspv3uJISKfVjLJvFU5KPTfVgJ8MdUn5+fu9bhYXPl1cqz9ZZWnln2UqnkEpRM3nW73UBJU/cR8Id26FZX2qxz14ANQziM9A9AmCCHiTN/IfAntvqJKVoxrYurlp/E03ZVtr+qyo/uPF35SqXiyoGsZzPbrQlDbR0miZip11kBYaIbjaU1U6+xPEMJVgf4Of5ef7x+kt9PQGqbsG784U/WMdwPI/2YUCuvdXJaQhKc1pzZdH8YBC2jPvg63UZltLrbjL/vGxcR3X2H/fa+hadLr0IWuseaMNThIDoZKExWq9fhD9nQJKFOudX76OscfKutZTs9T92/TptzDPfDSD8m/FZVJbzutqI/c95b2C4s2qbrz3fjQ87FghZdhSy0kszMl0ol51Lr3H32v/tkpzvPUIOkZzegDrDQsEV77pXwXFT8ZCU9Bd28ktqBsHvhN9qoToGlSy5Kmsi0mP5+GOnHgDbZ0BKT9GrpSdQwxRx/z4ddJbu0iL6+nladlpDQxJm61Jy9ryOz1IPwvRV/TLVWBICgrJg/a6lMXXN6LNqIxLZdkpmLjHpGYa45/43nQZeeikMKkXTTDMP9MNKPCb/JhiRWi+xv0KDxv2bI2b/OV6/Xc/GszpX3FwCSTsuAFMFQcKNxuyrf/FKhP/VGE4SanONio+2uAAJxOBcXXUw4804Hq2p/gAqJeM+4MOlMPd7LWCwWkBrrHL2w4ZmG2zDSj4mwzjoluG+9Nfbl+/2GGS1TabxPQtOFpxVVi8pyl86gZ8xOq0orq2VDnVCju8jSampHm4759pV+avVZBaDQhgsLXX911ekh+Raf5PWJz14AAI70fjxvhB8NRvoHQN18P+mkpNSe9Kurq1strITuP6fTc6hV1x56DQH4WXpMf9MJX62mixZJpuEHNzRh6U8Jn0gkAgM8fXean9fpdAKehF+d0NieoZGf7NS2ZODGw4jFYs5b0kXCCD86jPTvCZ0Go6IS4ObhVpefllznx9Gq+p1o2qRCFZrGz/6mDrS0OlvuvpevH1D1IHee4bV1u1332ZeXlwGvgYsDPZfLy0u3SGlfvnbXqcX3J+boMXmPGCqod6VafUvgjQYj/QOgLrtm3il24b+FdY3x4dWdY1TJp/vX+0o0f2IOEFQH6gAPTSrq6KkwEZE2ugwGA9cc5J+3/3naIcff6d+zkSaZTDrlnXo4WvbkOdMDCdMEqIuvCkDNJxjx74eR/oHwS21MwPFnTnjVeXD8mkwmnaiEJPTr9cMaSTQDr114Wj5krDxMIwAEE3B+2KA5Ba3jh22coSOufJIyUamZe43/6ZmohfeHYfJYvA/a48CWYCYtfS2AIRxG+jHht35qHE7XmOT13W+1rPw7LTWp9VZxjybg/Fq7El4HaTArrzVxEomLlXoSfGmd2y9RqjehHkRYXK3ny2MBcMQH4N7nH2eYEIj3TGW+bEtm+GCW/n4Y6R8A33L7wx4ZaxLqEvsuNgBnJcOGSei/c3HRMVO6OFC9x6+09P5kWVXQaQztLypa0gs7Jj87rPGI90atvS5WAG4tJmHJUV0gU6mU6ylQebEO0jDcDyP9A+Bbe10EVLVGt50uPV90ldlOqy47cBPrqsuuSTG1/GGWXjPxw1SA2s2nGgJ1v5X0VL/pTrJ3lSt5XWHQjjgVC+m/8z5r52ChUMDU1BTm5+exuLiIubk5lMvlW9NzDHfDSD8m9KFSy6IPrP8Ke79afj8jrfkCzX7rBFk/rladv1rjsMm8fL8uLky0qXhHJcaUEau4SOvp/n0I84aUlGH3KcxTYFKxUCigWq1icXERq6urePTokdus02bkjQcj/QNBS6txL8kLIPAzv/cFPVqmUiLx+Jpsu7y8DCT6lJxhC0dYSOFbZLrcbHFVQvJYXEy0jTWM7HpffGmxtsbyM4bNxGPOgdfPHXq5Zfja2hoeP36MxcVFVKtVc+0fACP9A+HHpWE1ZrXA2oCjJTXV7/ukJ3G4WHAwh26WAeCWQs4nnirhVFRzdXV1K3+gLjeJzu/1c8ISbbHYzdRanQysuQj9HM19aLKOx/Et/OPHj7GxsYFHjx6hVquhWCwG5t2bpR8NRvr3gGa2w/T3Pul1Y0b9vXoDqkKjpaRFptpOcwVav9a8gp4fG2CA4CwAJZ/vtahwh8fyXXD/q0qD/a47LkAquun1eu7cmGPwk3bT09NYWlrC48eP8eTJE6yurmJ2dtZtWGmx/Pgw0j8QfizqN9f4jTe+rNQv+/F7QjUAOjdeN6TwZ8QxDr+6unJ/2+l03DF9NZ5fIlNC3pWX8K+BikIdwulLiLUiwKSj7y3Qg+H71aXf2NjA6uqqS95RoegvdIb7YaQfE2EWT2vzWucOexB9N1wnvarARY+pm1H4OnyNZUl67eE/Pz9HMplEu90OJP+4ACnZhyXWfB2Bhg866prDMPnSKT3AzcYWHAqSSqUCgzgBuDp8pVLB4uIi1tbWsL6+jpWVlUC2PmxbbsNoMNKPCT9mJinpomoyTRNs2lYbpprzs/dM4inZlfS6qSTJrIk3bn5xfn7uZtXrfPxWq4V4PO7KhsBN33oY4fX6VZDEll5uQMEXR3zTGnNBIuF5HjqZJx6Pu80sZmZmsLy8jNXVVSwvL2NmZsaN+/Kv3Ug/Hoz0D4Bq5bnTKy21nyn3XX1Vs6nu3I/nack1NtapNDpeC0CA9Nouq9tQcS873VFXBTd8/zBVnPbwk+yc1MOdejgEkwM8mIdgzV8XI92BZzAYuAlA5XIZs7OzmJ+fx/z8PKrVqtvbz7fwRvjxYaQfA751Z6snd2zxFWX+9+oB+C9fheYPjdTSF8nu69hVZKMTZnR2PQdlcOqMEl+3qQpT8HERyufzgZn23IuP5NSJPUBw0w4KfdgPz8WG91G37K5Wq267Lx7PCP/+MNKPAZ/0TGD5pSy/rDVMiKKLglpV1edrG62+/Cy9xur+7rW0+GrplXgc4+UPs9Dz0S2qOG2Xm1goOf1x3sCNZkEHZ/h77FEWzOk/DA+y2Wxgi24NrwwPQ2xYZvY/YJMJPKjVDrPS/t8O+7ewejehD7Yv8eXv9asey2+z1Tiabj3ny9G99tV7vqSWicZsNot8Po9SqeSm7nJ7LCW7r47TUMefIeh3GfrDNdWzMbKPjdCbZaR/AO6T2o56jGHQB/uuSsBd5+bLfNXK0qUfpqVXwtOlp5Wn9WVmXsuHd7UDh52XCoWGeTZG9veCkf5D4yFkfx/c9+CHaeDDFgD1AsKGbPCz/BZcLRWG9f2Pen5hIZDvyYy72BlCYaSPKsJyC74Wf9jgCpXz+kNB+Hcf4tyM3H8SGOkNNwjzCobBrO6vFkZ6gyFiCCW99SMaDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxGOkNhojBSG8wRAxGeoMhYjDSGwwRg5HeYIgYjPQGQ8RgpDcYIgYjvcEQMRjpDYaIwUhvMEQMRnqDIWIw0hsMEYOR3mCIGIz0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFiMNIbDBGDkd5giBiM9AZDxGCkNxgiBiO9wRAxJO75fezPchYGg+HPBrP0BkPEYKQ3GCIGI73BEDEY6Q2GiMFIbzBEDEZ6gyFi+P/bxq/th5w+KwAAAABJRU5ErkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 35\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 36\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 37\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 38\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 39\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 40\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 41\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 42\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 43\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 44\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 45\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 46\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 47\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 48\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 49\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 50\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 51\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 52\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 53\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2dV3ebV5amXxA5gyQABpESKVIURYpiUA4syS7aVttd1cs9d30/a+7mZq7mH8zt/IW5qdXTa1Xocru67JItK9nKlESJSRQpJuSc81xo9tEBxACAdChhP2txWRIJ4COM9zv77LP3uxWlUgkMwzQOTT/3BTAM89PComeYBoNFzzANBoueYRoMFj3DNBiqXb7Pqf2/I0qlElwuF65du4a7d+9CpVJBrVajUCjU9XwKhQLJZBKdnZ349NNPMTw8DJ1Ot89XzfyIKLb6x91Ez/wdUCqVoFAooFAoUCwWsbCwgC+//BJarRY6na4u0dPzhUIhDA0NYXJyEk1NHBi+D7Do3zNKpRJWV1exvLy8b8+Zy+WQTCahUGy5cDB/Z/Ct+z1EpXp7L98PoWq1Whb8ewSL/j1EDsPlG0Ctz0GPValULPr3CA7v33PqTeIVi0VQiXa9z8H8MuGV/j2kWCz+3JfA/IJh0b+HcJad2Qn+dDBMg8GiZ5gGg0XPMA0Gi55hGgwWPcM0GCx6hmkwWPQM02Cw6BmmwWDRM0yDwaJnmAaDRf8ewrX3zE6w6N9DuPae2Qn+dDDMPvKn6Q18+r9v4r/+nwcIJrI/9+VsCffTM8w+4Ytl8D/+7xPkiyW8cEXRapzD//ovJ37uy3oHXukZZp9I5wrIF98aSMfS+Z/xaraHRc8w+0R3iwH/7fJhKBRAu0WH//7rIz/3JW0Jh/cMs4/8z384hv/x0VFoVL/c9fSXe2UM83fKL1nwAIueYRoOFj3DNBgseoZpMFj0DNNgsOgZpsFg0TNMg8GiZ5gGg0XPMA0Gi55hGgwWPcM0GCx6hmkwWPQM02Cw6BmmwWDRM0yDwaJnmAaDRc8wDQaLnmEaDBY9wzQYLHqGaTBY9AzTYLDoGabBYNEzTIPBomeYBoNF/x7yY4yqLpVKu/8Q83cBi57ZFYVCAYVC8XNfBrNPsOgZpsFg0b9nqFQqKJXKfXkuWt2z2SxyuRyH+O8JLPr3iEwmg42NDUQikX15PsoN2O12qFSqHyVXwPz0sOjfA2hF9vv9uHfvHlZXV8X39irUjo4OnDt3Dq2trbyvf09g0b8n5PN5BAIBLC0tIRAIoKlp7/9rm5qaMDY2hsnJSXR0dECl4snm7wP8f/E9IZ/PIxqNwuVyIRQK1bXCq9Vq6HQ6aLVaKJVK2Gw2jI2NYWRkBHa7fd9yBczPC4v+PaBQKAjBb2xsIBwO1/wcRqMRLS0taGtrQ0tLC7RaLYxGI/r6+mC326HT6X6EK2d+Dlj0f8eUSiXk83kkEgksLCzghx9+wKtXr5DP56t+jqamJlgsFhw4cADd3d1ob2+HzWaDSqWCQqGA0WhEPp9HoVDg8P49gf8v7iN0pPVjJrxKpRJKpRIKhQJyuRxisRjW1tZw+/Zt3LlzBz6fr6bn02q1aG9vR19fH7q7u2GxWKDT6VAqlVAsFsVrtLa27qvo6b2SjwEr3zf579sdF3JysXZY9PtEsVgs20dTIo0+lPV+OGVx0Fc+n0c6nUY8Hofb7caTJ09w9+5dzM/PI5PJ1PT8Wq0WNpsNdrsdNpsNarVaCL5UKiGVSiEajSKdTkOn0+05QUi/A71f9DpU9adQKNDU1PTO+yU/jt4TpVIJpVK5L0nLRoJFvw8Ui0Xk83nk83mUSiU0NTWJD+NWJay73QDkVU0WfbFYRKFQQDabRSKRgN/vx+rqKl6+fAmXy4V0Ol3X9ZPQKv9NoVAgm80iFoshmUzCZDJBo9HU9RqVNy36KhQKQvSyiGXhy787PU6hUECr1UKn03GZcI2w6PcIfSDz+TxyuRyKxSKUSiVKpVLZB5hQKBQ7bgO2CmNJLJV/LxQKSCaTiEQiSKVSdVXMZTIZpFIppFIp5PN5sZcH3kQrpVIJmUwG6XQamUxmyxuEzHYClK85n88jk8kgm82KG6VSqYRKpYJarYZKpRI3AqD8pkqPo2ujn2eqh9+tPSCvPrlcrqxUVV7li8XitiFrNSuU/DNNTU1QqVTQarUwGAwwGAxQq9V1r3T5fB7xeByJRALZbBZarVasunq9HmazGXq9HoVCQUQS9DvJWxp5paYv+QZQKfh0Oo10Oi1WbfodlEolisXiO4/L5XLicblcDk1NTVCr1WXbA6Y6WPR1In8YacUqFAoA3u7vm5qaylZ+YqcPqPxhr/xZ+jOJ3mg0wmKxwGg0QqPR1HWOLguKxKbRaGA0GmG329HW1gaHwwGtVitOCgqFghBgNptFoVAQj6MbkVarhUajETc7Wq2z2SxSqRQSiQTS6bQ4FdDpdGK1lyMbOYqi1ywUCtBoNNwLUCcs+jqRw9XKhJT8M/TfWleiyueRQ27gbSGN2WyG1WqFXq+vO6GlVCqhVquhVCphNpvhdDrhdDrhcDhgs9lgMBiEGDOZDOLxOILBIILBIMLhMGKxGAqFAvR6PVpbW+F0OtHa2gqz2QytVitufrlcDslkErFYDLFYDOl0GqVSSZwWUHhP26LKPEYqlRLRBn2fhV87LPo6kbPylLijcLYyGSV/bfUc1b4WiZ9eT6PRQK/Xw2g0QqvV1vV7qFQqUZhz4MAB9Pb2oqurC21tbTCZTKI6r1QqiS1MOp1GIBDA8vIyXr9+DZ/Ph3Q6Db1ej7a2Nhw+fBg9PT1oa2uDxWIRYXg6nUYsFkM4HEY4HEY6nYZCoYDFYhGJOa1WK5p7KP8hRwnpdFpsceRMPlM9LPo9QB8++jN9ULfLQgN7O8IjEcjCp9cgcdSKXq+H3W5HX18fjh8/jt7eXrS0tIhcAUUP8jEZ1fkvLy9jfn4eLpcLqVQKWq0Wra2tIrGYyWTgcDjESp5MJhEKheD3+xEKhZDJZKBWq5HJZKBSqWAwGKDT6cpCd4qiKMSnHEA+n+euvzph0deJfKZMqw6JnoS43Uq/l6STnP0H3tbcx2Ix5HK5mp5LpVLB4XDgxIkTOHnyJAYHB2G320VIXrnFoBtbPB7H2toaZmdnsbCwIGr9m5qaEIlExCkGre5GoxHFYhHRaBQ+nw8ejwehUAi5XA46nQ7xeFys9BqNRiT1KBdAeZN0Oo1UKgWlUgmtVssrfZ2w6PdA5fHVVgUm24X2e4XC7Vgshs3NTfj9/ppFbzKZMDw8jDNnzmB4eBhOp1Nk77d7zXQ6Da/Xi4WFBczPz8Pj8SCTyYibnJzUI2GazWbk83kEg0G4XC54PB6Ew2Hk83nodDpEo1GUSiXxGCoQUiqV4tQgmUwikUgglUpBo9GIoz6mdlj0e6BS4HLGfa/7+N0oFotIJBJwu91YXl6Gz+erWQTt7e24cOECTpw4savggTeZ/lAoJATvdruRyWTE1oJ+30QigWAwCK/XC41Gg3g8jnQ6DZ/Ph83NTXi9XiQSCeRyOWi1WsTjcRSLRSF6EjvlAuLxOKLRKMLhMDKZDAwGA8xmM6/0dcKi3yNb7dfpz5Xh/H4KPpvNwuv1YnFxEa9fv67ZLUelUqG3txdjY2Po6uraVfAUWWxsbODx48dYWVl5pwJQPsaUV+dCoYBYLAa32w23241gMIhUKiWO6+h5qMKO8gY6nU48NhAIIBAIiGgmm83ynr5OWPR7YDuRbCXy/RI8CSuRSGBlZQXT09NwuVw1P09vby9OnTqF3t5emEymXa8vm83C7/djfn4eMzMz8Pv9W/4cCVE+dqOy4XA4jEgkIvIPhUIBSqUSuVyurKxWqVQim82W5QK8Xi8CgQCANzcsEj2v9LXDot8HthLMjyF4AOKs3OPx4MWLF3j27FnVq7y8BRkbGxM2WLsV9VDmfWFhAdPT01hbW9tWbJTYNBgMsFgsMJlMItMuV9RR9WKhUEChUEAkEoHb7YZer4dKpUImk4HJZEKpVEIkEoHf70c4HBYFQFQUxNQOi36f2E34+wE1q0QiEczNzeHx48fY2NioOoFHQnU4HDh+/DgGBwerWuWLxSLC4TDu37+P+/fvI5VKbfuzTU1Nopqvs7MTLS0tiMfj8Pv94uhNLmgiMpkMwuEwXC4X1Gq1WOkBiPA+Ho/DaDSiubkZ6XSaV/o6YdHvkcojNPnf9xNKlqVSKWxsbODevXt4/vw54vF4Tc+j0+lw9uxZjI2NweFwQK1W7/qYZDKJjY0NPHnyBIuLizv+rEajgcPhQF9fHw4fPgyTyYRAIACfz1dWKy8Llmry0+k0wuEwtFotcrkc9Ho9SqUSEokEotEoUqkULBaLaPXlDH59sOj3gUrh/xjNH5RI83q9mJmZwaNHj7C6ulrzh/7IkSP49NNPMTw8LNpSdyKfz8Pj8WB6ehovX77c8fWamppgNpvR09ODY8eOoa+vT1TYbW5uivN/uXy2ssY+nU4jEomgWCyK0t9UKoVkMin6AyKRCJLJJIu+Tlj0+8SP2eVFYX0sFsPi4iJu3bqFxcXFmvvnDx06hKmpKZw/fx4HDhyoapXP5XJ4/fo1bty4gbW1tR1/VqPRoLu7G8eOHcPg4CA6OjpE9VxraysMBsOO/QG04lObMJ37U1svtdTSeT0n8+qDRf8LRw7rl5eXcffuXdy9exder7em59HpdLhw4QKuXr2Knp6eqo0us9ksNjc38eTJk10NN00mEwYGBnD8+HF0d3fDarWKnv/m5mYYjcYtW4xlqLlGfn1K/FHrbzweF/3/LPjaYdH/giHBp9NpuFwu3Lt3Dzdv3sTKykpN1XdqtRqjo6P48MMPMTo6CpPJVNXjKGlIVXTA2x6DSlQqFdra2jA0NIS+vj7hqJvL5WA0GmE2m6HT6cpKbCttsqhpiSIbugFQ3T219FK3HYu+Plj0v2DojNvr9eLJkyf47rvv8OzZs5rDeqfTiatXr+L06dPC6bYa0uk0VldXsbKyIlbf7URmsVgwMDCAgYEBtLe3Q6/Xi+48tVoNjUYDlUr1Ttky8PZMn/rp6QiRMvxyLT8JP5PJCKstpjZY9PvAfju3UKIrm80iFArh+fPn+Nvf/oYHDx5sWxSzHVarFWfPnsXk5CR6e3ur9rijs/m5uTnMzMwIW+3tRNbW1obR0VEcOnQIZrNZ5AvkEmX5mE42DqU2YWqtpTJcAGLPLj9+qyM/pnpY9HtkL0YZOz1nLpdDOBzG8+fP8c033+DWrVvY3Nys6vHyacLRo0fx8ccfY2BgAGazuaZrTKVSWFxcxOzs7I5e+hqNBj09PTh+/Dja29tFSS+JNZfLIZFIIJlMim2JbApCzjnUWgu8ObeXtzCysWZl8o6tsmqDRf8Lg8JZamz55ptv8O2335aF2LUwNDSE06dP1zyAslAoIJVKwe127xhdKBQKdHZ2YnBwED09PbBYLO/szWOxGHw+n2iYoccBb0RPVXY2mw06nU40E1F57lavuZVXAVMdLPo9UBnq7mW1l0P6SCSC+fl5fP3117h27Rrm5+dr2sfTcdfAwABOnDiBzs7OmsZSUWjv8XjKhmdsVYik1WoxPDyM8fHxdzr16LjN5/NheXkZXq+3rFGGBG80GmGz2eBwOKDX65HNZqFQKJBMJre05iZTTNnkg6keFv0e2cnOupbnIMEHg0G8ePEC169fx1dffYXZ2dkdy14rIWHq9XpcuHBBZOtrEUepVILP58P09HTZlmKr/Xx7ezsmJiYwPDwMq9UqLLSpE9Dv92N5eRkLCwvw+XyiDl9O4hmNRjgcDpEApA68aDQqSnJlgxKNRiMcdlj0tcOi3yfqXeXlYzm/34/Z2Vlcu3YNf/vb37C4uIhEIlHz8wFv6uvPnDmDo0eP1jx8MpvNYn19Hbdu3cLKysq2P9fS0oLx8XGMj4+jq6tLVPhVdgI+e/YMy8vLiEajIglHYtVoNDCbzbDb7ejo6IBer0c0GkUmk0EoFEI0Gi1zImpqahL7f6rwY2qDRb8H5HLSSvPKah9LIbDb7cb09DSuXbuG27dvY2lpqaYVXsZms+HcuXM4duxYzTPoyOFmcXERT5482baDT6FQoL+/Hx9++CEGBwdhNpvLXiebzSIQCGB2dhZPnz6F1+stG7lFK7darRaip+2BVqtFIpGA0WgU7rj5fF6s8nq9vkz0vK+vDRZ9nciZ5FrbaGWH11gshtevX+Phw4e4fv067t69i/X19bqSdsT4+Dg++eQT9PT01DyGKpPJYGFhAd9//73o099qL9/T04OLFy/i9OnT6OzsLBu4USgUEI/Hsbq6ipmZGbx8+RLJZPKdjDvtzc1mM5qbm9HS0iL66S0WixC2SqUShThqtbrMW78er/9Gh0VfJ1udO29VeFL5GFrdU6kUgsEglpaWcO/ePVy/fh3T09OiBbUeVCoV+vv78cEHH+D8+fNwOp01rYLU0HPnzh3cunULyWRSXLeM1WrFxYsX8eGHH6K3txdGo1Fk7OkcPRQKYX5+HgsLCwgEAu8c+VFEpNFoYDKZYLVaYbFYoNFokMvlypxxyV2YfPRI9Lynrw8WfZ3QcRRZMstW2Nv9vDxe2u124+nTp7h16xbu3bsn9rz1VpgpFAr09fXh888/x9TUFDo6Ona1wKq8vmAwiHv37uHGjRtYXFzc8lqMRiNOnz6NqakpjI2NwWq1vrPa5nI5+Hw+zMzMYH19fdsz/qamJjGpx2QyCQMNcsSl6jwq05XHeel0urK5e0z1sOjrgARP3V9UUUarkuyESxEBTXchJ9np6Wk8ePAAz58/r8kIYys0Gg2OHTuGq1ev4tNPP8Xg4CAMBkNNggiHw3j8+DH+9Kc/4f79+9vefI4cOSJKeh0OBzQazTtW2ZlMBj6fD69evdrxjJ+SckajEXq9XjyXXNhTWZ+v1Wqh1+tFaP9jOA2/77Do60C2n45Go1AqlTAYDOLDSDXmdHNIJpPw+/3Y2NjA7OwsHj58iIcPH2JlZaXuZB2h0+kwNDSE3/zmN/jss8/Q398vCmSq/V2i0Simp6fxxRdf4JtvvkEwGNzyZw8ePIjJyUlMTk7i4MGDWw7OpI7AQCAAt9u9bX0BCdhgMMBkMkGn04lW2mw2K+rr5aYaGr8l1/Gz4GuHRV8HJHiv1wu32w0AMJvNMJvNYsSUQqFALpdDPB6Hy+XC/Pw8Hj9+jKdPn2J9fV0MhdgLOp0Oo6Oj+Od//mdMTU3h8OHDsFgsVe9zSfDPnj3Dv//7v+OLL74Q3XSVaDQanDlzBlNTU+jp6dm2N152r93J1UepVEKn08FqtYq59xQlkFNOPB4va6yh5J8cTTG1U5XoG7mTqfKDRefP6+vreP78OdbW1kSfNyWj9Hq9cHjZ3NzEq1evsLS0hJWVlbqGUmyFRqPBiRMn8Pnnn+Ojjz7CkSNHdjWpqCQSieDJkyf44x//iC+//BKvX7/e8ufUajXGxsbwwQcfYGxsDDabbdvXyefzCIfDYr4dsLWzEJ3Pt7S0wGQyiWM5efQVjceiLju5z0E+LmVqoyrR8x31rZ1TJBLB4uIifvjhB0xPT4uBDxTi00qfy+UQDAaxubmJzc1NRKPRHZtWakGlUmFoaAifffYZrl69isOHD9ck+EKhgGAwiEePHuGLL77Af/zHf2B5eXnbn+/s7MQnn3wiTgS2OwakbQ+F9tu146pUKphMJjgcDjHkUqlUCnNMr9cLn88nfPEoxKe+epppRxHAfnc5vu9weL8LFMrHYjEkk0ksLy/j1q1buHnzJl6+fCkmvAAQhSTAmxWP9qV7OXOvpKmpCX19ffjHf/xH/MM//AN6enqEI81uUEIxEAjg7t27+MMf/oCvvvpq25AeeNMnPz4+jkuXLuHw4cM7Tscl0ft8Prhcri1/b4VCAZ1OB6fTiUOHDqGzsxNmsxkAkEgk4PV6xRScaDQqTDTod5en15KxBlMbO4o+mUw2pAcZNawAwMuXLzEzM4ONjQ14PB68evUKL168wObm5jslsnJV3n5R6VRz7Ngx/OY3v8Enn3yCgYGBquvqyXxibW0NN27cwJ///Gfcvn17y6SdHI4PDAzgww8/FK+12xScTCYDv98Pj8fzjiApeWe323HkyBEMDg7iwIEDMJlMSKVSiEajcLvdcLlcYgoOhfYETc6Jx+Nl5pi80lfPjqIPh8N4+PAhZmdnRSFEI9wASPSlUgnLy8uYm5uD2+2G1+tFMBgsKyetfNx+Qx94i8WCwcFBfPTRR/jss8+EZ301Wfp8Po9QKITFxUXcuHED//mf/4m7d+9um1mn38NkMuHkyZM4f/487Hb7rjcX2pMHg0ExoJIgwbe3t2NkZASnTp3CsWPHYLfbAUBMwHG5XPD5fIjFYsL9lt4DOdFH03KcTmdDfCb3k11X+t/97nf43e9+BwBir9pIUPsmdY39HB8wh8OBS5cu4dNPP8W5c+dw4MCBqo/lstksfD4fnj17hi+++AJff/01Xr58uWvVn1arxcTEBM6ePYtDhw7teu5fKr2ZaEse94lEoixi0mg0aG9vx+joKCYnJzEyMoKOjg6o1WokEgnhEiT33Vd64FFon0gkxGy7Wt4L5g07ip4GDRDbrXDvMz/V77xVfTv1w4+OjmJsbAzDw8Po6Oiouvw0l8vB7Xbj1q1b+OMf/4jvv/8e6+vrVV2HwWDAxYsXMT4+XtUxIE2XXV1dhdfrRS6XK/O9a2trw6lTpzA5OYnx8XEcOHAABoNBCDmbzSIcDiMUCiGRSIgW3EpopQ8GgwgEAohGo2hubt6yZoDZmh1Fr1AoxGgh4M3dv9ESJz+V+SK9hsViQXt7O/r6+nD69GmcP38ex44dE80o1ZaeZrNZuFwuXL9+Hb///e/x3XffVTXzjq6jr68P4+PjoghnN+i0YmFhARsbGwDenMVrtVo4HA6cPHkSH3zwAU6fPo2uri5x2kCz7TOZDCKRSNnZ/HavE4lExLGex+MR700118lUkb2X77aVSRVmf2lubsbFixcxNTWFiYkJMQvOZDLV9IGmqTS3b9/Gv/7rv+Lbb7+tyXmnu7sb58+fF2Opdlvlydve5XJhbm5OuO1Q0m5sbAy//vWvcebMGXR3d4tcBPUjNDU1IZvNIhaL7epnT9uASCSCQCCAzc1NtLW1wWazseirhI/sfibkrLxWq8XIyAg++OADXLp0CcePH0dbWxv0en3NXWSUtHv8+DH+7d/+Dd9//31Vgpe3F729vbh06VJVU3DI8cfj8WBhYQGrq6uIx+PCBuvYsWOYnJzEyZMncejQIZhMJtGcJO/5M5lM2eiq7aCVPhaLiSIgygHo9XoO8auARf8TIzfhAG9W1YmJCXz44YeYnJzE4cOHYTab62oZLZXezH2bmZnBX/7yF9y+fXvXqTTyYwEIoQ4NDcFms+0qIuqdX1pawpMnT+D1epHP52EymdDT04PTp0/j1KlTZYKXT4GoHTeXyyGVSu0aSZJ/XzKZRDqdRiKRECu/0Wis2T+gEWHR/8TIH3bqWLt69SpGRkbQ3Nxcc3ecTDqdxtraGr799lv89a9/LTO1rAaVSoWRkRGMjY3BbrfvWIgDvNn6JZNJbG5u4tmzZ5iZmUE0GoVKpUJraytGR0cxMTGB3t5e4YW/VVccFfXIppk7kc1mxRk+FQN5PB5O6FUJi/5nwGaz4fz58/joo49w8eJF9PX1CVPJeqBSVK/Xi+vXr+Prr7/esay2Ejljf+7cOYyPj+/qkS8bX05PT+Px48fY2NhANpuFxWJBT08PxsbG0NfXB5vNVtY2W3ntVOJcbSFYqVRCPB4XM+08Hg9aW1tx8ODBmr39GxEW/U+ESqVCV1cX+vv7MTQ0hAsXLuDkyZPo7u5+pye9Hnw+H+7evYs//elPmJ6erumxVNHW398vVubdym3z+TwCgQBmZmZw+/ZtvHjxAvF4HEqlEm1tbTh27BgGBgbQ1tYmjhh3ErzcSbfV8WUlsVgMwWAQsVgMKpUKsVjsZ6uj+HuDRf8jQs4wNpsNhw8fxvnz53HhwgUMDg7C6XTCZDLtGkLvRqlUQjgcxv3798VZfDqdrko4MocOHcLly5dx9OhRWCyWbaMOqooLBAJ4+vQprl+/jgcPHmBzc1NEC93d3RgaGkJnZyeMRuO2x4yUvaf6erl1drejUhqgQef9W02+YbaGRV8H1BpKH+TKvajcVEITZkZGRtDX14fOzs5923uWSiXRHvvnP/8ZX3/9NWKxmPhetZhMJkxMTOCDDz7AwYMHtxU8NRFRhd+1a9fw3XffYX19HblcDjqdDi0tLejv78fhw4d3/D1lRyHan9OIK6VSuauAM5kM4vE40un0OxFDvdukRoHfnRppamqCxWKB3W6HwWAQ/fXpdFp84PR6PTo6OjAyMoKzZ89ifHxcnE9XTm7dC2SA8fvf/x5fffWVsKbaaZWv/J7FYsH58+fx8ccfi4w9Zddl26p8Pi8q7h4/foybN2/iwYMHWF1dRSaTETe67u5u9Pb2oq2tbdt2X3pOEjyF5uSKQ2F6LpfbUfjZbFYU8ZDZaC6X23P09L7Doq8Rk8mEgwcP4uDBg7BareLIKpFIoFAoQKfTobW1FUePHsWZM2cwNDQk/Nz3S+wU0tMK/5e//KVsKMVOQqHvNTU1wel0Ynx8HL/97W9x8eJFOByOspWZnG0TiQQ8Hg+Wlpbw6NEj3LlzBzMzM/B6vWJwBfXIHzp0CF1dXbBYLFuu8pWegaFQCIFAAMlkUtwwScy0em8HXR8AUZOfyWRqNhNpNFj0NUAVZj09PTh48CBMJhOKxaLomS8Wi9DpdDh06BBGRkZw9OhRYTqxHxll2gOTieUf/vAHfPnll1hbW6vpeVQqFQYHB3HlyhVcuXJFTJul40LZpjscDovV/fbt25ienobL5RJt1wDE0Aq73Y7u7m44nU7heSdfOwmeBOrxeLC6uoqNjY0yr0Hqky8UCjtGLYVCQWT9s9msCPflCTrMu7Doa8BsNqOzsxPt7e2wWq1Qq9UolUrQ6XQoFApQKpWwWq04cuQI+vv7Ybfb6xL8Vv3htDp6PB6Rpaf99FZs1dtvNBqurPMAABfGSURBVBoxMDCA0dFRjI+PY3R0FEeOHBF7b9nMMxaLYW1tDY8ePcLdu3fx5MkTLC8vIxAIlImdICcch8MhiovkYSCyg3AkEoHL5cKrV6+wuLiIlZUVRKNRABATbMiAZCdI7HTGT+E9J/N2hkVfA/TBJsETNOhCr9ejs7MTXV1daG5ursl3XqbyMTTYcnl5Gffv38e1a9dw8+ZNhEKhbZ9DDuNbWlrEMdq5c+dw9uxZ9Pb2wmq1lllJ0z6aGmfu3LmDGzduYHp6ekt3Hdms0mQywel0lt0MKSNPo7sikYhY3V+9eoXl5WW4XC7EYjERzpPfvex5v52IyXmXXHRqOetvZFj0NUAe7STmyumrFosFHR0dcDqdddXNy1B4HY1GhVf+9evXcf36dSwtLVVlwaVWq9Hf349Lly7hwoULGBgYQEdHB1paWmAwGMqO0kik0WgUs7Oz+Oqrr/DXv/5VjKTaDtnVtqWlBRqNBvl8HqlUSmx7otEo/H4/VldXsbCwgIWFBaytrYmaeTLYoAGYMjsJmG4mlEQll1xmZ3YVvfwmqtXqhmutlf3ZqMiEjERKpZL4oBkMBtjtdrS2tpY1lVQLTb+hM2sqb338+DHu3r2LFy9eYGVlBT6fb9dSVZPJhOPHj2N8fBwnTpzAsWPH0N/fj5aWli0TihSGJ5NJvH79WrjrLCws7Nqso1QqodfrYbPZoNfrhRtuIpFAKpUSQy8WFhbw6tUrbGxsIBQKIZlMij27Wq2G0WhEoVCAWq0WR2+7fdboPcvlcuI6eGb97rCJRhW0t7cLQ4ve3l7o9XpRVEJJo9bWVjidzrKS092g7DN1jm1sbGBlZQWbm5vw+/1wu9148eIFnj9/XlXjjMlkQldXF8bGxnDx4kXhemM2m8X0ne0oFArw+Xx48OABbty4gfn5+V3/f5NgrVarKJAJBoPCv87lcmF5eRlLS0tYXV2Fz+crG+6hUCiE9TUl+mhYJb23u4Xq9B7SIMy9RliNQE0mGjqdbt9snH/JkOtqsVhEf38/fvWrX+FXv/oVhoeHYbFYkMlkxHQbsoWi8LYya70VFLqTPRT1hdP0m7m5OXi93ppcdJ1OJyYmJjA1NYWzZ8+ip6cHzc3NYgrsTpDrzfLyMm7evIkXL15UdYOnCbJmsxlarRaxWAzLy8tiLsDy8jLW19dFGF8pYNpSAG8XFBJ9Op3e9bNGE2/IrIOug0W/MzuK3mAw4F/+5V8wMTEh3txGSJJQ8imfz8Nms6G3txd9fX1wOp1Qq9UiU5xIJEQPuFKpLJvRLnfT0d8pfI/FYlhfX8ejR4/w/fffY35+HoFAALFYTAx4qBYaRHHlyhVcuHABQ0ND6OjoqNoWm/rhNzY2MD09jenpaXi93l0fR3PoTCaTKFJyu91IJBJwuVxwuVwIBALiprgT8tEcleBuZ5clQ/kEmmnP7jnVsaPobTYbrly5gsuXL/9U1/OLQD6rBt6sPmRVJf/dbDaXebADKCsokYtcstksAoGAsNR+8eIFZmZmMDc3t2UWvnKQ41bf7+zsxNjYGKampnDp0iX09/cLV5pqTw1oDNXs7Czu3LmDzc3Nqt4fmjZLRTg0F0AeVFFtpEIrPr3n8nu/E5RLofmBNNKa2ZldV3pmayixR8dLtOKTvxvVj2cyGUSjUeEs88MPP+D777/H0tLSjs7CO41t0ul06OnpwZUrV/DJJ59gdHQUbW1tVW0tZCh5t7q6iocPH2J6elrU7m8HCd5sNsNqtUKv1yOXy4kMfTAYRCKRqNk1WRZ6tdGkPOp6t5wF8xY+stsj8kBFqiWnzHMymYTH48Hi4iIeP36M58+fY3V1FeFwuG6vQYvFglOnTuHjjz/GxYsX0d/fj9bW1prDWoo+vF4vHjx4gPv378Pj8ex4XSR4k8kEm80minCozZWy8vXapNezdVSr1WhubkZLSwsbaFQJD7Csgmo+SJScCwQCwq11fX0di4uLmJ2dxcuXL98pcKml/bWpqQnd3d04d+4cpqamcO7cOfT09ECv19e8wlE47ff78fTpU9y4cQNzc3M7Ju8osjGbzbDZbMJrnurnw+HwngRfD+Sx19bWho6Ojj25DjUSPMByn5BX9rW1NTEZZ35+Hi6Xa8vz7moFT040ly9fxkcffSTsrOoJaeX8AvXDP3r0CIFAYMubkEKhgEqlemeFlwdO0rn8Tz0IhRJ4bW1tZb0DzM5weL8PyA0qPp8PS0tLmJ2dxcLCAjweT0320zIKhQIHDhzAxMQELl++jDNnzogim3pCWeqH9/v9ePbsGb755hvcvHkTLpfrnXp6OkOnzjeLxQKLxSKElU6nxXCKn3qFBwC9Xo/W1lbY7XY0NzfXbBPeyLDo9wlylAkGg1hfX8fa2tqOc+92Qq1Wo729Hf39/RgbGxMmHN3d3TAajTVl54G3zTqJRAIbGxt48uQJ7ty5g7t37+L169fIZrNlCUClUikaXyhDbzAYRGNRLBYrC+n3cypvtVitVvT09GBgYAB2u50FXwMs+n2CQuN0Oi0q0mpZ/ZqammA0GtHc3IyDBw/i+PHjOHXqlBC7xWIpa46pBjo+TCaT8Pv9WFlZwbNnz3D//n08ffoUm5ubQrBUxqrT6WAwGGCxWGC1WmE0GqHT6YT1dDwe/9kFD7w5WTp48CAGBwfhcDg4c18DLPp9gEJh6hCjbP5uXWIARPjscDhw9OhRnDhxAkNDQzh8+LCYcCM3x+w2RFL2nUsmk4hGo3C5XJifn8fDhw8xMzODtbU1xONxlEolUfduMBjQ3NwMp9MpQma9Xg/gzSBTn88Hv98Pv9//s4X0MkajEU6nE52dnXtyEm5E+J3aB+SmEbvdDrvdDqvVing8LqrL5GIT2itbrVZ0dHSgt7cXg4ODGBwcRH9/Pw4cOACbzSZKaCvNKAga40z151SzTuOiV1dX8fLlS7x8+RKvXr3C+vo6/H6/6GyjyKKjowNdXV3o7OwUrcM0tzAUConSWp/Pt2+Cp99pp3qE7dDpdLDZbGhtbYXFYtk3k5JGgUW/D5DoLRYLOjs70dvbi0gkIvbK1PpJmXBa2Q8dOoShoSEcP34cR44cQUdHBywWS9mgSrmMlwSez+eRy+WQTqfFah6JREQmPRgMwuv1ilOEjY0NRCIRUTRkNpvR0tKCzs5O9PT0oK+vD4cOHYLT6RSlxDQei6bJ0Nz4vWTpNRqNKJul8l9qv61F+GazGR0dHXA4HFVP8GXewqLfByi8NxqN6OjowJEjR0TGXq/XIxaLIZfLCR+5trY2HD58GENDQxgcHER3dzdaW1thMBhEa6hcwit7ylF9PmXOaXLr5uYmNjY24PF4EAqFEIvFxM2GzrNphaS9MG0jyAmIzvzlYRLxeBybm5vweDzi96gVlUolwvG2tjYYjUak02l4vV54PB5xA6gGKsbp6OgQx5ZMbbDo9wESPVlAd3d3I5vNihA6FAohk8lAq9WiubkZXV1dwlKrq6sLLS0t0Ov1YnWXV3Wq8guFQlhbW8Pi4iIWFhawsrIi5rOTMSe5yFBHG0UWNEySIosTJ05gYGBA3GyMRmOZXRa9Zjqdxvr6OlZWVhAMBusSPJ1EDA0NYWhoCN3d3VCr1QgGg5ibm8PTp0+xurpateiVSiVsNhtaWlqqbipiymHR7xMU4hsMBrS2torWUJVKJfbRKpUKNpsNHR0dZWYbct15pTFlMBjE2toa5ufn8eLFC8zNzWF5eVmE2ttdC1ltazQa2O12HD16FBMTEzh58iSOHDkiVtzKAh/aPqTTaXg8HqysrGBjY6OuWgONRoODBw/i9OnTogPQbrejVCrB5/PBYDAgFouJbrxqSpPpPeYW2vph0e8TtP+WO/BsNhvi8bjwjKefoyYcqoLL5XJl5bTk7BoIBPDq1Ss8ffoUjx49wuLioogadrO5LhaL0Gq1cDgcGB0dFeOie3p6hMvNVvZSsuPu0tKSMK2sNdlGK/y5c+fw8ccfY3R0VDgDF4tFmEwmJJNJrK2tYWlpCcFgsKrVnpKg1My02yQc5l1Y9HuEss/yF1DeGkv7cfKLi0ajYra63W6HzWYT+3kqfvF4PHj16hXm5ubw8uVLuN1uRKPRXVdDygVotVo4nU6cOXMGly9fFvPhKdtdOVuOrpvMJt1uN+bm5uByueoyTrFarRgdHcWlS5cwPj6OAwcOiPnx5IhDR27kNlSLky3VDJDDDp/TVw+Lfg/IXu7UWUdZ9VQqhXg8jnA4jEAgAK/XKzLfVPFmMplgNpthMplEWyyJ3ufzYX19HS6XC+FwuKYMt1arRXt7O06fPo0rV67g7Nmzwqefwv7tRk3lcjmEQiG8fv0aS0tLOzru7vT6nZ2dGB8fx/DwMNrb20VkQa+rUqlEERCV0JJ11m7kcjnEYjFR85/P57kirwZY9HtEPiPPZDJC7GSF5Xa7sbm5WWYsQR9s6sWnDzytgplMBslkUiTlqjUjpdbX9vZ24aZz+vRpMVJru/nwBOURNjc3RVdgPWXERqMRBw4cQE9PT9mx2lavS9Nxthtyud01RiIRBINBhMNh2O123uPXAIt+D8jGliR4qksnwbvdbni9XpGsIn92GfKOpw+97B5DkcROyKcHDocDY2NjmJycxNjYGLq6usQKv53g5ckz4XAYy8vLWFxcFAMoaoHKiWnLQkeA8u8hFxHF4/FdcxQyZNhB7cter1dMAObju+pg0deJPJNN9syjD6Pf70cgEEAoFEIkEikbcknHcZWQ8OVON5nKkl65E47O/wcGBnD27FmMjo6is7NTCE8u8qmcfkO/RywWw+bmJpaWlrCxsVHXKk+vlclkEIlEEIlEhLkqHQlmMhmEQiG4XC5sbGwgFotVnTegGxNtnXw+n3g8i746WPR1QisxrfJUHZdMJoXAaeADleHKJbNbIc9gI/GTsGXolIBWd4vFAqfTid7eXhw/flyYY5Lg6Xrla6f/yoU/NKTy9evXe3L3oeO++fl5GAwGZDIZkawj511y/11aWhJHmtVsY4rFImKxmKhNiEQiSCaTDeHSvF+w6OuERE8lsRS2U7ktrcByA85201vkf6dQX57VTs9DX1TOajAYYLVaYbfb0dbWhoMHD4pyWhKY7M0vr/DyTYtq9Wm2nNvtRi6XE9dSi/hpVsLa2hqUSiVisRg2NjbE6OpisSiGYs7NzYlkIRljVgN5EVIZL8+vqw0W/R6QK+eAt5bM5DBjt9tFKEorvhxSy9CNgkQu97MbDAZhNU1/NxqNMBqNsFqtsFqtsNlsaG5uhsVigUKhEF598g1H3lvL+2oanbWysoK1tTUkk0nRNUg/W63wC4UCMpkMfD6fKLWdn58XVYdNTU2i1dftdsPv9yOVStUkenkCDp/T1w6Lfg/I4bdarYZerxfz7SgTXzlUkZJ5lR9WWt3lVZzKTe12O1paWoQ3nclkEr3v5PVOZbRkhUWvLUcicscfiZ5OCigXEQgExCReKpahAqJqhE/+eyR+mtxD1lbka09bIpo6W6tw5Zstd9jVBot+D8iCl0N6Gryg0WiEIOloLhAIIB6Pv5PFlx9L2W+n04n29na0t7fD4XCgublZjG6iYz4Aon+e9rlyAVA8HkcsFhO19PK4KDlvQGF8oVAQE3gr98nVCh94u4WgMDyVSr2zxaDXq2elpiYiem9Z+NXDoq8TEgqZN5Bo1Wo1dDod9Hq9WN3oJkCrMwk/k8mUrVbyKk+FO+RNZ7FYYDabxdRcEmk2m0UikUA4HBYddx6PB36/H+FwWAyhoPoAWciUI6CIgW5UcjkxRQT17O8JeXwV/a77EZJrtVrReMMmGtXD79QeIHcc4O0EW6oLl1f5yi8SPrWqypN0KMwH3q7gdBKg0WjE6kntqIlEAsFgEG63W4yT8vl8CAaDYgBHpYmHnCxUKpVIp9NlNyXay1fumevN5leyV8HTqm4ymdDZ2Ynm5mYWfQ3wO1UnlcdpFG5S2CqfjctVeyQiCq8p1CdBkZjj8bh4bjK1pJ53lUolKtOozNftdsPj8YibCdUEbJUgo2uU6+DpZ9PptChppRtOZRLy54Ym7LS1tQmXIRZ99fA7tQcq98MErdQU7uv1ephMJpFlt1qtomBHpVKVJfYo8UYVftFoFMFgECaTSZhUUjKMvh8KhRAKhcQUXQrld7OiIrHLvfsUbchZ/lr28j82CoUCTqcTIyMjGB4ehtPp5PHUNcKi3wcqi13ko7zKzrtKVxwSFSXYCDraopFRcqae5uRVTs+lTHjl6+527dRoo1AoxN67luf4KbHZbDh58iQmJycxPDwMq9XKgq8RFv0ekNtp5XPjStcbqtKjL7mZJpvNipWZHg+8u++Wi3PkmwbdMOjmUe/ZdWV9/C8RnU6HkZERXL16FadPn0Z7ezu0Wi1n7muERb9H5NW68jxcPgP3+XzCRpqO0uSsurxCE3R8JofdcqKPXr/yZlFZW/8+oFKpMDY2ht/+9re4cOECuru7odPpWPB1wKKvE/mcWa6/J5ssWuVlwwwa5RyJRBCPx8tWe9nOurI8l8J5uTR3q9p8CtF/iWH5XtDpdBgdHcU//dM/YWpqCj3/f3AnC74+WPR7gMJrWfDUZEOil8N52i+r1WpotVro9XqRxZfP0Cvdd0joarVaHAVSjzol9WiPL1e5yVHHT30TkMuKZXHWUtarUChgMplw4sQJfP7555iamkJ/fz8Lfo+w6OtE7lAj0csltyQy2TMPgPDHt9vtIoNPNwUSquxkK98gDAYD9Hq9OE8n4dN10E0nmUwKM494PI5IJCKO8X5sqM2Xiom0Wq04TqMbYTweRzQa3bE7TqPRwOFw4NSpU/j4448xOTmJ3t5enky7D7Do94CcyKPQW/4zFeJQYwwdw5Ew5S/qHKO9uVzPbzAYypptaGAE7fPlTD71mZOrDH1Fo1Hx2vRzqVRqz++BXH2o1+ths9lE6bDcTiuLnb62O15UKBRobm7G6Ogorly5gnPnzqG7u5tX+H2CRV8nFL7StBaqlqN9vrxHrxw9RV+UuZdbc6lohnz0SEwkdK1WK47t5NFQVFhDVl00dy4QCJR1+qXTaUQiEfF9Wm3lCKUyiy/XI8jo9Xq0tbWhq6sL7e3taGlpgcPhQHt7O+x2uzDPoNekG1AoFBI3nWw2K94veTR2V1cXJiYmMDIygo6ODs7S7yMs+john3uqmZcr6uRVS/5vpai2OtMnKo/raH8st8pWNq/QjYRW1WAwKEpzaWx2Pp8XTTnUiEOipxsQJRgpMUg9AfKWAnizynd0dGBoaEh46VNDEBURUQ0AWYmRSajf7xduthTd6HQ62O32stl6zc3NnKXfZxS7JHjenxTwj4QsdpndEmfVJNYqbbO2s9GSn49uIPIgS5o0SyW7wWBQlP+S4KjWgG4alGMolUplTTnUAdja2irafjs7O9HR0SHC+UovPopyMpmMcLGVHW/oZEKj0cBms8HhcKClpaVsph9TF1u+cSz69xi5Zz6RSMDv94u5dKlUqizSqKw1kE8aKJlIM+kcDge6u7vhdDpF1x+dKOwkUDkakbczwNtiJI1GI7640m7PsOgbFVrFKcSmsJpCb7liMJ1Oo1gsCl96uZ1X3nNbLBYxA6/elbjys8cr+r7Dom905PyBPPZaPlUgtxyy/qImH3maLiUaeSX+xcOiZ7am8sSB6gTkCkDm7xIWPcM0GFuKnuMzhmkwWPQM02Cw6BmmwWDRM0yDwaJnmAaDRc8wDQaLnmEaDBY9wzQYLHqGaTBY9AzTYLDoGabBYNEzTIPBomeYBoNFzzANBoueYRoMFj3DNBgseoZpMFj0DNNgsOgZpsFg0TNMg8GiZ5gGg0XPMA0Gi55hGgwWPcM0GCx6hmkwWPQM02Cw6BmmwWDRM0yDwaJnmAaDRc8wDQaLnmEaDBY9wzQYLHqGaTBY9AzTYLDoGabBYNEzTIPBomeYBoNFzzANBoueYRoMFj3DNBgseoZpMFj0DNNgsOgZpsFg0TNMg8GiZ5gGg0XPMA0Gi55hGgwWPcM0GCx6hmkwWPQM02Cw6BmmwWDRM0yDwaJnmAaDRc8wDYZql+8rfpKrYBjmJ4NXeoZpMFj0DNNgsOgZpsFg0TNMg8GiZ5gGg0XPMA3G/wNclxwKcFfvtQAAAABJRU5ErkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 54\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO29WVOcV5bv/c95HiAzQSQzaEBMAo2gwUKyLLWqJbvb3a7oqvsT5+69OVfvN3hv369wbir6VNtd3V1hVzvKLpVkCQ1IlowGQGImE8h5nodz4VjbD6kEMhM8lHL9IghJkMND6vnvtfbaa5AVi0UwDFM/yH/uC2AY5qeFRc8wdQaLnmHqDBY9w9QZLHqGqTOUu/ycQ/t/QxSLRayvr+Orr77CgwcPoFQqoVKpkM/na3o9mUyGRCIBp9OJX/3qVxgYGIBWq93nq2Z+RGTlvrmb6Jm/AYrFImQyGWQyGQqFAubm5vD5559Do9FAq9XWJHp6vWAwiP7+fly4cAFyOTuG7wIs+neMYrGIlZUVLC4u7ttrZrNZJBIJyGRlDQfzNwYv3e8gSuUPa/l+CFWj0bDg3yFY9O8gUjdcugBU+xr0XKVSyaJ/h2D3/h2n1iBeoVAApWjX+hrMLxO29O8ghULh574E5hcMi/4dhKPszE7w3cEwdQaLnmHqDBY9w9QZLHqGqTNY9AxTZ7DoGabOYNEzTJ3BomeYOoNFzzB1BoueYeoMFv07COfeMzvBon8H4dx7Zif47mCYfeQ/nrrwq///Dv7H/55CIJ75uS+nLFxPzzD7hDeaxv/6P8+QKxTxcj0Cm2EG/98/Df/cl/UWbOkZZp9IZfPIFX5oIB1N5X7Gq9keFj3D7BPtjXr8z4s9kMmAA2Yt/p/3D/3cl1QWdu8ZZh/5f68fxf/64AjUyl+uPf3lXhnD/I3ySxY8wKJnmLqDRc8wdQaLnmHqDBY9w9QZLHqGqTNY9AxTZ7DoGabOYNEzTJ3BomeYOoNFzzB1BoueYeoMFj3D1BkseoapM1j0DFNnsOgZps5g0TNMncGiZ5g6g0XPMHUGi55h6gwWPcPUGSx6hqkzWPQMU2ew6BmmzmDRv4P8GKOqi8Xi7g9i/iZg0TO7IpPJIJPJfu7LYPYJFj3D1Bks+ncMhUIBufyH/1bp36uFrHs2m0U2m2UX/x2BRf8OkU6nsb6+jng8Lr6Xz+drfj0SeUNDAxQKxY8SK2B+elj07wBkkX0+H7799lsEg0FYrVYAewvAFYtFOBwOjI6OoqGhgff17wgs+neEbDaLYDCI5eVlBIPBPQlU+tyenh6Mj4+jpaUFSiVPNn8XYNG/IxQKBSSTSfj9fvj9fiSTyZpfi7wDrVaLI0eOoL+/H42NjVAoFPt1uczPCC/d7wjZbBaxWAw+nw8+nw+pVKrm19JqtbBarXA6nejs7IRer2fX/h2CRf8OkM1mEQgEsLy8jJWVFUQikZpfy2g0oqWlBe3t7Whvb4dWq4XH44HT6YRer2dr/w7A7v3fKMViEYVCAZlMBuFwGHNzc3j8+DHW1tZqjrJrNBo4HA709PTg0KFDcDqdyGazcLlc8Hq9e/IedqJYLIqv/XwsUx629PsEiZCQZrHtl2tMN3qxWEQ+n0cul0MikYDL5cKzZ8/w+PFj+P3+ml9fo9GgqakJLS0taGxshEajEQFCt9sNq9UKlUoFtVq9b7+HVMA7fV7Sx9Lj5XI5FAoFbz2qhEW/D0hFCHx/08rlcsjlcshkMhSLxZoWgFJrJr3pc7kc0uk0gsEglpaWMDc3B7fbjUwmU/PvoVAooNVqodPpoFKpAHwvrHQ6jdXVVej1eiiVSjQ0NECj0dSU+EPXXygUxBdBC2Vp2q/08blcTuQeqFQqaDQaPlWoEv609gjdkLlcDrlcDsViUVgg+rtU8KVWbafX3e7fUuEnk0kEg0EEg8E9Reylr1tqTfP5PPx+PxYWFlAsFtHe3o6GhgbodDooFAphbStZ0KSiz+fzyOfzYlGULpT0WvT4fD4vMgMzmQxkMplYnKSLKrM7LPo9QNaHrHw2mwWAt4JdUosovZmruVGlCwb9W+pJ7MeNT+IqjQkUi0Wk02lsbm6KLUVTUxOsViuMRiP0ej3UajWUSqX4XXdy0UnsZLVpcSSkf5cKPp1OI51OI5fLQS6XQ6VScZZgDbDoa0Rq4bPZ7Ba3E9jqqpZa7UqEL31M6fekVlGhUECpVEKpVO5Z9KXWtvR9M5kMfD4fEokENjc3YbPZYLfbYbPZYLFYoNfrodFo3sr/J6SLZCaTQTabFZ+ZdKEstfK0lUmlUkin0ygUCsLCc0Cvelj0e6B0b1oqYqmrXKsgS8UvXUwUCoUIrO31KE2pVEKn08FgMECtVr8Vg6DFK5vNIhKJIJVKIRKJwOfzobGxEc3NzWhubobVaoVOp9ti9en6aZGUCjifz0Mul4v3pC+5XL7lOZlMBslkEqlUSjyGrXxtsOj3gPQGLd27bxeUKn1+Ne8F4K39L30BEAtPLWg0GtjtdhGko/cCUHafHY/HEQwGsbq6Cq1Wi5aWFvT29qKzsxMOh0ME/aTXRhY+mUwiHo8jmUwin89DqVTCYDBs+X1I0LSgZrNZpFIppFIp4eHQ78t7+upg0e8BEh9ZWalIpMdJ5RaAvVp+6Wtls1kkEgmk0+maRW8wGGC322G1WqHVarcIUCr2fD6PdDotrHwoFEKxWITNZoPf7xenBw6HQ1h8AGJfnkwmEYlEEAqFEIvFUCwWodfrAUBsVaTbA2nMJJPJIJVKQaFQQK1Wi3gAUx0s+hqRWnn6N1kncr2lwbYfwxIVi0WkUin4/X4Eg0Gk0+maXkelUsFsNqOhoUEE5vR6PXQ6HeRyOXK5nLCy6XQaoVAIq6urWFlZQSgUQi6Xg8FggM/nQy6XE+KVyWTCbZeeNHg8HmxubiISiUAmk8FisSCbzW5ZZJRK5ZYgXiqVQiKRQCKRgEqlglar3ZNnU8+w6PeAVPT0b+kxXanY9zNZh/bX4XAYS0tL2NjYqFn0ZOWdTidaW1vF3lyv16NYLAqrnslkEIlEsLa2htevX2N9fR2JRALFYhEKhQLxeBxKpRJGoxEmk0m47TKZTGQOut1uLC0tYW1tDaFQCHK5HHa7XWT70WdDCUC0WMTjcUQiESSTSRF74D19bbDo90hp4Ikot8ffL8gCRqNRuFwuvHnzBhsbGzVZPZlMhoaGBnR3d+PIkSPo6+uD0+mEyWSCSqVCOp0WbrvL5cL6+jrm5+fhcrkQjUbFe+ZyOfj9frx580Zk9RkMBvEeiUQCGxsbWFhYwKtXr7C6uopwOAylUgmbzYZkMin25sViUXgZ2WwW0WgUoVAIwWAQqVQKhUIBFouFLX2NsOj3gdII90779/04Sy8UCqJLzosXLzA/P49QKFTT66lUKrS1tWF4eBgjIyPo7OyE1WoVbnkqlUI2m4VSqRT1+mtra1sET9eVzWbh9/vhdruxvr6OAwcOQKVSQSaTIRQKCQ9hZmZGdPhRKBQIBAJb4hH5fB5msxlKpRKZTAahUAg+nw9er1dsAzKZDFv6GmHR74FyAi531LXT46uBItVUVffq1Ss8evQILper5tdsbGzE8PAwTpw4gYMHD6KhoQEqlWrLkZlcLkcikYDb7cby8jIikUhZC0uueCgUgt/vRzgchsFgQLFYhM/nw+rqKhYXF7G2tgav14t0Oi22BZTYRPt/u90OtVqNTCYjcv89Hg+A708a6LyeLX31sOj3gZ3Ev9NjqoUEHwqFMDc3h0ePHmF6errmUlqj0Yjh4WGMjY3h6NGjaGhoKFtMQ4JfWlqCz+fb0cJS0C+RSIhz9Vwuh0AggPX1dayvr8Pn8wmhy2Qy0XSTUnpzuRyi0Si0Wq0Q/fr6OoLBINRqNSwWC1v6PcCi3yOlBTXlfr5XpBY+EolgcXER33zzDSYnJ7G5uVnzzd/a2or3338fIyMjwrKWeiaFQgGBQAAzMzNYXV0VFnmna5UmLJH1j0Qi8Pv9CAQCSCaTW0RLn5/X6xWLTjweh1arFYucz+dDJBKBXq+HzWZDKpXiI7saYdH/SOxX4I5ERIJ/8+YNbt++jb/+9a948+ZNVRF7aUqww+HAxYsXceHCBXR2dkKj0bx1zbTQeDwevHjxQrjXuyGXy0ViTrFYRCaTQSwWQyQSQTweF5l4UtGnUinEYjF4vV4R+KPS3kgkIp5rNpsRDoeFB8Girx4W/T5Qrhhmr0iLU8jFXVhYwN27d/Hll1/iu+++q9qtp2s0Go24cuUKbt68icOHD8NoNJa95kKhIKLuKysru1p54IccBbVaLcpzKXmIBE8JN9L3oeBkJBIR5bxKpVJ4CrFYTAT7otEoEokE9+KvERb9PrHfR3JS19jv92Nubg537tzB7du38eLFC4TD4aqvr1gswmg04urVq/jkk09w5swZWCyWba+dovGUSCN9nZ3eR6PRiLJXCsxJk3ukFp4gbyadTiMej4ucfPpeJpNBJpOBUqlENBrdsoAw1cGi/4UhzUKLx+NwuVyYnp7GvXv3cP/+fczPz1dl4aWlt1arFZcvX8Zvf/tbjI+Pw26377hYpdNprK2tYXFxseLmHGq1GjqdTqTgkntPQT3ah2+3cFCaLzUkIU9HmsYbi8UQi8VEXICtfXWw6H8hSJtLpNNphMNhrKysYGpqCnfv3sXDhw/hdrur7lNHgjCZTPjggw/wL//yL7hw4QJsNtuuz0smk3jz5g3m5uaEa7+bwNRqNfR6vcjfl7rnyWQSuVyubL0+iZcsfmmvAqrBp/gAW/raYdH/ApDu31OpFEKhEBYWFjA5OYnbt2/j6dOnW4pZqsVkMuH69ev4zW9+g3PnzqGxsbGiVlfpdBorKytYXFysSFxyuRxarVY01QCAVCqFaDSKcDiMZDJZ1jKXpjNTDT39SQuFNA8/Ho+L7DymOlj0vwCkgg8Gg5iZmcHdu3dx584dvHjxYtez8Z2wWCyYmJjAr3/9a5w9e3ZXl156TdlsVvTRrwSFQgGdTidaZVOuvs/nE0d1O7njpb0DyLqT4KWeUOmxH1M5LPqfGbqRKUI/MzOD27dv49atW3j58qUoXa0FmUyGEydO4J/+6Z9w9uxZOByOip9Li5B0GOZuQTwqsNHpdAC+P2v3er1YX18XU3e2G6hZmsFY2q9Puv2hRhws+tpg0e8DtTZxkAo+FAphfn4ed+7cwa1bt/DixYtt010rQS6X4+DBg3j//fdx9uxZ2Gy2qq6RvI5oNFrxczQaDcxmM3Q6nWidvba2BpfLhWAwiEwms6OVl5Yil+7zCem+n7YAHMirDhb9HqEbrlrhS7PsYrEYFhcXMTk5iTt37uDly5cIh8M1V80Vi0UYDAZcvHgR586dE4UvlULdb1++fInNzc2KniOtydfpdEilUggEAlhZWRHFNdudq0vbf5VLECqltEUZUx0s+p8J2sfTsIqpqSn89a9/3bNLT8/r6+vDe++9h76+vrLZdjtRKBSwsbGByclJrK6uvvXa5dDr9WhqaoLD4YBWq0UsFsP6+jrW1tbg8/kq6uojrU4sfWy557KVrw0ea7WPVHoDSgNSHo8HT58+xZ07d/Ds2TMEg8E938iHDh3ClStXcOzYMTQ2NlY9DCKdTsPlcuHJkyfwer27Pl6r1eLAgQPo7e1Fa2sr1Go1IpGIqIyj7LmdkLYe22lqDXXV4Z54tcOi3wNS176a59CeNBAIiEy7J0+eIBAIiKSUWtFqtTh58iSuXLmCtra2qtx64Ps212tra3j16hXW19cB7JxtqFQqceDAAQwNDWFkZATt7e1Qq9WIxWLweDwIh8MVHzVK9/TlfkZ/Ug89Fn5tsHu/R0r39Dvt7ckdzeVyiEQieP36Ne7evYupqSmsr69XlNu+ExqNBmfOnMGlS5dw9OhRmEymqp5fKBQQi8Xw5MkT3LlzRwTxtlvUlEol2tvbcfbsWYyNjaGnpwcymQzz8/OIxWIIhUKindZOSNuLSXsOlssloCEXVPPPVA+Lfo/QDV2p4Kmv3fz8vEi+WVpaqrm/HaFWq3H06FF8+OGHOHfuHCwWS9VufSqVwsrKiijb3ema5HI5urq68N577+HKlSs4evQodDqd6NlHfe0qXchKh1Hu1E9QqVRu6fXP+/rqYNHXiPRISdoia7vHUg56NBrF/Pw8bt26hT//+c+YmZmp6lisHCqVCiMjI/j4449x+fJldHZ2irPySn+XYrEIr9eLb775BlNTU2WvSRpgO3z4MK5evYpr167hyJEjsFqtIjgJAMlksuKFTGrly80AlKJQKKDRaISlZxe/elj0NUKip5u8tN21NMmEgnbBYBBzc3O4e/cuvv76azx79qzm3naE0WjE6Ogobty4gWvXrqG3txd6vb5qMXi9Xjx48AB//OMf8fLly21/Z5lMhiNHjuDGjRu4fv06BgYGYDabRccbjUaDfD6PZDJZsZWX7tOlgy7KWXAq25VOq2XhVweLvkZob04JJ6UTZ6jrDFXLeTwezM3NYXJyEt988w1mZ2drbnNFmM1mnDhxAh9//DHef/99dHR0VC34QqGAYDCIBw8e4N///d9x7969LVl4pRw+fBgfffQRbty4gcHBQZFySw0zFAqFEH0l2XK0WEobb5SOsJYi3dNzFL82WPQ1QIJPJBKIRqOi9puGPJAAqCnE2toapqen8eDBA0xPT8Plcu15rLTBYMDp06fxySef4L333kNnZye0Wm3FIiArGgqF8PDhQ3z66af405/+tONW49ChQ7h58yY+/PBD9Pf3w2g0in211NPJZDJIJBLbptxKoSM6mnpb6iGVs/Y0sJPd+9qoSPT1HCgpd1PlcjnEYjG43W643W4kk0lhgehmTCaTCAQCWF5extzcHObm5rC4uAi/37/nfHGtVovTp0/jo48+wsTEBDo6OqDVaqt+Hb/fj/v37+P3v/89vvzyS7HVKJcc09bWhmvXruHGjRvo7++H2Wwum0hTKBREEG830ZNbT0M4VSrVlpn15ZJvSr0CoL7vz1qoSPS8mv4wHDKTycDv92N+fh4vX77E4uIiYrGYED1Z+Xg8js3NTdEnPhAI7EtxiFarxdDQEG7evCnO4qsVfC6Xg8/nw/379/HZZ5/hT3/605YknFIRNTY2YmJiAtevX8fw8LBor1Uuwk6ufSVHdUqlEhqNRhTp0NaAAoLlnl8a5WfBVw+797tAE1ZisdiW5pSTk5N49uwZ1tfXRf92sjzU4SWRSIgWUfuBXC7H0aNH8cknn+Dy5cvo6OioKkpPMQaPx4NvvvkGv//97/HVV1/tGFvQarU4duwYfvWrX+HYsWMwGo3bHgVS8VA8HkcikdjxWqSCN5vNYjYdNc2kGvrt6u+l5bZMdewo+kQiUZdFDRSYKxaLWFxcFIUn4XAYHo8H8/PzmJ+fx+bmJlKp1Fvn8+W6w9SC1HXWarU4deoU/v7v/x4ffPABDh48CJ1OV7EXRl1nlpaWcOvWLfzHf/wHJicnywq+3NHc8ePH4XA4djz7p6BlLBbbscMPNdtoaGiAzWaDxWIBAESjUbEw7WTtpc01pF11mcrYUfShUAiPHz/Gq1evoFar35rX9q5Coi8UCmLIg9frFaOVAoHAnrPnqrkOp9OJkZERXL9+He+99x66u7uritLn83mEw2G8efMGf/nLX/DHP/4RDx8+3DY9lv6PrVYrzp49i0uXLsHpdJYdhCF9TiqVgs/nQzAYFOnEpXt+uVwOo9GI5uZmtLa2ioUkFouJ4F/pvr70d6EOOplMRrTWYipnV0v/u9/9Dr/73e8AQPQhf9eRHhtZrVaYTCbRBWavUfdqr2NoaAhXr17F5cuX0dfXB4fDUZXgqa795cuX+K//+i98/vnnmJub21UoWq0W4+PjuHjxIg4ePAij0bjj4wuFAqLRKFZWVrbttKNUKmEymdDe3o4jR46gq6sLRqMRiUQCKysrYtpNNpvd0cpTh1yaopPNZqs6uah3dhQ9BaSI/dqb/tKRCiIUCiEWi+14drwfSC2iTCZDb28vTp06hQsXLuDkyZPo7e0VSTCV3tw0SXZqagqfffYZbt26hcXFxYquw2q14vz58xgdHRWR+t3ei8ZtbWxsvPVzlUqFhoYGHD58GKOjo2IBozJev98vXPqdtpR0VErNNim/X6/XV512XK/s+CnJZDIxbhiAyLaqJ2jv+GMiFbzZbMbAwAAmJiZw+fJl9Pf3w2azVV1gksvl4PV6cf/+ffzhD3/Al19+WVaMpRSLRZHHPzIyAqfTuauYKCfB5/NhYWEBPp9vy++kVqths9kwNDSEsbExjI6OorW1FVqtFtFoFNlsFhqNBrlcTrjrO4k+Ho+LefUejwdOpxNWq5VFXyG7fkpS68b7px8HusGNRiMuXbqEf/iHf8D4+Diam5thMBiqLo/N5/Pw+Xx4/PgxPv30U3zxxRcIBAIVP7+npwcTExPo6uqqKFhIVp5aY8ViMXGkp1Qq4XA4MDw8jMuXL+PUqVNoa2uD0WhEsViESqWCx+MRaby0Z9/pvcLhMBKJhBB9JBIRLj6zO7w0/oxIraHVasW1a9fwz//8zxgfH4fD4dgxcLYdVLY7PT2Nf/u3f8NXX31VkeCl19Ld3Y2xsTG0tLSIjLvtICvvcrkwMzMDn8+HXC4nPJOGhgYMDw/jgw8+wNjYmNjHk8jT6TQ0Gg0AbOl7t9PvR5Y+kUggFoshGo0ilUrBYDBwuW0FsOh/JkoFf/XqVfzmN78RbaproVAoIJVK4eXLl/jiiy/w9ddfV+TSA1sj9n19fejp6YHJZNrVyufzecRiMZGsFIvFoFQqoVAoYDabMTg4iIsXL2J8fBy9vb1bzvmlXXBosk0lniSNwqZRV6FQCKFQCCaTia19BfCy+DMhdelJ8OfPnxeTZ2qJRFM9/FdffYXPP/8ca2trVT1fpVLh+PHjGBkZgcViqcjKJ5NJbGxs4PXr15ifn0cqlYJSqYTRaERvby/OnTuHc+fOobu7GyaTSdTBUzot8EPSUKX5DRS9pzbYHo8HGxsbFWUBMmzpf3JKg3bXrl0Tk2esVmtN7ikVp2xubuLPf/4zvvjiC8zOzlZ9TXq9HqdPn96SarvTe9Ls+JmZGczOziIYDAIAdDod2traMD4+LjrqWCwWqNXqbcdhp9PpqqbQ0jy7RCIBj8cDh8NRNlGKeRsW/U8M3dQOhwPvv/8+fv3rX4thknt5zY2NDXzzzTf4wx/+gKdPn1b9fDomHBgYQFtb266JOPl8HtFoFEtLS3jy5Anm5+fFXt7pdGJ0dBRjY2OiwQZNsAW2DtWkMdbSQRi7DdUAgHA4DK/Xi+bmZqhUKh5dXQUs+p8YtVqNAwcO4MqVK/jHf/xHjI2NoaGhAUBtLn2hUIDf78fk5CQ+++wz3L9/H+l0uiLhSOno6MCFCxdw6NChLSWz5aB9/NLSEh4/fozvvvsOm5ubUCgUsFqtOHr0KMbGxnD06FHYbDaRzSn9/aTNRWjefDXHwbFYDIFAALFYDCaTace0XWYrLPqfEIfDgcHBQVy6dAkXL15Ef38/Ghoadt07b0exWBQNMD799FN89dVXImOwmptfq9VieHgYFy9eREdHx44FNblcTmTePXjwQPT4y2Qy0Ov16OnpwejoKIaGhtDc3AytVvtWQpG0fVg8HkcgEEA0Gt3Sdmy366coPvXTp7hAPp/n8/pd4E/nR0SpVEKn08FsNqOlpQVDQ0M4e/YsTp8+je7u7l33zbsRCATw4MED/Ou//iu+/vpr0QBjJ9GUlqTqdDqcPn0aV65cwcDAQNm4AllRmrf3+vVrPHz4EJOTk2Iaj1KpRFNTEwYGBjA4OCjO4ksXNGlH4Hg8Dr/fD4/HI66d6jsqDehR4hSNxM5kMuIIkCkPi36fkclkUKvV0Gq1sFgssNvt6OnpwbFjx3Dq1Cn09/fDbrfvKVecxk6Rhf/yyy/h8XjEz3eykvQzuVwOh8OBgYEB3LhxAxcuXEBTU5MIttHjpLP23G43ZmdnMTU1hcePH2NhYUH0EmhoaEBnZycGBgZEpL60eaVU8MlkEl6vF8vLy3C73SLde6cpN6WQ5yFtOsrn9bvDoq8RlUolWj3RXlIul8NkMqGxsRE2mw2NjY1oa2tDf38/RkZGcPDgQTQ0NNRsiciF9fl8mJycFC2uqm2uqVQqceTIEVy4cAEXL17E4OAgWltbYTAYtgyPzGQyYmjF/Pw8pqamMDU1JSL11EfAYDDA4XDg8OHD6Onpgc1mg1arfauzDYk0kUhgY2MDc3NzePHiBVwulzhuo2640s91O6junibskugLhQKLfgdY9DVAwqbe8lSMo1AohHVvaGiAyWRCd3c3hoaGcPDgQdhsth33m9KCm1JILNSX/j//8z8xOTm5reDLdZahINvg4CAGBwcxPDyMQ4cOoaGhYUvpNM3Y83q9ePXqFR4/foynT5+KYhoqQKKegAaDAW1tbTh06BCam5uh1+vLCp6Gdbrdbrx48QKPHj3Cd999h42NDVHMJe0ovBsUCKQknVQqxeOrK4BFXyUGgwFOpxNdXV2w2+1QqVSiQEShUECn00Gn00Gv18NsNqO9vR2tra0wmUy7dm8td4ZNCTButxsvX77EgwcPcOfOHUxNTe3YqILEptFo0NjYKEZPjY+P4/jx42hvb4fJZIJGoxGBNnK9I5GIOIq7d++ecOUpSCgVJe3le3p60N7eLhZC6m4D/NBCy+/3Y2lpCS9evMC3334rRmclEgnhplPfPPr7bpaeuhNJy3E5gr8zLPoqUKvVcDgc6O7uRldXF6xW6xahSttfq1QqmEwmNDQ0wGKxVDw5llzrVCqFSCSCSCSC9fV1PH36FP/93/+Nhw8fVjzk0mAwYGhoCJcuXcLJkyfFQtXY2PhWVJ3eNx6PY3FxEX/961/xxRdfYHp6GuFweEsfBWlcwGKxoLu7G729vWJiLQmeLHEkEsHGxgZmZ2fx7bff4unTp1hcXEQoFNoi9kotPEGxAXLpecZdZewqeuneiLqV1hPSslq1Wo3m5mY4nU40NDSIPG+pAOmGp1RUg8GwrYWXtn2iSDTtTz0eD54/f47Hjx/j+fPncLNhnGoAABX4SURBVLvdooJtN6xWK0ZHR3HixAkcO3YM/f396OzsFN5Guf0udb7Z3NzE5OQkPv/8czx9+nTH7YNer0drayuOHDkiXp/24plMBslkUvT7f/LkCZ49e4b5+XkxyZY8AbLutAhJJwftBnXQkcvl0Ov1ZbP+mK1wE40KsFqtOHDgAA4dOoTu7m7RVCKbzW5rWahNs0wm21InDvwg9mQyiWAwiPX1dbhcLlEmmkgk4Pf78fr1a9GfrxK0Wi3a29sxNjaGy5cv4+TJk2htba1IDIVCAaFQCC9evMDdu3d3FDzwQ5LR4OAg+vr60NTUJPotULR/aWkJ09PTePz4Maanp7GyslK2J590EZJm61VKsViERqOBxWIRXXWZ7amqiYZWq/3RG0r8EpDL5aL4o6urC2NjYxgbG8OhQ4cgl8uxubkJj8eDZDK5bZtmWhSi0ShCoZBwjynKHAqF4PP5sLa2htnZWbx8+RLz8/Pw+Xw77tW3w2w2Y2hoCH/3d3+HiYkJHDx4EFarVQTodoLKY9fX10WX390E39zcjMHBQRw/fnzLQkj9/mmaz+TkJF6/fv3WFkGKNPAmDSbuJnw6HqX5dlRlx5H7ndlR9Hq9Hr/97W9x/PhxcURVD0ESKvXM5XIwmUzo7OxET08PGhsbRUeazc1NuN1ueDwexONxFAqFt86YaZxVOp2GUqlEIpGAy+XC7Ows5ubm4HK5RDuu3TrIlrtG+r9oa2vDhQsXcPXqVZw8eRIdHR0VlcUS1EdvdnYWT548wcrKyraPVSqVaGxsxPDwMMbHx9Hf3y9q/+k4cXp6Gnfu3MH9+/extLRU0YBOqdAr7cCsUqmg1+uh0+mg1Wqh0+lq6kFQb+woeqvViomJCVy8ePGnup5fBCQoil8olUoR+CoUCjCbzXA4HGhsbMTCwgLW1tZE+2Z6PgXF0uk0VldXEQ6H4Xa7MT8/j8XFRbhcrrKWr3T45XY3v7RI5oMPPsD169dx/Phx2O32qva1FGyjaP3CwsK2i49cLofNZsOxY8dw/vx5nDhxAm1tbdDr9cjn8wiFQpidncXdu3dx584dLC0tVbyQ0e9ZTf68XC6HwWAQU2ylsweY7dnV0jNboWM5mpyqUqlQLBaxurqKeDwubthcLici8B6PB8vLy1heXobX6931qK3Sm56mx968eRODg4MwGo1bqtkqIZvNIhAI4MWLF3jy5Ikojy2FLDydBpw5cwadnZ2i7VUsFsPq6ioePHiABw8eVCV4olovUi6Xs1tfA3xkVyMKhQImkwktLS1IpVIiMYTKO9PpNEKhEFZXV4U3EIlE9i1xZHBwEDdv3sTNmzfR19cnOuVWCnkykUgEc3Nz+PbbbzE3N1e2xbdKpUJjYyNGRkYwMTGBsbExkWork8lEht13332HR48e7egt7DcqlQp2u33LcSGzMzzAsgK2u5FI+M3NzfD7/QgGg4hGoyKYtbKygvn5ebhcror2tZWgVCpx8OBB3LhxAzdu3MDAwEDVhTu0b6by2AcPHuDZs2eIRCJiAi/FKDQajSikuXjxohC82WyGXC5HOp0WnsL9+/fx+vXrPY/grga5XI6WlhZxSsGi3x0eYLlHaIADjWdKJBKIx+Pwer1YWlqC2+3eN8HL5XL09vbi+vXruH79OgYGBsSNXs2IaiqPJcHfu3cPS0tLyOfzwlugCsHm5mYMDAzg/PnzIsGHzuNpazAzM4P79+/j6dOnVXXd3Qu0nzcajWhqaoLD4ahqzFc9w+79HqFjI6vVCrvdDr/fj2QyCZ/PB7/fv+sgx0pRKpXo6urCpUuXcP36dfT19YnEn0rJ5XLIZDIIh8NYWlrCo0ePcOvWLbx58wbJZFJkElI2YWtrKwYHB3Hy5EkMDg6ivb1dVLCl02kEg0HMzc3h9u3bePjwIdbX13+yCUhmsxmtra3o6OiAzWbj8/kqYNHvERKK2WyG3W7H+vo6ZDKZmFa7H3t4jUYDp9OJ8+fPi/FWFovlrak45ZBWzMXjcVHdRumwdIZOORl6vR52ux2dnZ3o6+tDf38/Dh48iAMHDoicDdq+vHr1Crdv38adO3ewuLj4kyZvUTHT0aNH0dTUxI0zqoA/qX1AoVBAr9ejsbERzc3NsNlsIguO9se1QC52S0sLRkZGcP78eQwMDAj3ertsQDoBkObwb25uYnV1FXNzc3j+/DlmZmZEdZtCoRA5+U6nE93d3Th8+DC6u7vR0tIiagfoGHJzcxMzMzO4d+8eJicnsbCwsCVz86fAYDCgvb29oupFZiv8Se0D5OJbLBa0trait7cXGxsb4nhOWkVWyWvR7HYKEvb19eHEiRPo7u4W7rW0iaS0Bp76x9OsNwoovnz5EtPT01hYWEAgEBDRda1Wi8bGRnR0dODQoUM4ePAgOjo60NTUtCWtlbIL19bWMD09LVJ13W73TxapJ1QqFSwWi9jLGwwGdu2rgEW/D1DBiF6vR1NTEw4fPixaNykUChHMo4IaqUtOhSZ07q/VamEwGERwsKWlBV1dXThw4AAUCgXi8fiW9FNpIhG58F6vFysrK1haWhKJQOvr6/B6vSKXgI7hOjo60N/fj6NHj6KnpwctLS2wWq3Q6XSiV0AqlYLf78fc3Bympqbw6NEjMc2mlj08/d4AahoMSuXNTqez6rgGw6LfN+RyOdRqtaihB753z81mM16/fo3NzU3E43EhEooFUGstnU4n9tRUnWc0GsVXPB7H8vIy1tfXoVQqtzSDJMueTCZFMpDL5cLy8jI2NjYQiUSQy+W2NL1obm7G4cOHMTIygqGhIXR3d8NutwsRUf1BJpOBz+fD8+fPce/ePdy/fx/z8/M1HctpNBrodDpoNBrR4qraxhdKpRJ2ux1dXV1oaWnhtNsaYNHvI1T4YbFYAHxfmNLY2Iiuri643W6EQiFkMhkAP6T2Ut44xQAoo04qaK/Xi9XVVZEElEqlhMjj8ThisZj4kxpKkFdBYpLL5SKbsLW1FSMjIzhz5gyGhobQ2toKi8UCrVYrrCal59Iwi7/85S+4d+8elpeXq3bnqcy4ublZDOWk32tjYwPhcFh8LpW8lt1uh9PpRGNjI5fS1gCLfp+gG08qfIVCIfbMnZ2diEQiyGQyosuONJWXrDd1iQ2FQgiHw6Kiz+fzIRQKiaYRmUxmSx3+dtWP0i2E2WxGb28vzpw5g9OnT6O/vx8tLS0ifVc6ZoqCdm/evMHk5GTNqbVUgtvf34/+/n50dHRApVIhEAiIKTzVTLchb8psNnPqbY2w6PcZEplarRa1C3TuTQU4UutLiwU1z6AzfpfLhZWVFbhcLmxubiIUComhjbu9fykKhQKNjY04evQozp07h/HxcRw+fBh2u10E6ko70KZSKWxsbODbb7/F/fv3a0qt1Wg06OjowMmTJ3H27FnRCbhYLMLn80Gn0yEcDsPn8yEWi1UkelpIqeKz3rNFa4FF/yNB4lcqlSLhhY7ZMpmMmMOez+eRzWbFftzr9cLtdmNlZQVutxt+vx+xWKzifW9pFx/KTR8eHsbExATGx8fR3d0tuvKW60ufy+VEqe3U1BTm5uaqFrxKpcKBAwdw5swZXL16FceOHRMttguFAgwGA+LxOFZWVvDmzRv4/f6KXHxpvCGdTovAKLv4lcOi3ydIbNIzchI0Nc4IBoMIh8NijFMymUQ6nRZz1kOhELxeL3w+n7B+tEevBaVSCYfDgdHRUVy5cgVnzpxBd3c3LBZL2Z70wPeufTKZxOrqqojSh8Phqi2q1WoVJbijo6NwOp3Q6XTiuLFQKMBut6O5uVlcTyUuPsU7otEowuEw0uk0jEZjTZ9PvcKi30doL0zHZ4lEQuzLXS4X3G43Njc3EQwGxcRVCsjRuTp9P5VKVTy6uRwqlQo2mw3Dw8O4dOmSsPBms1kEC0utI2Xueb1ezMzMiHP4agWv1WrhdDoxMjKCgYEB0RabvIpisSgCmUajETqdTlzTbu9FUf9QKIRAIIBEIlHRWG3mB1j0e0RqIWmYAwmepsIsLi7izZs3WF5eFqKPx+NbynGlffRo4ah1v0pdavv6+nD+/HmMjY2JbjrUt6/cbDkqxHn9+rXoWFtJI04pMpkMJpMJ7e3t6O7uhsPhgEajEV5FqUcEYMu8+t0WOZpyGwgE4Pf7EQ6HOYpfJSz6PUA3LiXHkOCTySRCoRA2NjYwPz+PV69eifZYgUBAnNeTJacvqSBqhabsdHV14dSpUxgZGUFbW9tbffel7yE9NXC73Xj+/DmePXu2bUONnaAkJavVKqx7aQss2vLEYjFEIhExhLIS0VJf/lAoBL/fD6/XKwKSKpWq6uutR1j0e4BuZqmFTyaTiEaj8Pv9cLvdWFpawsLCAlZXV0VGHA1m2C+hE1Ru2tLSIopl2tratk1TlVp4aoRBgl9dXa2pgEbaFJT69uv1ejH2i2IGfr8fLpcLLpcL4XC4Ys+GhmiSe+/xeNDa2orGxkYWfYWw6GukNGBHok+lUojH44hEIggEAvD5fKK5Bu3TpYLfD7FL8/UpJ6C3txdNTU3Q6XQA8NaWQVp9Jx1h9ejRI8zOzoqGGrVAx31zc3PQ6/VIJBKwWq0iWBeNRrG6uornz59jfn4ewWCw4tMJ2s/HYjFEo1HhOdXbPIa9wKLfA6WiLx1aUWrN6Tn0514FT3tzSuc1m80i681sNgOACBBSGi69Ny1S5JUsLCzgu+++w/T0NDweT80nBpTUs7y8DLlcjnA4jK6uLtHOKp/PIxAIYHl5GbOzs1haWhILTKVBS0pQoj+lMwWY3WHR7wGpey8d9USRaZPJBKvVCrPZDJ1Ot6XaTjr4Qkols+7Ihabgl0ajgcFgECO01Go1EokEPB4P8vn8low7qXUnwW9ubooCnbW1NdH4g3rQV7M4UZKR1+tFMpnE+vo6Xr16JYp4qIkmzaUPBoNIJpNVzVPIZrNii0RfnKRTOSz6fYAEqFQqRSae1WoVrj5F6ktvznIVZpRWKo2wl/5J0W6FQgGVSiUq88iVJ/c5GAxCr9eLvS4Jnsp9ac9NKb+xWAzJZFL0x6NrqUZUxWJReDuUu+9yuYQ3Qufs6XQa6XRaeEjVTrQpXWg5cl85LPo9QuKgKDXlg0vz2KWikcvlIoee3NLSLDqpuOn1pYM0KJdemu2nVCrFkRvtqWloh/RIUCo0qeDoOmkRkk6OBaoTPrB1Th+VGEuP7ejEo1a3nAKDVLvAoq8cFv0ekFpD6b9JkNKcdvoZWTyp8EsFJXXfSeTSibjSf9P704z2aDS6Jb2XxE5xh9IAYulrSrcQNIxSen5eixtNC8B+Qgus3W4Xx5FMZfAntQekYi79d2mKa6k7qlAoEAqFttSTl7P45cQofU1y2clqSgW+256XrC653HRdpVZzP48V9wP6bEwmk5ggzKKvHP6k9ohUjCQcacWaVquF2WwWOfbxeFzk3EuPmUqFL52UI11M8vn8W2OvSPBSa15JVh8tHNIFRurSS93+X4rgAYh+hC0tLWhpaYHZbGbRVwF/UjVSSa95aYBPo9GIrjhGo1EE2MpZ7u2scjkLTKKXehO17L/pS+q57GcuwX4hl8vR1NSE4eFhDA4OVj27j2HR7wtS0ZBQyEJKz/DJIpd+SS01CXY7oZXmzEvff68ilb7OLxWbzYaxsTGcP38efX19MJlM3EijSlj0NVIq9FL3WlonTznm4XBYlNbSMR4ll5B7L100tkNqiaXXI/3zXcRgMODYsWO4du0aTpw4IYp52MpXB4t+D5TWzZN4ybJTUUkoFMLm5iY2Njbg8Xjg9/sRiUREx1zpsVlp0K8c5RYEaVDuXRS+Wq3GqVOn8NFHH+HMmTNwOp0s+Bph0e+BctV1NNmG2lFHIhGRfba5uQmv14tQKCQsfWl2Gb3ubu9bTxiNRoyOjuLDDz/ExMQEOjo6eELtHmDR1whZZGmhDWW6pdPpLaWjlOlG+ewqlQoajQYajUYIPZvNihOA0jPxcum30iy97Y4Hpfn/PyVUAERHl3QMWBrn2G3xkslksFgsGB0dxccff4yJiQn09PTwoMo9wqLfAyR66uZKN7K0OQTlxdNxnlarhcVigd1uRzQaFft7OsaTFuwAW7vZUuYdtcpWKpVbkoCAH7wPac06deP5sYdLymQyGI1GWK1WWK1WGAwGMdqrWCwKb4hSf6lRaDm0Wi2am5tFj72zZ8+is7OTBb8PsOj3iNQa0+AFEqhKpYJOp4PJZBLWn7wBOrMnUVLvetoaSC2hdJqsWq0WrbMpDVfadYZadUlHW9Fr08ISj8dFS669QPX71L/fYrHA6XSivb0dzc3NMBqNYiQWlcKGQiFRD08pw9QbT5q81NTUhJGREUxMTODUqVNwOp3s0u8TLPoakabVFotF0be+9Pit3JEcbQnKbQuo4kxq7YEfsvjIupdaeXLrKb++dFGhoCF19fF6vaLCTdqQUnrsV5psJD0aoz76bW1taGtrQ1NTE5qamtDR0SGaWlDn22QyiWAwCL/fD5/Ph0AggEgkIhY5aUdbtVoNg8GAtrY2nDx5Ev39/WhqauKg3T4i22VfVV8Royop3Z+W+wLw1t/LneVLv+j79HiidG8vTdgpjTHE43HRWYYaSNLpAjXsjEajQnTkIVCdOn2filp0Oh10Op1IhJHJZLBareju7sbg4CC6urpgs9lgMpmg1+tFXzxaiKiUl67J6/WKbraUZajT6eBwOMScuubmZtGqmwVfE2U/NBb9HilNhtkt7XWn72131l5JtF5qqem4kERGAg+Hw/D7/QgEAm9V+VFJLHkJ1OUH+P64jERvNBphs9lgs9lgt9tx4MABYempLVfpYkQekLRhKHW/IS9DJpOJaUB2u12Mxy5XC8BUDIu+XpAG82gbQdNs3W63GKFd+ljp4yknn1KIqYSVilza29ths9mE9Ver1bvmv0vFT+9HJwsUsKSTDS6X3RdY9PUKWX9yscnVl3bRob1/KpVCoVAQQyfNZjOMRqPoE6BSqcT3pb3sa6H03mOR7zss+npHGmiUBv4okCgN6kk78lBxkDSgx2733wQseqY8pacNtMeWduhh/iZh0TNMnVFW9FyTyDB1BoueYeoMFj3D1BkseoapM1j0DFNnsOgZps5g0TNMncGiZ5g6g0XPMHUGi55h6gwWPcPUGSx6hqkzWPQMU2ew6BmmzmDRM0ydwaJnmDqDRc8wdQaLnmHqDBY9w9QZLHqGqTNY9AxTZ7DoGabOYNEzTJ3BomeYOoNFzzB1BoueYeoMFj3D1BkseoapM1j0DFNnsOgZps5g0TNMncGiZ5g6g0XPMHUGi55h6gwWPcPUGSx6hqkzWPQMU2ew6BmmzmDRM0ydwaJnmDqDRc8wdQaLnmHqDBY9w9QZLHqGqTNY9AxTZ7DoGabOYNEzTJ3BomeYOoNFzzB1BoueYeoMFj3D1BkseoapM1j0DFNnsOgZps5Q7vJz2U9yFQzD/GSwpWeYOoNFzzB1BoueYeoMFj3D1BkseoapM1j0DFNn/F8b1sSS6Cf/JQAAAABJRU5ErkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 55\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 56\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 57\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 58\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 59\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 60\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 61\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 62\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 63\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO29WXeTV7bv/VcvWVYvuZVlG2ywMTgGGwMG7NCFnVAkFVKpqlH3Z5y7c3Ouzjc4t+9XeHfVzq7sjNoJgSSVQBLABLBxjDG2cd+36vteOheMteqRO0m2Q6f5G8Mjsayn0YP+a80112xE6XQaBEEUDuJXfQMEQbxcSPQEUWCQ6AmiwCDRE0SBQaIniAJDmuXv5Np/g0in01heXsbt27fx6NEjSKVSyGQyJJPJHZ1PJBIhFAqhoqICH3zwAZqamqBUKvf4ronfENFmL2YTPfEGkE6nIRKJIBKJkEqlMDY2hm+++QYKhQJKpXJHomfnc7vdOHToEM6ePQuxmAzDtwES/VtGOp3G3Nwcpqen9+yc8XgcoVAIItGmEwfxhkFD91uIVPqvsXwvhKpQKEjwbxEk+rcQoRkuHADyPQc7ViqVkujfIsi8f8vZqRMvlUqBhWjv9BzE6wnN9G8hqVTqVd8C8RpDon8LIS87sR307SCIAoNETxAFBomeIAoMEj1BFBgkeoIoMEj0BFFgkOgJosAg0RNEgUGiJ4gCg0RPEAUGif4thGLvie0g0b+FUOw9sR307SCIPeSrJ4v44P+7h//x/z+GKxh71bezKZRPTxB7hN0fxf/+fACJVBrDyz6Y1M/xfz9pftW3tQGa6Qlij4jEk0ik/lVA2h9JvMK72RoSPUHsEVXGIvzPrn0QiYAyrRL/60L9q76lTSHzniD2kP/zfiP+96WDkEtf3/n09b0zgnhDeZ0FD5DoCaLgINETRIFBoieIAoNETxAFBomeIAoMEj1BFBgkeoIoMEj0BFFgkOgJosAg0RNEgUGiJ4gCg0RPEAUGiZ4gCgwSPUEUGCR6gigwSPQEUWCQ6AmiwCDRE0SBQaIniAKDRE8QBQaJniAKDBI9QRQYJHqCKDBI9G8hv0Wr6nQ6nf1NxBsBiZ7IikgkgkgketW3QewRJHqCKDBI9G8ZUqkUUunetChks3s8Hkc8HicT/y2BRP8WEY1GsbCwALfbvSfnY74BnU4HkUj0m/gKiJcPif4tgM3IDocDjx49wvT0NP/bboVqNBpx9OhRGI1GWte/JZDo3xISiQRcLhemp6fhdDr35JxyuRzt7e24cOECKisr92zZQLxa6F/xLUEkEiEajcLhcMDr9e7oHGKxGGq1GjKZDDKZDEajEcePH0draytKSkogkUj2+K6JVwGJ/i0hFovB4/Fgfn4eHo8n7+PlcjmMRiOsVivMZjMUCgWKioqwf/9+lJSUQKVS/QZ3TbwKSPRvOOl0GvF4HNPT0+jp6cHExETe63idTofy8nLU1NSgvLwcBoOBm/JFRUVIp9NIp9O0pn9LING/oaRSKaRSKYTDYSwsLODWrVu4ceMGlpeX8zqPSCRCSUkJGhoaUF1djeLiYigUCqTTaSQSCcTjcfj9fuj1eigUit/o0xAvExL9G0g6nUYsFkMoFMLS0hL6+vrw/fffo7e3F4lEIq9zSaVS6PV6lJaWwmAwQCQSIZlMIpVKIZ1Ow+/3w263w2g0Qi6X7/lsL9z7z+Xc+b6f2Ah57/cQZgb/1kEszKR3Op2YmJjAwMAAZmdn8xY8g4XZCkUkFoshFovh8/mwvLwMv9+/4/NvRjqdRjKZzPhhA81mzy+dTiOVSiGZTCIWiyEWi+3p/RQSJPo94mUJniGMlvN6vQgGgzs6TzKZRDQaRSQS4VF3wgEgHA7D6/XC7/cjHo/vyb2z58REzATPRL/d++PxOCKRCKLRKBKJBEUJ7gAy7/eQ9V/A38r8FIlEkMvl0Ol0MJvNKC4u3vF2GvMLhEIhxONxSCQS/jkkEglUKhX33LNwXAAZA5xIJOKWQS7JOULBM6fjVvfPrsGOYX4GkUjE75XM/Pwg0e+Slzm7M0QiEWQyGTQaDUwmEwwGw66cbPF4HLFYDMlkkr8mkUig1+tRUVGBqqoqFBcXI5lMIhQKIZFIIBqNIhaLIZVKQSQSQSqVQi6XQ6lUQqlUQiaTQSzONCTZs0omk1y8qVQKEomEDxybIZzp2WAhEololt8hJPpdsl70LysNlQlfq9XybTbh3/IRhEKhgEwmQyqVglQqhdFoRElJCf/R6/VQqVQQi8WIRqNwu91YXV2F0+lEMBhEJBKBWCyGXq9HVVUVysvLodfrIZfLM2Zw4Zo8HA4jGo0CeBEjoFKptp252bHM2pBIJFsuB4jtIdHvkq0E/jKELxaLoVKpYLFYoNPpdnweqVQKtVqNkpISVFZWwmazwWq1crFLpVKecMN2DRYWFjAxMYHV1VU4HA5Eo1EYDAY0NjbinXfeQX19PUwmExQKBZ/BmYXg9/vhdrsRCoX4YMGsBfZeoZjXm/axWAxSqZQSgHYIiX6XbCbul7XGZCaxUCz5wkzy0tJSNDU1ob6+HmazGWq1GgqFIuOzJJNJPsO63W7Mzs5iamoKy8vLCAQCkMlkmJqagtPpRDQaRUNDA0wmE2QyGdLpNCKRCNxuN1ZWVrC4uAi/3w+lUgmr1cotF4lEwn0DDKHoY7EYotEof41m+vwh0e8Br8qRxIRkt9t3HG9vNBpx5MgRnDhxAkeOHEFpaSnkcvmWg0gqlUIwGMT8/DyGhoYwPT0Nr9eLRCIBkUgEl8uFSCSCZDKJdDqNuro6FBcXI5FIwO12Y2ZmBs+fP8f09DT8fj80Gg0aGhqQSqUgl8v5ACa8PhN8JBJBMBhEOBwGAH4NIj9I9G8w6XQagUAAo6OjmJuby3g9FzQaDY4ePYpz586hra0NZWVlkMlkW74/lUohEAhgZWUF4+PjmJiYgN1uz3hPLBbD8+fPIZfLoVarkUwmYTQaEYlEMDc3h2fPnmFoaAiLi4sIh8PQaDRwOBxIJpPcASiRSCCTybhvIplMIhKJIBAIwOv1knm/S0j0bzAsQOfZs2cZos+VsrIyXLp0CSdOnEB5eXnW1NlkMgmHw4GhoSGMjo7C4XBs+r5gMIi5uTkMDw9DJpPBbDbD4/Hg+fPn/F4DgQCSySScTie8Xi/S6TSKioqgUCggkUigVqu5sMPhMHw+H+x2O08bVqlUZN7vEBL9G0oymYTL5cLU1BTm5uZ2NOtVVlaipaUFVqs1p1z5dDqNxcVFPHjwADMzM1sKLpFIIBQKwW63Y2FhAT6fD2traxgZGcHMzAy8Xi/f72dbfwMDA1AqlSgqKoJMJkNpaSkUCgVSqRSPCpydnYXH44FarYbBYCDB7xAS/RtKPB7H5OQk7t+/n3eSDQDYbDa0t7fDZrNBqVRmfT9bk7OwX7/fn9N1kskkF/3q6iqP7BMKNhqNYmVlBU+ePIFGo4FEIsHBgweh1WqRTCZht9sxMTGB6elphMNhVFRUoKKigmb6HUKifwNhs9/g4CDu3LmTc008sVjMLYJTp07h4sWLMJlMOXn+g8EghoaG0NfXh9XVVQBbxwNIpVIUFxejtLQUJpOJO/bYdttmx0QiESwvL6Ovrw9isRh+vx8WiwXJZBLLy8sYGxvD/Pw8X+8LnYVEfpDo30ACgQDGxsbw+PFjTE5O8oCWbAJgolcoFGhsbERTUxO0Wm1O1/R6vbh37x7u37+fERq7GWq1GtXV1WhqaoLNZsPa2hpmZ2cBbF+zLxQKcWF7vV6YzWYkk0msrq5icXERDocDWq0WJSUlJPpdQKJ/w2DOr59//hkPHjzgmWbZvvwikYi/9+TJk2hubobBYMhplo9Go1hdXcXAwABmZmayvr+srAzHjx/HsWPHYLFYoFarMTU1BblcnvWz+f1+zM/PIxgMQqPRIJFIIBAIwOPx8BDgQCCAcDiMRCLBTXyKv88dEv0bhs/nw/Pnz3Hnzh08f/485+PYoNDQ0IBPPvkER44cycl5x2bap0+fZgh+K8tCqVSisbERp06dQmNjI6+8Y7PZoNFost4j8wHEYjG4XK6MVNpIJAKlUolwOIxIJMJj/4n8ING/QcTjcUxNTeHHH3/MWfBCcTY0NOBPf/oTLl26hOrq6m335BmJRAKTk5P45z//mTUWQCwWo6GhASdPnsShQ4dQUlICsVgMi8WCysrKnJYSLJmGCVuYd8+eAUsFjkajGUlCRG6Q6N8Q4vE4Zmdn8fPPP+PmzZtYXFzM63ilUonOzk5cuXIFtbW12wpeaC6n02msrKygp6cHHo9n0xmevSaTydDW1ob29naUlpZCqVQinU5Do9HAYrGguLg4630yka//nV1zfcIO+xuZ97lDon8DYCb2nTt3cOPGDYyMjADILZuOCaKlpQVnzpzBwYMHs66thQJi8fLMYy+RSDZUrGH3YDab0dzcjPr6ehQVFUEsFiOdTkOhUKC4uBhKpTLnDEAm/PVZjCw6LxQKIRqNknm/A6hyzmtOKpWC3W5Hb28vvvzySzx48ID/LRfnHQAYDAZcvnwZR48e5cLLhWg0iqWlJSwsLGTcz2awkN76+nro9XoeRsuKXchkMp6tl8s9s8+3/jOm02lEo1GEQqEtt/+I7aGZ/jWGObWePn2KL7/8Ej09PTwHPRfS6TTMZjMuX76M8+fPo6amJqd1PMPv9+Px48d49OgRn3mFohfO2hUVFejq6sK+ffsyCnoIlwnCSjmbwQYIYcz9Zp+J5dRTU82dQaJ/TUmlUvD7/RgcHMS3336LH3/8EWtrazkdKwzCOXLkCD755BMcPnw4pzW1kFAohP7+fvT29matj1ddXY3W1laUlZVlFM5glXuF2XGbwVJr2RbiVjXzWGluMut3Don+NYRF3I2NjeHmzZv45ptv8nbcMfbv34+Wlhbo9XoAyMvpFY/HsbKywkNu16/H2f9bLBY0NjbCarVCrVZvyMH3er2Ym5uDy+Xa9Dqs5p9CoYBUKuUDBRP+Zu+XSCQ5LReIjZDoXzOSySSCwSBGR0fx1Vdf4ZtvvsH4+HheZizLTW9ubkZ7ezuMRiOfQfNZz/v9foRCIf6aUPRCa6KtrQ0dHR0wGo0bClyyMNq+vr4tBy6pVAqVSgW9Xg+lUolYLAafz4dEIrFpmWupVAqlUskz8kj4+UGif41IpVLwer0YGhrCt99+i+vXr2NkZCQvwUulUiQSCUgkEly6dAknT57Mu2hmOp3mKbvCJYXwPpjgS0tLcebMGRw7dowvH5g1kUgk4PF4MDY2hp6eHr4DIITN8kajEVVVVdBoNAgEAlhYWOABOOtrECoUCqjVahQVFVFTzR1Aon9NSCQScDqdGB4extdff42bN2/uqC8dc36ZTCa0tLRg//79OWXRrb+X2dlZ/PDDD5iYmOCvrx989Ho9Ojs70dbWhoqKCj64sJk3EolgcnISfX19GB8f39QvIBKJUFRUhMrKSjQ2NkKv1/Oaeyz0djPRazQannNP5Ac9sdcAlj7a09ODr776Cj/99BNmZ2fzmuGZ6c089u+//z7q6uryFjxzIE5OTqK7u3tDoQyhN95ms+Hy5ctobGzccB3ml+jp6cHdu3fh8/k2vZ5EIoFOp4PNZsPBgwdhMBiwvLwMl8uFxcVFXmBDWIufVeVhFXTJvM8PEv0rJh6PY25uDt3d3bhx4wa6u7uxsrKS93mEa+2zZ8/i2rVrqK6uzlsQyWQSMzMz6Ovrw9LSEoB/DSjCNb3ZbMbZs2dx/PhxlJSUbLhOJBLB0tIS+vv7MTQ0tKXFIpFIYDKZYLPZUFtbC61WC4lEgoWFBajV6g3BQGw5oFKpoFQqybzfAST6VwSrLjM7O4s7d+7gH//4B3755Ze89uHXI5PJ0NraisuXL6O1tRUmkymv49PpNFwuF3755RfcuXNnQwYf+69MJsOlS5fwu9/9DlVVVRt8BqlUivsERkdHuVm/WTQeq7NfUVHBM/Ki0SiMRiM334XPhFX/lcvlmzbUILJDot8FO2ljlUqlEIlE4PV6MTIyglu3buHmzZsYHh7edUPGpqYmfPrpp+js7Mw5T16Ix+PBw4cP8d1336G/v3/T9yiVSly4cAHXrl1De3s7r7cv3ApMJBJYXFzE3bt3MT09zY/dquCG0WiE2WyGRqOBQqHgszirjLt+10Amk2VUziXyg0S/Q1gzxVQqxWef7UxNtufM9t8fPXqE+/fvo7+/P8NZlitCISiVSrS2tuLq1au4ePEiqqur83ZwMcH/7W9/w71797Z83+HDh3Ht2jW+RbcZLHS4v78/a0CRUqmEXq+HTqfLMNe36mDLRC8cEIj8INHvEFbMIRgMQi6X84QS9qUVijIWi8Hj8WBpaQmjo6N4+PAhbt26haGhIX6+fFtRCQV/6tQp/OEPf8DFixe5Fz2fta7P50Nvby8+//xzfPPNNwgGg5veT3V1Nc6fP4+Ojg6UlJRk/G19QE4gEMhaVkssFkOr1UKv16O4uJhvN7L69pFIZIP1I5VKeVAOCX5nkOh3ACvLvLy8jKWlJSgUClgslow2UAB4NxaXy4XR0VHcuXMH3d3dmJ6ehsfjyTjnTmLIVSoV3n33XfzpT39CZ2cnysrK8kqoAV4Ivq+vD59//jmuX7/OW15vFoRz7NgxXLhwAWVlZVtaEiwhhlW2AbYWvUKhgNFohNFohEql4se6XC6sra3xJhrCY8ViMSQSCTnwdkFOoi/kpIbNBBSLxTA/P4/+/n6MjY0hnU5Dr9fDYrGgpKQEOp2Op8NOTExgbGwMMzMzGBsby4hKy3d2X2/SnzlzBn/+85/x7rvvoqKiIu/tK6/Xi97eXvz973/Ht99+y8Nkhddhgm9pacF7772HI0eObBvDn0gk4PV64XK5spby0mg0qKqqgsVigUKh4ME8CwsLmJ+f51F563kVnYLfJnISPZlR/3JUhcNhTE9P46effkJ3dzfm5uYQi8Ugl8t50Ua9Xo9kMomlpSWMjIxgampqw7bTTr647P1SqRQnTpzAtWvXcO7cOZ7kks+/k9vtxsOHD/Ff//VfuHnz5qaRd+w+q6ur8cc//hFdXV2wWCzb+gtisRgWFhYwNTWVNUnHYrGgrq4OJSUlkMlkCIfDWFlZweTkJGZnZzcE5rB7Y5V0qD7eziDzPgvxeBx+vx/BYBCpVAorKyu4e/cu/vGPf2BgYCAjKYQ5lliTR1b2ebMv7k4Ri8U4fPgwPvroI1y4cAFmszmvdFngheC7u7vxt7/9DdevX98y+y2dTsNoNKKzsxPnzp3Dvn37sjoIWRTe0NAQYrEYP896LBYLDh48yMtqiUQieL1eTE9PY3x8HGtra5tuX7LKOdFoNMORSuTOtv+CoVCoIBsKpNNp/kWamJjA4OAgVlZW4HK5MDMzgydPnmB6ejqvPfV8TXmGTCbjM6ZYLEZ7ezuuXbuG8+fPw2q15hxxxywLu92O+/fv49///d/xww8/cMFvlUxTX1+PS5cubciT34pYLIa5uTmMjY1x0a9Ho9GgtbUVXV1dOHDgAPR6PW/E+fz5c972arPnxZJwAoEAfD4fiouLKSovT7YVvcfjQV9fH0ZGRngn00IYAJjo0+k0n7WcTifW1tbgcDi2DTZZ/+XLViN+M4TnZdfS6/Vob2/HlStX8N5776GqqgpyuTzn2IBgMIiFhQU8ePAAX331Fb7//ntEIpGMsFrh+4EXfoP29na0tbVtu+8vNLFZiW4WVbj+Gen1ehw9ehSXL1/G6dOnUVFRAbFYzLvgTE9PY3V1dduYBdbSy263w2Aw5O28LHSyzvSfffYZPvvsMwAvvK3Z1mlvG+uLOgjZTMh7MShulthy7do1fPzxx2hpaYHBYIBKpcrJrGWlpCcmJnD79m3cvHkTjx8/zjoYKZVKvP/++zh//jwqKyu3tSiEQTmsu6zwb+waOp0O7e3t+Pjjj9HR0QGr1QqFQsGr29rtdiwvL2dtmcUaaa6ursJqtUKn05GJnwfbij6dTvMtHAC7ChF9U3lZFVo2m3Hb2tpw9OhRHDp0CMeOHUNTUxNMJlPOzqtEIoGVlRV0d3fj+vXr6OnpwcLCwgZHnRBm2kulUpw+fRqtra05V7ENBAKYn5/nnWWFn4dl5F29ehWnT59GVVUVH0hYZR273b5hK3Oz6yQSCfj9frjdbgSDQSQSCcq2y4Ntn5RIJIJarea/KxSKgqszvlX1lr2GicNoNKKkpAS1tbW4fPkyurq6UFtby3u3A7ntpsTjcSwtLeH27dv44osvcPfuXT6Ab7d7wD4ra3tVWlqa0yzKcvB7e3s3hN4aDAacPn0av//979HV1YXy8nIoFIqM+wgEArDb7YhEItteJ5FIwOfz8W3BtbU1GI1G3teeyE7W4VH4hWfeUuK3Qa1W4/3338cHH3yApqYmHvBTVFSU13lYjMC9e/fw2Wef4fbt25uWudqKgwcP4urVq6ipqclZSGyQ+eWXXzA5Oclf12q1aGtrwx/+8AecPXt2Q949E73P54PT6cxqTcZiMaytraGkpAQOhwOzs7M8bl+lUuV0r4UO2USvCKGHXKFQ4NChQ7hw4QIuX76MlpaWjBJX+cDKbQ0PD+OLL77Aw4cPc/IzCO/HZrOhq6sLVqs1J9EnEgm4XC5MTU1hdHSUWxRisRjNzc348MMPcerUKVRWVnLBC5cYzNHodDqzJh3F43HY7XY4nU44nU4sLy/D6/UWnAW6G0j0LxkmLiawffv2oa2tDV1dXTh9+jTq6uoyllRAfsUsU6kUDx568OABAoFATtuF7H7UajWamppQW1ubc/XceDyO8fFxPHjwgAf5yGQy7N+/HxcuXMC77767aQqu8NrhcBiBQCCnTEMWl8863Xg8Hvh8Pl5Ug9geEv1LRrg8OnjwIP785z/j8uXLXOybmaj5CN7hcODevXv45z//yave5NIUI51OQyqVorOzE6dOncpZ8KzM1+PHj3Hnzh3uuTcYDDh37hzOnTuHmpqaDd7/9U0tWLx+rrsfrOcdAKyurmJhYQHFxcXQaDS0fZcFEv1LYP1MKxaLcfr0aVy7dg3vvfceamtr92Q9yiLtbty4sWU+/Gaw6jQikQgnT57M2WMPvEjY6e/vx/379zE1NYVYLAalUokDBw7g7NmzaGhoQFFR0ZZCZGv6eDy+ZTDPZoTDYd7kcn5+HsXFxaisrERxcTGJPgsk+pcAE3xVVRXq6+tRX1+P06dP49SpU6itrd0Tk9TlcqG7uxt//etf0d3dndexzKQ+evQompubUV5enlNor9/vx7Nnz3Djxg309vZy0dpsNpw+fRqHDh2CwWDYVoTCWPp8ioh4PB6srq7CYDAgkUggGAxSx5scIdH/xigUCl7t9eLFi7h06RIaGhpgMBj2rISz1+vFL7/8gv/4j//Ad999h1gsluGYy4WDBw/io48+yqnBJfBC8AMDA7hx4wa+//57zM/PA3iRDNTQ0IAzZ86gvLw8a0MKtu+eb9cat9uNpaUllJWVUYHMPCHR/0aIRCKYzWYcO3aMz3p1dXWwWq0wGAx7FkHm9XrR09OD//zP/8T169f5bJuPgBQKBc+Vt9ls2wa6sOo/g4OD+PLLL3H9+nWeLiwWi2G1WtHU1MRj6rN9ThbFl49pz47z+XwIh8P8s9Isnxsk+h3Aqr2oVCqkUilEo1HelIHFw2u1WrS0tODChQs4efIkrFYrD53dzYwk9OT7fD48fvwYn332GX744Qce2LLdLC8MKwZeFOLo6urCv/3bv6G2tnbLmIBUKoVEIgGHw4G+vj5cv34dt27dyijVrVAo0NzcjKNHj8JkMm27RBBWFfJ6vbxaTz4IrQO2TEilUuTBzwKJPk/UajWqq6tRW1sLvV6PeDzO+6Unk0le1NFqtaKzsxOtra3czN0LmDA8Hg96e3vxxRdf4Ntvv8Xa2hp3GG43ywvTgMvLy3H06FF88sknOHPmDDQazabHsL3xqakpPHnyBHfv3sVPP/3EdwfYIMMGuoMHD0KlUm0rYpFIhHg8Dp/Ph7m5OdjtdohEIp7olMuszc7PuumEw2HE4/G8U40LDRJ9HojFYpjNZtTW1mL//v3QaDQ8vzsWiyGZTEIqlaK8vByHDx/GkSNHti0ttVM8Hg8ePHiAv//97/j66695xZt8zNt33nkHH330ETo7O1FXVwez2bxhByEWiyEUCmF5eRn9/f347rvvcO/ePSwvL2dEzqVSKYhEIpSVlWHfvn0oKyvbNg2XeevdbjcmJycxMDCA+fl5iMViyOXyLXvYbYVIJOL970KhEJRKJSXgbAOJPg/0ej2sVivKy8tRXFzMq7LKZDIuGIVCgf3796OxsRGlpaU7mnWE0WrrX3M4HPjll1/w17/+Fbdu3doyQYUV8xCKR6fToaWlBYcOHUJbWxva2tqwf//+DbNyOp3mWW+//vorfv75Zzx8+BCjo6MZ1xNuRer1etTX16O8vBxFRUVcdMLlCHPaRSIROBwOjIyM4MGDB3j06BGWl5e5ac4GkWyDGPP4s/v1er18jU+i3xoSfR5otVqUl5dDr9dnCIp9qSUSCSwWC6xWa9Y17XasN4uTyST8fj8WFhbQ09PDPebrE2iE/88EJpVKYTabeT7+xYsX0d7ejtLSUhQVFW3w1KfTafj9foyPj+P+/fv46aef8PDhw4yuO5sl7FgsFjQ0NMBsNm9YU7P1djAY5HUDR0ZG8PTpUwwPD2NxcZEX8xCLxRtq3W8F86fE43HE43FEo1HqXZ8DJPo8UCqVUKvV3HxkUWEsflylUsFqtaKioiLrmjYXmJPLbrdjZmYG3d3d+OGHH9DX17dlAs16oTQ1NeHDDz9Ee3s7qqurYTabYTKZttyWC4VCGB0dxddff43PP/+cF/4UspkYjUYjbDYbtFotfx4s0o4l0ywtLeHZs2e4f/8+nj59ipWVFb63zqrc5kMqlUIoFOIVnuRyOW3d5UBW0QvNJJlMVnCJDWw2l8lkvEJLJBLh63T2JZNKpdDr9bww5k7W8cwpyMxWt9vNzeu+vj7Mz8/D5XJtmNXX5+JrtVp0dHTg8OHDaG5uRnNzM/bv388j4zYTRTqdRiwWw+ZNEWsAABYDSURBVOrqKm7duoXPP/8co6OjOd23SqWC2WzmxSwikQj/WV5exuDgIB4+fIiRkREsLi5umjcvlUq5WZ5ribZkMolIJIJwOAypVAqtVkvtq3OAimjkgNlsxuHDh9HS0sLjyJlAWUMGjUaDiooKGI1GniueDaGnPRwOY3FxEc+ePcPs7Cy8Xi98Ph+eP3+Ox48fZ3SPXW9eCyvTlJSUoKOjA1euXEFbWxssFgvkcnnWgBtWmLKvrw8//vgjF3y2IB+xWAyTyQSDwYBUKsWTX9bW1njW3dOnTzf0ul9PIpHgpn0+dRnZ0kEul/M0ZFrPb09eRTSUSuWu+629CYjFYr42rKqqwunTp3H58mU0NzfDYDBws3t1dRWrq6sIh8Mwm82orKzkXVezEY1Ged29QCAAt9uNkZER3L59Gz09PdtWkNlMEGVlZejs7MTFixfR1tYGm80GnU6Xs8XBuud+//33GBwc5K9nWx/L5XKYTCYolUrY7XZenmtwcBB9fX2YmJjImDi2I9+CJRKJBAqFAnK5nEc+5hJNWOhs+40oKirCX/7yFxw7doxXJimEqCeRSMRNbI1Gg+rqahw4cIB3kInH4wiFQigpKUFVVRXfJjKZTNvO8slkEtFoFKFQCCsrK3xWHR4ehtfr5V7trUpSC+9P+O9w7NgxXL16FZ2dnThw4ADMZnNefelZWa3+/n50d3fzdlTZkEql0Ol00Gq1iMfjGB0dhdPpxPT0NGZmZnLKj98NYrEYarUaRUVF/PtJ6/nsbCt6vV6Pd999F11dXS/rfl4LmKiY/0IqlUKhUHBvPGuTrFarYbFYEIvFMsxToenNZi6W9jo6Oopff/0VY2NjGB4exuDg4KazOlvjCs8lNOtFIhFKS0tx+PBhXL16lZep3slMF4vFMDQ0hFu3bmFmZibjWts9I7VaDYPBAJlMBofDgcnJSczNzWF5eTkjrHan5b+zIZVKeXfb3+oabyNZZ3pic0QiEWQyGd+jj0aj/CeZTHLvfjAYhM/ng91ux8TEBO7du4cff/yRi4udC8g027dq5wS8cCo2NDTg/PnzeO+999Dc3LzjmIBEIgG73Y6enh7cvXuXh/LmKnidTod4PI75+XmsrKzA7XZviKP/rcTIHKhsQKZZPjdoy24PYPvKsVgMfr8fyWSSO0GXlpYwODiI3t5eDA8PY2lpaUOJ51yKXLD3KZVKXLx4EVeuXMGJEydgs9l43MBOYM474V58tllTqVTCaDTytFm32421tTW43e6XWiKdWTysvz3Vv88NamCZA9m+SMwLHwqFsLCwAJfLBZ/Ph/n5eYyPj+PZs2cYGxvLqAefS4z5ei+92WzGuXPn8Omnn6KjowOlpaW7Wsf6fD4MDAzgq6++wuPHjzM+z1ao1WreaVahUPAqth6P56X3RGDXq6iogM1mg1qtJtHnADWw3ANYMEooFMLS0hJvwDg0NISpqSnY7Xa+ts8lKYbBxKdUKlFWVob33nsP165dw/Hjx7MWp8h23kAggKdPn+LGjRv44YcfYLfbtz1GKpWiqKgIBoOBd5UJBoNwOBzwer15p8buBaxltdlsRklJybYVeoh/Qeb9HsGCW9xuN+/lNj4+nrG/zt63HevX9xaLBWfOnMH58+fR3t6Ourq6XQme5cM/e/YM//3f/42vvvoqI8R2MxQKBTQaDYxGI3Q6HSQSSUZzimy16n8LNBoNysvLYTKZoFareds1Ijsk+j2CBZX4/X6srKxgYWEBXq83p2OFa2ih2A8dOoSTJ0+io6MD77zzTtbsNeHx6wcFlg/vdDrR39+Pr7/+Grdv38bc3BwPg11vfSgUCuj1ehgMBmi1WqhUKt5/3uFwvDLBAy92lg4cOMCdmNThJnfoSe0RLHac5Yj7fL6c96iFZrxOp0NFRQWOHj2Kixcv4tixYzyWPxdn3WYWALNAZmdnMTAwgDt37uDnn3/mFW+Af6XHqtVqFBcXQ6/Xw2Qy8Zk0lUrB7XZzp53X632lEZpKpRI1NTV455139rReQSFAT2qPYNFhWq02r8AYhtFoxPHjx3HmzBkcOXIEVVVVKC8v5w6zfEkmkwiFQvD7/XA4HBgfH8fPP/+Me/fuYXJyMiNKTiQSoaioCOXl5bxwZ2VlJTQaDdLpNG9kMTs7i5WVFXg8nleyhhciEom4ib/TXIdChZ7UHiEWi6HRaFBTU4OamhpMTU3B6/Vu69FWKpWoq6tDY2Mj7x136NAhVFVVQa1WZ3jmt2t4waIHE4kE3y4MBAKYnZ1FX18ffv31V0xMTHDRCvvdV1ZWoqGhAQcOHEBNTQ0fbPR6PUQiEVwuFwYGBuB0OrG4uLjjbbm9DJ4RiUQoLi6GVquFQqGgBJs8IdHvEUz0+/btw7Fjx2C32xGNRjPSR4EXXnCVSgWj0YjGxkZ0dHTg5MmTqK+v5y2oNws0EYqfef9ZPjnLA2AZbCwgaG5uDk+ePMHw8HDGzK5UKlFSUoKamho0Nzfj+PHjOHToEM+xl8lkEIvFCAaDvDvs1NQUVldXd7wtxz4/q46TSqV2bC3odDpUV1ejoqICMpksrw5ABIl+zxCJRFCpVLzuHCuU+ezZMzgcDiQSCUgkEmi1WtTW1uL48eNob29HU1MTysrKoNFoti0XLRQ4a9EciUQQDAaxvLyMkZERDAwMYGxsDA6HY8uCElqtFnV1dejq6kJHRwfq6upQUlLCG0AyDziLJlxZWcHz58+xsLCwK5OeZeOVl5dDq9XC7/djeXkZLpcrr/h8qVSKsrIyHDx4ENXV1XtSt6DQINHvESwktLi4GDabjcft6/V6TE1NIRgMQiaTwWq18tm1oaEBFouFR5JtZsonk0nE43Eu7idPnqCnpwdjY2N8bR2JRODz+eDxeLbMaBOLxThw4ABOnTqFU6dO4ciRI6ipqeGx8+vz7JlPYHh4GE+ePMl5J2IzzGYzjh8/jra2NtTW1kImk2FlZQWPHj3C/fv3sbKykrPpL5VK+eDB7p3IDxL9HsKEr9FoUFVVxau56PV6uFwuSCQS2Gw2NDY2oqqqatvU11QqhWQyCY/Hg+npaQwODmJoaAiDg4N49uzZtnvrwvp06XQaWq0WjY2NOH/+PC5evIjGxkYumM1KWwEv8vuXl5cxPDyMycnJHa/HKysr0dnZid/97ndobW1FSUkJUqkU7HY7dDod/H4/AoHAhtDkrWBBQqzUeKFHi+4EEv0ew4RfVFQEk8mEiooK/oVmRRyZR50NCEqlks+2LMgnEAjA4XBgYmICDx48wK1btzAyMpLTvrjQpNfr9Whra+OVb6urq6FWq7ccbFhasdPpxODgIMbHx3e8jjebzTh//jz++Mc/orW1FSaTiV9XqVTi2LFjmJ+fx8jISM6iZ2Wyw+Ew/H4/95eQiZ87JPrfCKF5Hg6H4Xa74fV6sba2hrW1NSwtLcFms6GiooI78CQSCZLJJHw+H6amptDb24tff/0Vo6OjcDgceYvPYDCgq6sLH374ITo6OmCz2XJqlJlIJLC4uMi393aCSqXCmTNncOXKFRw/fnxDwUylUony8nLU1dVBr9djbm4up/Oy5+r1euF0OmG1WqHVand0j4UKiX4PYeY0E7rL5eJJN+Pj43C73by0k0ajgcFggMlkgk6n41tP8XgcXq8XS0tLGBsbw+zsbEbcPrtONoxGIzo7O/H73/8eXV1dKC8vz2m/P5VKIRgMcs+/2+3e0bNglXyOHz8Ok8m0oQALc3yynn65wqwhn88Hl8uFSCRCJn6ekOj3CGHZ6UgkAqfTiZmZGTx79gyDg4NYXFzkabdsu40V3ZBIJNzsjcfjWzZ7yPXLzcpdf/zxxzh79mzOggdeRO8tLi5idHQUS0tLAPLfY5fJZKiurkZ9fT1KSkoyZvjNBq589tlTqRSvce/1ehEIBBCNRik4Jw/oSe0BwhmelXxeXFzkzrf5+Xn4fL4NrZR/i/rsGo0GJ06cwLVr13Dy5Mm8BJ9Op7nHvre3F6FQiL+eDyz9Vq1Wb0iCYediW4L5hvPG43E4nU6YzWa43W6srKzwMmUk/NygtKRdIhQ8awPlcDgwNzeHyclJLC4uIhAI5NU7fasy1dlglXA/+OADnD59GpWVlZDL5fwes10/Go1ibW0NAwMDGBwc3HFsfSqV4ssbYVER4d8jkQgWFxcxPDzM23LlQjQaxerqKtxuN+x2O+bm5uBwOF55WPCbBA2Nu0AYGcf208PhMHcyuVwuhMPhDV/6XM6bC6xkl0qlgslkQnNzMy5cuMAFn2tPN7YscblcGBkZwdDQEDftd0I4HMbc3Bz6+vqg0+lw4MABvj3J6g4sLi7i4cOHePToEZxOZ87nTqfT8Hg88Pv9vBFIPslNBIl+1whFz9brwL+KaUql0j3J82azPyscoVQqUVxcDLPZDKvVivr6ehw5cgSHDx9GRUUFN+m32s5ab6H4fD6MjY3hwYMHmJyc3NXSIx6PY3Z2Ft9++y08Hg/vrqNWq5FMJmG32zEwMIDu7m48ffoUPp8vr/ML8wzYNig583KHRL8L1ufAs0w7g8EAq9WK/fv3Y21tje8n5yskqVTKY/U1Gg10Oh10Oh00Gg30ej30ej0sFgvKy8thtVpRWVnJ98KZQ3B9rr4wdp817HC73ZiZmcGvv/6Kx48fw263Z21ykY1AIIDnz5/D5XKhv78fFosFarWae94XFxcxPz8Pj8ezI8GSyHcOiX4PYDMw8KKCsNls5jMoa7A4MzMDn8+Xk5BEIhHkcjlUKhX0ej3KyspQVVWFyspKlJWV8YaUxcXFvO47KwUdjUYRDof5tUOhEMLhMCKRCGKxGOLxOJ8hhaKfnZ3l6bOsbVc+fojNiEQimJuby9iD3+1gInxGufoqiExI9LuARYcx2BYca1/NOq+oVCo8fPgQk5OTPN12qy+qcJ1uNpths9lw8OBBHDhwADabDWazGRqNhoucldpmyTgejwdOpxNOpxMOh4P/uFwuBAIBLn62HBHO/Kx+P/ssUqmUm897xV7tWAibXrJqxERukOh3yXrhsz339aJnFWlGR0fhcrl4ffz1AStSqTRjzV5SUoKKigo+y7OwXTZjClNrp6eneVHO1dVVnoATDAa5xbGVw0smk/H7Zp+D+QNex5mUdQmmIhr5Q09qF7DZZbPcd2HgjUwm4z3XZDIZnj9/DqfTyYUvnP3YsWz2jUQiCAQC8Hg8UKlUPIknnU7zbbHFxUVMTk5ibGwMU1NTWFlZySsrjsXbC7vgvu5mcywWg0qlQk1NDUpLS6mHXR6Q6HeJcCYUiobN2qwxxL59+xCNRjM63QrLTjHhM496JBKBy+Xi5rvP58Py8jL0ej3kcjkSiQR/bXp6mhe5YDEB+cAEHo/HMyyXfBtKvixYIQ6DwYCKigqa6fOEntQeIJzp1w8CEomEx9qXlpaioqICFosFy8vL8Pv9GccywbNZPpFIIBQKce+6Tqfj/deTySSvauPxeHgDzN3MzsL1/euM2WzG0aNH0dLSAqPRSILPE3pae8x60a1fs7N9duHfhY0qhaJjwT6BQACrq6uQy+UZzrtEIsE98q+7UHcLG0yLi4tx8uRJXLp0CS0tLdBoNOTEyxMS/R4gFLZwT5zN1mxd7nK54HA44Ha7EQ6H+fbZVutn9nosFuO98gBkmN+v+9p7r2CfsbGxEVevXsWZM2eo9PUOoSe2S4Qz9PqilUzwXq8XCwsLmJiYwOTkJFZWVhAMBjc48bJdh8FKcRUCwn39lpYWfPrpp+js7ERlZSUJfofQU9slQvOc7X0z05vVrltbW8vYTnM4HHzPPN9rFRpM8EeOHMGnn36KK1euoLq6mmrj7QIS/S5YL3SWdBOPxxGNRhEMBuFyubC2tsYTQ9iWG6viKsyvZ+cUwtarLACFedfXB6WwpJn1Vkc+1sRew7Ytt3JW5oJcLkdTUxP+8pe/4IMPPkB9fT0JfpeQ6HcBExorN81Ez0JhQ6EQIpEIkskklEolSktLkU6nYTAY4Pf7EY1GuSOObeOxstVM3HK5nDvwWCFLtt/PhM/uQ+gjYElArETXTivg7ASNRsMrArHGkkz4LLbAbrdntXTMZjNOnDiBK1eu4Ny5c7ySLrE7SPS7YLNEFuDFDMcCcjQaDSQSCdRqNcrKyhAKhXg8PIuJZ4MDC5FNpVKQyWRQKpU8kq+oqAgKhYJH+rGGFMyrnUgkEA6HeWEKn8/Hg3rMZnNGFCBbdoTD4V0/A7VazYtliEQi6HQ61NbWYt++fbBYLJBIJNyRyZpnOJ1OmEwmBIPBjAhB9gyj0Si0Wi1aW1vx/vvv4+zZs6isrCTB7xEk+l0g3IdnYavCFFuh2c9+Z7M5swiY2CORCLcYAPAlQHFxMYqLi6FSqaBUKvm1mOkM/CuIhiXPrKys8DBct9sNl8sFn8/H74XV4GPBPOvDbdcPYsKAHfa+ZDKJoqIiWK1W7Nu3DyaTiXfuqa2tRW1tLXQ6HS/jvba2Bo/Hw2MKnE4nwuHwhmhEVtq6tLQUHR0daG1tJS/9HiPKsrYqPM9Rnggdeez39aLZzrsvdPyx8zCRMZOe/bA9fqEAhednsz2rI+/z+bC0tIS5uTmsra3xc7PqPqywpPCzMEuAZeqJRCIolUqoVCooFAruTU8mk7x5R2trKxobG3nZKmadsPZVzAIJh8PweDxYWlrC/Pw83G43f0apVAoKhQJWqxVWqxXl5eUoKyvbcQNPAgCwaQADif4lsj7/fv0e+/qCF8LY/lxLaAmtikgkAofDwTvN+nw+/nsoFOKtt4TXSqfTvF0Wi/BTKpUoKiriuf16vR5msxlarRZ6vR41NTWw2WzQ6XQZjkfhZ2T3FQwG4XA4sLq6mlHrnjk4WdSiwWCgDLrdQ6IvNNj6mP04HA7MzMxgbm4OsVgsIzuQFdVgPywBhxUGYQktrKV1TU0NzGYz912wVN9ssMzAcDi8YT0vFouhVCp58w9i15DoC51QKMRnfKHgWGVan8/H/6ZUKqHX63k7aDbbsn59er0eRUVFe1IKjPjNINETyCieAWSu41nuPdtiZJV5hGmrwjgBMrtfe0j0xNYwRyAbENY34SDeSEj0BFFgbCp6WpARRIFBoieIAoNETxAFBomeIAoMEj1BFBgkeoIoMEj0BFFgkOgJosAg0RNEgUGiJ4gCg0RPEAUGiZ4gCgwSPUEUGCR6gigwSPQEUWCQ6AmiwCDRE0SBQaIniAKDRE8QBQaJniAKDBI9QRQYJHqCKDBI9ARRYJDoCaLAINETRIFBoieIAoNETxAFBomeIAoMEj1BFBgkeoIoMEj0BFFgkOgJosAg0RNEgUGiJ4gCg0RPEAUGiZ4gCgwSPUEUGCR6gigwSPQEUWCQ6AmiwCDRE0SBQaIniAKDRE8QBQaJniAKDBI9QRQYJHqCKDBI9ARRYJDoCaLAINETRIFBoieIAoNETxAFBomeIAoMEj1BFBgkeoIoMKRZ/i56KXdBEMRLg2Z6gigwSPQEUWCQ6AmiwCDRE0SBQaIniAKDRE8QBcb/A0YcxrxcVtj+AAAAAElFTkSuQmCC\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 64\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO292VNbZ7rv/5XQsITQLISYwTYG4wmD8YAH4hDblaSdjuNK79p9/6vf3bk5V+c/OLfnXzi7e2d3untXHLuTtGMnsSHGA8Y2YMxoZoTQPM/SuXC9by9hARIQT3o+VVSCkNZakvVd7/M+oySTyYAgiOJB+qYvgCCI1wuJniCKDBI9QRQZJHqCKDJI9ARRZMg2+Tu59t8hMpkMbDYbbt26hfv370Mmk0EulyOVSm3peBKJBOFwGFVVVfjkk0+wf/9+CIKww1dN/IZIcj24meiJd4BMJgOJRAKJRIJ0Oo2JiQl89913UCqVEARhS6Jnx/N4PGhtbcWZM2cglZJh+D5Aon/PyGQymJ+fx8zMzI4dM5FIIBwOQyLJuXAQ7xh0634Pkcn+dS/fCaEqlUoS/HsEif49RGyGi28AhR6DvVYmk5Ho3yPIvH/P2aoTL51Og6Vob/UYxNsJrfTvIel0+k1fAvEWQ6J/DyEvO7ER9O0giCKDRE8QRQaJniCKDBI9QRQZJHqCKDJI9ARRZJDoCaLIINETRJFBoieIIoNETxBFBon+PYRy74mNING/h1DuPbER9O0giB3k6pMlfPJ/evH//d8BuEPxN305OaF6eoLYIRyBGP7n10+RTGcwavPDpB7D/75y6E1f1ivQSk8QO0Q0kUIy/a8G0oFo8g1ezfqQ6Alih6g1luL/794FiQSwagX8j56mN31JOSHzniB2kP/18T78z/PNUMje3vX07b0ygnhHeZsFD5DoCaLoINETRJFBoieIIoNETxBFBomeIIoMEj1BFBkkeoIoMkj0BFFkkOgJosgg0RNEkUGiJ4gig0RPEEUGiZ4gigwSPUEUGSR6gigySPQEUWSQ6AmiyCDRE0SRQaIniCKDRE8QRQaJniCKDBI9QRQZJHqCKDJI9O8hv8Wo6kwms/mTiHcCEj2xKRKJBBKJ5E1fBrFDkOgJosgg0b9nyGQyyGQ7M6KQre6JRAKJRIJM/PcEEv17RCwWw+LiIjwez44cj/kGdDodSkpKSPTvCST69wC2IjudTty/fx8zMzP8b9t16pnNZhw5cgR6vX5bxyHeHkj07wnJZBJutxszMzNwuVw7ckyFQoGjR4+ip6cH1dXVO7ZtIN4s9K/4niCRSBCLxeB0OuHz+bZ0DKlUCrVaDblcDrlcDrPZjM7OTnR0dMBisaCkpGSHr5p4E5Do3xPi8Ti8Xi8WFhbg9XoLfr1SqYTRaERNTQ3MZjOUSiVUKhV2794Ni8UClUr1G1w18SYg0b/jZDIZJBIJzMzM4MGDB5iamip4H6/T6VBVVYWGhgZYrVYYDAZuyqvV6t/isok3CIn+HSWdTiOdTiMSiWBpaQk3b97E9evXYbPZCjqOVCpFRUUFWlpaUF9fD7VaDaVSiUwmg2QyiUQigWAwCL1eD4VC8Ru9G+J1QqJ/B2GreygUwvLyMh49eoQbN27g4cOHSCaTBR2rpKQEer0eFRUVMBgMAIBUKoV0Oo1MJoNgMAiXywWj0Qi5XL7jmXniMGA+xy70+cSrkPd+B8lkMvzntz5PPB6Hy+XC9PQ0nj59irm5uYIFD/wrxXatgKRSKaRSKQKBAOx2O4LBIFKp1E69BWQyGaRSqawfdqPJ9fllMhmk02mkUinE43HE4/EtvV+CRL9jvC7BM5hQE4kEfD4fwuHwlo6TTCYRi8UQjUa5iNixM5kMwuEw/H4/wuHwjomMfU5MxEzwTPQbPT+RSCAajSIWiyGZTFLC0BYg834HWfsF/K3MT4lEAoVCAa1WC5PJhLKyMkilW7t/p9NpRKNRLnqpVMrfh0wmQ1lZGUpLSyGRSLhAAWTd4MTWQj7FOWLBM6fjeuFAdg72GuZnkEgkPEuQzPzCINFvk9e5ujMkEgnkcjk0Gg1MJhMMBgMEQdjy8ZiYxF5/uVwOk8mE2tpa1NbWoqysDJlMhq+wsVgM8Xic3wRKSkqgUCggCAKUSiVkMtkrNyL2WaVSKS7eTCYDqVTKRZwL8UrPbhbMEiEKh0S/TdaK/nWVobLVXqfTobKyMitNtlBBlJSU8FWTxesrKir4j16vh1KphFQqRSKRgN/vx+rqKhwOB/x+P6LRKHcI1tTUoKKiAlqtFgqFIkv4LCIQj8e5ic7OKQgCSkpK1v38mNhZ8U9JScm62wFiY0j022Q9gb8u4QuCgPLycuh0ui0fQy6XQ6VSwWw2o7a2FnV1daiuroZer4cgCJDJZJBIJHxPHQ6HsbS0hImJCSwtLcHpdCKZTMJoNKK5uRkHDx7E7t27YTAY+M2CrfCxWAyBQAAejwfhcBglJSXQarU8N4DdJMRiXmvax+NxyGSy36RZSDFAot8mucT9uvaYEokEUqkUcrl8yymyzCS3Wq3Yv38/mpqaYDabUVpaCoVCkfVe2PmSySQcDgemp6fx4sULLC8vIxAIQKlUYnJyEi6XC4lEAk1NTTAYDJDL5dx34PV6sbKyguXlZfj9fgiCgOrqakgkEshkMpSUlHBznyEWfSwW4xYCrfRbg0S/A7wpRxLbY28n395oNOLAgQM4duwYDhw4gIqKilfELj5fOp1GOBzG/Pw8RkZG8OLFC3i9Xu5cczgciEajfP+9a9cuqNVqJJNJeDwezM3N4fnz55iZmYHf74dGo0FzczPS6TQUCgXkcjkPFzKY4KPRKMLhMCKRCICX+QQk+sIh0b/DZDIZBAIBjI+PY35+PuvxfNBqtejo6MC5c+fQ0dEBq9UKuVy+7vPT6TRCoRBWVlYwMTGB8fFxOByOrPPFYjGMjo5CqVRCrVYjk8lAr9cjGo1ifn4ew8PDGBkZweLiIsLhMMrKyuBwOJBKpaBUKiGXy6HX63kiEPMDRKNRBINB+Hw+Mu+3CYn+HSaZTMLlcmFkZAQLCwsFv95qteKjjz7C8ePHUVlZuWnpbCqVgtPpxMjICJ4/f/6K4Bl+vx+zs7N4/vw5lEolTCYTvF4vRkdH8fTpU8zMzCAYDCKZTEIul8Pn8yGTyUClUnGHnlqt5sKORqPw+/1wOBy8bFgQBDLvtwiJ/h0llUrB7XZjdnZ2y9l41dXVaGtrQ01NTV618ul0GgsLC+jr68OLFy/WFVwymUQgEMDq6irf79tsNoyOjmJmZgYejwfxeBzAS8sgkUjg6dOnEAQBpaWlkMlkqKiogFKpRDqdht/vh81mw9zcHLxeL0pLS2EwGEjwW4RE/46STCYxMzODu3fvYmVlpeDXNzQ04MSJE6itrc0rxp9MJuH1ejExMYHBwUH4/f4Nny92+vn9ftjtdtjtdm6eiwUbjUZhs9nw5MkTlJWVoaSkBM3NzdBqtUilUnA4HJiamsLMzAwikQiqqqpQXV1NK/0WIdG/g6TTaQQCAQwPD+POnTtwu915vU4qlfJ98MmTJ9HT0wOTyZSXIzIcDmN0dBSDg4P8JrNePoBcLodOp4PFYoHZbEY0GkUmk0E0Gl23wWYsFuPFQyznv7y8HKlUCsvLy5icnMTCwgJKSkogl8sRjUbJkbdFSPTvIKFQCFNTUxgcHMTk5CTS6XRBCTkqlQr79u1Da2srNBpNXq/x+Xzo7e1FX19fVmpsLjQaDRobG3HgwAHU1dVhdXUVMzMzkEgk625DWJ7/wsICZDIZ/H4/TCYTUqkU7HY7zwfQarWwWCwk+m1Aon/HSKfT8Hg86O3txb179/jeeDNYcg0AnDhxAgcPHoRer88rZz8Wi8Fut+PJkydZTTfXo7KyEseOHUNbWxvMZjMEQcD09PSm24hUKoVgMIj5+XkEg0FoNBokk0kEg0F4vV5e9BMMBhGJRHjqMOXfFwaJ/h0jGAxicnISP//8M0ZGRvjjm6147O/79u3DF198gYMHD24YnmOk02nY7XYMDQ1hdnaWP76eZaFWq7Fv3z4cO3YMTU1NUKlUSKfTqKmpQVlZ2abXyHwA8Xgcbrc7q5Q2Go1CEAREIhGe+09hu8Ih0b9DJJNJzM7O4ueff8bo6GheX3ixOFtaWvBv//Zv+Oijj1BXV5eXxz6RSGB6ehr//Oc/MTc3xx/PJXiZTIbW1lacOHECzc3NMJlMkEqlMJlMqKqqymsrwYppIpEI9wWIq/sSiQRisRgikUhWwQ+RPyT6d4RkMonFxUXcvn0b165dKzguLwgCuru78emnn6KxsXHDVV5sLmcyGaysrOD+/fvwer05V3j2mEwmQ0dHB44ePQqLxQJBEJDJZKBWq3kJ8GYwka/9nZ2TrfzspkDmfeFQE413gHQ6DafTib6+Ply/fh1DQ0PcebcZTBBtbW04ffo09u7dC6VSueFrxMeNRqPweDyw2+0Acte9M0GWl5fzYhuVSsXDdiw7jxXv5HNucUcd8U0mlUrxdNxYLEYr/Raglf4tJ51Ow+12Y2hoCNevX0d/fz//22b7eLYCGwwGXLx4EW1tbQW1smZhtMXFxazryYVWq8WRI0ewZ88e6PX6LHFLpVJeTFPIipyrVwGrN4hGo6/E+4n8ING/xaRSKUQiEYyNjeH69eu4e/cuAoFA3q/PZDIwm824ePEienp60NDQUNCUmkAggIGBAdy/f5+vqGLRi039qqoqfPDBB2hsbMzZNVfcPGM9WCMNdtxcqzhrCsoy+Uj0hUOif0vJZDKIRCIYHx/HzZs3cePGjawVdyPESTgHDx7ElStXsH///rz21GLC4TCePHmChw8fIpFIbPjc+vp6tLe3w2q1Zm0BWBPPYDCIYDC4rkhZXT8LIa7XM495+Mlrv3VI9G8h4vLVGzdu4OrVq5ient7SqrZ79260tbXxzjqFOL0SiQRsNhu3LtY68dj/WywWtLa2oqqqivfTE78Xn8+34TRd1gVIqVRCoVBwZx0Tfq7nl5SU8OYeRGGQ6N8y2Bd+dnYW33//Pa5evYqRkZGCCmpYbTqrkzcajXwFzVckrMONuMuuWPRia6KjowMnT56E0Wh8xdGXTCZhs9kwMDCA5eXlnOeSyWRQqVTQ6/VQqVRIJBLwer1IJpM537dcLue9+Ar1ExAk+rcKloo6OTmJW7du4e9//zseP35ckOBlMhmSySRKSkpw8eJFnDhxYlNvfa7rYCW7q6urWY8zmOArKipw+vRptLe38+0DsyZSqRR8Ph8mJyfx4MGDnNN32CpvNBpRV1cHjUbDLYtczjr2fNall4ZqFg6J/i0hlUrB6/VienoaP/zwA7755hsMDw8XXDLLnF8mkwltbW3YvXt3wZ1yk8kk5ubm8OOPP2Jqaoo/vnZ7odfr0d3djc7OTlRWVvKbC1t5I5EIpqenMTAwgPHx8Zx+AYlEgtLSUlRXV6OlpQUGgwFOpxOxWIyn3q4VvVKpRFlZGa+5JwqDPrG3AFYb//TpU/zjH//Ajz/+iImJiYIEz0xv5rH/+OOPsWfPnoIFn06nEQwGMT09jb6+PjidzlfOA7y8AdTV1eHChQtoaWl55TysDv7Bgwe4c+fOuqW4rItufX09F73NZoPH48Hy8jJvsMGEz1ptq9VqqFQqMu+3AIn+DZNMJrG0tIR79+7hhx9+wC+//JKV454v4sETp0+fxuXLl1FXV1ewIFKpFGZmZvDo0SO+B2c3FPGevry8HGfOnMGxY8dgsVheOQ+rkR8cHMSzZ8/W9baXlJTAaDSitrYWDQ0N0Gq1kMlkWFxc5Oa7+ObHzHtxlx2iMEj0bwgWg19YWEBvby+++eYb9PX1FRSHX4tMJsORI0dw/vx5dHR0wGw2F/T6TCYDt9uNu3fv4vbt21xsa0tp5XI5PvroI1y6dAm1tbWv+AzS6TRcLheGh4cxMTHBKwFzpfDKZDIYjUZUVVXBYrGgtLQUsVgMRqMRZWVlkMlkiMVi/Pks0UfcRJMoDBL9NtjKGCvWTCIQCGBiYgK3bt3C1atXMTo6mvXl3gr79u3DlStXcPbsWWi12oJf7/V6ucXx+PHjnM8RBAE9PT24cuUKOjs7+XnEoUBmvdy5cwcvXrzgr12vSMdoNMJsNkOj0UCpVPJVnPXBXxs1kMvlkMvlOafoEJtDot8irC1zKpXKSjNdD9Y+2u/3Y3p6Gg8fPsTdu3cxMDCAsbGxgs8vFoJSqURbWxs+/fRTnD9/ftOCmlwwwf/5z39Gb2/vus87cOAArly5wkN0uUin03A4HHjy5EmW9z8XgiBAr9dDp9NlheDYPn7tjYKJXnxDIAqDRL9FWPPHUCjEQ0jiPaZYlCzubLPZePjqxx9/zIq/FzqKij1XEAQcO3YMX3zxBS5cuICampqC97p+vx8PHz7E119/je+++w6hUCjn9TQ0NODDDz/EyZMnYbFYsv4mFl8qleKtsjd6b1KpFFqtFnq9npvybNsjbpQhRiaTkeC3CYl+C6TTaUQiEdhsNiwvL0OpVKK8vJwnl7AwUjweRywWg9vtxvT0NG7fvo2+vj5MTk5yrzRjK9l2KpUKp0+fxh/+8Ad0d3fnzIjbDL/fj0ePHuGvf/0rvv32W4RCoazrESfhHDlyBD09PbBareuGyljarXi09XqiZ3PzjEYjLwRiVX1sTt7acdRsEAaZ9VsnL9EXc1FDLgHF43EsLS3h8ePHmJiYAPAyZm02m2GxWKDX63lvt+npaUxOTuLFixeYmprKGkqxlWsRm/QnTpzAH/7wB3z44Yeora0tOC3V5/Ph4cOH+Mtf/oLvv/+eN9gUn4cJvq2tDRcuXMChQ4c2zOFnXXPdbvcrjsC1aDQa1NbWory8HEqlknfNWVxcxPz8PAKBwLphS+qEu3XyEj2ZUf9yVEUiEczMzODWrVvo6+vD/Pw84vE4nxfPpryy9NOxsTFMT09nJaZsdcyyePVtb2/H5cuX0dPTg+rq6oIF7/F4cO/ePfz1r3/Fd999x+vlxedh11lfX8+tCbPZvGFCTDwex+LiIl68eLFpkY7FYsGePXtQUVEBuVyOcDgMm82GFy9eYG5uLmeBjnisNtvz0/ezMMi834REIsH37qxf3O3bt/Hf//3fePr0aVZRiNj0FI9WzlUptlUkEglaW1vx+eef46OPPuKz5wrB4/Ggr68Pf/7zn3H9+nVu0q+FJfqcPXsW586dw+7duzfNgItGo5iensazZ894qC7X+7VYLGhpaUFrayssFgukUil8Ph9mZmYwOTkJu92eM5rBJueyvnnpdJpM/QLZ8F8wHA4XpRmVyWT4F2lqagrDw8NYWVnhE2VYV9hCQmxbXd3lcjlfMSUSCY4ePcoFX1dXl3fGHVsVHQ4Hfv31V/zHf/wHbt68yQW/XjHN7t27cf78eezatSuvm0s8Hsf8/HxWfH4tGo0G7e3tOHv2LJqbm6HX6xGJROB0OjE+Pr7uKg+AF+EEg0EEAgFoNBrKyiuQDUXv9Xrx6NEjPH/+HAqFgs8Zf99hos9kMnzVcrlcWF1dhdPpzBLhZrH6zXrE52Kt5x946TM4evQoPvnkE5w/fx4NDQ0QBCGvVY4NnlxcXER/fz+uXr2KGzduIBqNZqXVip8P/CsyII7H50JsYqdSKbhcrnU993q9HkeOHMHFixfR1dWFqqoqSKVS+P1+rK6uYnp6Gna7fcMUZJa27HA4YDAYIAgCib4ANl3pv/rqK3z11VcAXjqPNtunvW+sbeogJpeQd+KmmKuw5YsvvsDnn3+OtrY2GAwGlJaW5iV41kp6amoKt27dwj/+8Q8MDAxsejMSBAEff/wxenp6UFVVtaFFIU7KYeE28d/YOXQ6HY4dO4bLly+jq6uLhxej0Sii0SgcDgdsNtumI7PYIE273Y6amhrodDoy8QtgQ9FnMpms/d52M8beRV5Xh5ZcK+7Ro0fR1taG/fv3o729Hfv374fJZMrbeZVMJrGysoK+vj58++23ePDgARYXF19x1Ilhpr1MJnulZHYjMpkMgsEgFhYW+GRZ8fvR6/U4e/YsLl26hFOnTmXN0IvFYgiFQnA4HPB6vZueh+VIeDwehEIhJJNJqrYrgA0/KYlEArVazX9XKpVF1310ve4tOw0Th9FohMViQWNjIy5evIju7m40NjZCEASeZZeP4BOJBJaXl3Hr1i387W9/w507d17Zv+da5dl7ZWOvKioq8lpFM5kMnE4nHj58mDUFhzXmPHXqFD7//HN0d3fzMlzxdQQCATgcDkSj0Q3Pw8J6Pp8Pbrcbq6urMBqNkMvlVHyTJ5veHsVf+EQiQb3JfkPUajU+/vhjfPrpp2htbeUJP6WlpQUdh+UI9Pb24quvvsJPP/2U9e+22RakubkZn332GRoaGvIWEmutdffuXUxPT/PHtVotOjo6cOXKFZw5cwZVVVVZdfdM9H6/n9fRb0Q8Hsfq6iosFgucTifm5uZ43n4hnX6LGbKJ3hBiD7lSqcT+/fvR09ODCxcuoK2tLavFVSGwFNjR0VH87W9/w7179/K6UYuvp66uDt3d3aipqclL9MlkkmcdTkxMZFkUBw8exGeffcb38Ezw4i0GczSKE3rWI5FIwOFwwOVyweVywWazwefzFZ0Fuh1I9K8ZJi4msF27dqGzsxPd3d3o6urCnj17srZUQGHNLNPpNGZmZvDLL7+gv78fwWAwr3Ahux61Wo39+/ejoaEh7+65iUQCk5OT6O/v5wU2crkcu3fvRk9PD86dO5ezBFd87kgksmEGnphQKMRbaUUiEXi9Xvj9ft5Ug9gYEv1rRrzqNjc349///d9x4cIFLvZcJmohgnc6nejt7cU///lP3vUm36EYMpkMZ8+excmTJ/MWfDKZhMvlwsDAAO7cucM99waDAefOncO5c+d4eHG998QGWEQikbyjH2zmHQDY7XYsLi6irKwMGo2GwnebQKJ/DaxdaeVyObq6unD58mVeCrsT+1GWaXf9+nUMDg7m/TrWnUYikeDEiRPo6OjIW/R+vx9PnjzBr7/+ihcvXiAej0MQBDQ1NeHMmTPYt2/fhkVAbE/PsuzyJRKJ8Hl2CwsLKCsrQ3V1NcrKykj0m0Cifw0wwdfX16OpqQlNTU3o6urCyZMnC3KWbYTb7UZfXx/+9Kc/oa+vr6DXMpP6yJEjOHToEKqqqvKqxw8EAhgZGcG1a9fw8OFDLtq6ujqcPn0ara2tMBgMG4qQTbLZbPrNWrxeL+x2OwwGA5LJJEKhEE28yRMS/W8MG95YW1uLnp4enD9/Hnv37oXRaNyxFs4+nw93797Ff/7nf+KHH35APB7PcszlQ0tLCz7//HM0NzfnLXjWyPPGjRt8iq5MJkNLSwtOnz6NysrKTQuBWNy90Kk1rHGm1WqlBpkFQqL/jZDJZDCZTGhvb0dXVxf279+PPXv2oLq6etPVrxB8Ph8ePHiA//qv/8K3337LV9tCBKRUKnHkyBF8+OGHm86tZ91/hoeH8c033+DatWtYWloC8PI919TU4ODBg9i7dy/0ev2mEYhkMsmdcoXA4vWRSIS/V1rl84NEvwW0Wi0MBgNUKhXS6TRvlgG83K9LJBLo9XocPnwYPT09OHHiBKqqqqBSqbbd8UXsyWcNML766iv8+OOPPLFlo1VenFYMvGzE8cEHH+Djjz9GY2PjujkBrKTV6XRicHAQV69exc2bNzE3N5fVMPPw4cM4fPgwTCbThhYDe008HofX691SQ1CxdcC2Cel0mjz4m0CiLxC1Wo2GhgY0NjbyuvlIJIJYLIZ0Og2lUgmlUona2lqcOXOGD3XcqTRRJniv14uHDx/i73//O77//nusrq5yh+FGq7y4DLiyshLt7e24cuUKTp8+DY1Gk/M1LDY+OzuLwcFB9Pb24ueff4bD4eDHSqfT0Ol0aGtrQ0tLy6YdfCQSCRKJBHw+H+bn5+F0Ovk8+/WyBdf7LCQSCf93SCQSBfcHLDZI9AUgk8lQXl6OXbt2obGxEVqtltfMi2u7KysrceDAARw8eHBHBc/wer3o7+/HX/7yF1y7do13vCnEvG1ra8Nnn32G7u5u7N69G2az+ZUIAmt7ZbPZ8OTJE/zwww/o7e3F8vJyVuZcOp2GRCKB1WrFrl27Nq3xZ956j8eDFy9e4MmTJ1hYWOCTawt16kkkEsTjcfj9foTD4byrD4sVEn0B6PV61NbWwmq1QqPR8A64bKAiAB6u2rdvHywWy5YEL85WW/uY0+nE3bt38ac//Qk3b95ct0CFTXYVi4etxK2trejs7MTRo0f52KtccfPV1VU8fvwYv/zyC+7du4exsbGs84lDkQaDAXv37kVlZWVWBaB4O8KcdqyibnR0FPfu3cP9+/exsrLCcwXWDtZYD3ZzYG3FfT4f3+OT6NeHRF8AZWVlvB2WWFAslVQul8NisaC2thZms7ngjjaMtWZxKpVCIBDA4uIiHjx4gOvXr+PGjRs5G2CI89mTySTkcjlMJhMMBgM6Oztx/vx5dHZ2cq/32mtkxS9TU1P49ddf8fPPP6O/v5/Xx689B6O8vBwtLS0wm82v7KnZfjsUCsFut2NqagrPnz/H06dP8ezZMywvLyMajfI+Bmt73a9HOp1GLBZDIpFAIpFALBaj2fV5QKIvAEEQoFareYUYkF0Sy/bylZWVBc+Qy0U8HofP5+P76b6+Pvz444949OjRup101wpl//79uHTpEo4dO4b6+nqYzWaYTKZ1b0jhcBgTExO4du0avv76a0xMTOTVR8BsNqOurg5arZbfBAHwwR5OpxPLy8sYGRnBr7/+iqGhIaysrPDYulQqLdgBl06nEQ6HeYcnhUJBobs82FT0YjOJ7beKCbaaMxNeIpEgGo1ys519URUKBUwmEywWC3Q63ZbM+kQigWg0ys1Wj8eDwcFB/PLLL3j06BEWFhbgdrtfWdXX1uLrdDoeJjx06BAOHTqE3bt385z+9UQRi8Vgt9tx8+ZNfP3113kP4VCr1TCbzdwCisViiMVifJ7d8PAw+vv78fz5cywuLsLpdL6yLZHJZNwsz7dFWyqVQjQaRSQSgUwmg1arpfHVeUBNNPKgvLwcBw4cQFtbG+rr6xSptrUAABWcSURBVCEIAh/KwExKvV6PmpoamEymvOfBiz3tkUgES0tLePbsGWZnZ+Hz+eD3+zE2NoaBgYGs6bFrzWux2C0WC06dOoVPPvkEnZ2dKC8vh1wuz2ur4fP5MDg4iJ9++okLfrMkH6lUCrPZDKPRiEwmw6+btb4aGxvD0NDQK7Pu15JMJrOaiubrlGRbB4VCwcuQaT+/MQU10RAEoeB56e8iUqmU7w1ra2tx+vRpXLhwAYcPH4Zer+cdch0OB1ZXVxGNRvleXqvV5vWli8VivO9eMBiEx+PB2NgYbt68iQcPHmzYQSaXIKxWK86ePcuHV9bV1RVkcSQSCczPz+PGjRsYHh7mj2+2P1apVDCZTCgtLYXL5UI8HufDKx8+fIipqams9lkbUWjDkpKSEiiVSigUCiiVSpSWlm7Zj1JMbPiNKC0txR//+Ee0t7fzziTFkPUkkUi4ia3RaFBfX4+9e/fCarXyG18kEoHFYkFNTQ2i0SgEQYDRaIRCoVjXfE6lUjwMZrfbMTAwgJ9++gmjo6Pwer2IRqNwOp2IRCKbXp/436G9vR2XLl1Cd3c39u7dC5PJVJBPgbXVevLkCXp7e7Ocdhshl8v5WKpkMonx8XE4nU5MTk5idnYWLpfrN+2pKJVKoVarUVpayr+ftJ/fnA1Fr9fr8cEHH6C7u/t1Xc9bARMV81/IZDIolUqe9MGmppaWlsJsNvOOQuLhi2sTZdj45vHxcTx+/Bjj4+MYHR3F0NBQzlWd7XHFZrzYrJdIJKioqMCBAwdw6dKlgtpUryUej2N0dBQ3b97E7Oxs1rk2+ozKysr4dJrV1VV4vV7Mzs6+EsffavvvzZDJZHy67W91jveRTVd6Yn3YMEVBEHjYiG0LmLUQDofh8/mwurqKqakp9PX14ebNm1l95HI1xcy1jRKnu7a0tPACnkOHDvEpMYWSTCbhcDjw4MED3Llzh6fybiZ4jUbDnXfJZBILCwtYWlriJn6u695pJBJJ1g2ZVvn8oJDdDsC+bIlEgg9uTKfTCAaDWFlZwdDQEPr7+zEyMoLl5eVXWjzn0+SCPU8QBHz00Uf43e9+h+PHj6O2tpZ7zbcCc97dv38fNpuNn2+9a2J+Hhb6k0qlcDqdsNlscLvdBRfObAdm8ZhMJpjNZup/nyc0wDIP8vkisZjx8vIyXC4XPB4PFhcXMTExgaGhITx//jxL7PnkmK/10pvNZpw7dw5ffvklurq6UFFRsa19rN/vx9DQEL755hs8fPiQP76R4MvKyvigTkEQuKfe6/W+VsED/xoEUllZibq6OqjVahJ9HtAAyx0ik8kgHA5jcXERU1NTePHiBUZGRjA5OYnV1VW+t8+nKEZ8TOBl1MRqteLixYu4fPkyOjs7t1Wey3rUDw0N4dq1a7h169aG4TTg5VaGCZ6tqsFgkDep3Kx19W9BSUkJSkpK+E2o0DHdxQqZ9zsEy/92uVyYnZ3F2NgYxsbG4HQ6N8yYW8va/X15eTlOnz6NDz/8EMeOHcOePXu2JXhWDz8yMoKrV6/i2rVrWF5e3vA1giBAp9PBbDbDYDBAJpPB7/fD4XDA6XS+EcFrNBpUVlbCZDJBrVbzsWvE5pDodxAmqOXlZSwtLcHn8+VdIro20cZisaC1tRXHjx/HqVOncOjQIVit1k0Tf3IV67BrY00sHz9+jOvXr3NvPUuDXWt9CIIAvV4Pk8kEvV4PtVrNMwVXV1ff2AoPvIws7d27lzsxacJN/tAntUOwbLJUKoVgMAifz5d3jJoJVaVSQafToaqqCu3t7ejp6cGRI0d4A458nHW5LIB4PA6Px4O5uTk8ffoUt2/fxu3bt7G4uMifwyIOZWVlUKvV0Ov1sFgsMJlM0Gq1yGQy8Hg83GnH8greFIIgoKGhAYcPH+ZtuYj8oE9qhygpKYEgCNBqtRAEoWDnZ3l5OY4ePYrTp0/jwIEDqKmpQVVVFQwGQ95pvWJYuJAVu0xMTOCXX35Bb28vXrx4kZVezTzylZWV2LNnD5qbm1FTU5Ml9tnZWczMzGB5eRkej+eNp2SzsGFlZSX0ej2JvgDok9oh2CpZX1+PXbt2YWpqCj6fb0NxlJWVYc+ePWhpaeGz4/bv34+qqiqo1eosz/x6Zjvwr7ryZDKJVCrFHXUzMzMYHBzE4OAgpqenMTs7C7vdzi0QqVSK6upqtLS0YO/evWhsbORVggaDAVKpFG63G0NDQ1hdXcX8/PyWw3I7mTwjlUpRVlYGrVYLpVJJBTYFQqLfIdgXsaGhAUeOHOE5+TabjXfVYckkpaWlMJlMaG1txalTp3D8+HHs2rULer0eKpUqZ6KJWPzM+8/qyf1+P1ZWVrC0tASHw4FQKAS/34/5+Xk8efIEo6OjWSu7IAgoLy9HY2MjDh06hM7OTrS2tsJqtfKUVolEwi0FNrJqZWVly2E5JniW0MR6C24FrVaL+vp63qq7kAlABIl+x5BKpRAEARaLBYcPH+ZfaLZKJhIJSKVS6PV6NDU14ejRo+js7ERzczOsVivUavWG7aJZdMDv98Pj8SAYDCIajSIUCsFms/GmFBMTE3wQZK6GElqtFnv27Mkao2WxWPgASHHjTHbssbExzM3NbcukZ9V4lZWV0Gq1CAQCWF5ezmt+nRiZTAar1Yrm5mbU19dDpVKR4AuERL+DlJSUQK1Wo6amho9d0uv1fA8tl8tRW1uLQ4cOoaOjA01NTTAajbwpx9oOOAB4Dz4mwKGhIdy/fx8TExPwer28bt3v98Pr9Wat6GKkUin27t2LkydP4sSJEzh06BAaGhpgMBj4yi4WD/MJjI6OYnBw8JUswkJg/oqjR4+isbERcrkcdrsd9+/fR19fH2+VlQ+stTjbglATzMIh0e8gzHxXq9Worq7m3VxMJhNcLhcX/b59+1BTU8P77K09BjPfU6kUL2IZHh7GyMgIRkZGMDw8vGElnLg/XSaTgVar5bn6PT09fPJMrpnuTHyRSAQ2mw0jIyOYmpracguqmpoanDlzBpcuXUJHRwfKy8uRTqfhcDig0+kQCAQQDAbzboHNtkesmrHYs0W3Aol+h2HCV6lUMBqNqKys5PXkrIljMBiEy+Xi3V4EQUBJSQmPlcfjcYRCITidTkxNTaG/vx83b97E8+fPNy27BbJr4PV6PY4ePYrf//73OHPmDBoaGl5xEq69/lQqBbfbjeHhYUxNTW25PLa8vBwffvghvvzyS3R0dMBkMvGbnCAIaG9vx8LCAp4/f5636Fmb7EgkgmAwyNttkYmfPyT6HWZt9h3rsONyuRAIBLCyssKdbjU1NbBardDpdFz4qVQKPp8PMzMzGBgYwMDAAM/sK1R8BoMBZ8+exe9//3t0dXWhrq4ur0GZyWQSi4uL6O3txfT0dMGfAfCyhdbp06fx6aeforOz85WGmSy1eM+ePdDpdHkfl4nb5/PB6XSiuroaWq12S9dYrJDodxBmTrPebR6PB/Pz8xgfH8fk5CTcbjdSqRRvPmEwGGA0GqHRaHiFWDweRyAQwNLSEsbHxzE/P5/VdZedZzOY4C9fvozu7m5UVlbmFe9nDjzm+Wc99QuloqICZ8+exdGjR2EymV5pwCKRSKBSqWAwGAoq4WYmvd/vh9vt5l10ifwh0e8gawU/OzuLkZERPH36FPPz89wcZc0xWG961j8feLnKMs97ruPng16vx/Hjx/HFF1/gzJkzeQseeJm9x244LCe/0L2zQqHg3YYsFkvWCr/2xsV63edLOp3mPe79fj+CwSBisRgl5xQAfVI7gHiFZ3HzxcVFPHv2DMPDw7zRZTwef0U8O91OSqPR4MSJE/jiiy9w4sSJggTPKgWfPXuGhw8fIhwO88cLgeUh5GpSyY4lbjBSSDpvIpGAy+WC2WyG2+3GysoKb0ZKws8PKkvaJmLBsyYaLpcL8/PzmJiYwOLiIvx+f07Br8fa8Fm+WCwWdHV14ZNPPsGpU6dQXV0NhULBr3Gz87OpNkNDQxgaGtpyXD6dTiMSicDtdiMYDPIsQfHfo9EoFhcXMTY2VtAWgrXp9ng8cDgcfA7e667lf5ehW+M2EGfGsaaXkUiEO5nYl76Qls7suPnAZr+pVCrepvv8+fPo6upCdXV13jPd2DQct9uN0dFRjIyM8C46WyESiWB2dhYDAwPQ6XRoamrinXlZW/WlpSXcu3cP/f39cLlceR87k8nwKbdsEIjf7y+KLs07BYl+m4hFz/4LvIwnKxSKrMSX7Tic2DFY4whBEHhTi5qaGjQ1NeHQoUM4cOBAlkm/XjhLbKGw4Y/j4+Po7+/fVlwe+Fc77R9++AFerxfHjx9HXV0dysrKeE++oaEh9Pb2YmhoqODEH3GdAQuDkjMvf0j022BtDbxUKoVSqYROp0N1dTV2794Nu90Ov9/P48mFwPLUVSoVNBoNdDoddDodNBoN9Ho9L3+trKxEdXU1ampqYDQaIZfLkUgk+A1IfJ1isbNhkm63m4+hZoM1NhtysRmBQADPnz+H2+3GkydPUF5ejtLSUu55X1pawsLCArxe75YESyLfOiT6HYCtwAD4cBCWZBONRpFIJDAzM4NgMJiXGSqRSKBQKKBSqaDX62G1WlFbW8vj+qyphUajQWlpKZ+vJ5fLEY/H4XA4+IisSCSCcDiMaDSKeDzOO/YyH0QkEuGhxenpaZ5jL5PJtnSjEhONRjE3N4e5uTn+2HZvJuLPKF9fBZENiX4bsOwwBhvCyFZouVwOpVIJlUoFpVKJ6elp3lxjvS+qVCrlq7vZbEZDQwOam5vR1NTEp+GyuD7bOoijBl6vl/sTnE4nb2nF/AtM/KlUijvYxI5I5hBj18HM551ipybKsm4/LJORMvLyh0S/TdYKn+252Z5eqVRCEASUlpZCo9FgfHwcLpcLsVjsFa82sxjYsEyNRoPy8nJYrVZUV1fDarVCr9fz7D3mBff7/bDb7ZidncXU1BTm5uZgt9vh9XoRDAYRCoX4SOf1LA25XM5vVuL39bbmt6fTaahUKmqisQXok9oGa8dVix9n7bPEImax5LGxsSzhs9WPiUxcYcfKZ71eLwRBQDqdhlKpRCaT4WGxpaUlTE9PY3x8HDMzM7DZbPD5fAW9j7X7/7X//7YRj8ehUqnQ2NiIiooKmmFXACT6bbK2HJZ5y1nhDZtx19jYiFgshkgkwsdRezwebk4z4bPwmTirL5lMwufz8VVNoVDwIZo2mw0zMzNc7KFQqOCY9VoHn7imfqfM8Z1EKpVCoVDAYDDQSr8F6JPaAcQr/dqbQElJCRQKBTQaDSwWC6qqqmCxWGCz2eD3+1+pYWevj0Qi3NHmdrsxNzcHrVbLm20kk0kEg0G43W54PB6e2bad1Vncledtxmw2o729HW1tbTAajST4AqFPa4dZK7pce3ax44mJTLzasnbVLNmHTZFRKBTcZ8Bi1cwj/7YLdbuwm2FZWRlOnDiBCxcuoK2tDRqNhpx4BUKi3wFy7YPF4o1Go7zXnNPphMfj4Su52IOe67iZTAbxeBwSiQSxWCzLabh2qu37DHuP+/btw2effYauri5qfb1F6BPbJuIVem3TShYr9/l8WFpawtTUFG8wyXLS812hxYUqxYQ4rt/W1oYvv/wSZ86cQXV1NQl+i9Cntk3E5jmLfbNst0gkgkAgALvdjpmZGR5OczqdPGZe6LmKDSb4gwcP4ssvv8Snn36K+vp66o23DUj022Ct0FmCSyKRQCwWQygUgtvthsPh4IUhrG8e6+LKVnux914M26+Kw3ns/8Xdc5nXf63VUYg1sdOwsKV4z82uKd8bmEKhwP79+/HHP/4Rn3zyCZqamkjw24REvw2Y0FjTC1a8whxw4XAYkUgEyWQSgiCgoqICwMuuNoFAALFYjDvixMkzrEc+C00pFAqe4ceiASz+z8xfdsNhgmKP+Xw+rK6uwuPxvLbPRaPRwGQyQafT8cGSTPgsGuFwODa1dMxmM44fP47f/e53+OCDD3gnXWJ7kOi3Qa5CFiZWmUwGpVIJrVbLxzxbrVaEw2F+M4hEIojFYvx3lqfPWmoJggC1Wo2ysjKUlpby/Hp2E2DNLcUOw1AolNVVxuv18oYTLBmIZfHl02RzM9RqNdRqNRe2TqdDY2Mjdu/ezfviRaNRnhkYCATgcrlgMpkQCoWyMgTZZxiLxaDVatHR0YGPP/6Y7+FJ8DuDZBMzq/g2kQXAxCZeYZmZz1batb+zUBtb3aPRKP9hFoNUKuV18kz0KpUKgiDwVV5s7rPtAUvoWVlZ4Wm4Ho8Hbrcbfr+fX4vP58Py8jLsdjuCwSC/WeW6iQHZqcbsealUCqWlpaipqcGuXbtgMpmgUqlgMpnQ2NiIhoYG6HQ6pNNpeL1efj1erxc+nw8ulwuRSCRr68EKjSQSCSoqKtDV1YWOjg7y0m+dnLFMEv02ETvy2O9rRbOed5/dBMQ3BnGZLjPp2Q+L0TOxrx11xZyHrI88G5s9Pz+P1dVVLu5wOMyLcMQmNhMzq85joUJBEHjRkHg7IZfLUVNTg46ODuzbt4+3rWI3KoVCwbvohEIhRCIReL1eLC8vY2FhAR6Ph7/fdDoNQRB4iXBlZSWsVisfBkJsCRL9m2Zt/f1mMXZxbn++LbTEVkU0GoXT6cTKygq8Xi/8fj//PRwOZ7XwEt9A2DaBZfixgiFW/afX62E2m6HVaqHX69HQ0IC6ujrodLosx6P4PbLrYv387XZ7Vq975uC0Wq18eg1V0G0bEn2xwfbH7MfpdGJ2dhbz8/OIx+OvJPqwyAPbrrAMQqVSyQtaSktLUVlZiYaGBpjNZl4+LAhCXiY4G7rJHJzia2XzAFnZMLFtSPTFTjgc5iu+WHCpVIpPumV/EwQBer2ej4Nmqy1zSur1+pzdbom3ChI9gazmGUD2Pj4UCiEUCiGVSvEefGq1OqtslTn11huLRbxVkOiJ9WGOQHZDEHcBIt5ZSPQEUWTkFD1tyAiiyCDRE0SRQaIniCKDRE8QRQaJniCKDBI9QRQZJHqCKDJI9ARRZJDoCaLIINETRJFBoieIIoNETxBFBomeIIoMEj1BFBkkeoIoMkj0BFFkkOgJosgg0RNEkUGiJ4gig0RPEEUGiZ4gigwSPUEUGSR6gigySPQEUWSQ6AmiyCDRE0SRQaIniCKDRE8QRQaJniCKDBI9QRQZJHqCKDJI9ARRZJDoCaLIINETRJFBoieIIoNETxBFBomeIIoMEj1BFBkkeoIoMkj0BFFkkOgJosgg0RNEkUGiJ4gig0RPEEUGiZ4gigwSPUEUGSR6gigySPQEUWSQ6AmiyCDRE0SRQaIniCKDRE8QRQaJniCKDBI9QRQZsk3+LnktV0EQxGuDVnqCKDJI9ARRZJDoCaLIINETRJFBoieIIoNETxBFxv8D/CrJ5OQ+1bAAAAAASUVORK5CYII=\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 65\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 66\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 67\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 68\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 69\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 70\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 71\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 72\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"algorithm = nlopt.LD_MMA\n",
"n = Nx * Ny # number of parameters\n",
@@ -2091,22 +464,9 @@
},
{
"cell_type": "code",
- "execution_count": 15,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"plt.figure()\n",
"plt.plot(10 * np.log10(evaluation_history), \"o-\")\n",
@@ -2125,22 +485,9 @@
},
{
"cell_type": "code",
- "execution_count": 16,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"opt.update_design([mapping(x, eta_i, cur_beta)])\n",
"plt.figure()\n",
@@ -2167,17 +514,9 @@
},
{
"cell_type": "code",
- "execution_count": 17,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Starting forward run...\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"f0, dJ_du = opt([mapping(x, eta_i, cur_beta)], need_gradient=False)\n",
"frequencies = opt.frequencies\n",
@@ -2188,34 +527,9 @@
},
{
"cell_type": "code",
- "execution_count": 18,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"plt.figure()\n",
"plt.plot(1 / frequencies, top_profile * 100, \"-o\")\n",
diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/04-Splitter-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/04-Splitter-checkpoint.ipynb
index 3e68cbcca..ddf535c4b 100644
--- a/python/examples/adjoint_optimization/.ipynb_checkpoints/04-Splitter-checkpoint.ipynb
+++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/04-Splitter-checkpoint.ipynb
@@ -13,17 +13,9 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Using MPI version 3.1, 1 processes\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"import meep as mp\n",
"import meep.adjoint as mpa\n",
@@ -50,7 +42,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -82,7 +74,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -120,7 +112,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -146,7 +138,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -176,7 +168,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -215,7 +207,7 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -266,7 +258,7 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -326,22 +318,9 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"plt.figure()\n",
"x0 = mapping(\n",
@@ -365,7 +344,7 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -414,1380 +393,9 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "current beta: 4\n",
- "Current iteration: 1\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 2\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "current beta: 8\n",
- "Current iteration: 3\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 5\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 6\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 7\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO19u5Ib2bXlrgIKj6pCPUg2KUoao6WQO/LkToSuo7juOPqBietd54b+Ydz5hTHHG1OGrPEUY8w4ExMhGRK72WSTEtnFQhWAAlC4BmNlrVzYJ5HVDzbVuVZEBlCJzJMns3Kd/Tz77G02mzAMozvY/747YBjGh4VJbxgdg0lvGB2DSW8YHYNJbxgdQ3/H73btG8Y/LvaynZb0htExmPSG0TGY9IbRMZj0htExmPSG0TGY9IbRMZj0htExmPSG0TGY9IbRMZj0htExmPSG0TGY9IbRMZj0htExmPSG0TGY9IbRMZj0htExmPSG0TGY9IbRMZj0htExmPSG8S3if/6f5/HP/+1/xX/57/873lzdfN/dSbGrMKZhGC3x+nIR//Y//m+sbjfx/168i4dH/z/+63/+j993t7ZgSW8Y3xLmy3Wsbu8KSF/OV99jb8ow6Q3jW8J/eHAY//KffhZ7exE/OhnFv/7TL77vLqXY27FqreveG8Y9cbO6jUH/o5Cnad17k94wfrjwYheGYZj0htE5mPSG0TGY9IbRMZj0htExmPSG0TGY9IbRMZj0htExmPSG0TGY9IbRMZj0htExmPSG0TGY9IbRMZj0htExmPSG0TGY9IbRMZj0htExmPSG0TGY9IbRMZj0htExmPSG0TGY9IbRMZj0htExmPSG0TGY9IbRMZj0htExmPQdxmaziR3Lmhk/QHh9+m+A75Iwbdv+GEi7t5cumfbBrvEhrv9Dgkl/D4Bgu4j2dQnb9PfX/e3roC2J9Li252X943PbtIt9e3t71XafPnQZJn0LMNl1a3tu9je3kbXdZsvOza7ThBLh2hCRSbeLeKVBs9RW1ibv39/fr20mfjuY9DughLq9va22JuJnpCsRl9vEtl6va5+6v/Q32lOClfrZRKoSkUGwEvGYgPwMsmemJO71emmbvPV6vej1etHv9+Pg4CD6/X70+/3qeO2vUYdJ3xIg1Wq1ivV6XW0ZmUpSmEnJpF2v17FardJtuVzWftfvfD4PALgO+sCfjJIExWdEpMRjkurGZMU19d75+twOCMztgehM+MFgEOPxOEajUYzH4xgOh3FwcFAbqIwcJv0O8IsKEt7c3MRyuYzValWTqjg+IzlLbibucrms2ry5uYnFYlF9x3Xw+3q9rq67XC6rPvFgoFoIEwz9Y2QSXEnP+1TCM1n5k6W9ajTr9bp2zf39/YrsBwcHNenN7eF6g8EgDg8PYzKZxNnZWZyenlb9VA3F2IZJ3wJ4YVerVSwWi5jP5zGfzysC4hg+lgmuJF+tVjWSz2azuLm5ievr66r9xWJRDQAgPqQ+S3++BhMexGqy5zebTWqrQ6pmKn6m2ivxWUJD2qNPOhChPZCdSX9wcFC1y4PDYDCIk5OTePToUSwWi4iIrQEiuzfjPUz6BrDUBslAztlsFovFopKuOB5kVxWdyQtCg9xoD4MJNrTPUl4HE5BdzQb0p+neGOq0U8nOx/AnS2EmHUt7fY5q0+M8Jju+q8kASX96ehqz2Sxub29jOBzG4eFhpeIbzTDpW4BfWEjn6+vrStqzVAXhVWVnsrO2gA2kx28YIFiar1arLXNBHWSZE+++UMnO+/R3da6BxOxU0+eopGf1PlPrWfvY39+PwWBQSfjxeBxnZ2dxfn4ex8fHW+aWsQ2TvgWYaJC4Nzc3FTlZnWfCq0SHGs/kVnUe0p1VePXslyIAbcOIuKcM7HyLiFiv16mazIMBzlmv19Hv9yvVWomfaSC9Xi8iojKTuH+r1aoiO1+LCT+dTmuDrwm/Gyb9PZCp73jZmPCwxVmCs8oOomNgYMmuqrySHf3ICH8fsJNN92XHqdTOng33LQv19Xq9NFynpoFKdzUR9vf3a8+btZ77DHxdhUnfEpkHmu1t1QBAeGxKelb/b25uai/wcrlsJLOq2iqdm47nEBr/rcdmNr22wdePiBpx8V3j9plqn6n3GvbjZ5GFBkv3a2zDpN8BDcepGs+2N3vjsV1dXVVOPw3HwUfAkp3tdoZKWv69NDCUElV2aQclRx7OZamunnx2yvEAUCImO+s00Ub7i2ff7/djPB7X4vOsFRjNMOlbQFVpttuhpi+Xyy1v/Gw2qxx+LOE5/FbyxAO7POgKJWFJUrNzEvs0Rq/X0rAkXxOedc6SGwwGtZCb9oUl9mAwqM5FW5Dy8Gvgc39/P8bjcRwfH1dee9YsjGaY9C3BUh52O4jNTjgmO4fiOGynGX1oF6RSxxW+q7pcSppRb/qumHmmcnM4jp8B5wNgwNBw2mAwqCQwyKwJO9xHTaeFZrC3t1fLguRIyXg8jgcPHsTp6WkcHh5WA4xJvxsmfQswUVjCZ+o7JDsTHmq/2utNOfwscbM4ONu9HBtn6Qm1VwmX5ezzdbVdoJSGDAJDug+HwxiNRjEcDmMwGNRUfb2vTLVn8nLWISdDDYfDOD09jbOzszg6OqpIn9n4Rh0mfUuAHGy3X11dxXQ6rUjPzjt23MFRB/UUZCk50TTPnPPNS6mqupUSXHgAy/qigwxIz6YNbxgwQPrhcFiRfjQa1UivmgoPLNzXbIBip+lms4l+vx+TySROT09jPB5XZoGxGyb9DrD9ixcd6vvV1VVcXl5uJdow4dl+h5MO7UZsq/JKdEhPVpv5E6SCKs0qNVRsTZZRNR3aBveB7Wq2rdmJyaTnFFlMhuH+MZkzLUa1FH7+msq82Wyi1+tVdj2T3lJ+N0z6FmApB9UepOeUXE22YXLgZc3i4kx2Dl8x0SE5MbMMG5MfBGO1miUoE6JkXmTTWvmcTNIjds42vV5fHYsl8mtCD/sf2NkJ7QDaBA9ofD8YsPiz6zDpG6De6vV6Xan219fXMZ1O4+rqqqbGa1YdE1493oA6tCCtB4NBRfTDw8Nqw99NxGdTgO1pQHP0s/CbetvZg85TeXE/2Ww59SmUtqZogyYp3d7e1vwIcPyxr0TzF75pavI/IkoDnEm/A2wDq6RnG55nzrGnucl+39vb27LF2SZGLBpq7NHRURweHsbR0VEtTp2p+mrPc9weyBJ0mmL07ANg84DP49CdFsTIwo5NGz9/JjT3F+1iIMK+LDfAeA+TvgUy9T6z2zk7L0sJ1ZddpaKq8SD54eFhRXrsYzWfCa8TVpoy13BvjBL5+DlkcwBUYmc2vD6D7Hr8G19XU441OYlNjoioYv/GNkz6FsBLxlNjQXotqNEUcwfYccV2O6aIYgPJeQPhWcqzdNd57ZktzffFyIiIv9XUKQ1qSvQmQuv1suel14VUj4ja8+bJSWxmcNSia3j69Gm636RvAZZwmnqbOepUlWYPNzvtYHsPh8OKyEx2lvJsz+P4zGFWKltVIjFQIqAOEvCcZw4zPqdJuu+6rv6uTjl+rlneBMKobNuj/13Cb3/723S/Sb8DrFbq1FmOu+NYvPCQOGpHayiOCc9kV6KzdB+NRkXbvYnwJSmb7Sv9XnKMtRk09Dqlv7Pnr6YFm1pXV1fx7t27ePv2bfztb3+LFy9exKtXr2I2m3WO6AyT/htC48UlpxLCVyVbGaEmbOyNPzo6qsiuzjq23RECyxxluwiEvmT7OKS1K7ylx/M96jVK/di1P7PjeUYjwqZv376NV69exYsXL+Kzzz6LZ8+exYsXL2I6naamVul6JZ9H6bxdz+pjaD+DSd8CLG20Fh2ABw7Jruot/uYYPKS82u8lRx3Hu1WD4D4yWTIpz/3F9xLhS6p16Tm12bcLmXTn1F/4VS4vL+Orr76KL7/8Mj7//PP461//Gn/5y1/i888/j9evX8fV1VUsl8t7X/+HDpO+JVTiMBk4c43tdvZmYx977NmOZ+KD8Oyk43aUDJk6DY0D+xlNKv0uFZ+fR9Zem+ObBgI1p7Ly4JjjcHFxEa9evYrnz5/Hs2fP4tmzZ/H8+fN4/fp1XFxcdFq1b4JJ/zXBJOHacFpEQlNa4WGH510deEi6YenOsXaW4CC8quslb732n+9D76mNmp61pyj5ALJBICO7FhuBHT+dTuPNmzfx8uXLeP78eXz22Wfx8uXL+Oqrr2I+n7fqc1dh0t8DTHKelBIRNY/8Lm8658lDqkPCc6INDyIR9WQaVX/7/X71nU2MtveUbfj964CJXNr4nrKKRFpfkD8vLy8rW/7ly5fx5ZdfxsXFRcxms2JdP+M9TPqWUMkOFR1gIoO4PE9cJ5eUpqHqBBUA/gTsw/d+v18RRWepZeG20j1pmC2iedDQyj58Hb4em0RqHpUcdBqC46IkyI9gj/2bN2/i8vIyZrNZrWaekcOkbwEmOwgJkoMsOjFG7XG1+3ng4Gy6LIOOyYGMM40GcIWaLM8+orkeXlN4D1BC83fOktPwGktwJjmH39hBB8LDO4+aBTzHgec/TKfTuL6+jpubmy0Hq7ENk74FmKiQ5MPhMBaLRUVSkJ0971kZJ7yQbB40LQWlji3Nd+/1erFcLrfy3UvtNGXQlTSEUn8ySc4kR/KMFt/I1uGDhIf6jspDPItRawvyAIDrmPC7YdLvAEt5pM0iNx4vLxdq5IQaDrNF1CUgoFJdScUSnnMEePDghJ/MLNDrIiTHZC/l5+v5OgDxp5K6tAinrr/HcxeyugS8OhCHTWH78zRfE383TPoWUBUeBMfLjnndPBMOpAeZ8DKylFMPNofg2NFVqrMfUSd9VoSiNG9enZIcheA+aR2/TFrrEl7Z3zr7MPtkBx4PBDo9WUOWnAJtwu+GSb8DIAccb/C0Hx8fVy8ZVlHl5Bou7rC3dzf1U6vh4iVmj/Pt7W2V344XW3P+uT6dEh99VtJqfgGfl2kc2YQWrZzDxNTv2SCQSXrVZLRIhxYgycwM9ikYzTDpG6COrn6/X9ntx8fHFZmRTsv58lyPHeRbLpc1MmaERMiNf4ME5Iq6OIfJy2p6ltGGfWqyKOnVj8CONlXHNY6+i+xs5+Pe+DvfM4fzIrZj+zyoWcK3h0nfAiAIS/rZbLZFelbt4cQDAVerVUWo1WpVC73hhV2v1zV1W0nPxOLzMrucSZGRXuvwYR/AdjOr6kx4XaknqxjE0pxV8WzQU78DaybqgLRk//ow6RvALxqkKRM/4j05UAiS8+URrsPAgM/lcrnl2MsIfB/Sq32ubbMZgeM5mWi5XG45HNVeV8Jrhpza4Oy1Z0Krbc73kSUflQANB74NPDv1ieBYawJ3MOnvAaj4cObhpeUyV1yjDvY1XnC2uSPqTjoOw3HYLHNysUONQ27qF1DS4xrw8mOFWV5pNuKO9JmUV5WeQ2nqd1Dvvg5ypQ3QKAc/H4BNMAyuSnATvo5G0nf9YanqudlsKuKD2CC9LtagjrHMScZZaGhfX2KYA0hcwXcmCV70rH0NZbHqH5FPvtGEGXbSqUOvNCnm2yA8RyGyxCHcD9plU8oow5K+AeyA4+qvnIqrYa+sDd5Y6jJZoKbipVZHnob61J5lkqgDTkN8aB9ORvST71kTavi6fP0mAutx/Ez0+ShUspfmBGAgZkkfsb3evXGHRtJ3fdLC3t5eNZWT16TLYuzqKeeXlskNu15DVyAaZ8Wpba1ah84HUKiHm/ezWZBl4bHNrQkvnNSjU4g1nRdmB0jJAxN+z4jP5Nb7xHnZffJgyH0w7mBJX8B6vY7ZbBbT6TTevXsX19fXNfLDYcV2dWaPg/RsB7NtzOp6RL2e3q7EGtYy2PkXUS+EgbZwLhMW5gqr9lkKL8Dhy9vb2yp/gQc9OAe5r+yoVG99ydHG/dckIh60cCwGM82KZAelsYP0f/7znz9UPz4K8MsOGxr535zzzYQFudS+hSMv4j2RdIFLdoBpzB12KqCSFi8xT7Lh+fZQbZW0bJbwNGCQqCkElknakhRlE4WlLwYK1j5KyTU8kDLZtV4BL4vd7/fj6OgoHj9+HI8fP47z8/MYDoe1Qp7GDtL/4Q9/+E5VfJZG32f76tQC6XF+NmuNX2Ycw2vMgUws6bFIBrb5fL6lLQBso2YqME8AYv8Csvn03tAWnI7cT9QEgOnR6/VqNrGaECXVHsfd3NxEr9fbSjfOQnWaPMTXVJOBBzheJwAZksfHx/HJJ5/Ez372s/j000/j4cOH1SxHdnp2HY2k//3vf/+h+vHRAaEsLlIJkihB8YLqIpIcsuM17VnSK5FVmq5Wq+j1elv2PgYZltYYYHR1F/QBbSO8yFmDEXeJQhz64zZY6kZEpd5joIAUhnqv0hzPFedq3B7ORh1sVdIjX2I8HsfJyUmcn5/HgwcP4pNPPomf/OQn8Ytf/CI+/fTTOD8/T2c4dh2NpP/jH//4ofrx0WF/fz+Gw2FMJpM4OzuLk5OTWk49pA7bnbxaDRMxS7Dh2DxIqlEBvKSr1apWGUeLcEBa8wDDti5rDZxTgHM51IXz1bnHpFcfAE/t7ff7tVRh9UNE1B2fHN5Tac/nsR3PE5zOzs7iRz/6UTx9+rT6fPr0aZyennqFmwIaSf/8+fMP1Y+PEqPRKCaTSUyn00p9PDo6qojP6i4IASnE8+ghPXmWHMf8I6KmurKNrQNLRGzN6+diHZD03Cf4H0BMJX3EnXTNCA9g0MD1cW/QOG5ubuLg4KBKIFLzR6MMHMfn2D/6w9cFcA/435yfn8fjx48r0j958qSaF2F1Poe99w1AgcXNZlMVa5jNZtV66HjxAZCCa+MBWf47JDUfB20B0pfj91C7MbBwqS0QPZPUsK85oxADF0iPvrGGopEAvjabBfDYDwaDuLm5qZKWcD6n/OrcAk3sYWcoX5+f2/7+fmXLn52dxdnZWTx48CAePHgQk8kkhsNh9fy6jNKAZ9I3AOoyyI8XcrFYpKSPiJqk1nAVt3twcFCRGGqoFsPgeDpLy6y+Huf5q0edPfN8HvsdoGbf3NxsxcC5HWxc+w/+D15mm3MJcKyaIhF3g2E2O08n6MC8gemFoiXQwLRwiePzOZyc0wC2xxeLRUTcrZDKBTL4eCZn5gyDtAXRUdgy4s4jD9JjH8B2ORfRZNJjoEBfcV0MMGwWgKg4Tkt7oQ1Vtbl2P/p5cHBQ+S1AemgGGAhYu2B/B5s+nMPPxTc4BTgiaiaKRiJK2ZHGezj3vgHsacZ0WJZQTcTGb6r+80SXXq8Xo9GolrjC0j7rB0tOjhbAJOC0V55kw6SHNNQYNif6oA0NdbHvQh2I6DtUe3YccsFQXB+DFDQMnmOQzeZjB6ESvakSsFGH1fsd4Bcfaigkp0pFoET4iDvJDrVeHV7sBVebVj38fCxL+oj6pBl2CLIKzup5NklI75/vhbUS1jCY9DADuMSYRj+4rzp7bz6fx2AwiPl8XiM0QoUlopvwzTDpW4BffKj3LIkz8IuHl5vDaExKDWuptMU+PSarfAPJqUUy4Mjj/RolyAgfcadh8OCkcXTdj4GEzQlemw+aCdrHM2UTY39/PxaLRS3Eh2NLZDfhd8Okb4mmlFFG9tJxoQdoCZpai99US4BkZ3NCk1b4b5bqmRNQs+ciYutvve/S/XF7uC4frwMPayYc3eBkICY37H1dIkzNJx4Ujd3wkzKMjsGSviUyydkkXUrqPVTszMOsZgT2cXw/YrusNTvsWCNRzQQqOu/HvtKElKyP/F0nBnH7uGdNvuE4PZtMWpKLQ3haAUifVdNkIaMOk74FVJXMVpLhY/kc3Z+tbMuqLZNYCczTUDl1lavGYJDgDTF4DFbZOUxY7TObBqV+6nV5sNJBkqMhEXf5D5kjLyvJBVNCB6vSwGXUYdLvAJOdp6Oy91mPV+cW/8apsLoiDWeoASrl0L7Wicd+ZORldfIzGx4hO/YzqKdeBzAedHjA4qQakJ0jCCA7koI465Dj8hqiy0J22raS3yjDyTkNYAJzXDxLn8XxagZgP8CzxDgjLiJq0hvQqjs4tte7W8OOs/d4Rh9LTdYSuG+IQujgwvdTIjwIiL7rIh7oJ9JzkbjDST080GlxTR60eCUc9IfrGmQDQNff3xKcnLMDmq+OeLMSFmCPdUR9jj6AeDkSTDiHnVNPNTedSY856xiUuCQVq8dQkZmcDPzN12iS9Jw9h78hwdku5zkDmobL2o2eywTXMmHQgHAuCpPwenfZPRh1WL1vAKQnJnfw3HrNvdfYOaeDsnTkl5GlfcQdodheZScY1GkQlX0KPOFGF4IEidhph/tDcg2kaFZnDuDsPgwkOBepykx6zQ1AuI4JzwNdVgAU/WT1HSHM4XBYLWWN5ax1QO6ytC/du0nfgNFoFCcnJ3F6ehrHx8cxmUyq2msqsWAf69TaiLoKy0s6QYtg3wDIx8Qv1dFj6csTbqDeM+kxmHAkALPj0EcmrKbe8n1wX7FP6+CXptay7wF9KM2uA9Q8QrbiwcFBXFxcxNu3b+P4+LiWkqwTe4w7NJL+pz/96Yfqx0eHvb29GA6HcXJyUhXRyNJI2TmmRTS4DNWuIho4TiUyS3oMFpB0rEHAmcekx7rubBow6dE+HGqsGmfqMY5BX/GJ63HOfFZEA5/q7WdfBl9bnaicSozBB5WAUGQk4r0GdXR0ZMIX0Ej6X/3qVx+qHx8NWAqhXNbx8XEl3bNZXJBeWi5La881lcsCGdgWjoiKiExINhXwnctlYfovLzfFHm8lvZoXGfH5b15sgyfJ8BJXLL1xPn+ynZ6ZP1nmITQpLUy62WxisVjEdDqt8vRHo1FlWnQVpXtvJP1vfvOb76QzHztYCkXk68txjBovKBxzWcFJEEKngHJhTL622vWahMN59jwXAETMpC5yDBi3t7dbGknmCGOTgPvCYTVIe6j3mW1euif1d5TSjWE2sQ9gsVjEu3fv4u9//3u8efMmrq6u4uLiIh48eFBNge6iR/+Xv/xlur+R9L/+9a+/k858rGDbFdILDqJs6ieXwNaadVkJbJ5HjuvM5/OK4AzNsGNyRNx5zeFshHrP0lc92vid71cHmYyArBWgb+q8A9lhTmQhwGzA5EFAwRNvIOnRV5hLkPDQrL744ot48eJF/OlPf4qzs7NK4uP6XcLXIv3Pf/7z76Qz/whYr9cxn8/j3bt3cXFxUVvsAuWr4fRi1b5UZZansbKUgrRUpxkPBDooMIlAevgCNMzHvgAARELYjdvUwQdgSY92s8UsOeymBOdBgze0r+D7hx8DM+w4IYmxv78fX3zxRa2WYVdJ/7vf/S7db+99AbAL8eIdHBzE9fX1Vv662vNs00NC8cu+Wq1iOBzWHHqcEaczyCLqNerwN6uqcO4BrAXgd1Wx2RcAInHbEXlyDtvimlTD6bRon7WTEtk1JIdr4xN9ZmmfPQ8NN0bE1qBgODmnEZtNvboNpLIm5XAoiifUaMFL2N4cs2avcxZb1heb1WLsj4iaX4D7xETh37gdaCCac8BpullWnjoUeTDk/kZE7Xqq7quTj7/zfbB5kj0XjfkbOSzpG4CXXqu0aCgtImovs7ahGw8OID0Tj8nLkQJ+ufl4JinOibgLBeJ3bl8HmFLKLZMKAwv3Mbs/vVc2PXBORl4G3yPfJ5Nf+8b/F6MM5943IPMgc8wdOe14QVWa4wVlCcjtcqIJBgwlvaqyHG9XEvJ5UPkh5bmffG3+5EEj0zYi3qf/YqBCRR6+Dw7rMVgTyZx2AM5XP4YOcjhWk40yh6VRhyV9S7ATCzHw2WwW6/U6BoNBLY7MFWJB+iyEBfKpNNPwIGLTANRXluScwML9ZQ86XxfXRtkqzgwEmbJyXGy+qKbAAxAPkLgH/J2FI3Fd3jJ7PIsqsJlgsu+GSd8AlSqQ8LPZrMr3vr29rS12yeonq6jsrWepzrFzJq6SngcEzK7LSKzqLzvTMk2Di1tmzkA45rA+HTZe6Qar2ywWixgMBmntera30S9ENXgAaGPv8++MpkiAcQeTfgeYPLzy7HQ6jaurq0rSqwML+fCs0pamnmLAaCpyyURFtEA1BiZ+xLa3nCMOqpmojc+OMXaOaXUb/kSMnqfEMvnZq6+59jzIZE5C/C8Y8BcY94NJ3wAOeUGiz+fzmE6nMZ1O4/LyMjabTZULrrHsbBFLTouN2J6zr55/qNkqmXlSDNvobNuz+qx+hUxdLzkNlaQ6DZYTl3hxCia9Sn88Ax4I+HjVjEpmAJ5R1/1P94FJvwN4ufDiwpaHpL+9va1Wd+GXFwUjQKiMQKxul6afchYaO+Y4RVglNtvCWTgN18xy29V7rzn+TH4MZNnGJM+KYbDqj+elGY+cy8A5+hr6g/POkr8dTPoW4Bg9Z+VdX19XdimTAC+sLuqgEpeJp3Y22/Uq6VViswdez21ydKnnX7326LN6x3kA08GgaUBgwme/cUEMZD0i85FnJurgGhG1RTtt0zfDpN8BttGhtuJlBOmRC64vMC/qoGTiHADY79ivITg4BNnxxW2wlsCkB9TfwH3QQUdj9fwMdFOpyxqB+gPUPFCVniftYFDlT62Og2P7/X7MZrO0f0YOk74F+GXmueNwXEF95zRUXtlWPeuamAPyqvoN8qlzD7+DpPAd6OowQMkRxu1nST7Zc9BPJpgOBJmDTh11TH4QHyYUIiTQqrg67nw+j6urq5hOp5V0z9JwjW2Y9C2gHnz2xHOtOOxn1V7j4Ex4Xt1V1XTsZwJzSE2df5mkV/ucPyPq2XTZOU15603kyjSCklbA+0rE50lO2DB99u3bt1UExMk57WDSt4SG49hBFXE3mQbxbMyZZzubw22YlMPSiVVtDqtF5OvHqfNPHXlNpEWb3Ha2fVvPrKR+sxbCJoBW/8H0Znakvn37No6OjmrOTY31G9sw6e8BTXgB0eHdRygNqapZNhsIiim4mqxTArejKbR8rSz8ptAU2xL5s2PxHErtNT03PpfbUPOAnYCaDwDVfjqdxtnZWYzH462kIvb2G9sw6e8BVZd5EEAsXsNfGhJDFttisYjhcLhVS07JUPK2syOwpN5D0pfy6PnvjOwZ8blvWZu7/AH6tw4kbBKU8gMWi0VcX1/H8fFxjFWuKKMAAAmoSURBVEajrRVwcYyRw6Rvicz+jdiuEIv9fAyfA8k8GAxqpanUw86hMbTRlFyjGoWaCSWy8/cS6fmYXdKzaaBoi+w58ACwXC7j8PCwKk/GAx9f9+rqamvij2HSt4La2Jn6rDaqTu/kAQN2vxaf0I1JjjZgIqgjLbPHlfh8bHaP3I5+z5Cp+Ur6NuRv0g7U4Ye0ZyQ+wXdycHBQrU8wmUzi9PQ0Li8v0wG562q/Sd8SrJ6zJx4veilurej1elWcGTa9+gmY9CztuR+I28PTD9Oi6YVuInvT9wyZOcLnIvmoTT92mRE8D0Fn+eF/MhgM4vj4OM7OzuLRo0fx+vXruL6+7jzBM5j0O8BSE4TnEtcgP0JFmvLKpAVRIa1VfS1lt3Fef9Y3/c7Y5cFn25qJiu+6rxSj5z6UogCZpL3PAMH3ojMTUev+/Pw8fvzjH8d8Pq98Ld80CvFDg0nfAuyQ41p4GADwEnNFWlZHVfXnZB5Na82y2HQgKcXBb29va0k/aoooAUpSOiNrloBTIn2TT0G1iWyg4eMyzz+A/wfU/PF4HOfn57UoCZ6BJf4dTPoWYFucq96ORqOt5aY2m01trntGDiYO/40BAs6qbPJKlrPOZbe59t6uEF4b0iv5sgQbPk8djOr4VNJn2krWz8y+j6gnKUXcFTRFJVxjGyZ9C7ADbTAYVC8VSA/VPiKqVWtYtcxi1MjXB/iFVomPySZcanqxWFR90EU24Nxi8uMeAPYTZM7CjIA6MKm/QROGNKKA9jOS33ewgVagswzxP9JFPYw7+Mk0QL32SKoZj8dxeHhYkT7i/bLJ/KLywpBNCSkgPh/Hef481RRkR1rqeDyuknwy4jP51emoajrAKb8amsx8DjxjkJOF+NqaGsyk19yDTCPR2X08X4H9KnyvmQ+kayj5Mkz6FmCJAkmPNe7Yo6xxYgYm5mQvIsJKTCxV4XkuP0v4jPD4G8TX9NxSLgDutWQSqPaBvuI8dnKiH3p9leaaW8BaAfqqTk5oSgjT4bv6E9Avow6TvgUy9R5r1YPM2UvNWWF7e3u11FCV+iw1mfxcmgqkh08BaizIxd+ZfFrtVqMGLBXZHmcCstnBPga2rfF88IyakmfY5NCSXXycpuWiv71eL8bjceWwHAwGlcZR8g0Y72HS7wC/QFAfod7P5/O4vb1N1Wm8xIvForLf2WufOfciolYzrtfrVQTjqbqckJItnqHHgZBMJI0KaAoxEx/QajdcwUfnFDDpuR+sxutcAh0c8IzUoYnrTSaTuL19X4obC5J0XaVvA5O+JVi9h11/dHRUSR2Qje1MlmCLxaIiMSfUZOEvhP4Q08cnzlVzQr30XKm2VE2Hy0+xXc6ExECB8zKbns+DlAfZeV0/9iso8XkQw3XZLlfSbzabGI1G1YA6Ho8rU8uk3w2TvgWYDFCbx+Nx5amHhJvP56kdjRcZS2IpaTLpD7WZQ2IYDNiMUJNCpTWHzgC+FofAlJRcXAN90T5H1E0CJj6HEdUxyIOVOv/U/6Bhyr29vRiPx7FcLmMwGFRpt6UkJqMOk74l2P7EywyVsiTlWdVGaScuvsHkj6iTMUt8QRgQf5f6ucsbnoXA+HwN8bEvIKJefiuiTnomL/LjWcpze6y1sDmCwQDgmnsYBI+OjqrPhw8fVlV4TfjdMOl3IPM2s5caEjILVbE9jd84/Ia590wunnkXsT29FijF2bnfEdtLVClxS/echdiyfAMdZDhDbj6f1zQN7gcTH8+Jk4vUg89+CGQcYiXh+Xxec/IZzTDp7wGW9iAx59JrIQt8n8/n0e/3K2cc/gbhsT49Yv7L5bKy5QElqcb/d73snCSUtcfHRURKelxLj8fvmE+AvmcZeVkiEA+M2KBxZP1Fu1ynULUkowyTviXUycXZX1DR1Tvd5FWHus+Ovr29vVpJZ3j79SVWE0A1g/tASciaABOaJW/2XKClcP/wTEqDhmpPOouxlPegGYEm+f1g0t8DGZnhvYfaqWq+5urP5/Oq5NN8Po/BYFDTBDi8h/CYhtYUpcGhCdmxUNezfXpdHQSa4uPqnORrQ5pjwMC14MNg4mfhU5gTJc3E2IZJ3wKaRML2PCbXcN48Z9EhqUZLZ3NlV92QY68OPw2zsSedw2ptpH4TMZhk6sxTuxybmjWaWYf+ZGm/TGKdM6A+Adj+k8kkJpNJHB8fx+HhYW0JMaMZJn0LMOnhtQfhQUTNpMvIr5NmUOkVmXZa5pmr62hCDNTbUsmtb6L2Zo68Euk5X4DtcY7xR2wvrwXoYAqTSROLeHAYDocxmUziyZMn8ejRo5hMJjEej7eiBEYOk74Bmdeea9XDnleHWml+PCeYQPLzijm8QSNgiY+wFA8onKuvxLqvnd8U7lMHH39yViCkM2cARtzF+PFdPf9qDmm2IUcHQPqHDx/GkydPqqq4XCDTKMOkbwF+uYfDYSVxNLwWsR0SKxXJ4Bx2LfHM2oAu/qiJKlxwg+1/XBt92YU2CT+6sUqvYUrN9ddngT7p+ZzcxNKeVX0kR52cnMTp6Wmcnp7GaDTamk1o5DDpd4DtWgCSqeRYU8mv6n9pICit+lrKec9Ir0k32YCk94fPjORKIpXyHKbMZtPxc1AzhNvT/HvN4tPsRlTKGY/HVZ6/1ft2MOlbAi8ePjNSMTKyaWxdSaATYXhKaTanXI9VcrVV7zPil+z4khbAE2hKHvws21Db0YEju16W/aczCY0y9na8EA6ARrPkbntu9ndTu6Vt1/Ha7n2gTjrdlx2TDRh6bNYfJn12fmngyQYAHWxM/Arpg7CkbwF9kb8O2dseV1LH2x53n2tnaEuY7Lj7kE2TdErtlNrMBoj79qGrsKT/BviuM8G+zcHlu8KHINmua5joRaQPxqQ3jB8uUtI7qGkYHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHYNJbxgdg0lvGB2DSW8YHUN/x+97H6QXhmF8MFjSG0bHYNIbRsdg0htGx2DSG0bHYNIbRsdg0htGx/Dvlxi98LdOCjwAAAAASUVORK5CYII=\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 9\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 10\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 11\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2duY4k27md/8q5KquqT/fldMAjR4Bc0aMrgHIIudfhCwjy5NyXuO59hWvKk0kCtOTKkBxBBl1CYLOb3X2qq3KsShmNFb1y5b93RPXp6XCvD0hEVGYMO6Ji7X/YQ5wdDocwxrTD6EsXwBjzebHojWkMi96YxrDojWkMi96Yxpj0/O7UvjE/Xs6yL23pjWkMi96YxrDojWkMi96YxrDojWkMi96YxrDojWkMi96YxrDojWkMi96YxrDojWkMi96YxrDojWkMi96YxrDojWkMi96YxrDojWkMi96YxrDojWkMi96Yj8h//19/jv/0L/8j/vO//s/42+32SxcnpW9iTGPMQP56s4l/+m//O/YPh/g//+/7+Ifl/41//sd//6WLdYItvTEfifXuPvYP7yeQvlnvv2Bpylj0xnwk/s2zi/gv/+HfxtlZxC+uF/Ff/+O/+9JFSjnreWut57035pFs9w8xm3wV9jSd996iN+bvF7/swhhj0RvTHBa9MY1h0RvTGBa9MY1h0RvTGBa9MY1h0RvTGBa9MY1h0RvTGBa9MY1h0RvTGBa9MY1h0RvTGBa9MY1h0RvTGBa9MY1h0RvTGBa9MY1h0RvTGBa9MY1h0RvTGBa9MY1h0RvTGBa9MY1h0RvTGBa9MY3h99N/ID3vAPxsfC3lODtLX5v2d3veHzMW/UBYXFj/GIIbcoyPtc2n4FOJru+4+J2XrgCGYdEP4HA4FD+1ffqOWfp7SAXT9/1jygKGiCbbhr/rO0ZWltL+tXOdnZ3FaDQ6WQ4pQ+tY9D2wwB8eHuLh4SHu7++7dWxT2z/7O1tyRVKqYIb+XSqXfqcCGSo6XoeVVeubURN9dhw9Hz6j0SjG43FMJpMYj8cxHo8jIjrhmzIW/QAg+Pv7+9jv97Hb7WK/33fi5+10P11mYn14eDipWPQ7Xefv7u/vT45ZEn+f6GrL7Du1tipcvR+l82eWW8+B9dFoFJPJJGazWczn85jNZjGdTmMymQyqeFrHou+BhbXb7WKz2XSf3W53InzdL/uwcPlzf3/fHY/XH/vJhJ+VUVHhRsTJOn+nQuWPCj+r+PhY2f7j8fikTBD8fD6Pi4uLWC6XsVwuj44Fq29yLPoKLBiIfr1ex+3tbdzd3XXCz6xqyXpnIscH3gO8iWwbDi+4UsDveu7HCD+z1pmLjW1ZoJPJpHO5ITwVPe6FnhMfuOn8t1Yio9EoptNpLJfLuL6+jqdPn3bnw+dwONjSV7Doe1BLD9Hf3NzE3d1dbLfbo9i+JHS14Cp2DhvgQWTCzzwCPod6EygXLzPxcxIsc7HxG7bV2JqXqABUeFoJcaXCokWczoLn5Ww2i8vLy9hsNnF2dnbk5j88PMRoNLLwK1j0A4CI9vt9rNfruLu7i5ubm7i9ve1Er4LvE7kKnkWPD2+rAs8qFI31UXZelnIQmaBrCToWIqw6xIr1zMXXmD6z9Grx1b2fTqed4BeLRVxdXXUV5dCWipax6HtgMUOoiOlXq1VsNpsTwUGEKu5syVZdl1xpaOtBRKSxPJcZ63wt2E9/i4gTC19KyGVJPBU+C1bvJx8n8xbwySoceAKj0SguLi5ivV7HZrOJ/X5fTBSaYyz6gajw2Tqz6DKLDiFnFl7XVeyZ696Xvcf6Y67t7OysO642e5WEe39/f/TbeDyOh4eHo+84bOgrk3oFWSJwv9/HaDQ68orUuzF1LPpHUIrZYWW4WU9d98xtL3kD6sqX3HCUhQWLcg69FkWta2ats+1hmdVVL3kL2FcTd5yxx5I9FP3NPB6LfgBZk1spq87Zd1juPktesuoAD3lEHFnSoe3vfdej+9Tc++w8LFx27zmhl5VFm+k0lkd5NOs/mUyOOuW4AngcFv0jyWJ8ttBZJp4rgUzgWVwO1NXWprAMda8zN7nkErNAP7TZDYKE6LPusdq+zzE9V3JZWdFOj045Fv7jsOgfQWbps9hcBc8fteZDxBfxuDZ0dqtLVlZbHPS8JRFlZWbxsuBVyBo6cGig4tfKhhOYk8kkFotFJ/w+j8IcY9EPRAXPAuduuSz47XabdrRRi6nJN+12qu3UWfu1rmtsrPSJPtsva0HghJsKnq19rUmQO/RkWX9tpZhMJnFxcRGLxeJE9KYfi/4RZFaeRc/WHYJXK68dZ0BmwbkdnJvESj3WNMZlMai7jGVN9Fk8r4lLtfaZ8Euehzb5lbrwcujz8PAQ4/E4zs/P4+LiIubzuUX/SCz6AWRJPIgd/fG1jV0H5nDSTsmsddZurfFytk32twpJE3lZHkGFp1aeOwTxflpOTcyVev7VRM/nPhwOMRqNYj6fx2Kx6GJ6vS5TxqIfSF88r/G7Zu1LzW/qksNCq3sMN5Y/mUVVwZfi3ZLoS5Y+64eAawK1nnW1mF6z+Pxb1jcB92M+n8d0Oi1WZgyOZW/Aou+FHx5ul89iem2LzzLzePD44WcLrWLGkNHpdHq0nokfXVQzy5+JHsuS6PU+ZJY+c/G1L35W6ZREnyURNf9xdnYW0+k0ZrNZ5zmg4uVKhkfbfUinpR87pQrOoh9A1ikn63yjHXOypjj+R6hFzj4QOJqnVPwQfMnyl0SP6+IlyvcY0Wu4wkIviVitvSYptQyZ9cZ5DodD7Pf7ri8+jsMegDnGoh9Ilr3PutfWeroxLEqIV6166ZNZ+0z02gSmQuJr4zIOEX2pQlPrHXHc16Bm7TXcKYUjfByMhXh4eIjNZhPb7TYi3rckmFMs+keQjWwrufAAbqYKgy18Jna27llFkHkFWSzNnV2GWD4WPpaZp6NNd0zWLFc7X8nK10QPCw/Ro5yTySTevHkTl5eXsVgsurCnJbcefPvtt+n3Fv1A1NJnA2GAWi+N5SF6te6ZG5/F9Oz61zL6WXKMy5iFHCp6vf7Mmuu18z0o3Uvehr2PLO+QlQOeFTeRbrfbrk8EV6iZd9MCv/vd79LvLfoB1CwdJ5kAW/esy6rG8SxwFj0qhSxxV+vQUnKRuXy85O9LQuV94K5nIYIelyuXbKmWXROd+j/AfYfAV6tV3N7extu3b+Pm5ibevHkTb9++jdVq1WX6W7X0Fv1HQEWfTdqgglCrFnE8JpxdeBa8uu5Zs1YpVtZKCg99Tey8r26nmf6+TLhWBrpP1pymLRp6PLXw2+22m8zk9evX8be//S1evnzZfd68edN1IurzOLL7kN0P3a/koXxNx8+w6CuULFmpR50mjrKkFfeWY/e+JPhaezsLGqPvIAw+L4/MKwm+zy1n0WoXXr0Xet+4uS3bZ4jY2auCK39zcxOvXr2KFy9exF/+8pf461//Gi9evIiXL1/Gzc1NrFarE0/LWPSPgh9WfpjUSqkFznrcZU1zLHrtequxL5dDf+O2a+0//zFEr2Icst2QykLvMwudOwfBrf/+++/j5cuX8fz58+7z+vXrePPmTaxWq/TYxqL/waios4Eu2hyl3VVV+EO60GZiG4/HRxNN9Ll7QwXP58hc9SxWL1npkvCzfUqtJHDtIfoXL17Eq1evulg+a1Ew77HoPxCNrTVrru3juq796TV+1/2BuvKcrOoTfMmyZvF0lkXvE33mxqvgs+bNkth5diEWPiz9mzdv4vXr13FzcxNv376N9Xod2+22uyctJu+GYNE/ErXYk8mks7Iq5FJ/cm7uynrU1Sw81lEWCL3U+433zRJwmZUvCV6PVXPlS0IviV8TpDyAST+YlZiz9ev1+mgIs2P5Mhb9I2BRsMAj4sRaZyPMIk5H1Gmf+8zClywryqKeRCmTr58s0ajoubFeSs7VBJ/1b8jc+FIXZ/59s9nE3d1dNyMxtqnlCsw7LPqBcMzO1hwP/3g87kbCcacZFT2OFfG+AigNhQUqvCG94HR7zQVk1p7X+yx8LVGn1rs2PZj+piMXS1OM7Xa7uLu76yw8i97UsegrlJrc2CXX3l/8Uaudueds8TUcYIsMsbKFZLIsfsnqZtawFBLg2FhmYudZdPoseU34pZmEs74RmJlI57y36Pux6AegzXGcbcf33KMOFp/df6Ciq7nnJavL4s3KiW2zWLkkeqVkxTOLzufJzsnf8aw7WM9ce17H9qhc2NrzucwwLPqBaOwNkUOkEDuEzx1ruDONCibitNkP37EwayIEJSufucclNG6vCT4TeS2BV6oAsvLx7MJZ/oDjfL0PtvZ1LPoBqGvPvejwPUTPPevUVeeHmt13PkeWUGMLnwk/g0XGcXGpwuD9SsL/UJGX3H624tnfWl6+H7Xr0ArTHGPRPwKIGNZ8u912otdBM2zpI6IT336/j4h3D2ZmcbkS4L/5d/1kv0MQpURYJgoV+8ew5iiDeh7qhWTHjMi7PPP/g++VGYZFX0Fj6Yj3k1+we6+i52a7TLywaOhQUxIgn1/XM9GrR5AJsdSsVbPufVa7JtysEiqVLctV1JoSHx6OX3OVbX84HIoVaKtY9D1kAuP4PuLdg1aanZbjeX5QNfFUE/4Q6w6y+JfP32fhS6FEqQxZMi/LXUDwtevKyHoKHg7vJsu4v78/mROPr792b1umKvrWbxZbI84oR7wXPixJrfddxHHMXhJUqZ1dLe0QsfShzZEqEq6YtEzZdekxa+cp3R/c1+wYuj3CJFQm7EmYOrb0BSAoTLqIj3YCKbmfOAavc6yqlhHH4mVEnvH/ELFnFYqWm8WPMkH84/G4G7WXnXsymcR+vz+ahFMTlqjwdPRf5rloZaGTe2q+hK/xcDjEZrN51P1piaroW06Q4KHdbrdxe3t7MqhDY+MsBsZx2FrrrLnaT1x742ncrLGykoUOfE21Mf84j3oluAbOQWCJ77AfixqeELv3CHs0nudtUS5uNYk4fqHm/f39UV+I2WzWVcyLxeKoqS/zHlrGlr7A/f19N5ILkzKgr/dqteqmayq5q3iYWfTZu+o1cYV9+G+uSNQ7AKWuvrVl1jTIIsa6xu3YlisjeAIQo7rbh8MhptNpMevPFQnKpyETW3utSNFDD/ePu0Vn03u1TFX0f/rTnz5XOb4KWLC73S5ub2/j1atX8fr161iv10cPF8eRsHAqUBYi9zDjPuX6oGfZZxW9Zrf7rgfi5W1LffVxLhU/fudysfC4+a1UUUQcJzS1Ess8Hs2TsPCzims6ncZyuYwnT57EcrmM+Xx+4kW0TlX0f/zjHz+pi5/FlV/i+Cw6/I131OFFlLCCEafzuONhREzLg21wPLZKfa49W7MsM67n5rH0SrZNJiYuJ3+yGF7Lloley873Oasgtbkus/Q6PoH7ReDV1VdXV/GLX/wifv7zn8eTJ0+6TlIW/Huqov/973//ucrx1YAHGvHmZPLuXeh4qPD+NG6i40/WXKeiV6ut8WtJ9FnMy9uXYnlsz3Pgq6C4nJoRr3kivH3W6w/HBXxva6LPrjEijirV+Xwey+Uyrq6u4vr6OpbLZfzkJz+JX/7yl/Htt9/G1dVVN9WYlqNlzmo34rvvvmv6Lk2n0zg/P48nT57E5eVlLJfLuLi4iPPz8zg/P++siL5QQl+dzDE9P+gsJq1AAISsguBzaR9/PicLVwWvk22qENlKZxWTnoetPX5TuCLjvvelkXJcyWAJ675cLuP6+jqePXsWz549i2+++SaePXsWP/3pT+Pp06cxm81+4BPwoyd1c6uW/s9//vOnKcqPhPl8HhcXF7FareL6+jqurq7i6uqqG7+Nd6NH5DEow4LIrCePvUclgm1YRGrxEKurMEriQRnVU8E+o9HoKBPPeYHa8F8VfhYSAM0HcFhQqjD4fsHKn5+fx9XVVSf2Z8+exfX1dSwWi5P7Zd7j7H0FfikiP9gR70S82+2ORtqx8DSJpy46W97SzDkR+Ww5HKNmTVvYj5e8rYYjOijo7OzspE1et+fKAvcki+dLrQWZ6DWxx9fA9wCZ+cViEefn552Lf3l5GRcXF93bbFt350sVnkVfAdZut9vFer3uLCSEjt9KzWIR+ew1vE02zZZaX90vezdeqQkOSxUf5x/0N61wOFlZmhFIwwlNUJaShjyEVi0+H4srXJRhOp3GfD7v8i0Y4ZhNU2be4845FWD98K606XQa6/U6ZrNZJzwWTQZbeM28oxLBA7zf77uHNjsOl4mPwa/QKlUWfF6NzTmc4CY6TjSyR5LlEWrXmYU96uJrq4aKn70AHeOgMwm3/tz24b73FRDjciIOFQCEqfE3o66uuvVnZ2ddh5XD4dDNxMNxeuba8zrH0VyO2v+Oha/ufUR0x8K1s5VnoeF7nC9z7bPzaC5AeyryrLY6HFkrkCzsyLwe8x679z2oi8m96fBwAm2aYteef+fkHVDXt/TQ8jG4bNoBJQsLMje+lo/gyidrksxaGrJKKhM9ysgdgLAcjUax3+9PxKviL4U1Fnwdi34gKmJ0xOEHXDuhZMKPeB/jarysVlwtNwtTY90seVajFMfrOn9X6iSD8pQ8k75+AaVcAj68r3oQej2mH4t+AJmIOXZV91630yYszoiztS5Z6WxfFVdpvfZdRp94St5CaduSSx5x/AJOiLtUqfSdywzH6c1PhB9O87ViSz+AknXTjjTaDZY7z2TuvbrM2XnYbS654VxGrGdZ+yH0eQQlr0e/w9+cCMW1cxik/fBL3z02fDFlLPqBaCaa+9+DWiIva1vn6bQ5K65t50yWuVYXeAhZmNAXVqgolSyRBxeemxWzRF42z0A2Cm9IeGPqWPQ9qMC4nRpi5YeY6WuyG41GRxNp6oSapcQYd5DhGLlP9CUrrULP+uzjw5NsQNDs6eh18rZcVj6XttOjVURfeoFycR5A70/2fzDHuHNOBXXlIUoeysnNbrxfxHEHFH1A9ZioQGqdc3DcbISfTieFfTKyVgUIN+syrKED/s5cdQ1zskQel4Gtulp5tvS8HpHP+JtVVuYUd87pAW44XmSBYbYs+iy+ZiutGXy2gtqjbGg3XA0FNC+AbXEMoK0Pmm9AWVU8mav/sbrh6odfeqExPkAXaHgGpZmIzCl27ysgETWdTmOxWHTDarHE2Hp2r7HUATcR+TvoPnTAjfaQy0TFCUC+JhYcjscuOo+Uw3nZpeYONbiumuizfENJ9FkCj8uNdYicJy3dbrcnU2S1bO1L127RV8Dwzevr66OhtVdXV53oeWhtlokH3KNPLTcn9WDJWbxsiUHWM06z+2qlWbSaUOPfs7n4cA7uNQfUGg8dWpvNuKMekQLPZDwex2azidVq1U1cWnvvgHlPVfTffffd5yrHV8lkMjkatolJNDD3WjaJhoow4odPosH987F9FiuXQgyUQcvCf/P5OEbGftolF+fIBD9kEg2Nwx87icZmszlqRUGy8HB4N9vR+fm5BV+gKvpf//rXn6scXw2wZniAxuPxURyP4ZtDp8tiYXDcmU2XlTW9Zdn0iHKCLEMFD/b7fVo5ZXE9nzNLxnFSThOBWg7eRl9amQmey8jTZ3NZN5tN3NzcxO3tbSd8TJfVKllCOKJH9L/97W8/SWG+ZmAxtttt99ntdt1vbIX5O21K+9CJMVXAtWSWipBjbIWTb1kyj7cptY1nxyy56VzBcIYff2dZd/Vmsj4J7BVtt9vYbDbx9u3bePXqVczn83j+/Hm8fPkynj9/HtfX10cTarSW0f/Vr36Vfl8V/W9+85tPUpivFX74dQrs1WpVnQK7lIXPLP2nmAJbKyPevyRAdtn1XFkYkmXw2cKXms40fEAiLjsfKPVYHDoFNibKnM/nR5VvS5REX50YMyLaukvE/f193N3dxYsXL+LFixdHL7u4u7vrssUQvXaw4c4zKvrayy70Qa5ZRaCCVxddk4c4Dy8j8nhbXXWtNHjbzNLXrHwt+cfWXa09XyePwUdljG2RaG1V9H/4wx8ePzFmyyCWf/LkSRwOh5jP5/H27dv4/vvvI+LYtdW2c+5Wy6JXoSETnVk4wGPNdd/aQ5wl8FT4fDxsw/F21nymFUEtA68ehq7rubi8mqzE/wTlxfng4nOz3WazOXr7kDnGnXMK4Npns1lcXl5232G+vMzN1ISeDqJh0fHDjQc+s778O5dNRQKyeJ7348y6Cp6PraLkCiGz8llSjs+lXoQm77KJRvge4GUiLHq8kGS1WsV6vY7NZhPr9bpbNzm29AW4/Xw2m8V8Pu+aiWr97bNjYJ3d06zpK8uOYx1JOI7DH1MpZ5Ze19WaZ4JnS58JPovpNctfq1iya4JHxNcN0UPkEDqsvCnjvvcVNCsPwUccz2MPS5Q97IC/U/FG5JNS8D4YpVbarg/9X2bi5zKzx6DXU1vPKO2ffUriV4/p4eGhc+fx4TfVmjK29D1kItPmt9Fo1C3H43FXEWD/iNMBKVlirZSR1t+y33EOrVCySiUTFHsVtePwsSLed8/NmjMhQByL701WvqzSwH3Kcg+acNQOT9m6seirZDE2Z4sx0EOHtqp4Io674apHUDs3H1fPkYmfBQtBQmwoS9atV0MMTTyyW83nx3Y4J86j8TpXInwMlEez8rUEpIYRmgishTHGon8ULFx02tntdul4dli20mAWFb0KrERN9Hoc9FHP9i+55CgXKgwsUXYOY7RprtQMh/fV4zs+Brwj3FeuMLiyyIRrV/7DsOgHoJlnWHjEkVkMnoleM9aZ+1nKXsOasjXG37wdr6uLzta4dq16zaUmu6z5bkglwJUnKgTMLsy5EoRN+n/g68sqP1v2Ohb9QDiOh/DxYUvOmeraMFl+eLP4uJTFLgkev4PMmsLDmEwmvcKoJdiGVAYlobOnoxl/Hk/Plj87Pv4npcFGFn4Zi34AbP3wMCKux0suVRC11yyp4LXpjoWfWfKsy20t869CrGXHS9fMx8ya4zLRs3eUDcrRZByLXqfO0g8632y325OeeqaORV9Bk0H8EPODqb+z65o9kBx3wwrz97rO2WtYbI3VtQ8AlwllLDUnZglLvn4VeOmjlj+z7lkCTkXPM+LgO94Pv0VEV/nW8hzmGIt+ICwgtkh4+DiuRTwP95RFj3XuvVeyvKWmORY8ewtZs1lJoNlxS4LhfVjUtePX4vrM7S9Zex2OzN1v0Xqw2Wy6fhS1fIV5h0X/CPjB5wdQH/b7+/sjK6/j5CFOWHkV4eFwKMaqpQSfjkbT46lo+Rh6bPUydJkdT8OBmvDZ/ddeenxf1dLzZ71eH4leu0Y7pi9j0Q9A3Xx+qHkEG1stZJ/VEvM64n4VjvbdVzFmlUdWwdSug8n6AWT7DRF76T6VRF/yEDihp4N5drtdrFarzkuC6DHSjt+ka06x6AeQCShrsoLl4R56EXEieG6bzkSA2V7U4meuPM/eoxWFVhZ9bn1fTFwSfc0byMTft28pJMD6druNu7u77j7xyDp4B1wBmWMs+h8IHlLulKOCK1l57a+P4+GD3zMxs8h1gkzOI3CM39eZZ2hsr4LWbXSZNe3pdtm5SoN8drtdXFxcxGw2i4g4if+32231f9Y6Fv0j0DZ1kCXHsL3uC/FyzzTNC6jwsT/OoeXILH0WHmiZ+O8h1j4Tbkm8mdtf2qfWepC5/vv9PtbrdTchJh+HK7vNZnPUuce8w6KvUBJLKVmmMS0vWUzc7JaJSD+TyeSoCZBj/yxnoDPyalPeEOHzUgUMoamHUqKUB+Dz15rceD/E95icFJXdbDaL8/PzuLy8jKurq7i5ueksvhN7x1j0j0ATZ9m86ipgFgb2h+CRxCt1duHvMQ02BqvwyLWIY9Fl8f8Q970kuqzyQw5jiIeTufxZWWvi1/vCcxIuFotYLpfxzTffxM9+9rO4ubmJ1WrV5USy3ostY9EPoJYtZyEDjUfxXcR765wl8LKEF++rXgPCBC5bRBxZY4iTKSX0VIy6T1YhcTmxH86plULmYZSSlCWLj/ONRu/ePISJMJ88edK580imYuoy7gtRS1S2gkU/kCyBxn3a+WEqWeuISN3jLLlVynj3wXkAPl4WkpSuk5ela+KMupK1OJTKqufNysLb8jEnk0nM5/Oj7cbjcSyXy7i8vIzFYnESEhmL/lFkSTMsI+oTPigQJx5GzKyrHkDN9dcPXF78jRAgc/FZBFlCrZSzUMGrpddOQuyB8Dn4PKVkYlaRcll5IlJ8FotF9+qxxWIx7B/bGBb9QNTS86y3SLQhG18SDcMVAQaPYDsIjLukcm+06XTa9frTufZ5Wi9txiuVKYuxsc7bandZLJmsJaGUSNTkZtZ7ke8JV6p8jXjn4Hw+7140Op1OB/9vW8OiH0AW03MiqZS1zxJ67AmwYEo9+3jJbdGZ2BHH6htwM9FrOMHXytfM22uZuKkR+2ReUEn4fE+5B2NWVs6NwLXnPg+YvHQ+nx+1irQcw5eu3aLvgW8cxMOCm06nJ+5xRN5jTSsHxPY8t9vDw0NXkcBzwKQd0+m0G+TDVl2tOwuexdFXPr5m/mSVEbv4uBauEGuVTpa8K41TyCrO0WgUs9msuz8RcfQyy1IfBfMOi34g6t6zpUcir9QTjLPs6g4j5ob4R6NRJ3IcG8nC3W53InRYOl3PrG3mLmvrQpZRx++Z98Hei94bFT7IehdyE6haes1voJvzeDw+Co1KZTfHWPQD0AcUVgWfiOimzcLYbt0X60iuReTj9bW5Cw83exkaN2svPIhHBafnzix9TTRs6bW5TvMdLHqURe+FWvmShdakIYYt41XiqEgt9mFY9I8gs2YQPVsozVzjw6PvMtFpfIxtsYw4TXj19crjeBpklh4eR8SpJQbaB14ri1rIgeOwFefyZZUYn5c/CH9ms9lR27yb5YZh0Q9ELT3H9BHRuZxqKXkiDZ38sdZGD2DFIAQ9B8rG5SxlwYFWOJmlL7XrZ/3uuaJRS8+eRymmL40U5PJySwH6ISwWC4v+A7DoH0EprtdEVvbBw43mN7jaPF9cRD52PeI4CdjnvmryMROQnoPDCrXEmgvQDjnqomuLgmbu+dgl955nB9KKEdtjDD2L3sLvx6J/JGqh0EBLMfoAAAQ+SURBVDwENzwTDbv32I9dfZ3DjtH4P8sHZH+jrErWpFi6vsyTKJ2HB7/gukotB0ArRk784Xe9DxERk8nk6L0DnFQ0/Vj0A1AhaLMURK+xNr/qClYeS17nUAAPLsfMmjTL3PMsE18js/J8rVjP3PwsW87t59zcWEusZa695iJw7Ijjlg7usGTBPw6L/hGo8Dmjzt1dWfCZtcfDDYvIwsd5GG3f13ZrnZEX60rJW1DRs3Xu6+DCrjgLHcdl1z7zKnAPONdRSuhFxNE8BBb6h2HRD4Rdek7iaVIOFQDa2NGphrvT6rzuvOQ2eTzcnADkhBaLkr/TpsAh14alJgAzwWfhC7exq9fDnsBQoWpyEqBCQEecvhDCnGLR95DF8OjyyQk5tcDac02ndtZutfwCDa4UdHJIWHZtxtJZZSPKlj8LA7LkHVtpFZQKHK59lrGH2LUs6jVxcjSrOLDtbDaLy8vLWC6XXZ/70otFzCkW/QDYwmNAB6zyfD4/cb+1PTvrS1+a310rAN62VJFkws/6APAyy8CrhVexlxKULFhO6mW5gFLikCsMXlfhs+ifPn0aV1dXcX5+3o2bt+j7seh74IcNQzeRhZ/P5ycj5LBU8WunlswDUNefvy+JvCR6TfzxUgUf8eGi52RcycrzPdEmv6ziyCoPrmTQE+/Jkyfx9OnTWC6XXV98u/r9WPQV4JbigYToz87OYjqdVqdbzjLtHAZwt9KSkJHNV4+h9NFz9Ln3IHPjS812WaWg4s+El5VHKxG17llFBNHP5/O4uLiI5XLZzYyrnYBMjkXfA8fz+BtxfZ/geV0f+Ky5LcvIZ2LO1vvE3pdAy8SdLXU9c7+zfbL7wPdX9y/lFVj4yK3MZrNubgNu2zc5Fv0A9OGDq1/q4KKUsulDKwT9PtsuO052zr7rzNZrf/d5Bn33gPetHUd/195/du2HY9H3oFYND9wQsUcMmxpa/+6rJIauDznnEIHUtumrHPrKUdu/7zfNLdjKD8OiH4Bam6Eu81AeK9Qfut3H4FNb077jlzwA089Zz4PiLk8FPqfA+viSZfnSQvvS5//KSW+ORW/M3y+p6B0EGdMYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjWHRG9MYFr0xjTHp+f3ss5TCGPPZsKU3pjEsemMaw6I3pjEsemMaw6I3pjEsemMa4/8DeIg6grIyJbsAAAAASUVORK5CYII=\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 12\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 13\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 14\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "current beta: 16\n",
- "Current iteration: 15\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 16\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 17\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 18\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 19\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 20\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 21\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 22\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 23\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 24\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 25\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 26\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "current beta: 32\n",
- "Current iteration: 27\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 28\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 29\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2duZIj2dGlHYlEYkdiycyu6u5i9cLNKAw1qr/wK7RRR+ELjI02yhjfYdR5hRFHG5E0o/RLNKMwrdC6yaKxyK7uWrJywb7lMkLZuXnC80YAkbWy43xmMGQBgUAAhXPdr7tfv6Xr62sTQhSHnfd9AUKId4tEL0TBkOiFKBgSvRAFQ6IXomDsbnheoX0h/nUpxR6UpReiYEj0QhQMiV6IgiHRC1EwJHohCoZEL0TBkOiFKBgSvRAFQ6IXomBI9EIUDIleiIIh0QtRMCR6IQqGRC9EwZDohSgYEr0QBUOiF6JgSPRCFAyJXoiCIdEL8Qb5v//vO/vP/+s/7L/+7z/Z6XT1vi8nyqbGmEKILTkeL+1//J+v7OLq2v78dGSD5tf2P//Lf3rfl3ULWXoh3hCL9aVdXN00kB4vLt7j1aQj0QvxhnjQb9h/+7cvrFQyu9ep2X//95+870uKUtqwa6363guRk9XFle3tfhD2NNr3XqIX4oeLNrsQQkj0QhQOiV6IgiHRC1EwJHohCoZEL0TBkOiFKBgSvRAFQ6IXomBI9EIUDIleiIIh0QtRMCR6IQqGRC9EwZDohSgYEr0QBUOiF6JgSPRCFAyJXoiCIdELUTAkeiEKhkQvRMGQ6IUoGBK9EAVDoheiYEj0QhQMiV6IgiHRC1Ewdt/3BYjNbNhkNJVSKbp/4Rt/n20olUrR8+e9RvH6aNdaIX64aNdaIYTc+/eC967w76z7bZ9LO24T7Gbj75jrnXZc1ms8fE3+dbFzpr23pgZ3Q6J/TTaJKiZwvl1dXdnV1ZVdXl7a5eWlXVxc2MXFha3X68S9v+FYfs319bVdXl7a1dXVrfdJux4vslKpZDs7O4m/+Tj/XLlctt3d3XCPGx/nPytfQ7lcTry2UqmE8+GGc+3s7NjOzk54Hv+W+PMh0d8RLyzgrS6Owz1E6QW+Wq1ssViE23w+Dzd+fLFY2Gq1suVyGe7X63U4B87L78vXE4NFDBFBcDwI+PtKpWKVSsX29vasWq1avV63arVqe3t7QcR4bwxqPChBwHt7e1ar1axer1u9XrdarRbOg0EAAwyObTQa4f1wnWI7JPo74EWbZrkh6PV6HcS5XC7DLSby2Wxm8/ncptNpeHyxWITjIXbclsvlLY+AryFtKsGwtfcWFILyN1hbCL9arSbEGhM9rgnXBwvPom80GuFvPheOrdVq1ul07KOPPrJPPvnEBoOB1Wo1iT4HEn1OIOz1eh1EyBbMW+7ZbGbT6dSm06lNJhMbj8c2mUzC3/w8BgAMEKvVytbrdcKVx99eSDGvAtebB+/i47G0ex4kKpXKLbecvzfveeB1GDzgMUDssPQ41+7urlWrVTs4OLCf//znVi6XrdVqWbVafb3/1IIh0eeERQ/LDOGz2KfTqY3HYxuNRjYcDm04HNr5+bmNRiMbjUbhudlsZrPZLGHF2UV/H5+PxXlXfEwg6zg/V2e33k8z9vb27ODgwCqVin322We2Wq3s6upKc/scSPR3ABYd4p7P58HVns/nQdDn5+d2dnZmp6endn5+buPxOFh3CB1zdBb72yySeVfgM2DwiInfBw/5xtF5eDKlUsmurq7C94fv7Ifwfb1LJPo7cH19bRcXF7ZcLm02m9lkMglz8slkYsPh0M7Ozuzk5CQIfjQahQGC3Xe44uVy2cxeiSOWeotZ3rQf+5sSwbaW00f8cePIuz+fjw3Ana9WqyFOgO/EzMLUZmdnxxqNhu3t7SmAd0ck+pxAkJeXl7ZarWw2m4V5Oiw5BH92dmZnZ2c2HA4TLvw2ATf/Y2YB8LUwGBj4ta8zAMQE5S02CxrPcUrNp+/YmnM0ngN5GABwvouLC1utVuE763a71u/3rV6vS/h3QKK/A9fX12FOPx6PE3N179LDwsONX6/Xiby8T/FlBeBixSr8mM+pxwpp0tKL/jj/2qwsAFt2zrVz2s0PAuVyOUT86/W6tVota7VaIW1XqVTC+yJzsV6vzcys3W7bxx9/bJ1OxyqViubzOZHo78DV1ZWtViubTCZ2dnZmL1++DBb9/Pw83MbjcULwPmUVq6RLq2zzAudiGfybLaq3tlwo46/j8vIynNfPq3HP2YJYkBEpOoi42Wxas9kMeXcfnOPcPo7F8UjTYQ7PmRIzs0ajYffv37f9/f0wOIjtkehzgh//crm00WhkL1++tOfPn9vp6WmI0nPAzkfkY0L3bEqNQdTsJuN5zIeRO+f5MYsX0xN/XRxFx3uYWRAfXG14LAiwIeXWarWs3W5bp9OxTqcTxAzhY3BAag6WHXn5Wq2WeF/ETxDsvL6+tr29Pet0OtZut8PgILZHos8Bz+fn87mdnZ3Z8+fP7dmzZ8GVn0wmIe+OVB5y7FlCN7tdw85Ch1g4fw3h8G1vby8ICFazWq0GIUFESDFygRGX1kL0uB4cx8VFy+UyfB7MzVutVhA8RI/rgaXHFADXhs+EQQGfGd85f4co6kFVHgqAxPboG8sJRDObzYJr//Lly2DhuYIOwvJFKYwXOpfAIi8NgSDQxe5ws9kMjzUajVCeymWq7C7zZ/ADkpklvAf8DeGhohCVgghKmlmw3s1m01qtljUaDWu1WrcsvB9UcOOiHj+VwTSEA5UYADWfz49EnxMv+uPjYzs5OQnls7CAbEFjFXKx+Tn/8GH5eI4M67m/vx/+brfbQWQQPubRtVrtlnuPa2Ah8fX5GnvAngGEj4g6qus4Eh+bx8dq+NPy8z4D4b0kDB4SfH4k+hxwNd5sNguR+vF4HMTu58m8MMfDAmDLB+sMq7m/v2+9Xs96vZ71+33r9XrW7XYTc2ZYddzYlY6tRvOr8Fj03vvgaQ2vKWAvIRa992LPuvmCHLw3rpWv2wcxY/9PIr3OQqLPSSw/P5vNQrCJU3GbFrfEClTYsu/v71u327XBYGCDwcAODg6C6Pf390OKCwtdYmLzYspK3flrZPyiolgWIquyLhacjH0XsfeODQRZ1yrrn41EnwP84FerVVgJN5lMbLlcJha7xKrn/A+Xo/AITNVqNWs2m9Zut63b7Vqv17PDw0M7ODgIwoeFZ8HDhec5M7+Hf/9tSCvw8UuG/eCWJuA0ccYGgTzXG6sxENlI9DmBpfcr4pBTjll4/2NmCw93vl6vW7vdDq48LDtucOnb7XZqRDytdn2T8GNxhtj1w7Xme369P/6uIswjeJ5+cE4fdRFFHgju378ffVyiz0Esio15LZfJsjBi7igH7CD4TqeTsO6w8HDnEbTjqLxfiRabO+M9s9hG7P64LNFnfX+xx+4iTD/d4DjLs2fP7Pj42JbLZcLbKdpc/ze/+U30cYk+J7D0HKFn0XPU268w4zkvovOIuvd6PTs4OAhih+ARrefqtm3Enib4uwjMu/qxc25a/BMrM95mTu//zedBKfRoNLLT01M7OTmxp0+f2uPHj+3777+32WyWSDsWDYn+DQGrgltsPguRc0oJjyPCjeqzdrsd3Hm28BysQzcZ7iKTFvTyeJFuKg56E8RiABwH4JqFWPTeryHwoBR4NpvZ06dP7S9/+Yt9/fXX9s9//tOePn1qx8fHNhwOQw3BpmkNSAtgxgYePj7NW/kQzh9Dos8BR659hB5fOFt8n5vmKD0KaBCd94LvdDqh2IYFn1WM4ufaMbc264eRdVxeFz4t2s+98nyaMBbx91MICH4+n9vJyYl9/fXX9sc//tH+9Kc/2d///nc7Ozuz1WoVzltEC78JiT4nXvRspSB4XujCNfHIYSMth5Rcv9+3o6MjGwwGwaXnxSex4hqIicW5s7OTeCzLioC0qHra/Dv275jQOZPh+wVyGzBukuktvj8PC/7ly5f2j3/8w/785z/bV199Zd98840Nh8PM6xWvkOjvQMy68xybu8RyOo1r4xuNhnU6nVBwMxgMgoX3q82431wsIp2WMuNrTCPP/Dz2fuzt+LQli53Ld7l6ETERf+04j+8NuF6vbTwe23fffWd//etf7dGjR/bs2TMbjUaZ1yxukOjvgE+7XVxcBFGzJUfuHY+jWg7PI0jX7XZv5d/9/N3sZnoBy8hdZfHYNsU4/Dn832m58iwr7+frXuxobzUej204HIYegWgsAqsfmw5whSPup9OpHR8f27fffmsvXrywxWIRrosX6og4En1O4LbDkvviGuTbkU/HnBxRd0TtYe2xKg3Hc826ry3nIBhcYWQOOJIfC4Rl5dR9FN2/Nu0caW481+dD7Ofn53Z6ehpu6Dfglx/7TT84Q8Lr+bnPIPM+mon+qyHR5wBC81bbzKzVaoVFMb423ltu3+udBwffaQaw9YPYfM7fp/DMkgL1C39iab400WdF5L1lR4NQ9AuE4I+Pj+309DQ0HMGqRN6ww7f75nLfrHUMYnsk+pxwBR0stZkFFx3pt36/b91uN1hvv/CFe71jCgAPgpeYxgJZEIKZJdKAaaJHUVFsW6lYyizLQ2DBs1XmKsXpdBpaf6NPIHoGwsJPJpNERaNfpJTWO1C8PhJ9DjCHR7MIzMd3dnYSZbNHR0chCg8rzxV7HPWH0HFLWxEHEcQaX/j95Pj1Pk0WS5f5yDm/r5+z+7Sld+XR79+3DsNc3ncE5kHMvxeuD9ci3gwSfQ4gMATh+v2+jcdj293dDdV0h4eHdnR0ZN1uN+y+wk0eYyvT/BJUhoUAsXPKyxf9sOj969iF5lZX26TKfE893twDEXne4AMtw7CbD0fssQ6fOwK/zq48Ih8SfU5g6ff39+3o6MjW67Xt7u7aYDCwo6MjOzw8tH6/H+rkuX+7d4lj1jY2F/eWHv3iuIFFmuj5NX7u7K0ppwV9YM5H0HEepOF46y4Wud9/L2uuzp9bvD0k+hzA0lerVet0OnZ0dGTX19e2u7sb5vJY/tpoNBK96cySG1+Wy+Wo8Hygil/jt86CcNjFZ9HDykPwvtEHW3uAgYJ7zeOet8+Gt4GgHUfTuYMQrtkXNXGKT4J/t0j0OYBF3tvbs3a7bYeHh8Etxyo5LI5BJN4H5LwLj8IUX2GXFcTj2n8E9Fj0PIBwM0t2r7mbLY7F+3HlHI7HikJfVceWnC162oYePhAIJPh3h0SfE8zBG42G9Xq9YMXR2so3o2RXm4Nr7M5DuHzPoufgHQsea8bNLOTssfUTzsPzbt8DwKfBYP3Zm8DxXtAQPQ8APBBl9fd/12k31eAnkehzAlcaK+TMXv2YkbPnfDyvhuNSVT935zp+s+QWVjyHjgmNg3nsTeC9OAbAbj5nANij4Lm6v+F1mB7g/XlQiqXbvOjTvte3JUwJPkmm6PVlvcIH15Bqq9VqwaKlNaFMK2WN5d0h/IuLi0QgDi46u9AckNsket6kwle6sTX2DUJwg5fAA44P7MWsuy/owffBKUv2apSeezfI0ufEV8Oh9p5rvvHDx4+aX+dLTdkljgX1fC6c59A8p08TvRd4WvTcL26Jdb3NEnwsMMekrfzDuoGs8tltSoLF9mSKftMKraLhI+wscETkce/TYAiqcTSdBRyrPoul3HhPe1+gc319HaYVZrdFzx5FWmmrn3fHagu2nZenLdvlz8e1AngsdnysfiGtYm9nZydsgslrEcQrZOm3wOfJ2eWNNcbEsfjRmd0IkOfLfjccb+18+owDahyI47r73d3dREaA595p7re3tFyw45tt+uc56+BXuLEXwuf2x2wzeMSqBTn9h7+r1Wqojux0Olar1cKAKK/gFZmif/To0bu6jg8Cv4TVzBJzdQgXy0Unk4nN5/Mgel5Eg0o8tro8X+biFbb0sHw8HUhrQOFjDMj9x4pz0txxPgdey1tP8RQG6wUAt6PCgIKBAF5H1qo9fNcxV90vAvJtvfF9V6vVsFipUqlYo9EIlZG9Xk+ij5Ap+j/84Q9v1cX387v3dX4/l4a4d3Z2EnuywWJdXl7eioSXSqWwlh4da7HXGs6JNNh8Pg+3WM6cryu21BSPmd106YEgcd0YpLy153m3F4Iv6a1UKrdcaLwflvRynADXnCbetO4//lr4NZz25MGoXq9bt9u1e/fu2YMHD+zevXuhpyCWNtfr9cTGneIVmaL/3e9+966u44MBFnK9XtvOzk7YaSbWugo/WggNEX0WPSw9BopYCoyLVNJcWC7dZXGwRea19bFgIM/rYxF2iGN3dzfh7rP156wBTxnwPv41vm0YR+19Lb8fLHyPAPxdq9Ws1+vZgwcP7Mc//rH95Cc/sYcPH1qv17NGoxG+97TS5qJTyvoiPv3008J9S+wWm1ki/w73kde+83yVm2n45/16c79ENtbK2gfRvBDTdn/Fc2bJbIJvRuHPB/h4X4bLy2B9nh/fH3se3DYsViLsMwSx8/D3Ui6Xrdls2scff2w/+9nP7Kc//an96Ec/sqOjI2s2mwraJYm6uZmiL5VKhRN9FpVKJTS9gPuIFXRcosu98WA9uXyWBYfXxfL8PoLOlpJf42++AYf3GGJRb+9+43WxVF9WXICbhPAutmkxDgyEKB6KfTe4FrxHp9Oxhw8f2i9+8Qv78ssv7eDgIOxVL9EniIpe0fsc8I90Pp+H4JGfg7KAzZLRf567Q7zcKRdiZjitFXuNFz2uI22q4C0zH8cWNpZeS5uDs3XnPoC4QfQ+m+EXA/HSX1wj/o1AY6vVCo1KMPXS3P02afEsif4OXF5e2nw+v5WTh7X0uWGf9+Zj2Q3G37F19TyooB4A6TkE3HgFH+IMWcLFeSHY6+vrWx4EPl9sgw0eiPy+fOgsFOvbb3azehAW3hcd+S64GBDMbtY5cEeiTVkCcYOKc3ICi8lVd/yDS2uE4XPwPuoOi71arRJW2levQexpBTQQIA88fr4eA8LG+3ATT95Gi6cf/Bl83z+I3rv2sWXGvC4Af3P5MBcyXV5eJrb38h6J2Ixq7+9ALLcMq4daeH887jktCMvN7j+sd8yiwjOI5ZxxDkTeOQiG9/LXgnPjnl1+7MTDQUm2/l7wvFUX33ijTR4Q+TPzgiIWPe7n87nt7e0F74o9I55aie2Qe/8awOr7kts00fPf8ApQ4OLPCavL5/bRdtQH+PPwwOBd89gAFJt6IF4AIWO5sN88E4KHZ8BdgmNegn9PuPAc6fcDAHsIq9UqOoiI7ZHoXwNvbb0o+d+xIhhYZASoIGIcz4JHhRvm6ngN8vOw1F4EOJYj4bhWnJcHA7wG0wSIEWLm4KFPF7LoeWoQi3PwNXBKLlbyiywCUoRp/QTFdkj0bxDvvvPj/jhfsopjYtMDrn7zqTw/r/fTDBa1n8/zNcRq730VHOb67ObH0oW+FXdarIMHPvZOsJ6gUqkEkfN0QoJ/PZTU/EDxc3oh3hSy9G8QFie79959ZsvnA1GxRSpclONf460yR9b5vGnufew59h64KAcFRrHjcJ2YbrB3whadiZXi+vfyVYRc4y/uhkT/GsTEyf/mUtjYa33qy+fF/bm56Cbm8voa9djKNFwLn99Hv30ZLtYhXF9fh5qA2Co8Lv4B+HcskMeCj/X/S0vl4Rol/Lsh0b8GbCGzUkexiDkX28TmxVkpO67cQxSb59g8cKQtOvGpRn8MrxUws2B5N6Xslsul1et1W6/XuVJ2nKaLpeywOhElwLiX8POj4pyccEmst14+YMVBNx/Z5yAZF+dARLEBhC0rp8M4h36X4hwfXedqObObFYK+OIeDfLHiHNz4Wln0vB6By3Ex2HDXIF+c43fq4QFVZKPinDvAFveuZbh+0QyX4cL1Ztgz4Cg60mixwpk8Zbh+YFiv18Hic4wAr+FritXdowQX1XOxjT/8ykPfZhuiZquP16JRp6x9fuTe34FyuZwoBWX3GKL1Pe/xI09blcZC9m4wYIH6BTf+fWMLZjDn9kFGFjFfJxf8ZC244c+yacENBrSsNmDededAXqn0qltwt9sNG3DgWB8wLTppno9EnwNeT8971bHoUaACdxc/RN/9hvvH8WDhq+e8uGJutc+d87SDo/AcWfc/CO92c7Sco+tZjTjgEeCauBQ3trSWF9LwXnfeC8F14ftaLpfWbDbt9PTUer1e+D/Q0trtyBT9p59++q6u44OCy2u5pNRbMDTJgJXhea1vosEttnz3GTOLuuR+Mc02TTQ4ug9YuBhQYufz78dNNHgBDPfbS5su8Dwf93jMLLngJq2JBguZ4yiz2czK5XJi0N3ZebXkVmwmU/S/+tWv3tV1fBCwQCGQVqsV9pmHBYc1xuCAHyqsG7u0PIflHnloiBnree+tLgskZll9jIFde/YyYtbdu8N4P8yr/Vw7rV1WbBDhuAWnD3FdHMHP0y5rNBolAn74TgeDQRiMVZuf3CmJyRT9r3/967dyMR8yPK8tlUqhMWa1Wk3MRzn4xI0xfdQaP1hYeggeO7zyvnIsZhaF35WGo9YsjFidO3sTZpawzL5UGI/jfXhJK/f045ZZLFqz29kBXzzkpy5pTTl8mtJPa8bjsQ2HQzs5ObHvvvvO7t27Z51OJwzS7XY7xFzgxRSNX/7yl9HHM9tl/e1vfyvcN8WBNzNLuMwQxHK5DHuxv24LbFhRWHGG3WzOXfPiE7NkKs/P52NpMY4rxKrveGMNv/FlTPQ89zdL74gbg4+NvYbF7wcPBA0RVN3b27NGo2GDwSB0x63X66nLkX/o/Pa3v83fI8/MivUtpcBuKDarmEwmNhqNbDqdhig3ryePdYrZtNlFmug50MW5bDzvq+MgCt+dJpYS4892fX19a8datOr2e9uzlfcNMmOLe9ICbNuk3Hz9A/5P+Pr5/6DX69nh4WHhN7v4/e9/rx55d8XPL80sWHz86Hd2doKlx9JSPh4/Uk6pQaTVavWWpedgG+8FD2se29aKRW92e8tr7onPbjZExXXtPoDI4vTP4zEePDw8xQAxK+9f62sD+LXsXYDFYmHPnz+38/PzEFPhFKVQcc5W+Jy5dz05VeWXnfJrfVQe50O3HD6GpxN7e3u2Wq1uLVWFtfc1AjHRo3ceV9Ph/Xkdfuyzxda4Z7nsIPb74cf4O8haisz/B1nHgKurq+ChiNvI0ueELSTnrf2KNRaX2c0PnNNZsFRpxTKwnljwwufBAMENMnz7a5zz6uoq4WFwjz3+XDi/rwFADABbWq1Wq4QI4Vpz4Y8vlvFi58+X9jwjA/TmUO19DvB9wFVGQA4CqlQqUVc45qKyUM1u0ive9eYBxS9B5eOzRM8eg3fB2VXPalCBnDkGBN/Bh/e1w2DEwueIPd7XC17CfjfI0ucEQlwsFiFtZPaqLTOX0vplrVnpKV7m6lfFecHD4nJRD45Lc+/xNw9IsOR+To5uu7wmAL3rOE+PmILP3/OUA99V7Dvc5jHxdpDocwCxXlxc2Gw2s7OzMzs5ObFyuRzSdr44hgt5OLUVWx3GBShsIc1uXHSIkPPibOl9HIEHAbObQSa2WIVTfAhUprWm5hQgCo18dgDeAD63+DCQ6HOCaPp4PLbj42N7/vy5lctlWy6XQaQscsylecDwNewcB4itjvOVbRA9BOUDiZyy4wAejuFFLcB7BNzUgnP7eC2nAReLhU2n0xA8Q7qPBwiu++fpBAaDWHWgeDtI9DmAJVwulzYcDu358+f25MkTq1QqIX/Nx/mda7kAhlN07M77yLgP/CFuYGbhHGzlY8U56ExbrVaj+9tzwNHsRvg8OPl7nAdbfE0mE5vNZjaZTGwymYRBIG3nGrxPWuBPvD0k+pwggDcajez4+NiePXuWyJvzIhWU77K194E+BMhiK9ZwzyWo6BCLFJ2ZZYqey3i5bp6FxnEEtvicC/eVd75UlwU/HA5D8RIe8xWIpVIpsXRXwn93SPQ5gHs+n89tNBrZ6empHR8fh+g1C2s+n1un00nsl87nMbNE+gwueqw4hd17WPlyuXzLtfcVeWZJd90vkPHn97l3Djr6ijtMD7iCbzqd2mw2s9FoZMPh0IbDoZ2dndn5+bkNh0Mbj8ehdBlVhX4tAb+H/+7Fm0GizwFH7mHRzs/PzSy5CysE0O12rdls3lqdx1YbVXxc5MMFN4Bfw3l934jDp93SqutAzNKnFcLEBgCu7Yc7P51ObTwe2/n5uZ2fn9vp6amdnp6GAQDly/P5PLGOnpfqZlX3iddDos8JL7iBS2tmwV1l0Q+Hw7C7Kvex491gGo1GIpiHLIBZsrsupgcQN+byXNIbE71ZvE0WiFXgpdVnxMTPc3/+/PhuRqORnZ+f28nJib18+TKIH1OA6XR6ayEPMgu+YYefAom7IdHnAD9yroVfLBbBPef2TxA979yKBpFYmNNsNhMBwJjoeG7P6Td2y73gYwU2aQUw/j1jhUT+HPjbexGYPniXv9/vW7/ft4ODAzs5OQkWfzwe22w2Syzk4WChHwR4IEDwcLFYvNb/aRGR6HPiXVrOR2Ouu16vbTab2Xg8TrSBhvDROLLT6YRFO2a3l6Aiz+7r4HmKwKKPzc3ZzfdsEnpWvXua1WfLj+2qm82mdTod6/V6dnBwYKPRKAgeqT248r6egef9+K6n06m9ePHCnjx5Ys+fP08In8uVRRyJ/g7wD537sF9fX4fBAPN+7vvOLbeazWawcr4RpBcUCzpN7OzWx0SfRsyr2Obz++8CfyP/zjvZ4vO2223r9XpB7NzYEu/P1+ADkBhQx+OxPXnyxPr9vj169MiePn1qw+EwUdor0pHo74C3nhyE4lTW7u6uzefzUCLLDSPr9fot1zYWKKtWq4n3zHLp84o+7blNc3r+/Jxi4xQgl/p68bOX5AXP1YxmdisACdf+iy++sIcPH9r9+/ftq6++sm+++SYEVUU2En1OWHC+ph55Z7TP8vX3HMSr1+uhfJU70PgfeKyAhl19L3h/jGdbax5z7bMGidgAwOLnSsJNacNYIBL38KY+/fRTe/DggR0eHlq1WrVSqWSPHz+2s7OzsCuPcv5xJPoccI07z7XNbn6Y/EPGslf8G8LnWnXf+y4mCsvRTEMAAAijSURBVH7/WC6fn+f38o9v8/k2PbdJRP592fqjLDn2ubzgs64FA2Kr1QpTpqOjI/v222/t2bNn9uLFCzs/Pw+D77bXXhQk+pxA9Fj44i0Sr2Hn15jdDAQQgA9QceSa57Exi5glfmZTcO5tkSZ+WH72HNJShmkZBHwPjUbDPvnkE2u32/b555/bycmJPX361B4/fmzff/+9zWaz8H1J8DdI9Dkpl8uJDS1g9RmfD+cVZmytWeBcMsu17T7I511hFkgsHefd8jw//jQLGQs4bnuutClHnjgEPhdSoM1m0w4ODmw+n9tnn31mn3/+ub18+dIWi0Vqf4AiI9HnAILlKLzvg292ew7qz4HKPu5gg8c4Sh2rl/dr8vnm21/Hrt/D15eVoot9rqzcf+x8WTGGPBkHfwyKlqrVahgAVqtVop+AuEGizwkCUuh6W6vVQvGIWbIvHfB/w1pzmync87JWpLWwUs2vVru4uAi93bH6zveJjwXZ0kgTb2wwizUEwWtiAs4TVMwKGsbAZ8X/TaPR2Pq1RUSizwF+XIi+N5vNUFUHoWL+6JtGeEFhcECqb7FYJKrO/Fr12WwW7mezWdjYARV/WD7rV9ttmgZkFe3462ePxJfG8vezTQqRB6NY0HHbKYMseX4k+pzAvccmlq1WK5Scmt2O4sd+vF50fokp97mfz+c2nU5tOp3aaDSys7MzGwwGtr+/nxA+bwntB4BYaW5semCW3umWpx9+Tzte7ed3040VDcVuXEnnB4jYIMVz+03TkqKSNiBK9DnAjxMuZLfbtV6vF8pw8UNEFx1uFwX8DxiNJHiFGc/tsXgFC1c6nY4dHx9bu922/f19a7Va1mq1gtfht4eG+H0Pfr8+nlfteSuN47mTDm/pxa28sIgIxTi8/bbPxcdusUEnNo3AZ4nFL2T9s5Hoc4Jce6PRCDupQNy+mqxUKgWXP6s8FJbSu828DdZkMrHxeBy2ysYeexA6LD7f2PL7tl0+VQhB+Yo/Djz6DSMherNXvfuxpoAHIUw9sCSYlwDH9grw9Q/4fngqgfNgK3CJPB8SfU5Y9P1+346OjkIk3u8Tv1wuw7zdLNvt5OcgRPSQW61Wtru7Gxbx8Go9iJr/5iCj32LLC54zA2aWECY32eTyYg4qYsBCcLPZbIapB6Y/vOMvgo648XX7TsKArxdZCrzXNsU8IolEnwP8uMrlstXrdet2u3Z4eBhEzz9eH0hjF94snuOGFYZ15fkrqssWi0W4BoiDN7JgQeFaYGVRH+DTgr7c13fhMUs2CeFW12x5kTJrtVq3Yg4QNy8+wqCE6Qg8E6598O+L/Hyn0wmDja+TENlI9DmB4Gq1mnU6HTs4OAg/RP7xwuJPp9MgeFhudlXT8vt8b3YzBViv14lridXjs3B5BR6fi6+DRY+BhNN+eA0H82J9/uDi12q1WwFGeBsQKe/wi+W3mKpgW/BSqRSmOUhbmpk1Gg37+OOPg7WHmy+2Q6K/A0jbtVot6/V6ZmYJ0fMPHGJAvT0sJFfiZQmfSfthpxXBbBJC7L3yvhbHYqBYLBZWqVRsOBwmNvKEt8HTB+4tAA+BBwl8L8iOrFYrMzPrdDp2cXFh/X7fBoOBovU5kehzgh/47u6u1et1a7fboSgGc1RYM29t8TdcdQT4Yr3ftylx9cfEgoWvI4iY8H20nAcJ7pKLAYAbdfqoPVc3spcE0fvGJBB9t9u1RqNhX3zxRRhEVW67PRL9HYBVQ3qKy0C5Qo6DbMPh0KbTaWIjCA6EsfhjKao8gn6bli+2Uw1PA3Z2dkKsADvp8BSEX8PTENQW+IETn4e/n+Vyaffu3bPpdKrmmXdAor8D+LGiSIer9GCtkDZDx5h2u22j0chGo1GoqsMA4HPzH8qPeNvrgCg9HFVPy6dzCS0PALxFFxfh4PnVahVd2yA2I9HfAcxLa7VaKEyp1+shqt1ut0ML7MFgEFploxkkxI+NILAdFHfR8dtO/avhK+2y4GIhTHk4SMhBRQy0vJ+A3Pp8SPQ54aq8er0e0neIaMeKWFBGiwIbiB0toNEDHu2zYhtB4oZ5s+9Ay4tgYv328nw+zgLgsbR7jlVwqi8mRt/CGq+HmLnewLv5XAswGAzsyy+/tH6/H+b+Ev72SPQ5YdGXSqWw5zt+zL4jLAehsIgGN15FB2sP8WOw4GP49fibd5DFgMNz4JgLHIvWm93eNTet2SYHJnkuzkG4tDk5p/u4sg5TIr7n6D+nBDudjn300Ud279690CpLbI9Efwc4aOVFxRaWBwI/IPDiFb/tMw8CsP5w/73o/RbSvjGHDwqmpQJ9jj+rJp7z8igCQhDTFyjhPf3mFXhfFr0v0uEqPVwH3ofToxJ9Pkob3D9FSTawyX2OWVlOsfFSVe/K82o2lMtmtdZKW/K6ydVPW/UWC8TFUm++ft7vp8ef1XcV4mkB1zXElgezh5G1sYcIRL8Yif49kOVue0/BP5Z2n3V82vunFfXw3zFBpR0Xezztc8bOmRY7yHNtIoFEL0TBiIp+cz5FCPGDQoG8fwHuUoByF9f3TRe6+Gvw55d7/n6Qey/EDxe590IIiV6IwiHRC1EwJHohCoZEL0TBkOiFKBgSvRAFQ6IXomBI9EIUDIleiIIh0QtRMCR6IQqGRC9EwZDohSgYEr0QBUOiF6JgSPRCFAyJXoiCIdELUTAkeiEKhkQvRMGQ6IUoGBK9EAVDoheiYEj0QhQMiV6IgiHRC1EwJHohCoZEL0TBkOiFKBgSvRAFQ6IXomBI9EIUDIleiIIh0QtRMCR6IQqGRC9EwZDohSgYEr0QBUOiF6JgSPRCFAyJXoiCIdELUTAkeiEKhkQvRMGQ6IUoGBK9EAVDoheiYEj0QhQMiV6IgiHRC1EwJHohCoZEL0TB2N3wfOmdXIUQ4p0hSy9EwZDohSgYEr0QBUOiF6JgSPRCFAyJXoiC8f8Bf9DJgMO2VzwAAAAASUVORK5CYII=\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 30\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 31\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 32\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 33\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 34\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 35\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 36\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 37\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 38\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "current beta: 64\n",
- "Current iteration: 39\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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6TRWV1exsbGBTCajwh+Pqxukon9AplkU7K459ngsilzGAdhMU4qfR2XstiN77tmClx6BHIUtRU/B2plyMpVWJgAxlmHn/fOs3W5nzfdk+q6Mh/D0QxYO8X25ENgTehVXVPSLjOyeI915txZacpGQj5cdZt2SgaY5MrStulvvff5MuvQyrVZG33nsZg+sYMMPOX5bCtqtWu8pqvY+cFT0HxqTPIVxj53m9STziui26rhZTwseqw+Ax1DRK4rHcBW9RkAUxWPokd2C8VDn6bL/+6Q+8IvkWi/StXxMqHuvKB8v6t4riqKiVxTPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPoaJXFI+holcUj6GiVxSPEbjl332PchWKojwaaukVxWOo6BXFY6joFcVjqOgVxWOo6BXFY6joFcVj/BcDKQDdDvHfEwAAAABJRU5ErkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 40\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 41\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 42\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 43\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO2dSW+b2bnn/5zneRBFTZblGlBJdZAEqCCrC+Rugt72Jl+g0bve3C9xt/cr9LJ3vUwB2aR3lS4kKSCdLpcNy7JmShRHkaI49ML4Hz88eikOmmi/zw8gKEscXsn8n/OcZ/SMRiMoiuIevE99AYqiPC4qekVxGSp6RXEZKnpFcRkqekVxGf4pP1fXvqJ8vHicvqk7vaK4DBW9orgMFb2iuAwVvaK4DBW9orgMFb2iuAwVvaK4DBW9orgMFb2iuAwVvaK4DBW9orgMFb2iuAwVvaK4DBW9orgMFb2iuAwVvaK4DBW9orgMFb2iuAwVvaK4DBW9otwj/+tvB/jP//G/8V//x/9Btd176stxZFpjTEVRZqTSvMK//c+/oz8c4f8eNZCL/T/8+3/5T099WTfQnV5R7onu9QD94YcG0s1u/wmvZjIqekW5JzayUfy3f3kOjwcoJcP47//62VNfkiOeKVNrte+9osxJrz9E0L8U+6lj33sVvaJ8uuiwC0VRVPSK4jpU9IriMlT0iuIyVPSK4jJU9IriMlT0iuIyVPSK4jJU9IriMlT0iuIyVPSK4jJU9IriMlT0iuIyVPSK4jJU9IriMlT0iuIyVPSK4jJU9IriMlT0iuIyVPSK4jJU9IriMlT0iuIyVPSK4jJU9IriMlT0iuIyVPSK4jJU9IriMlT0iuIy/E99Aco4UwaKPspreTyOcw8fnWW5jk8NnVqrKJ8uOrVWURQ175ea0WhkTHT73v76tu/dhVlNbD5ulsfzGuVj5fPVrH9YVPRLwmg0wnA4xGAwQL/fR7/fx/X1tbn1er2xf8tbv983zxsOhxgOh+b1+Nry3kYKzuv1GuHxawBj3+fPfD4ffD4fAoEAAoEAgsGg+drn88Hr9Y79bvz9eF0ejwc+nw9+v988NxgMwu/3w+/3w+v1mpt8b+VuqOgfiEk7NHfv0WiEwWCAwWAwJuyrqytcXV2h2+3i8vISnU4Hl5eXaLfbY/e8dToddLtddLvdG4sAhWaL3wmKVIpZ/lsuAlKooVAI0WgU0WgUsVgMsVgMkUjEiJfvKxexwWCA0WgEr9eLYDCISCRinh+NRhGJRBAKhRAIBOD3+8318H3l4uDz+R7yv/GTREV/ByaZ33Jn6/f7RsydTmfs1u12x0QrBX91dYXLy0vzGLkA2GLnjcLiri8XGF4fFwAJxSxFPUn0AIzYAoEAQqGQES0FGw6HEQwGjSC5wNnXxtcIh8NG9JFIxIieuz+vxe/3IxKJIJ1OY2VlBeVyGel02lyXMhsq+gWRwpbmNHdvCr3dbqPRaODi4gLn5+c4OzvD2dkZqtUqarUams0mWq0Wrq6ujAlPgXDRoFCkZSDfizcnQc/CLM9zOgLwXprjgUBgbKHweDxjlo1tbchdXJr23OX5unxsMpnExsYGfvnLX+K3v/0tEomEin5OVPQLwg8xz9+89Xo9XF5eotFooFarGZGfnp7i5OQEJycnOD09NaJvNBrodDpP/etMRVoyiy4u90EikcD29jb8fj8+//xzPH/+/Mmu5WNFRb8g3IVpktN8b7VaODs7w/HxMfb393FwcIDj42Ocn58bkTebTWOe37e3/TZsJ9hjvvd90Ww2zaL52H+/TwUV/QJwt7u+vka320Wr1UKz2USj0cDZ2RkODg6wu7uL3d1d7O3t4ezsDI1GA91u15ji8pz9mNe9TND8l046mvb8HoCxI4zX60U6nUY0GoXf71dv/gKo6BeEom+1WqhWq6hUKqhUKjg6OsLbt2/x9u1bHBwc4OzsDPV6HVdXVxPN4tti3LMIlc+bFsO/LyZd77TQoIQCpyMwkUggkUggmUwiFoshGAwaf0C320W73Uan04HP58Pq6iqePXuGRCKhol8AFf0C8Dzf6XRQq9VweHiI/f19HB4e4uDgAPv7+zg6OsLFxQXa7TaGwyG8Xu/E3X0esUy6nsdk2vXSkUePu9PXDPfFYjGk02nkcjkUCgWk02mkUimEw2F4PB4MBgO0223ztwwGg1hdXcWXX36JbDarTrwFUNEvwGg0Qq/XQ71ex9HREV6/fo3Xr1/j4OAAlUoFp6enqNVq6HQ6JjwlE1IeU6TSC85d0Y4K2NdDj7xMzuFzpjnxGLdPJpNIpVJm52YYj2E47vDxeBypVMqIPZlMIhqNIhAIwOPxYDgcotvtGoen3+9HOp1GqVRCKpVS0S+Ain4BaHJWq1Xs7e3hxx9/xMuXL3F6eopms4l2u23i5k5hqvvCDqPxRlGFw2GEw2FEIhEjfJkoc3V1ZZKCeI08WzOExvdgGJI5BIxWjEYjeDweE29PJpPI5XIolUoolUooFotIp9OIx+Nj8Xd5bdFoFOFw2PzMzubje/f7fQDvFzLG9dW8nx8V/QKMRiO0Wi0cHBzg1atXeP36Nfb29lCr1cay4h7CWSdNYybCyEw2mSjjlCwjE2WYSyBj/DTN+Xg+h5EKmQzU6/UwGAwAfBBiOp1GNpvFysoKisUistksksnkjYQbO3WXQndKtZUJT/x7ylwAZT5U9AswHA7RbDaxt7eHV69eYX9/HxcXF+h2uzfyy+8CP9AUhM/nM04viqtQKCCXyyGXyxkTOZFImOw2Ck0mucjEHpmvD2AsC0+a91woKHyGHHu9HoAPoo/H48YpZ6fkyiw/+zZLXr3TMUSZHxX9AgwGAzQaDRwcHGBvbw+VSsXkvgP341ijCLirx+NxZDIZ4/AqFAooFovI5/MoFArIZDJIp9NGbDSXpdikSOTOaS9QtghlRp1MK+bxYDQaGU8835e+BPu1nCrr5DU5fd/+m6rY74aKfgEGgwFarRZOT09xenqKVqsFAPdizjNuzbN5LBZDNpvF6uoqNjc3sbW1hXK5jGKxiEwmg1QqZcz7UCh0o1DlPivT7Go5WjQ818uU2ll371mZ9XWWLRfhKZn0N1PRL0C/38fl5SVqtRrq9Tr6/b75kN/lQycr2CKRCFKpFIrFItbW1rC9vY2dnR1sbm6iXC4jk8mYHd02ne1d9T6FIM1/4rQLO733Y+zQagVMR0U/JwzXseKt2+3e+TVlZlowGEQsFkMul8P6+jq2t7exvb2NZ8+eYW1tzcSyubM/xK466zUrHycq+jlhJh7PtIQm7iIw5BUKhZBMJpHP57G5uYmdnR28ePECz549M7t7PB43JrzTOd3tYuz3+6Z0mZEFt7K6uur4fRX9FGwhUfQsg70L3J0Z406n01hdXTWm/PPnz7G5uYmVlRVjzktPvC36T1Hw044m8hjR6/VQq9VMdmS73R57zKyv+anwhz/8wfH7Kvo5oeiZeLMo9vk9k8lgbW0NOzs7pmR0bW0N+XzexLmlR/wpTPqn4LbfbzQaodPpoF6vG//KyckJXr16hd3dXTQaDVdbPyr6e0L2sZs3Fi+dXBQ8z+9ra2t48eIFPvvsMyP4XC6HeDyOcDhsBG8L/WP7UDvtsne5/rOzM3z//ff44YcfcHh4iPPzc1N6e3V1devfZ5a4v9Pz7dDipPdYhtd3QkU/JzJcNavpKZtL8hYMBhGNRo3D7sWLF/jiiy+wvb2N1dXVG975STv8xyj4eUKbdssvuejW63X88MMP+Pbbb/HnP/8Ze3t7psAJePw6h48FFf2c2G2yCPPf7RCV3XeOSSzc4cvlMp4/f46dnR3s7OwYwUvvvJ1uKneCZd/pp/UQtHv48TF2Z2Derq6u0Gq1cHx8jDdv3uCvf/0rvv/+e7x8+fKGj0UF74yKfgEmfZgoblkAw7xyVpgxVz6TyaBUKmFrawvPnz/HxsbGDcHbGW22yPn1MgrfFrnd+ZfZfPSPOPUalJl/LPbpdDo4OzvDy5cv8be//Q2vXr1CvV6/s1PVTajoF0DG1Qnj5aPRyITf7A6vFHwikUA2m0WpVML6+jrW19dNNZrtobfTYWWjSSehP6X47d2aN6butttt1Ot1VKtVVKtVNBoN0xTU7t/PSkCmN/d6PbMI1Go1vHv3Dq9evRrLk5BltrrLT0ZFPyfcwWUBC7/Ps3c8HjcFMdls1iTTMF2WNeTZbBb5fB65XM7UkdshORv7SMH7+/Lkz/Ia0xqByFTd6+trdDod00rs8PAQe3t7ePfuHU5OTlCr1dBut82OLltl2y2zZVtxVvpJnrJh58eEin5OvF6vSY6ROz0z6RKJBFZWVrC6uopSqYRCoWDy41n1RisgHo+bm6xGs2PwFJQ8AxMpeKcUXDJPvNvp+Tb269nncLb/rtfrOD8/x8nJiSlQ2tvbw+HhISqVimkSyt1+Xh4i1fhTR0U/BfvDz/M5zXWa9LFYDMViEeVy2aTOrq6umso3WfFGi4AVdHb5q510A4w7wGRjTSn4SfF7uVBMWjTk7zrPbs+FSFbgyZ2dQt/d3cX+/j6Oj49xcXFhOuHQrF8UFfv8qOjnxOfzmVLXbDaLXC4Hj8djmjUyuWZrawuFQsGkzdoeeAqVC4DTGV5CwfO8aze+kDXwk8poJ0UdpJXgtAg4ndXtCT5sXtlsNk2//+PjY7x79w57e3vY39/HycmJ2dmnmeLTknKUxVHRzwnN+2QyaYTu8/mwtbWFzz//3Ai+WCwimUyaHd6uTSdyl75N8FL0dGrJdlXSgrCPBvZiIfvi8f3tBcMWvKy/52vwvN5qtVCr1XB+fo5KpWIGenDQx8XFhekZKOsVbmMZIxKfCir6BQgGg8hms9je3ka/30cgEMDGxobJpisWi2aHtx1+drKJ3F2nCV6elzudzljfOGkxyEXGqfEFFwDgQ5jRqQ5evq9MSmLIzRb86ekpjo+PUalUcH5+jmazabrr0DKYJ2FGd/SHQUW/AH6/H7lcDp9//jlisRh8Ph+KxSI2NjZQLBaRSqVuCF6G2pwSUpySb/i1FB/DWBxkSUFxGKTc7aVlIIdgMgzGRcduT833dZqqy8Xj8vISrVYLrVbLjPBi/jvP67f1+leeDhX9Avh8PqRSKWxvbyOdTsPj8ZjYu9zhnc7xtwnfXgScdnmenyk4lpDa/gGPx2OKg7gjt1otM+paNrW0W2rxPW2hy6aYHJvdarXMYsIkmlnTlJWnQUW/AF6vF9FoFIVCAdFoFKPRyKTW2pl0wGxOKacQmC14aVbTadZut2+Y+LIBJkNnHL0lQ2QyR10uUPbkXZrocm6fPV5bHhmWDc3BH0dFvwAej8fE5X0+H4bDocmpl5Vw0zLmaF7L1s7ywyk95LITLXdZip6mujyXMxNOWgUci00RS5FykeL5nb4DuwmmTJ116qa7jKjgx7lV9PrHGkcKlpVyAIx5bWfQTSqbdLpRNLa33D7H00TnPUXP0VnSRKdpL3d6tviiL8BGLjLStOf37Aw5ef9UO+okf4jijO70MzBpx6bIJuWcOxXI2I+T3nFbSPJcLYVbr9fHzucydMebTIGddPa2fQrAuGkvhS8nx8p4v9NrKMvNraLXOKkztvkudzp7t7V3P3t3585pC8rOcLO95CxW4YANeV28JjmGiiKmkKVoCf8tTXc65OxMwGXC6XqY8jyphsHN6E6/AHYmGufOs7pO9p63y2KlgKSDzq4bl2OneH5vNBomJEbBM1/dzsSTorUXFeBmkpDcte2vbZ+DfMwyUigUUCqVkE6nEQ6HzWiuZb3ex+ZW0b969eqxrmMpsLPmvF6vGbLI7rOMXzPtlAK8vr6Gz+cz1XTsesPCHCl6O/YtzWj5Nbu6yng4TXo5g44OPABjnnv7d5MLg737yd+Nzkm7iOcpscuL2UyUE3JZsBSPx03BUyaTUdE7cKvo//SnPz3of/hDp1ou+vrc3YLBIPL5PPL5PBKJhBmfzGEXjUYD1WoVtVoN3W4XPp/PlNVmMpmxDyNFZafSyiYRdjycCTg8v8v5cTL9ltclJ9pwQi1/fn19PTa5ljs/MH6Mo0OQfz8+lsk+MlffyRF4H8KyQ53SROf1ZTIZbG5umr6Ca2trZmBnPB43VY0yO1F5z62i/+Mf//hY17E0cEceDAYIhUIoFotYWVlBIpEYEy/bNtXrddTrdXQ6HXi9XsRiMVNLz5JahvKAD0cDmvD2jcJnBp0tdilUHiXkLs9d30m8fJ7P5zPnc/v4QeehnT5M+v2+CTPK5/B97GQkmdNvj9mSi4rTYmEvZHxeOBzG1tYWfvWrX+Gbb77B119/jc3NTcTj8bH3U5y5VfTffffdY13H0iBFz0mssn2VTFVl8gtn0QPvp7eyRl7W0MvkFylCeS/TXu2R0LL7Lst7KTwuRjJXAIAx1eXUW7/fb0Jv0vlo+wKurq5udPC5vr6G1+sdy7jjMYjYqb00w2UvAblYyOIh5hvI/wu5U3MRyOVy+NnPfoZvvvkGv/71r7G1tYVUKvVgn4lPjVtFf3Bw8FjX8VFBM5nnfHvUM01qOYvd7p1nl9byA03vudz9pSnOOnzW8odCIQAfSn6l/2E4HCIcDqPb7SIYDJpFhK/J65XXJCf4MNwXCoVMfF9m39nhSYrU7/eb1mDxeBzJZNIshPKMLR2h0iEqHY60SrjIRCIRlMtlfPnll/jyyy+xtbWFRCJxIzSqJv1k1Hu/APzQ3zbHTlavyXOwFLwsdKFQid1qmzsqd2qa99ztZV8+afLLKIPMrJNhPtn+i4tOr9czPgVm8vGoQYejHPbBRScajSKdTiOdTqNQKJh2YbIdGEUvFxfe5MLCnZ+Pubq6QiwWw9raGjY2NpDP5xGLxcx1T0ppdiuTFj4V/QMh4902UvTyHO7U/MLeSQOBAACM1dOz624kEjHOLD5OJvjQYSiPCtLst3d7O5tPCl92vOGxgo1F2EGoVCqZqkN5RJJHKF4bO9222+0bef1su3V5eYlgMGg887Ry+Dd1+lq5iSbnzMCkVNpZcHqcdH5Js1iKnua57YDjz+jUo8MuFAoZk5o7Kl9Diku2nObiI0Uvjyt2cQ9DhxQkX4M7PAXP/oD5fN50+HXqLWAnIdnmPnf+ZrNp6vPpuY9Go8Z3ocyH5t7PwEP+HfjanHEvd1v+XMb46VCjYJwcZrJ/H/DBOSfz5/m+soGGjPc7ne15o4lPKyMajSKVSiGXy6FQKKBYLCKbzSKRSCAcDhuTfpIlMxwOEQqF0O/3EY1Gx6YCd7tdRKNR8/sNBgPTJtwuXVZmQ5fKJYAClLu//XOZXmtnydEnwN3ejhjY02Jsz70tei4ysrovFouZM77MBPT7/eYcn8vlkMvlkMlkTDNQOVJbeuHl7ySPOYFAAP1+f6xpqLR6er3ejRZkynyo6JcEW/iT4sx2NZ4dBWDUQO6EPD/7/X5j2tvhOntenozZMwLBhcUOUXKnZ+dfHi9k1MJOuLE97TLhR8blmQwViUTQ7XaN/8J+XWV2VPRLBkUgs90oQmnmS2yHoNOuLbG97na7LJmHYJvjwHvB8jUo+nA4bFp5O5nyk35XJ6SjUzb85KK1LKnBHyuatqQAuH1qjfJpoTv9kiHPuU7fdzJpZTmuvPHxMtvPNu/t8l+5i9rhPnrUGUcHYEKDgUDAhATD4fBCVXh22bHti6A/gnF+ZTFU9EuCPNc6ma7y5/w3cLOvPUUqQ3yTauSlI6/f70905FHotiNvNHo/rLPT6ZhFwI75s+hH5vfbRw4pcrtzj528w99tWWv7PwZU9EuAU8YekV5uO6lH5svLHnr0AdghO9nbzilOL8/ifA53d7vaj2FDlhPX63WTWMOYeyKRMFWGdrdd/m4UvLxGO2TXaDTMwAxetxzYocyHJufMwF2Sc2Z5bXu6zKSaeO7EDIOxmk6m2nY6HSNae8fm7ikFw9e8LTmHSTmy7fbV1ZVZkGT6LSfacHjnPMk5dptt/j7NZtOMtubvzeQkFf78aHLODNzl72AvGHZs2ikNV3rpndJwGZbjc2RrrHa7jeFweGsarqzHt73+8jlyPp1MxZX97YEPRUDxeBxHR0c4Pj7G6uoqVldXzdReOw0XuGmh0KKQvgN+fXFxgU6nY+L2hUJhoSm3ipr3D4ZdcGPXhVPwbKvlNGxiUsENRe801IKlr7QCuGNTQHTC2VV2Uoy0CuRAC2nay9fg4sFy32g0iqOjI+zu7ppknXQ6barsuFjJNtuTCm7odGTxT6/XQzQaBQAUi0X0ej3z97Z9BGqlasHNvULhsWONU2ktE2T4OLuJhF1lZyfS0AyXnWj5HJbWyhZe3DG9Xq+JZVMwttlsV8hJs5uvxcfKTrpOpbVONQTHx8cmMzCRSCCZTCKRSJgWYrLKTprx9mvLhB1ZWtvv980swUKhgGQy6ZgApDhzq+jX19cf6zqWCn6Y/X6/KWCZ1kSD5a5sosFacqcmGnwu34v3sv20LVJZDssyVllCOxgMzERYmr38HndQW/TTmmjQ3JYee1nfL48f8neRWYLMmectGAzeMO9va6Ih/97A+wWq0+kgEokgn88jGo3i2bNn2kRjDm4V/TfffPNY17EUSG83i0DYLiuZTI7trFdXV2Mdamlayzz0RdtlyfOtbJclxSobdXA3ZNiMZrEUvdO8ORmbJzTbbxtdJbvlyt3eFmyv14PP58Pl5eWYgO1w46SYvh3R4PPa7TaA922zgPdlxpubm0gkEjd8I26GG4LNraL//e9//yAXs8zIApVQKGQqx+LxuDn3DgYDx8aYXq8XiUTCNMZkHrpskGHPpZMONt7LuLisbpPTaeRZWloesne+3XbL3untxpgUse34swVPkTqJ1d71nZpnzvr/wHs7NbjT6Zhrrdfr2N3dRblcNseHeDxuKvzcXJjzi1/8wvH7t4r+d7/73YNczDIjPede74cW2PLcS/O31WqhUCig2WyaZpJsgc18dFkcAoyHqWS7a9n+etLcuttaYMszuUzGoQkt4/Ry2IWERwxphdhCl7u7LfD7RL62rAHgYseFdn9/H3/5y19MkU8sFsPKygrK5bJpgS3/Nm5ikug9U/4Q7vorzYj0ltP0pg/AHnZhm7O2Z37SsAsZe2fLKnbepfi56wPOwy5kGE+ezWUDDjbhkKKWiwPP25NGWvH3WiYKhQJWVlZcP+zi22+/dTRx1Hu/ANJDz/P1aDQy8Wru7k4ptfzwseEjPfe3jbVyqmKTHW5l+I3wmMLqNKdcAJkIROHzazvKYHvp7c4+y0SlUkGr1Roba7XoMeNTRJNzZmCScG1HmB1vn1Q7zu9JkdLbLXdc+hUYk6flYJfdThpgSaejnKjjVHBD5ALCBYPPlwuMU7nuU+JU/ksrTLmJ7vQzIENR8nvS1JWFMJNixlIstxXQyNfnQsKf2zn0AEyoS4bfaKbL+L8dUnPa/RgFkJYB35eDLngvE4mW1dRXbqK59wsiU1+lOCWTquXsr+1dX76HnaUn89S568pzPYVKZx6dibLVdjAYNGd1Pk8uOjJ+znAdW2fLWL1cCGSv+sdGF5r50J1+AUaj973amKk2Go3M5BaKy95Z5XPthBanhYBfS68/e+BFo1HjjPN6vWP96mSUgclDjCZEIhE0m00TEpRneNsJSEcgowj2AsD4Pe9lvF5ZblT0CzAcDnF5eYlKpYKLiwt4PB4kEomxHV+Oqbbzwm3hAzd7x/F5/Dez2zjFhhl6fr9/rCsuH8fdl1GGRCIxViXHnd4u+pGpwNKqsFN5ZU98RgZk4o/Wuy8vKvoFGAwGqNVqePPmDQ4PD+Hz+VAsFs38O2nmyzO7LXhb9HYWmazI40LCvHua9uFw2OQUyBFa0sSXRS0UJxcNJvjYvgP+nnZzDi4Cdv5ArVYzNxbn0AJQlgsV/QL0+31Uq1X89NNPePnyJQKBADY2NkwIDgDi8bhjDbkteienn+0LkCWwzGUHYBpFSuHayUBOwyScKuTsyIO8VjuvQC4krVYLtVoN5+fnODk5wenpKU5PT3F2dmasCvoAZGRCeTpU9AvQ6/VQrVbx+vVr/OMf/4Df7zdZeRQY68jtGnKnHZ6Cts/3/Ll8DBOAWG3H3VoeK+y0Vae+9zLuLh2ATnnrdiae3bhDCr9SqRjhVyoVcwSq1WrGlzALtzmRddG4Gyr6OaFzrFar4ejoCG/fvoXH4xlzbNGMLhaLpobczgGXlWj2+f824bNwhzXpwM0W2E6itTPpnEKH8ojhlJvA+0niZ+ZgrVbD2dkZjo+Psb+/j7dv3+Ldu3c4PT1Fo9EYa6ypPD4q+jlhBVq73TYfbgCmeQUdXLVazQxapKlP01uGzpi2C2Cq8GWzCybOyKw5W7zEFiy/djpWzBqmtfMJpMefxUjn5+fY39/H2toa3r59i/39fRwdHZnWV/YgTKfXV+4fFf0UbAHaZaf8cLbbbYxGI2PuVioVxz5xrCtnYU4ikUA8HgcwLjo7hdfekSd9f5JfYJqInBaZWf428uvhcGgKlOLxONLpNPL5PDY2NrCzs4ODgwO8e/cOb9++xeHhIc7OztBoNExXHNkJZ1bspCZlOir6OWFSjuwRB8BUrtHMrVarOD4+Hqurj0QiprlGKpVCNptFPp+/kUZLE95O2KFHntg79G079aw7+Dxitx8r6wE4OjuZTKJQKKBcLmNjYwObm5vY2Ngw5n61Wh0L98khm7IEmI5Hu2RYxT4/Kvo5sQdLyO/LFFl2cT09PTUFM5wfn0gkkMvlsLKygvX19RuiB2CEbwvZLqqZ5vl/CCZlGkqriCFEHmG4+2cyGZTLZXzxxRdjbbOlwPk1Q4vyni2x9/b28NNPP6Hb7ZprsKMkijMq+gWQzizCBYDZehR+o9EwFXkMt/HDz13OHh/Ne9mh1hb4U4h9Gk7XQPHzPhaLoVAojPUQkOE8e+CFzAJkmPD8/Bw//vgjYrEYXr9+jVqtNtZOTLkdFf0CTBIYM9nk49g7Tza1ZDJLs9kcm/fODy0FEAqFTBmuLIG1r2MZBG/j5HdgcpEs0nGK3dvitxOEWq0WPvvsM3z11Vf4+9//ju+++w7//Oc/tSX2jKjo50QK2MmctM1KZs4xVbYjP8cAAAh4SURBVNZ2BLIJh+xrJ7vV2J59p6+XGae0YqfoxCTs7EUuBDs7O/j5z3+OZ8+eIRQKYTgcYm9vD5eXlyYaYKdAK+9R0c+JHQ+XOLWfsu/lImB3zJF96aTJS2wH37wCemrk9TqlG89LKpWCx/O+WUipVMLh4aHJDKxWq2NTeFT8H1DRz4lMqHEqh70NO14+Go3QarXGSll5zuUtn88jmUwiEokAeD8d1inG/rFw39ebz+fxm9/8xjgGT05O8Pr1a7x58waNRuOjWhQfCxX9nEjRT2oxPAvc9eXZVvaclz3tSqUSMpnM1JDep/jhnrZDRyIRRCIRM/GmVqthbW0NL168MK2yP8W/y11Q0U/B/sDIUBTnxS0Kd3s6oC4uLsykWLvl9fX1NbLZrGnzzB1fJuV8irvaPPkFbFkei8VMAZRyExX9nNADL9NngbvtJhQ+d3uZfNJqtUwX3LW1NRSLRaTTaTN152Ny6j0Gfr/fzM1TnFHRz4nH4zHZZky6kQkii2CX20rh1+t1nJ2doVKp4Pz8HM+ePZuY0293wHnIRWBStOK299ZFaTlQ0S8Ah1qk02mkUikTIrqrOSnj/O12e6x4haWrp6enKJfLKBaLyGQyJsVXtsmWPfed2nDf5frsjEQ5JUeOvH6q0VLqpf/ApL+9in4BaEJyzh0zxVjbfpdGEex24/F4xhpWMKV3d3cX+XwexWIRxWIRhUIB+XwemUwG6XTaTIeNRCITe/Db9fFOpba2YOWoLNlCiynEHKrJgiJ72MckC2BWi8Cp5sAJtSamo6JfAK/Xi2QyifX1dWxubqLT6aBSqQD4MLbqrjsOn08nXqfTQbVaxeHhIRKJBDKZjCnYyeVy5t+pVMqcaTkxl/X89sw7OxGIv5tsqsFFjIKXrbeYMz8ajRAMBsdGU3NyLxcfe+CGfZtmFchY+6SCH2U2VPQLwEGVm5ubJjTEdFt77PJdxC8/5Cw7pejq9TqOj49NyIoC443db+nt53RbAGMprXJsFfCho65s7gGMlxSzA45swx0IBBCNRpFKpcYskWw2i2QyaWbN0fpgBMQe5OEkfieLRC5Mynyo6BfA4/EgHo+jXC5jZ2cHrVYLw+EQJycnpuMszfP72PUlLN+lk0+azbJBB52NkUjETG/lBB12/6F5LufCU8Cyqy7wYTYehc+jB2ExUSKRQD6fR6lUQqlUMtEGWh6MfPAYIBcqJ6uExx0mKwEwVgV7FOiOPx8q+gXweN53oc1ms9ja2kK324Xf70cqlTJNIavVKjqdzph5PMnjfRfsDjb0+hOe6Skkp0aXTh54O9WYOe+TKtm63a7pjFutVnFycoI3b94gmUyOWRtO5bbJZBLpdBrpdNpYBVxwuMix047f70cmk0GpVEK5XEYwGFTRz4mKfgE8Hg+CwSBSqRRKpRIGgwHC4bBxpnG09cXFhekKA+Ded/1ZkDvkrHB3XaSPHWsHWq0Wjo+Px0prmc0ocx1isRjS6TSy2SwKhYI5DrD552AwME1J2u02gsEgyuUyvvrqK9N5SE38+VDRLwB3wkgkgkwmY4ZOxONxJBIJY6oGAgFUKpUbJrTT68l7ySyLhPTKz/O8RZl0vdLqkIuG0yBJLgahUMg0FuFNJh6NRiNcXV2h1Wqh2+3C5/OhVCrB4/FgfX0da2trD/Z7fqqo6BdENoUYjUYIBALGax6NRo0jjZl79Xod3W7XcfrLXc3+x7Ye7uOYwrZjjEzUajVHJyJ3e5kTUKvVUCqV0Gw2NS6/ACr6BeCHkc4rmvvsf5dIJExTyFKphOPjY5yfn+Pi4gLNZtNMgHnMHm+LWhEPicwVmOcIEgwG0el0HP0RynRU9Ati96CnYyoWiyGZTCKfz2N9fR07Oztm6MPJyYm5VatVMwKKQzAfkk9BHB7P+5mBDAVywVXmQ0W/IDzX857trYbDoemBVywWsb6+jkajgYuLC5yfn+Ps7Mx49+v1ummZxWo6OQCSIT/ZaEMm1PDfvD1kjzh5jpc99rn4MUJgj8eSGYpy2AaRSTsyZs+og5wN6PV6kUqlsL6+jq+//hq5XE6deAvgmbIDfPzbwwNiN8WQXzOPXnbEYXts2SbLvskGkKyr58Qc3vNr+RrsGCsXCACOoUK5OMjeexSyDNfZ2Xlc5OwputKPwXg8X4MLEq+P/+br8Pl2DYGdRuzz+UzNQ7FYRLlcRjqdVuFPxtEMUtE/EE6edDumLktpmeIqFwgpctbX814KnwsEHWNSWE495mzsnVumy9rVe/LnnKDLYw1FK1NvGWuX7cF5Fmfozha9jH5Iy0EmHsmfKRNR0S8zdvccuwOsbKHFG48C9mBK24yexdsui2zkru5UMCPFL81x7sxO8/n4u8k8f9tqkCm6do6+UxGQMhUV/cfGJNE6/Z9Nc9RNE/y8TKuOmxTDv+31tBnIvaOiVxSX4Sh69YAoisvQkN2S8VDxdNn//bY+8MtkWi/TtXxKqHmvKJ8uat4riqKiVxTXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSXoaJXFJeholcUl6GiVxSX4Z/yc8+jXIWiKI+G7vSK4jJU9IriMlT0iuIyVPSK4jJU9IriMlT0iuIy/j+1AGStO/66SgAAAABJRU5ErkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 44\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 45\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 46\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 47\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 48\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 49\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 50\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "current beta: 128\n",
- "Current iteration: 51\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 52\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 53\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 54\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 55\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 56\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 57\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 58\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 59\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 60\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 61\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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XQVerxexWExsOcjTQNsMEq3L5RItt+PxOOLxOKLRKPx+v7jefr8vKvGoqgqXy4X5+XnEYjEEAoEr9aDcAQyXQiz6Kel2u2g0GigWizg/P8f+/j52d3fxww8/4M2bNzg+Pr5URZi7hFxZR26z5XQ6RfLM+vo61tfXsbi4iGg0KppPdrtdVCoVJJNJ5PN5eL1ebGxs4MGDB9jY2EA0GuVl/mAMPxhe3k8JFYcIBoOiSITf7xf94v1+Pw4ODpBOp4ceZ1wfu9HgIZfE1iPnqY9inIq98rUOq+mnLy5CxyJjoB5qppHNZnF4eIhIJAKfz6eZ6akddaVSgcPhwE8//YRisQifzycad9B5eAAYDYt+Sqh+vFwbjvrERaNRhEIhUQL7/Px84HEu49+Xu9pehnHPP0y8l6FUKqFSqeDo6Mgwi5E8B3T+9+/fQ1EUPH36lGvkTQGL/hLQF5R+Kooi3GU0C62srCCVSokqOuVyGeVyGaqqXlt9t1GVbG8auVjGOFDaLMXW8+w+GSz6SyBXgqHOsIFAAHa7HYFAACsrK3j27JnI8U4mkzg6OsLR0RGSySQymcxYTSAuy20Q9ixZW1vD4uIivF6vuI9z5ceHRX9J5FmG9vmBQABerxfz8/NoNpuoVCrI5/M4OzvDyckJTk5OcHZ2hlwuB1VVRf13mu309eLIZaX/SXXm6e/r+NLTvt5ms4kb1fAndxu53PSlw+X3RceiY5B1Xx5A5WCefr8Pu92OSCSC+/fv4/nz54jFYgP/F8xg2Hp/xVAnGH1TSH0PeDnohXzSFBBDnWTpVqvVNDc6Hr2ejGm0Dx4XeT9NwtP/LQfvKIoCRVE0sQD0u8vlElsf8vNTDAMNbHK3X5/PB6/Xq8lglG96u0kikUA8Hoff77/C/94nD7vsbiM0KMgRclT9lSLnarWapl88dYul2u+VSgXValVTO55WCIBxfIA+qk2ewWXB62deuo9ET0Knn/S72+0Whs5erycGM3pv/X4fNpsNLpdL81o5co9mfrkjkL4zEM/uQ2HRfwrQDK1vGCkPCHJJaPl3WvLL7rpxW0XJrkO5Cq++Th/dJwvQKNJOXuLLve/kWH86DgXqkNjpfvn8zFSw6G8L03StnVTE140+nXdc3z89l2fsK4FFf9OMmmkZZsZwRN5Nw8JmbgMs+lvGZZbsV73cv4lBiwfK2cPLe4a5uxiOmGwaZRiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJPBomcYk8GiZxiTwaJnGJNhH/G45VqugmGYa4NneoYxGSx6hjEZLHqGMRkseoYxGSx6hjEZLHqGMRn/H71+ty8MNW7iAAAAAElFTkSuQmCC\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 62\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"algorithm = nlopt.LD_MMA\n",
"n = Nx * Ny # number of parameters\n",
@@ -1829,22 +437,9 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"plt.figure()\n",
"plt.plot(10 * np.log10(0.5 * np.array(evaluation_history)), \"o-\")\n",
@@ -1863,17 +458,9 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Starting forward run...\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"f0, dJ_du = opt([mapping(x, eta_i, cur_beta)], need_gradient=False)\n",
"frequencies = opt.frequencies\n",
@@ -1885,22 +472,9 @@
},
{
"cell_type": "code",
- "execution_count": 16,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"plt.figure()\n",
"plt.plot(1 / frequencies, top_profile * 100, \"-o\", label=\"Top Arm\")\n",
@@ -1922,22 +496,9 @@
},
{
"cell_type": "code",
- "execution_count": 15,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"opt.update_design([mapping(x, eta_i, cur_beta)])\n",
"plt.figure()\n",
diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/05-Near2Far-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/05-Near2Far-checkpoint.ipynb
index bab3fce98..8b9ffc01e 100644
--- a/python/examples/adjoint_optimization/.ipynb_checkpoints/05-Near2Far-checkpoint.ipynb
+++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/05-Near2Far-checkpoint.ipynb
@@ -325,9 +325,7 @@
{
"cell_type": "code",
"execution_count": null,
- "metadata": {
- "scrolled": true
- },
+ "metadata": {},
"outputs": [],
"source": [
"lb = -np.min(evaluation_history, axis=1)\n",
diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/06-Near2Far-Epigraph-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/06-Near2Far-Epigraph-checkpoint.ipynb
index f30f97f89..407781c03 100644
--- a/python/examples/adjoint_optimization/.ipynb_checkpoints/06-Near2Far-Epigraph-checkpoint.ipynb
+++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/06-Near2Far-Epigraph-checkpoint.ipynb
@@ -11,17 +11,9 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Using MPI version 3.1, 1 processes\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"import meep as mp\n",
"import meep.adjoint as mpa\n",
@@ -47,7 +39,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -154,7 +146,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -176,22 +168,9 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"opt = mpa.OptimizationProblem(\n",
" simulation=sim,\n",
@@ -213,7 +192,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -249,7 +228,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -308,1440 +287,9 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 0; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAD1klEQVR4nO3dQU4jRwBA0WrTICQEB5hL5CZBYpFVLhZpDsGGO8xcB4TkgE1nEXlWAWY0nm8rvLctqau8+S6XSu1pWZYBQGN16AUAfCSiCxASXYCQ6AKERBcgJLoAofmdcffJAH7c9NqAnS5ASHQBQqILEBJdgJDoAoREFyAkugAh0QUIiS5ASHQBQqILEBJdgJDoAoREFyAkugAh0QUIiS5ASHQBQqILEBJdgJDoAoREFyAkugAh0QUIiS5ASHQBQqILEBJdgJDoAoREFyAkugAh0QUIiS5ASHQBQqILEBJdgJDoAoREFyAkugAh0QUIiS5ASHQBQqILEBJdgJDoAoREFyAkurBnf2+242nzcuhlcKREF/bsj7++jD8/fz30MjhS86EXAP83v//2acyr6dDL4EhNy7K8Nf7mIAD/6dVvXccLACHRBQiJLkBIdAFCogsQEl2AkOgChEQXICS6ACHRBQiJLkBIdAFCogsQEl2AUPo+3XdeIwlwENPUvf84jW75wQCOURbdp6encX9/L7zAUVmWZVxdXY2zs7Nkvl8e3e12O05OTsbd3d24ubkZ5+fn4+XFn/YBh7darcZ6vR63t7fj+vr6W69+pWynu91uxxhjrNfrakqA77LrUyG7vbA7Vphn/4UJHIddj8pjz/zKmKMF4Fgcokfu6QKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKE8uiuVjoPHIdD9CibcVmWMcYYm82mmhLgTbse7fpUmLOJ5n+nuri4EF7gKMzzPB4fH7/1qTC9U/i95f/5+Xk8PDyMaZr29UiAn7Ysy7i8vBynp6f7fOyrocuiC/CBvBrdbk892nMTgO9V/gJPo+toAfjo3N8CCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCIkuQEh0AUKiCxASXYCQ6AKERBcgJLoAIdEFCM3vjE/JKgA+CDtdgJDoAoREFyAkugAh0QUIiS5A6B+NOmaIgLcIiwAAAABJRU5ErkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 1; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 2; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAXFElEQVR4nO2dQY4rR2yGS1Jr4AcY3hrIJXINr7IyssrFAuQMvoAvkBzFW8ObN2pJWQScUByyitWSqIH9fcBgWlI3q5rF+otV6m7trtdrAwCAGvavrgAAwD8JRBcAoBBEFwCgEEQXAKAQRBcAoBBEFwCgkGXwOdeTAQDMs4s+INMFACgE0QUAKATRBQAoBNEFACgE0QUAKATRBQAoBNEFACgE0QUAKATRBQAoBNEFACgE0QUAKATRBQAoBNEFACgE0QUAKATRBQAoBNEFACgE0QUAKATRBQAoBNEFACgE0QUAKATRBQAoBNEFACgE0QUAKATRBQAoBNEFACgE0QUAKATRBQAoBNEFACgE0QUAKATRBQAoBNEFACgE0QUAKATRBQAoBNEFACgE0QUAKATRBQAoBNEFACgE0QUAKATRBQAoBNEFACgE0QUAKATRBQAoBNEFACgE0QUAKATRBQAoBNEFACgE0QV4MN/Xc3tfL6+uBnxREF2AB/Pv//nf7T/+639eXQ34oiyvrgDA341/+9d/act+9+pqwBdld71ee593PwQAAJdw1GV5AQCgEEQXAKAQRBcAoBBEFwCgEEQXAKAQRBcAoBBEFwCgEEQXAKAQRBcAoBBEFwCgEEQXAKAQRBcAoBBEFwCgEEQXAKCQ0ufpDh4jCQDwEna7uucfl4pu5YkBAHxFykT3dDq1P//8s+33dSsaNrPOZtp6cJDtaMDQNj379viZgWdLfe3rjA/0ez1bmXqO6nzPwNuz/Sy71vasP+xr7/jI56O26rElzuz/yN6oL8zEQ2SzMkG7XC7tp59+asfjsaS8p4vu5XJp+/2+/f777+3XX39tP//8c7ter2232338WSG+XC7ter1+/OnXQnSs7H8+n9vlcmmXy6Wt6/rx3vl8vrGtbe12u3Y4HD7+jsdjOx6PbVmW9vb21vb7/U2HOJ/PbV3Xdj6f2+l0+ihTbGobb29v7e3trS3L0o7H48fn3jmLXV1nKVPKlzru9/u2LEvb7/dtv99/vKfrKXbWdb35076VdpK/ZVk+2bdiLr7V5386nT4+89rK1s8KjP4/M2h6nTYa8HQZOlZsmVLP4/H40ZaHw2HoD+0XiUHxr/hB212W5cbfXttFsTyKi8Ph4PYV6Qen06mt69re39/b+/t7O51OH20pvpB20/UVu7qe7+/vbV3XGxszfW4Uy8JID2a0ZbfbtT/++KP99ttv7Zdffvlop2fydNEVx1wul/b9+/f2/fv3G8d7TtVioF/Ltu5Eels7UxpaB6t+rUVBN1TU2XWn0e/pwJIy7Lnrcg+HQzudTjeCa8uxHU13AH3eEqx2W/tFD1yn0+lGgCOhkfOUzmXtah9re9oHUYfQ9r3zvydbkrLstvZH5O9eR17X9abdRBCsP8Qn2g821rQvxO5+v2/H4/EmDrU/tF27besr9rRoRf7W7SaCqf+0XSnrcDi08/ncHdhFcPXAo+NQkLrJOS3L8tHPDodDW9f1U9xpv8i21MMO5hlt2e12H/1CPn82TxddfdJvb2/teDy28/n8qSPoBrSBd7lcUtMNfZw0pjTo4XBIZc3yX0ZcParbEVDvL+Jkz0GOX5bl5hzknGwH887ncDi4g4Suj/ZTJLr2nPf7/ccx1u82o7fleR1J6ioZmC7H1ivTljYrGjGaxkflSP28DqkzOhEE8UnkD11/sR+Jg9Rb+9ATXU9cPRHzfKXrpO1qe8uy3JS/LMunDFoLeDSTkD9JMPRMKtPvvMRB76//99rS29+2x/V6/ejjI9uPpPzXgO1opR1i9+mNPjaQeoiT9bY3zbGZgm14HeAWLY46UAU90KzrGmY1Vsw8IZDOr0U2EkcpW+qvM2fbEbwBT0/x9Pnr7MZm6LYttVh5HWqU3WoBHhEJr9eptKB5sSY+1ehs18aD5xPPv+IPsS1Zb2vt0wzIzvh6ddZxIfb1DC2KNamzIANnNEhoGxYtpJK5ii07gNi+l53WR31f+0THm61nRTbb4yU/wa7XTSIH2CmZlwV6I6fdJ/pMvx8Jrs5yPGzjWzHxxMV2jCzaTu84Tyhaa58E3AqdHgBtfT0fWFtRJ9TlR20eiW3vvQw269xq155f1if2M539WltWiDPogTd7Hrae3gyotVvxjzJGDz3bsWvI3r7RX1R3XQ/PnqAH+oiK9VuPl90cEWWNdg1MiKYbM9POZ45w3hTrmcyUYzMl+36vDK/MqB52ejeqS6bMe4nsZWJCn0+UkW2Jy2jQycTnq+LrmeXNnr/3nvd+pCXy2at4SaYrPOrEex3Ly+geIb7R1CqyrbNc7zghynZG2YXd7omalwFGtnvrsbqu+nNv6t3D+u1ZHTxj17ZFdO4Zn0R2s+fn+aUXX55db2nBYrPdXt1H5c3gxWEUj/eU9UqB9SjNdCsyzhGzWUJm6pwRQ21P/5/hWYOFZUYU7ukMkS8yPh/Zjab4XnkzzJzzzCzkmTaiY3rrsrN12dJmFRl7j1fp0Eu/SNM8MrhshptZrsiM5vp1lIVEI7Selsp+ozWlXmYTMStgNtvt+eEZX0iMhHCUiY/qk80UZ9DtPJpB2f1Gyx3eMbOMBvuoP9h1555N2y+8siL7UTvoL/1m2/0R8VFF+W3AM0G3hcyapRVbu3Zn7UUBmZkWj7IDK7z60qGe7cygpQU36myjOtorJWz5kWjaJQZ7eZvX8bz6RYNST0AjOzMC7N10402D9ef3+ni0v23P3r7ynhdfXlvpZaIRM3Gg+5c+h1G/0APPo/TA4xWZ9kvXdCO2OtpmHdIJellIT3BtfTyxyAapF6hia3Qp2mgd2NrUr4XID72sojeAad9GjK6y0HV7NvpSIlu+fn+EN1Bqe6MpduRjua5Vv9/LeKXdMmJtL/Xz6jkjclFmO0py9EAc2bC+jTLvDK9aPhhRtqZrHbnl2MwaUNbRVnA9O/aSKHk/k03rcrYidYyWQnrZkN4edQZt3/Ox7Sie4Nrjs+fdE1zd7pbeVL4noFmBt+dhB017/axn27Zfr93ETi/W7Hl6M7YZ33vM9K8o1nqD8SjB6ZUX1TfT7tGxr6A80x1lk/a1OFL+6zuo7PF6e5TlzhJNTe8ZibN4ZdxbXmbtLlpusTYydep1wl4dZ9naAW15PYH0Zi32s2j24NnYwjNiYoSX0Y6yXM1oScfLdnsZuNfWkk17+tDzT6UAf4mHmM803Gz24zHqSNpelO1uLSfaR27KmGUmWGYyDL1fRhi9TG6rIHiZfa/u0Wxgtky73Ts3jy2zuXvqmUXH1kxMjpjJcrN9LsvM4Nrrt6/Idl8uur2MtbXbL5YyjtaN7yF27INc5DMPb01M7z8KqFHD3pPtRQOA9/7seqNgfdm7PbsnvPr43oXrz6ZXfqb+0XLCli/RojaZaddsWSOBGsVstNQijM6/1/csXrITnY+2492a3Xttz6eCL/NFmjddv16vn+5Fj5YWvAbypniyZGGzo9Gyh76cxdYn8zoK+N4A4dnRo7Z9z7N9b1Yux0c3bMwSCZW9ukHXaVROVrQ8P8/eCmrtZm/bHU2trf3sVFz27RElDRr78CNtt7ekJJ9HA7HuX7pf6zK9c4vaftTf9JUYNsMdxXgVX0J0rVBmsg17vM1woxHNu60zU7/RflGWEE05M53LrtvZ7awY9a5cGJ2LtdXDdqys0EgdLXZKPMoY9f97suiZbNc7Tr/OiKNdy9wyUEbbmRmP1FN/b6L3vWfwi+or9NZgvQG5FwNe3EXaMqrXM/kyP9cTjUYjYdTO9b5RjsqeXUsT+95zcL1yeoGiA8MGwmgkt8f36tva+BbPTFkzeIEfZUfZOtxLtiyvHWZjJLKTzXLtE9kiZhITb/Znt3U9R19aW2ZizJYV1dPa1zdN2OWKEaNMt5qXZ7rZKbBtqGgakW387JQjEsxeHTNfWvTqmclAZzPJTHneuW5hZCcjgjNZrnyufaKnrpGfvLacmQGN6uPRWwrKljkjOtGS28i29mEvznpLOz0fzCy16Ne9pGa0zPRVxPflX6QJeonAy1JHSwKjGwx65Xr1iD6P3uuVOap7VpSega6XdwXFrBDcUw9hVnCtjcxs4576zexnv+yp7PCZuIpicyaDjN7z+vLW2O7dyh/5dksyVsFLRTdad+kRidbIsSIqXgNljs/W0z65/lmdLGN3tK5pbURfamytU68jROVsFVxbByu82UzNq/OWJYZMHSNmvlh9NPr8pc94zPRZr3/Zwb7XV3r9M5Pp2+1XC/CXWF5o7fZbbG+tU6MbKBpJrfBlvkDLNKq3rpsNnqiMR2L9OTvKj27TFB61FPGVmFkSGMWKxO/MF3o6dr0bBJ5B1M/szCOKC+8uvC3i6JXhLQdIfTP9LNKWf9TyQm+kGT0YWt738L6d19sihvpXITwyyxi9+nvHRwPEPSIVZdI6yEbZe2Zg8P73loFG9fXKsT6JOl4We5z9kucRU03PH17Zo5lXZFv+PKGzmei956C3e/HrZby92Mr0I9snvcsGZVv7w7MT1UGYqf+zedmjHT2sIEbX0/ZsRIvlWwLUBrt+z8vGR2tL0bac00wdozIytz6POq3nY33e9vNevfW5ecdapHM94mdUMt+qW19kpqu2DaP26yUOPV/o92zGO8rwevW2tr2+kkk0vIHGbm9ZFhrNWqPj7H/71LTMzVSVAvzS5QVPdGxQzTTeqDN7drNTR31879KxqKPZjqTRg02281rfzSI2bUBmpsOjAcL6dkaURjbt9uzsoSeE2fiYKa8138f3tpvdjuoUzSS8umViV9O76aInmLMzv5mEpBcnvT5WSdnywsy00ctuZ9HlRF8QZQS3N6rPdJpehpLJTmUa5i2R9DLrXj282ygzt4pGyxtbszBrP1te9vN76xOdY+Z8ez4eHW/b0dbDxkTPzmh6PpvceILpxXDUx7z3e9fZZ7DtkvHtK5YYvsQlYzMn3nPWvR0sEtUoE8pkGl4d7QOdn0lUhvclzStHf83o+cHZGdEjligegVfPaI2xMh5632/o/S2R73UmOTsD6dHrZ1u049W8/JKxjCMyo6clkyVvzYoe/TQwyUL0+pI9R52l9B7qMdoeZT0jRtNAr/5RB5kRGW9AHHXs7AynN5MZ1XFrR7azm5k21Da8ba/+o/XtLQNuth/M9LOZ2e0WXagY2EaUX72QCeTRsa31n3SVYXbpwpu6eNPM7NRzS731k7G8zjqzjDKqkxVpTyAytmc7wj0DQq/8rQO893nkh4yIZm1rol9+kM+2+GskwL14jvrAiHuXDL16P0JPqkX46aI7G3xbRrjePtH0qLWWWh/NlGmvzx0tO9hraLPZZ2/t7p4sUjN7H32mrJFfqoI+KisjBFs79lZBzGZxmecwR7Oo0dPHZtauo/rZ40bP9u31W002Th+lJ4+kPNP1nOWNnN56U2ZKaffXx2WE2O436gCRYEeBNQoqzzfanmx7mUjPrrUZPaYys843g+24vZ9HyrSPjZXMQNcT28yAuZVH+Fnq7bW3jYne8dH7mXiL+uQo69TbmfbJCq7VAO8cvMvsvL5474x5Cy+5OUJv96YvGTuae0bkUV2zAaEbfKYj9DIp78YLT3gzeALg+a332itvtE7n1bXXIXoPGM+8P/q9MnvsKHZG55zxX8bPPazg9mJCE8VWL97kf7Y/zSZE2f167TKzRBIlJ3/L5QVLNDLZLNc7xopfFGzRiHbvtHkmcC0j0cra2HLs1uPssZFgjbA+2vqzNr3XWbzZiLC1LbPCPbK5VYAf4YutbWnfu2cZJsq6ZVsPNF6WHMVZL9ONzumZfI1rahSZUW30xKGeHY/sz+Vkp4OZ6yG3ZPK9/aPpcyZTyXaU2Wmg3mfUoex79hhvSSeb1UVZdqaeHqPlp+iYzL5Rm23JJEeZYK+81ratm/bibeaqH1u/0WymN/sdlaGpEOCX3JG2ZVT1OkW0XjSTFelRM6qnl814wSDZd2vjnxaPArp3t1tmDa13HrYcu+7cW//zyhbf6f9efW02klk6kP1mBlEpb5Q1Cd7txplz0f/t51FHtj6OfNDLJKN26NFLACIR7F2S6PUDe3739Lfe8V4Zs7PPrbOCR1Ka6Xpi1RvJWvu8nvqoy4nsmugjn+iUbfSt2a7nh5lfYfXszWZrnthHg+Q92UM2A33EVDEawLzz7E1rR7Z79LJO+3oUI5kyHjnj6pUV9bd7sXex9QS9lzzZ+j6T8kxXP43ey0hHvynmbfcyPm/9Z7fbfcpyvMu49CPhdN2ixo2yMluHng1ry35hIsfoh3p45UTZvjfA2KzBPmbPfq6z2+i8M9PM7ANpdKzYS6TkOtWZjNj6wOuQdn+v3bRvvA7tfdmpfSz1F3rZsmUUF17M2XK8c/DO28tOvdmL7TPafqa/ZfqvrqfNij290LNKry1ecdfiS34jzWvk6IlirX2eyp7P55uG6d3Npe3pANfC4jleC4IEsT7OdlotzLpMK+C96ZXYFxvLsny6rlFPT8UXgv35Iiu0I3HRSJ3F1z2h8YRH27H/9eCnO6xmt/u/n+r2/GE71+Vyaeu63tiwMRL5wfNHdA5SX11/a1d+Wnz0zb8WBStctkzrC72t69Xa/8fFuq43tjMZYC92xZZGC63XJ71lMi22MmDO9F9tU/s7GtxsnGn/zwzUj6RMdK/Xa3t/f2/rut5kunLCImzRN5Syjw6E8/n86X/UaGJbd2K9rYPABkRr7SbQRXiXZWnLsnyUo8Vb113blPO3t4Ha7Mt2XtmW42wniIJWkI7Ty0qjjmltW0GQulm/y38vS+p1NrHnPZ7P2tWvxabEgRYxHVO27TVetqQFzaur3ccTG7ufjW/vtuAoW+3FhRUp6RuRL/b7/cdg5q1x6/qJrXVd27qu7XQ63fQTaS/xre7TmX7WE13pf1JHeS3nLD637ecN6jbm3t/fS6/XfbroihMOh0P74Ycf2rdv39wvcaJRywam7lDn8/njTzId62AvqzkcDm5Gcr1eb4JUj976uP1+397e3trhcGhvb28f4isBrIPaGyC8ukpgii3502UKUj8RcAl+8YWciw14T9R1G1hfS/3EbiRk2q+9bFFsaft6oLSiIee/3+/b8Xi8EQjtC88P67relGvrqf1i407XWcdFb4Dw4sq7lNGzqdtU+1j3ncgP1he6P+g/nUDoOmsfy38bv3K82Hp/f78RailTJyA2M9cx5sVVL9O1ddX+0GVFuiFl6dfir/1+3759++aK9rPYDZT9YbJ/Op3aX3/99fA1lF52lnGgl9lk8DLF6LVn13tvZMejYmQelbUlULf62r72suitdjM80gdbmY2LmTqPYjdjd1TWvTH7aF9fLpf2448/tuPx+EizYSXLRBcA4B9EKLqlX6RVZmUAAFkqZyovuXoBAOCfype7DRgA4O8MogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUAiiCwBQCKILAFAIogsAUMgy+HxXUgsAgH8IZLoAAIUgugAAhSC6AACFILoAAIUgugAAhSC6AACF/C8T8q6hOkFX9wAAAABJRU5ErkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 3; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 4; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 5; current eta: 0.5, current beta: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 6; current eta: 0.5, current beta: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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ZbNWVu9UY8TvWlkz9izbq+xJmxaj5bTivTq+K2w/Ig61clbnhOSR8e0pq2Sr1Z5X6sYPP/yQXl5euu1VKDoXJroAAN8QRdEN3Ug7YtEaAKDFyllKi1DRjbwxAIBn5OleeAMA8DWD6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABILoAgAEgugCAASC6AIABHJpHD+FeAEA8I3ASBcAIBBEFwAgEEQXACAQRBcAIBBEFwAgEEQXACCQ/wKxy1VV3/zy2wAAAABJRU5ErkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 7; current eta: 0.5, current beta: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 8; current eta: 0.5, current beta: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 9; current eta: 0.5, current beta: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAhPElEQVR4nO2dTXIrSZKkDf/8yyrJRW36EnOFOsEsZzUXqBtVi/RxatF9llpUpSR/AAQAzmJE4ymUZh7Bl6TzSaZ+IhQSQIS7ubm5urlHMLB4fX0NY4wxfVh+tQHGGPNHwqJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR1ZT3zu+8mMMeb9LKoPnOkaY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTEYuuMR/M4XSO4+ny1WaYHxSLrjEfzP/5z/+O//tf//PVZpgflPVXG2DM743//b/+I9bLxVebYX5QFq+vr63Pmx8aY4xJKWddby8YY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xHLLrGGNORrs/TnXiM5O+axeJ9z1ed46v3lvmest9Txx+pX6f88T2++J5+/Iz4+CP1o/K9Y+m76vLzdI0x5sMpVbxbpjsMQzw9PV3NKK3ZRScDft0qA8dVkwm/Xx2LMheLxdVPq7zX19e0nMViEcvlcrIsLYfLy9qu5fH7c8qdajvXkZXL5U+VObdcPb8VA63y+fV76mnZ/VtiYW58fUQftuyt4o5/LpdLM5arcrKyptqu7ylT/qjaPlVuVsb9/X1sNpvy+I/k00X3crnEcrmMf/zjH/G3v/0t/vKXv8Tr62usVqsrMYqIq46/XC5xPp/jfD7H6XQagwHHb7fb2Gw2sV6vY7lcjucOwxDH4zGGYYjT6RTn8/kqAFDe6XSK4/F4dezr62ssl8vYbrdxe3sbd3d38dNPP8Xd3V3c3t7GZrMZ67pcLjEMQwzDEIfDIfb7fRwOhxiGYWzf/f19/PnPf46ff/45fv755/jTn/4Ud3d3sdvtYr1ex2KxGG1COS8vL/H8/BzPz8/x+PgY+/1+bP9isYjNZhO73S5ub2/j/v4+7u/v4+7uLu7v7+P29jZ2u12sVqtYLBZxPp/jeDzGy8tL/Prrr/H4+BiPj4/x9PQU+/0+jsdjnM/n0d/L5TJWq1WsVqvY7XZxc3Mz/ux2u7H9ETGWvd/v4+npabQZ5V4u//+LGTHprNfrWK1Wsd1uY7fbxW63G/twuVzG5XIZ+wL9gn7ifoOtYLlcXpW/WCxivV7Her2O7XY71rHdbsd6UMfhcIjD4TD6geMMZW+327i5uYm7u7vRzzc3N7HdbmO1Wo0xznGAn8PhMMYw/Asfo9z7+/t4eHiIh4eH+Omnn+L29nYs+/X1dYzTl5eX0c+Pj4/x/PwcLy8vVzEHP9zc3MTDw8NoM+ICPkDcnU6nOBwO8fz8HL/88kv861//in//+9/xyy+/xNPTU5zP56uY4zhAvy0Wi7H9iN1ff/11tA+xgH5BX2y327Gf0G+Il9VqdXXsZrMZx/3lconT6TT2Ica9xhn0paUxaN8///nP+Pvf/x5//etfx376TLplupfLZQxwBAgczMeoU/Abgy8irgSFhYAFDILLgxQCzAMM5eEHnYXy0LmLxSJOp9P4GTpfbUN5EGcO7OVyGefzOQ6Hw1Xw8+Da7/fx8vISLy8vYzswqLLsgNuz3+/HAQEbUebz83M8PT3F09PTOFgxINhHmMR44kMbVHSHYRjtzUQANq7X6zGY0V6Uu16vx/LQp9zuLCbU16vVahzY8P1msxknxc1mE/v9fow1+JoFntsKvyLO2AbExGazeSO6EF7+Qbsivk0Q8C/7CD5RP3O5EF4WdU4YUBYEkMs9Ho/jRI+4Q3wg3jDRYXzy5IYYxfvn8/nNWIBPedLi8Q37cDxen8/n8TiOER4bfO4wDGP8sSZwnGlSx0KKGELMHA6Hq7Z+Nt1EFzMmN76V/sNR7EQ4ikWRhZPPU/FA9snlsahz0EK4kJWhLNQJECg4ZrPZXA0wnqUxoCDePLtrIGHgI5AwSFAnfIHBFPFNBDlz4AwMmR2LFk822j4MDC4LQcr1oWxMQNoXsJfbgnp44kN9PFlyLGSDRz9n0K8YmOv1erSPs1nYNQzD2J/aDojx8XgcRYGFgm2HSGo2ru1gHxwOhzE2IehcD45hPyOeOW7hb7yGPYi5LEFB2ZzV3t7ejvYg5hBXLKS6dbBer2O3212tGIdhGI/lpEZ/c//yT5ahsqhjPONc/l2Bz9AO1aXPpuvdC+xAXloDneHwmTqc30e5LNL6XsT1QEJAaxDhHGQxWI7hfBZ8FQWUxfXjPc7AI+JqaYZ2YABgwLJfsv00LhO+QebIx/CyXVcAWfaIupDV8KCB6PL2CmdbsCHbg9SsHj7UiSfLOLMYUvg4nmjhp2yyhq2ZvXgNP7CAoQ5erfC2FcrOfIvf3M7lchn7/X7MijU2VNC1zEwwMCmg/5AFamxombz9weLGMciJBXyhWzIR1wlCNdFzf2bbAZyVan/yJKqrKK1L4wg+yCbsz6ZrpttqYCa42lmMZhKZYznIOdi0PJ4hIZQQXs4cdJLI2sVZDTJkHpjIsBHgaAv/ZJOJZjR8HrIUFkbOTlkMsgsl6mfuBxZnHbAc/Lrs1z7QunQ5x/V81FKPfaH2VReMMrLBrn3C9mfiXZXJfcQxpCLCPtbVHduisc524VjYy/GD8xH7PJ6yPoyIdCxAZJHlYkuN/aI6wHbrZ6oFuh3GZahtvLWRtWNKkz6L7pkuOoFRwa0GHe+FfaRNvKxhsYTgTnXK3CWvfqaDRpdWmk3r76zey+VytRVT+VWDXkVdsxHOQLLBw8dl2wwZnAGzLSw43zsgskwqq0/P0cxIy8h8g77j7FdXJ9oW/jvrJxZzBf5pla1LdPXHVHwihpTWhIgycS62bbLV4UdRjQPUp59pmzWz7sEPk+m2ztPBoiKgaBan5XFHZBfTqsHB5anYtNrbEjMAsdJ24f1KMLRsLlcFsLVvpe3hq786gCEOfCyybR5gOsgzf2Zt0GztvWSZUxUrmTCygOoqKBM0Fmj88PUD+KYi63P+m0W4ike2nX2A11kdOnFO+QrnZdt76s+qvMwmbQ/3vX7O7WolJXPpLbgRnTPdz9qsbmVSuoTEsdlFiEyYWoN+zoDO2jw3i5tqV5b1V0E/h2rSYSFZLBZXV66zyU8nxWpAtARk7tI/Q5f1mY+ymMgmxSo+eMKZkxXPbcucSX9qa2ROf1fns8hndWeTfyvJYXHXaydqq04gWbuy8n8rUxfePpquoqvoIGOyjuXbbLCMzsrjMjNxmjsr6t4Znz8l1vwZz9yVTdkeVUs0cS6yKc6G+Co874lly7ssa6jqajF1TNUG9DNfFNH9fD6/5Qu1ARkmMnFMGpmt1fuVMGVMTdDV4NbtBd6P5NseuQ+z8dKKGe1f3SvVMqqtK46VbNxWcTYljjhPt5Yqn/JF9SpZ0PKZ3tkt86WiG/E2q9Gg4kDMMpgsa0QH6l0ATOb0bA9QA4ivgPNSLQv0bJDhokkV1Cz0yC4zW/h1S5izq78V3DaeHDizZVvxW8udI9I8wHgA6QW/VqasbdV4WC6X410QEN737C9yH+uFPkxyKJ//CUJjujWpqZ95kkC98IvWwT7RbSG2G3/rWKguSPHtYrARdegdRdkY0clSy8uOw2u2MRuP2SqIxZfFGsnZ1L5ub75MdNWBrQtkmbN53606loUBqEDx+ZqV8m8uP1sy8vIJr7V8DqpsolAhRRuxhM0EnwcswEDjOwz06jq3t5W5IeviJSeLj2ZMczMKHWCc4WZCXmUxOvh0Asd2CNpZTcKVvRwHbF/mD00OGL2ohTJVzPmfEzjhYH+znfjnkmxrhH1QxZvay9sn/L4mPVmmnPktGwcq6Fo/25z1iY5rHbNqg15vAFUcfTZfvr3QClQco0zNVFmGp+dzEGYDrQpU/OZMLeJttsu/M+GtLiKwjYvFt/+yaS3pdA9OtzOyAQu72H7+LPMnl5tlXNmElgl7JQDcdv49Z8+NJ6msXzkD5vfY1iwzzXzKkxxnkVmc6Z0GLIpaJk8S3N/ZbVLZVkIm7NxOnaB0bGgiw+fhM57Q2Map+qpkRvteLz62+j3bfuCxq++/vr5e7StrWb348rsXpjJcPl9/Z7d0aVbMnarZUuvqqXae2lIJTmtvF7TuvOABz4OAMzYtW9tWwcdW/ZFlS+wb9YW2R0VG66sGBfpzju3Z+0DL4AuAme06+eK1TkJZ31ZxO+Vb/fy9fZe9z2NB+6MVa/qPBFldOqnziuw9wosyVcD1OBVkjSPefqkm2Ky9sFtXpD0FN+IL7l6ogm1KHHEMixBmdi2jEkoOQh6IfH72d6stPDgzwc22L7KB1xrAmoGxOHAdVfBwoFdL7Goyq7LMzLd6Rwhsq8QqG+SY0LLB3LoYU/mF7a8mUbaVy8r8kbWf/YBJB2VNbWe07gLhcnFMq//5WH7dijU9Ptt/rrL11l5uJrZqE1Z82XUctDET3pYeaBvV7swnv9u7F1gkp/bWdOBmwZwFqG5XcIehDH4CkZ733ragHP6/9GzGrQbS3I6eM1i4vuzcqn4dPFMTY8Tbi504jgWWM0a1vyUsbENr4CrZfp2KTUbWBraf7dFzWhdp5vp3ql1qY3XOb40nfr9qr25Xoc7W2MmEDrAOZMKrF8fUxjl60IL1qCfd93Qzx6vDswGP19nMhXPRURFvty1UcPGjV5urTJnr1AmEy+UZWgOSy+Vsiu3X+hjOxHQfTP3Dn/FyUFFhzLKiTGyzK98R3+5/rtrAfmCbNbNRm6vBldnHx2s9ek7lj5b9aLvGrq7Wskmn8geXx5mlCl010VWTjGaP6rfMF+pr7h9kp1znlD+zzDKLHb7IjG2AlvByHfp+luly2zLbevElD7xhsqwpO1Y7n8/hwNTfEZHu4fA2Q+s/vjJ4Saj/paTiweD11JJT262BrQNdfaLn6BVyLTurD+9zRsP1ZGI+J3Azn6jPeCLMssJWRqMrnOyilZ5TDeKsPp0QdHLSu0+mVlHsX91Swbn8YB71SXXxDOVMxZral4kkCxfvp1biqbAo6iMc1ebsegb7dI7g4rXGBXzcO7NVun9HmmaS2YzLAqtZQjZoEOx8aw0Grg62zKapv+fAtmbBX2XPWRk8MQDOclarVToQcRyLv05EOvNXNrPt1VOlKuHKJq9WRsrH6sQwlTVzfVlsVXVo/VMDWsW1eupcJmDaFo1LFuup/uOy9UHdWbxUCYDCcaETb5UJtu6oYf9pPdX7/Hcm5pVYagxX421Kf3rxJbeMaWfx/Yk8g2fOVMfqIID4ZgLKgai3QGVlZnBAtMRUMwQts8owsqU+/mab2XYe/Jp94POpLHcqe4y4ztDVfq23miA1i9U7Mj46+HUAq/Bp5pNNQipobGMrk2xNEoxOAq3+y7YSIMBZgpFNuLBhKsNnssmMX7f6jbdMsrGfbdG0hLw1MbCdrAWLxdtnU38V3UQ3m2WyLAw/+n1FLeFlwcV/COm51cDJBDmbafkCS+u4OTYzvJyqBmlV7hzYziqINYPQQT8VpDxR4nzNaLIBlpWhg4c/qyY4ntyyMrO26O/sDgX2TZa1tkQBZL7N7M/uSvhIOFari3/4u1V/K4Ouxgw+41UF91m11fD6+nr17SIR1/3UysRxrtrH13GyyagHP8R/pLFoohNat4LoPXoR3/69lp2oWQFfqayWfXOENNsCQHn8bQLaXq0XNnK52Tmtv7N28nFzMpGK1vktgWuJr77PAye700HL10yVP6/EpJrYK1HN+rWKl8oH7xXOzDa2K2ufnp/9zfZoW7M+zOrj1Ujrop3CqwidUPCaM2CecHkfF8Kb2Z897zpL6HCuPlT9K/ghnr2A3+xovSChFyX42wd0P5edjHP5ti7dh2M7sr0z/puDERfSEBD88OfFYvHmX35b2Z2+B39k2bmKgwoYH89+rc5nuP1VllxlZPo+f62Qrk7wo7eHqU9aYqI2Zf7kOtmvVZnZ/dstwVUbVGS0DznT4vMR85lv52R1/JvL13OrTFrL14wSwpdtZWlsa3apTxdjP2lfaCYKW/i/OFGeftUPr6RQhiZoXym24MtFl+GARaerYzmLVXHInMydzN/kgM9a/4JcwfahXHzTBIKGO50nkSo4dTBlA5izDX4QTlYmgrb6Bg7NLDPbsoyBy9Dzs+yHB4/eYsX1VBkTD5ap7HHqc83aOTb0b/WJ+iabyPSWryrzZWFB36Ic3iOufJuNCxyjwqU+ZF/y55oNIjlhYY2I8Rsu+C6G98C2Z77QpIPbrr7mi4goC88J4ecZ/2h0F10VCc1O2KHITvl7v3hfKvsGiqwOHVRcd3bbS5aVKjpI9V5d2MHBr3/DNi1Tbeb3Xl+/fTsqMhAduKhXl9TsY/0HEfafZrb6OmuDTnLsg+rZxRmVuM4ZPFmfZe9lMadCxudmWXKWdXNWh3JVGPiz7Ml5Ed+e41BdVNWvm1d/41y+x5V/NPZ0gsdr9Qeejtfqv8zPTDVR6NjkmM36EH7lONZ+4tVxlRB8RebbVXSzpas6hIO/EjJFg4rfz45lx7f2b1uoyEW8nTiyC1I6aHnvGmQZmNrPFwz5Sxw5488yu4hvXxiog6LKmKsMMRNSHTwR+T6gCl8mWurTuWi/Z1mf2pz5e7FYvOnDzDfaDrzOsjFtl/ZdltVlgput3LicatlfTfyaCKngV+1+L9WWGaM2Z2NbbcWxnOFm+7daVqvsz+JL7l7IGg00O+AfHeRz661u8aquxOpAygKb947wmwMqE3M9h9/nAVJluXwsZ4+c9bPgcvvYfywyHLD8hYuZH/X9KmPMjslWJlNk5YNsUuM2vncQ6YUztUEn62ywZufySgif80VjLYv7hh+8Dhs5MdFJjsvkMliINc6rFYTe5sXbTPg8G7ccy9wX/MPbBvr+3H6rYkMnO6YS2+9NvL6XrpkuP4SZf+vMPMfxmXhyp/FzYNm5VUdUnZ5tTWh2xhfxKhtb7+nr7IJKq2yeVPRvPq61WlDxxnH6DyfwSZa9ZWhWNUes+L0sy1d/aFkt4a0mfGTZKq6tdqlPQJXpZ2VwWfib94RZSDl+NV6yNmYrLW5zVi6XrQkFiy+fzxNgNhlOjW2NWdYFfJ7F8xTaz4hv3nqBJr13kv4tfGmmy87kq5NV5qmDJBNe/LDgZmRL3YosO9SlqAa5BigHqoowBld2cRABy37JBkDlW70wg0DLvuqoEkYdBNoOFrlKXDKx48HOS8HWambO4FDbuB28Isl8l9HysW4X8T4i16vbBjpZt578xn7RmMBxWUaptrb8Vx0PWzl+dRxo1t7ql6kxl/ktE9xq9TrVTzrWWv3+WXS9tIfG6X7j3Ea3gioTci272rZoBQCfy8s63het9l5bf2ft/56Bn/kQr3WbQf2eTUp6PIt7JcLVNg3IfNPqpxbVpDPnvKzeykY+JxMufdA429V6gD78xedpv2TfyDDV71NimpWh51VlsdBq7L/nsZfZj24DtMbxnNhvoefoVw/1omumq982EJFfNGqJYmug8cDAjIb3tc6I61tMsqCp9uhwMYPv0YX92cxfBT7XVwW6tr+aJFQUMiHXdulkwUvD1uDWtnHZ/Dn7TL/yR9vOg+0jb/NpTQgce9mjOSs/VEJViVnLz3quZq1oQ7UFU8VDqx1qe7a6ZNvRJ4h9bMWs1+srm7W+zI7WHSL4myct2JCh8dLSjyoxyrYFP5svEV28Bkj1WdA2m82VoOlgZnTWrIQj2496Dzox6B0W2f+/47XuLXNHZ+dwezJbsRxXIcvaymVyuXq7DXycBSgvjafgeiK+7a/zPnvrPs9MuPn9lshkopIdx33Gv1sXQqfarK/1egBvB8AH2dYDiwm3OZsk8De3GX2fCZu2iy+WqY0af3xngNrzPcKlsVqJfhaP6mv+HJMBj4EssUI/6L8LfzZdRZf3sTJBgIBtNps3VyBbDufnbuqsCKeibL0YUTn7PaLcytSnfJJlsdx2XX4tFtffQJtd/KoyuupWPM50quxgzmSl2Rz3HfqAl99ZmZr1gTnZb5U9sn0ohwUrmzThX21/1uZssswmORzLmT8mIm1vS4S4L/nfY9kHqCfLkqsEhgVXY3juhdPML1q3TgIYo/gmaG4rryCz2xzVdk7gNptNOcZbevTZfMl9utVg0NlbB5o6Jpv99RiuD4OInzaknaxP8pornq2LCVU2MBVAVdaJdmLgVv5plTW3bVnGWR1XlVv1m65gNCvRrYbKXo2nar94ql/Zlvf4aa6PMhta9rBdEfl1BZ7cIDZTE6S+nyUrKC/LRltt40mKhRBoZo+vlldd0HGtsduCJzVeCWRjJVsVfjZf+m/ALFRZgHPHtZYgWYbBTC1hKniWzYSEZ0v+//Bs+0DFrwUHRGtbpXUO6srOZ9vnZP1aB2fG1XFsj94eqBNudj5ngAz7kevgenF+axLi4/Vujve2r2pHdnzE28dbaps4/lUcpshsYzj2dDuB25DdvZCJI5/LWebch6erqHOZ+N0a15zwcCyzXVnb9O6dnnzpN0fwJj3DzgTaKTz7s3jzTP9bbMs+ryYGFjAOTL46yuVgYFVZOUSbA1mPYTHTAG61iycKtq2VzWh/cObOy2aGl7nZFf1WH+Ez/YYCfnAK+xL1aV1TdWi/VT6r/MQxmcVd5jfYqn1X1Z2JE09IKrIcPy1ft1Yk/LwQ9W8laFkMaH3vQbNkFna2FX9nWqH2VHrzXtt+K91Fl4WEZ3UVMl5i8nutwTTXeVxX6yIAbOBA0+wXsM1zxYWZc44OALynWUjVHh28XKaWq3XyuZo1tK4uV/Uylchly2BdKVRX9iuhySaHTLwqWND4glV1btbmKUHUtqF/OfNHua1/6GABzurJzuMYa62CNEvm41oZ+Xv3hrn8zP4prcD5KEOfnjZ3y+Ij+bIvptQBgPf0K0haAR1R/2cSz9p60YKXk1mAcDl8MUW3DSK+7R9VwVRlIxycmiVBWNbr9dXDTTD4qra2shoNtuzOiOpqOdfDV9WzergutZNFoprsVAi4TL54BLIH/mh5aiPaulgsxgtRKD97PmurX6t9Z/W1+hn+4PZlWyLVZIALRWyzxke1ImMbeNKoEiF8nt1eiXbgp3WRlNsc8e3WMM762QeZ37OtAR07aB9s5t96XO8sN+ILviMtIr8gwmLLQoPz4GwdBDp4eekHMDCXy+XVc3g12Him5KDFORgcqJdvb4P9PPPiXBUSHhywha+gb7fb2O12sdvtxrJ5UA3D8EYY+Mlj7BO92r3dbq/uM9b+YYHAVeWsvzRoUT4LAYB9q9UqhmEYl/P8sBeFbcbtg9vttukP9XFrkHHfoXy8x3Yvl8sYhuFN7FVZOOxGeRrLWnaWLWrfabmIjVZ8sKjqP7mgft3H5sle73DB5HK5XGK9Xl+JKy6G4e4DHT88UevKgs/F+dz+LMlRmzVRQ7t5VcpbahwjWax8Nt1E93w+x36/HwcIB5QKbpXdwXHDMMTlcrn6fTqd4ng8jp3H342EwTUMwzjAdCAgILJ7iReLRWw2m9hut+NriCMPMBYr2M6zOtvMA4AzCJR7c3MTt7e3o9CgvNPpFIfDYQxivIa9mi1B0JHV4dm/1cSmbeBysyxGb3niSYjPR/9wXeyXbJJA2RBe+AK3FMKf8I2Wmd1kz0ICX2y323Ey0kEbEVf3cXJ2xv5ATMMvHMv6NDCeKPF6GIbR71wXl4syt9tt3N7exs3NTex2u6u7cYZhiOPxeBUvvErDWGKf4auxWKTYbh4Lq9VqHGfDMMThcIjj8RjH4zGGYXiTpfKdBFnigXJwvo5brGr467tgM3zGqyvWDdTHT+TLHgC03++bWyIfTTfR1QEJh7Kj8Bl+R3zrHHQMMia9YwABglmeA0BnQc3+ADpDByvbjiz09vY27u7u4u7uLm5ubmK73Y5lsb3DMIx/n8/nWK/XVxmBCu3d3V08PDyMZSObgcicTqfY7/fx8vJy9c8j6/U6jsfjeGM4ZxosLrvdbpwsIOYR37Ja2L7f76/653A4XGXtEEL8cNl4zRfZ4IPD4RD7/T4Oh8Pom+z+TC339vZ2nIS22+1YLgb8y8vL1fYDytZy4YvNZjOKFtvNYoT+22w2o7ho2fAHMtDtdjv2G2eiKmAQGPgEdfFXTqH/4AfE3MPDQ9zf34/Ci7IxCR0Oh3ESQXxA/FTUYBtikP3O4xD+0NsteWWJ93WMZdscGLcYX7CR9ULji7WBbc5WQTwO8ZvHNmIdOtJzm2ExkVZ/WM59Op3i8fHxytFvjJloONua7X1Vn1V1VPVVy13+mwMpWyJO2VUtfau/9Tzd6+O/57R5qu3V7/eUW9k9VW5WZsvuuX6obG35ubK15Q/d6pjr6/eU+xHxUdmY/Z31my7Lp2Ika3t13pRdU5+16tP3LpdLPDw8XF0r+ABKg7qJrjHG/IEoRfdLLqTNIcsafzTeuySZastvWeLM8dNH2/s9dXxvf86x/bPK/gw/fE8dnxkfPWKjF9+jHb/L7QVjjPkDUar4j/dVmcYY8zvGomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdMSia4wxHbHoGmNMRyy6xhjTEYuuMcZ0xKJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR2x6BpjTEcsusYY0xGLrjHGdGQ98fmiixXGGPMHwZmuMcZ0xKJrjDEdsegaY0xHLLrGGNMRi64xxnTEomuMMR35f8u9pfTW0V9aAAAAAElFTkSuQmCC\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 10; current eta: 0.5, current beta: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 11; current eta: 0.5, current beta: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 12; current eta: 0.5, current beta: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 13; current eta: 0.5, current beta: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 14; current eta: 0.5, current beta: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 15; current eta: 0.5, current beta: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 16; current eta: 0.5, current beta: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 17; current eta: 0.5, current beta: 16\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 18; current eta: 0.5, current beta: 16\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 19; current eta: 0.5, current beta: 16\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 20; current eta: 0.5, current beta: 16\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 21; current eta: 0.5, current beta: 16\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAsCklEQVR4nO2dWXJc2dGkI2cACYKDSJlJWkQ/aRv92E+9sTbrBXWbaR0lMxVVHJBMIOd+qPaLLx0nWVX/Xzyqv+RulkYQuMMZIjw84px7c3Q6nSoIgiDog/G/ugFBEAT/TgjpBkEQdERINwiCoCNCukEQBB0R0g2CIOiIkG4QBEFHTH/i79lPFgRB8MsxuvSHKN0gCIKOCOkGQRB0REg3CIKgI0K6QRAEHRHSDYIg6IiQbhAEQUeEdIMgCDoipBsEQdARId0gCIKOCOkGQRB0REg3CIKgI0K6QRAEHRHSDYIg6IiQbhAEQUeEdIMgCDoipBsEQdARId0gCIKOCOkGQRB0REg3CIKgI0K6QRAEHRHSDYIg6IiQbhAEQUeEdIMgCDoipBsEQdARId0gCIKOCOkGQRB0REg3CIKgI0K6QRAEHRHSDYIg6IiQbhAEQUeEdIMgCDoipBsEQdARId0gCIKOCOkGQRB0REg3CIKgI0K6QRAEHRHSDYIg6IiQbhAEQUeEdIMgCDoipBsEQdARId0gCIKOCOkGQRB0REg3CIKgI0K6QRAEHRHSDYIg6IiQbhAEQUeEdIPgV8Zmf6jt/vivbkbwG0VINwh+ZfyP//V/6n/+7//7r25G8BvF9F/dgCD4veG//7c/13Q8+lc3I/iNYnQ6nb7296/+MQiCIGjiYtRNeSEIgqAjQrpBEAQdEdINgiDoiJBuEARBR4R0gyAIOiKkGwRB0BEh3SAIgo4I6QZBEHRESDcIgqAjQrpBEAQdEdINgiDoiJBuEARBR4R0gyAIOiKkGwRB0BG/mffptl4xORr9x99J+hOvrPzF+M+0Jfjl+KX28GvbT/DL8Vvyud+yPeR9ukEQBL8+LjJ8N6V7Op1qv98PP59Opzoej2f/MgCMRqOzj37Hv/v1/dNqw889Vtcfj8fDx9vjx3qbW21vtYG/59+83byft6s1FhrXS+PZGhe/f+verfb+3Ha32uHt/ak5aeHS8fpw/njPS/dzW/uaDV46t3XeT9mtjvH28vjj8Th8fm67W+36Obb5NTv1Y9mu1rF+70vj+lPH8t7+86U5dTvw8Z1Op92UcDfSff/+ff3tb3+rw+FQq9WqVqtVffjwod6/f1/ff/99ffjwoR4eHupwONRsNqvr6+u6u7ur29vbur6+rvl8XpPJpCaTSU2n05rNZjWdTms8HtfhcKjHx8e6v7+v+/v7Wq1W9fDwULvd7syR9/t9bTabWq/X9fHjx/r06VOt1+vabDZnkzQej2s6ndbNzU29fv26/vznP9df/vKXevv2bS2Xy5rNZmdtmc/ntVgs6vr6um5ubmq5XNbt7W3d3t7Wcrmsq6urms1mNRqNhrZ++fKl7u/v6+HhoTabTe33+9rv97Xb7Wqz2dRms6ntdjv8fr/f1+l0qul0Wre3t/Xu3bv605/+VH/84x/rxYsXNZ/PazQa1X6/r9VqVT/88EO9f/++Pn/+XKfTqZbLZb169aru7u7q+vq6ptPpMCbb7ba2221tNpt6fHysh4eH4bPf7+t4PNZ4PK7JZHLmoDpX7VWbt9tt7Xa7OhwOdTgc6nQ61Xg8rpubm7q7uxs+i8WiTqdTPTw81MePH+uHH36oDx8+nM2fzl0sFoNjaK7kNJzb4/FYo9FosKHb29t6/fp1vXnzpl69elXX19c1Go1qs9nU58+f6+PHj7VarWq9Xg/nam5ns1nN5/NhfvWZz+dnTno6nepwOAzjNJ1O6/r6evhcXV0N5/Hc/X5fDw8PQzu+fPlSo9Go7u7u6t27d/XmzZtaLpfDXG2327q/v69//OMf9fe//72+//77Wq1Wtd/vazQa1XQ6HT5ss3xlOp0OdvrixYvBNieTSZ1Op9rtdvXw8FDr9bru7+/ry5cvw+fx8fHMJjW3u92uVqtVvX//vr777rv67rvv6sOHD7VerwfbqXoivcViUTc3N/Xy5ct69epV3dzcnM2tCJHzJx5QW4/H4+ArbMt2u62Hh4darVb1+fPnwYYmk0ldX1/X69ev6927d/Xu3bt69erVMAaTyaT++te/1tu3b7twYTfSPRwOg2HLoTebzeCcVTVEH5GqSErOR4UnQ5Lhy9ll/HIEES8nZrvdPouIukfVj1FvMpkMbZpMJkPb5JD6XVUNRrDZbIb2eWDQtff7fa3X68GYHx4earvdDtc4HA7Dv1Q+cozRaFTH47E2m81A3DLm0WhU2+12MDo5jvqoPu12u4ukS8J9fHys3W5XVTUEGI05+8xzOKfqg0hwMpnUer2u8Xhcx+OxptNpHY/HIWCuVqvBseWsVU8Ez8xIBKd5cdV3PB6HPq1WqyE4X11d1Xg8HuaBZEI7I/GKqNQGtV3zqqAoO57NZmfBZ7vd/iTpivhl4yKi4/FY8/m8TqdTbTabYU4ZYBQMPQiIjA+Hw2DTDKKy3+l0OtgFg6hsQESrOdF5Gmf5CH2CbZANz2azM5/bbreDXfN89Vd+u9lshrGgPci3NfeaAwYgzafautvtBmGh+8k2euGbk64Thf6Vcx6Px5pMJgNpjEajms/ndXV1NahbkaIwHo9rt9sNjiwDJtmRaKkWNbhSI7qeJlpGvFgs6u7url6+fFkvXrwYPre3t0O72L+qGkh9MpkMSkNORkNbr9e1Wq0GBSFykqGpTXLs2Ww23Iv9X61WNZ1O63A4PCPdT58+DaQuo6TSVvs1LiIJKl0pcBnxfD4fnEx9kXOyP5wrkTUdqKpqs9kMdqH7aizUNpGB4AFJcyVC0XlVT4FK/R2NRrXb7Wo+nw/tV1ahQM3AJ8xms7q6unomDHQPObKISdmIAo/GloSrfjHr0VxReLDNJN3ValW73a7G43FdXV0NbaF/UBDoX13PSZdZkhOvhIzGgkJH9l71o+h58eJFvXz5crAZjS3n6urqasi0dA0GO82l/Ec+wNKkztG8ETpXGZIEluZd87XZbGo2m9VsNht+7/78rdBN6UrRnE6nwcHk1ExBGLU1wJo4HjedTmu/3w/ES0KazWbDJMnRqaB0TUZf/U5OfHV1NZQJlstlLRaLwWBEunJUkjuVnUiXxz4+PtZ6vR4+ahP7/LXx0N9ErnJGke5utxvSQ5VOBBHNYrE4c0oGJhEgHU731r8yUpVqSPKPj4+D00kpKmiwFMD+KE1kGYU1Nx0jZxExaq7UdzkQ1RTt4PHxcTiGbZEilRCQQ4tAdU/1QWOpcWCq6/Mn25JaoxoUackfXFhobmWjGu8vX74MZMcszOuYsiuOh9rMDE6/5/zTR0W6VKNSh1LPi8Vi8Bf1RUSu42QPCv6yL4keCTC/l/qiedEcabw1Xpwb2Y4Cr66h7EwBhO3pha6kq6jDtIspG43Gf+fpNgeWHxqFKxqWMmh4it4iOJGrPiIOTRKJlCmOyLfqSSEtFovhWDm+Pup/VT1zHC5IkHhlIEy1t9vtmfFIfTIlH41G9fj4OJAl00Dek4FD49cKgryPAojS3v1+f+ZgMnyRClWL7sn+cv54vK6hQKX2STUpO6D96HzdRxmRp5wMnKxJK5NgSUvz4dkOCYykrjb4gpBsgnVSlh2q6iwFZ71f1/U6uytyBkuOyePj41mpQ+TJ2r5sVGSovitwMTDJR+QzCvbKqliyYbCSrWjc9K8+7B/PEfF6Cc7FifsT51e2pHN6oSvp0umoXlmPc6JtGQyVrUBj9qjXGlA5tJxF1+aCg9Ib3Y9tENROOZDIgCmaSIc1ZVf4VHYkN42J19FIliIHnUul5ip5u90+2/HgYyenUlnAg53Ir7W4ItJWm9hOkRCdQ30kiak9mhdP93i9lg1whZptr6qz+zGYu5Pq9/v9figXsASjcRKJiHR0X6paXo9tdvv3eijrtmqLFB7HhXZCH2GwZgZA8pE9iHR9MZRBWIvcBNvPzGOxWAxrBwo4nBfas88rfYLzqr+57ctuOa/sa2usmd2pH73QXem6UmMErKoz8qGzucG6wtXveDwNUAqIdUKSuj40CrVFJCMFIKdqOZPuy3NUDpHSlTpWfxnRdR0uAlLBuxomwcmx6Hw+Np41eBt8h4ireKpNqQUarPqp/jjBE8xGOH5qb8sJWSP2RU6ez8DMMfDj3J5YU2V9uerJhrVQpvMUqD3LckXrQdsDH8EMQCUW/Z8BlRmPfk/y1hhR1OhfBU6NF0m3ZddU7iplKfAq0Lf8h0p3Pp8PwYp95+I1A31r/lrzfYkbZCsMQhxfqeXfLek+PDzUbDY7i05ybB2jyaFyowFw4Ol0VXVmWH6OSImOJ6ci0fl1qRC58q66KMlT1+UildIs9UVkxfM86KgvXNTxGpcgx6Ia9tJMK3jR0DQ+JDYdS2en2uJqv9rHMXG158GRqkdtZttJUrQXLojoHqyRckxIghxbEpXaw777PUgSyiQYVEgqJA+1SX1o1SBbKp7t8zltZVte2uJiHceYx4t0WUI6nU7PargeuFgKYnlJZYhLY69x5QI57dEFhS+SaayUNV7KZmlXEky6vgifxNsSDt8aXbeMiYA0EKz7KSK5GuEqcNXzsgBrRDpHRMFFOJ3LiCfjaq2CVtUZ0ahMwFSduydI6lTWXJkVeXPBSH25hFZKxd9zzDhuzCSodth+lkM4pl7qkBOwDkY1JGLSGHvZhH0h8bp6d4LyfdasKQo6Xw6kmi3b45kE555jyeN5Ple51U6l5bz+pfIBU1mON/tOQuW8ObG0FOAl23DweKbVIjH+npmhp+kKuFoU5k4XV430B+551ngxWPD/DPScm1Zmo3GTzZJTSOrMSCggGGh6oPs+3ao6qxNpIDjAHBASr6DzuA9Wjlf1RJZ0YqU+VefRkCk17yHSFtF46u1puNfQqAxY59SHNTk3IlecOuZSeeFrNV8ZG53YHd3vyToiAxi33XG+vJ2+6Em0yINgaYZKnw7nNWFXeqwNs20/px2yLZ5PZ9W5GhfNu8he/ffg1hIAHthIzFTfHBtXcjyGmZbbCsdW7eCcehmI5ETbVSBsbS3jAqTv9qD/MJtzW2KWSvJmnzT2PJ7Hqf3c3ubjxACzXq9/v6T78PBwtsmZakeOxAHlqjKJj2TJp9JcvbjK0D2lmnSc4GQkQ5IBqs7XIh2lpK10kNGbqpqpne7PcWHq7DXCS3VC/V3XZTDwcdb92X8HycmJyp1f7ZTadcVGpf014vV76RoeaFt1uVY7v3Z9/d+d0oMydy20FObXVCbH9VJpjEGENVsvDVBd095IUpxn2gO35fmxFBJ+bdVEWVKiXXsGpFKDl2/UTvmpFvM4du5bbKMEgcqCrAEza62qYUGPax2tkpXKnr9b0tU2lapzw/BNyr4/lFGQBsHVY6Y//NA4qAiZZrqjqA2z2WzYX6l9hJfIhwGEBMBUmaSr4/Wv2kOCcUdi/9jWS/UokrdvdeMxVU/KgBvgSZJyPHdIXU9/U52QRnypfsm/q18kOV2fmQ0dSaTLcWMG5SSi8bt0f2ZLurfsTPdkECR5/pzx43U1HxyrVkBvzS2J2slVf2cGqH5ThLA0pDnkfmqfN4oD9y8qX+5oYdupmPV/7sRwZd7yMfIFn/5039f8q5yhY9RGBSD5oR7K6YXuD0foCRpFKRLPpcUKd1aqJ68ZugL0qEnDaV2TE6hJms/nZ2kTr99SVPx/Kwhosr2WysU09duDhde9v/bzeDx+9s4A9VF/Zw1PCw1cbPAMRKRKZ1fQEEkpXaXDtMa7pcT5ewYo7gVlOUjnKMUnkXB/NWuILO34/DuhsXzEc0i4ug+fQNTc+zkaaxcaLYFBBcix5Ph5mxkEdH32Udfj9Rn03HbZ/paQYRbHXQxfy4YuZSEtNdpSvbzmJZui0Kh6epqRQkhEq/3rvdD1MWClIfq9ojxT0arn6Z2n1iw7SBGzjOBPrPi16BiMvLp+Kx3iRDFF+6l0ks5J8mSbZBxSGiQTjd2llJkKgESuayvaO3Gwdqv/+4dzx1ROH6+vtp6o0hhS5bT6zzZozHz+pNT50IWefNL5VDokac5JS9V4gNc9/ckl9ZPjoPOdoEkgrC/SFjXP2sXDDEzXvhTcNbZqr9QtA6jmTWUB1p7lg632uB3zfq6YqZxdmeqaDOguuNz/3Yf5VBv9kbsOaE++tuLBgmUWjQ3F1qWM7NdCV6WrtEMDTYXCNJERmI4gwp1MJvX4+DgY8mg0ahIuHUIfTbw/wTWZTIbN6FRLrg78ZS40WhoRFyGYgns9W4QrlVT1RLoC62hUALoOFY8rtVba1qq3utORMNVvvk1MRMIMRXNEwuU1/GcRhOaR7eK8M11mnVtEczqdhk34DJrqH8sRIh6/n+bHSZfEW/W0CMwnyPT0oatTXoNZnMbX0+9WxqMx9axNdsD503jQnngttZuCgYRLe/Hsg7beIj4nW5XjmHH5zgU9PMGFco1Li3jVDu2X5/ZLcoULJvZbHz4NqrcM9kL3hbSbm5sajUaDQYhEWVej+mUtzleoZVByOE956NyKtpp4kq4c39WVjIcqRW3RdamoqJ5bNTBXiVXP01i1qep8tVn9YXBh/1opl8aMKsdTfVc6viix2+3OXvGn5/5dVasvajdJxRf8RHIOjhHJgQtObDevoXMYsBTkPDVvtfFr12dfda5qgyJe2gjVHDMC3pdZGonGU3O1hTaksdIxTu58JaUIzoMKr+VK2lWjfidfoU8KJHzNObMOvt6SpKuHh1xttsoXVT8GPe0NVv24NVYaT/XLCZyLeL/rhbTValU3NzdndVwRpoycjk9HFWm0IjSjmTu3G5DX0zzCVp0/pEEFSRUkovY0VoZIktTWGipwT0F1XRIGHy7QNfkeCY2XXogi0EG5JYhKhu3nyryrmIeHh+EVknzvrO7pKRxLCT62TpKeotMZqESULVxSI606HVWWE2YrY+C1NP7sF+2J6t+3Rp1Op+F9Hcx+tPPFFRfTXgY83o9jyHn3jIH1XJZqaNeaV75shpmbrqcxYKpOgXIpK3BVT7EjwcM2aUzoAz5XLDHs9/thb7Ce7vSgxn5yXHkN7s/VW9t6oRvparD4og13PCollgZaNV2+KWixWFTVuQKlIdD5/SO4EhXo7HIeT8VdZVJh6lWJSodk3HJC1t9EoAKvK+PTU0B6DJXn6Xgaa1WdGabuJ2fQC9bVT91DK9F6kQ3f+8uAyS17rsyZanOcq+qM2GkjzHJaKpRj4mq3Vcag0tdYeEDgvAlcK/DMRmQkstDLs722LsUpFXw4HIYArD7yvRXsC3dLkKC4LiK7Z537kh3yRTZ6+5wyH2V0LM94UPX0nSU7Dwwc36r2omDLB9UXzq/OYSnAXw3L41niY7DxYCvi1ZOmrczrW6H7ljERAFUr05+q85T7cDicrUDLCWTAqumxZsdaYcspGeGVevBF3iR8/cv3lnpw8FSR7dO7ZvUWe6ajIl8qBxkRlb6uz2920DhWPb0PlQZL9cg0T3+fz+fDG6GoPvi6TX+rFdurdJFlGaaCnm3oZ86DFsFY52RpRyCZ6VzOt/7GFJ8lK91Lzss6JInEy0H7/X7IxBSo1HfOM4OViFb2rJ0jHF/Nr4KYL/qqH5xP/V22SlXMGiptRjaqjEVvg5MN6Zoibe5kUZ89SHq5hsRIctf9XTUzKPj1mI36/lrNo78bwstzDIqtchLnltvcfpflharz57arnm8daUXUqvNXupF0RQoiWh3rpQuqVZ1LY/boSeMTQbkRVZ0rDzq8pzgsL4gwqmpovx4akRpSLdLrT/7uVe4J5co5gwnrjiIt1qK5lUyEKdJW21krlUL2dwUzdXZC09xqzDT/rItyUVT94HW4DcsdSHPFOWMmouNZD1c7WiWIVnlGY0qCk1Jl/7m4Iztkf+QHTiq8PudH86k51LyoD1LU2tqohSnNs8idj+tqTr1UoTUW+qnarHv6ljCWvnQvloY0Lyw/SHD4dTQXLkKk7JVVsO+yF98aKeJtZbTkAs3xpdLVt0A30nWlVdV+AkVGpxfj0DBlDJpQTYIMrFXn0h5bRkWPgpdqkWqPvxDDi/VMD7204aTjv5fD+leX8Petr0+RE+rarOWx/kbVydKDBz5PvfwRT16DJKXj/QXgl8oAXsahEzBl9bnRzwoK/ncFAxI9x5cBkjsP1A+2k+mpAqp2uLRIRMdqDv11l7pmy+E9HW/VZjW/6hfrwSxj+HY1ki7JlCUD+ifHoWWjDKoaA46zb/Gi37cEluycfuOP9lPl6h4ULiovXl1dDR9fQOQ1SPQkedrMt0Y30h2Px0P9kFuERFxUAjI4Da6cjV+JQif21IDRVP8XmM7L6amyBN7bjcXT0JYxMU1S6tZSmnx6iUbRKnuQMNxwXLG10iupYz62KRJpqX6SLslO9UyBCxNUxSwXsR0kW7abWQ6VLceE53Hcda6TE6/Bj8iHaLWzqoanEvnVNb4ow7KHj59sQcqYr8X0p7LchmSDnGf2iVmQ5pNZH8dbc6J6LYMM7fFSiu727j7Dv3t/dA/2y2u3VU/+eSlzdLvnlkuRrtY5qNgp2tjn0+k0fOFlL3Qj3el0Wsvlcvg2Vm4b0aQodRMpVT2pM38yzB2EJQmP4F4r9pVpOQXJmmQgI2FNyv/uKs13S2gHgfrkW81aCxKuhKjWq2pYPOF53u/WYgxJUn+TKiIRkJxZI9S4MXhKgVBVOCkylfUSkuDn0InZN/1LJ2zVtB1+35bjs/0iaN/ayAVHZl5M0X38ZMe+k4X9vUR2bDtfh6oxoKqmeuTYcEsXlabs1Z/4U39pzx4c1W4d4z4jv+J1+XALA5KuxcVqzQODIOea2+P4xQOaD5bJNO7yefnecrk8m/9vja6kq6//1uB5qquFs6rzp3Y4cDJgrnq7AiIxyUmq6tnfWOvUZLN+1iJbQec44VKZ8CNDUD+phFuLDK4qdIyCUtXTFwVyLGm8Miwaq6sHLzW0lCfJx3clML3m7z2d9rFv9cnHmH3xMoDg5M7zfJ5I1lyEamUv3g9lZBQBLL24cvPx8/FuEUhLZTrhKFjTlnROy25cHCiDVN98/YJzxbF2GyfhOlG6yGEmyfnQ+STdlp14n2j/VLms52p+xRX+fW+j0Wiwu7u7uyEY9UB3pXt1dXWmBJjmSRHSIBWd+UQLV4yrnlItOo9PXNXzGhSVJA2ROwv4Da5ucC01TJKiQqXB8LyWytK/bI9WklWnddWrftDwuX9XxzF9I/HT8He7XV1fX9fV1dWzr2JX37R7gucRLcJVgGi1hePhRNjKLASqO28HnZ9KW3VH2iaDc+ta6pPI1xeUdD99XbvGT+pLBCc1zNKT+qn6JN+ZQPvUPXwB1b/a/VLZy22PmYeOd7slSXpgJEGqP/xWbX1YOtNc8XrqJ8F+eHs0Vq5y+Xi/rsmSmb4YVwpZ11gul7+v8gIjogyKpEnFOp/PzxYguHVGK5RcFKh6cjqllFIBregqyACUYnNFVG1VGscn2FyJ6VgnXNaQaMSX0KpZeeCR46q26OmlE4/KN/o/AwkfheZeUhm1lBwX7vQ7zqkcQj+35p1zQPXmzkqibZUeqB5bQYpjxnPcedk+kgp/T7LgfZgR+PHa86wvNb25uambm5uhxqj7nE6ns7FXqks713iwtEJRwDf1ae78yUmOhavrFpjJ+H5pJ14fY5GYvhfNx0m+5iUKL1+Q/NkWbvHjee6ftC/uHOKun6qnDJHtbq0/fCt03b3AQWFdUZjP50NU4raPqvPn9Ol4mhgdQ+cgUereJAlOKtWE7sXiPFMXJwYnYydRqjyv21E9yajYPrZ9PB4PNXB/+krEztqxzuV15ditcomO1zH+khIuwOi+bCv/xn46qbma91S4ZfgkDVe6l+yN48t7tUiT48V7yaaYSbEd+h0DGHcStIhK/fTxZBmEdsHFPx5H8uaKPzMh2gdJlCRDMmYpyevorOXSXkR83G9cVWdbvUSCEl28rmyU99euC5Ju1VNpjmUNXzwk4frXyQsKVK2M+Fuj6z5dpto0KBkeN/9LHUi5esStev7lcnRoFulJ3q7OWkqUKRvTRHckKlx9POX04zxoyOjp2Pq9/vUyAmtWrgomk6dvMdDf3GF0HRknVZ8/HcX702k1n75wxj7SQXRPBiM6m8bdFS7beintv6TE3NYYYDnWnA9XmFTJ7Dvv21LmHF9dw3cr6Bq6p2zhaxkTU3evA3ufW8GNgVXzQZL28Tsej2fzwnFmgF4sFs/2NFc9EW+r3Kbr8Z6uuKVU2W8GvVZJj0+C+v57+ajPbU90fbUjt224cTDd16PCIg4nMxo306/RaDS8jEWEW3X+rQs/lT4wzeOGa3/axRcWqs5fokJVwojK+iEVKg2xZeBsX2vsRLi6disNrHoiNpULdC5/z1V5prauEvl7tc0VCJWb5otqyg1eQUXzpKyIY0UFRudnSUrn6ng+gaR2k/RbpQ3aKm2MKpr9IolpoU1zoX5wJ4MCFB9IYabGYOHbnVrBR+c4qdCuaIO6p4sf1Xm9PRxrEq9KViRe+vultnLcdf3WfLFtrr45z/qZCpfv+GUZ0oUfs7ZvXWLo+mpH1maqnqeATAu0v7HqfOuQzmtFZP3enUHncPKdRFzZsV5GJeElBU9h6SS6tqeDMh6qLh5PFSNy8Pt41iADIumSuN3Zqs5VBRWDK0JXfU6gVc/fx6v2eymiFfxc5fs8kXA9K6EypWL0a3sG4u1oBWaRAMUCbcDtu6W2uD/ba7OcX80/CdOFiqtXJ0benwFDbfZtW1xM45qGzueCo5O3L6r54qDeHsa+u9+15oN/875xzHlvjptEg6/VtOZO1+a7OXqgG+lSsXAAmGa70VK1Mq1oqRLd49Kk8h4e5bgPVWCK7E7cIgVNnJ5zV5SV03lJQqAykoEz/eMC16V+VT29g5f7ELlgwRVu7z/rlUy/vN0kYDo0F4J8pwfRSqPZRo2HOx7RqkXrPCoytw2vYVLVsWau80W4fn3ZiRMPAw6DmttlS21q/p08vLTQghM1yZLn+c4R9ptky3ZqPPjK0ZZw4VwwwGvcdH0+UOIBodUvt/eW4OE9NBYkW5ZkNF9e7vL90t8aXUmX9aOq5xvVBSob1ps8tWgRr+5F+PWp5vj4atXzF54zZWfqRsdgNNXjuqonHQ5P27i0R1J9JOHKUNgGEpArRqkUGqY7psZFi4LX19eDM/i+Z3cebufyMgGN3MshOl4OqDZrDHUdjq0rFld2TI25eEVivlQrZNu1cMV5pCN6BkWnlv256mplEyTUFuFysU1zIVLj+zK8Ruokxb6ondyOSdKV3cgG2SfdS+fQR0+n09kLe1r2zyAmpcugyx1K6n+r7HDJhznWrUyJvMJsyIm0xRO9Cbeq80KapxiERy0ZHNNlV1gtwnbQKagYWUMW4VENcMM167DuDFKy4/GP+z+5WspyipSiaq98DLT11BcJ9HQ6f/qLUJta40Mi4cq6+qh7efbhRHJpOw4J0c9naUFqTm1iLZD9IvnTkVxJeltIAEzdnXhZW+XuD6phb7MrXfZb/dG5vtDqGZjawldq6hqaQ/adj33r/myfjtVYcLHQv5FXbZa96ToUN5fGRfbH7MgDgvqmNunRaZ/LyeTHN/ZxrlulHffrFvHSVxiA2DYGyUsq/XdLulQ++r+rCyoXr1G6k10i7ZYCJum6YnNnVS1X+y312LKnvFS5cho33BZBthRGq1Yp5aM26WcaC8eDZQwSFY1bv9N1fFFPzkMDbaVy7B9JlgbONJvz4sqVpEsy41i7wmHfnBTVB/aZ9WVmBewn1THHn87MLVEsK7BdtGWe7+pbC7PeZ1ee/hpD9o99YSbp7RZobwy27ku6DklcxzCr45yxX1U1vNmM894K8B5EW/7bElZUtfKPS5mSwPIer0le6oHupMv0RhMkw+C2FxKvzuegOplQcdAhvL7INJBpvytCKl218Wt1NR3D1E3tYIrO9Fht97SWxuF1UXdMV51SFyQm1rb8+lVPb2sjwTFVpfF6Ss+0k/Ooj8aFJHHJPjgWHpA9MHOBR39n+3mNr2VEJAwumKosxLl30vAAyHKRkyPHmyUNkgUDtwiXRD8ajc4etPDFLF6bOzP0+0vB63j8ce3ASzQUF5eIideh/2oH0nw+H77PkOsD/nG7cbGke+n6GituZ2O5wDM+cY1nJCw/9ULXt4ypjiVyaC0UMO2V0tW/+h1rmVVPdSpdl5vTScDH49MjmNriohdSawJ9hd8jdctoZKBqN+uummQuZFX9aDhSO9pSpvN0TRoqVS5JjsqDgYXHsG7FRSuqPzk6+8Gat9dXqQhbWQXHn3VtzbeTG1NatZ9j4jVtzgnHTMdyoah1Hzo6n+jSvZnye//4L5W2dixwbNUe2QAVIRU5bZsET2XqKlyE5NmFxlk+xjZQZTNAM9thmYsBpmX7LHvIR3VNllP0M/e8k/B0LktaPtetjJhlK44Z7YIlNRIt597FzbdE9/fpOvF4hNdgyeC32+0wASIHLQBxYOXkJF2vkelnKQaRLhXsbvfjFzEqgu73+2f7bP0ptfH4acuNFIoChatuKhVhOp2evYfCVRrTyFbdioansSYBqp96PFXjKRLiu3O144I7KvjYtYxYRk7H4iOp/iWEvljDwMl0WPdgv70W1woynuZzjDWuIipmNrIdEsDhcBi+QURvt1MbSco6R3apbyDQE5UiNq0LXF1d1XK5rNvb27q+vh7sRjXQxWJRj4+PzwhdfdD4yLZYP27Zi5dcaPNqk8ZW5SmSFp9EVH8UKCiUXJ2v1+v69OlTffnyZVhEYy2bXwzL7IEBVot3k8nkWblO88Lgp36yDs77trJN3Ys7lHoo3m7vXqg67yA7KqPTAhSdk0ZeVWcvSuaE8mEGphycoKrnj9fKsE6np3ed6r0D6/W67u7u6vb2tm5vb4cJvL6+ruVyeUZgapO+nkcLZkrdqs6DA1WHrsHI7mTLjID1Nhoq1YwMfLlc1t3dXb1+/bpevXo19ON0Op3tZlDA8McmdQ+NnwyXi0ByEn79j0ieXwOucZKC1kfO4qqNCp+1a6bBJB6v12u+9X+NdeuhF9mXghDJxUsYHHONiwhHNq4xWC6XNZ/P6/b2tl6/fl1/+MMf6u7urq6uroagzi1ZJJjD4fDs3bcMuq7cGDhoP/Q97pyQmqeg0e6bw+Ew2IlEh86Rf9E+d7tdrVarWq1W9fnz5/r8+fOwg6eqzuyewY0BXdfTnOhhC3+qjLt8uDNCvs71BhdJVMusz/dE1yfSRKQcVK8p6WtFRJRUrlV19pq20+l0Rrh6i5mMiSTqtUQq5sfHx1qtVmf7aufzeX348KFevXpVb9++He714sWLurq6Gl5oMp1Oz74O5dOnT/Xx48fhBR+3t7dVVQMpSSnqHvr4AqGIgmQkI6URKiOoOq+bz2azurm5qZcvX9bbt2/r3bt3w6s1FWT0rbVygO12W6vVqrbbbd3f39eXL18GhyCZsybs5Rr1h2Mkcqt6+q48fcOwgp2CSNXzr4VnzVztlF2xLMBFOX5EIFJsL168qLu7u+GFNAoKGtv1en1WclksFgPB+6q4HN1FgN7Rend3V8vlst68eVNv376tN2/e1O3t7WADh8NhGB/PCPjoaqvcoLESOXrpgupN48nSm8Zeouf+/r4+fvxYq9WqDofDYJcaM76PQz4kO7y/v6/vv/++/vnPf9bHjx9rvV4P8yRfV3DWN2xovgX3CRctFBskYXIDv+hgPp/Xcrkc3iSm7ELZCMeafvet1W73hTQ5p1QRU93dbjeseHJBSgZGKPIrkkmN3tzc1Gj09DiwJkCKjYtT/nNVnTnSeDwevsjveDyeqVzdS2pjvV5X1dPEa8vMbDY72y4jQpLRMx2ighNZqB1yOKaTrM1qHER0y+WyXr58Wa9fv643b94MKpe1RP6sYCbHIwEo+FGZs95MBck2aE78yy8fHx8Hpee7Aqqev1Bb4+qpM2ulTuws+VTVWWC+u7urN2/eDAFU7ZLK05iw3KESkMoBdFgKCjmt5vv6+vpsHhT4GCCktDUWrK1ThYlw3AZY0uG3O7PkQFXMQKv+adz8i0gVSPgeEu4YUClFP8tf/CulWj7HwKiAIWK+ubkZXhPJ9rrQEFjj1Y4iqfPr6+vBX2UXPF/974XRpdXk/49f7dk4KRzW3KrOH89lnY/tah3LFU2/5tD40+nZ8c86iPv5MV4f9EUUtslraGzfpcWXS+3y33k/vMbp9ahLCz88hvfhIgod4dJ48P/+d7//pXmpas+3Kw2WhS6Nl/f/a+Pj9d5LNtNqV6sPPMfbJJu5ZDeXxuPSuFwaH+9fa2xav7s0/+5bXjNmn91ufo4vXVKSX+tHa05a8+680Zrvlj99g6/suSiXu5FuEATBvxEukm7XJ9J+Lr6mZr72t1/jPpfwS+/Rozb0rdHKNoLLcAX2Xxn/Efv9lv70tXt8C274lojSDYIg+PVxke377pUIgiD4N0dINwiCoCNCukEQBB0R0g2CIOiIkG4QBEFHhHSDIAg6IqQbBEHQESHdIAiCjgjpBkEQdERINwiCoCNCukEQBB0R0g2CIOiIkG4QBEFHhHSDIAg6IqQbBEHQESHdIAiCjgjpBkEQdERINwiCoCNCukEQBB0R0g2CIOiIkG4QBEFHhHSDIAg6IqQbBEHQESHdIAiCjgjpBkEQdERINwiCoCNCukEQBB0R0g2CIOiIkG4QBEFHhHSDIAg6IqQbBEHQESHdIAiCjgjpBkEQdERINwiCoCNCukEQBB0R0g2CIOiIkG4QBEFHhHSDIAg6IqQbBEHQESHdIAiCjgjpBkEQdERINwiCoCNCukEQBB0R0g2CIOiIkG4QBEFHhHSDIAg6IqQbBEHQESHdIAiCjgjpBkEQdERINwiCoCNCukEQBB0R0g2CIOiIkG4QBEFHhHSDIAg6IqQbBEHQESHdIAiCjgjpBkEQdERINwiCoCNCukEQBB0R0g2CIOiIkG4QBEFHhHSDIAg6IqQbBEHQESHdIAiCjgjpBkEQdMT0J/4+6tKKIAiCfxNE6QZBEHRESDcIgqAjQrpBEAQdEdINgiDoiJBuEARBR4R0gyAIOuL/AS9u6RDcsyw1AAAAAElFTkSuQmCC\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 22; current eta: 0.5, current beta: 16\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 23; current eta: 0.5, current beta: 16\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 24; current eta: 0.5, current beta: 16\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 25; current eta: 0.5, current beta: 16\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 26; current eta: 0.5, current beta: 16\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAuAklEQVR4nO2d225jR7KmQxQPOpfq1Abs7sZ+g3mTfTlX82IDzAPNvEWju23AKFRZJYkixYM4FzVf6mNoSXbPdqUNd/wAoQMXc2VGRvxxyFzJg91uF4VCoVDog9Fv3YFCoVD4d0KRbqFQKHREkW6hUCh0RJFuoVAodESRbqFQKHREkW6hUCh0xPhn3q/9ZIVCofCv4+C5NyrSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UfmXcb7ax2jz81t0o/E5RpFso/Mr47//zf8f/+F//57fuRuF3ivFv3YFC4Y+G//xv38Z4dPBbd6PwO8XBbrd76f0X3ywUCoXCIJ71ulVeKBQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWO+F2cp/vS8ZIHB//auaQ/c1Tlfwn/al8KXwee45qT3wd+T3b3a/LJ10Cdp1soFAq/Pp5l966R7sPDQ+x2u3h4eIiHh4fYbrftf7wiHr3RwcHB4CuDNvnJ/9xWvj6/hsD9RqPR3k/377nP+DUaPa3i/Ny9X7o+94sXbWXZcu3h4eETOfIZ/8z/e64/Qz+H5PLcvOax0d9feu+hexm+X54733eojy/d66X5H7r2uc95Tp+bL/qdr7fdvGQbz/XtueuzPT6no1lfbH+/xKZ+zp4tp2x/Q9c/12e3ZbtBtm67F7qR7t3dXfz973+Pm5ub+PHHH+P777+Pf/7zn/H999/Hx48f4+bmJtbrdRwcHMRkMonT09M4OzuL8/Pz9vvR0VHMZrMYj8dxeHgYu90u7u/v4/b2Nj59+hSfPn2Kq6uruLu7i81m82WA/+9art9sNrFYLOLm5iaurq7i9vY27u/v9wx+NBrFeDyOo6OjOD8/j/fv38f79+/jzZs3cXFxEaenp3F8fNz6YkWYTCZxfHwcr169ijdv3sTr16/j/Pw8jo+PYzQaxcPDQ9zf38d8Pm/33mw2e/fmFRGx3W73rl+tVjGZTOLy8jK++eabePfuXZydncV4PI7tdhvz+Tx+/PHH+Nvf/hY//PBD3N3dxdnZWXz77bfxl7/8Jd6/fx+np6cxHn+Z+vV6HavVKu7v72O5XLaf/L7ZbOLh4WHPQLbbbazX67i/v4/VahWr1apdFxFNoSMeHUBExHQ6jaOjozg+Po6jo6M4ODiIzWYTd3d38fnz57i+vm4yWa/X7XPg4eEhVqtVe+/w8DAmk0lMp9MnRsN7s9kszs7O4tWrV3FxcREnJycxHo9jt9vFcrmMxWIRy+UyVqvVi31HJ6bTaUyn05jNZjGZTOLw8DAiHg2f62azWRwdHTWd5ed0Oo3JZBIREZvNJubzeXz48CH+8Y9/xA8//BC3t7dxcnIS3377bfzHf/xHfPPNN3F6ehqHh4ex2Wzi5uYmPn78GD/++GNcXV3Fer2O6XQaZ2dncXp6GrPZrPWJ4IZ5OTg4aH3z9egldvHTTz/Fp0+f4vPnz7FYLGK9Xje5YkP39/exWCxiPp/H9fV1fPr0KT58+BAfPnyIm5ubWC6XezoBsXHvy8vLZhfY0Ha7je12u2e7JycncXl5GW/fvo3Xr1/H2dlZzGazdj36S1/m83nc3NzE7e1tzOfzWK/XsdvtYjKZxPn5ebx9+za+++67+POf/xzfffddfPPNN3F+fh5//etf4+Tk5JfS2X8J3Uh3u93G3d1dey0Wi7i/v4/tdtsIB4WfTqeNLPksk79YLPYMAxJdrVYtWoh4NAImHsVhUiE6vDOTExF7RMq9xuNxjMfjmEwmMZlM2t9WcCKWzWYT6/V67wWRbjabWC6XTSkgtohHj+4IB8VCTtlxTCaT2G63MZ1Om1FeXV3F9fV1LJfLPaW8ubmJo6OjeHh4aMQDeZpsM+nSN/qEvFarVbtuvV63axmD5z7iC+lCdJPJpJHucrlsBgMBQhaOWDB2ky5y8ZwR9efPr9frmM/nT8aO42C+3W/rxGQyiaOjo6ZnzKuzN6416R4dHcX9/X3MZrNG1owdkkCH1+t104+rq6t2v/F4HKvVKm5vb9v11mH0hDHQJ8bgvjEfzOV4PG7j8Wuz2bTP52hwu93u2QI6a5s1gRJMWYc3m02zW4AcmUvGQOBBf/0ebdHO4eFhc5A5+yXoWSwWjYsskx74TUgXBdtsNntRZUS034mGptNpRDxGZMCphg3P7TDh9vgIlyhou902MrSBTafTOD09jfPz87i8vIyLi4v2Ojs72/PQKOxms2l/W+kZZ0TEarVqcpjP541gnPbQJwzaERTjWK1WcX19HRER9/f37XNEKsvlso2VjGA+n8dkMon7+/vWH+Sao11e2+22kSjliYhoBAiJcj0G6lJGxBejWy6XLTp0JA/ZIEO3kZ2nSycRXwwMeed78jlksVgsYjqd7jlKyCoTNERGu+iL01eMn2t9/Ww2a/JxlOtIl+gS58v9sZWrq6sYjUYt0CAruL6+jvv7+6ark8mk6QqyyTrP+NB1bGi32+3ZmK9FLyEx3+f4+Lj1Kztv9B39Yf5xRjge9Ih+oeO+59HRUXOSJmiTKe1HRBsLbU0mk73ImUCGQOTu7q7ZTi90I12isPl8Hnd3dy39cPrGxOQo0l7Tk2QiQNkR+mq1ioODg2bIGDWThWLgfWkDj3x0dNTKGjiA4+PjODk5aT+tcIwDwnTEsFqtmqES1d3e3sbd3V2LTjLh5lotfUOWyG69Xsft7W3z1hglRMPnuW6328Xd3V1zDlm2kG9O8R3NmMwcMdgomBvIFafi0slQNJZrlO6n+5bnzHU62nYEeH9//ySLiNh3yJCe5cJYptNpnJycPCFd9w/jxhFYtsvlcq/URUq/Wq320mBIYblcxufPn2O32+2RLlEaAQj6zpw4I3IEbkfl6JP+Yys4YObeAQAkRh+R1Wq1ajZxdna2Nxb/TmQM8eP8/R5ZLr/jJCFdOzj6bb4wYfNyjdfzQeBjmfTAVyddBL7ZbBoZONLNhe6I2DMgJtipJcJ2eoOwqfdERItAMTxHS46mHLFQ3nC07SiFtJE6oo3TkbQJAkIkTYKkiAQYZ46YkAt9cxSDTKjx2ogXi0U8PDw0JXTN7uHhIe7u7lqbXvBwdJeBwTo6dEnC5SLm0IbA/15axBtaZPE1jBk5YLxOgbPM7GT93tA1+T6Oppkn6yUyzlGX27XugVwftx5AEsxXRMRyuWxz6GzA5O57ZN0Z0h/uhQ5D6pCuiRc40OHem82mESW2cXx8vGenJkcHSS670T7yxtYgXfOAAyjslfEypuzwLYdcB7bD7IFuke56vY7Pnz/vpXsRj/UXK/jQ6qYjks1m0wwBz0vU6kgHhQa0h6FExB7pcY1ruI5mHEE4MsvpHOOFlFwacK3UBJWJ1+/ndNmkgAI5vSTCRTZeRMyEmo2B8SKHXCcfqqM5ujL5OCthDj2nhh2Ed1owFvc39z+/7/nlvkPEyJjsfBwVcr1ly7jJlKxTrmsSEJhk+HyeA9uCMy/012UrOxxkTFDDeGjL84pcnTWgmy47uEbvezlYybaQF+ocedK/PLd2xnn+HOWadLkP/aLWnRcL/cI5RDxma7RByY3xIr8h/fw10Y10V6tVXF1d7aUcCNcTy4SZiAC/56K9f0dZPcFMTBamI1QmMX/OhIGimsycHrt9FPvu7q6lorThHQsooOtNXtSw4dMPp1e5ZuxShMnA4/Q1jgzoA/3FaEyu+YXM7ThziQCYbDDCbJD0OUe5HgvRYC4XuH1nSZk0hojD/cp9czbF3Nq5ZRnmDIzoyvNlGQETAuO28811Z5cHeJ+xE4DkspD7QMkFGbFA64zFc0dEjTMmqMh6agfEffkfEawXLCNij6hdzjBRWk5DDtR6lcshRMTU1ClXzOfzNj+90DXS/emnn+Lo6KhtDZtOp01pncqQrmTDi9hPQRCqt4SR8uVaYlYEyN8rsr421/1MuBgxE4pSOdIm+lgul3tOBcU1YeXadEQ8uS73xxE27QCnlzl15mcmZvcFuH0yjByFj0ajtu3IaWe+h2U8FNF6zuhjLgdhOLSX00g7QPQnr3RDHvxvCM62uKfrkcwPUZxll7MkrnUf7KSdxQxFkEPz6vKG23O26JTdtkFEDGk+PDy02ip6bmdim4Cc+Ek93ztOuGeOaPMCOcSXMwrPLX/7/94BYceQnRHlDgdqBHnY7Xq9bv3/w5IuCwMRj96YVeG8guwIwUV9lxIQoAnaBpgN1gQ3FAECGz/vo6SOGlhZZbfDZDLZq+viTW2cTl0xSsY7FB2+1C8rbXZOtOk0cygazp/P7UP+1PhMvBH7WYejY4wz98e/MydEik7DncrTDrKezWZP2rRTQK42el5kBblf1jsv7jC3uT7tnTFE3tzzuTJG1knPtSPQXFc3sefsL7dNH7g+65Pvxf243sRvGzHJMycsRHltIo/bztXrIdiNMwY7mkzEeS1gaCyj0agRp3fIQLzWT8BYrq+v/5iku9ls4vb2ti1AeXO5jc2r8hg5Bu8FACYx12ly5EBbTv+d8kD8q9VqL0WOiD0lo1zAliunuo5yc93VpEG/3BdHIY6STWb01aTrqM1EniMeE4INNiu5nRrt5wcnMiHkUoCdC3+bPDxut5EjPi8McT/XSm04zgi4v+Vtg833cb8MHIG3ONmxI2f66Hm2XjgqznPksXvMHrf77+jRUax1hp/OIGwLea5db3V/IEmXnCh54VC92EZ0jBycfbnfrnM7WnXtHxvMTtClRAcPRNiQJjrpe+UFPOv2w8ND3N7e/rEW0jC07Xbb6kVEEAjFhMVkPjw87G3uR0GYAD8VZHhBwZ6UScHDkqa6Nohh5InhwQP2/NkwSAFN/qPRaO9hDRQxkwFGytgyQZpcXB/L5GXFtcK6b7mNXLrxy//LRuoIhDHT70x6uS1+p29giAzdBvNDpJR3a4xGo7aNLN+b9v2T+w9d56jIT5JBPg4Kcg07R21DY0F2jlrdDvqVicsZgf/vRSaX3kxMuTQ0RI60521tRPgRsTf/3kHg/zlAssN1P+2MfW1EtAd9hhw7dj6ZTFoQ5WzDztm7Kajj2nFYnymTODsdiqh/TXSLdBkw+wt5eAGPilAhGq/I46EdRXhfX8RjNIFwTRqOmBxtuP441FdqXU4zHT1b6VzayDXhiOGaHYaaCciRgaMarnf7NhjXuIYIhCwDooaUc72bMXghw84BAkChIV1q9TlS8eo7cLknOxjkxXUYEjVBP1K9WCxaWzhrz5nLSIyLaywvxu1yEfckHWYs7Bf1gpjllcs5rm8y95kw0TvsImNovnM25AxnSAftQD3/tDekg/zfpJ2DDrJAP1xjUvec8n8+w9/0ww6I/1t+gDISepmzCJwGDzFFxJ7Neg+9n0btgW6ka0Nn0NRAI/ZTX9f4XkKuN0UMH6qTI6ChdBLjxpgh3vH4y+OX1J1xBiZG3ne04fYwioj9lel8fytVjogzgWdDRmmdljpac4TouUDeJqic9jo1ZvERx0e7EdFId6gmyXuZTCG4THqQGM4WAzo5OWmr33ZAtEV9z5mUSznMgeXJ71xPFuV9px4jckHPcP5ExS6doW84pkzE6G7OEPI+4fx6rtyQ02svJGYdArmtXMpyoOGnF11icJTr7Wbu61AtOmcE1jc7klxqewkODNAlZ1i5FJL19Wuj6yljCDTisYhtj+mJNjIBWFgos1Nh19ps5BHR0lQ/DpqL6FbQvKiDw8Cwh7wsJIqhQgROh5zO5VVVO5O8wGiZcK3/9nYq73XECE1AXEc/snH4UWk7GxsC19AHyjA4LGcBeauUxw45QDhEMHyW+/iAG/pih8dPR56Mh/a8EOjICDm4Tu89o4C939zLzsOEi4Oj/3l+XAKgPe9ssLM14bocg9yZD8vKT3PhDNkp5PJWzmpy0JOzxky2eVshfXF9OD/+6ywj70IY4gYvrjl4czkiy8VtZrLNff5Dkq7rPgjW6QpKmusuTstdt7FikypaqHnvoD2fU8aIaFG302hHk/Tfq71EVZ7sIY/u9DpifyHN5IChHBwcPNl65sghRwJc45oZfc/9cV+53teZBIYUkbkhcuPeuUY5FNHYMeXSB+PnHvyEMLJTyPVR5JjTZdq2Myc6RlZ85iXH5ijLzph5HSqNuI84H2dRud5rWdL3PB7PI7rgz+AoTHLICz3PpG3Hn4nXchrKfnKZIeLpjhGyLU7l85kLXIfN0if0zO27dJhPxCOoyQuFOH7zylBtOy/4fm10P/DGh56wSOXzB7bbbUtdXD/KE2PF8PYTT5KjLIiag2ycFm+3X551R2FYBHMUYEJCCV3Ds4HboJw6WiFyGm5icV3LhOVI/rltOk7JuJa+57o4xoZBOwpE6YdOH6O/rmfTPp+1YntuIva3aDnNdv8zURNBm2i4X3ZGOSK3znge+RzX0Ef6lGv2jvZ4xBtYlrvd7skJXES4Nn7LxvVFR3eem6wL9NtRsEk3LyAxRzmiziWqoag667n1zfpLZkFUPZlMWlno6OhoL7v0+o0dn+czR9DInu1qy+WyBQGeQ0ogzLvl7l0X7NV1tP210f3Am7Ozs5b2TKfTlrZCTlZop+4Iq3VcCmBljBiul2JITrWJLPF0uRYVEXsRcI58nquzWXk8HjsTlIxIgLHmqCWTF0ToYzFzJIS8vWjCoqWfCHI0FLF/DgDPpns/JmdmEI2bHCIeFypc88sr5SCXhCAWSNtncyBboiPm1U7CP13jd8ZgRzwUxdupQz6MyZE4MvVBRo7C7ez9KCuf5zqfc5DPO3D9dyhTsBzQa2dNdmSZiIgSIaucOeXSE//zyyUIE7UXxClxYWvsAuE+2+2XXUQm1aG6s52r9ZJxAOr82By26IVe9MoHB93c3AwuXn4tdCXd6+vrePXqVRMEtTyUEGPx4ldOVzFMF/RBTveH6l9DaYTTQROmDTanYUMRk1NjyBGyYrucnzLzajvE4mgg4umh2uv1uh0wg6NytOqIIadREBLKT9rHUz6UZNiq54Oq/bhnXhxxNPocgQzBBIb8c0rpTMHkk1N1Ozn6BYlm3RoqJVi3TD4YKbLLDs5zwvvo3snJSYv0/BRUROz9HNIN5jyXfCjvuCZLvRniy/LlZLubm5u4vr5u5w3wGUjx+Ph4L+LLpTXLzfbgUovv7QDkOR3IAVK2W5czcHQ+ON8ln1zC8/qPSdfOZ7lcxvX19R+TdJl8PBACyAsOEft785xOYVS0BzHwGUcYTp9RcE+G092cQrvNiHiy+OGojM96HyH95DFJH+MIcR0cHDw5wDnii7Lmg3v4P8ZNWkXfcAJ+ztxkkQmXz2XShWRc63Y7EY9bcYhgvCMgp8gm3BydMR7Xlj3eXG/OjjMTpx2j5w5jQ4beIpT7xPXUCPP4vcA2m832Dj93NOloz6fSkaZTl4yI9hkePmEevMDIGNA5LwJyj0xukM16/eXg9qurq7i6umrfBpEXKX0eiKN85JAPtn/OHrBJl9gYt0tv2dlCsq4tO3MgqyCDcmScD8hxpG/nTd9cXnBduBe6bhnLtUkvorluxEQ6bQcoOemZCXuo3oowc22VSWAiITKeI3ediP25EY/G6RRmaMEKQ81P7nhPoBf7Ih63h3lvoeWEcdp5cV+IgDScPjq99yJhLpNwPWN25GiSgqz9DQg2OEcXRo5CXJ+OiL1o3QulTt2RR46CkJ11J0ejXpwZcggmdT7jOfTCj8tTjo5dA6ZdL4zRrjMX64jXEdiCBklHRDsrwXrDtr2jo6M9J8t8+qupPn/+/OTAdNfX6QdtMV4ObiJ48DeKWF6MBTk4y/Ac4nRzucTBkvXQNV8yAhyOZUXdmFKL9dq1XOuA+9EL3UjXhpQNNRMXOwy22+2T7yHLaSOT7y1HrnNxb4zVq7KefIzMq7EYfH76KNeOvR92aNuXx4cRYfREEbRhoo94NISh7y5DprRLrdb1L0oYkK4Vb2jV2Ck/RO/00QtfkN5ut2v94n42auAoB5jwvCPFZODPQzouOXge3G7OErxAyBhNBO6LIywfg0i7OSBAPnnVPWdodoROd3E+EI5J1311fTPi8SuQfMazSZTykA92cfnEpaIc7DBWL6hSB3Utf0jG9NdO3zbFfbyt0BE+97cueaeBPw/h8t2F2LgDgJyF0Q/u6cDua6Mb6Y7H47ZrIBOvU0MIh6gFUrZnitg3YAzFdTAboFeyvars67PB8TMbNnD9lijanhqFg7SYZEdQXkDi/+zoAJCyv83Bdc2I/YcrGDfjHKoJ2oBQTu7FPYaerbcR8X/6MvRlliAToGUKybPCnMnMxG5d8TzkEoadiB1ojmy4fy4x8FkvuCBXZJB3IJg4IF6nsMjDC0GZBBzlO822jrp/dgo8Xu+aLvrk+cjEiq46WnQm44g3l/qMIVvJmYQzKztN229eN8l64szGGR7f9EK5LNuZ68DYK3zDF3/2QjfSnUy+fIPtycnJ3kovEYCNH+9l8swE4IlFiLTjqAUlRkk8qf5MfkFqjuzyy/U9Urzj4+PWBiRnRcHrWoFyf0zGNu5MLvTNsOLych3QtS22yXG/TCIuL+QyjevdkC47HxzJmiBdt89ZQI4w/Tk7TWAiz04XZEJ2RDdUD3bazzywo8M6QdruA7/5nM8PsJNDZ717wHJ1bXIoMACedzsXO0Pmx21jB27HUR71/Xz8IuPgabv83XvZHixHkyzRJ/d02ciOZYiYh8oAJt38iLh1knl0BoLeoleXl5d7svna6E665+fnTUldW8P4mQxv1H54eIijo6NYLpetvkobEU+JgEnnszawTFQuW/C+vbL7klOv2WzWvheKr7Tmq8Ujnj5e632mTtnzI5tWNEcph4eH7Ys3IYC84JBrrygZxugU2eRgY3a/TURWeEdMOIdc03QGYQfHT8bNPXMpIn8u12q5bqickefcv5NB5ZX6HJFHxF5JgvaJgB2pZkfoPbrMD3PqjM2ERH32uVPNXEZi/r3bBX3JjsWfoU3rpV9egObbdF0G8zpIXkPJgUDOSvgfL8oIOSvyZ+AER9cuR/HyI9iU2NCDXFYy0WOTf0jSHY/H7UseR6NRS7mIrEaj0ZPwH+H7LE7vAPDqZ45ovOhhWJGzB3Stiz6TZnnzO8oJ6Z6enrYiPl48Yp88h9Jg17AzwXE9smDrEcbpGmBO/bgm16VR9Pz0EYpL3zabTZyenrbtbsyVo11SNsbrup0zDxMlK/FDxGQiRXbOVoaiextj1oUsa+bMi1XMTY6y+d1zgYN03dYkYNI8PT1tOsGTWBGP37ab67YQpMmDtQHrD3pg0vGKPXpgWUTEnrzR/6H69ZBD4PrT09O9vdeec+YRO3XJgPZNfC4hed8ucDnIO42G5tRnXkDidszeUeEF8sPDx33qLCD3QteFNJSJHQhEDABSzdGdF6ryliQmhLovn3Hq5OgOxfJWHeprjrRJx1Bor4i64J+P/yP9NKFT5/SKb65zOVp1KYDx4MG5b95u5poX7dkB2LNTM8dQGCPjJqVmf7FP1RqKRHLtNOLp1i9nFyYBZw75c5aTZU+bRHvIIae9rnn7/85qHGXlshU/GZ/bzKkwJbHj4+MnpEt2Bok6kvRinp28o+PnIuPsQGmHdRD0wo7OjoX3+du1aGegJlTIzRGo+8J7vjcO2mTrs7CzfVKrdl0dGXisQ/bnMXrtgbIOQPe868e68jXR9cAbTziC9Wqq98qSNnkPqgnC22dcF+YniusTrFwjhVi8QEU7TuOo1aJsTsswnqw4kLojopxyg1yXi9j/skzXGx2pHRwctKiDz5sATU6OjrKi0yeuNxH7cVLvcnD6aifmyM/9zvLxmCE+p6RuYygKNVkOZRHPGY6zB651v7iGe/h/Hr9JzHK1vHzsJfeAuPOcAkf9z5UjPEf54Cb6ljOsoZKPr8/1e9sI/bG+2wZ2u10jWnYcIWdHxB4vbSFH6ye8EPEYlPk724aCouyo+Fx+fJ2tZ5QGbZc90fXAG/YAOirzHlBW1BeLxd6BNAjKJBfx+OWPTK4jzTw5EY91TSYGsshbUTyhPk7QkRltZy9N216Qitj/Pq+hMoK3tmRi53eQSRPjcJ04RxsmsewYUEaixiESyxFixP4B6nkFHkMdqsO6DEE0lVNHwP9d/894KTrxZ5wZ5fqgyZDyDeNhnPTH0e6QnDxOz4P3sOZFLpOlx249yp9x1sX4rHseq/XguVKW+0w7zI3n1s6Usgi6a33I+k2t1eUCZGYbNXn6ARWXVSIegys7Ku848dOUyJ7xu395S+jXjna7H2JuhWAynUbc3d21lAzhu+6Tic5eHbIxAdgjD0UQTpOAPWiOcHOkErFPPhGxVyLhWsbjGqyfMnL6CInyGUeCOW1kXDaWiKcPI5gULG8rK/fO5ybYePk8fch1XBMt47WcuBd9JGVkjDhNyxr5+qfH5Ggs6wX9NAmZiJmPTPb0LUfAduaeg+zEibRwKgQIeVtdjubtqDPpWoZ25rYx5tb7q5GDI80cGdoJOeqlfcvMNugomEjX5T+i1lyn9VzaMSOToZqug4IhG0T2fhLUu2rIrNw2c9Uz4u0e6XrwQwq3Xn95Ft0ezOnHS3AUZHLkb6dSrpU9Z8iumZkEclTjCHO32+3VnXEaROr8znveUM612+3jaioRhQkv1x35PUdD/HRU5CjZCkfNjf57S5ONJEf1JtwcBdko8rwgb/ruNnMZwvpBhOS5ytGy28wvy21oLr2VyNFQ1hOPn744eyPaQmbOLLxrBUK2Prqf+X/uP/fP6wHPPQDjnSI+a5cI1BkBESZyytlMfrn8MJ1O2xOT7q/tbSgCR99zxpCzmyEuoP/r9ZdTw3jyznaYeYG+UD/uhd/kmyMinn59dk4PeEorIlp91x6ZNvhpb5lfuQboFU2fgG8Pnhd5HF0MkR2k+fDwsNcuYx5aeac/rm2zkpprcERYub5ncnV/PHbq0/mwcJTeDz9ExBM5e6yZvByhcy9vrzMxcq13Sgxdl0nVYC5tpMgx9zM7Ht/PRphrzugqOpd3ZrhckgkBWCf424tT3kmA4fvhlyxrj4Xfc/nCT105W3H0aGeeZWfS9lZEso+sE3b0ObN0oGSd9a6DIXu27lqHc9BjOUO42+22nU3CrhuXMWyDHvtzZauvha4LacCpp+tnJl0vMJCCRuyfV4AgbQwmtqFJykrudM81VIjK9WPI8+Dg8TFdt+m0nUl3emUSzxE34yKqsOFxLX3x+HNkkGWDgntLW8TTp5VsOFZS5shH5eWSjPuB/HNZweUHdMDRsGt/Q9GsST3PZzZ+f85ZCvdxFGs9MZnmVNZRLQ4qR/c5KxqKiLnO+7LJ7jwOf87zaWdi/XFZKDt97usx5VTb+5a5nvu4rmu5u/zEe+gbD5RwnfVrPB4/echpyF6zfjgoog9sQUOnl8vlXlnBEbznaCgL64VupGvDQYCQgg0GMnCdDg9NmpaNBeXP9/N7JhRHuj6Ym+v9lBln7toYhjyyI96s+BHRDmtnTE4nXYuLGH4MOSL29mI6Asppbo4McCDUyiOeHhztVNVteI+y08FcP6YtExF9yMbFe95XmeuPyCficbubSySeS5OPd7I44vaDNjjdHEl6ccjzwGccudIe9yKLsFEPzU3eecBckHH4fibfHL27nGBnn3fjIA+yJzsd5oZrfZiU7ZUT0vyyTGzP2CF7uLk294X6r3XWhDqU4WTHaGcDAefdCjnSzSU262kvdCVd76Pb7XYtFXXazkRmw3XdLEdCvkdOE/1/pxTeteAUB4XgCTNqrPbMOfrIBka73ktL2cDRBG3kaJxr8vukppn8bJiMlcVHH/qDwdNuTqHtvHK0SHQyZESQpiMKkxIy56fHlFM9k4qzHxwn7VsnfJ0jU899zjLcLzt4Z0luyxGliSETu/vv1B99t1Mn64C0+N0r9ibsrN+utefzMjw/Q3qUx2SHR3khL7BlgsqBiHfabLfbvTMraId75QU+k6ntI//fukHwhIy8UJnruS57uJ/0u2fU2/XhCNcUI75MQH5ax0rBpEIIEEWOArIBZxKLeLp3NP8d8Xgug58/Pzw83Ku5utaaI5tcDvC9Xbt2fzFWDNztg5w+Rzx1HEN1s4hoeyiz8ZhsHMU5isilnGwU2fHZMCFqO0u37VJFnqehn76nyTCnvS993iThe9tROUNwGcH35/esW9yDoMGZi+c9Z3lc4wyMRTgTE3L1uBy95myCa11rH1oU9hisX7YvL2qbpIaieAibclZeu3nOFi3XnDFZ7kNlOZcxhoIQCDc/UEKf/9CkS8qB0rGAxe94paE0KuLp1rOIx4jTaZs9bE69neJ5/18+ANlAqagL+V5+8ivXC1GqvLEcpfAz8ZDUUDqU5eEIxQdtRzymu0OnWJmQ87Yh19aJ7v0AxlBqxv/zU0s83hoRTyIuE7EjWNcFHcVmw8xETbuUQGxotOuoEwfgXSVZb6w/lrHvZ/JknGQDedsbddxc03WggW77hDLPqRcgka3JjGucedjBW1+xQxx91tvs5O0kcjvOUCwfR/W0k22Uuc0ZCvrkPrn05C1tft+k7awlP+zDvblP7v/XRNfyQi4XmLycEkQ8KhPGjxFQu3IUxsTy2CUelgmBTBzN8cy2a1sRX1Kr29vb5q2JxCMeH9M8OzuL8/PzdpQcKTqe19/xhrPJxpYjRJ+nwPidTg45IaeRlgfX0a5PYTo5OWljOzg4aMbN6VH0G5LxtjEvGEU8lgN4iMRnUOSDWEwkTpsdmQBHRshnKBryvAwt9nB9Lp94oQ+jMynymRyJUWLBETiKc9SFvmLcGLrPfeU4QWTBYU44glw3d8aRZULfcLZ5EQ4bwU58toO3WlEWwE4gag5xQmauA+92u/YoP3q0Xq/bgefUiemfv0mDOWOtA/IdjUZ7T6SOx+N2eDoOgs/QNnPmzIAx53HbGf5cLflr4KuT7pAH9KpkxBeFIqW6u7vbS5sj9hdVXLuiTjqbzeLi4iJevXoVp6en7XQklJbN0XwWYyPSZbL8pYzz+bydHgaRcKLY69ev4/Xr13FxcbH3hB17BG9vb9t3mHnrmQ0xYv+YPtfPbOi5/uYUygsp2cNzQM7p6WlcXl7Gmzdv4vXr13FyctKMy8QIweYvoXTkCME6zbXD8wEv+fR+oum8a2S5XD5J9R1Ruy6ciShi/9FZgHyQmaO10Wi0F4078nEkjcP1Y70EBzjHXCfmYQgcLfIfj8dxfn4el5eX8fbt23j16lU7+Gm73TYCZCEon2DmsgrOgPE5GzKZ+DPoFPpnHXSpCd13BDkej+P4+LjNfQ6cmDP2xi4Wi7i9vY3b29u2V3a73e6RLuckRDwu6Hos7Bo6OPjyqPvNzU3TA+slY/SOHJceIWzrpTnHJa+e+OqkS8SFUrL1yF4oIlqq5e1WXhUlOnT6FREt0jw/P493797FxcVFHB4exv39fdzc3LRHAVGmXJ6AbFAQR28nJyfNUN6/fx+vXr2Ki4uLRrqnp6ftAB9O5r+6uooPHz60HREo7PHxcUQ8Kr+JLKeDjvToJ6mmSwr58B+XT4jI3759G3/605/i/fv3cX5+3tJ+SJe+sN3m+vo6FotF+y4tHIejE9cGkRNRLtGEX655Q+zX19dxdXW1d7ZsTvl9EI9JO8vKpMn82oFyPX2ZzWZxeXkZFxcX7csj+Sz6gFP3eR9EXPmwIe5DlDcajdp8kw1dXl7Gu3fv4s2bN3vfiE267kdpcUbWWdd+Dc9HdoguEdgZEwiYlPP8o7uMISL2HJCzGDK7jx8/xsePH+Pq6qrJCSeEPtru+K62xWLR2iXAOT8/j9ls1vR0t9u1gIz+WcfQYS/sQfCz2awFYxGx97QlvGT5fm0i7rpP14TibVmj0WgvNUOoOYKL2F/MwOCI5t69exevXr1qnne73cZ8Pm/KnBebqLPmFfSIaBHx3d1dXFxcxGg0aiT8+vXruLy8bNHK4eFh3N7eRsTjSU0cEE7UnWuHjiR8MlNeIcagIQUU1gsMliuK68jqzZs3rb8mGJdgeAT78+fP7X+kjxiY5UXpwqdqcYA0BDVUQ9tsNjGfz5uT9WOaHr8P1WacPqmKyIi0nbocmQ2yY84t//Pz8xb5E4m6dusHC9brdWsfA18sFi0Fdwbl+zlNtqO+uLhocsKZWDbMgwMAZxw5C0DOlHRMiC7foPOu+1rXXdLAVg4PD1tww1yT2fmshPl83iJ1gg/kgR57Mcs7W3AKzK3t7OTkJHa7Xdtu6ZJFzgA83xA9enR6ehrn5+fNsSF3ZNo72j3InjPhV3tMgy0kQ7W6iOHHNl/s2MCKcN5ekmtbQ22+dM/cft4dkfvuyMLOYqg26/Ts55AXmoZW0If6jUzyvYfG71Vwp265TX5/6f/5ff/0giP3HZJ7bvu5cQ/d030fajsvBOa++TNDMn/u/SF5eQ7+1Xl4yQ6ek/kvJRDrn+89pLtZ7/0Z670//5ItDfXR5Oy54V5ZJr8kIs33HArcIr7oIhnzr4hnO9eNdAuFQuHfCM+S7m/yGPDP4ZdGgOD/Jz342vfoURv62silncLP499ZZn8Eu+2BinQLhULh18ezbP/bnPhQKBQK/6Yo0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOKNItFAqFjijSLRQKhY4o0i0UCoWOGP/M+wddelEoFAr/JqhIt1AoFDqiSLdQKBQ6oki3UCgUOqJIt1AoFDqiSLdQKBQ6oki3UCgUOuL/AmNnvUHxlin1AAAAAElFTkSuQmCC\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 27; current eta: 0.5, current beta: 16\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 28; current eta: 0.5, current beta: 16\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 29; current eta: 0.5, current beta: 32\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 30; current eta: 0.5, current beta: 32\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA0o0lEQVR4nO2dyY6jx/XlD2cyB+ZYkwwbsAWvZOC/8XP0slf9Yg30A3VvvDCglSEbsGC7KkfO89CLwi94vhCrJLmrQmr5HiBRQ5L8Yrj33DGCtf1+r0AgEAiUQf2nHkAgEAj8JyFINxAIBAoiSDcQCAQKIkg3EAgECiJINxAIBAoiSDcQCAQKovk9v49+skAgEPjxqH3oF+HpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCgUBBBOkGAoFAQQTpBgKBQEEE6QYCnxjLzVarze6nHkbgZ4og3UDgE+O//8//rf/xv/7PTz2MwM8UzZ96AIHALw3/7b++ULNe+6mHEfiZorbf7z/2+4/+MhAIBAJH8UGrG+mFQCAQKIgg3UAgECiIIN1AIBAoiCDdQCAQKIgg3UAgECiIIN1AIBAoiCDdQCAQKIgg3UAgECiIIN1AIBAoiCDdQCAQKIgg3UAgECiIIN1AIBAoiCDdQCAQKIgg3UAgECiIn819uh+6YrJW+3H3kn7PVZX/T/ixY/lU8Dn9VGMohc+xf/9Ja/ZzkNFPjU/FAT8XOYj7dAOBQODT44MMX9TT3e3ef2/Ufr9PP9vtNv3we+m9VarVaqrX68lC+Z/+dz5rt9tpt9tVPv8Yvu/3DsbQaDTUaDQq1pL3Mx5ey5h9nD9kHPk8js2FsTSbTTUaDdXrxzNE/jm8j/F9bDz5OPj7sXl8bB39/3j/sfVxOcjn7chlwMfk487fw/NYt/y5+Tr7PI/N+WP7ms8zl9MPgef7XrncH3v9drvVer2u7PExOTw2jh8jlx+Sw1wPXId/qF59bBwf06lcTvk7f/p4geuwywHP/5hefGoUI93FYqF3795ps9loPp9rNpvp7u5Of/vb3/T111/rm2++0cPDg9brtRqNhk5OTnR1daXr62udn5+r0+moXq+r1Wqp0+no9PRUp6enajab2mw2GgwGuru709u3b/X4+KjZbKblcllZ+O12q+Vyqel0qul0qsVi8VHyrdfr6na7evPmjb766iv9/ve/19XVlSRpvV5rvV5rv9+r3W7r7OxM19fXevnypV6+fKnr62v1+311Oh01m820qQjFcrnUbDbTbDbTdDpN/x4Oh7q/v9fbt2/17t07PT8/azKZpHXp9/v68ssv9cc//lF/+MMf9OLFC7Xb7crnr9drjUYj/eMf/9Dbt2+13+91e3ur169f6+LiIq2lpKRUm81G6/Va8/lck8lEg8FAj4+PGo1GWi6XajQaarVaarVa6RmMnbXebDYVEliv19put2mNrq+v9erVK718+VL9fl/tdlur1UpPT0/6+9//rr/+9a/65z//qcFgoNlslta31Wqp2+2mcfMMlJH1XCwWWq/XqtVqarVaSYa++OIL/fa3v9VvfvMbXV9fp+cOBgPd39/r7u5OT09PWq1WqtVqaa7IQL1eV7PZVKfT0cnJiU5PT3VycqJWq6VarZZkYbfbqd1uq9/v6+bmRldXVzo7O1O321Wr1Upy4Gu/XC41HA719u1bPTw8qFar6c2bN/riiy/U7/fTM3j9arXS/f29/vznP+tPf/qTvvnmG41GI223W7VaLZ2dnenq6kqvXr3S69ev9eLFC11cXOjk5KSiN71eL62nf/5ms9FyudRoNNLT05Pu7u7S+kwmk7RGyIIkPT8/6y9/+Yu+/vpr/etf/9Jisag4UA6IrtvtprF0Oh01Go3Ka1jrm5sbvX79Wi9fvtTl5aWazWZF9pbLZVr75XKp8Xisp6cnPT8/azababvdqt1u6/b2Vl9++aW++uor/e53v9Pt7a1OTk7U6/XUbDb16tUrdbvdH0tr/xaKke52u9V0OtVms9FsNtNkMtF4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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 31; current eta: 0.5, current beta: 32\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA0sklEQVR4nO2dy45jx9WlF+9MJsm8Vqkk2b9hw/DEAv6B36OHPeoXa6AfqHvgoTwwLAiQILkumWQmb8k7e1D9Ra4TxayS/KtCankvgKisTPKcOBF7r32NYO1wOCgQCAQCZVD/uQcQCAQC/04I0g0EAoGCCNINBAKBggjSDQQCgYII0g0EAoGCCNINBAKBgmh+4O/RTxYIBAI/HrWn/hCebiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4gEAgURJBuIBAIFESQbiAQCBREkG4g8BNjtd1pvd3/3MMI/EIRpBsI/MT47//zf+t//K//83MPI/ALRfPnHkAg8GvDf/vPz9Ss137uYQR+oagdDof3/f29fwwEAoHAUTxpdSO9EAgEAgURpBsIBAIFEaQbCAQCBRGkGwgEAgURpBsIBAIFEaQbCAQCBRGkGwgEAgURpBsIBAIFEaQbCAQCBRGkGwgEAgURpBsIBAIFEaQbCAQCBRGkGwgEAgURpBsIBAIF8Ys5T/d9R0zWaj/8bNIPHFX5X8KPGcdPCX+mn2sMJfFTruG/23z9EmT0p8ZPpf+/FFmI83QDgUDgp8eTDF/U093v335v1OFwSK/dbqftdqv9fp/+Lr21Svnr2N/A4XBI1/DrH8OH/u6o1Wqq1+tqNBpqNBqq1+vpGvn7eG+9Xj86xg+Ng595jvxZuF6j0VCz2ayM59i1fU4Z01Pv92fycbxvjvz973s+4GPgWfxeu92u8tyOHzqX+WdYD+bq2H3z+73vXvz+fWPJn/FD7+f+vlZ8/qn3oze73e4d+fDnPjaOHyOXuRwemwvGw/r9UL360Dwf06ljYzz2u2OyV6/Xk97k93+fXvzUKEa6i8VC33//vXa7nZbLpebzud68eaOvvvpKX375pb7++muNRiOt12u1Wi31ej1dXFzo/PxcJycnarVaiXA6nY6Gw6EGg4Ha7bb2+70mk4levXqlV69e6ebmRovFQuv1ujLx+/1eq9VKs9lM8/lcy+XyveRbr9fV7Xb1+eef64svvtCf/vQnXVxcqFarabPZaLVa6XA4pPGen5/rk08+0bNnz3R1daXhcKhut6tms1kha8bx8PCg+Xyuh4cHLZdLLRYLTSYT3dzc6NWrV3r58qXG47Hm87nW67Xq9brOzs70xz/+UX/5y1/05z//WVdXV2q325XrbzYbTadTff/993r58qUOh4Our6/1ySef6OzsrPJ+lGq73Wqz2Wi5XGo2m2k8Huv29laTySTdu9vtqtVqSVJ6L2NH+RkD67xarbTZbNRoNHRxcaFnz57p+fPnGg6HarVa2mw2Go1G+uabb/T111/rn//8p8bjcVo/SWq1Wjo5OVG73Vaj0UhziCLudjut12s9PDxos9lIktrttk5PT3V+fq7PP/9cv/vd7/Qf//Efury8TPe9u7vTzc2N3rx5o/F4rN1up1arpU6no263m5RTUpK9brerk5OTo3Ox3+/Vbrc1HA51dXWli4sL9fv99F7kwOd+vV7r/v5eL1++1O3trWq1ml68eKHPPvtMg8Egyb2//+bmRn/729/017/+Vf/4xz90d3enw+GQnvni4kIvXrxIsjgYDNTr9dLYT09PdXJyok6nUyEz5GC5XGoymej29lavX7/W69evdXd3p/l8ru12q1qtpk6no1arpcPhoNFopL///e/68ssv9d1336W5OAaIrtvt6vT0VP1+P43D39Nut9Xr9XR9fa0XL14kmanX61qv15pOp5pMJlqtVkn2NpuNHh4edHd3l2Ros9mo0+no4uJCv//97/XFF1/oD3/4g549e6bT09O0zp999pl6vd4PJ7T/AoqR7m6302w2026308PDg2azmSaT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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 32; current eta: 0.5, current beta: 32\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 33; current eta: 0.5, current beta: 32\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 34; current eta: 0.5, current beta: 32\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 35; current eta: 0.5, current beta: 32\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 36; current eta: 0.5, current beta: 32\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 37; current eta: 0.5, current beta: 32\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 38; current eta: 0.5, current beta: 32\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA1zUlEQVR4nO2dW49kx3WlV97vt6rqIpuSKdqwDAiQYf+SeZyn+WMDzA+aeTTsBxuyANEmm2pWdVblPSuv89D4otaJziIpmX0oS3sBhb5U5jlxIvZe+xpxKufzWYFAIBAoB9WfegCBQCDwl4Qg3UAgECgRQbqBQCBQIoJ0A4FAoEQE6QYCgUCJCNINBAKBElH/nt9HP1kgEAj84ai89IvwdAOBQKBEBOkGAoFAiQjSDQQCgRIRpBsIBAIlIkg3EAgESkSQbiAQCJSIIN1AIBAoEUG6gUAgUCKCdAOBQKBEBOkGAoFAiQjSDQQCgRIRpBsIBAIlIkg3EAgESkSQbiAQCJSIIN1AIBAoEUG6gUAgUCKCdAOBQKBEBOkGAoFAiQjSDQQCgRIRpBsIBAIlIkg3EAgESkSQbiAQCJSIIN1AIBAoEUG6gUAgUCKCdAOBQKBEBOkGAoFAiQjSDQQCgRIRpBsIBAIlIkg3EAgESkSQbiAQCJSIIN1AIBAoEUG6gUAgUCKCdAOBQKBEBOkGAoFAiQjSDQQCgRIRpBsIBAIlIkg3EAgESkSQbiAQCJSIIN1AIBAoEUG6gUAgUCKCdAOBQKBEBOkGAoFAiQjSDQQCgRIRpBsIBAIlIkg3EAgESkSQbiAQCJSIIN1A4EfG0+Go3eH0Uw8j8CeKIN1A4EfG//zf/1f/6//8v596GIE/UdR/6gEEAn9u+B//8Jnq1cpPPYzAnygq5/P5u37/nb8MBAKBwEW8aHUjvRAIBAIlIkg3EAgESkSQbiAQCJSIIN1AIBAoEUG6gUAgUCKCdAOBQKBEBOkGAoFAiQjSDQQCgRIRpBsIBAIlIkg3EAgESkSQbiAQCJSIIN1AIBAoEUG6gUAgUCKCdAOBQKBE/Mmcp5sfMVmp/PHnkX7PcZV/FP4r4/kxcD6ff/IxlIUfc/3+kubsp3zWj6Fz0o/LA38qshDn6QYCgcCPjxcZvlRP93g8pr+fz2edTicdj8f0gwGoVquqVquq1WqqVquqVCqqVCovWtPz+Zyux49/Nrdwlz7zEiqVShpLvV4vXMu9C8bp471070vj9r9feha/V6VSSWOp1WovXt+v48/xfePhT+aH7/t85J/9vmv5d1lbX1OXBe7rc8N3f+jY/fO+fi/d9yV5eel++e/zOchl4buuxfd9DLkMXfr88XjU4XBIepPLYj7PuUz+0Lm8JAu5V30+n9NY/lC9qlaLGc6X5OX75uQlWXL5r9Vq6SfXhVqt9r1j/rFQGukul0v97ne/kyQdDget12t9++23+rd/+zf98z//s373u99puVyqUqno6upKv/jFL/TLX/5SP/vZzzQYDFSr1XQ4HHQ4HHQ6ndIknk4nbTYbPTw86O3bt/rmm2/07t07LZdL7fd7VatV1et1NZtNSdJms9Hd3Z3evXun1Wqlw+HwopBUq1W122391V/9lX7961/rV7/6lSaTiarVahKySqWibrer0Wikq6srXV1daTQaaTAYqNPpqNlsFsgaodjtdtpsNlqv13p6etLT05O2263m87nu7+/19u1b/f73v9fj46NWq5X2+70ajYbG47H+9m//Vv/4j/+oX/7ylxqPx2o0Gkl4UYDVaqW3b9/q7u5Ox+NRk8lENzc3GgwGajabhc+fTicdDgft93s9PT1psVhoOp3q7du3mk6n2mw2aS5arZaq1Wr67Gaz0X6/Lygb19tsNnp6etLhcFC9XtdkMtGrV6/0ySefaDKZqNFoaL/f6/HxUV9//bW+/PJLvXnzRg8PD1qv19rtdjqfz6rVamq322o2m6rVagWSqVQqOh6P2u122m63aU2azaa63a4mk4k+++wz/eIXv9DPfvazNF+73U6Pj496+/atvv32Wz08POh4PKper6vVaqnT6aher6d5ggAajYY6nY5arZYajYZOp1Nau9PppE6no+vra93e3ur6+lr9fj99lushC8jBYrHQ3d2dHh8fVavVdHt7q9vbW/V6vYLsnE4n7fd7PTw86De/+Y3+6Z/+Sf/+7/+ux8fHJB+9Xk/j8ViffvqpPvnkE93c3Gg4HKa1a7Va6na7STZ9PMgOsrlYLDSbzTSdTjWdTjWbzbRer9Oa1Ot1nU4nTadT/eu//qv+5V/+Rf/5n/+Z5uISKpWK6vW6er2eXr16pevra3U6HUnSbrdL+t1oNNTv93V9fa3Xr18nmel0OqpWq8nYoN/1el3H41GLxUJff/21fvOb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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 39; current eta: 0.5, current beta: 32\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 40; current eta: 0.5, current beta: 32\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 41; current eta: 0.5, current beta: 64\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA8pElEQVR4nO29SZNcV3Llf2LIjDkyInIGEkiQLLKqJKN6Je1qJ60k6+V/1V+szfpr1K5WMi26dyqaiUUWCVQOyDnmeY7/Av278HiIBMAS+Vhd8mOWBjIj47377nDc/bjf+xKr1UoOh8PhiAfJn7sBDofD8V8JTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDEi/YHPvZ7M4XA4fjgSj33gnq7D4XDECCddh8PhiBFOug6HwxEjnHQdDocjRjjpOhwOR4xw0nU4HI4Y4aTrcDgcMcJJ1+FwOGKEk67D4XDECCddh8PhiBFOug6HwxEjnHQdDocjRjjpOhwOR4xw0nU4HI4Y4aTrcDgcMcJJ1+FwOGKEk67D4XDECCddh8PhiBFOug6HwxEjnHQdDocjRjjpOhwOR4xw0nU4HI4Y4aTrcDgcMcJJ1+FwOGKEk67D4XDECCddh8PhiBFOug6HwxEjnHQdDocjRjjpOhwOR4xw0nU4HI4Y4aTrcDgcMcJJ1+FwOGKEk67D4XDECCddh8PhiBFOug6HwxEjnHQdDocjRjjpOhwOR4xw0nU4HI4Y4aTrcDgcMcJJ1+FwOGKEk67D4XDECCddh8PhiBFOug6HwxEjnHQdDocjRjjpOhwOR4xw0nU4HI4Y4aTrcPzImMwXms6XP3czHH+hcNJ1OH5k/H//83/rf/yv//NzN8PxF4r0z90Ah+OvDf/9vz1ROpn4uZvh+AtFYrVave/z937ocDgcjo141Oq6vOBwOBwxwknX4XA4YoSTrsPhcMQIJ12Hw+GIEU66DofDESOcdB0OhyNGOOk6HA5HjHDSdTgcjhjhpOtwOBwxwknX4XA4YoSTrsPhcMQIJ12Hw+GIEU66DofDESOcdB0OhyNG/EWcp/uB4yU3IpF49+S0P+c6/9l7/tTY9Ew/Rzviwk8xhv/V+usvZZ7+mPix1vtfwlzw83QdDofjx8ej7P6zeLoQ/WKx0Gw203Q61WKxCJ9hjRKJhJLJ5DvWKZlMrv1wrcViofl8rtVq9V4r+EMtJO3Y2tpSKpUK17DXSSQSSqVSSqVSG9v8MeCay+VS8/k8PJO9VzKZ1Pb2tra3t8Ozf8w1E4nED2oT37P3jn4/+nkUy+UyPA99SB/Za61WK83n8/DD96L9+772P/b3yWRS6XQ6/ETvSx9zT8busb7lupv6Ivr5n9PfH/u95XKp6XSq6XSq5XK5dm/6OJ1Oh+f5c+cjc5H+AfaarOPo33wM3tcu7pFOp8MzSW+e3f5sajPtsHySSqW0vb29to5/Ds83NtJdLpeaTCZaLpeazWYaDoe6uLjQ7373O/32t7/Vy5cvNR6Pw8TPZrOqVCra3d1VsVhUMpnUYrFQOp3Wzs6Onj17pufPn6tarWqxWOjy8lJff/21vvnmG9XrdY1GI83n87U2sMiYRB+LbDarzz77TL/5zW/0+eefa2trS6PRSN1uV8PhUMlkMrTpl7/8pZ49e6adnR1tb2+/d1CXy2Voz3w+13Q6Vbfb1dXVlf7whz/oq6++0tnZmer1usbjsba3t3V8fKx//Md/1L/8y7/o2bNnYfJEsVqtNBwO1Wq1tFqttLOzo0Kh8Ojf8x3GZzAYqNFo6P7+Pty7UCgol8spkUhoOp2q1+up1+tpMBhoNpuFCb5arTQej9VsNtVsNjUYDJRKpfTixQt98cUXevHihWq1mtLptObzuRqNhr766iv927/9m7766ivd3d2tXZP5gKGhnRAKBDQejwPBb21tqVAo6PDwUH/3d3+n3/zmN/ryyy+1u7sb7ttsNnV2dqZvv/1W5+fnWiwWKpVKqlarqlarymaz4XnsNenL7e1trVYrjUYjDQYDTadTZbNZHRwcaHd3V4VCQVtbWx80wvP5XMPhUJ1OR4lEQtVqVfl8/tHvLBYLXVxc6Le//a1+97vf6ebmJtx7b29Pn3zyib788kv9+te/1tOnT1Uul7W9vR0MD47B++bBdDpVp9PRxcWF/vjHP+ry8lKdTkfL5VL5fF7lclm5XE6z2Uzfffed/vVf/1UvX77UZDJ59LpRYBCjRliS0um0crmc9vb29Ktf/Up/8zd/E+Z7s9nU+fm5rq6u1Ol0NJ/PlUqltFwu1e/31Wg01G631+ZDLpfTp59+qn/+53/WP/3TP+n58+fK5XJhfDKZzEc5MT8GYifdxWKh8XisXq+nZrOpfr8fvDm8VDqCBYYnPJvNJEmTyST8fa1WUyKRUL1e13A4DNZvPp9rNputeYqQ7g8hXEmBcGq1mnZ3d5XJZDSZTJTL5dTr9TSbzZROp4Mx4Tmtld3UH4vFQtPpVLPZLJAuz5jL5XRwcKD5fK5isajJZKJ0Oq2DgwMVi0XNZjPNZrONC5q+YQIy8dLpdJhcfMd6BNYg3t3d6fz8XDc3NxqPxyoWi9rf39fOzo4ymYxms5lGo5Ha7bYeHh7UarXU7/fDWM3nc41Go/D/uVxOmUxG2WxWq9VKnU5HyWRSw+EwGMyLiwt1Oh1NJpO1iGW1WmkymYTxZIyZIyw46+3O53NNJhN1u11dXFzo3//93zWfz/X06VPl83ktFgu1Wi1dXFzo9vZWjUZDo9FI9/f32t7eVi6XC4SQyWRUKBRUrVa1v78ffs892u226vW6+v2+stmser2eFouFDg4OlM/n3yFe2/cYjG63q3q9HiIqSHLT2DJfisWiTk5OtL29rfl8rkwmE9qYy+UkSbPZLKwX+m57e1uSHiUZ/nY8Hms4HIb5XSqVtLW1pVKppHK5HNZBvV5XoVAIa/WHgPGz0YH1aHEeGo1GaFuz2dT19bUeHh40HA4lKXivGGm4Yz6fB8MMKTebTe3s7Gi5XCqbzSqVSoUxigOxke58Pg9WaTAYqNVq6ebmJiy+TCYTiCqTyYRFKimQEYuRxTwajdRsNpXNZjUej7VYLJTNZlUoFIJcwb2jYfLHhkHWs37x4oVOT0+VzWa1WCzU7/fVarXU6XQ0Go00m83U6XTU7/eDd/FYKLpYLDSZTNaICeJNpVKqVCo6PT1VtVoNIWQymQzkP5lMNB6P3/EUuHa/39fd3Z0uLy8lvZnA6XRa5XJ5bYJFJY3hcKh6va6XL1/qD3/4g25ubjSfz7W7uxvaWSwWtVgs1O12dXd3p5cvX+ry8lL1el2DwSAYNaQQSGuxWGg0Gunm5kaZTEbz+Txc4/b2Nnj0iURC2Wz2nfnDHLAGDVLc2toK8wUkEgmNRiO9fv1a4/FYV1dXOjw8DH0wHo/VarVUr9fVaDQ0GAw0mUzWQvZUKqVCoaDd3V09f/48kBZk0e/3dXt7q8vLSzWbTaXTaTUajRBl7e3tKZ/Pbwz1MXKdTkd3d3e6vr4O0kYmk1GxWNw4tqPRSJPJRLVaTV9++WXoc/q7XC6rUqkEwzAej4M3iHeeyWQenZsYgn6/r263q9lsplwup1qtpp2dHVWr1dC24XCo6XSq58+f6+zsLNzrYxA1/Izn1tZWWMeZTEbL5TJETJPJRK1WS81mc83hYQ5ICvyBsU4kEuF5O52Obm5ulM/nNZ1OVSgUlE6nlc1mlU7HQ4exke54PA4LuNfr6eHhISxUwgDpLSHSYdJb/YoFl0wmw+IYj8cqFApKJBJaLBbBS5lMJuHvrTb6Q5FOp1WtVnV8fKyjoyPt7e0Fb61UKgXPEQ+x0WioUqmoUqkom82+44laghuNRsE7tOQnvfGuS6VSCDOtN5DJZILhkhSsNX0wGo308PCgq6sr3dzcSFLot/l8vkYCNgLA47q/v9f19bVubm50d3cX2o0hRA65v7/X+fm5vvvuO52fn6vdbgevinayAMbjcZActra2QjuHw2H4DLIjlGcR4FGOx+MgUXEPniGZTAbvlO/wPcbm/v5e2WxW+XxeuVxOqVQqeOz9fl/9fj8QWvQ5mKfpdDoQVzqdVq/XU6PRUKPRULPZDOO9s7OjnZ0dbW1tBaK2Y2iN3P39vV6/fq37+/u1iERSaKf1PtvttgaDgTKZjI6Pj9fGcLVaBXK1fTedTpVIJMLvkRg2zU/GhucaDofKZrOqVqs6ODhQrVZTPp8P67rf7+v4+FiVSmXN4HwIds7bOY6htvOt1+up2+1qMBio3W6r2+0G3kilUppOp8EYRueI9IZDxuOx6vW6Li4utLW1peFwqFKppHQ6HdZrHPjJSZcHH41GOj8/12q1CqHU7e1tWKhW/MYDSCaTISywYRLEjLchvbFuqVRK2Ww2LKRomPJDweTHuhcKhbBg+Xw2m6nb7Wq1WmkwGGg+n2tnZyd4VOl0em3wbRgP2eCV87w2uSMphJv28263K+nNoiLUSyQSoT339/dqt9sajUZaLpdqtVohmsBY2OQEoRjRBN5WNpsNXhRa73K5DB7r69evdXNzEzwR64XyDDy77Su8eojWJgrxdDKZjFarlfr9/lrSK+rpWrLBAEPS0+k0EPBoNFpLRBK+syBHo5FGo1H4HvdAW8YQFgqFQPJEOFyXf/neeDzW1tZWCHOlt0nfyWQSHJBWq6XBYKBkMqlWq6X7+/u1yAQnpNvtqtlsqtvtBieDeWH7M5ogZI4R8WQymWB47Vq10hQRAHpxLpdTuVxWqVQKjkcymVSxWFS1Wg3z0EYKHwvrcBC9QLoYR/oL42jHiGfEsYgm/5A32+22bm9vtb29rdFopHK5rEQiodPTU+3s7LxXEvyxEJunOxwOdXZ2pq2treClYa2iHRRdXFbvhQCk9SoEFiCh04+h0bCACFuiGWqbiccLIfzp9XrB+kYHEUPCpJUU2s61sOiz2Uzb29vK5/PBS4HI8OImk0lIks1mM/V6PY3HY0kKXlkikdB4PFa32w3639bWVvAouT/a3dHRUZASJpNJIELu1263dX19rXq9Hp7VGgoWgiUApAPGkzGlr+nvbDarbDarra0tzWazjfrzpn/J2KPvcU1L7Da3AOlavTOa+bbGqNfrqV6v6/r6WltbW9rZ2QlJvt3d3aB37+3t6ejoKHhRGFkkJPT4yWQSPH1JwXBKCnkPchx2TpAksvPHSlXM13w+HxyTdDodSIl+sJIbzwt593q94FHSB/QxfRuNzjKZTDBmP1TbtcDw2utZuTCah4BobRQRjW6tpNftdtVoNIIMN5vN9Pd///d/dnt/KGIj3dFopKurq7CIbWhgM6p4LDYUi5JrVMsjKyu9DZui+CE6LmDC4m21Wi3t7++H9lljYds6nU5DQi2Xy621x052Jhf3YnEul0sNBgPd39+r3+8rnU6rWCwqn88HOQMykd5mm23YDqnk8/k1Dc9qfITKhHPoacViMSz2nZ0d9fv9d5Kg9Xpd9Xo9kLgdG/57U4lY1Ku1P9YDxbuLEnlUh4yWLvHc9CsEAPHaMiOMV9SIRrVXe32iNKKGYrGo7e3tkGDF60P35DlsmG+9b6IKKiWQFxaLhYbDYVgPRBmdTkfdbjdEhxiR4XCofr+v+XweEl61Wm3N87ZaO4QVdWJsAs1GltY40WZrCPr9fljPf46zs8m7tEk21jhkjFYb/V50PK0MRduI1CSFyhMScnEgNnmBLKe1rplMRqVSKWi3kIWtrbSWlM7E8ysWiyoWi6H0A53MhhfSW0J7rH2bYAdzMpno4eFBFxcXKpVKQRflfniHEAREZ7U0JiJWmMm+tbW1ZqEJ9/E2ms2mJKnf76+VKlnrv1q9yWjbMJSSOSYshMZEZPFPp9OQrIB4IWvb70xUkhgPDw9qt9vh+SxJ8rxECY/VWtv6WbxTFrfV7DHQkLNNePA7u5CIDuhfwmmy/ptKBmkz84ixgvQg8dlspna7vebBElqXSiVVKhXt7OwE3dwSLnqxNVLor8wJW/mBpINUMRgM1Ov1QvIKiQYyHgwGYT7s7e1Jeuv9W8/UylTWGbESxWq1CgnEZDIZvHaMNo7F/f29Li4u9PDwsObdvs/J2USwm9YInqpNQkoKz00ewsI+L2OZSqWUy+VUqVSCtMa6nk6najQaoWror0peYLJSb8nCZsHmcrk162qTO9EBsB5FpVIJITSLkw0XUUGfzrSDK71/s8Rq9aYOEwGecqNqtRoWIvWgpVIplKEQGhM6QhS0z5azWc/K/jd/y8Kn72wihnB1NBqFRW5DTbTHqCGjj6Q3EsRsNgteW3Qhkogi01+v19VutzUcDrVYLELUYY2bvV90QwnPjDEgYkkkEmtEG63sQGe2hEl/2aqW8XgcJAp0QeYOBp6IwoIFa4mJe2AUSH5R/8zf2KiCZ7UVKf1+P5Alfc46wOPmGZbLpYbDoYbD4VqEguZsdVtkCoiQsWMubaqY4Hs2CSlpjVC3tra0t7cXauTz+bwKhYIkhTIySu4uLi5CbfyHtFw7z+0atLBRARo0kUA+nw8lgmwg4l/GCSnMJp7z+bwqlUqoL0aSmE6nQcaLC7GWjPV6Pe3s7Ly58f8tfqYzDg8PQ4g0GAzU7XaD3oKHwmBRvnJ8fKxqtapUKhW8HGokrUYXTaRZr8lqRVEQug0GAzWbTd3c3KhUKgUvirIwvG3uKymQLsk1q/1SAhf16q1nRZkVYX0+n1+TFyDbfr+/VmdImzFeVt4gIceiY9Lxt3YRspjJ7Hc6HbVaLbXbbfV6veBJ49FawrIhqfVQouNgvXDazsIfDAYaj8driwEPhmvaEJlnYa7ZcaB90tvdU9L6LjCuab1j+xxWAoMArVFBiybRiuePBz4YDEJNOobGaulo7q1WS6PRKJCFNWbMGRwVHBDmHfIIpVaMp62Dx8sn42/rW9E80fx3d3clvdVxbZTU7XZ1e3u7lkhF2/8Q8VrCja7L6A/Sy87OTlhjlGyS9LTXwTkpFAoql8sqFApBmqOayEZ6o9EotDsuxOrpdjodVSoVSW8WAxIBpT5kt+/u7vT69evgSTFZmKT5fF77+/t6+vSpqtWqVqs3xfaE2CzI6I/FhyaGTbr0ej1ls9lQQkPSBC+KsFzSWnshV7LSeBl2E4RNHFmJIZ/Pq1qthkmCgUKjRFvFu4A0CBGXy2XQ9SSt1T1CSnwXz9fKHhb2mSBriMKWdrFQbAJjUxJR0hrJQXR49daLARgn+sqGuiw8rk17o56qva/1Um3+gKiJttuEHL+zyUD6wxrc6PNaI4dRQyKDuEkyUnserYigvZBKuVwOkQ99Alkjb0CS3NeW5rEGMUjMz6jht5EKpMycbrfbajabajQaofoiWom0CTbCjP5dNDlHBFGtVrWzs6NE4s3usul0GpLxNtGHI7Ozs6OTk5O1umyiFJy54XAYpJn3OV8/NmIj3cViEbaNEuox6ahpTCQS6vf72traUq/X0/39fbDA0lvPiEHY3d1VpVIJE77dbn8U4UYztu9rMwuh2+2q3W6HRMZgMAgGg3ZBIjZ8Z0EyMSBMPJNisShJa94qWne1Wg0kQDhqdb/hcBgSWdZbgxDxvCqVSihsR0qQ1jeNsHDJGGNIbLvRFKNVBdbQ8bx2AdsxBCQ28OhZFFFdkTGg/rpUKoVEEZUaGB++w3V5/mKxGIw6hpT727635AvR4sHzfPQdv7dS1/7+fuhnIgzkkWw2G8apWCyuPQdGEg0frRyihIRYN+VyOZAqxjqbzQZ5oVAoBO3Stns8HofNO8w/K/dhZHgu2y+0gUQbc6HT6bwT/byPwN639jatW8a+WCyGDR/JZFLtdjvwRzSSIgF8cnKi58+fh91ydrcj5Nvv99Xr9T66tvjHQKzyAjtcGHDE7XQ6rUKhEBYJGykoDEdLk9YPlkG/kbQWSlnv4zF8jGBudeXhcBgWxcPDQ/Am8HZtQmxTthevDF1usVgEgrPJGlvcTyjKLjXCftqElod1x2uBcHZ3d8OmjlqtFsrKIFsIbblchnMV0HUlhZCMUBnvxoab1FNiEGySA2ODVGGB7lYsFkNfzufztS3gaId4NxgiPJfZbBZK6Vj0LDprmEkCUQ1gk1m2LXYceT4ICQIlGSYpRCS7u7t68uSJnj59Gs5cYByt5ME8hXD5O6QArg952g0j/EvoTx9bOQTDXCqVQtLVRlCE1ezkQmLI5XJrO7IwRlYLxqDaLfzU8drkno1yPrS2HoMtrWMNYwB5Vms0Ab/j3Jb9/X3t7++HHavUkSNfknzECMWFWEl3MBiEB8ejKxaL2t3d1Ww2CwNPKM1ihljspGm1Wmq1WqE4HqvFITR4CptkhGg50PukBq6BfspkI0uNvGE9TbwFQkMMAe0HlrQgOElrybLV6s3ec5swY6LYjRUkI/kplUo6ODjQ0dFROEDF1gxTeoP3h3drTzDDs1qtVur1ekE/JMmB91mr1YLHbpN46PG03xo5xrlcLgeDsFgs1rRQ+i6ZTAZPZ3d3N2w6mc/nYc5sbW2tlS1RScDfsxjRWAmTmQMQLGclEHrb7eicZcHzY8C2t7fXogk8TOYVfcszEbZbTXi1Wqlara6ddYAhwZjYsj3WEm1DeiGyIVNvd6BRqYLXb+cgxtU6M3aLOZ4nem6j0VC9Xg9nbnzsKWNWpnlM9uM+RHKsbeqOqVXGeLD+NmnrGBLmIZ653dWGExQXYikZ41+2fUI8TBR2uJDFtZ/bQScsaDQaOj8/DxY/nU4HfYcssc1O25Db6nTWG33MQtvQBeIlRMNbiJZjWZ3S6rsseO6Np4fXg5fFv9bis9A6nU6Y7HZXErIL12L/PSRiJznhPx62DSNtPSOf42FzsEur1QqTNJVKBeLEO+UsCpvNtslN9FmkhWKxGMJjW9eLzggZViqVULGCp4vRRZJAOrDjzPgkEolAVFaHtrXAjCfGCy+cdnc6nSC1UCWBHEDfRWUKjALerg3VLQnZU8x4tmhVh63KsTo+kQrGBgkCo0k/QWREEBhfu/sLY2BlB1vxgJNDfe6mtbZpHdm+sX1gpQS71pAAOp1OOKNlPp/r5uZG5+fnYYtyNAqmz7jGarVSq9XSw8NDqL5hAxPOoC2//KkRq6YrSYPBIEx4W+KBdppOp9XpdNaOZQOE3IS4bAYoFArB8tuJaS2vzUJjxRl8FozdIcV3bLbc6qlWM8VLpZTFhqM8OyEiyQxbUWB3h9EvVoezRfG3t7e6vb1Vq9UKyZdyubx2LbwW+owzA+zvqFiAbO22ULsg2H12dXWls7OzsHWbsbOhP/1pJRRbD4zna2uMrU5IJplFhofH37FJhDMNkJHa7baWy2XoW0jCygbRBJ8tN5LeeOhIOfQT5FssFoPBhADZDp1IJHR2dqZnz57p8PAwaK22KgEDg8FjzkEMksJYM7doO+MnKXiZRD94vowBkSO5huiZy1Y+sREOBkbSmkxhk2zM4WKxGLxrm7C0a0V6d7eorfLYlIgEELDNfzD/kSgvLi50fX2tVqsV5jGcwjolIYmxaDab4XwLCJfKIuZXXIiNdBmEaPmX1TFHo5EymUzYEWMz6ehZ/LfNnNdqtWAdNxGnDf9tFpzFn0gk1o6/i35f0poXQyhfKBRCRYAte2LRSwrbDuv1uu7v78NJXHgVh4eHa144Pyw6ZIHFYhFOZuMcUevlkmRAE4X8OAMVUrF6HZsXWGB2I4Ml3NevX+v777/X9fV1COnoexYsbWTBULZG2RceP5/b0jBIjv3+9Xo9JD2sYYRcWPjsxIIIiaSsjENfsMuObbcQhjUwEB8kyed2zDFOzLder6fr62u9evVKBwcHIQ8RTUQxnrZckM0M9DXJKYwN64N5NRwOg1dtNWqqeawcEt1swr92Czfbx7vdrg4ODrS3txfKIK3Hy9zHo7YbklgT1mO3sB4uDgGyjM1H2GS5jY6t18uBSZSoWVmA+3Ot4XCoZrMZjFO9Xtfd3V04twIHzRr1uBA76UKcqVRKk8lE/X5/LbQhoRKtYbWCPpMUbYm/Q8+z3ukmWJmB/4+2c9P/sxgt0VipwhI7meeHhwedn5+HQ5cpxGYHW7Va1d7eXlisfNeGSqlUKhSj397e6u7uLmxbRFJAKyQpgiGhNAxNLPpD9touUAiJk6Zev369dk+2CqMd2mP0ohGHfRbK3axmZwvTMRIcIoNxZkFEQ2GkAysV2LIsrsd/Q7pW85e0Nl+IMIbDYUjIMd4kaCqVSgh9pTebBahZ5QQu+jQqj0HstCP6Q5KPSErS2njaLatETBz/Ga3CsIRCmdf9/b3+9Kc/6dWrV6ESpVqt6smTJ3rx4oWeP38eDITtF+Z2VH6xUs2H1o8lYJwd+5mNSrkX44+MwNbz6BGfeNMYCYjXzjMOy0HPj3NDhEXspBvV+Gw9q/UsqCstFotrkxHLBplQJsYp9rbzrScTbYslF9oS9XKtxZXeeodMSJupj35vPn9zVuz5+bl+//vf6/vvv9f9/X3YxFEul0PyZH9/P4SlTGBbdkWNM+fORjVE6Q351mq1cDYESTe7oEko2aJxq9vZ8cFotFqtoJ2lUqmgPddqtZCt39raCl4Iu9Vs/TBesO1vjCahIN4PlS02k24PPokaU0sEtgaZcBb9Ea8KA0RkA1HZjQgsWBsh7e7uant7W/v7+8FDarVaYePLYDAIWuH+/n7oazxV6Y1cQYUG3jmeJ0QivT0PFvlstVqFIzbx7pGrIF10WlsrTT+hWz48POjs7Ezff/+9zs7Owkl1uVxO19fX6nQ6khQkiuicRi5iUwx9Zh0iWy8NrDdrde0oQUejUUh3Op0GY8y/1jO2hqBYLIaqDbxzCNaWcFod367xOPCzvQ14U1LHhry2hAUPActkdTG8DbQ8FoH1GkHUo2US2ckahd0dA6GjiVEjysEm3IPJx5sILi4u9Pr1a7Xb7TABl8ul7u/vdXV1pWfPnqlUKgWCIbxH0+p0OkHLhdBYvOhy1WpVh4eH2t/fVyKRCKSBzjmZTJRKpYIMYQ8Litb3cn/CfciF8JC3SBwdHalQKGg6na6d5k/YbPVqScEQWPJFioBUIXZK0BKJRJBx0Mnxehg7Sg5JsEVDc1uKReUCpISWHo0Q8Azta5843vPo6EjSG3Lk2Mn5fB4MFImZqGRkq0HwhCFEDBD10iTwGBPeaIE3j0TBUYU3Nzf65JNPQoQB4RCBWGmKczOo9mBHVjab1fHxsT755JO1GmvuieaOxAQ54o2+bw0h30S9cNaMlQeslLdcLkMfR8+flt4mPjnc/+DgIGyIwPng+zZpGifJRhEb6UJ49l8rmmO5OL82lUqFInNIDiHdWlZ0P3as4V3hJdj6UCvoRysYPqZszHq+1Ct2u13t7OwEy8p9rMxgEw4QidWqCH3IkrMY+ezm5kbX19dqNptBI7UZX7zc3d1dVatVSW/P+mVB0T8Qls0WR5+VfuaNCDc3N2F7NecZ4PGyY+/6+lpXV1eBoJEgMJ52rz+arh1XrmtrgxkfSHW1WoX3rdlt1qvVKpwLQAkf/Usoz5ZRklUQoK1xpsKAhUr/4RUvl8uwoQHZgWvypo6Li4tw0Let190ES2RsCsJTK5fLoQxvuVyqVquFtWCfj4QRB84fHh4G48Hz2QSlrezhOrY6AYNl1waSC5uEbJ9sWh+bYKsbIF4iGuv12rGwdek2T2ATlCRXibxOT0/DiwYWi0V475xdg7TjMfnxp0bsnq7Vh6S3Jxuh4yEVlMtlLZfLcEI9GXG8XTrPZuLx2iSFbD2kJ72tlrC1lzZkeox4rdW3bcaDtMk7iIX78PYHFiiEBHGRzcVzsyVabEagCN0SJkCK4R72ZYqj0SjUaUKOJBEmk0mQSRgXawju7u706tUrvXz5UtfX14Hc7A48Jj+vQOE9YcvlMmh9hP3Su68GYtLb0js7/rauGIOGrkm4ilHlXAruQ0iKV2vP8LC6r22TjS7oI1srnEgkgjbMzjHOtuUzpBc2ZdBuWxXCnKWuHBKjvzhcBq2cA1vsePGckCovEW21WuFVOkRCRAREklwbA2M3qjBf7SaVaILUbtqIjutjiMpA/M7OPcY5ukmIPouWyyWTydDu4+NjnZ6ehsPIk8mkut2uut3uWqTDfaIyVZwEHBvp0sH2xHlJofyGrXuU7BCy53K5EAJ1u92gFVoR3FY2EO7g9WLlbG0o5ESoQUIiGvZsAveyIj4TgGswwSjhQUOFAGwxPSGrTQbhWeBB8WZc+tESEYkTvosHwXMWi8W15BQbK3gFi9WFISveBMxhJhA+UgaZ5MFgoO3t7ZB1txlhjKCtppDWo4Do80S1c7bv8nsqLYhWbCmTLRnCU7ekau9tDb+9t918Yk/tSiQS4QxhFm+z2Vx7GWcymQx1u69fv9ann36q4+PjtYNnrKRlD3ciCiCPQUUMmjSAlPEUeSY7brSdbci279ilV6vVQskbBo+tw+j8NhKMzu9oPuRD4BpUDbEzkkoRHBeiPJs8Z71t8lIxFuwIfPbsmY6OjpTP58NYspmK3We2qgUpz5ZwxoGfnHSZHHafuj3YBJJJpVKhY5bLZZgknBXApgC7Txriw0uR3h5eQqfaMxHQywh5IY4PwS5OJputp4zu249aTSYcmhyvsCYTjsdrydNOarxZvGWuT4JJUiAJ6lO3t9+8oJCQjLZDYlaDixoc+wxs4WVh2DpotuHiSdpr2ppkyunQhCFkmwTZlChjztgaTwwmhLTpCEj7HCxia2DYes2GEjwvDJ3tS4iLRUwiy775hGuhIeJUWC3XeoNW+0Q6SaVS2tvbC7v7IAS73RstmJpfScEzpvrFOgXWCNvzCyqVSki8DYfDEAFG562dzxh4W+ttSZc19pi3y7XtPODHHloEF1hjaJ+Ha7AmyuWy9vf3dXx8rP39/XDqIE4ChGvPhpDenheytbUVIhTbzp8SsXm6+Xxex8fHKpVK4XUyVq+RFMI1wmiIkn3UR0dHYVOADXmspoSXhGUmVCEEJ7FDEo42PObh2klnE1xWF7SkK62fwI/nYa041p5QLnqSFKTLItvZ2dHR0VHYzcbpaywCtEe8rui5u5JC4T+elPUYraGSpFKppMPDQz158kSVSiW83JJrQTzcw3pUVs4hS8z96R+qGWxEgHdDKZ4lWjwaxtCSLuNpN52gX0NIeL+ExyzgVCoVdGSuYStZSIZZXXO5XIayLa4FqJd++vRpOF/ZVofYCMAmf6gCQJawBwDZg4Z4Lvt6+Hw+r8PDQx0dHYVzTBgDazTQSpEuCoVCeNMEf490Y9cXa8B6oNLbg8QtsVsjE4VNpiGx8c5B5hNJVutMsdbsBgraksvlQgL58PBQlUolbISxCUqShpvWIedyxPVSSilG0t3e3tbR0VFIqtgDxwF1t41GI4jhLMhyuRxOFbPhsl3k1nO2p2Vx0hSLwGpTXOcx4rVW3tYkWjHfTjjagRdhD/qGQEqlUkiUQEaQOWTCs2WzWe3v74cQNp/Ph3CfBcxOJfQrvAUbMmFoMplMOBbQhuk2XGUhf/bZZ/r+++91dXW1pifbRI7dGhrtPwjZVgdAOFQdWG+Wz2zdtjUG9K3NQFvPiueAyCFcSskYd/4bMkenttqtBXMM0rWJKBvqlstlPXv2TJ9++qkODg7WtFGuYxd8uVzWYrEI85K3T+DlEmUwtryrjpdvctjO8fGxnj9/vvamajRc5pM1fuVyWeVyOXiDSAwQlU222bkdrTuW3kYjOB6b5oHtPxKaq9Vq7ahSaobR0nn2aL6FaJAoJXqoUbSGv9FohB2uRHyML1UilJjFhdhIF8skvdWhbMiAlb2/v9fl5WXI3LLFVVKQJ2w9pfWUJa0tBjzBYrEYTsFPpVIhE2/DyE2Ea3UoSJvsMh6S3T4rrW9jxFtncTDRqM1lUwS6crSyAf23VqutEUkmk9HDw0MgXrLKJMlYxBgF+h1PyRIasKTLhCa6qFQqodyNa0BSbFG1Xh/EQk0zhfSMFwvaelB262n0WEmSRd1u9x1t0Rpa2//0F16ePe0LI2gTOxAGUYKteolWweABUwtOn3IYP3XX9NMmzZowu1QqBc/VHtCCl0cFC8RB9MP4nJyc6OTkRAcHB+HoTuqMbcUIxjiXy4VX+eRyObVarbCrj7I8623avIWNGJn/xWJxrSoELzMqM1g9m7nO8xOxSOtyFuRr1zfzy2rgGBqS7d1uV1dXV2ubejjnl/GLcsRflaYLKI8ho2o9FkCB/eXlZQibeeEfHoqtDWRRWqJFa+X3lKDVarXwfjMmr51cUbCo0MLYOYbuxr8kwaL6naTgoT958iQQLIeREEKS8CO8AlzDbkhAsyMZRp9g2dGuOIXLJqGiHjkEuikpY714IgYroTBBMQyMJWRkDQQH8EBkkK49T8B+z2aqMUZ41Hg+3JO5ED2/who9G9ZG626lt4X7EFmxWAwasbR+NgQkZr0u681D4OiFVsu1uQfaFY2UaA99wHGi/DDeNrQ+Pj4Ob1BBpqK/rFGlDSTpdnd3dXJyEsJvtuBT3xpNQEJQhUIhrAWiL9a3lQGI1CxsH6xWq+AQsc7smRY2dxJd3zYfwPMSCUwmk3Ag1uXlZZAjrY5OH9PPzOO4EOubI5rNpsrl8lqdqbT+6ufBYKC7u7sQ7nQ6nbDNlXBoU/hnr2cFfgaWU5c4tITvbYINpThpimMS9/b2QrZ0b29vjXSjyZJk8s3ZqScnJ8ET4uQvwkdOr8czwTOzXhietD2Ry8ocEBIaVrlcDkTAgoYIIAm8DklrYSSEhfyCtxGdlPy/1dPpbxYnEgpJLOvF43nYqgNbToX3hZdGWGoPK0e/t1GHLRtj4fJ9fjDekAvjTYmf3YrLs+Nx8RzR/rDjQMIND8xGduyMguzxxvmxhila4meJzEZgeHvo2TYstx4dei6yx2q1Cp50u90OZzFgWGypJAaiUChof38/bDiwzgBJP2uINxEvPxg75J1+vx8Sw9Y4PZaco52cPEjirF6v6+rqSnd3d6FiwRK31ej/ql/XQ90kmxYeI08SXI1GI3yPzQeEpbbkCNhyEjuoTE57Nm80w2tJA1hPD9Lm/FykgUqlsvbeJelt3S8JiUQiEQ7fZnsoVQwkDvBQOUyZxWhfZwRJ2MSdLemxk4jXtvPMkBHkbSUQSNBKJEQDkMemUFHSmh5vQzX7pmZ7ji91r3h3drwgC64ZNWCQlSUfPB/63NaWRjX2aC01fYlxhYRoO54ixjC6azGaMOIzSJfyMZtvsHOO8NgaIp4PI9Hv99dyF9GSRCIl+pJokpJAxi6VSoX8AZGffbMFkh0v22Tsow4F83JnZyfkGWh7v98PXjRSQ3TO2AiXvoB4kT6sM2HngPRWz2UM6TuIFWmBIxyju9fsXGWtcpRAnOcwxHq0o81QSu8WKEc9XmtFi8Xi2uBbkngMEEH0XFDrxT1GuNGJTVttssceU8di4ryCu7u7sKmAkMyGwSzCROJNnSDvm6I2lMzqdDoNRM1Epl14BbQR4uUoRe5n27spHMSbs14cYwTJRyUU2282zCczjpeLXiopSDX8t/WgWEDWS+N58USl9TI5PpMUFp31BBkrEmYYMu6LPmk1PYysLYWyNa2WdO0Pz0/pkdWuLeEwJ20lAHOe58A7twaG69sT4aJki2ODEbca8Hw+D2uI6zDetJmoi2iQ61vHwnqn1pBHjUC0DNGub+QlvGJbUmmf6zFYw010QE0751hw2I2dpzbSg/w5n+SvSl7ggZlY0VrKKKymxxZOSBOysp33PkQng6SglWEd36fpWpLEC7eF3NZqS29fM89RiK9fv9Z0Og3a7+7ubij1om9IlrRarXAgznK5DJtF8FhKpVLoH6u18pw8G4RrS9qoi7SlaVSR0G76wS4uiB/ytLt6rCcDaUUPHcHLRbcmQUe7refNorEhujUyRCuQJwvaVqHYN2lYT5/df9aztJtpaAdt4aQ762VDfva5Wfg21LdyiiVbq+Hao0BpD5IPRGmJ1+7CsslG+pVEFqF1s9kML2olkZtMJlWr1d7x/HBC2G7ebDbDWINKpRKMpC3nslIGUgNbuNHsLfg+UpjdYWo3+nzMuo5GMbZaiHm6KaFn20JOw+5UiwOxbgO2HqENG+znTFDIw2YypXWCeF9HMXjWekKSLNTHdtTwPYrJqXqgtIU3VIxGo1AZsFqtwklOFxcXOjs7083NTQh9qSektIXJQigffSNFOp0OhEu/ZTKZ4BnYGl0WHoXghPVoxzaUZkLzrw31CEX53EoFuVxOvV5PktYICQNoQ0CyypZguUcikQjVDBDUfP7mRDa8fqt/spjx2HgNDZUDvK/LvtLIeuRo+gcHByHBSH/bFylaY4a3T/JNencnIvop8gSkaz1nnsMaAhs5MAbRhFp0TuC1Wk/ZlmghA3GoTbPZDDW4zBHyGTbCSSaTYXt4vV7X7e2t6vV6MMj25DXK1Kz0wRZmSh1ZL3YzTXSN2kRq1EjyXFYa2gT4g2ulUql3Kh4g0k2RrOWfx5yunxKx7UjD67RWDDc/GoIwUdkzbj0NwpL3WScb8tmibjwGFuemAZHeVgwcHR2Ft4lKbyUSJttgMAjhKtoSJ01xOr2ktZO+bNhsDZDVNdE+pTfhLvfhO8AmpZAqrPTAcZfRfrKRAgTDoibUtx6WlVdoq61WIOHEfZAZ7Ft4bZTD2FCGB9mjyW1KTPJseN9ku1l0EL8NJSHRcrkcXvOTTCYDibFoiYJY9GjulnDtRp7Van3XlDVszC+cBMY1mUyGhJHVnGmvldbQGR8eHsL5ya1WK1QLbPJU7VnGbC+GdEjoRT1vO3+Yo+xQa7fbajQa2t3dDU4HJG3fZMKJahhSyBlD8Ji2a5OzyAXWKL1PYrBJSzxq1rSda5sINRohw0vvI/kfG7F5uhAZE8AiWjpmPWJb2gHp2pOigPXg8D6imqz9Hd5IVHfCk+AVzs+ePVvb8WR1UwYaQreHgeBlEeZyPqoNjahQwJvkmEQmhpUFmPQ2tLNHFaZSb7egoo/Z17dQN2qf04boZK+5Nwewt1qtoJVGCcL+Nz9kuHlxJ2SK7mhLgaIlZjwrkg5zgGgluvPPGhmrceOl2w0ytvbXViMg99BXSAtouUQlUa/JGkv6YDQaBT0fsuPvoh5jNJeB4ePlp+QEOIqRJCvPYj1oW+2C/ELf2XOpKd3bNAftoeQ22rQVLBhQS3DL5XJtWy+/s+dSRNcX42MTmVYK5HfkKTZ5qna92Q0gVvbbdF/rlNijSu3a+KkR250ymYz29/e1s7OzVr4DSUUHxy5mGxJtOtnLem50qtX++C6EZEnQep72WpagyfTyud0pZ5MhNmxCT6M2F5nCasQUh+/t7YX3NfEKesirWq2Gt/muVqtAYFbLxKuCLEgQQX7VavVRq0//4NmQ3KAM5/Lyco2Q6Wc0SPs72lyr1cJbiCFdtL5erxfGgTZjTPBkIT7rgSJx2Oy29Fa7JUGHvJDJZNYOs7bziWsiv5RKJe3u7objExeLRTgT4OHhYc3Tt8lc+7vpdKp2u62zszMtFgvd39+Hg+kzmUx4Fc6m0NmSbrfbVbPZ1MPDg+7u7sKh8Hh0EKl1POwGD3Rz5lM2m1WtVtPx8XHYuWXPJKGfmKNEcHb3mI1imPOQLCeh2TMs7M61qFNj1xTjaeUC2pTNZt85PtL2l11rzInHqpEYJ/Rwu2EHHqDtcSA20i0UCvr8889VKBSC2E0oxEE3LHgbgrChAtKzQjlZaKtZsmiZXJPJRM1mMyQrsIzs4Y8m00hu3d/f65tvvtF4PA4vHCS0PTo60uHhYXg1i6RwVN/NzY0uLy+DtwMYaJsAs0Xo6XRaOzs74YBoaxxIYrCTztb2YrQkhbDO6pVRr8IaDwgaYzAcDnV1daVmsxl+0JlZ9BgMwnkiA3baIcmcnp6GjS2Mo9Un0aajiSrOJECDZ7HYcxdYyLSfnVhUe9hEIH1nvVrOHWa+sC2WBTiZTMLRouz0s1EO17fVCqPRKNSF3t/fh9O8qOnGk6bGepM0gZ5JVECyyW5hZQ3wGd5vsVjU7u6uDg8P1+qR2Xa+t7eng4ODUCdujRcJSunNi2ObzWYwhBxYX6vVwvNWKpXgBa9Wq1CixnvIzs7OdHd3t9HLtWsUfZ0XSHIUJ2VpyWTynXfa2TVq5RDGwCZ7MeQYPt60zIYd2mHluzgQm6ZbKpX0t3/7t4EIyVDbk+/Zkoh3azOghFLRAzmwvLx6mnd2QQoQSaPRCAtkPp+v1a5a/YcBpS0PDw86OTnRp59+qs8++0yHh4c6PT3V06dPw1tp2cRxd3en//iP/9DXX38d3s01HA61u7ur6XT6TrKAUAoN9ODgIFh36y3M5/NApHYvvj1dC23WJrRYiPRJVLvCq6jVauFM1pcvX+rs7Cy8z83WepJgtN4J5FatVvXixQt9/vnn+sUvfqHT09N36pjR4SCNTqejRqOher2+ltyh7MyWSEFULDAqPGwZmK3eICtOwgvtFyJkz709BIk5Mx6Pw4Yc+ny1Wq3tbrIeP/Os1+up0Wjo9vZWlUpFJycnwRg9efIkHG4Tzc6zMaNSqWhvb09XV1fveOf0N+uGHYhIS0RShORWc4dw2L5uSx2RhGazmR4eHnR5eamHhwctl0vV63WtVisdHR2FDT42EWhlldvbW7169Sq8IcU6UMw1jAtrbz6fhxeR4rnOZrNAhhzy1G63g1yBd08Ckf6HG3DebMWH3b3HtnYcIPiI6qA4tN1YPd3PPvss6J8kyrrdrgqFQqhVtVqbzUqyQ8lmKCUFz+jFixf65S9/qcPDQyUSifBCyHq9vvZCRSw62e6ovCC9TX7Y8rJEIhFOpT86OlKtVguhK+159eqVfv/73+v8/Dx41J1OR9lsVr/+9a/DM9lSKVtyhHeFFweR2tOXWq1WeIWOzWpDinj0eORHR0ch278JkObh4aG63a6+/vprtVotXV1drR2jmclk1t7swP22tt4c9HJ8fKwvvvhCv/jFL/Ts2TPt7++HhNemEh/eeJBMJgN5UMZHmZPd0Satl8QBS8qSgi5qazUlhaqCg4MDPX/+PEgJtorAJrPw6CEC6U20wpGILP5NMk86nQ7eUz6f1+npqQ4ODt45hByQ9GPM7u7u9PLly+Dt22w8ZJlKpVQqlcLr5yEWjCsOhNVQo8dn2oqMm5sbffPNN/r+++9DRPXw8KDpdKoXL17oyy+/DDKGNbz9fl/fffed/vSnP+nbb79Vp9PZmJxmTbHTdDgc6v7+PowZfZzP57W3t6fT01Pt7+9rtVrp9vZW3377rV69eqVOp7N2jgZRVDTfY9daIpFQtVrVZ599pk8++eSdNx4j68WF2DzdTCajw8PDIHpLb7xXwmneARbVkMhiMpB2YwTh5d7enn71q1/pH/7hH3R4eKjJZKI//vGPqtfrurm5CW89IPtKssCWCNl72HZLCpnsRCKxtpUXzxmi5G0CDDhGgndSsVjwkHgensmek0p78FYIq+0WWrxl+gkJg9eXHB4eBm/8fYDkDg8Ptbe3t1araz1M2giZ2r34JycnOj091fHx8dqZsJs2sdiwnNcU2XA7qmeTfMX44kXZZ2YckaNs9QvXta81whBFPRtLbLPZTE+ePAm70tLptFqtVtA8KSFEv4eobf9hpKmVfR9I4B4cHISqAUJ/5gLPsly+3UgiKXiH6MjRiMZWD9nPIGjeUILhgPA7nY6azeZaYpgxZYdmMpkM1RJ2G7YF97SEjWyC42BLNZ8/f64vvvhCmUxGd3d3SiaTweDZ/uW/rcbPurBlj3t7ezo5OdHz58/X3ugBH2HY4/B0E5usksGPVsCGpYsK6zYbb0P8tUZ+oCNsyUm0PvKxBFI0G/8+WG8hmkEHlO7YcyX4G1vU/qGFF4XNlkdrah9LjNkyuQ/t7oneC1Jngdvn4FnsvfgdPzaB8qFxY+xt5tneJ3qdTeNlyZrPbEWBvZ7NlH9M26LhvU3EReeP/W9bGWCli49FtMLjsTXBM23S638IrIGyz0ffI+NE5xLrzFYyfMxa4t8oF/B7W31kPfL3bXawbYpez66J6NjThk0G+D+JRy8WG+k6HA7HfyE8Sro/2yvYo/iQhfwQHrNS/9nrfsw9PuZ+P6YV/Vhv4qe6/o99v/+XEHff/NRj/TH3+s/M+z8HP9Va/kuZp+7pOhwOx4+PRxk+vuPSHQ6Hw+Gk63A4HHHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGJH+wOeJWFrhcDgc/0Xgnq7D4XDECCddh8PhiBFOug6HwxEjnHQdDocjRjjpOhwOR4xw0nU4HI4Y8f8DK7QtpWdmlUMAAAAASUVORK5CYII=\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 42; current eta: 0.5, current beta: 64\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 43; current eta: 0.5, current beta: 64\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 44; current eta: 0.5, current beta: 64\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 45; current eta: 0.5, current beta: 64\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 46; current eta: 0.5, current beta: 64\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 47; current eta: 0.5, current beta: 64\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 48; current eta: 0.5, current beta: 64\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 49; current eta: 0.5, current beta: 64\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 50; current eta: 0.5, current beta: 64\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 51; current eta: 0.5, current beta: 64\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA9oklEQVR4nO29SY9k53Hu/+RQmVlZOdc8dDfZJEVLMmQDEgh45aW98vKu/l/sAvdTeGNvvfK9FgxBpimCbJE91FyVlfM8/heN31uRp7O6mxR5KMjxAIkeqjLznHd4IuKJiPcklsulHA6HwxEPkj/1BTgcDsf/JDjpOhwOR4xw0nU4HI4Y4aTrcDgcMcJJ1+FwOGKEk67D4XDEiPQ7fu71ZA6Hw/HdkXjoB+7pOhwOR4xw0nU4HI4Y4aTrcDgcMcJJ1+FwOGKEk67D4XDECCddh8PhiBFOug6HwxEjnHQdDocjRjjpOhwOR4xw0nU4HI4Y4aTrcDgcMcJJ1+FwOGKEk67D4XDECCddh8PhiBFOug6HwxEjnHQdDocjRjjpOhwOR4xw0nU4HI4Y4aTrcDgcMcJJ1+FwOGKEk67D4XDECCddh8PhiBFOug6HwxEjnHQdDocjRjjpOhwOR4xw0nU4HI4Y4aTrcDgcMcJJ1+FwOGKEk67D4XDECCddh8PhiBFOug6HwxEjnHQdDocjRjjpOhwOR4xw0nU4HI4Y4aTrcDgcMcJJ1+FwOGKEk67D4XDECCddh8PhiBFOug6HwxEjnHQdDocjRjjpOhwOR4xw0nU4HI4Y4aTrcDgcMcJJ1+FwOGKEk67D4XDECCddh8PhiBFOug7HD4zxbK7JbPFTX4bjzxROug7HD4z/9b//r/6///P/furLcPyZIv1TX4DD8ZeGf/qbI6WTiZ/6Mhx/pkgsl8u3/fytP3Q4HA7HWjxodV1ecDgcjhjhpOtwOBwxwknX4XA4YoSTrsPhcMQIJ12Hw+GIEU66DofDESOcdB0OhyNGOOk6HA5HjHDSdTgcjhjhpOtwOBwxwknX4XA4YoSTrsPhcMQIJ12Hw+GIEU66DofDESN+8vN033G0ZEAi8e7zSd/3s74v3ucafgxE7+unuo4fGz/m/P1PGbM/lzX6Q+OH3P8/9Vrw83QdDofjh8eDzB67p7tcLrVcLrVYLDSbzTSZTDSfz8P/S/eWKJFIKJlMKplMKpFIhFcymVQqlVIymQyfOZ/PNZ1ONZvNtFi8/flU39UqJxIJpVIpbWxsKJ1Oh89YLBbhuvkdXt/HmnJdfPZ8Pg8v7imRSGhjY0OZTEapVOqdn2fH9LtcE+9dNy/RzwZ2jqL3wfXbueP3FotFmDvWAu+ProV192DnYt37UqmU0um0NjY2VtbM+1xbdAyi92qvIToG32e81332Osznc00mE02n0/A+rp+XvY/vux7tGmRco3Mxm800nU5X5u598a7rSiaTYe7svrJzZ+dosVi8sRb4HtZCJpNROp1e4ZU4ERvpzudzDYdDTadTdbtdXV5e6j/+4z/0L//yL/r888/Vbrc1m80kSalUSrlcTpVKRQcHB9rZ2VGhUNDm5qYqlYqOj4/14Ycfan9/X9lsVt1uV//93/+tf/u3f9Pvf/973d3daTKZaLFYhAUi3S+i9yFmi83NTf3iF7/QP/zDP+jnP/+5NjY21Ov1dHt7q3q9rvF4rK2tLZ2cnOgXv/iFPv74Y1WrVWUymbdOaJRY5/O5xuOxOp2OLi4u9Mc//lFff/21Xr58Gb6nVCrp7/7u7/RP//RP+vTTT7WxsfHgZ3e7XV1fX2uxWGhnZ0flclnpdPrBa7LGcDAYqNls6u7uTv1+X8lkUtlsVhsbG1osFhqNRur3+xqNRpKkbDarQqGgQqGgbDar5XKpTqejq6srffPNN7q6ulI6ndbu7q4++ugjnZycKJ/Pazab6fz8XL/97W/129/+Vs+fP1e329V4PJb0erNks1mVy2VVKhUVi0Wl0+lAALPZTN1uV61WS+12W+PxOGy0bDarUqmkDz74QJ999pl+85vf6Pj4WOl0WoPBQKenp/r22291e3ur2Wymw8NDPX36VAcHByqVSkokEuE+e72eRqOREomEcrmctra2tLm5qUQioel0qvF4rMVioa2tLW1vb6tWq2lzc3Nlcz805rPZTO12W/V6XalUSvv7+yoUCmHdRjGdTvXVV1/pn//5n/Xv//7v6nQ6ymaz2tnZ0QcffKBPPvlEH3/8sY6OjlQqlZTNZlfI2DosD13TZDJRo9HQN998oz/84Q86PT3VYDAI37O7u6tCoaDpdKovv/xS//qv/6ovv/xSw+Hwwc+NAkKNkulyuVQymVQmk9H29rb+9m//Vn//93+vX/7ylyoWixqPx7q+vtbz5891fn6uZrOp0Wikbrerer2u6+trtVotjUYjzedzSVI6nValUtGvfvUr/eM//qM+++wzHRwcqFgsamNjQ5ubm+90Yn4oxEa6bNTJZBIWsZ2g2WwWSJfNz/8PBgPNZjP1er3wvuFwqEajoc3NTfX7fZ2enqrT6YTPgXQBltB6Nu+LXC6nYrGoSqWiUqmkjY0NbWxshO/pdDpaLBYaDofq9/saDodhMh/abJDbdDrVdDoN/x6PxxoOh5rNZkqn0yqXyzo4OFAul9NoNFKhUFA+n9dkMtFkMllLosvlUtPpVO12W9fX15rP50qn08rlciuRQ3RsIIDRaKRms6nT01NdXl6q3+8rm82qWCwqn88rlUppPB6r2+2q0+mE+WGjYAgg7pubG3U6HaXT6XBvzWZT2WxWw+FQ5+fn+vLLL3Vzc6N+v6/JZBJIFXKYTCaBWFkf3AckIb3eyHhcrLXb21v94Q9/0HK51OXlpXK5nMbjsW5ubnRxcaFWq6XZbKZ+v69Op6Nqtap8Pi9JGo/HwUin02nl83mVSiUtFosQpQ0GA3U6HU0mE21tbYV1vb29rVwuF+ZonXe8WCw0Ho/VbDZ1dXWlVCqlbDarbDa71mgvl0uNx2NNJhPl8/lAHDgpGNbZbKbhcKhMJqPlchnIn7XLv9+2NofDYdhvy+UyGL9qtapqtarNzU1Np9NgDO08vC/wzqNjwzrFIL169UrZbFb5fF7D4VBXV1c6OztTo9EIa4r5sPfAv+14D4dDdbvdYMDn83kwTHEgNtLFIxmPx2q1Wmq1WhoMBkomk8rlcsrlcppOp68vKp0OXgKDNBwOg+eKNdve3lY+n9disVC9XtdwOAzkIimErOvC5PcNg9LptGq1mp48eaJHjx7p4OBA6XRa0+k0bKh0Oq1er6fBYKBGo6F2u61KpaJsNrs2fIH8IVgMBCHjaDTSdDpVJpMJHgWhZDKZVKlUCgSxLmyezWbqdDo6OzvT8+fPg/eA55DJZFY2nDVIo9FI7XZbZ2dnevbsWfBw8vm8tre3Va1Wlc1mAwne3Nzo+vpajUZD/X5fs9lshSyRDpbLpTY2NtRoNHR9fa1sNitJGg6HarVaajQa6na74fcgCK51sVgEz5rxguRzuVwwCpAhhmyxWKjZbGo2m+nu7k6VSkWbm5uSXhMqnzmdTnVxcaFvvvlm5dohrK2tLdVqNR0cHGh3d1eTyUSZTCYQ5t3dXRinXq8XQtlyuaxcLreWWLjWRqOhs7MzvXz5MpAQUZ01qoxlt9tVv99XqVTSz372My0Wi2Ds8vm8stlsMJ4bGxuaz+eBxDKZTPDQH1qbkGen01Gz2dRgMFA6nVahUND+/r6Ojo5Uq9WC4zEYDPTkyRN9/fXXwQC/D6yEw7+Rz9jH6XRao9FIp6enGg6HSiaTGgwGuru7U6vVCgYhmUwGUoU/IF5J2tjYCE7HYDBQq9VSPp8PkdTW1taDUeMPjdhIdzKZ6Pr6WpPJRM1mU7e3t2HQrF7JBEBK3W43/A4EmkqlVK/XdXNzo3w+r3Q6rfF4rPF4rHQ6rWw2u6JD2b9/F7AAarWaHj16pL29PVUqlbDYUqmUJpNJCG+Hw6EuLy+1vb2t3d1d5fP5tV4lm2cwGKjX6wXvgHuGwKfTafB2E4lEIOXlcqmbmxtls1ktFguVSiVlMpnwGf1+X2dnZ/r22291dnYmSUEeWC6XKhaLbxCvlRXa7bZub291eXmpy8tLDYfD4F2PRqNAuvV6Xefn5zo9PdXNzY16vV4gWDY4RgHjBKkQceBJWq8EeQkCmc/n6nQ6YVysJ5zJZEJUsLW1FbzwwWAQwsvBYBCMPeuDEJvr4BqIPCBt1kChUNDe3p76/X4wllHSZZww1OVyOUQ70ZAewu12uzo/P9erV690cXER5grDYGWGyWSidruti4sL3dzcaLlcqlKpBH2ftYWHj/GaTqfBi8Pz5XrWrU/GzEYCmUwmSCe7u7uqVCpKpVKaTqfa29vTo0ePtL29rZubm/fea1aHtdo785rNZgPp3tzcBAmSyIL5TSQSYW0RLVoP1xot1sHt7W2ICDKZTJCD4kBspDscDnV2dqbFYhFuut1uB68lKoYTLrC5rDSQTCY1Ho81nU7D4pcUvKRcLhfeL917LN8VeBw7Ozva3t5WsVjU5uZm0DXn87kKhULwfNvttiRpd3dXjx8/Dp6KTexY0sVQYI1ZFL1eT+12W91uV5JCqIkXOxwO1el0gkxzeHioUqkUjECj0dCrV690e3urXq+nZDIZvNKNjY0QmpKcYFOjd1vNG7LHAEKow+FQt7e3Ojs709XVlZrNZgjzeF8mkwkvq21GE4XMDZsOOQfj0O/3w9hMJpNwfVx3KpXSYrEIHstkMgkkwzURRdmEZ/R6WDO8uC6MOuQgvSbAXC6nxWIRDCcbPZFIvEHkjCf3jdFtNptBgxwMBlosFrq9vdWrV6+USCRUq9WUyWSC4bm8vNTp6akajYaWy2VYjxhktHAkJRspRPcIBiGaNCQqvb6+DtJQqVQK3i4SF5psoVDQzs6OdnZ2guTwvt4usMlQG8FsbGxouVxqMBgEg8vfGVcrUSCtsUaiyWkiuXq9HngkmUzqyZMnKpfL3+mavy9+dNKFcAaDgV6+fBmSUHiGdkFaq4cnyaJgsUqvF24qlQoL2grymUwmDO6fmpmEdBHZbRjEd7Lxp9OpRqNRILhutxtCUEIfYBeDTSKwUNBU7+7ugiXO5XJKJBIhJJ7NZmo0Gup0Omq329rZ2QlhZaPRUL1eD5qv9Xh6vV7wNCFzex8s+HK5rN3dXQ2HwxXPtNfrBfmiXq8HsoAM7X1C4nZD2Hm2JMX85XK5sLG3trbCz61htgQW9ZbQLDHSksJagOC5zmgFBdfL79m1CEni9RFhIIGhN1YqFe3s7ITog7lnbiF2vHHmEi13Op1qMpno7u5OqVQqhPbj8ThEFtfX1+r3+8G7J4JBekGn3NraCnuFqhtraKIZfsYBD7zZbIZIc3NzM4zZuuQg3jlRxHclXWCrDFifGFDmwY5l1BljrPkda5xthNlut5VMJoO09Otf/zqMxY9dzRCbpzsYDHR2dqZisRgWna0uiJaivK3sBi8FzQ+PjQGDiO17v4uOy++zwCSp3++r2+2qUqmskCTfab0n9DS8n+jmth4UG8Yu6Pl8Hqoj0L1ZzHh88/k8aORUPFjPq9PpaDqdBp0Pz1a6NxA2urDJHvTRnZ2dUJ2A9kmysNPphBAPHTc63g8lSRgzvhNjmc1mlcvltLm5GWQDxtJ60DZM53PRowlJM5mMCoVCKPXDS35bSRrXQsjK99j5Ho1G6nQ6YZ63traCUdza2tLe3p52dnZULBaDps+cE/qy/q3Wnc/nAxFPp1M1m81QgQI5kMtoNpsaj8dKpVLhWohGqKBAlmEsrFcLiUVJKZprsNVEEK0lNUkhKTUYDELegO/5rvtt3dqxpWJ8JoZrHblHuWMdt+DYsH4xLHEhNk+XMg/rmSB4b25uajwehwGxWXBCIxvu8r6tra2g+0n3mijfy6SzKNcR+NsWBotxNBrp9vZWFxcXyuVyIUMMcbHZIAuIGauMdiZp5V4gdP6f/+N6sciLxWIlqWTHkM8dDAZBax6PxxqNRlosFsrn8yoUCiHMxzjZigm8aUidz7VZ7ul0qn6/HyQNstrMI4TOfWBA1iX6rFfNd0C41shBchCANYLAXh9yFZ+DsbL1q9Fw3xoESxQ2JLfXSWIXz3k6nQYtGeNh1y0elw3/bU0rpAhZET632221Wq1gREigtdvtMB7sK5s8hFgw9oy/1fAZQ7sW+beNHqvVqo6OjjSZTELlCh61pFBZcH5+rpubm/D/76oCeMiTtGvERoK2ssDyBONq9wJzxffw/9lsNnANjs1wOAx6seWNvxhPdzqdqtVqBWKSXmcUt7a2VC6XtVwuNRwOV7wMO7jRSSgWi6pWqyHEs3XAVh8C0VBIuieIh4iXRUjyAt10f38/hL4kTfCmMpmMSqWSNjc3AwFy3VYmsRvaXpd92d+HbFl81pghZ+AF42VnMplQbbCzs7Oi36Ipo2tRgyspfAYv5CCkhOFwGMiDkJ4NzoaxiREb0tr5gAyszIGxYUPYcBL5wRIFn428QQIJj5n7Yk0xH6yTqGfEBrdaPNfKHJJLsNo8FQTlcnll7Lhnfs9WXvDC2A0GA9XrdTWbzTB/VGbgWTPmtqrB1nk/tJas4Wdt8/usLZyW+Xyuzc1NHR4eBo0cnR1ng/rlq6srPX/+XJeXl6Fk085PFNbrtHvQIqrvWokPaUu6LzMl4rT6LuTLntnc3FS5XA5VClRoUIXzXUvd/hTETrrlclnz+TxshM3NzdBIwCbDK2AjWcE8mXxdYlatVnV4eBiSVZQeTSaTFbKOkraklc+yCzUKvJpWqxXqO0la7OzshJCdUirpnkyoLCDDanVNdMN1iRdbzI33t1gstLm5GRoPIBnIFWMzHA5D1n42m4UIgiJ2FmI0y0vyyn42lRXICN1uN3i3NmlkpR3r2UmrHV7253bjQXCE9aPRKGidEDufZZNy/L5NfiFX4Rky75Rska2OygY2qQa5Rz12fm49WO7JGgTGiUYCPDEMmdVvrTHAuF9eXr5R/pjP50PCDEOVy+VCcpXkKyVVeMesYRttsQ8gK7su8dwh3f39fdVqtRXvX1KQQer1ul69eqUXL16EKgdbjfQQLOFG96V9JRKvG1FKpVIo9UPSkbRSSmrfYxO4SBS2ocUaMKQ51lkciLVOl6SPFdwJxyuVSgiT+v2+Wq1WqK+02heWb3d3V48ePVK1WlUikQjWr9frrbTq2pfFuxYGixDSxSNDzoBs+H+8Ed6LF7SubtV6u7Zt2NYV2yx+IpFYWXiLxeuaVTpxCPnR1iAgogr0P7w/rsNqnLZbKapT23vi9y0Z8TvcE5vJhu6Mh90cjAsvfsY4RDVzogjkkslkEgyD/W7IxMoI0QiC77PaYTS8tdf30D3aVlS+xxIZY0aCjLnFMONxUerW6XRCwT+GhqQiFR35fF7ValVbW1tKJpNBjuh0OsHI4Knb7+V6iZxs2RhzZDV+25xBFMWr3W7r5uZG5+fnoYQN0n1XyZiNMKO/Z/+PPVCpVLS3t6dSqaTlchmciGazGeQ3u89oYKlUKkFzt5IWDgfaNc0xcSH25giy37PZLJBVuVwOiYf5fB5KngaDQShTssmmzc1NlUol1Wq1YIkTiYR6vd7KQnmIcO2/37Y4kDoo7SGzvrW1FTyNzc3N4PGy0O0ms2cn8HebPcdrwbuCACF46V7CoBlkPp8H/RLCIXQlOgAQVbVaVblcVqFQeENXlRS8asrhMFy2bdp65xhBm6Th3i1hoS/imVu9kXvHOGBcbSWE9SKpqKjVaspmsyGjD3kQVfDZVsejVE66Jxc+m3uP1rtawuf+mFfCfJt0PDk50cnJiQ4PD0PdJ3qzXYfkI2yTQrVaVaFQCKGv1VtHo1HohrONGuVyWalUKlQyJBKvKy1wDJhDO3+2uYSowCaB+Tvvt8YGB6jX6+nu7k7X19ehrKzZbAYd/m3R49v2nk1wsjYpA6QNnL1NN6o1lCCbzWp7e1uPHz9WrVZTKpUKCTMiKAiX/3/bNf/QiPXsBbwxW2sJcdF4kEwmQ7kTlox+emuJJa14LPwc4iFM+lMAieBR0aqJp86CgBzXZW0hYDYr5Ig3QbswYTNWulwuhxpbivMhfIwWZGI3DhstnU6rVCppb29Px8fH2t/fD91RfLfVvSzxJJPJ8F1kwtFb2bCWsGxlRFTPlRTCX0lhs9PvXiwWVSgUlMvlQkUGnieaKA0iOzs7Ojg4CF11k8kk1IzmcrmgKRKWFotFlUolFYvFsPEwjJJC8wkhLNdhJSDuh/8bDAYr3j41qh9++KE++eST0CQAQbImuSeujXFlrGgwODs7U6vVCt6bnVs+A9KmRjyZTIY1P51OVSgUgiODQcOYQTKMk9XUmUOI1nrBkC5dl1dXVzo/Pw812uzr79OEFN1zjHW04sRGHvxuNMlOE8fBwYGePn2qnZ0dLRavuxLhICpwaJrp9Xp/maRLUb8tak4kEtra2goLsVwuh01/d3eni4sL1ev1oPWygGmuQEeVpGazGUja9u+vkxHWZawfWijWc+31esHC5vP54HlFPTtJgcyk+2QPG5lrYyOxifg7IRCbFeKxIasNwTBceOaQ6P7+vh4/fqyjoyOVy+Ugi3C/hNd4rVFvzxan93o9XV5eBs/NhuaUpHGNNtsPkbJh2dCZTCbUtVYqldDQYj0sMtXISYeHh0HHh3Tp+8/n87q9vQ1toVYLhJxGo1FIxlhZxYaxlJnZXIIlXJJmaOSSwiY/OTkJZyEwFnje0n0y1ZIc81Uul3V0dKSTkxO1Wi1J95l6Gw1Y42ZlECp6aNemXZmuOKIfSrvIfeDhWr3clmFauQmJgRwH7d9Er1GN9m37zu4vCzxydGNkRjrzlsvX3Zh0tFouIQ9SLpe1t7envb09VavVlSjLdoLCRUgicSGWkjH+hHRJglD8bS2aXUB4cjYR0+/3lUqlQp86kkKn09Ht7W0Ic6JlQVZjtIkTq7s9RNBcP8TbarXCASd4H3YT2VBtY2MjhKI2vJW0QrhbW1vBC0MiIcwnfMR7R4fiGiSFWk82JZtve3s7EDr3YY0Bv095l/VQIQg8Mmoye73eyrxymhe97YyBdH++QXSMkQzw2CBRiNGSAR77o0ePggEhKcYBRLZOdTKZrCTpMCbpdDrkDAaDQZgL60mRUJS0Uo5EEmy5XIZ7wrOixpOxskeAMrb28KN1ITGyAZ1dJDOZW1tZQk22pJBopTNsa2tLh4eHOj4+1vb29orEISm00EJUfDdSjG3ZtrW5koJDROTXarVC6/e7SMtqyNF9Z40Hc8Je48iAjY2NkK+4vLzUixcvwnkfGDbyDLY0zMpbSArIlpCtPY3sT/HS3xexyguSAunivWWzWTUajdDBUywWQwYeT8Rm90nIMUGj0UjFYjEUO1POFLW8EC4bgMVlWzWjZTeSVrxXmwSDHPP5fNB4bcbYJm34fTYSITREi5eBV2lLeCSFvn7IotVq6e7uLtRssqEwUFR4EFZSEYDnKa02KLBYbWealWs6nY6ur69DKElXG0RgZRabrMGr4IWeyBhFv8c2XnS73TAneNGUCVKxQla+2+0GQo2WsxE+2+/k77YygrGFpOyZxRgRSJBKBJwEtM1OpxOIzkY/GFOkMNYE18O6oM4Vrdtq/NJ9S7MdJ0774mhNvNxarRbKo1j7yClU5XD9zBv3HT0rQ1KIaEhMMc/sCWtso3vISiN40Oy5aMsw64FIj5b3bDYbGpQuLy91dXWlTqcTSgBtow1rHq2WIx/p4MTLtUm/dyXWf0jERrqQH2GNdF+Og4ewXC5Dx5rVcu0Lr4P3s5jwRKPZZAsICV2MxB2eSjR0txl2673xGSxCW80g3SdqrCzB4SFXV1fq9XohdN/f31+5NkDozaKE/C4vL1fOEIX8CcshQrwb2nUJ39k06zwa64XQmNBqtXR2dqYXL16E8J0ohTFAl4X42CwYmHa7HUI5tES64ui4k143RDQajRUPCq3Z6q+QMNeIFAERjcfjkBBkTigzsqeKseFsayjXRplWPp8PHt5oNAr/lu7PiL69vdXLly/1+PHjUBdtJRY8bus42LJI7rter4fyJfYG69LW+eKR12o1HR0d6fDwUAcHB0H3rlQqK2drsB7Yf81mU+fn5+GoUE4Gs1UiUdLlO235mk3Gsk+sBs77GAtkEuaLMUwm3yzdjBpvGnM4pa7dbocGIL6XFxIIMk6329XV1VVwVCBde/ZyHB4uiJ10sWqEG/1+X+12O4SwHPqBuG1LfexnYfG73W4YXOm+ZRGLG5UW+G6sriXTdddsQx88Q15WF7Yva2BarZZevXqlZ8+eBeIaj8fhcA17IpkNv2x2n8x+vV7XixcvdHZ2FkJEsueUIHEvkBL6G5oy+uHm5mYgfts0YWWA4XCoer2us7Mz3d3drWTsOXGKWs7Nzc3gseENQ3Bo7Na7s5odRGJ/10YetpSOa4XE7HVHoxXC4FQqFXR0vG57EhUE2O/3Jb2OnpA9JAUjXavVVpLBSAyclXB2dhbID4953dhicGg8ob338vIylC9ZOYLrY71zmh5jR6042j5GwkZohNH1el0vX77Us2fPwr7b3d3Vhx9+qOFwqMePHwcvP0qk9sU+iza/vC0/Yt+DPmz3T1QCtNUTJKKRBVgPwPLEfP76pL27u7sQCUG49nhQW5v7F026bDosPjper9cLVpBJJDNOkb/NjNqNQsbSemDRonx7DSwMNijVFOu6aSB+m5XHi8T6TiaTlUNx+Ox+v6/z83N9/vnn+uKLL3R6ehr0UI7G29/f1/7+ftik9pp5jcdjNRoNnZ6ehtPD6CZbLBaBIGxJmdV/OVEplUqpUCiEZhQ8dGvQbIUI78XDRRKxTyl49OiRKpVKuN/b21vd3d2taH1EInbs0SYhAxuC2/AVrZGf2/InK/VYL5hw1nqoSE6E5tFTw5B/uG/mlgoCEm1cVyqVCk/zQHrgSSKHh4ehnMt6i4yvlRkgwqurq5VxRqvms5fLZaiDxTHp9/taLpcriUYb8tu/c+g/T8t4/vx58OwvLi6ChMUcI5HYfct+Y1xYU5Zwo9ULzBlaMFUq9rOjXjFG1SZj7ZxYg2kJmsgEvZtKG9rWIVsiDbvX/yJJ18JOZLR+1WZ37YJdLBbh6EQGHKmBRA1kjTW1m1168xlfthD/oVIXK/jzGZBGs9lUo9FYOTvX6rGEnq9evdLp6WkgS6w5m61er4cWY8gFT7Ddbuvq6kovXrwIn0HyAI8hn89rb29PT548CYXjNqzn0BR+D4/RGjg7RnjFPHmCEj48vkqlopOTEz1+/Fg7OztKJBJB90X6sFqbBZtXUtD0xuNxOMgeY2CTNxS5Q4zoqbbwn/MvSMjZuUKG4BwHe5wmei/rinUoKRyIQtKPWmmAt4nzQO3qkydPtLu7uzKewNbCSgolWPV6PRjkYrEYSr44lY+KHrtmZ7OZbm5uVq6NBhrWEXOJrsl6s80UVHwUi0UdHx/r0aNHK8TId+I9tlqtEJpbb/whWS/q4Nj5ZYysVIGHa5OHttvSkrRtmtnd3dX+/n5IHmPU+G5rhLiuaDVFHPhJSNfeKDoXpEb/Om20lBNJrweJWszoYiCDa70lMtrAJkiwou8TYkR1XkIYMsHolUgcdqMRStqCf0sGPBKFR+KQied0/FevXumPf/yjvv3223CkH6TCBi4Wizo5OdHTp0/DM6Tq9bokBaPEiWPUuq7LGtsx5XDt58+fh6TFYrFYqRO1mrjVrO182PNcbYE90o8lkGQyGdqd0YgJmenMg3RtpJRIJFQsFnV0dBRKhGaz+8c7USJEMbwt2WNNcN8YBc5xsN189iwEntnXbreDdn5xcaFKpaKjoyPt7e298Tw3xhgSYo4hQg7P4TO2t7eVzWbD4d3n5+ehicbKKNfX1/rmm29CrTHSBB45ewRvL5q4YhwxRlE5zureNBgwX9G1sw7Wo2W8SXJyLbwX0kXegBvYK8wRHjb16AcHB3ry5ImOjo5CvT/RjLTa5LOOh+JEbKQbLZfBK2QBofkxiNVqValUSrVaLSSBWBQUqNtyEOm+tAYryaJkYinmZ2Pb0rX3mQBb/WC9FXt/NvlGWIp+iuZKJphifMaBBc8mvr6+1unpqV68eKHr6+sQshOaJhKvmwxKpZK2t7fDOa5ID/1+P4TAPEKmVqtpf38/SAzrtPLBYKCrqys9e/ZM3377ra6urkKykVpazoEgu3x5eRlaQe188Gc0Wx2VfKT72l28W7oUIXo8eyIYPofKBowoB66j29Gjj8xgKzggJRsdkWiTFIwVskWpVAreabPZDIfJS68NXC6X0/7+vo6Pj4OEZPVZ6yhwCPzl5aWazWaYS+q/d3Z2glbfarVCk4cN50nUXl9f6+XLl6E9mLllHxAJ0lXJk0DYc0Qa9oS2qJfOXFm91eY23rV32H9IgRA1+9h6ruwxxst2eLK/2Eechvb06VMdHR2Fz6dpw/KLJXe79uMk4NhJF73OZvoJH8iMUzqGhwOB4FXiwVqZwh6kwmIgi8zEUheLRyApeEQUT79L22HhFAqF0PG0bqFai03dIA0MtjWX0NkWykMUNIHwVAYrcUS/gwoQPLL5fB5aS+/u7oIccnFxEZ6wbI89tN/NYSYXFxfhqQZEDHhKLGTK9XjGGRl5YEvQoi++0xbE42WSLcejtg0CNsFiG0M46S2RSISnOfCKhr82dLYePkRt74EDvbPZbChnY2xsrfR0Og1HgN7e3urk5GSldtnKTiQ4SZ5x0psti6MhYDKZrHSORSUhPrPRaIT1QogNKWI4aKfFe55Op2Ff2AaM6Fq2HYTsn06n82ASOrr3iT6pdokmRSFhW/WBpxvNt/B5ELhtwd7b2wvdjDRtwC14vqx5Pou9HxdiI120PTaItHqeJ1lhG7ow+JVKJVh+zhyQ7nvKreZqJxLPlEVHwo2NjIdjvdSHSNeSeXQBrnvUNp6YDaWx3iyWQqEQ3k/Jl000Um9qQ3XCShYx3qT9HozW7u5u8MZshQByBokNS4zcazTjzlhHFz/Gz2pnNrKIbhQ8feup29Im3s98MtY2SUL9LERqz7Kw4WR0Xdix4vejura9X95Hso/68EajEbx6W7Zka06ja4E/bQK42+2uPNa9Wq1qf39/5ckTXAuSCOuY+7MlXtybPX/Depi0mBeLRW1tbWkwGIR5wdvEq4yuBRJVvD/agv420rJRLl61dRZsxQpJUWuQbSmo3Yf2PA6e20ZpIIYWSaTX662cWmebgd7XePxQ+NFJlwGnLbVSqbzRwMBG4QGP1NIxqYRdOzs7ajQaK089sFl+ElCSVs4zsDWC1C8yIRxV+K5SF7s5mXjrfdmFh8fISWCQHosmetRc9Gmx1hNE4yaDTYcbY0rNI1EAdaI8SBHvEY0Lzc+W2NgEIOc82BCZBKAlDfRsFq+dy2hW2m5MPBzCWiISe0ANkkJUf08kVo/AtOEpn8X7CMs5DpADb1h3s9ksELGNDrjuaLKX6IPmHLqjbPSxsbGhSqWi4+NjHRwchLG2DT42Q7+x8fo8aebs8ePHevz4sfb29kIiiO/Fc2fdsdb4DOQYtFC7hizxWj2eMUHHxqMnB0AuxYb969arNV7rdF1bsYKmzudQ6x49PxljY+dLus9jEBWQQLSdiUSvHARPmRmeLvuZ8ZC0cq8/NmLzdHO5nA4ODsKBIhAdBLJcLlcyrDxanRIoyKdWq4VaOwbRbkBbhYB1RgqAcKlfJYNrN08UtoTFhrXSqrZlCRPJpNPphIO/rXeKnov2Zt9ni+fREPf397WxsaFisRgeWGkTGTxsjy4uK1ewiMmCc0QghiJaB51IvO5Q2t/f10cffaQvv/xSl5eXK0kJSStElE6nV5IwfA4hIPXAtnEDgkdHZBMiu9jH3aAz02Vkw/VoaRTfSZi+WCxCq66tXojWHGPM0IQtcbH57UMuLQlICvNzfHysp0+fam9vL6w3qx3acjYy7kQ9ts2ZSIykJuViiURiJTKi0qFarapWq4UqGMiHkjc8e+63WCyGdWS9QtrLx+NxqBixxG2jEns/tjZ+nfOCseZoV8iWpKn1SMldWA3elvfhjHDSIGe22JzP7e1tSFASUdiqFqILqj0g3TgQq7xA8sqWVbGRCbnq9bpOT0+VSLxulGABLpfLMNBoVdJqOyffgzeFReZoONodmYR+v7+SEY0uFrvQ7CPBrQdmPRkAeUJUbEiuvVar6fDwULu7u6EeEo8DD5mHXBYKhVD3ub29HXQ7NsZyuVzZLDbczWazqlQqQSOl/ZjyNunNig3uOZ/Pa3d3VwcHByqVSqFZxYZ/6GXSvdbLJrWeJmc/oE/axA6SD2fFckgNiSs6zWwyzB64Y6MYZB6bYGGDdrvd8HQNdEy+Hz2cbDob3SbsKKuSFLxk1iDkXSwWtbe3t9LsEvWcIHJK+HZ3dzWfz1UsFrW/v69SqbSSi8Cg0vLNPuC8C466LJVKwZhjiGm5x9FYLu9remmw4PwC5hVtfV2m38pr0WiC+bdyj71na6TJoUhaiT6pJ8YZs52D9jrY56wbDBTaOKWOtsSS/SXdn6lBYjHqTP3YiI10GfR1HgqgfS+TyYTi7+3t7ZUjCW3LazQRIq22G+ON2BCS/2cDs1AeIh/IG28ZDxULTYi/bnPhiZC4yufz4QxgezrWcnlfK2lLyGgOgDwpn4MIWNxUJxBG0T7LvRcKhVB1gBFgUbPBozpaNKnBy5IupGTLrKT7k8+QUOyTjG3VAaV3kBaNMCRbkX46nY7u7u7CKXI8LYASMzw9HgjJ+wmH8ebsaVhECnhQ0eMPLXHgPfEejJhNxlh5I5o85O94yXja6fTrIysxrrbci/2CB0gnGg5FPp/Xzs5OKE+zdeI0qlCNwbm9y+Xreubj42OVSiUdHR2p0Wio0WiEszkI06Owkhrrnz+5H7sm1zVJMO72uXeMPeuS8V7XsGTlCzRd3osj1W63dXd3p9vb29AujPMT1fu5ziix/9iIjXRpiaV4P7ogrSXkaDsW6Hg8DrV3tnia90Y1OFueZAfXholY0XWhEOEHeiMeRKlUCuGvNQZRPZfJzWQy4flpHKy8vb0dit6l+8dK25ZZakvxqCB2jEar1XpD44RECZ+tMSCMovSOpEm/3w8L2ZaPQTxck02GWeNiN4UlXBsZ8LlWp4vq8HjHksJ1oSvSIMLj3u01MTbodr1eL0Q0jG+0qYXrtglL/g2pIGlhWBgTiN6uk2i3GR7mcDgMBpWf2Y6u+XwewlpbssXc4HESYttWaPYAejBzy3swvMwhuQObTDs4OAjSxd3dXahwwWjZvRXNY1QqFW1vb4dEoq1Ft4aYz7DAi+U6KW+0ElG0tDBacYLhIVqxjUTcCyV90UjWykasL4xxXIj1GWntdnsl67zOO6T8JZq0SqfTK09S4GdRTxfpIkq+LFj7/C3bpRJdHBCWTfBQ7lKtVsNDMa0mK61mv5fLZajPJTNtmz1IXpBws+cBo8XZQ8SjNb+2DpbNj+W23hiht702/qSRgc+DaNBQWbDSm00tdtwwUhChfeaaJVsIA8+G32Vd2KcAQ2BsDNvOG/1uCK/VaoUqBwjNEiqRA2sFowO54nWjwbNObDLHkm10THAcuH48Pnvewmw2Cx4jYxYlb6sd26gDuYBxs/cJ6UbXD7kQTh6zxDoajYLs1Ww2V8aDXADr21bG1Gq10O7N6Ww2OZdKrT4e3Ua3VINgEOwawcO1Bjm6/qxTJN1HIq1Wa6V+2o6/hTXww+EwNLjEhViPdmSQ8T5sQgRYS4fnhkUkBLQel12sFlHpgcHn4BD72JKHvF1bAA7R26ynJTs+B6+Vp+cOh8NwdCPkR5jP9w6HQ93d3eny8jKEeuhvLHy+y9as5vP5ED7aoyWjWX1b20qYazP59skckB96Z/RxN1xztNDcemu2+oAxt6EkLwgB3Z41wnPPbIUA8853ROcKTY8DkChvQutEK4XsbGeflUrQo/GWM5lMIEtrgCzh8x5bGcAY8aetXyY3wLxESYfvsaWGzDn1yNb4QpQQCBU+JEV5pFU+nw+fZ+t92VtWQ6YszDZ3QP6sC6Ipm2jmtS5ct1IUY2q/m7G1hPsQbDWMjWBtFGvny64V25SFkfqLkhesBxjVfaIWzBIlv0fdoT156l2hAN/JorK1oVZXsq25FkwMi53FhScOCVjZgr/bx5lcXl6q3++rWCyGQ2Hsd9j3NJtN3dzcqF6vB9KlgsN6jiRsyuVyWGxsYruYogktu8GZC6ut2VASr7BWq4XH41BMbytGovXHtgwuWkfL79INhURTqVSUzWaDbEIVBlUftsoA4rH3auUijIdtkuD3q9Vq+P9WqxXkCnvkJHo1Ug5lbdJq/Ws0vI2eusYZt9HuMWuwqeggMoNwmRvr5ZHwIdLLZlefKwhxIhXc3t6GGtx8Pq/Z7PWjnba3t1eSncA2bHCusJW1SApG175da9YhYK9GHSp7n9GEqNXI3weQNPdjOSLKMdZARq+F+uooOf+YiPXsBQZhnXdp9RYbBlvSJVywi3/dYFlZAh0Lfc0unofKW7DmZIdZ3ExQVGvDspP0oVzl+vo6hKfb29thoZGQQgqwGiqeHpuPJBp1k5Z0qXAghI7qiTaMtqVtUQ2aTPI67e7w8FD7+/vhFKqo3oaBim48wkv0V37OEYmUR/GwQXvEI+NrtVvpddkhWjr6Nnpv9GATpAHp9Vm6PLpmuXx9WhdP0mXjsi4heOYUD9IaGuuFEUmUy2Xt7+/r4OAgGBLmhTGCPK0hZw4krejtGBM0bAwAkUeUdImwbKUD87K5ublSKmcNJsbXPhGl3++H+l/kM7xRq8eynqnEsA0o0SSY3edW1iNCouKCiC2aPwA2R8MaSaVSb5BuVDa0hsZGwA9Fuj8mYmuOkFa7dPj3OqGcjWC9XWoU6TW3PfTR72ORW++rWCxqPr9/CkE0AWdBFvfx48c6Pj4Op/izgWwSAP2KRdPpdII+S5mVJSq7cS0ZEZbZzHfUo7TlUHhLeOycro8HZfXVdYkwW1sp3T/5ONotxkMO2VT8LvfC9TIWeJqcAcw9YGz4TOvpcq+cf2rHhu9g49MIYCtR6BTj963WD9GhxXOPRBc0eHB99shL7ie6oTEEjKVtULAVCHYtQ5qMe3Qv2NDbJg+vr691e3sbWqy5H+QlSJd7jhJJdG3ZdZVIrLbZYiRns1lYw7YaZLlcrhhEjCT7K5l8fYymrRiJRqXRZJgtKeS0uYfOfgBWFmC94xDYe1knU0STn/x73ff8WIi1ThcLb0l2XZaTBQrhYF2ZdBJhNlSyk2S1TBuWYvWjExudFKoOPvzwQ33wwQdKp9MhAbdcrj7DzJIonglJHwgo+rw3q0dDJNVqNRzOQV0lXi6kZ0u+rHeLl2zHhAXHONiuOftivHmCAwkYkhN4m3ax2o3D5rXJMgwDGwuvE08I8uE1n89XjID9eVSXtvNmq1lsKywG136O1eTt/yG/2EoVm9yxpMnLjoGFlTuoHbXefvSp0VZ6gEh4+ClPCHn58qWurq7C2sAB4NrRZtGtqcumDpdOzuhBONY5YY3m8/lwmpxtF4cUrTGT7o0NxIuUsbGxEaQie0YK986c2SYJ9PqoFMac2UiYMeX5iMhT1otnTKPjbdeL5Ye/yDpdWiRJaEQTWtHyrahmiidlT89nIqyHZpsZkASk+8OjWShbW1vBE7XWOCpNoFFC1ovFQuVyeaVGV7q3vu12e6X1l0SO7YhjEbHYq9VqKNgvl8uhU4jTttg0dN3gobDBkSNsHSeLKyqv2PuEfDAYeHt4LDyRmeyuJTpbM2nJAwLgevHcaKIgNEb6sITGOrHJMsaJe1iXTc/n8+FAIK6Tz4iGu4wBffuz2Sw0FNgyN3uildW7rcHkxXy0Wi1dXFwol8tpMBiE9cJcovNG67pZ5/aQo8vLy3ACGTo/nmq0pdyuQxyGyWQS6sRrtVp4Mi7G31bncI4I997pdNTpdNRoNFStVsOTMGz0VCgUgjSUTCZDAhGDY8fGrjv0ckja5hkYV4iQKNfKgHweBgrytsbRGkRLuBgpmxugIQaDHQdi+6ZsNhuaBNgAECgPi7OHSzOIEAuLlMOMoycGWc/WltPMZjM1Go0wsJyOT1lRdFKZ0MvLS33++eeaTCY6Pj4OjREkJCj/ond7NBqp2WzqxYsX+uqrr3RzcxMW09HR0RtdbJLCRrHdY/apBsgjbFabjCQJZh+whwdEVcD29nb4HMg0WupE4welWVRP3N3d6fz8XKenp+FYSen+ABrG3cojECaF95VKJXQaMcYYApogpPskFVFEoVAImh3XiI7N5mezkmwk7Lbv4SnDy+UyjFsqlQr/X6vVwprDCKHbN5vNcEYA3rmVOrgP5rLb7erly5fBWPE0Xgwu6wevys6DNZSLxSJIH5QQEjlB2MwViSBCdB49jgZsk3xcA80qVk+2Gnar1dL19bWWy2U4PJ1rZ97IMSyXr0siMdjNZlNnZ2f66quvdHV1tdbLJeJFruKgf2QiyukoraROP5rHIeK1pWnRM13sd2Io7IE9rCO83rgQ69kLjx8/1u7u7krIyeHPFxcXajQagUCiNX5McjTjjqWrVqva29sLTRTWwzo/P9fNzU2QBfACWDBRCzkej3V3d6fBYKDr62t98skn+qu/+it99NFHOjg40MHBQUiw2Z798/Nz/e53v9MXX3wRWm57vZ6q1ap+9rOfBS+cjYrngCdXrVbfWDBgNpuFUioMEcbHtqvaUhkSPEQXUQ8Lr6VcLgdCv7291bfffquvvvpKL1++VKPRCAmpVOr+cT32e0g+Ed7u7++HA6WpZbbfzfxyFi/6PN5muVwOEos9HAjCsLXRtoffPnSSum7bcCAphOHWc2ON2WQoD26kyoFrkVafsYfMQ4ng1dWVTk9P9eTJE3366af65JNPdHR0pJ2dnZAAjJY5YlwpcbPdcdHEkE2WUoKGgbHeGmQHUdtSPdt9iNEcj8fhDOWLiwvN53Odn59rPB6HM5ht+68tDzs/P9erV6/05Zdf6tmzZyHpaiMLjBr7Dgfo6upq5V6l+8QnyTsMASWYrB+qfIj+bHkp/GErcY6OjsKaRKojz4P0EwdiP2WMlkXCRxJAWHc2M+Ecwj0HRfNzNimE++tf/1q/+tWvQpXA8+fP9cUXX4QkBB4fIYVNbq0T+/k5xd/JZFKPHz8OoRoZalvr+OzZM/3ud7/T6elp0DB59tunn36qjz/+OHiI0YRWtHaX6+Ba7AE/1AFTy8qiQx+VXm/EnZ2dcKDKQ+GT9bJns5nOzs50cXERnumGNo23idfDYmcu7EE+29vbOjo60qNHj94g/Ci5SQp6pdWDc7ncSqkUHj+6OF4hxgKpyurQjDW/R9stT3WwxsDqqu12W8vlUvV6PXiHaKS2OYHkKW261MYSGZRKJf3yl78Mxw7ynnV7JJ1Oh5PhdnZ2Quuurd9lPXQ6neABo/GTXF2X+bdevPWybSXB9fW1vvjiC3399ddqNpuaz+e6ubnRaDTSo0eP9Nd//dcrZ/qynsbjsV68eKGvv/5a//Vf/6Wbm5u1FUU4BTgGlOpRL45nXiwW9ejRI/385z/X06dPlc1mdXd3p9///vf6z//8z5VTAUlwwg382+Z6bJLzo48+0kcffaRSqSRJYb2QW7F89WMiNk83k8mEpxvQZ55MJkM4fXl5GUqs8B6k+6QI4O+Ey4VCQScnJ/rNb36jzz77TMViMTwB9vT0NJADHhmb24YdIBoKATqdEonEG+GJdP9sLZ49ZbPbo9EoHCxtw0gWviWGaGKGUIrvQc+0GihejM1qs8h2d3cf7KW3QNvj3mazWciWR/U4tDyyzWS7U6lUSPrVarXQsQfhW+8OnZaxbTQaYTPb1mF7HoM9wHxd9xZ6f1R+InxEFuFQHasn2s9irHu9XrgfSs1I8JIvIBwfDAYr98Y5D9PpNMgieOdvw8bG/RGmnA1LuReGw+YQbJ7Cdqaty8ZHk83cL8aLOnHqe1mTtNbaBK70et3O5/NAYM1mU6PRaCVMX7efbCmdrYLA46Za5pNPPtHf/M3faGtrS91uV5lMRjc3N8EgRpO7rE97CppN2NVqNZ2cnOjJkyfa2trSYnH/wEqchriQWFcyZfCDFbBRDhPNnEurJUjrssLrFms0ibbOa8ELs5Y3msCwfz4EJpfNu25R4yXZwvZolcK60PJ9YK8TwrUlMfY6bYLMhs/vC9sVtW4e1pU62Z9HqwXeRjSMk9V8190Pf7f/v+777Tg9NC5vK0WKXle0xO+h719nMG3i5rsmaex+eGhcbO21jZy+j6fG3rQncdn9FU3WRe8dj/V9al6j1xn9fZwQm+yz0ZEdj4d4Ifp9Vtqw92CrcL7v3nzbrT74g7hI1+FwOP4H4UHS/UmeBrwO77KQ78JDFv5P/dz3+Y73+b4fQyv6Mb/r+4xbHHrYT4V1HtT7enU/5Pf+kJ/9Q35XHPvsx+KIuOGersPhcPzweJDhf1ARw+FwOBxvh5Ouw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgRTroOh8MRI5x0HQ6HI0Y46TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhiRPodP0/EchUOh8PxPwTu6TocDkeMcNJ1OByOGOGk63A4HDHCSdfhcDhihJOuw+FwxAgnXYfD4YgR/z/6UejDAZSB1QAAAABJRU5ErkJggg==\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 52; current eta: 0.5, current beta: 64\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 53; current eta: 0.5, current beta: 128\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 54; current eta: 0.5, current beta: 128\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 55; current eta: 0.5, current beta: 128\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 56; current eta: 0.5, current beta: 128\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAABDXklEQVR4nO29yW9c2Xn//a15rmKNLM6DKFKipJYsdbe7YfyMNtJBHBh4F1m8qxdeZJN1FvkrAmT/Bm922WcTJ7Hj2LGdWOpuTa2BokhJHItTzfNc9S6I79GpqyqKcqtvG8nzAYgeWKx777nnPOeZj6Xf70MQBEEwB+t3fQOCIAj/mxChKwiCYCIidAVBEExEhK4gCIKJiNAVBEEwERG6giAIJmJ/y+8ln0wQBOHdsYz6hWi6giAIJiJCVxAEwURE6AqCIJiICF1BEAQTEaErCIJgIiJ0BUEQTESEriAIgomI0BUEQTAREbqCIAgmIkJXEATBREToCoIgmIgIXUEQBBMRoSsIgmAiInQFQRBMRISuIAiCiYjQFQRBMBERuoIgCCYiQlcQBMFEROgKgiCYiAhdQRAEExGhKwiCYCIidAVBEExEhK4gCIKJiNAVBEEwERG6giAIJiJCVxAEwURE6AqCIJiICF1BEAQTEaErCIJgIiJ0BUEQTESEriAIgomI0BUEQTAREbqCIAgmIkJXEATBREToCoIgmIgIXUEQBBMRoSsIgmAiInQFQRBMRISuIAiCiYjQFQRBMBERuoIgCCYiQlcQBMFEROgKgiCYiAhdQRAEExGhKwiCYCIidAVBEExEhK4gvGeanS5and53fRvCHykidAXhPfN//7938P/8f19817ch/JFi/65vQBD+p/F/XZ+E3Wr5rm9D+CPF0u/3z/r9mb8UBEEQhjJy1xX3giAIgomI0BUEQTAREbqCIAgmIkJXEATBREToCoIgmIgIXUEQBBMRoSsIgmAiInQFQRBMRISuIAiCiYjQFQRBMBERuoIgCCYiQlcQBMFEROgKgiCYiAhdQRAEE/nO++m+pbXkSCyWNzun/aHf9T6uOex37wvjc32b1/ou+Tbf3/+WMTNjHv6xrb338V1mIv10BUEQ3j8jJft3pun2+320223U63V0Op2Rn7NYLOqH2Gw2OBwOOBwOWK1W9Pt9dLtdNBoNtNvtb2XXtdls8Hg8sNvt6nqdTgfdbhcAYLVaB+7pm9Lv99HpdNRPr9dDv9+HzWaDy+WC0+n8xtd4l3shFotF/fd5tKxer6fu32azwWazwWq1DnyWc6HRaKDT6Qx9fxaLBVarVf3o38+fUX9nt9vhdrvhcDjeuG6v10O320W324XVaoXdbh/6/kY9qz4eo8bg26LVaqHZbKLb7arxsdvt6ud93Euv10O73Ua73Uavd3rum81mg91uh81mg8ViUe+Oa+F9YrFY4HA44Ha71fX0e9Kv2e/31c8o7HY7PB7PG3PBTEwXuhRYtVoNv/jFL/C3f/u3ePTokXqhhIvF7/cjEAjAbrej1+vB4XBgZmYGP/rRj/DZZ59hcnIS3W4Xd+/exT/8wz/g9u3bqNfr713wrqys4K//+q/xgx/8AI1GAy9fvsQXX3yB9fV1NBoNTExM4LPPPsPnn3+OZDIJm832ztfghGm328jlclhfX8dXX32Fhw8f4uDgAM1mE3Nzc/jpT3+Kzz///K2Ct9/vo9VqAQCcTuc7T7Jut4tWq4VWq6UEPid9s9lErVZDvV4HALhcLng8HjidTlitVnQ6HeRyOezu7mJtbQ3ZbBYXLlzA9evXMT8/D7/frwRWPp/HP//zP+Pv//7v8ezZMzSbTTUW3HA9Hg+i0SjGx8fh9/vV7yqVCo6Pj5HNZtV71//O5XLh8uXL+Ku/+iv85Cc/QTgcVtetVCrY3t7Gw4cP8erVK0SjUayurmJubg7hcFjNuVarhXq9jmazCYvFArfbDa/XC5fLNbDpWywWOJ1OOJ3Od37/7/quWq0WfvGLX+Af//EfsbOzA7fbjampKXzwwQf4+OOPsbKygkgkooTLHyJgut0ujo6O8O///u/4z//8TxwdHcHtduPy5cv4+OOPceHCBbjdbvz3f/83/u7v/g7Pnz9/r4KM7/0HP/gB/vIv/xK3bt2CzWZDKpXCb37zG/z617/G3t4e2u22mnPlchmVSmXo5m21WnH9+nX8zd/8Df70T/8UXq9XzWkzMVXoUrPodDqoVqsol8tqURuFLj/PCQ8AnU4HFosFnU4HLpcLvV4Py8vLAICHDx/i+PgYzWYTzWbzvd/72NgYJiYmEAwG4fF4MDs7i2KxiHq9jqOjI/R6PeTzeRSLRcRisXdadPrurGvQDocDyWQSq6uriMfjaDabSCQS8Hq9aLfbbxW6rVYL2WwWFosFkUgELpfr3PfUbrdRKpVweHiIUqkEh8OBUCgEj8cDq9WKZrOJQqGATCaDTCaDarU6MNFbrRZyuRxOTk5wcnKCTqejBGOpVML4+DisViuKxSKePHmCn/3sZ9je3katVhuwVrj51ut1pNNplEolJTT5T75zWgX633a7Xezu7uJnP/sZAODatWsIBoPo9Xo4Pj7G06dP8eTJE+zu7sJut2NtbQ2JRAKRSESNL+/B5/MhFoshHo+rDanX66FWq6FUKqHdbiMYDKp54nA4zj3eHK9+v49oNPrWd9Vut+H3+7G8vIyxsTG43W7EYjEkk0nY7XY1j6xWK2w228BGdF46nQ7y+TwKhQL6/T5CoRCSySRWVlYGNqZkMomxsTG02+1zf/d5sVqtOD4+xsOHDwGcrpXNzU3cuXMHW1tbKBaL6Pf7sNtPRVmr1UK73VYbmPG7Wq0WyuUyqtWq2tyMlte3jWlCl+YytdxMJoOTkxP0+304nU6l3QCnk5ymKBcVTcB+v49Go4FarYbj42PMzc3B7Xbj6OhICQfj4vum+Hw+XL16FRcuXEAoFEK/34ff74fL5YLNZsOjR49wcnKCVCqF7e1tJJPJc2kr3IS44XCMms0mWq0WnE4npqamEIlE0Ol00Gq1YLPZ4Ha7UavVlMk1DGopjx8/htPpxJUrVzA+Pq4m51n31O12kc/n8fjxY9y7dw/pdBqhUAjz8/OYnJyEz+dDs9nEwcEBnj17hrW1Nezu7qJQKKDZbCpTn++LGufu7i42Nzdx+/ZthEIhtFotnJycYGtrC6lUCuVyGQDUPRrdCY1GA9VqdeB7OU9sNhucTqfSTvVNPJfL4Te/+Q1evHiBhYUFJBIJOJ1OFItFHBwc4OTkBIVCQWn0/F4uSJfLhbGxMczOzuLKlSu4dOkSJicn4XK5UK1WkUqlsLOzg2KxiHg8jlu3buHatWuIRCLn0qQ6nQ4ymQyePn2KVquFa9euYXp6+sx3y/d//fp1dLtd9ewejwcul0u5HvQNSh/T88zNarWK7e1tpFIpAMDs7CyuX7+OGzduYGpqCi6XCxaLBRcuXMDVq1fx4MEDVKvVM7/3vHCjczgcKBQK+PLLL7G7u4tGo4GdnR01X2hh6PKC7g/OE36f0+lEr9fDyckJstksXC6X0nbflzvmPJgmdLvdLqrVKprNJvL5PLa3t7Gzs4NqtfqGH0b3tTUaDTVxuJgtFguazSaq1SqOj4/h9XrR6XRQr9cHdq73JXTD4TBWV1cRjUaV9mK32zExMYFCoYCdnR28fPkS+XweXq8Xk5OTCAQCb9V0aLpy4lDo1mo1lMtl1Go1AEAoFILdblfPWCwWsbu7i36/r7QNThgKu+PjY3zxxRe4d+8efD4frFYrnE4nxsbGRk4wjnGj0cD+/j6+/PJL3L59G7lcDoFAAKlUCouLixgbG0OtVsPLly/x9ddfY3NzE/l8/g2LhVoWfY2FQgGHh4d49OgRgNdaCf2F/OHnHQ6HEqLciPTv1+eJ0+lU5n6n00G73VabfK/XQ6FQQKlUwosXL+BwOJQWy3fAz/P7jM/hdDqxt7eHdDqNfD6PCxcuwOPxIJ/PY2trC9vb2yiXy4hEIuh2u4hEIvB6vcoyGDXe1CbX1tZw584dVKtV1Ot1OBwOJBKJgU1S//zu7i6KxSICgYASHNyYqcXR1dPr9dT84ub0Nkus0+lgZ2cHX331FZ4/fw673Y6VlRUsLi5iYmJCzSkAiMViWF1dxdjY2HsVuhy3er2O7e1t7O/vo1qtolQqoV6vD2y++pof5uPnv3Mj2d7ehsPhQDgchtPphN/vf6tC8r4wTehSM2o2mzg+PsbLly9xcHCghK4RTjBODg6m/vtarYZer4d6vQ6bzTYQDDFqO9+EWCymdna+XKvVCq/Xq4RYoVBALpdDr9fDxYsXsbCwgFAoNPI7KRwpcLgoW60WKpUKTk5OcHx8jF6vB7/fD7/fj263q0z6jY0NzM3N4fLly0gmk3C73cqczufzePLkCe7fv4+trS0EAgHE43FEIhFYrVb4fD4leHWTU3f/UPBXKhWUy2Xlsmk0GvB4PCiXy3j58iW2traUwDW+R12I8nsbjYbaZPl+hglqh8MBn88Hh8OBer2ORqMx8n1ygTkcDng8HrTbbVSr1YHv579z4+J71BeqUdjq399sNpHL5bCxsaH81YFAQLmXMpmMsk7K5bIKEOvvlmPMH7rZ9vf3sbm5iZ2dHZTLZVitVgSDQVy/fh3hcFhpcI1GA4eHh1hfX8fOzo6amxzjSqWCSqUCq9WKdrsNl8ultFH9/Q4LZhqp1Wp4+vQpvvrqKxwcHCitfWxsDF6vV82ffr8Pl8uFqakpRKNRpRV/U6h9Wq1WdLtdVCoVpYQxaKcH0fTn0TVc43us1+s4PDxUm2+tVoPL5cLc3Nz/HKHLnahYLOLrr7+GxWJBJpPB3t4eCoXCyAEyRsj1ncsYQefEZqST0c33AU1jBkx0KCCoXRSLRVgsFrx48QLFYhHBYHDkxObC04U4v79eryvTvVKpwOv1IhgMwmq1olAoIJ1Oo1ar4dmzZ0ilUsrco5tmb28PGxsbykcInC6ibDaLYDCIfr8Pt9utItDGBcjFNT09jWQyiVarpYTV4eGhEv4nJyeoVCpvzRjhs+oaPYA3BJwucN1u9xsC4yz4ez4P5xXnwTABD5ydjWH8/m63i3K5jL29PbRaLYyNjcFqtapNPxAIIJlMYmZmBsFgcECb1Dca+lsbjQby+Tyy2ayyavr9PrLZLDY2NuDz+TAzMwOXy4Vms4lUKoWvv/4ajx8/RjabhdfrRTwex9jYGHq9HkqlEmq1mtqg4/G4GhMGQPm8usth2LMWCgVsbm7i8PAQxWJRuSyM2SP8vNVqVRv/+7AwdfcC712XAcPkA+9rVAYD50OhUMDe3h6cTify+Tz6/T7Gxsbg8/nOHJf3hWmabjabxZ07dxCJRNBoNJTAHfYSyVkPr5uu/HfgtZB/XwNns9nQbreRzWZRrVbhdruVgOQk0P1knPyVSkVpFWc9A3dX/i19Uel0GhsbG0in00o7dTqdKhDQbDaVH7tcLmN5eRnBYBCNRgN7e3vY3d1FrVZTKWYMflUqFWUVMPWMGgXHjAJkamoKU1NTKJVKKmhYKpXQaDSUBnyezc2o6QGvhR/fPceQC433SJP5PEK31Wqh0WiozYTuHX3R8tpcpPr3vk1gcDMvlUoq+4FphHTdcMwCgcDAnNStCN5nvV5HpVJBs9lUvmObzYZarYbd3V24XC6USiW43W6USiVsbGzg0aNH2NvbQ71eh8vlwvHxsZoX1O7j8ThisZiyFLlO+GxvS2nk5lIul5Wg1gW3Lvx6vR4qlQqy2Sza7bZyc3xTuIaNa5v/fZYlO+o9co51Oh0leNPpNHK5HK5du4bJyclvfN/nwXRNd35+Hg6HA+12W2k0DodjIFCmD7iOLhRoSnq9XhW0Yt7eqJ3uD8FisaBcLuPZs2dYXV2F0+mEx+NR17NarZicnMTly5cxNjaGYDCIubm5AXfHqA2Ak5n/zv+2Wq1qY8pkMuj1enC73eq61Dzb7Tb29/fR6/WQyWTg9/vRaDRwdHSEdDqNarWqggUMLlIoMfvB4/GovEVOZprZvPdOp4NKpYJaraYyBYw50W+b6EaNVTfvuZB04UA3BO/7bTmg3W5XBVx1n7VuovK5jPeqB5mAN7Vh/TPUlrjh0Dz1er3w+/0DvsVut6tcA3Ql1et11Ot1lbXTbDaVP7nRaKBYLKLZbKJYLCKbzSrXUaVSwf7+Pg4ODlAqlQY05n6/r1wwzBdn0HWY0D1LIeG9OhwOzM7OYmVlBeVyGRMTE5iamlJCld9Xr9extbWFtbU1VCqV96bs6No4N2IG3XWrYNi8MGq8XFe6vGm328hkMmi329je3kapVFJ/8z9G063X6yqfkD5F+u1qtdobpqfRD6WbjyxUiEajCIfDapKVSiU1Cd+X0O12u2rDmJychN1ux9TUFDweD7rdLjweD1ZXV+H3+1EoFODxeFQeqtElQoz3x9/pgpdCkFATcrlcavE2m031zMfHx7BarSoVj75yn88Hi8WCZDKpFni9XlcT1+12IxAIwO/3q+ASF/3R0REODw9xfHyMXC6Her2uNjYuet6v8T3xeUaZo7rA1RPtdUHLa5znXVLTpbalFwroAp7fa7yPYe/I+Bz8LBc6fYwOh0P5vGOxGI6PjzEzMwOv16uuRV99uVxGo9FQ38v0JgYZ9/b2UK1WYbFY4PP5VJoe/ZH8W32zNKZJGosX9OfTzXKjgNE1cr/fj5s3byIajaJer6vsDY/Ho4K/9XodqVQKd+7cwePHj1EsFt9bgQTvhWs9GAzC6XSi3W4rlwznBq+pKwqck3xuu92uNkaOWbVaRbVaxc7OjkpLNQNTA2nZbBYnJycDE4nBKJvNNpAaNmrR0ccai8WwvLyMqakpWK1WZLNZpFIpNSnfl9Dt9Xool8vY3NxEIBCAy+XCzZs3MTExoZLk5+bmMDk5qTQAapA0J42anm6i6Qtad1f4fD6MjY0pf2E0GkUymYTP50O1WlUCkcEuaktcgBSIjGRXKhUAUD4ymrYAEAwGEYvFlKZWr9eRyWSQSqVwcHCAQqEwcA3j+zCa0fpk1xf9MH+qMfKsZx6c5/McM6OPX9fsqPkag2c63BiM/nXjMxB9nvLfLRYLjo6OkEqlMD8/j2AwqJ6jXC4jm80qjcrv96uAFABV5HF8fKy0fLqGXC6XUlKcTieCwSCSyeQb84GCKBwOw+v1DoyR0SWmb4jDFByv14ulpSXMzs4qtxezSWj5HBwc4N69e/jd736Hzc1N5Y54H/AenU4nYrEYpqenEYlE0Ov1kEqlsLGxMbQijfeqb+Ycx0AgoNYlg520KIbl9X5bmOJeAF4Lr3w+j3a7rVJObDYbIpGISrVpNBoDPkT9Ozj5PR4P5ubmcOvWLczPz6Pf72Nvbw8WiwWlUgn5fP69PkOz2UQmk8Ha2hpCoRACgQDcbjfi8fgbaUHDAiaEQlgvi9VTe/RgUyAQwMTEhCpKmJ+fx9zcHLxeL/L5PNbX11Gv11EoFJT2ZEyTojDsdDrwer3KMuC9VCoVlWbHCis9Je6sYJbuCjEuaKN2zw2F19XRv0PfjIZtmgyU6j5fppwZP6+/B91Vxevw+3T3hi5sjXNO3xiNyoD+WZqwFKb0AzMbpF6vw+v1Kguj3z/Nh2XWRaPRUJsm/fAUeG63G2NjYwiFQlhZWcGlS5cQDodRq9Wws7ODra0tlEolxGIxBAIBpZVzPjA9jrnURmtAH2e73Y5QKDSwSfFZqtUq8vk8Xrx4gfv37+PZs2fIZDLvvSjJarUiEAhgenoaq6urmJmZgcViwfb2tirOGSUj3G43QqEQgsHgG/ns9H1Xq1VlfXCdvi9l7SxM03Q50avVqppc9MlGIhEkk0kEg0G0Wi1sbW1hfX196EvkgE5MTGBxcRGzs7Nqt0un00oAvu97bzQaODk5wfr6OpLJJMLhMDwejwqs6Sk0uklJ87HZbCqznhPF5/MhEokgFAoNCDen04lIJILp6WmEQiHEYjFcuHAB09PTcLlcKBaL6HQ62N/fVz5d3fepCzbmE1+9ehULCwsIh8Po919nL1QqFeXmoX+ceZ+cgE6nU2VD6Fq0XpDABW70o/H/M89W15S54HU/GzCY7UDocmFZuB5UpBZu/Dw1HOP3A1CLjAKGeb66D1Z3P/D/MxBGAc1rRCIRLC8v49NPP8XHH3+sNF364Pnj8/ng9/sRjUZVKbTD4cDVq1fx8OFD7O/vq3mvv0cKfLvdjng8jqWlJaysrCAUCqHZbMLv98PtdiOTySAQCAxU1HFO6r5iujC4BllUQSWAG5vRCqGw2t/fx9raGtbX13FycnJmSt8fCu8vkUhgdnYWs7OzaoPe2toaWXZst9sxNjaGS5cuYWFhAU6nE6VSCUdHR8jlcioXmi46jpFZmC50G42GWnx02IdCIVy8eBHz8/OwWq1IJpNK9dcbbQCD5rluHum5oO8zR5cwd3Vvbw8PHz5UQTO6HIaZ0vpkrdfryOfzODk5UZp4PB5XgoQL2+VyIRQKYXJyUpWXjo2NIR6PK7+WxWJBIpFANBodqB/XtTIAqkTzk08+wc2bNzE+Pg6n06kCEgxK0J3h9XqV+8Hj8SAUCiEej2N6ehq/+c1vcPfuXRwfH6tNgwKafjL9uSnEGOVnibQeYHI4HAgEAsrd1G63USwWlUaoCz5qLhMTE8q1w7xVpjXRLKcgdbvdCAaDqiSXc4qVb/p9BINBhMNh9S64SdDdA5yW3tIlw8Xq8XiQTCbx4Ycf4oc//OGA64mCmmPKiiiOGd+l0+nErVu3sLm5id3dXezs7Ax1b9hsNvh8PkSjUSQSCYTDYfh8PrhcLsTjcdRqNXi9XjV/uJnTKmBWQiqVQiaTAXBa+JNIJAC83th4XaM/nsrH8fEx1tbW8PXXX2Nvbw+1Wu29ZCzocA1zPdMa0dfXMH8/Yx9zc3P49NNPcenSJXS7XWxvb6Ner+P4+FgVHlHj5/eZhekNb3RtxmKxqEnOum76ovSKNaPZXiqVsLm5iampKfVC9vb2kEqlkM1m1eJ733Q6HRSLRWxtbSGRSGBubg4zMzPq95wQnCB6bXe/f1rMQXOy3z/NDXQ4HMqs1xPC2cjn5OREbSy6OU2BQW1bN7EpKMbGxvDBBx/gk08+wcTEhKpEotBlGhoApeVwYtOkXVhYgMfjQaPRUItVH1u3243x8XFEo1H1XZz4FHSHh4eqdJuBLjYzisViqoJP9/uzpJgbQDwex8LCAlZWVjA5OQmPx6MCORsbG9ja2kI6nVZNb1i6y83J5XKhXC7j4OBAuVb4zpgJk0wmMTExoTYAfVGyjwU3X11bTyaT+P73v49PP/0UyWRSpejp8xyAMnH1pjgUuhMTE/jkk0+wvr6OYrGIQqGgNjC73a40dloo7P3gdDqVwKOfeHx8HJOTk2qz4RykAObmwTnC4Dbng1HL5XMAr4uc1tbWVO+Db8Mf2u+fZrBks1ns7+8jmUwqxWptbW3Ah6xvUFbraWHJ4uIiLl26hLm5OeUOYeCSBRZm+nF1TO29AAxWB1mtVuVTqVQqaLVaytQZGxt7w1cKQFXxvHjxAjabTVUGHR4eYnt7G4VC4b32XdDhRGdhAPNg9QnKe9V9hfTvNRoNpWn2ej2lKXIh6UKbbgC73Y5SqaTKp5ke9urVK1UFRT+nHjBxOBwYHx/HysqK8g3rphgXM+/ZGOXnfVATd7lcyj1CLY9Bw4mJCSwtLSkfJYVFq9VCJpNBOp1WGj/fi9VqhcfjQSwWU2Wl1HD18l8WaiwtLeHjjz/G5cuXkUgklLvg5OREVUvRKmLamMPhgNfrRTgcVhkazCLQ0454Xw6HA2NjY4jFYuo9cUxYQpxOp5W7CDh1lzUaDRWoYWtPfaz1fGy6JIzvwuFwYHJyEsvLy9jc3FSZJvoGyCydk5MTvHr1Cna7HbFYDFarVa0dNtxheavuV3e73UrD5hpkCSyDTJwHxvmsz+V6vf5Gv4r3Dd8Ly+x9Ph/y+TxKpRKePn2KFy9eqCZL+jjSGqD8AF5bKJQzurWtb45mYbqmy0UBQCXZHxwcYHNzE36/H+Pj4ygUCqqGe1hxAatKnj9/jlqtpkwrlqN+G309ie5rpGYxbKEZFx1N1lwuh+PjY5UrOyq1x+l0IhQKKROKronj42O8ePFClVGXSiWVk6n3eqBmxGBMs9kcaAqim+F6IMnoI+v1emqsd3Z2lCnJxciWgktLS/D7/WqCMx2nUCggn8+/4XfVtROmH7GUulgsquISRsu9Xi8mJiYwMzODSCSi/r/L5VKpetROdb8rfZbUDoe9R95zLpdDoVBAKBRCKBRS/leHw6Hq/Tc3Nwd8vgxiPX/+HB999BGCweDA+HHz5Qanm7N8B/R5NxoN2Gw2FcAk1DypbdMNk0qlcOHCBYyPjyMUCiEcDiMejyMUCqngrA6FJtOumOlAjY9zQN8UdMHLTczn8wEYXW77vqCSk8vlsLOzg3Q6jXQ6rapZhxXm8JlrtRpOTk7QarVweHiIzc1NHBwcKKF7ntzvb4vvpIk5dzGLxaIG59mzZ+h2u5iamkKz2VTtAIc5yoHXrQcPDg7UAhuWZjQKTi59AZ0XVmzRNBsmcLmg+v3T/NGjoyPcv38f//Vf/4WdnR34/X6EQiFcu3Zt6DUsFovSnqrVKg4PD/H8+XM8ePAAGxsbODk5UdqWXs5LE58FJ8fHx9ja2lJtCanN6Br6MGHLcSmXy3j8+DG++uorZV5TGLpcLhXQZOI8M09yuZyqjGOhht5ngpkq+XxebaxsBcmqN2q61PSpyfn9/oHsBY/Hg2azOeAL1rMVLBaL8kMz4q0H/RiR1wOxVqtVFaQEg0GEQiHU63Wsr6+rFpTMTslkMvjqq69w48YNRCIRlQKpCy6ONS09PfjJFL2trS0cHx+rWIe+MTEdsFgsIp1OI5VKYWtrC7u7u/je976HDz74YCDIOGrdVKtVbG1t4dGjRypNjeM8MzOjtENeV/93jsnY2Jh6B++CMbh6nrXKcSoWi8jn80in0yrWM+oatICeP38Ol8ulXFC0To1ZRWbznWi6hEK1Uqng8PAQNpsN1WoVVqtV5TPq6URGuFio1QGv68zfJkTP+t5RcOLpaUGjJjeftV6v48WLF/jlL3+JX/3qV9jY2FABD6fTqdr46ZOd16LZabfbUS6XVRObdDqtWmEy+Eatm8/EhXpwcKB6XiwtLWFiYkItTKOGbbx3Vrx98cUX2NraQqvVUgvH7XZjdnYWN27cUC0vGfjb29vDy5cvsb+/j3Q6rZqVEG66FHTsJEezn8JZ9+NTMBgLHqgFGlPW9FQt3dfLwhGjC4pNVQ4PD5Wm3O12VR653+/HhQsXcOPGDaRSKRX9Bk79va9evcKdO3ewuLio0iGNmqYe6OSGUalUcHR0hM3NTTx69AgHBwfodDpK2+X7ZNYLs0eY7sSKuMXFxYFeBcPeaavVwvb2Nu7cuYNHjx6hVqtha2tLvafPP/8cFy5cgM/nGylQ9SClbuGdV2kx5lifhS6k9eyfUQJTT18sFovY29tDr9dTOe16rjkxM4BGvvODKfXFUSwWB9JX/H6/anQ+TBtl3iEd6novh/MMJhfou2i5nAjUOprNphL4xu/udDrY29vDv/7rv+Kf/umf8OrVK7X4q9UqHj9+jAcPHuDq1asDQlC/Ny64ly9f4tmzZyp7QM+OYJR+ZmYGPp9P9Z2l//n58+dKQFNrGyYUjPdfrVaxvr6Ox48fq+bhusD9wQ9+gFu3bqmm3plMBs+ePcOjR4+wv7+vTHI9YMGxpkuBEXEegwRgIBPCmCFhFCYUAtx06K/j5ghgIF1Nz4M1vvdWq6UCQ5VKRfVY8Hq9mJ2dRTwex4cffqiCfHt7e2rDKJVKePLkCdbX1zEzMzOywbzR71+r1fDq1Ss8fPgQGxsbqrlMIBCAz+eD2+1GtVrF7u6u2ix4751OB4eHh3j69ClWV1exuro6sPHoc6nb7SKXy+H+/ft4+vQp0um0clPk83nkcjm0Wi38xV/8BRYXF0daP8yj5xifpXQMm1OMO5wHzlEGLzmnh61tzgPOFTYJYsaKvpl/13ynQtcYXGNUPRqNwm63q+grfZrDoo0sa9WDSOfdfc+z2xrhhCmVStjf30cul1OajXECsq6bXe7ZgJvk83k8f/4cqVQK4XB4QHjTrCqXy3j+/Dnu3r2ryhV5z7x/ajqffPIJYrEYisWiyv7I5/M4PDxEr9dDKBTC4uIigLef5dXrnZ6scP/+fZWMTk0zkUjggw8+wM2bN5FMJtHv99Vnb9++ja2trQHt1qiZ6GWbfE66K1jNx3tkTjZba+qBWJqoHo8Hk5OTmJ+fh8vleqN9pO7r1cuYgcGYAYUyBUs+n1fZM263W1WB3bp1SxUD0A3WbDaxvb2NBw8eqNMpzoLjz0ycZ8+e4eTkBMBpGtfc3Bzm5+cRCoWQyWRw584dFUjS1w3L67/88kssLy8jFosNZCxwnrRaLaRSKTx//hy5XG5A4+v1eur4qRs3bgzdNCjk8/m82lCBtzfPMUJl4W3oWT8UniwAGgZTT2dnZ1U+eqfTUQcl6PPGzKDZMP4oNF19BwwEAkqraLVamJiYgMvlwvr6+lDnOX1yjPTrCe2jBpcvlL6ld4GTjFVq+XweyWRyqBbW7582BGHFi66B8P6Yw8oafk40aiFPnz7FL3/5Szx8+FAFl4wEAgFcvXoVn376KaLRKAqFgvIF84gbdki7ePGiqqEfBe/r7t27uH37tipNBaCEI3s60Fx/8OABfvvb32J9fV2dUUW/sZ7yp/tSdf8mCy48Hg8ikQhisZjqPZBIJFTqGhc/fbr9fh8ejwcLCwvKl8dAXDabVcnwFLq6wOX755hTODGnlcFAXu/GjRvquZkfC0D5Zo+OjvD73/8eq6urmJycRCQSOXMu1et1vHr1Co8ePcLW1haazaYqyb527RquXLmCUCiEbDarNt90Oj3wHUx/e/jwoTo25+rVqwiFQgNtEZknbmwyzufmBj/qfEGOTS6XQyaTURr+u2i6hOP9tjXKe6eVMioriQJ3ZWUFN2/eVAURdCvR8v1DlKxvg+9c6AKDR/kwOLOwsACHw4GpqSk4HA4VdTQ64PUotG5S6QtJh35ABhs4mc6L/vd6JsAwmL7CBj8U2DSFmNrCdC+9gUelUsGLFy/w61//Grdv31YalRGr1Qq/34/p6WlMTEwgFArB6/WiUqlgY2NDVRCVSiWsra3h9u3buHDhwsiAC6//6tUr/Md//Ac2NjaUhm61nnY/S6fTeP78ObxeLw4PD5HNZnH//n2sr6+rqDjwekPVJ71xvHQByCCdz+fD7OysqrdnkQa7rOnfQ0E9OTkJh8OB6elpdSAmA1R6fwTj3OE/9awC3gc14/X1dTUHo9GoCmrSH633CdnY2MCvfvUrpe0a08N4vXa7jb29Pdy+fRtra2tIp9Ow2Wzw+/2IRCKYnZ3F5OSk8v1PT0+r3hhGwUGN7vbt24hEInC73VhZWVHBLt2KDAaDqskUx5DZFWyWf1Yzb36eedjvqumy+o9jP6yEW9fS9TUxqhjC4/FgZmYGn3zyCT7++GPE43GVGbS1tXWmwP4uMF3oGicNJzy7/rTbbbjdbnXcSSgUUl206Hca5psxmov6SyN6hzK32z1gfp7nhehRbb1KbFhAjROHWiHNXu7gLG+cm5tDLBYbKCOmGbe2tob79+/j6Oho5KThguG9Ma0nHo8jmUzC7/crTfXk5AT379/H6uoqJiYm1AGa+r3TnNva2sLGxsaAlk7Bksvl8PTpUxSLRSQSCdTrdezu7qqOZxxz/bvPyhDRtS2+X7vdrqqlQqGQOrFAT9wHoJ53bGxMZXwweMLve1vnOX3j5uLWN3L2smXp+vHxMVKplIqi68KbGunW1hYuX76sGnsbr0X/6v3791Umis/nUz03EomE6iKmV10O0yx1/+6DBw/UOXB6Zo3dbkc0GsXCwgLi8bhy/+hClP03hmmw/A5aHnrmznljKFRYWADFvh/6eHPe6K6RUZkOnO+RSARXr17FzZs3sbS0pPzgh4eHKtg+yo//rsH094HpQnfYrk8NjqY2K5G4m87OzuLq1auqoYcefdYXE/1Fxkmq50p6PB7laGeV1LveP80ZCoRhQpfPpTc01wsXvF4vkskkZmdnlbZLodvtdlEqlVSFHV0qRnOMz0azr1KpKLMyGo1ieXlZNULnpEun09jc3EQmk1FHwRjRNRk+i/5cDDhxcwAwIHD190FhTatg2DNQOHOh0eWgCwMGV/UNBnjt7uAJyewpayzC4XWGda1j+qB+v3rAj1219vb20O+fRsYZ1DG+cwCqBHqU6d3tdpHNZtV7YDFHMBjEhQsXcPHiRXV8Oq0eNooaFq/gddhsn4c2sryXc5btGZPJJI6OjlQBBseLwUOuLWPKGO+RucDDXGpvg5opq+vYB4HWgu5+0+eCvs75ewbOKB9mZ2dVox9mejDn3zg3jWNnJqYJXS6SYbmxFFC1Wg1HR0c4ODjA0tKS2ul9Ph8WFhZw+fJlpNNpHBwcDORa8juA15qtnn/KFC/mefLoETaiPq/ZwYXLfFhqsMNMLAb/1tfXkUql3mgU4/V6kUgkEIvFBs5eozbJKDuzBZhep2u8nHzsCXFycoJ4PK58oZcuXVIZBF9//TVqtZpayKM0Z252ly9fxocffogXL14MnNRMGMAEoAoVRmkMzAvmuOhClT9Op1P1V+DRKXqCP1OsKOgoKKgZ61ob383Y2BiKxaLKkGDE3Xh9ploxGd8Ir0NfNfsKDxu7UCiEDz/8EJcvXx4peOle6HQ6quLP4/Hgxo0b+OEPf4hLly6pDl9sSq/32R0mDDl+zKzR14duocViMeUvpxXD4oxUKoX19XXcunULXq/3jfvmd/DsOl2pOQ987na7rbr1BYNBdcyQ3hhft6yMVgrXkMfjwfj4OC5fvozFxUX4/X4AUFk7bE3KNLNh38FKxnd1k3wTTBO69BPx+HBjAItm7dHREdbW1pBMJgEAY2Nj6Pf7qosTB3FY5Znx5eg5rOFwWLksms0mDg8Ph2orZ6ELck72UT475siy7R21eeY4sj8uzz4DXu/q7EhF04nNyjkx9Y5O3NVTqRQODw+xtLSkXB7j4+O4deuWshz29/fh8/lUieiwicZnm56exueff4779++PLPeka4bCyjj+HC9qqBwnll9S4HEhs//GwsKC6oHQ7XbVSb76UT66VWA8yZfVa7Ri2JmNJbv8rC6wXC6X8v3pJqceYNPf0bBxczqdWFlZwZ/8yZ+oPs+j5hFPoh0fH1ftCz/77DPcunVLNSai5n50dIT9/X1ljnMtUQjqCgWb+uunLHOsrNbTvgSTk5MIh8PqyCyOXzqdxtraGg4ODpBIJIYW/TCDhf/f2BbybfBYoWAwiGg0ilgshnA4jFwup4KenN9nFVDYbDaEQiEsLS1heXkZ4XAYvd5p+1ie78aMkGFKgz5+rAQ0i29d6PLlUGM7yyRhrfWTJ09Ug5K5uTl1qm48Hsf8/Dz29/eVIBiG7t9lJ6vJyUnE43FYLKeNpt92wqwRLhQ2laa5O+plsVKJB9/xb5nWcv36dVy+fBmBQEAJL7oK2AXJ4/FgdnYW0WhUmbgnJyc4PDxUuZLAaSZFOp3G4eGhCpBwvMfHx/G9730P3W4X6+vr6PV6iEajA60bh0EBcvXqVTx58mRoFY9+38YFovu0PR7PQGtE/f3T5ROJRDA5Oala+LHvbzabRT6fV2OplxPr75c9E8LhMFwuF8LhsOpaR62MwTG9raOuZfMZaZHobhJ9Yxk2Z2i9XLlyBZcuXRqZpwucCnK9RaPVasWlS5fwve99T/liLRaLyl9ng3Jq12ymxD4L4+PjKlhLrZkniDDoy/sOBAK4dOmS+t3e3p6yBoDTij1WHg57Bs4rugjohjpvDiytjnq9rnpH9Pt9Zc3x/LizBC7fWTQaxfz8POLxOHq9nqpW297exqNHj/DkyRPk8/kziymM/Y/NcDeY2tpR95UNo98/Tb7e399XGs7y8jLm5+cRjUZhsVgQDodVmeVZ6JFZarqsmtJf7HmgFkNtLBaLqWDCqKo0PQWOkyKRSODKlSu4evUqFhcXMT4+rvoV6GlKbCbCaDy1GaYYPXz4cOBvWN1Fvy6fi66C8fFxXLlyRR2dHgqFBrTpURONAUOXy6XOvzK+P2OmAq9L040LU/eX6lkN/HuOL3Oe+TxHR0fY3t7G3t4eMpmMaozE8WXDFragnJ+fH+j0pfcJ5v3q5isXNivd9O5i+mfPCgTSOmBns2HFMoRaM03s5eVlBAIBLC4uIpFIDLgk9PeqN3ehaT01NYUbN25gcXFRdYJjoQmP/+l2u6rCjEL3gw8+UGb5kydPsLa2prrZsevfWQUIoVBIdZaj8sNc5fO46nT3Gf2ynU5HpfidFfQEoGIE7DcBnG7O2WxWBYB5kvFZ96TPAzMzG0w9OYKT7axBpW+X5Zg87XZpaUnt5vrOdNZ19cXNScf0KfpYzwN3QwbPZmdnMT8/r4TuqOt7vV7Mz8/DZrMhHo/j+vXruHr1qhIKANQJvexXwB8ePhgMBpWAb7VasNvt6lgXPaeSZiKDI3p1HlOwAoGAEp70BbN7lW5Kcuzq9brqsk90AT0s2Vw3QfVgHO9PF2R69ggLEo6Pj1WQrlAo4OjoCMfHxygUCsotZYx0MwDEpkD6hthoNNTpycbyYt4X5yXHgn2A+Xs+IzXgYWPBz9RqNdRqNbUpGMe01Wopt8fU1BQmJyeVUsANh59lsYbuSuNc9ng8mJiYwMrKCi5cuACHw6G635VKJezu7qJQKCAajSISiShlxe/3KxfD6uoqPvroIzx+/Bhff/01MpmMOttt1PpkVsn8/Dx2dnaUxcX1NKp4QYdjTouOvmjd3/42IUgLyW63K0XlxYsXeP78uSprPqtkmHOAcQL9PX/bmKbp6tVJbzNDONkymYzSIDjJer3euf1INGepDbI3wLDa+1HQBKXfMRqNqsXCRHnj4uOCAU5dImNjY1hdXcW1a9dU43I+JyPObFfH3E+bzaZOp6BfGjhtWJJIJJQABaDMY+bd6pOWZi/T8GjC8TOs3jLmXFLLGlWQwfE1jhU1XPZlBaC0at0PrWcN6BkY+im77C2gCx6jxsl5xQXGrA+9AxwXlp7BYHxfukbEvGne67CA7TBoqfBedBcONxdehwUgPHnDmCalC3n9/fb7p/m2gUAAiUQC4+PjSttjyTU3qW63q46VWlpawtWrV1V5MZWFcDiMaDSKaDSKZ8+eDcxNapT6+7VYTgtDWCV4eHiIQqGgfKPnWVcUdlQ22A96VIaBESoTVKTK5bJq7cqez8yIOAt9nb5rkdQ3wfR+umf5avTPctcsl8vI5XLI5/MDpjjwbjl21DLYqOS8WQt6wIwanNfrHThUUE+v4XUymQz29/dRqVRUyz2WNXMxsq48lUrh7t27WFtbU/41l8ulghmxWAzRaFRp28lkErFYDKVSSZnw1GT0ggc9O0AXqDSd9f6zfE59A+GJCnp2hXHM9BQfaooMTvH5KHD4ncBrE1lv1MNiBgpaPamd1xllWVBwUpOkIGArQrfbjUQioYQ5o/tEPyWCY2q1WpUw0C20YTms3JgDgcDAvOA/dV8xo/+6oOUz8H3w/dE/PTY2hkKhMJCFkEwmVRtH9hjY39/HixcvVADJarUiFAqhUCggHA5jenp6ICAMQFlwLBtPpVKqMENP5ePzcA1Q09Stm/P016XQ1Y+jf1cNk5shXUHsH8FeLefRlvWx/h/lXjDyNn8NP0PtlFoP813pOzqvsGWwhYuIL/y8O5ve1UqvzTdq7Hwu5q6y8Us6nVYlqsO0YmZSvHr1Sh190u124XQ6VYoQNRFqvAw46ZpCMBhUR/cQPcVNX9x6ty79OXSBYrOdHhh64cIFxONxdby20Tw3jjOPBjemdDGKzmKReDyuSmX7/T5OTk5UZgqzSng9XbOhBs3v181Dfl4vEwagAqmxWAwWi0XlsvKsMH1j0A8KpR+d/S6oFRlT9nhfsVgMi4uLKlCpzw3gdSHLqKwXfp8xA4dHJ/H4HQZj6Zro90+LMvb29tQpGmzcw9aYbrdb+TiHXZO9ere3t1Eul1V1GvugGN1KXId63xM+23kygrjpU3OnO+q8WQTcZKvVqmr0z6Y2o6rXjJxHFn0bfCdC97yf018uj9xg+tR5oqV6cCMWiwEADg8PlVB/G3rwjBHlWq2mGm0b09boM97e3sbDhw/x7NkzNJtNeDyegaRz/Rnp32KjcX4nP3t4eIj9/X0sLCwgEomo4+enpqaQTqdVihNNa54VpvvlhgXKKCyAQdNK15IDgQAuXryIhYUFVd0zTIPQhYqu7enaJAU6Nfjr16/j2rVrSCQSqFQqePr0qervSiFoLK7Q3yW7SGUyGdUjV/883SwWiwXBYBDLy8tYXV2F3+/HyckJvv76azx+/Fi1UtTdMYzO8/+POryQz2S1WuH1erGwsIDl5WVVrjss3UrvRzHsnejzQj/tmTm9jA9MTU2pceh2u8jn89jb21PmPseD19P9rsY5SIuSlXbZbFZtjDxtQs+X5hrM5XIqjc3Y9Oltgpf3wcwVAMhkMmf2AibczMvlMjKZDFwu10B/jXcJjP2vELrvkkjNycc2ilbrae0/uySdx/fDclueOba/v38uf7DdbleaXjAYVL5Q4NSvSuHGaC8A1aRmZ2cH29vbyOfzbwQH9B8AKhc3Go0ilUoNmEaM8uq5i3pOKwM+1WoVx8fHeP78ueq9oJ8IcVZv1GH3Z9R2eSZZsVgcOV66VsqMAWYtcCFQG2KviIsXLyKRSKjn29nZwe7u7hvvh4uZp+7OzMzA7/crfzPT//RsCEINlPmcPp8PwWAQuVwOW1tbAwEcauosOaYrQjdDR42j1+tVmrtRy+WP0awfBgUKfdPPnj3D8+fPcXx8rJoWUfNlu0v6itmfhGuDgt7r9SprST8hWL8/PiOrNHd2drCzs6MaTukB0UajoZoK9ft91aSHWRNbW1sDuemjYIXb+Pg4bLbTo7foajoLbhTZbFadgsw2q8OKKc7CjBQxI6YJXV2DGlaOOQw9us3DHJl/+DahS4Gid/7v9/sqOEUn/Cg8Hg8uXbqETz/9FF6vV51q0G63VVqPUZBSY8hms6jVakoDSCQSqqxTdzFQm1xeXsZHH32EbreL3d1dFb2nwOBx3TR7dX8Wx0PPyKCJOjc3p4TKWdkeXOjGnFam1jF4+bZ3xWvz2CWa63wfus9UdxdYLBbE43HE43H4/X71/LoGTRcRzV6fz4d+v6+qAvXgl/43DDjFYjElpIxHFPG9+P1+1b7R4XCoLJHzzFXOJwo9vbE6LYSzcneB11H9fD6PnZ0d3Lt3D7dv31btGJnypVsQxrS5WCymApdM75qbm8OHH36IixcvDmjh/HE6nYhEIkgkEtjd3VXHLTEFMRwOD/ipORZMKXQ4HGqOs6n63bt3VaB31Hh5PB6Ew2GEw2Flkej9IkaNuR6IS6fTqoHPeX25wGD5Of/bLEwTutz9Oah656dRg8Tdl4UBFDJ6T9lRGIM5zAnUzd+z0lssFosKUDEIxvr+mZkZZXrpQQaePXVwcKCix2xgYiz35Zj4fD7VNDqZTOLFixc4OjpSh1gyLYjaJjUNnidGXxbNYJqh/GFByttMWvrC6G9st9tIp9PY2NjA0dGR8km/LXjpdDoxPj6O1dVVuFwupNNpbG9vqxOBWbDBxU+NjE164vE4yuUy+v3XVWDsyMYj75nRwZQ65h0Dr3v3sniA38mgEAV/IBDA+Pi4qtFn314m29OlsLe3d+Y84/tka8eNjQ1Eo1GVpcL5q28ww+CmxTMDHz9+jLt376qG46wq7Pf76iw3tttkl7UbN27A4/Hg6OgIrVZL9QBeWlrC5cuXMTc3p3J29QwSuqwmJibUplcoFHBwcIBcLjeQ96wH8mZnZ1UANZFIIBgMIp1OjyyN16HFw8ZT9P0zNmA84cFIr9cbOBdR9+WeNT91Nw9lxP/YijSXy4V4PI5oNKpyJhmU4n8b0U1sfpcxb9EInfmsxGk0Gnj58qU6Y0tPQzvrqHb2KG02m1hdXVUZA+FwGAsLCyrvlRpAr9dDsVjE/fv3VdNyAKrSiUECfWfVTWaPx4Pp6Wl89NFHKq/UYjntRubz+VQvWQpbLgg9+tvv99W5cexfoWcXjHo/zE1lDnOlUkEqlcKDBw/wxRdfYH19HbVabSATwmjC0ecaiUSwsrKCjz76CJFIRBW55HI5pf2zVSNzabvdrnKzTE9Pqw2Hgo/NWsbHxzExMYFIJKLSqOgaYZ4q5xFLrdkeku+JlWA3b97EzMwMisUi+v3TnGr9fLNcLodu97TFJS0cXQjoQovFHM+ePUO/30c6ncaNGzcwNTWlKsSojZ/1Hmg90bWQSqWUcNUDsfr75zV4/6urqwPH0AcCAdXnQO9apl+XG0K3e9qI5/DwUPnw6T/mJskNa35+XmnebK6+sbGBtbU1rK2tnanlct4DUE3Gq9WqKnWm20yPbxjRc31p9bLgadSa5jyni4bBO/6T9/ZtY5qm6/V61cmlfOnszaqX9RozAmhG6+WmxsnPPqQTExOIx+NKOLGwgocJslKIi/8sbbfXO20PmMvl8OrVK9y8eRM/+tGPVGCJNe56Mvvm5ib+5V/+Bffv31dtHDudDjY2NlQzZaMA1E1cmuX8Po4B/aKsxmJwjcE8/bOcjADO1R+V98Cm5pVKBevr6/j5z3+OO3fuKK2bwpt9hI2VZawQWlhYwAcffIDV1VVleurPobtkuPGy+o5J93a7HblcTvlpPR6PqtOPxWJqs+t0Our/ZTIZZLNZZQUxL3l6elql0jEFzu12Y35+/g3BSU2SGSi1Wg3r6+s4PDwcaJaj/w01JJ5hlslk8PLlS7x8+RJ/9md/phqf06V1FnpPW4vFMpCmxh92eNvf38fR0RGWl5dVVot+dpz+o2+Ww4QK0/U2NjawsbGBbDar1pDD4cDKygomJiYGfOs8+t1ut+PevXu4d+8eHjx4oMbqbc9ptVpRqVSwtrYGAEoBYwUdG7JbLBZV4q63owRe5/NznPQqQuPzOZ1OjI2NYXp6WlmpwOsTUs5q6v++MU3out1uzMzMYHp6GqFQSB1ncnR0hC+//BIPHz5UGq0OfYuj6PdPE81/8pOf4Mc//jESiQRKpRJ+97vf4d/+7d/UUTPA65QdRnPPUz3TarWws7MDALh586aqdtIbxjDl5s6dO/jyyy8HAk6pVAq3b9/Gn//5n2NpaWnoNfTULv25+E9dQJXLZezs7GB/f19pxLogAF6bm1NTU+cKTACDRRTb29v47W9/i1evXg1scHqSvu76oYkajUZx8eJFLC4uqmbaoxY6/97hcKDVaqmz0MbHx1VTIl7T6/UiEAioH1YwMcJfqVRQLpdVhRPnCzU9Fknwe5haN2xcuHitVisWFxdVe0y6t+jf5t/rVWPA6aZFBWJlZUXFBM7zDhiEnJqawsTEhBIMenqV1WpFuVxGKpXCzs4OKpXKwEGR+qZuzJ4YRb/fx9bWFn7/+98jlUqp/99sNvHFF1/giy++wCeffKKayNNiGxsbQyKRQLFYxIMHD9Q6eRtMA9ULl6g4uFwuzM/P48c//jH+z//5PwgEAjg+PsbPf/5z/OxnP1NHGumb0NvgJnzp0iV8//vfx/j4OACobB/Oa7Mwzb3AoFAymRxoaTg1NaWaVOhVQWelO+nYbDZcuXIFP/3pT/Hpp5/CarUq0/zevXvY398fEBxcUHr/2lHmiH5t5gAyGGNcRK1WC7u7u28cVNnv91UqztsCUqMWib7QGdlmo2/9PDEGjtiHwBhJfxtMfWInKLpqCCuhAoEAACgfMnBqyUxNTWF2dlaltp0Vqefv2FeCPXGj0ahqa8jz0vT+qzxHje+OqVDUlPQKtn6/rxL5aVa+7RRn3c/JTImpqSlVUAFgwBwtl8vqeXTYmOe8ApcwY4Qa2d7enopH6Bkv1Hj1s+uM+djngeO4v7+Pk5OTN9pRNptN7O7uqoo+Qu3R5/Op+WKc96OuRytTT+/jPKX754c//CE+++wzlRKXSCSwvb39xjmDwzDKDovltGfLpUuXcPPmTYTDYdUkihWgesD328bylkjfe0tio5tAN3P4wvU2dH8ITPVhxJhm/aiyRD0f8rzQrDKeBED6/f6AlmX8W/r1vgk0fYedhqBPMAYIaNq/6zWYM2x8H7rJys/qv+NCfNfm1kbXg/F6xucb9vfGfw67t7elaw37XhZfDLs3/VrDTFp2pPtDFjKvq89f/V3r7/msTeS8sNBh2JqgtTFq7BmXedf1xL83/n+9vwrXM62a81inw6CiZVS2OO/epTDjnIx8IaYJXUEQhP9FjBS6fxQHUwLfvDLkLA3ofXEebeI8ror3wdtylL/N7z8LM/MdzeK7HItv+z2f51rfZN7/oXwb6/mPZW6KpisIgvD+GSnhzTsYSBAEQRChKwiCYCYidAVBEExEhK4gCIKJiNAVBEEwERG6giAIJiJCVxAEwURE6AqCIJiICF1BEAQTEaErCIJgIiJ0BUEQTESEriAIgomI0BUEQTAREbqCIAgmIkJXEATBREToCoIgmIgIXUEQBBMRoSsIgmAiInQFQRBMRISuIAiCiYjQFQRBMBERuoIgCCYiQlcQBMFEROgKgiCYiAhdQRAEExGhKwiCYCIidAVBEExEhK4gCIKJiNAVBEEwERG6giAIJiJCVxAEwURE6AqCIJiICF1BEAQTEaErCIJgIiJ0BUEQTESEriAIgomI0BUEQTAREbqCIAgmIkJXEATBREToCoIgmIgIXUEQBBMRoSsIgmAiInQFQRBMRISuIAiCiYjQFQRBMBERuoIgCCYiQlcQBMFEROgKgiCYiAhdQRAEExGhKwiCYCIidAVBEExEhK4gCIKJiNAVBEEwERG6giAIJiJCVxAEwURE6AqCIJiICF1BEAQTEaErCIJgIiJ0BUEQTESEriAIgomI0BUEQTAREbqCIAgmIkJXEATBREToCoIgmIgIXUEQBBOxv+X3FlPuQhAE4X8JoukKgiCYiAhdQRAEExGhKwiCYCIidAVBEExEhK4gCIKJiNAVBEEwkf8fpltjLw1aZKgAAAAASUVORK5CYII=\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 57; current eta: 0.5, current beta: 128\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAC/CAYAAABdcw+KAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAABDN0lEQVR4nO29WXNb2Xn3+8dAzANBkAAJjhIpipRaU0tdbjt+bVfHqZQrqTfOzbk6uUjyHXKT29zlE5yqE3+EJFWZXCm7HTvubvWkiZJIcRAJDiDBCQMxEeO5YP0fLUDgoLZ6y+fN86tStVoksPdee61nPfOytVotKIqiKNZgf9c3oCiK8j8JFbqKoigWokJXURTFQlToKoqiWIgKXUVRFAtRoasoimIhznN+rvlkiqIob47ttB+opqsoimIhKnQVRVEsRIWuoiiKhajQVRRFsRAVuoqiKBaiQldRFMVCVOgqiqJYiApdRVEUC1GhqyiKYiEqdBVFUSxEha6iKIqFqNBVFEWxEBW6iqIoFqJCV1EUxUJU6CqKoliICl1FURQLUaGrKIpiISp0FUVRLESFrqIoioWo0FUURbEQFbqKoigWokJXURTFQlToKoqiWIgKXUVRFAtRoasoimIhKnQVRVEsRIWuoiiKhajQVRRFsRAVuoqiKBaiQldRFMVCVOgqiqJYiApdRVEUC1GhqyiKYiEqdBVFUSxEha6iKIqFqNBVFEWxEBW6iqIoFqJCV1EUxUJU6CqKoliICl1FURQLUaGrKIpiISp0FUVRLESFrqIoioWo0FUURbEQFbqKoigWokJXURTFQlToKspb5rjeQLXefNe3ofyeokJXUd4y/9f/cx//9//7+bu+DeX3FOe7vgFF+T+N/30rAafd9q5vQ/k9xdZqtc76+Zk/VBRFUbpy6q6r7gVFURQLUaGrKIpiISp0FUVRLESFrqIoioWo0FUURbEQFbqKoigWokJXURTFQlToKoqiWIgKXUVRFAtRoasoimIhKnQVRVEsRIWuoiiKhajQVRRFsRAVuoqiKBbyzvvpntNa8lRsttc7p33T73pb1+z287dB53N9W9d513yb7+9/yphZMQd/H9fe7/pdVqL9dBVFUd4+p0r2d6bptlot1Go1lMtl1Ov1U3/PZrPJH2K32+FyudDT0wO73Y5Wq4VGo4FKpYJarfat7LpOpxNerxdOp1OuV6vV0Gg00Gq1YLfb0dPTA5fLBbv9d/faNJtN1Ot1uUazeXLmlt1uh8fjgcvl+p2v8U3h+LZaLfl75zsizWZT7t9ut8PhcMBut7f9rjkXOJ6d8Pu7fbbZbLbdS+fnHA4HvF4venp6un622/11e+Zuz/outaZqtYpKpdI2NxwOB3p6euB0Ot/aPKxWq6jVamg2mzKePT09cDgcsNlsqNfr567jb4rNZkNPTw88Ho9cr9lsolaroVqtyrMDr97RWeuf6/hdrh/LhS4FVqlUwi9+8Qv8/d//PR49etQ2eMDJYDudTgSDQQSDQTgcDjQaDTgcDoyMjOCHP/whPvroI4yOjqLZbOLBgwf42c9+hk8++QSlUumtC94PPvgAf/u3f4vbt2+jWCxicXERv/nNb/D48WOUSiXEYjF89NFH+JM/+RMMDw/D4XC88TU4YarVKvb39/Ho0SN8+umnePLkCba3t1Gv1zE6Ooq//Mu/xJ/+6Z/C7Xaf+33Hx8cAALfb/cYCgpO7Xq/LguMiOz4+RqFQQKlUAgD4fD74fD643W55V9lsFltbW5ifn8fBwQHGx8fx3nvvYWxsDIFAQBbQ/v4+/vEf/xH/8A//gJWVFRwfH78m4NxuN3p7e9Hb2wu32y1C8vj4GNlsFtlsVj7XarXkWd1uN65cuYK//uu/xp//+Z+jv78fNpsNrVYLhUIB6+vrePr0KZLJJKLRKGZnZzE8PIze3l55juPjY5RKpbZnDQQCIgh4TbvdDqfTKcrAm7774+Nj2Gw2uFyuc99VpVLBv/7rv+JnP/sZtra24HQ6MTQ0hJs3b+J73/sebt++jf7+fvmub7I5NBoNbG5u4t/+7d/wy1/+Evv7+/D5fLh9+zZ+8IMf4MqVK/D7/Xj48CH+7u/+Dl9//fUbX+MsbDYbfD4fvv/97+Ov/uqvcOfOHdjtdmxsbODjjz/Gr371K6RSKZELjUYD+XwehUIB9Xr9NRlgt9tx+/Zt/M3f/A1+/OMfw+v1iiC3EkuFLjWLer2OUqmEfD6P4+Nj1Ov1rrskJyIFWK1Wk0Xv8XgAADMzM7Db7Xj8+DHS6TSq1aoImrdJJBJBX18fPB4P7HY7RkZGcPXqVWSzWaRSKQBALpdDNptFPB5/I6Fr7tAUdLVaDW63G4lEApVKBf39/ahWqxgcHEQgEJCfn0W1WsXh4SEAIBqNnvv7JvV6HcViEQcHBzg6OoLD4RChCgDlchmZTAZ7e3s4ODhAqVRqE8y1Wg3ZbBZ7e3vY3d1FtVrFzs4OCoUCstksYrGYjNmjR4/w85//HFtbWyiVSqjVanIf1KxarRYODw+Ry+Ve8y82Gg1Uq1XU6/U2TZk/29jYwH/8x3/A4XDg1q1bCIfDAIB0Oo2FhQU8f/4cGxsbcLlcePr0KQYGBtDb24uenp42gerz+RCNRjEwMCDvCYAI5UajgWAwiP7+fvh8PjidF19eb/qu6vU6AoEArl69it7eXrhcLvT19SGRSMDj8YiVZFoWbyp86/U6crkccrkc7HY7wuEwEokEpqenMTw8jGAwKNft6+tDtVq98HdfFKfTiXQ6LYpZs9nEwsIC7t+/j/X1dRwdHaHVaqGnpwcARCvvdi9OpxPVahVHR0coFoti+XRaT982lgndVqsli6JUKmF/fx+7u7totVpwOp2vLRaHwyGLzVxQzWYTlUoFlUoFe3t7mJubg8/nQzqdRjabFdOn2073TQmFQrh27RoSiQR8Ph88Ho9ojq1WCw8fPsTe3h62t7extraGkZGRC2krFLKmeUzNqlqtwuVyYWRkBNFoVDROl8sFr9eLUqkkO3U3Go0GdnZ2MDc3B5fLhevXryMej58rCHhP+XweS0tLePLkCfb29uD3+5FIJBCLxeDxeFAul7G5uSlCa3NzE7lcDtVqtW0DAV5ZLS9fvsTCwgLi8TiCwSCq1Sp2d3exurqKVCqFQqEA4GRxmIvB4XCg2Wzi+PgYjUYDjUZD7pfzxG63w+12yzzimAIngv3TTz9FMpnExMQEYrEYXC4Xjo6OsLOzg93dXeRyuTZhbwoql8uFcDiMkZERXLt2DTMzMxgZGYHX60WlUsHu7i5SqRSKxSJisRhu3ryJK1euIBQKXWhB1+t17O/v49mzZ6jX67h+/TpGRkbOfLelUgk+nw93795FtVoVDdvn86GnpwfHx8eisFCb45he5J5oCaytrWF7exsOhwPj4+O4c+cO7t27h9HRUbjdbtjtdiQSCVy7dg3//d//jXw+f+b3XhTOGYfDgWw2iy+++ALJZBKlUgnJZBJbW1s4OjpCo9GA3W5HrVYT15/D4egqU5xOJ5rNJtLpNPb39+FyueDz+eT3rRK8lgldThSag2tra1hfX5eFZgpI09dWqVTEbORCstlsqFarKJVKSKfT8Pv9aDQaKJfLbYv1bQndvr4+TE9PIxQKidByOp1IJBKYmppCMplEMpnE0tISgsEgRkdHEQwGZfc9DfrLKETo26Q2eHR0BAAIh8NwuVyy4eRyOayurqLVaiESibT5Kim4d3d38eWXX+Lrr7+G3++H0+kUE/00k4pjfHx8jHQ6jQcPHuCzzz7D3t4efD4fxsfH5dkKhQKWl5fx5MkTLC0tIZvNvuZjo4+RkzqTySCVSonpfXx8LJuJKSwpGOibpMVDgW7Cz7rdbhE8pi+c35vL5VAoFLCysoKenh7RJPkOaG3xM53P4XK5sLm5if39feRyORwcHMDv9+Po6Ajr6+tYX19HqVTCwMAAarUagsEg3G63CKbTxrteryObzWJhYQFffPGFuDF6enoQi8Xa3hXnx+HhIZLJJHK5HEKhkFhf1WpVNDkqBhxHfofD4YDL5TrXEqvX60gmk7h//z6Wl5fhdDoRjUYxNTWFRCIBv98v7zEcDmN6ehqRSOStCl2OW6lUwurqKtbX11EsFpHP59v8/51r3lRkzLEGIC6ltbU1uFwuRCIRuFwuWSNWYJnQrVarSKfTqFQqSKfTePnyJba2tlAul1/z5wKvJiQnh6k58f9p0lYqFTidTvl97mjdvveb0NfXh3g83uYfo78pEonA6XQil8uJeXj16lVcvnxZzNhu8PkoHBgQrFaryOVySKVS2NzcRKPRQCgUQigUAnCitWUyGSwuLmJzc7NNAwcgvtSnT5/i0aNHSCaTCIfDePnyJaLRqJjJZqDFXNS8r3K5jKOjI+TzeWSzWRSLRTSbTRSLRbhcLmSzWaysrGB1dRWZTKarQOTEpyCr1WqoVCptmnDnOzIFLrW2crl8ZoCEP2PArFariV/fvAbdEHa7HcViUd6jucl3uw43osPDQywtLYmg7O3txfHxsbhY6PI5OjpCpVLp+n38u+lmS6VSsh5oyodCIdy8eVM2SQDyu8+ePUMymZRNl/Msn88jn8/D4XCgVqvB6/WKQKb/vNlsdg1mdlIqlfD06VM8fPgQm5ub6Ovrg9PpRCQSEe2QY+dyuRCPx9HX14dkMnnqd74JXMcOhwP1el38tLRyOy0e83lOC8Y2m02Uy2VsbW1hdXUVHo8HlUoFHo8HIyMj/+cJ3Xw+j2fPngEA9vf3kUqlxKTrNkBmhBxA285larHmgqEJwQX+NqDZynvo/BkneKFQwNHREba2tkTzC4VCp05s3j8Fn91ul2cslUoS4CkUCvB6veJjPDo6wuHhISqViiy+O3fuYHR0FB6PB8fHx9jc3MSLFy9kE7DZbKhUKshkMggGg2i1WvB4PDKpO319DocDwWAQiUQCQ0NDYqqWy2Vsb2+LtkUf7VkZI53vyfy3swSux+OBx+Np2xDOgj/nM5nzpVO4m3/v3HDOeg6+562tLTQaDfT19aGnp0fMe7/fj6GhISQSCQQCgbZgmvn9nJ/Hx8eyiVYqFbmXw8NDvHjxAh6PB8PDw3C73ahUKtjY2MDDhw/x9OlTHB4ewuPxoK+vD8FgUHzo5XIZgUAAzWYTg4OD4o+mUOLmbgYbuz1rNpvF4uIiUqkUjo6O4HK5RKnpDBLSl2+63H5XuJZp9tP66JQL5jvmfZ31Hrlhbm1twePxtFmTVFy+bb51ocuXm8lk8OWXX6K3txelUgm5XK7NlOzGWTuxmd7Dv5vXe1v+Ge60BwcHKBaLYrKZWpTpE6I/9OjoSH521jOYu2uz2RSNPZ1OY3l5GQcHB7Db7aK10I3CwFQ2m0Umk8H09DR6e3tRrVaRSqWwurqKYrEIh8PRZn6WSiWxBFwul5iapqZAbXhwcBDDw8OixdO1USwWkcvlkM/nL7S5dROcZpoT/8vxoOBsNBpi9l9E6FIT4ufp3uGC5TX5d75H8z7Pu06tVkM+n4fNZkO5XIbf74fb7YbH40EkEsHw8DCGhobg8/leEwJUDhjsrVQqKBaLqFar8p4cDgeKxSJWV1dhs9mwt7cnlsWLFy/w7NkzpFIpVCoVuFwupFIpOBwOVCoVsRr7+/sRj8dRr9dlPM01dl5mRaPRwNHRkfhMmbZFxaBzQysWi9jf35frvQ2Fx/RBm2ub/3+WJdvtPZoWKtdoKpVCJpNBNpvF7Ows4vH4mZvR28Iyocso9fj4uEQRGRQqFApt/jdzwE1Mv1RPTw+8Xi98Pp/k3Jm+wbflzwVOtPT5+XnMzs7KdRmhdzgcSCQSuHr1KsLhMAKBAEZHR0XjPsuMY5DI/H8Kby5ubk7U/iiUGT2nsNnd3YXf70e9Xsfh4SEODw9xfHws6U0UXoy01+t1+U632y35xdTEqL1wXCloy+UyyuVy1yyDbmPeGbgxNfzO3FtTOFCzNn2zZ2HmaZspW/zOer0uQqPzXs3NBnhdAzd/B3gleOmG8fl8CIVCCIfDbd9hvn/6jilszSg73UylUgnZbBalUkmyPmjWF4tFbG9vI51Oy4ZObZmbTa1WE8uMgpwbkLmWzhIqfP8OhwOjo6OYnp5GoVDA4OAgEomECFXOlXK5jNXVVczPz781fy7vg/fKjQMAXC6XuBV5r510bnZcZ5Q3LpcLx8fHslEkk0n82Z/9mXzm//dCl3D37unpgd/vlwkRDAYl3YaLAmjXjsydlYEZr9eLvr4+CSQxgECt6G0JXZpajx49QiKRECHr9XrRaDTg8/lw/fp1+P1+ZLNZeL1eXLp0CYFAAI1GQyZLZ1J+t0VvRssZROLv8989Ho/4GGu1GorFIjY2NrC3twfgVfoS0+aCwSBsNhsGBwflM9SK6I8LBAIIBAKyedHsTafTSKVS2N7exu7uLo6OjiSdzRSEpg+987m6Be3MBWUG2/j+zaDWWYUPJmZOMTdDChzeA++301XVOf7mPZr3ycVM90ChUMDx8TGKxSIqlQqAk3SviYkJxONxeVcc02KxiEKhgGq12pZaR9fP1tYW1tbWJLjs8Xjg9XrFvUXBCqAtSGcGmwG0WQzm5mY+VzcXg6mRB4NB3Lt3D9FoFOVyGZFIBOPj4+Izp380lUrh/v37ePz48WvpfL8LvA+udaan1Wo1ZDIZACdBMVPw0nox0ww5HowR8Huq1SrK5bLIJeZgW4FlQvf4+Bg7OzsIh8MIhULwer1otVptwSgKBZqVZnCDUPj09/fjypUrSCQSsNvtODw8FLPrbWYu0Im/uLgoGQl37tzB0NCQLIqJiQkMDw+jXq+Lb4vPRw2rcxMxMzHMyCtNqEAggHA4LBkZvb29iMfjCAQCUjyxu7uLQqGAYrEowsaMxNNUdbvdojFzMnLCtVotBAIB8Q1yER8cHGBzcxNbW1vY29tDLpcTrYrPYC5m01fYKdD4O918qaZAo9/UfP8m3SwgUyh3Buj4d1OLNzd1c46Y2pH5M/MZTAHFeWneq91ux9bWFra2tjA8PCyWR7PZFF98oVCAzWaD3++XlL9W6yS7YmdnB+l0WiLzFJzMzGB2RiAQQCwWk+KHQqEgKZOtVkssLjNOYI6NOe9Om5s+nw9XrlzB2NgYWq2WXJuWVqFQwPb2Nh4+fIjf/va3WFxcFO3/bWAqGv39/RgeHkYkEkGz2UQqlcLS0lJb5o95/9xsTDeT2+1GMBiEz+eTIopyuYx8Po+dnZ1vJbf/NCxxLwCvHNh7e3viC+NLjEajiEQi4q+kWV0ul9u+w8waGBsbw927dzE+Pg4A2NzchN1ul2j726RcLkseZSgUQjAYhMfjQX9/f9viMZ+ZG4aZDkYhbC5SarX0U9GHFgwGEYvFxJ87Pj6OS5cuIRwOSw4ttftSqSQmKxeN6U+uVqsSdOnt7QVwIqxYUcbAmtvtFj+ow+GQxd5N+6P2aC7aTm23m8DtFLzUdM1N5zTNlr5FLipqxd0Ced02ANMX2OnGMk3wzs+ZWq4pmMxrEafT2ZaSRa24VCrh6OhI3BFutxuBQAAAJMWLLhXmI9OML5fLYuWEQiH09vbiypUrkgvMFMJkMolyuYyBgQHJETZT4PidnCemRty5qVBQdW40dDVlMhksLS3hyy+/xLNnz7C3t/fWBZfdbkcwGJT86JGREQDA2toajo+PJQBpvgM+h8fjQTgcRjgcFl+5mYLG2MTR0RGy2axsFm/TLXkalmm6nKRHR0dSM06fLB3/wWAQlUoFq6urWFhY6PoSqUkODQ3h8uXLshM7HA4cHBxgbW3tG5Xgnnfv5XIZe3t7mJ+fRzweR29vL7xerwjczoAYADHFmT9ZqVQkD5Nafl9fH0KhkExwPh93d7/fj0gkgunpaXFbMJCTTqexvb0tC8oUuITlodeuXcP4+LgIXZbrHh0dSeSdpiy1beBkEvb09ODFixeS8kctl9oPBTWFoOlHo1nPPFszKMbPm75qAGIqdxZBOJ3ONldItVpFPp8XH3W3oglaHeb3A5C/8zlcLpeMCa/N5zB9zXynfA4GHQcGBnD16lV897vfxd27d9tKnfns9LEHg0H09fWJ0HU4HLh+/ToePHiAjY0Nmffme+T7dTqdGBgYwPT0NK5du4ZQKIRCoSBlyZlMBpFIBNFoVFIcuckcHx8jn8/j8PAQpVJJFBgGA7np8k+3TIVqtYpisYjNzU08f/4cCwsLbfPibcH5w4Auc8T576urq3jx4kVX/6vdbkdvby9mZmZw6dIlyVJgUQQ3P9MN9zbv/TwsrUgDXvmlOHHdbjdCoRCuXLmC8fFx2Gw2xONx2Y3oPzK/h4LFDESZmsW30XiDJtXGxgYePXqEcDiMYDCIQCAgPrdOs5faGzV4avqHh4dotVqIRqNiLlKbcrvdiEQiGB0dRS6Xw/7+PkKhEGKxGPr6+iR3NR6Po7+/H4FAANls9rWAHbWYwcFBfPjhh7h7965UYlGQulwuSWvz+/3y3VyM4XAYAwMDGB4exq9//Wt8+eWX2N7eRrFYlHtlbwwWMXDsKcharZPKpkwmIz4/BmpcLheCwaBoI0x7MsvDAYjmEgqFEI/HxV9aLpexu7uLdDqNfD4vOcC8vtfrRSAQkHQ7Zl8wTYj30dPTg1AohEgkIoKSGwS/y2Y7KT9nbT/fMSv1PvjgA/zwhz/EjRs35P7o0mBgj+NBQUeh6HK58P7772NpaQnr6+uSg2u6Qvg+A4EAotEo4vE4otGofE+xWESxWEQgEMDAwABGR0fR19fX1guDbo6trS0cHBzAZrOhr68PAwMDiEQibVk4nRo+11ylUsHOzg6ePn2Kx48fY2NjQza9twnnEjc/U7HhRtIZQ+C893g8GB8fx3e/+13MzMyg2WxifX0d5XJZApH0w3ezwL5tLBe6FLg0b1iqSJ8lfaFra2tIJpOSxG76pI6OjrC0tCTmhtPpFP8jo/bnRbu/CSxcWF1dxcDAAMbGxjA6Ogqg3ZQ201w4eelHbTQaKBaLaDQaCIfDYsaZLobe3l6MjY2hWq3KeDB1jVoTMxqYSsbiBI4Vd/tbt27hww8/xNDQUFu6G4Nm1FKZwWAGvqiJMmK8sbGBdDotE97j8SAQCGBkZAQDAwNyj/QBOhwOlEolbG9viw+ZQS5uNvF4HENDQ/D7/VLavbu7K4LXZrPB6/ViYGAAly5dwuTkpPjTK5UKtre3sby8jLW1NXFdtVot2cy5OXk8HhSLRaRSKbRaLYm0U5P1er0YHBzE0NCQBEnpo2cmyt7eHjY2NsSHDpxs9vF4HB988AHu3bsnG1s3HzHnhJmqZ1puH374IRYWFqSHR6dFQcuK1YnMD2bcgBkUY2NjGBsbk83GdDP09PSgVqtJPw02EGLDIpfL1ZbxYPregRMrZGtrC8+fP8fLly+l9PttQ+vo8PAQW1tbGBoakiyUZ8+eYXl5Gfl8/jV3lt1+0iPi8uXLmJmZwfj4OMrlshSd0IXDtMt3geVC1zR/WRnEEk1OHprUzHU0Axv0KbE0MZPJIBwOI51OI5lM4vDw8Ftr79hqnVSMZTIZpNNplEqltsg7Ba8ZqODPgRPfcE9Pj2gdLD+keW1+pr+/X/yyBwcHbQ1RMpkMXr58ib29PdRqNTGNKWypXcXjcVy9ehWJROK1kmQzjcY0oTs3D2Y3UPDSJOMC8Hg8mJiYwJUrVySyzYohumT29vbaTHZ+N11LzAahn40bEP2Nvb29mJqawr179zA7O4uBgQERHru7u+jv75dUJgoXCnYGahmUpB/cLD/n+3A4HAiHw9JfgkGsnp4elEolLC8vY29vT/zIzFGlz5Vxim5WBy0ICt9Os9jlcknq4eLiogSV+Z54H3zmly9fwm63IxKJADhRZkKhEKLRKMbHx2WjMYWmx+MRwUqBzmwiWjpm7rs5n825TAuDpd/f1lqj5ZNMJuH3+6Xh0dzcHJaXl9s2Pz4j5Udvb6/ID2aa5PN5eV+0ZMzN0Sosb+1I/yMA8TFtb29jaWkJfr8fsVhMKmtMjdGkVqshl8vhxYsXqFQqGBgYQKVSweHh4WsRzbP4JlkOZrCLk7XbQjMj3hTC3LnT6bQIiW5VYdR+otGoaI77+/tIJpPy32Qy2VYRRgFpphSxnpwVZeZ4mlqUGUjqFAaNRgOZTAYLCwtYW1trazLSbDYRCAQwPj6OqakpMfnZapFBzYODA7lPM73HHFN+LpPJyOIwNTOfz4fh4WGMjY2hr69PTGav14ujoyM8e/asLW+VY3J4eCgmON8brSbeCxclE+XZUS4SiYjvnjnD8/Pz4rum1bW2toaFhQW8//770obUnAd0DdAs7nx+anXHx8eidZtdxji/qtUqDg4OpH/JxsYGxsfHMTAwgHA4LHEAdinr9MdyI2LaVb1eRzgcFl9pt3lgzmGn0ymuEd73NzHLL7rumHvNXhPpdBp7e3vSd6KbS4NriRs+N6nl5WWkUqk219W3YQ1fhHfSxJwTnpHEnZ0dPH/+HM1mU1oZ7u7uinnXDSaob25uygJ7E4HLCdapgZ2H6eCPRCJtte3m75ia/fHxMba3t/H111/jk08+wdraGoLBIHp7e3Hjxo1T749VTsViUSrUnjx5gtXVVWSzWYncmkEPug1YtplOp7G2tiZpYQwqmQusm7DluBwdHWFubg5ffPEFdnd3RZNkVsXo6CguX76MwcFBWaCHh4fIZDLY3NxEMpmU1o9mI2wK2kwmIwL04OCgzbVA4cZeBh6PR/zo/Az7HVQqlbaeB9T4+XzlchkOh0Mq68xUKmYX7O3tyfjQ380SbGrKIyMjmJ+fRy6Xk7m2u7uLL774Ajdv3hRBbWqznDPcqPiHmSzlclkEy+7urriOTLOZlWy1Wk062q2uruLSpUu4desWbt++/Vr70W6USiWsra3hyZMnElyilj86Otrmx+2c08yZ7e3tlVz709bnWWuHz3MRgW1qvM1mU/z3p1W92Ww2EbRLS0twu91IpVIS8DODrlZqtybvRNMFXi1qCk+2j6OvieYfJ0G3F8TFksvl4Pf7RXO7yE5q5oa+iWZMU5GL86xJR8GyvLyMX/ziF/jlL3+JpaUlacvndrtx48aNrm38eC1GlUulEhYXF/H8+XNxN9BUZa6t1+ttEza1Wg2pVApzc3Ow2WyYnJzE4OCg5Bt367tg3nutVsPW1hY+//xzrKysiA+M2tilS5dw8+ZNjIyMwOfzSZOcjY0NLC4uYnV1VYoqOvMpqV0yL5UBNy4KUyjSv8qxN10hZlMUsxqRQo3ClPnODIR1uqC4wZjZIHQ30FQdHR3FrVu3sLy8LEFBZgWsrKzg888/x+XLl6UDV6fgMwNUZvrVzs4OVlZW8OTJE2xtbaFWq7W1D+U8MtPJSqUSCoWCZAFNT0+3VRZ2e6e1Wg1ra2v4/PPPpfn+y5cvsbm5ib29Pfz4xz/G5OSkCNTTMN0une6/8zB//zyhy7ECXmVNdFZCdn4375tB70bjpMUptVzztBfA2gAaeacHU5oLiu0M6VtiZJyO+m47E7VIM5rMgb/oLtotAnoW3K0ZVKMG1u276/W6NND+p3/6J7x8+VIETLFYxJMnT/Do0SNcv34dsVisLe3MzDMtl8tIJpNYXl7G7u6uaIGcvIzsj46OSkCKQSu6Bjg27FjWTSh0UiqV8OLFCzx9+hRHR0fy7B6PB5cvX8b3v/993Lx5E6FQCM3myQkQ8/PzePDgAdbW1pDJZESIcoz5X/p8KVAYrAIg49BoNKTnaSAQeK0LFL/L4XAgEAjA5/NJvrIZ7TZ9eKze6pxPfF9M8C+VSuLiomsjFArhxo0b2NnZkYAqi3Hy+Tzm5ubw/vvvS6/Z0+aP6XJiRdSDBw+wvLyMbDYrObz09xeLRWlraG4utGSY9XDnzp22eWMKXrqJHj58iLm5OTG9GbSja+6nP/0ppqamTrV+WK1I6/JNNF2ut/PmHTGtA1bzce53G1cqA0zBZK8Rdsl71xoueedCF3jlG2IAiPXmNCNbrZa0D+yE2QBmtZU5sc+7/pvudJwwTL05PDyUlK/OCUjN4v79+9KAxtT4KBBTqRR6e3tfKzSgab20tNSWw2laC81mE263G5cvX8aHH36I/v5+CT4kk0kx8+v1OoLBIC5duiSugLNoNE568j58+FCECwXZ4OAgbt26hRs3bkhRy+7uLh48eIBf//rXWFxcFPPbTCMzv5vPyOek9sS8WuBV8GdoaEiyL8yCE84bnrAxPj4urgZTk+H5a2YrTY6hmWViCmX6o1ke6nA4JG3v5s2bcspFOp2Wz62treHRo0eyEZ2lLXL8WeiysLCAnZ0dtFotKbmdmJhAOBzG/v4+7t+/L/7uTtfVxsYGHjx4gGvXriEWi7WdiMB5Uq1WsbW1hYWFBQk28700m03R1G/fvo3x8fHXzhDje2Q2AdPuLipACZWF8zAtMDMwe5pV2tPTg3A4jPHxcVy+fFniIbRozFjS/2ihC7wq4+QiYMMY83gat9uN+fl5ZLPZ10wL0zdMP9h5Qtf0Y76pM53fzT6qmUwGg4ODrx16CLzq+Wv2hDC/hxovK2vMgzbr9ZOjUp4/f46PP/4YT548kc2lk2AwiPfeew/f/e53EY1Gpa1ksVjE3t6e5CW63W5MTU1hdHRUBNtpFItFaWLOMkkzv5d9BRj0fPLkCT7++GM8ffpUBK7pw+N4dLoA+Ie/z54a0WgUgUBAjr9hkrtZgEHhSVdHrVaT5PdCoYCDgwMcHh6iWCy2BU/M/FfT/0vhxHukOUtXzo0bNySdzDwclN+7vb2Nzz77DNevX8fg4KBkFpxGuVzGy5cv8ejRIzkbLhQKYWBgADdv3sS1a9cQDoflyKQXL15Ijw1CLfDx48dIJBLo6+vDe++9h3A43Ba8Y3+HYrEoz27OU27wtMQ64dgcHh5if39f+hK/iaZLTBfYaUoP1xmDaWc1PqLAvXr1Ku7evYvLly/D5XJhf39fnrdTzrxL3rnQBV75+Ki1DA4OYmJiQqqp2EeWO15nsYRZwmf6zbiQTGiG0PzjZLoo9Csyz/KsXZNmL7MIzAAFq8CYS2kme1N7X1lZwX/913/hs88+k8Bit/thruzQ0JAEOdgvotk8KfelDzKRSODy5cvS+KPbRtFsNpFMJvHxxx/jxYsX0qMBgKQLPX/+XPq9ZjIZPHjwAHNzczg4OJD77FxcpulLTAFIYer3+zExMYHR0VH09vZKKpTP5xMhYv7X5/MhkUhIA3FG9iuVinSSMsthzWc1n5n3Y/Z9qNVqmJubAwCp9uJhm3t7e6hUKvK89XodCwsL+NWvfoUbN26celwP5/v6+jo+/fRTKaN1OBySLjk6OionNPDYJrOfggm7zH322WdyPhsPjeQcZYoi/dPcwPl+zGq/s5p5M45gnsb9JnDtkG7pnVy/5pwwN1sTM6D74Ycf4jvf+Y6c3sHKNcaO3rWGSywXup2ThgPKwAqDCKy+CofDqNfr2NnZQSaTaasdN+EOyJfFydCtlJSNasxrX+SFUENmVkEsFmvTKEx4DywgoNnL+/L5fIjH45iYmJDKNI5HvV5HJpPB8+fP8eDBA+zs7JzaU9Z8Vi4eFhMMDQ0hEAhge3tbMkIePHiA2dlZDA0Nob+//7UINDehZDIpbgLz2o1GA4eHh3j+/DlyuRzi8TgqlQrW19fFEuGYm999lu+cgrher4vvlZV5DPwFg0ERQGYgjfmxLHtlRRnNfrP0+Kzrcz5ROJumKI/TKZVK8Hg8SKfTcsqDOXfo211cXEQymZTgVuf4cgy//vprPHjwQPz0fr8fwWAQQ0NDiMVibSd8mCmI3e6/Xq9LhszExAT6+/vb0sZ6enqkA9rg4GCbq4spivQhd7sOFYXe3l7EYjEpqjgr0N2JzfYqL5hWEDetznVqukZM14AJs3X6+vpw48YN3L17F5OTk/B6vRKgZACObrluQttq7ddyodtt16emQFObpgt30/Hxcdy8eRPJZFJ8Wpzs5mLqJnhNzZfJ8nS003x80/unOROLxeTctNOei6auqfEx33FoaKitcoguB0bSU6mUZCp0c5nwuWj2FQoFqXKLRqO4cuUKJicnJWjSaDSQTqexuLiIvb09Kf3s9oxm85vOgFO1WhUBm81mYbPZpO1jZ2SYfzddOp3PQOHMe+E7ZV8G5kN7PJ629Di+C/4ON1Dzvvm9zEboDKRwDDsXuTmnWMG1vr4uQpiBys53zvs+68j7RqOB/f19LC4uShqe0+lEKBTC5OQkpqenJa7BucDjgE4bQ5vNJvOApz0MDAy0zdne3l6Mjo5iaGhINmJmhZiusG4CjkKXJemcZ2/qXqBmyoAvGzbR0u10D1LgmuucP+d6npiYwM2bNzE2NiZl7fTNm0G0borLN3GP/K5YJnQ5qbvlxlJAMWc3lUphcnJSFlkgEMDU1BRu3LiBTCYjk/+0qDivx0wGsw6fHcIYhX2Tihoz39KsJutmYrVaJ+36eOQJd1reE0tgWTnUmUrDs6CYLcDnMp+Zk69YLEqxxMDAAPx+P8LhMGZmZqQhDFOEmL97mnZP7XF6ehoffPCB5Dd2/i6DR7lcTprSnxZVNoWk6cvlO+J4sjNUJBKR92T2FKYApKCkkDXnEl1HwWAQkUgE2WxW/LbczDuvzzS00zQqltya53R1c/XYbCctOD/44ANMT0+feiI0N656vS6Cw+fz4datW/jBD34gDfEpPNLptGQvdGqhpruMKYMstDBdN7S6YrGYaNFs98mAHI95unv3bteTpvkdtDjOSjnsBpUlZqXQgqFiwmAn32c3gWs+s9frxcjICG7cuIGpqSlpIMTMou3tbezs7IjQ7bbZOxwO2cyswjKhy8Xj8XikablJq9WSnrvz8/NIJBIyiYGT5tDXr1+XHrLcGTtdFaZA4oIKBoOIRqPSivH4+FiO/H6TRh2mtsadtluCOAXE9vY25ufnxc9Jbdfj8SAajWJoaEj8frx3ChYm/ff396NSqaBQKMjE7OzoxGbSqVQKV65ckTzceDyOu3fvShHF+vq6+JFPEwh8tkQigY8++ghffvnlmQdPchGZR6+b48VNg5Obm2U3TTUcDmN4eFj6K3i9XrEWmL/NP6ZVYPpgG42GdKaiheFyuaTE2DxhgYuXm7tZ+GFmiJh+/845Z46by+XCzMwMPvroI+kV0A3+Lk11v9+P8fFx/OhHP8Ldu3flEFSWVLNHL1udci1xLlGhCAQC0mPXbDbPsbLb7eK+GBgYQCaTkWeu1+uS8re9vY2BgYGuRT9mUxzey5sILFoNfPZYLCa9hhkwNIOr3caa67qvrw8zMzO4fv06+vr6AJxYy9lsFsvLy5ifnxcXQzcFg+NH5cYqvnWhy5fDxXeW8515pXNzc/B4PCgUCtKO0OFwYHBwENPT022NbbphajIul0sWcywWAwDs7OxIHuZFhS5ftJnWxA5Opz0LK7NMUzkUCmF8fBy3b9/GzMyMHCLIHZ4aVaVSkWPP+/v7pYhkZ2cH29vbbY1G2NScz2WOdzwex507d1Cv16Xqr6+vTwT9afT09GBqagqzs7N4/PixLMzOcabm2blAuECZZ+t0OlEoFNo0Xv6Oeb7YpUuXMDY2hnA4jFarJRkIzBRhribdBcxppY+dVYJsGsTADwsSzLaMphBhw3H+vNNNYm4s3QQBqxRnZ2cxNTX1Wq8LE95TNBrF5cuX4XA4cO3aNdy5c0f6PthsNjkZZGdnB3t7e/K+zXmdSCTaCl6Y514ul1EoFCRwxfsOBoOYnZ1FLpeDw+EQlx2VIObsUgvv9pwU9GYP5s5ugKfBCjy2luzr65NuaGzoRKXirO/r6elBIpHA9PQ0BgcHYbfbpYybqXtzc3OSHtcNrmnTorLC3WBpP10zgt2NVuukEMD0nc3OzmJyclKKB/r7+6W2nEUR3eCitNtfNdAJhULS8LszZ/YszIANa9wZTDitKo2LmilAzWYTsVgM165dw3vvvSfPxPPLzCPOeVKDy+WSRHtWpS0vL+Phw4cyyanlsXdAtwBJPB7H9evX4Xa7kc/nEQ6HJSBJbb0bLIXlWHdLwzNzbk0rwwxashkPx8WcB1xYZhct+ogPDg6ws7ODtbU1rK+vI51Oy0GO5qbq9/sRj8cxNjYmgSJq8vxOs+eveW1en9V/7NhGDdC0QE6bt7QO3G43wuHwazmuJnRVVKtVhMNhTE9PIxwOY2pqCrFYrM0XbDYM57lgACQmMDw8jDt37mBqago+n0/cCj09PXLcUrPZlAq5ZvOkV8a1a9fQ39+P2dlZzM3NtWVP0Cd6VgFCOByW1pJsekOBeRFXHXNueYioz+cTJeWiVaLsTcJgcDablUZA8/PzePHiBTY3N9tytjsxY0JWZjZYdnIEJ9t5kWT6djc2NiTyWC6Xxc9FH9h5Jo05mGYwhUelv0n7R+6Gvb290lD50qVLcszQadenk99ut6O/vx83b96UHE6mrPEZmYyfyWRweHgobesotMPhsJhBOzs7otVygdJfxu5Ups+STWnoP+NnmNvcWTpKgcT7MsfJ3GBME9z8OQUuWxjSPO98/7wOFyzLcNnJP5fLSb/cg4ODNp8fYck4m3Nvb2+3ZZXwJBL6YTs3fmY48KBUBm/NAgw+I031bmPB32VONMe/c0xZJWWz2TA6OoqRkZG2puac1+a4mOax6Z8dGhrCzMyMaNb5fF7ysjc2NpDL5doa94RCobYMCea1Pnv2DE+ePMH+/r6cg3ba+nQ6nYhEIpiYmMD6+roEUOlDvkj6JZUrusyYBUFhfxEhSGHNDnD5fF5OS15dXW3rs3DaPdDVZcoCK4SvZZouH+oi6VmsINrf34fNZpNGJzRjzXaJZ8GFwslAfw8nykUG2JzkTNQ3cyi7BRK4YABIg+irV6/i+vXr6O/vF62LEVWmYK2srIhwsdlsiEQiouUy37dQKIiGzJ6w1CjNkwLMoJ3P5xM/MjVcam5m0xwzgs8Uvs72eZ3j2zlWfDcUYADk1AwzsAO88pHzdw4ODqSwgovSPIrI1D4J5xUXWC6Xw+bmpvSiYF8Gmpi8Jjdjvi+OA3CiRXUWUHQGbLvBcnazTal5DfpoW62WNA83j2syFQnzHdJaYLCPB7rGYjHE43FEIhHYbK9OqODG1Wq14PV60d/fj8nJSczOzso5YcxEiEQi6O/vR39/PxYWFtrmpjlGHAub7aS73vDwMEZGRqQBDUviu1lDndDNQ0WDDezNYpnz4Nw2M31WVlawtraG3d1d6Qp3FpznvCersLyf7mlVJZ2/y0oUmpn7+/sIBoNt5YsXvSZh5Jkv5CJC1+zrSmFCAWgGdDoXVyaTwc7ODsrlspzAEAqFZIExsMGmMl999RWeP38u3ZQ8Ho8EM3i2GaP7zHpgBZHX65XGLKbW2pk5QLgpUPNjN7fOZkGMMNO10W1BmSk+5lEvzKelZspFbJ7Bxv6uHEv6+mh6dmYmmEK627um0OHmSt8jN52BgQH4fD4R5KZ2w7lhZrsw+Mc/puVkwo2ZWRPU7juzcyiIWYDQGYQyI/b8Tvpue3t7pRG31+uV0yM4pyqVipR/Ly0tSeGG3X7SzD6TySAUCmF4eLgtIAxArClqx+l0Wnocd2vITi2TfZbNNcLnPAsKO77n03LQz8PMJNnf35dqxNN6tXTSmY9tFZbn6V7EdDCj0jQ7c7mcJOpfNABmBmrMhs4XbQHJiU+Ba/rjTH8fhRHvO5/PY3l5GU+fPsXu7i7Gx8dFsHUuWHbiX1lZwerqqjSBcTqdyOVyovHSj+33+zE0NISRkREZEzb56EzzMXNQzcXNRWJG/s1n4bhFo1FMTk5iYGAAhUJBrIZu75C9Wink6ENk+S2fn6cURKNRJBIJRKNRtFon/YJTqZScMNH5jhj0YMN2LnAKWjOQw+vx86FQSIpBbDYbDg4OJBhLDdmcT+zWxUwb0w3C+cnxNbNkYrEYJicnpd+v6Vpg8Izpad2yXsyqOHNcea4ae5GEw2GpQPT7/Wi1Tk7CWF9fx+LiojTOYSZGJpOB2+3G7Oxsm0ZvPgMVhWQyiVKpJNdjKXPns1C5oH+dc+qimQwMTHK8mfZ20c/TDZnP5+FwOOQYJrPc+yJyxkphS34vyoC7wQHhjsjzwpgAflpeqAkXeV9fHwYHB9FsnvTjBC5mTjBHOBwOizZmnrPFU3Z5rUbjpOXe5uYm5ubmsLCwIJpot/4L1IB4aCF9Y2Y/gM3NTWxsbEgRBdPIEomEVF1RY2bHqFgsJq0neW/dxoYCulvBgMPhQDAYxJUrV3Dp0iWk0+m2BPbOdwW8SsHhmWnUJs2jhHp6esS/fevWLcTjcRSLRTx//hzFYlH6yZqBV2pXLpcL8Xgcg4OD8Hq90nAmnU63adMUJCwT7u3txezsLGZnZ+H3+7Gzs4MnT57g8ePHbX5mbnaMzHND6jxx1nxujhX991NTU9LsxrQMKJzNlLdu78ScF2zszso3lury/bPqjC6q9fV1bG5uSj8MUxgyyNb5rnktttnc2tpCJpOR63CTNPPrefoGezpzrnBzLxQK5/p2uf54eggAHB4eXkjwcjPngQBMCaR19K6E6UX5vRa6NLVoOtEEpfA9b2Dt9pO2fLFYDIlEAo1GA5ubm2fWlhOn8+Ro+KmpKfT19YkfCoAc3WwWPHDyHh0dSfPuw8PD14IDndFSljHykEEz35XPzjLGVqsl6U00+1utlgif+fl56b1AH+1Z/m8Kgm4J6ByD/v5+DA4OwufziQ+5G9SCaT7TjKdGRAHIwpCRkRFMTU0hkUjI721tbWF9ff01PyJNYR57PzExgVAoJEE+LrjOkk5+ZnBwEDMzM5iZmRGt8eDgQI484vUYpGV/AlZonRdNt9lsUmHIaLqJaUV0uno6oTXFefTs2TPMz89jd3dXypC5sbGnB/vsMg/ZzAlnGlk0GkVfX99rVYadQU0W5ayvr2Nra0tyhk33Ga1PNpNhRo/dfnJSx/LysvS8OIuenh4p9XY4To6lYqbFWTAwu7+/j83NTXi9XtkATGvs9xXLhK4ZPOlWjtkN04xhNJ877Hk+WdO1EA6HJe+TPR3O67nr8Xhw9epV/MEf/AFCoZCc5NtoNCSth/dnRkKLxaKU5DLowPxRlk2aYxEMBuX8r0ajgWQyKaahy+XCwMCAnPprmm9cICyY4CbAxdZqtTAxMSE+3fOamNB/SmHNxc/Az3n5i2Z0n+Z8tVqVLA023KGWR38lA0mDg4NIJBLiuzRNeTOf0ufzSRoYj/ExixvMd88CBOayssrLbL7N77bbT3oNJxIJDA0NweVySUXTReYqx5xBP56ObG46Z6WSAa9Mbpr5X331FT799FMsLCxIvjeDcWaqG+MMTGXk9zgcJwdPjo+P4969e1I4Y/r8OR4sVmDlGwsWisVim+ZuBrqY0dPf3y8BY1YofvXVV2emdNI6YHaFzWaTU6E7rYRuc40l6Nvb25KVc5ol1g0z3sH/t4p3UpFmt9vbOj+dNkh8wYykU+vrVtHW7Xr8Q7OdPkcKsLOimzSVI5EI4vE4wuEwfD4fGo0GRkZGJKG7M+KfzWaRSqXkDCqm55jnVvEFs6vU5OQkenp6MDQ0hJcvX0o6GP9tenpaAhsMHtDs5GGR3P1brVZbRNw8afgsk5YBSvobq9Uq0uk0Xrx4IYKHQuqszYpd4q5fvw6Xy4W9vT0sLy9jc3NT2kvGYjE5S4zjFwwGkUgkMDw8LAKai4iBG6Y8UUhSiwuFQtKSkO4W9segEKU/lCY3o/9scO73+0X7jsVisoElk8kz5xnfJxvOvHjxQoQfz2XjuJ5WBcj5w5TGzc1NPHnyBF988QXm5+eRTqel/0ar1ZIz6Fgc5PV6kUgkcOfOHfj9fmxvb8uGNDg4KP0cxsbG2gLA5ubHCkkeHJDJZGQeM8vCzOSJRqMYGRkR4cXycwYUz9NWGaT1eDwyd1kpaK7b06Arj0VSzFA5rYqNmBk2fCc8yskqLKtI42KLRqPiv2QmAf+/E05Elj/abDYxf05rysHBZPVYsVjE0tISjo+P4fV6sb+/LxPjrMTpQqGAR48e4fj4GDdu3JCgDxtMj4yMiHnHe83n83j06BF++9vfYmVlBa1WSxpvd9aqcwG5XC5EIhFZOPfu3ROt1WazSXMQpjExl5dd1zpTY7LZrPiBJycnxaw/bbFT03G73WJRsLnLw4cP8fnnn2NxcfHc45Mo4CORCK5cuYK7d+9Kg/PDw0Mp3waA3t5eSa6nhup2uzEwMICJiQmUSiXJmKCGGA6HMTg4KKXc9KWzTNput0uVHt1KQ0NDuHTpkhQdmAGve/fuSTASOOnjzCblDodDFvPi4qL4szvNZTNAWSqVsLCwgFarhb29PWkGztQ1bn5nvQdqkvl8HhsbG9ja2morPgAg58rt7Ozg8PAQIyMjshmx4IHzmtkUoVAIgUCgrSKU90F/Oecpj5lnChrjIWyrSffWyMgIGo0GAoGAVII9f/4cc3NzeP78+ZlaLueczWaTAo5isYi1tTWUy2WZ60z366aY0fWWy+Vkg2ST825r2nxO+uw57xmc5e9921im6bLHJ0txgZOO8Ht7e+K87wyOUXMBIP/tLEflYLL5OaPhmUxGAl5Pnz7FysqKZDCUSqVzd9NmsymCbXV1Fffu3cMf/uEf4vLlyxgbG5PCCLNvwsrKCv7lX/4F9+/fl1zbWq2GpaUl/OhHPzq1lt3U2uLxeFcfMIMd1WpVmgJ15hublkGr1bpQf1TgRGCyqfnR0RHm5+fx85//HPfv3xctyyy24DPzPukyCofDmJycxM2bN6WYhdfuDI7x8ywWYMDz8uXLAE4EM32GtDgGBgYQjUals1u9XkcoFJKOb2wGDwB+v196BzPfmSXJ0WgUY2NjbdqeKUDr9Tqy2SwKhQKeP3+O7e1tOU2ZmxjfJTUkFvHs7+9jZWUFL1++xB//8R/j/fffb8sZPgvOY2YkMIPDNJnZuyCVSsm7YR43U/7MP6YbpZs/mb/HDYaaNTcPh8Mh65aCktVgfO9ff/01vvrqK3z11VdIpVLnBtG49vL5PJ48eSJuGQpNbph0OxwcHGBjY0M6oHEsGGzk9U6znKnNRyIRjIyMSJMpsru7KyccW4FlQtfj8WBkZATDw8MIh8NS7LCzs4MvvvgCDx8+fC2dBXgVWDiNVquFWCyGn/70p/ijP/ojRKNR5PN5/OY3v8G///u/Y21tTb6XWjDN5/OSp4GTlK61tTUAwN27d9Hf3y+VcaY/qFqt4rPPPsMnn3yCbDYrn19fX8cnn3yCn/zkJ5iYmOh6jU7/kvlsHANmcVAL3draQj6fF4HYqT0zeHiRwATHhv7StbU1/Pa3v8Xa2lrbBkfNgCYhN0BquQMDA5LtQEF3WuCIQVIGI1nOOzQ0BKfTiXg8LlorXUKhUEhMUsYFmMvNAycZtad2TLOXKWDsbdxtvDnmfLeXLl3C9PQ0lpaW2qoYzZQvpq11Blnr9TpmZmbw/e9//0IVlMCJcOBmQfeE6RfmBpfP55FKpZBMJlEoFNrcSKf5KM/S4Gw2GzY2NvDpp59ifX1dFJ9KpYJPPvkE3/ve93Dv3j1RWvjs4XBYSoG/+uorWSfnwZ4SdAeY6X0ejweXLl3CT37yE/zgBz9AMBjE/v4+/vM//xP//M//jO3tbXlP3JjOg3nvMzMz+M53voN4PI5WqyWpqKamawWWuRcYFBocHJTgEE8eyOfzWFtba6vdNlNtzsLpdOL27dv4i7/4C7z//vuyawPAl19+iY2NjTYNgy/LjOKe5mIwr83IMBdw5yKq1WpyWoG5i7ZaLekAdt7znLVQzM2ChyfyPszUIL/fj76+PoyMjCAajb6Rr4pmOX3o1EiI2VCFfnnm3/L0htHRUUQikTNPpeW1uEmw4orHezOtjMKTRQ6mWcjnNt1UTLY3+zH7/X4x783KrrPMfH62r69Pqg/Z95UZJKwOY7vFznGmVXJRgUuYHz08PCylwfQJ09qghcZN18yRfZNr8XnNOdrpAmEvFDY2Mt8f5wNjLZ3z/rTr0b1grj2On8Nxchbd//pf/ws//OEPZeMZHBzE2traa2Xp3eiUHTbbSa77zMwM3n//fUQiETlVhI2EGOS0wr1gOyfS99byLqjVmGYOXzgrfi5S/tcJX6B5/Dg1kNOqXcx8yDe5DhdutxfD1K1uOy+1tfOi1+dBN8NpPSw4ptR8zhIuZ12DnZ5OG7fTAnIUVm/a3LpbOl1nxoTplzb/vTP1yfz3TlP7LN/2afdlFgB0my+dSoJ5v+Yx6m8C37OZV9vtPTMQ9E3ecyfValWshE64IZ4279kw/E3XEz/f+e8sa2cGCH3dpivhTeHcNKsuaUU0m80zOwZ+Q059IZYJXUVRlP9BnCp0f2+KI37XZObTduG3yUW0iYu4Kt4G5z3b73q9bzp2VuY7WsW7Gotv+x1f9Hq/y7z/pnwb6/n3ZW6qpqsoivL2OVXCW3cwkKIoiqJCV1EUxUpU6CqKoliICl1FURQLUaGrKIpiISp0FUVRLESFrqIoioWo0FUURbEQFbqKoigWokJXURTFQlToKoqiWIgKXUVRFAtRoasoimIhKnQVRVEsRIWuoiiKhajQVRRFsRAVuoqiKBaiQldRFMVCVOgqiqJYiApdRVEUC1GhqyiKYiEqdBVFUSxEha6iKIqFqNBVFEWxEBW6iqIoFqJCV1EUxUJU6CqKoliICl1FURQLUaGrKIpiISp0FUVRLESFrqIoioWo0FUURbEQFbqKoigWokJXURTFQlToKoqiWIgKXUVRFAtRoasoimIhKnQVRVEsRIWuoiiKhajQVRRFsRAVuoqiKBaiQldRFMVCVOgqiqJYiApdRVEUC1GhqyiKYiEqdBVFUSxEha6iKIqFqNBVFEWxEBW6iqIoFqJCV1EUxUJU6CqKoliICl1FURQLUaGrKIpiISp0FUVRLESFrqIoioWo0FUURbEQFbqKoigWokJXURTFQlToKoqiWIgKXUVRFAtRoasoimIhKnQVRVEsRIWuoiiKhajQVRRFsRAVuoqiKBbiPOfnNkvuQlEU5X8IqukqiqJYiApdRVEUC1GhqyiKYiEqdBVFUSxEha6iKIqFqNBVFEWxkP8Pmthc52NdzVgAAAAASUVORK5CYII=\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 58; current eta: 0.5, current beta: 128\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 59; current eta: 0.5, current beta: 128\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 60; current eta: 0.5, current beta: 128\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 61; current eta: 0.5, current beta: 128\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 62; current eta: 0.5, current beta: 128\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 63; current eta: 0.5, current beta: 128\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 64; current eta: 0.5, current beta: 128\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"algorithm = nlopt.LD_MMA\n",
"n = Nx * Ny # number of parameters\n",
@@ -1779,24 +327,9 @@
},
{
"cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "scrolled": true
- },
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
"source": [
"lb = -np.min(evaluation_history, axis=1)\n",
"ub = -np.max(evaluation_history, axis=1)\n",
@@ -1822,22 +355,9 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"opt.update_design([mapping(x[1:], eta_i, cur_beta)])\n",
"plt.figure()\n",
@@ -1864,17 +384,9 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Starting forward run...\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"f0, dJ_du = opt([mapping(x[1:], eta_i, cur_beta // 2)], need_gradient=False)\n",
"frequencies = opt.frequencies"
@@ -1882,22 +394,9 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEGCAYAAACNaZVuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAAvbElEQVR4nO3deXhU9fXH8fdJSNgChDUsAkF2ZE0iImgLatUqKqKICtaqlLK4oBar1q2tuz+3IotWrbSAgIhoccGNpQIiSQgQVgVklT0JhCRkO78/ZqIxBjJJZubOcl7PM09m7szce77PwMnNd+79XFFVjDHGhJcIpwswxhjjf9b8jTEmDFnzN8aYMGTN3xhjwpA1f2OMCUM1nC7AE02aNNH4+Pgqv//EiRPUrVvXewUFgXAbc7iNF2zM4aI6Y05JSTmsqk3Ley4omn98fDzJyclVfv+SJUsYOHCg9woKAuE25nAbL9iYw0V1xiwiO0/1nE37GGNMGLLmb4wxYciavzHGhCFr/sYYE4as+RtjTBgKiqN9jAlEC9bs5blFW9iXmUvL2NpMvKQzQ/q0crosYzxizd+YKliwZi8PzF9PbkERAHszc3lg/noA+wVggoJPp31E5E0ROSgi6aWW/V1E1olImoh8KiItfVmDMb7w3KItPzb+ErkFRTy3aItDFRlTOb6e838LuLTMsudUtaeq9gYWAo/4uAZjvG5fZm6llhsTaHza/FV1GXC0zLJjpR7WBexqMiaoZOUUEF2j/P86LWNr+7kaY6pGfH0lLxGJBxaqavdSy54AfgdkAYNU9VA57xsNjAaIi4tLnD17dpVryM7OJiYmpsrvD0bhNmZ/jffAiWJeTM3jwAklUqCw1H+fCIFRPaLp3zLK53VA+H3GYGOurEGDBqWoalJ5zznS/Es99wBQS1UfPd06kpKS1LJ9KifcxuyP8a7afoQ/zkhBgFdvSmJfZu6PR/vUjo4kJ7+I125K5OKzmvu0jhLh9hmDjbmyROSUzd/po31mAh8Bp23+xjhtXsoeHpi/jtaN6vDmzWcT38SVslhyZE9eQRHDpq3k3nfWsrB5Pdo2Dq/kSRN8/H6Sl4h0LPXwKmCzv2swxlPFxcqzn2zmT++spW+7Rrw3dsCPjb+0WlGRTBmRQIQIY2akklfmSCBjAo2vD/V8G1gJdBaRPSJyG/C0iKSLyDrgYuAuX9ZgTFXl5hcxflYqU5Zs44a+bXjrlr40qHPq+fzWjerw4vBebPrhGI+8n37K1xkTCHw67aOqN5Sz+A1fbtMYbzh4LI9R/05m/d4sHrq8K7ed1w4RqfB9F3SJ4/ZBHXhl8XcktW3EdWe39kO1xlSe03P+xgScDfuyGDU9mazcAv55UxIXdYur1Pvv/k0n1uzO4OH30+nWsj7dWzXwUaXGVJ0FuxlTymcbDzBs2koA5o3pX+nGDxAZIbx8fR8a1olm3MxUsnILvF2mMdVmzd8YQFX557LtjP5PMh2axfD++AF0a1m/yutrElOTySP6sC8zl3vnrqW42M5lNIHFmr8JewVFxTz4XjpPfLSJ33ZvzpzR59Ksfq1qrzexbSMevKwrn286wKvLtnuhUmO8x+b8TVjLyilg7MwUVmw7wvhB7bn3N52JiKj4i11P3TIgnpRdGTy3aDO9W8dybvvGXlu3MdVhe/4mbH1/+ARXT13O6u+P8vywXky8pItXGz+AiPDMNT2Jb1KXO95ew8FjeV5dvzFVZc3fhKVV248wZMpyMk7kM3NUP65JPMNn24qpWYNpIxM5cbKQ22etoaCo2GfbMsZT1vxN2JmXsoeRb6yicd1oFowfQN92jXy+zU5x9XhqaA+++f6oZf6bgGBz/iZsFBcr//fpFqYs2caADo2ZcmPiac/Y9bYhfVqRvPMory3bTkKbhlza3T8BcMaUx5q/CQu5+UXcPSeNTzbs54a+bfjbVWcRFen/P3wfHtyN9XuymPjOWjo3r0e7cnKCjPEHm/YxIe/AsTyue3Ulizbu56HLu/Lk1d0dafwANWtEMnlEApGRwtgZKeTmWwCccYY1fxPSNuzLYsjk5Ww7lM0/b0pi1PlnepTR40tnNKzDi8N7s+XAcR5+Px1fX1PDmPJY8zchyxtRDb4yqHMz7hjUgXkpe5izerfT5ZgwZM3fhJzSUQ0dvRDV4Ct3XdSJ8zs24ZEPNpC+N8vpckyYseZvQoorqmH9j1ENs70U1eALkRHCS8N707huNGNmpJCVYwFwxn+s+ZuQkZVTwM1vfsPb3+x2ZerfkEDt6EinyzqtxjE1mTwigQPH8rhnbpoFwBm/seZvQsKBE8VcPeWnqIY/XeLdjB5fSmjTkL9c1pUvNh9k6tJtTpdjwoQd52+C3qrtR/jb17lER0Uxc1Q/v5yx6203948nZVcmz3+6hT5tYunfvonTJZkQZ3v+Jqi9k7ybkW+son60+C2qwRdEhKeH9qBdk7rc+fYa9mdZAJzxLWv+JigVFyvPfLKZifPW0bddIx7qV5u2jYP7bNm67gC4nPwibp+VagFwxqes+Zugk5tfxLiZqUxdso0bz2nDW7f0pW5UcMzvV6SjOwAueWcGz3y82elyTAizOX8TVA4cy2PU9GTS92Xx0OVdue28do6fsettV/VuRcrODF7/ageJbRvy2x4tnC7JhCBr/iZopO/NYtT0ZI7lFfDPm5IC6oxdb/vL5V1ZuyeLifPW0bl5Pc5sGuN0SSbE2LSPCQqfbTzAda+uJEICL6rBF2rWiGTKiASiIoVxM1MtAM54nTV/E9BUldeWbfsxqmFBgEY1+EKr2Nq8dH0fthw4zl8WrLcAOONV1vxNwCooKuaB+et58qPNAR/V4Cu/7tSUOy/oyPzUvbz9jQXAGe+xOX8TkLJyChg7M4UV245w+6AO3PObTkFzxq633XlhR9bszuSxDzbQvVV9ep4R63RJJgTYnr8JON8fPhG0UQ2+UBIA1yQmmrEzUsnMyXe6JBMCrPmbgPL19iMMmbKcjJx8Zo7qxzWJZzhdUkBoVDeaKSMTOXg8j7vnWACcqT5r/iZgvJO8m5veWEXjutFBHdXgK71bx/Lw4G4s3nKIKUu+c7ocE+R82vxF5E0ROSgi6aWWPScim0VknYi8JyKxvqzBBL7SUQ3ntGvM/HEDgj6qwVdu6teWK3u15IXPtrLxiB3+aarO13v+bwGXlln2GdBdVXsCW4EHfFyDCWA5+YU/i2r41y1n06B2lNNlBSwR4amhPTizaQxT1+ZZAJypMp82f1VdBhwts+xTVS10P/wasEndMHXgWB7DX/2aRRv38/DgbjwxpDtRkTYTWRFXAFwC+UUw3gLgTBU5/T/tVuBjh2swDkjfm8VVryxn26FsXv9dUkhm9PhSh2b1uLV7TVJ2ZvDURxYAZypPfH3WoIjEAwtVtXuZ5X8BkoChWk4RIjIaGA0QFxeXOHv27CrXkJ2dTUxMeGWjBPKY1xwsZOrak8RECRMSatKmfvUvtRjI4/WV7OxsFuyK4vNdhYzrXZO+zUP/tJ1w/ZyrOuZBgwalqGpSuU+qqk9vQDyQXmbZ74GVQB1P1pGYmKjVsXjx4mq9PxgF4piLi4v11aXfafz9C/XKSf/TA1m5Xlt3II7X1xYvXqwnC4p0yOSvtNvDH+t3B487XZLPhevnXFVAsp6ir/p92kdELgXuA65U1Rx/b984I7/wp6iGy7q3YM4fwy+qwReia0Qw+cYEakZFMnZGCjn5hRW/yRh8f6jn27j28DuLyB4RuQ14BagHfCYiaSIyzZc1GOdl5RRw85vfMHv1bu64oAOTbuhDrajqT/UYl5axtXn5+t58ezCbv7yXbgFwxiM+nSRU1RvKWfyGL7dpAsuOwye47a3V7MnI5YXrejE0wQ7u8oXzOzbl7os68cJnW0lo25Cb+rV1uiQT4EL/GyLjmK+3H2HMjBQEmDHqHDtj18duH9SB1F0Z/P2/G+nZqgG9Wsc6XZIJYE4f6mlC1FyLavC7iAjhxet607ReTcbNTCXjhAXAmVOz5m+8qrhYefrjzdxnUQ2OaFg3mikjEjh0/CR3z7UAOHNq1vyN1+TkFzJ2ZgrTllpUg5N6tY7l4Su6sWTLIV5ZbAFwpnw252+84sCxPEZNTyZ9XxYPD+7GrQPi7YxdB408pw0p3x/lxc+30qdNLOd3bOp0SSbA2J6/qbaSqIbtFtUQMESEJ4f2oGOzGO6anca+zFynSzIBxpq/qZZPN+xn2LSVRAjMG9ufC7vGOV2ScasTXYOpIxM5WVDE+Fmp5BdaAJz5iTV/UyWqymvLtvHHGSl0iothwfgBdG1R3+myTBntm8bw7LW9WLMrkyc/2uR0OSaA2Jy/qbT8wmIeXpDOnOTdXN6jBc9f18vO2A1gl/dsQfLOeP61/HsS2zbkil4tnS7JBABr/qZSMnPyGTsjlZXbj3DHBR24+6JOYX1x9WDxwG+7snZ3Jve/u46uLerToVl4JWOaX/Jo2kdE6opIhPt+JxG5UkTsGL4ws+PwCYZOWUHKzgxeuK4X917c2Rp/kIiuEcHkEQnUcgfAnThpAXDhztM5/2VALRFpBXwK3ITrEo0mTHy9/QhXT1lORk4+M/9wjmX0BKEWDWrzjxv6sO1QNg/MX28BcGHO0+Yv7vjlocAUVR0GnOW7skwgKRvVcHa8RTUEqwEdmnDPbzrxwdp9/OfrnU6XYxzkcfMXkXOBEcCH7mX2DV+IKy5Wnvp4E/fNW0e/My2qIVSMG9iBC7o04+8LN7JmV4bT5RiHeNr8JwAPAO+p6gYRORNY7LOqjONKohpeXbqdEee04c3fW1RDqIiIEF64rhdx9WsxfmYqRy0ALix51PxVdamqXglMcj/erqp3+rQy45gDx/K47tWVfLbxAI8M7sbjQ7oTFWmnhISS2DquALjD2flMmJNGkQXAhR1Pj/Y5V0Q2Apvdj3uJyBSfVmYcURLVsOPQCV6/OYlbLaohZPU8I5ZHr+zGsq2HmPTlt06XY/zM0925l4BLgCMAqroW+JWPajIOWVQmquGCLhbVEOpu7NuGoX1a8fIX37J06yGnyzF+5PHf8qq6u8yiIi/XYhyiqry6dBtjZqTQqXk9FtxuUQ3hQkR44uoedGpWjwmz17DXAuDChqfNf7eI9AdURKJE5E+ABYWEgPzCYu5/dz1PfbyZy7q3YM7ofjSrV8vpsowf1Y6OZOrIBAqKlPEzLQAuXHja/McA44FWwF6gt/uxCWKZOfnc/OY3zEnezR0XdGDSDX0soydMndk0hmev7Una7kye+HCj0+UYP/Ao20dVD+M6xt+EiB2HT3DbW6vZk5HLC9f1sjN2DZf1aMFt57Xjja92kBjfiCstAC6knbb5i8h9qvqsiEwCfnEsmB3uGZxWbjvCmBkpREYIM/9wjp2xa350/2+7/BQA17weHePqOV2S8ZGKpn1K5vWTgZRybibIzF3timpoEhPNgnEW1WB+LirSFQBXJzqSMTNSyLYAuJB12uavqv91381R1emlb0CO78sz3vJjVMO76zi3vSuqoU3jOk6XZQJQXP1a/OOGPuw4fIL7311nAXAhytMvfB/wcJkJQBbVYCqrf/sm3HtxZxau+4HpK753uhzjAxXN+f8WuAxoJSL/KPVUfcD+HgwC+7PyGPXv1Wzcd4xHBnfjlgHxdsau8cjYX7cndWcGT3y0iZ6tY0lo09DpkowXVbTnvw/XfH8eP5/r/wDXGb8mgKXvzeKqyV9ZVIOpElcAXG+aN3AFwB3JPul0ScaLKprzX+ue329fZs5/vqpaFmwASzlQyLBpK4kUsagGU2UN6kQxdUQiR05YAFyoOW3zF5G57rtrRGRdqdt6EVnnh/pMJZVENbyy5qRFNRiv6N6qAX+98iz+9+1hXv7CAuBCRUUned3l/jnY14WY6ssvLOahBeuZm7yHvs0j+ffofnbGrvGK689uTfL3GUz68lsS2sQysHMzp0sy1VTRtM8P7ruHgd2quhOoCfTC9X3AaYnImyJyUETSSy0bJiIbRKRYRJKqUbspJTMnn9+9uYq5yXu444IOjOlV0xq/8RoR4fEh3ekcV48Jc9LYk2FHegc7X1/A/S3g0jLL0nFdC3iZh9s2Fdh+KJurp6wgdWcmLw7vxb0XdybCvtg1XuYKgEukyB0Ad7LQgn2DmU8v4K6qy4CjZZZtUtUtla7UlGvltiNcPWUFWbkFzPzDOVzdxzJ6jO+0a1KX54b1ZO2eLB5faMG+wcyjYDd+fgH329zLfDqnICKjgdEAcXFxLFmypMrrys7Ortb7A9WyPQVM35BPXB1hQmItTny/jiXfu54L1TGfSriNF5wbcy3g0vgo/vP1Turk7Ofclp62keqzz9mLVLXCG66rdn0A/Nn9+EzgHx6+Nx5IL2f5EiDJk3UkJiZqdSxevLha7w80RUXF+uRHG7XtnxfqyNe/1syc/F+8JtTGXJFwG6+qs2MuKCzSYVNXaJeHPtYt+4/5bbv2OVcOkKyn6KueXsB9mapeqarPuB/bBdwdkpNfyJgZFtVgnFUjMoJXbuxD3Zo1LAAuSHl6AfdOIvKaiHwqIl+W3HxdnPm5/Vl5DJu2ks83HeDRK7rx+JDuREV6fCVOY7yqWf1aTLqhD98fPsGf51kAXLDxdLLuHWAa8DqVuHaviLwNDASaiMge4FFcXwBPApoCH4pImqpaVEQF0vdmcdv01WTnFfL6zUl2xq4JCOe2b8zES7rwzCebSVzekFvPa+d0ScZDnjb/QlWdWtmVq+oNp3jqvcquK5wt2rCfCbPTaFQ3mnlj+9sZuyagjPn1maTszODJjzbRq3UDEtvaNSKCgadzBv8VkXEi0kJEGpXcfFqZQVWZtnQbY2ak0Kl5Pd4bb43fBB4R4fnretEytjbjZ67hsAXABQVPm//NwERgBT8leyb7qijjimr487vrePrjzVzWowVzRvejWb1aTpdlTLka1I5iyogEjubkc9fsNRYAFwQ8PdqnXTm3M31dXLgqHdVw5wUdmHR9H4tqMAGve6sG/P2qs1j+3RFe+nyr0+WYCng05y8idYB7gDaqOlpEOgKdVXWhT6sLQ9sPZXPb9GT2ZuTy4vBedsauCSrDz27jDoD7joQ2DRnUxQLgApWn0z7/AvKB/u7He4HHfVJRGFux7fCPUQ2zLKrBBKm/D+lO1xb1mTAnjd1HLQAuUHna/Nur6rNAAYC6cn4sOcyL5q7eze/e+Iam9WqyYNwAkuLt+3QTnGpFRTJ1RALFqoyfZQFwgcrT5p8vIrUBBRCR9oB9pe8FxcXKUx9t4r5313Fu+8a8O7Y/bRrXcbosY6olvkldnh/Wi3V7svjbfzc6XY4ph6fN/zHgE6C1iMwEvgD+7KuiwsWPUQ3LtjOyXxv+ZVENJoRcfFZz/vjrM5m5ahfvrdnjdDmmDI++8FXVT0UkBeiHa7rnLlU97NPKQtz+rDxum76aTT8c49EruvH7/vF2cXUTciZe3Jm0XZk8MH89XVvUp0tzO08lUHia7fOFqh5R1Q9VdaGqHhaRL3xdXKhavyeLqyZ/xfeHT/D6zUncMqCdNX4TkmpERjDpxj7UqxXF2BmpHM8rcLok41bRBdxruc/kbSIiDUud3RsPtPJLhSHmk/T9XPfqSmpERPDuuP6W0WNCXrN6tXjlhj7sOprDfRYAFzAq2vP/I66zebvw05m9KcD7wCu+LS20lEQ1jJ2ZQmd3VIP9CWzCxTlnNua+Szrzcfp+3vhqh9PlGCqY81fVl4GXReQOVZ3kp5pCTn5hMX95bz3vpOzh8p4teH5YLztj14Sd0b9yBcA9/fFmereOtcOZHeZpvMMkEekvIjeKyO9Kbr4uLhRknMjnpjdW8U6KRTWY8CYiPDesF60a1mb8rFQLgHOYp1/4/gf4P+A84Gz3LcmHdYWE7YeyGTp1BWt2ZfLS8N7cc3FnIiLsi10TvhrUjmLqiEQycwq4820LgHOSp3n+SUA3tW9qPLZi22HGzkglMkKY9Ydz7E9cY9y6tazP34d0575563jhsy1MvKSL0yWFJU9P8koHmvuykFAyZ/UufvfGNzSzqAZjynVdUmuGJ7Vm8uJtfLHpgNPlhCVP9/ybABtF5BtKxTqo6pU+qSpIFRUrz36ymVeXbef8jk2YPCKB+rXsjF1jyvPXq84ifV8Wd89J48M7z6d1I4s18SdPm/9jviwiFOTkF3LX7DQ+23iAkf3a8NgVZ1HDLq5uzCm5AuASGTzpf4ydmcK8Mf3tYAg/8jTeYamvCwlmP2TlMmp6skU1GFNJbRrX4YXrejPq38n89b8beWpoD6dLChunbf4ichx3kmfZpwBV1bA/S2n9nixG/Xs12XmFvH5zkp2xa0wlXdQtjrED2zN1yTYS2zbk2kS7joU/VHSSVz1/FRKMPknfz91z0mhUN5p3x9kZu8ZU1b2/6UTarkz+8t56zmpZn64t7P+Sr9mkdBWoKlOXbGPMDItqMMYbakRG8I8b+tCgdhRjZ6RwzALgfM6afyXlFxZz37x1PPPJZgb3bMHs0f1oVq+W02UZE/Sa1qvJKzcmsDsjl/vesQA4X7PmXwlloxr+YVENxnhV33aNuP/SLnyyYT+v/88C4HzJ00M9w972Q9nc+tZq9mXm8dLw3gzpY4nWxvjCqPPbuQLgPtlMr9ax9G1nJ0n6QkV5/q1FZLaI/E9EHhSRqFLPLfB5dQFixbbDXD1lBcfzCpn1h3Os8RvjQyLCs8N60rphbW6flcrB43lOlxSSKpr2eRNYAtwBtACWikhj93NtfVhXwJj9TamohvEW1WCMP9SvFcXUkYkcy3MFwBUWFTtdUsipqPk3VdVpqpqmqncAU4BlItKe8o//DxlFxcqTH23i/vnrObd9Y94d199OPzfGj7q2qM8TQ3rw9fajPP/ZVqfLCTkVzflHiUgtVc0DUNUZIrIfWATU9Xl1DjlxspAJc1xRDTf1a8ujV3SzqAZjHHBN4hkk78xg6pJtJLRpiCVleU9FHe114JzSC1T1c2AYrqTPkPNDVi7Dpq3ki00HeOyKbvztKsvoMcZJj17Rje6t6nPP3DQO5tj0j7ectqup6ovl5fqo6hpV/U1FKxeRN0XkoIikl1rWSEQ+E5Fv3T8bVq1071u/J4shk5ez62gOb9x8Nr8f0M4yeoxxWEkAXIQIk9NOkldQ5HRJIcHTK3lV9fCWt4BLyyy7H/hCVTsCX7gfO+6T9B8Y9uoKakREMG/suQzq0szpkowxbq0b1eHF4b3YeayYxz7Y4HQ5IaHC5i8iPYB5VVm5qi4DjpZZfBUw3X1/OjCkKuv2lp+iGlLp0rw+C8YPsKgGYwLQBV3iGHxmFLNX72Zu8m6nywl6crpTqEVkEPAKcJWqflelDYjEAwtVtbv7caaqxrrvC5BR8rjM+0YDowHi4uISZ8+eXZXNA5CdnU1MTMwvlhcWK9M35PO/vYX0bR7JqB41iY4MjWmeU405VIXbeCE8x3zseDZTN0XyXWYxD/WrRdv6oX+GfXU+50GDBqWoavnXW1fVU96A47iu3Xva11WwjnggvdTjzDLPZ1S0jsTERK2OxYsX/2LZ0eyTOmzaCm3754X6/KdbtKiouFrbCDTljTmUhdt4VcN3zIeO52nfJz7TXz37pWbm5Dtdks9V53MGkvUUfbWiaZ9ZwMPi3W89D4hICwD3z4NeXLdHth3K5uopy0nblclLw3tzz286ERERGnv8xoS6JjE1mXxjAnszcpn4zloLgKuiio72+SOwAZjhxW1+ANzsvn8z8L4X112hFdsOc/Xk5RbVYEwQS4pvxP2/7cKnGw/w2rLtTpcTlCr8wldVH8d1UlelicjbwEqgs4jsEZHbgKeB34jIt8BF7sd+URLVEFe/lkU1GBPkbjuvHZf1aM6zi7awavsRp8sJOp5ew/ffVVm5qt5wiqcurMr6KmvBmr08t2gLezNziVm8iOyThZzfsQmTRyRQv5adK2hMMBMRnrmmJ5t/WM7tb6/hwzvOo1l9u7aGp0L21NUFa/bywPz17M3MBSD7ZCGREcLVvVta4zcmRNRzB8Bl5xVyuwXAVUpFkc47RGR7qZ9lbyXL7/RXwZ56btEWcsucCVhUrDz/2bcOVWSM8YXOzevx5NDufLPjKM99usXpcoJGRRdwb+evQrxtn3uP39PlxpjgdXWfM0j+PoNXl24nsU1DLj6rudMlBTxP4x1uEpGYMssG+6Yk72gZW7tSy40xwe2RK7rR84wG3PvOWnYeOeF0OQHP0zn/ScBXItK11LK/+aAer5l4SWdql7m+bu2oSCZe0tmhiowxvlSzRiSTb0wgQoQxM1ItAK4Cnjb/HcCtwDwRGeZeFtBnRQ3p04qnhvaglXtPv1VsbZ4a2sOO6zcmhLVuVIeXhvdm0w/HeOT9kEyd9xpPL+CuqpoqIr8G3haRc4CAD9UY0qcVQ/q0YsmSJQwcONDpcowxfjCoSzPuuKADk778jsS2DRl+dhunSwpInu75/wCgqoeBS3BdwrG7r4oyxpjqmHBRJ87r0ISH399A+t4sp8sJSB41f1W9vNT9YlWdCNT0WVXGGFMNkRHCy9f3plGdaMbNTCUrt8DpkgJORcf5f1Xq/n/KPL3KJxUZY4wXNI6pyeQRCezLzOXeuWspLrYAuNIq2vMvfZH2s8o8F9Bf+BpjTGLbhjx4WVc+33SAVy0A7mcqav6n+1Vpv0aNMQHvlgHxXN6zBc8t2szKbRYAV6Ki5h8rIleLyDXu+0Pdt2uABn6ozxhjqqUkAC6+SV3ueHsNB4/lOV1SQKio+S8FrgQGu+9f4b4NBpb5tjRjjPGOmJo1mDYykRMnC7l91hoKLACuwmyfW/xViDHG+FKnuHo8fU0P7pqdxnOLtvDgZV0rflMIO23zFxFPz47IVNVjXqjHGGN85qrerUj+PoPXlm0noU1DLu0evgFwFZ3hO92DdSjwFlClC74YY4w/PTS4K+v2ZjHxnbV0bl6Pdk3qVvymEFTRtM8gfxVijDH+4AqA68PgSV8xdkYK740bQO3ogE+r8bqQvZKXMcacyhkNXQFwWw4c56EF6aiG35Hr1vyNMWFpYOdm3HFBR95N3cPs1budLsfvrPkbY8LWXRd25PyOTXj0g/ALgLPmb4wJW64AuD40rhvNmBkpZOWETwCcNX9jTFhrVDeaySMSOHAsj3vmpoVNAJw1f2NM2Eto05CHLu/GF5sPMnXpNqfL8Qtr/sYYA/zu3LZc0aslz3+6hRXbDjtdjs9Z8zfGGFwBcE8P7cGZTWO48+017M8K7QA4a/7GGONWt2YNpo1MICe/iNtnpYZ0AJw1f2OMKaVDs3o8fU1Pkndm8MzHm50ux2es+RtjTBlX9mrJzee25fWvdvDx+h+cLscnrPkbY0w5/nJ5N3q3jmXivHVsP5TtdDleZ83fGGPKEV0jgskjEoiKFMbOSCUnv9DpkrzKseYvIneJSLqIbBCRCU7VYYwxp9IqtjYvX9+HrQeP89B7oRUA50jzF5HuwB+AvkAvYLCIdHCiFmOMOZ1fdWrKXRd2ZP6avcz6ZpfT5XiNU3v+XYFVqpqjqoW4rg881KFajDHmtO68oCO/6tSUv36wkXV7Mp0uxyvEiT9jRKQr8D5wLpALfAEkq+odpV4zGhgNEBcXlzh79uwqby87O5uYmJhq1Rxswm3M4TZesDH72/F85dEVuQjw1/61iYkWv2y3OmMeNGhQiqomlfecI80fQERuA8YBJ4ANwElVnVDea5OSkjQ5ObnK21qyZAkDBw6s8vuDUbiNOdzGCzZmJ6TtzmTYtBWc16EJb9x8NhERvv8FUJ0xi8gpm79jX/iq6huqmqiqvwIygK1O1WKMMZ7o3TqWRwZ3Y/GWQ0xZ8p3T5VSLk0f7NHP/bINrvn+WU7UYY4ynRvZry1W9W/LCZ1tZ/l3wBsA5eZz/uyKyEfgvMF5VMx2sxRhjPCIiPDW0B+2DPADOyWmf81W1m6r2UtUvnKrDGGMqq050DaaOTCSvoIjxQRoAZ2f4GmNMFXRoFsMz1/YkZWcGT30UfAFw1vyNMaaKBvdsye/7x/Pm8h18uC64AuCs+RtjTDU8eFlXEtrEct+8tWwLogA4a/7GGFMNJQFwNaMiGTsjJWgC4Kz5G2NMNbVoUJuXr+/NtwezeXD++qAIgLPmb4wxXnB+x6bcfVEnFqTtY8aqwA+As+ZvjDFecvugDgzs3JS//3cja3dnOl3OaVnzN8YYL4mIEF4a3pum9WoybmYqGSfynS7plKz5G2OMF8XWiWbqyAQOHT/J3XPTKC4OzPl/a/7GGONlPc+I5ZErurFkyyFeWRyYAXDW/I0xxgdGnNOGq/u04sXPt/K/bw85Xc4vWPM3xhgfEBGeuLo7HZvFcNfsNPZl5jpd0s9Y8zfGGB8pCYDLLyxm/KxU8gsDJwDOmr8xxvhQ+6YxPHttT9bsyuTJjzY5Xc6PrPkbY4yPXdajBbcOaMdbK77nv2v3OV0OYM3fGGP84oHLupDYtiH3v7uO7w4ed7oca/7GGOMPUZERTL4xgVpRkYyZkcqJk84GwFnzN8YYP2neoBb/uKEP2w9l84DDAXDW/I0xxo8GdGjCvRd35oO1+/jP1zsdq8OavzHG+NnYX7fnwi7N+PvCjazZleFIDdb8jTHGzyIihBeu601c/VqMn5nKUQcC4Kz5G2OMAxrUiWLqiEQOZ+czYU4aRX4OgLPmb4wxDulxRgMeu/Islm09xKQvv/Xrtq35G2OMg27o25qhCa14+YtvWbrVfwFw1vyNMcZBIsITQ3rQOa4eE2avYa+fAuCs+RtjjMNqR0cyZUQCBUXK+Jn+CYCz5m+MMQHgzKYx/N+wnqTtzuSJDzf6fHvW/I0xJkBc2r0Fo85rx/SVO/nAxwFwNXy6dmOMMZXy5992Ye2eTO6dm8bjCzdy8PhJWn39JRMv6cyQPq28th3b8zfGmAASFRnB4J4tKChSDh4/CcDezFwemL+eBWv2em071vyNMSbAvLZsxy+W5RYU8dyiLV7bhmPNX0TuFpENIpIuIm+LSC2najHGmEByquv9evM6wI40fxFpBdwJJKlqdyASuN6JWowxJtC0jK1dqeVV4eS0Tw2gtojUAOoAgXFtM2OMcdjESzpTOyryZ8tqR0Uy8ZLOXtuGOHUxARG5C3gCyAU+VdURZZ4fDYwGiIuLS5w9e3aVt5WdnU1MTEw1qg0+4TbmcBsv2JhD3Yp9Bby7tYAjecU0rhXBNZ2i6N8yqlLrGDRoUIqqJpX7pKr6/QY0BL4EmgJRwAJg5Klen5iYqNWxePHiar0/GIXbmMNtvKo25nBRnTEDyXqKvurUtM9FwA5VPaSqBcB8oL9DtRhjTNhxqvnvAvqJSB0REeBCYJNDtRhjTNhxpPmr6ipgHpAKrHfX8ZoTtRhjTDhyLN5BVR8FHnVq+8YYE87sDF9jjAlDjh3qWRkicgjYWY1VNAEOe6mcYBFuYw638YKNOVxUZ8xtVbVpeU8ERfOvLhFJ1lMd6xqiwm3M4TZesDGHC1+N2aZ9jDEmDFnzN8aYMBQuzT8cDyMNtzGH23jBxhwufDLmsJjzN8YY83PhsudvjDGmFGv+xhgThoK6+YvImyJyUETST/H8QBHJEpE09+2RUs9dKiJbROQ7Ebnff1VXXVXHKyKtRWSxiGx0Xz3tLv9WXnXV+Yzdz0eKyBoRWeifiquvmv+uY0VknohsFpFNInKu/yqvumqOOSivCljRmN2vGege7wYRWVpqefX716niPoPhBvwKSADST/H8QGBhOcsjgW3AmUA0sBbo5vR4fDjeFkCC+349YGswjLc6Yy71/D3ArNO9JtBu1RkzMB0Y5b4fDcQ6PR5fjhloBewAarsfzwV+7/R4vDTmWGAj0Mb9uJn7p1f6V1Dv+avqMuBoFd7aF/hOVberaj4wG7jKq8X5QFXHq6o/qGqq+/5xXAmqrbxcnk9U4zNGRM4ALgde92pRPlbVMYtIA1wN5Q33evJVNdO71flGdT5ngvSqgB6M+UZgvqrucr/+oHu5V/pXUDd/D50rImtF5GMROcu9rBWwu9Rr9hAkzdAD5Y33RyISD/QBVvm9Mt851ZhfAu4Dip0py6fKG3M74BDwL/dU1+siUtfBGr3tF2NW1b3A/+GKif8ByFLVT50s0os6AQ1FZImIpIjI79zLvdK/Qr35p+LKtugFTMJ1xbBQdtrxikgM8C4wQVWP+b88nyh3zCIyGDioqikO1uYrp/qca+CaRpiqqn2AE0BQfJ/lgVN9zg1x7fW2A1oCdUVkpFNFelkNIBHXX6+XAA+LSCdvrTykm7+qHlPVbPf9j4AoEWkC7AVal3rpGe5lQe0040VEonA1/pmqOt/BMr3qNGMeAFwpIt/j+rP4AhGZ4Vyl3nOaMe8B9qjrehngumZGgkNletVpxhzKVwXcAyxS1ROqehhYBvTCS/0rpJu/iDQXEXHf74trvEeA1UBHEWknItHA9cAHzlXqHacar3vZG8AmVX3ByRq97VRjVtUHVPUMVY3H9fl+qaohsUd4mjHvB3aLSGf3Sy/E9YVh0DvN/+VQvirg+8B5IlJDROoA5+Aam1f6l2MXc/EGEXkb11EATURkD66Lw0QBqOo04FpgrIgUArnA9er6urxQRG4HFuH65vxNVd3gwBAqparjFZHzgJuA9SKS5l7dg+49qIBWjc84aFVzzHcAM91NYTtwi5/Lr5JqjHmViJRcFbAQWEOQREBUNGZV3SQinwDrcH1v9bqqprvfW+3+ZfEOxhgThkJ62scYY0z5rPkbY0wYsuZvjDFhyJq/McaEIWv+xhgThqz5G78QkRdFZEKpx4tE5PVSj58XkXu8uL23RORab62v1HofLHU//nSJjGXeN6HU6fmebmtFZeurLhFp6j680IQ4a/7GX5bjPvNSRCKAJkDpHJ7+gN+bXRU8WPFLfs4dOHYrrnRRj6mqx2equrdRbap6CPhBRAZ4Y30mcFnzN/6yAijJlj8LSAeOi0hDEakJdAVSReQREVktrmz218Sli4h8U7Ii9x73evf9RBFZ6g6+WiQiLcpu+FSvcQdmPSMi34jIVhE53728jojMFdf1D94TkVUikiQiT+NKj0wTkZnu1UeKyD/Flbf+qYjULmfsFwCpqlpYarsvikiyuDL3zxaR+SLyrYg8Xqru7FL3/ywi68UVbPZ0qfW8JCLJwF0icqG4At3Wiysrvqb7dd+LyF9FJNX9XBf38l/LT/n4a0SknntzC4ARnn+0JhhZ8zd+oar7cJ1Z3QbXXv5KXMmi5wJJwHp3PO0rqnq2qnYHagODVXUzEC0i7dyrGw7MEVde0STgWlVNBN4Enii9XQ9eU0NV+wITcJ1hCTAOyFDVbsDDuMK1UNX7gVxV7a2qJc2xIzBZVc8CMoFryhn+AKBswFy+qiYB03Cdxj8e6A78XkQalxnDb3GFl53jDjZ7ttTT0e71TAbeAoarag9cZ++PLfW6w6qaAEwF/uRe9idgvKr2Bs7HdeYsQLL7sQlh1vyNP63A1fhLmv/KUo+Xu18zyL2nvR7XHnPJ1NBcXE0f9885QGdcDfMzd2zFQ7hCrkqr6DUlIXcpQLz7/nm4wuBwn06/7jRj2qGqaeWso7QWuKKWSyvJYlkPbHBfc+EkrkiG1mVeexHwL1XNcddUOgN+jvtnZ3ctW92Pp+PK9i9R3jiXAy+IyJ24LvpS6F5+EFdCpglhQZ3tY4JOybx/D1zTPruBe4FjuDLoawFTgCRV3S0ijwEll+SbA7wjIvMBVdVvRaQHrsZ5uksVSgWvOen+WUTV/j+cLHW/CNdfK2Xl8tM4yr6vuMw6iitZxwkPX/eLcarq0yLyIXAZsFxELnH/lVWLn/4KMCHK9vyNP60ABgNHVbXIvQcbi2vqZwU/NcjD4rr2wI9H66jqNlyN62F+2tvdAjQV93VqRSRKfnkBG09eU9Zy4Dr367vh+mVVosA9lVQZm4AOlXxPaZ8Bt4gr2RERaVTOa7YA8SJSsp2bgKXlvO5HItJeVder6jO4kiK7uJ/qhOuXswlh1vyNP63HdZTP12WWZanqYfclB/+Jq/EswtWQSpsDjMQ1BYT7O4JrgWdEZC2QRpksd09eU44puH5hbAQeBzYAWe7nXgPWlfrC1xMf8/MpmEpR1U9wTRMlu6eu/lTOa/JwJXi+454yK8b1fcLpTHB/sb4OKHDXCTAI+LCq9ZrgYKmexpQhIpFAlKrmiUh74HOgs/sXSVXX+R5wn6p+6606fUVElgFXqWqG07UY37E5f2N+qQ6w2D29I8C46jR+t/txffEb0M1fRJoCL1jjD32252+MMWHI5vyNMSYMWfM3xpgwZM3fGGPCkDV/Y4wJQ9b8jTEmDP0/DuNY45LoH/kAAAAASUVORK5CYII=\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"intensities = np.abs(opt.get_objective_arguments()[0][0, :, 2]) ** 2\n",
"\n",
@@ -1918,32 +417,9 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 12,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"opt.sim = mp.Simulation(\n",
" cell_size=mp.Vector3(Sx, 40),\n",
@@ -1965,32 +441,9 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 13,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"opt.sim = mp.Simulation(\n",
" cell_size=mp.Vector3(Sx, 40),\n",
@@ -2012,32 +465,9 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 14,
- "metadata": {},
- "output_type": "execute_result"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
+ "outputs": [],
"source": [
"opt.sim = mp.Simulation(\n",
" cell_size=mp.Vector3(Sx, 40),\n",
diff --git a/python/examples/adjoint_optimization/.ipynb_checkpoints/Bend Minimax-checkpoint.ipynb b/python/examples/adjoint_optimization/.ipynb_checkpoints/Bend Minimax-checkpoint.ipynb
index f84a6b0ec..a15e36dea 100644
--- a/python/examples/adjoint_optimization/.ipynb_checkpoints/Bend Minimax-checkpoint.ipynb
+++ b/python/examples/adjoint_optimization/.ipynb_checkpoints/Bend Minimax-checkpoint.ipynb
@@ -17,17 +17,9 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Using MPI version 3.1, 1 processes\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"import meep as mp\n",
"import meep.adjoint as mpa\n",
@@ -53,17 +45,9 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0.20124611797498096\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"waveguide_width = 0.5\n",
"design_region_width = 2.5\n",
@@ -198,7 +182,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -230,7 +214,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -252,7 +236,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -288,7 +272,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": null,
"metadata": {},
"outputs": [],
"source": [
@@ -346,1594 +330,9 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 0; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 1; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAP0AAADnCAYAAADVeFABAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAQ/klEQVR4nO3dPY8jR34G8Ke7q1/InZFmrYUgCRAwMHA4SAIcSLEgAYYDK3Wm3HDm5CJ/g0vvK1yywGVOlCm6SMAJkANZ1gZ6A1YSxlrP7C6H7G72iwPhX6rhkuwm2e/1/ABihzsz7CKnn6rq7qoupyxLEJE93L4LQETdYuiJLMPQE1mGoSeyDENPZBlV8X2e2h+Rsizx008/4dNPP8Vnn30GpRR830ee50e9nuM4WC6XeOONN/DRRx/hnXfeQRRFDZeaWuRs+8+q0NMIlGUJx3HgOA6KosCjR4/wySefIAxDRFF0VOjl9a6vr/H222/j/fffh+uyYzgFDP3ElGWJH374Ad9++21jr7ler7FcLuE4WxsOGhlW3ROk1G91eRNBDcOQgZ8Qhn6CzG64WQEc+hryu0ophn5C2L2fuGNP4hVFARmifexr0DCxpZ+goij6LgINGEM/QTzLTvtw7yCyDENPZBmGnsgyDD2RZRh6Issw9ESWYeiJLMPQE1mGoSeyDENPZBmGfoI49p72YegniGPvaR/uHUQN+s8vHuOjP/0V//rnv+H/btO+i7MV59MTNeR/nyf4w1/+C1lR4r9/eoZX7v0P/vgv/9B3sV7Alp6oIfE6R1b8dgPp53HWY2l2Y+iJGvLm383xbx/8PRwHeO2lCP/+j7/ru0hbsXtP1KD/+Oe38Id/+j0CNdz2dLglIxqpIQceYOiJrMPQE1mGoSeyDENPZBmGnsgyDD2RZRh6Issw9ESWYeiJLMPQE1mGoSeyDENPZBmGnsgyDD2RZRh6Issw9ESWYeiJLMPQE1mGoSeyDENPZBmGnsgyDD2RZRh6Issw9BPUxlLVZVlW/xCNAkM/QeZS1acsW+04zp1/TawExouhn7g2Wn1ge0VA48DQT4AZQM/zkOe5fn5K6OV30zSF4zjwPO/4QtJgcAHLA2x2afvo4m4rQ57nUEohTVP8/PPPKMsSSim4rgvf97Fer1GWpf7dXRWBHApIwJVSWCwWeOWVV3Bzc4Pr62tcXFygKAqUZQnXde9UOH23/kMqy5Ax9DXITi4PeW7+P9BdJSDbzPMcWZYhTVMURYGnT5/iiy++AAC89957WCwWWC6XiOMYWZYhy7KdZZWQSEURRRHOzs5wfn6Oy8tL/Pjjj/j666/x5ptvwnEcKKWglILneTr8XQdNtikPKYfruvpBL2LoK5hBL4oCeZ7rf+VreXQRerM86/UaSZJgsVjg6dOnuLq6wuPHj6GUwmuvvYbr62sEQYDVaoUkSXR55feFhMN1XXieB9/3MZ/P8fLLL+PBgwd48OAB0jTF999/jziOcXZ2hvl8jjAMEQTBneB3xQy6lNt8sKXfjaGvQUKdZZluXdfrtW49zTC1HXzZhmx7tVrh+fPn+OWXX3B1dYUkSaCUQhiGmM/nKIoCjuMgCIIXuvkmCYnv+1BK4d69e/oRBAEcx8FisYBSSm87iqJeQm8GXkIu5fZ9H8BvFRi9iKGvYHal8zzHer1Gmqb6IeE3g99VedbrNeI4xu3tLdI01dt2HAe+7yMMQxRFAc/z9CHAvtCbLf1sNsPZ2RnCMIRSSm87z3OkaYrVaqW/7rIrbR6GyHkH3/eR5znCMNTvg5cUd2PoK0hXWEKWJAmSJEEcx4jjGEmS6OC3dXnMLAsAXZ4sy5AkCVarFeI4xnq9BgAopRAEAWazmT5Gr6qUzGPiIAh0TyGKIt1iyvZc10We57p1NY+ru2B26aWs0qORk5AM/W4MfQ3StZdWfrVaYblc6pNkaZrq0HfZ0kuZpBLKsgwAdPfe/LqqlQd+C5O0nuYxe1mWumdRliXSNIXv+52fxNvskZiBl65+V+dXxoqhr7CtpY/jGMvlEovFQp8kM0NflmVlCE7ZKc0Ti9LLSNNUX5/3PE93dX3frzzRuBl66TZLj0GCZF4pUEohSZK9o/baYF5ODIJAB14qKvm/un8HGzH0NWxeHpPQy0O6+H2cwTd7IWYAgF9DbJapKgRmN90MvuM4ejvAr938Pi/Tmcfx8ny9Xt+5msKWfjeGvsK2cKVpeue4XrrW0tJ2GXypkMyWTYJw6LGt2WpL8M0TdLKdPsJulkuuIADQg5IY+PoY+ho2r9NL+KUCkK/lZ7oum3msLqE49PLhZog3T86Zn0FfpHch78sccMSw18fQ17RvgI5UBF1cp99WLtMpx9jbfscMfd+hMnsZ5gm7zRGTtB9DX4O5Q20Oxd0chtt36IHDAl/3Z4cQJhnvb3bjh1CusWHoD7RtR9sczy4t0lB3yCaPx+u8x7aO/81DjaF+1kPEGQlH2LUT7zounrKq9zf19z9GbOk7YO74NrVIDPwwMfQtm3rI970/84oCDQe793S0qVdoU8XQt4ih+BU/h2Fh6C3TVFebQR4vhp5ax2P6YWHoG2S2fkNsCfto5Rn44eHZe0sMKfDma7BS6B5bempF1RReMcQe0dQx9BbgyTsyMfTUuDqVDLv1/WHoJ66pALbRytswN2GIGHqLjSl0PLRoDkNvqW0zAtt43aaMpXIaA4Z+wg4JSp2JM0PGSqE+ht5CUwzIGCqmoWDoJ2pIg3G6MMWKrC0M/Qmm0rpM5X1QPQx9w4YQoLqj4YDmyttHS8v154/DT+0IQwj2Lk2dvKvzfRonTriZkLqDbJq+U++h6/bx+LtfbOkrmLe17nN1lypNtvB1f6bOdre9DnsQ/WLoazDvdW+uGyff61vTLWebgaf+MfQ1mEtayYKRsrRV3/pcSHIfni8YLoa+grlMtawFb66Q2ufySm0Evup98Hh8/Bj6CmVZIssyJEmiH7JSrYSfgacxqXX23saumOzgWZYhjmMsFgssFgusVivEcYw0TZFlWS9rojPwdIpaobf5D+44DtI0xc3NDZ49e4Y4jrFcLpEkiV6Xvsvu/RgCX/ezkMuH1C1ep69QFAVub29xdXWFZ8+eoSxLHXize99F6McQeBq+vaFfLpe9HbP2SdZBB4BvvvkGX375JR4/fow0TeE4jr5sJyQYbQakr8tyfWEvoD17Q39zc4PPP/8cX331FYIggOu6g99ZmlQUBa6vr3Fzc6MrAsdx4LouPM+D53n66zbvQjPU6/BN2yyXOXqQFUBzKlv6hw8f4uHDhwCAMAyxXq87KVifXNfVrfnl5SXeeustvPTSS/B9H77vIwgC/bXv+wAApVTjO2efrXsXIZNt1LmBB4PfnL2hL8sSt7e3+nmSJK0XaAjMQTfX19d48uQJ8jxHFEUIwxBRFGE2m8FxHN3iN7lT9nHs3pUm39sQBkeN0d7QO46De/fu6edhGCLP89YLNQRyKc73fdze3sJ1XX3yzgy7UgpKNXM+tK2W7NDAn1qObRN62EoPR+Xeatam6/Xauto1SRIsl0t4ngcA8DwPQRC8cDLvWG2Hoa8Wvu/zAbQbL9lVyLIMaZoiSRIopfRQ3CzLTrpU10UojilbX2P5GdrucBhuBRmGK117c6LN1AJPdmBLX4Mc30uX/thDnKEf1w69fNQMhr6CdOHlsRl4MyjmIB1paY8NUp1lnveV2Sa2vd9TMfQ1HDIq8dTReft+r83Aj6WVZ8BPx2P6ATk18GM2lkpnChj6gWgi8FNv5akZDH1D+h5Y00fgm55dyMqnGwx9DTLRRibbiCZ30m2TTdoM/CkThDbLxuCPC0/k1SABkYfMrmvaMeHpcgBO1zcKaeMe/cTQV5LWfXM6rTzkZ/rQ1Zh6W4by2oKhr+A4DpRSehqtBN+cS9+HrubEs5WdHoa+glIKQRBgNpvpKbVhGEIpdafV76pV6vIGGAz8NFWG3jx29X3fuqm1URTh/Pwc5+fnODs7w3w+vxP8rgLf9Q0wGPjp4k00KuR5jvv37+P+/fu6tZ/P5wiCAEEQ3Al+3ze/aGr7Xc+/p24ddBONKIqQZVnrheqb3DCjLEu8+uqreP3113FxcYEgCPR8egl7Gy19n1Ni2cJP397Qz+dzfPzxx3j33Xf1SSybdoo8z7FYLJCmqQ75NuaEnGOd8rtDb2l3vbehl3uq9ob+4uICH374IT744IOuyjMYskN+9913ePToEZ48eaLvHCTz6mVdOznP0dV19m3lbELTPYw6i1geWn5WFKerbOltd3l5qW9/vVgs9GIXcRzfGUQi985re9isqe8AnDL9l/rDS3YVHMdBFEW4uLiAUkoveCGk5R974Js6edfHice+K7+x4QKWO5ituFIKZ2dnAIDVaqWDvl6vDzprP5XPkS38uHEBywqe5+l73cv98dI01QNz6nw2TYdhiItgtHmZr87P2ryPHoqz7Cq4rgulFMIw1JfqZBhunVZ+6IFvYtt9XddvY9KTDfipVZAJN7KoRZ1r8+ZSTE2XpQ/7KjcO5BkfnsirwQy6tPBAd7e3ajsoXcy+O3Qbp95YlHZj6Gswp9fK8662O1RdBJ7awdBX6Dp4Qw66GOpS11QPQz8AbY2q63MC0Nhu2GEThr5np96Yss732VshE0PfkqoRem2GvS11tsvADx8v2TVg145+6P/XMeTuLwM/Dgx9C7atb7fr+SH6DHzXd8Kl9rB734EhjqIb63bodGzpR8Kmbv2pi4DSfgz9SBwTgDGHpk7ZzWXDh1wpDg1D34Cp73BtXYWou92m18yzHUPfg2PvqXfI3P0mw9jGVYgqDHl7eCKvZ03cJ66PgAxtcQ+qj6HvwebAnWOCv/l6bevy/ACD3i5273uy71p+E5q4LXcfxlbeMWJL36O2Ws9ta913sd1T1Qk8K4XTMfQWansm3jEY5u6we2+5tg4BDnldBr5bbOknZmjj86t6FQx899jSE4DTw3fo8fixPYyhHI6MGUNPnTEXEGnrtakau/cNGNIOd8jyWk1v99CfZde+Hwx9A6ay8257H33eZ68KF7s4DkPfs6Gv3V4VUN7eenwY+gNt28mHNoR2KBXGNk2Ubd/EoyG/96Fg6I8kO565A3KHa9fmZy6LkGz+HWg/hv4Amzub67p6MUulFIqiuHNjB2qWubSYPOTvYD4Y/v0Y+ho2Wxcz6L7voygKOI6DPM/7LupOQ1tM89jbaUtF6/s+giDQD1lNmMGvxtDXZAZewh4EgQ58lmUoioInqlokQZbPPooivYT4ZvDZ3d+Noa9BuvMSeFmvXgKvlEKe56Pt2o9pEQv5O0jo5/M5oihCEATwfV8vJz6U8g4RQ19hM/BBEGA2m+kbX3iepwM/xvnrY2L2toIgQBiGmM1md4JvtvS0HUNfg+xovu8jz3N97K6UQhRFd0JP7dqsgMMw1N18aek9z2Po92DoK5gtve/7uoWXLv7msfzQxpW3WRG1PTBn15gI13X1eZVtJ/TY0u/H0FcwdzIJvDyXFp73X+/Gtiso0rrLg937agx9DdLSm19L2CXwDHs3to2TMMdL8JJdNadiZ7V+Ty7L8k7A5bl50o6B79a+UXkcoXfH1g+Aoa9p8wYQNBxt31l4xBh6IstsDT0nJBNZhqEnsgxDT2QZhp7IMgw9kWUYeiLLMPRElmHoiSzD0BNZhqEnsgxDT2QZhp7IMgw9kWUYeiLLMPRElmHoiSzD0BNZhqEnsgxDT2QZhp7IMgw9kWUYeiLLMPRElmHoiSzD0BNZhqEnsgxDT2QZhp7IMgw9kWUYeiLLMPRElmHoiSzD0BNZhqEnsgxDT2QZhp7IMgw9kWUYeiLLMPRElmHoiSzD0BNZhqEnsgxDT2QZhp7IMgw9kWUYeiLLMPRElmHoiSzD0BNZhqEnsgxDT2QZhp7IMqri+04npSCizrClJ7IMQ09kGYaeyDIMPZFlGHoiyzD0RJb5f+gR6pedfZYSAAAAAElFTkSuQmCC\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 2; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 3; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 4; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 5; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 6; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 7; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 8; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 9; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 10; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 11; current eta: 0.5, current beta: 4\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 12; current eta: 0.5, current beta: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- ""
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Current iteration: 13; current eta: 0.5, current beta: 8\n",
- "Starting forward run...\n",
- "Starting adjoint run...\n",
- "Calculating gradient...\n"
- ]
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- " |