From 5a116fbaf064db0e36031637428daa0868733229 Mon Sep 17 00:00:00 2001 From: yonghakim Date: Thu, 11 Jul 2024 23:44:49 +0900 Subject: [PATCH 01/15] updating --- QA/fourier_expansion.py | 155 ++++++++++ examples/rcwa/moharam_1D_TM.py | 7 +- meent/on_jax/emsolver/field_distribution.py | 16 +- meent/on_numpy/emsolver/_base.py | 264 +++++++++++++++- meent/on_numpy/emsolver/convolution_matrix.py | 286 ++++++++++++------ meent/on_numpy/emsolver/fourier_analysis.py | 88 ++++++ meent/on_numpy/emsolver/rcwa.py | 53 +++- meent/on_numpy/emsolver/scattering_method.py | 11 +- meent/on_numpy/emsolver/transfer_method.py | 5 +- meent/on_torch/emsolver/convolution_matrix.py | 10 +- meent/on_torch/emsolver/scattering_method.py | 2 +- 11 files changed, 772 insertions(+), 125 deletions(-) create mode 100644 QA/fourier_expansion.py create mode 100644 meent/on_numpy/emsolver/fourier_analysis.py diff --git a/QA/fourier_expansion.py b/QA/fourier_expansion.py new file mode 100644 index 0000000..fc52bb8 --- /dev/null +++ b/QA/fourier_expansion.py @@ -0,0 +1,155 @@ +import numpy as np + + +def cfs(x, cell, fto, period, type_complex=np.complex128): + + cell_next = np.roll(cell, -1, axis=1) + cell_diff = cell_next - cell + + modes = np.arange(-2 * fto, 2 * fto + 1, 1) + + center = 2 * fto + nc = np.ones(len(modes), dtype=bool) + nc[center] = False + + x_next = np.vstack((np.roll(x, -1, axis=0)[:-1], period)) - x + + f = cell_diff @ np.exp(-1j * 2 * np.pi * x @ modes[None, :] / period, dtype=type_complex) + + f[:, nc] /= (1j * 2 * np.pi * modes[nc]) + f[:, center] = (cell @ np.vstack((x[0], x_next[:-1]))).flatten() / period + + return f + + +def fft_piecewise_constant(cell, x, y, fourier_order_x, fourier_order_y, type_complex=np.complex128): + + period_x, period_y = x[-1], y[-1] + + # X axis + cell_next_x = np.roll(cell, -1, axis=1) + cell_diff_x = cell_next_x - cell + cell_diff_x = cell_diff_x.astype(type_complex) + + cell = cell.astype(type_complex) + + modes_x = np.arange(-2 * fourier_order_x, 2 * fourier_order_x + 1, 1) + + f_coeffs_x = cell_diff_x @ np.exp(-1j * 2 * np.pi * x @ modes_x[None, :] / period_x, dtype=type_complex) + c = f_coeffs_x.shape[1] // 2 + + x_next = np.vstack((np.roll(x, -1, axis=0)[:-1], period_x)) - x + + f_coeffs_x[:, c] = (cell @ np.vstack((x[0], x_next[:-1]))).flatten() / period_x + mask = np.ones(f_coeffs_x.shape[1], dtype=bool) + mask[c] = False + f_coeffs_x[:, mask] /= (1j * 2 * np.pi * modes_x[mask]) + + # Y axis + f_coeffs_x_next_y = np.roll(f_coeffs_x, -1, axis=0) + f_coeffs_x_diff_y = f_coeffs_x_next_y - f_coeffs_x + + modes_y = np.arange(-2 * fourier_order_y, 2 * fourier_order_y + 1, 1) + + f_coeffs_xy = f_coeffs_x_diff_y.T @ np.exp(-1j * 2 * np.pi * y @ modes_y[None, :] / period_y, dtype=type_complex) + c = f_coeffs_xy.shape[1] // 2 + + y_next = np.vstack((np.roll(y, -1, axis=0)[:-1], period_y)) - y + + f_coeffs_xy[:, c] = f_coeffs_x.T @ np.vstack((y[0], y_next[:-1])).flatten() / period_y + + if c: + mask = np.ones(f_coeffs_xy.shape[1], dtype=bool) + mask[c] = False + f_coeffs_xy[:, mask] /= (1j * 2 * np.pi * modes_y[mask]) + + return f_coeffs_xy.T + + +def cfs2d(cell, x, y, fto_x, fto_y, cx, cy, type_complex=np.complex128): + cell = cell.astype(type_complex) + + # (cx, cy) + # (1, 1): epz_conv; (0, 1): epx_conv; (1, 0): epy_conv + + period_x, period_y = x[-1], y[-1] + + # X axis + if cx == 0: # discontinuous in x: inverse rule is applied. + cell = 1 / cell + + fx = cfs(x, cell, fto_x, period_x) + + if cx == 0: # discontinuous in x: inverse rule is applied. + fx = np.linalg.inv(fx) + + # Y axis + if cy == 0: + fx = np.linalg.inv(fx) + + fxy = cfs(y, fx.T, fto_y, period_y).T + + if cy == 0: + fxy = np.linalg.inv(fxy) + + return fxy + + +def dfs2d(cell, cx, cy, type_complex=np.complex128): + cell = cell.astype(type_complex) + + # (cx, cy) + # (1, 1): epz_conv; (0, 1): epx_conv; (1, 0): epy_conv + + if cx == cy == 1: + res = np.fft.fft2(ucell/ucell.size).astype(type_complex) + + else: + rows, cols = cell.shape + + res = np.zeros([rows, cols], dtype=type_complex) + + if cx == 0: # discontinuous in x: inverse rule is applied. + cell = 1 / cell + + for r in range(rows): + res[r, :] = np.fft.fft(cell[r, :] / cols).astype(type_complex) + + if cx == 0: + res = np.linalg.inv(res) + + if cy == 0: # discontinuous in y: inverse rule is applied. + res = np.linalg.inv(res) + + for c in range(cols): + res[:, c] = np.fft.fft(res[:, c] / rows).astype(type_complex) + + if cy == 0: + res = np.linalg.inv(res) + + res = np.fft.fftshift(res) + + return res + + +if __name__ == '__main__': + + ucell = np.array([ + [1, 2, 3, 3, 2], + [5, 3, 2, 9, 4], + [1, 3, 6, 4, 1], + [5, 3, 5, 4, 2], + [3, 6, 6, 7, 1], + ]) + + f = np.fft.fftshift(np.fft.fft2(ucell/ucell.size)) + + a = dfs2d(ucell, 1, 1) + b = dfs2d(ucell, 1, 0) + c = dfs2d(ucell, 0, 1) + + x = np.array([1/5, 2/5, 3/5, 4/5, 1]).reshape((-1, 1)) + aa = cfs2d(ucell, x, x, 1, 1, 1, 1) + + aaa = fft_piecewise_constant(ucell, x, x, 1, 1) + 1 diff --git a/examples/rcwa/moharam_1D_TM.py b/examples/rcwa/moharam_1D_TM.py index 9e90c2b..cd4ee7d 100644 --- a/examples/rcwa/moharam_1D_TM.py +++ b/examples/rcwa/moharam_1D_TM.py @@ -29,10 +29,10 @@ def E_conv_1D_analytic(fourier_order, patterns, period): theta = 0 * pi / 180 -fourier_order = 170 +fourier_order = 30 period = 0.7 -wls = np.linspace(0.5, 2.3, 400) +wls = np.linspace(0.5, 2.3, 1) spectrum_r, spectrum_t = [], [] @@ -83,6 +83,7 @@ def E_conv_1D_analytic(fourier_order, patterns, period): X = np.diag(np.exp(-k0 * q * d)) V = E_i @ W @ Q + V = E_conv @ W @ np.linalg.inv(Q) W_i = np.linalg.inv(W) V_i = np.linalg.inv(V) @@ -102,6 +103,8 @@ def E_conv_1D_analytic(fourier_order, patterns, period): DEri = R*np.conj(R)*np.real(k_I_z/(k0*n_I*np.cos(theta))) DEti = T * np.conj(T) * np.real(k_II_z / n_II ** 2) / (k0 * np.cos(theta) / n_I) + print(DEri) + print(DEti) spectrum_r.append(DEri.sum()) spectrum_t.append(DEti.sum()) diff --git a/meent/on_jax/emsolver/field_distribution.py b/meent/on_jax/emsolver/field_distribution.py index e4374af..dc4f044 100644 --- a/meent/on_jax/emsolver/field_distribution.py +++ b/meent/on_jax/emsolver/field_distribution.py @@ -689,14 +689,14 @@ def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_ return field_cell -# def field_dist_2d_lax(wavelength, kx_vector, n_I, theta, phi, fourier_order_x, fourier_order_y, T1, layer_info_list, period, +# def field_dist_2d_lax(wavelength, kx_vector, n_I, theta, phi, fto_x, fto_y, T1, layer_info_list, period, # resolution=(10, 10, 10), # type_complex=jnp.complex128): # # k0 = 2 * jnp.pi / wavelength -# fourier_indices_y = jnp.arange(-fourier_order_y, fourier_order_y + 1) -# ff_x = fourier_order_x * 2 + 1 -# ff_y = fourier_order_y * 2 + 1 +# fourier_indices_y = jnp.arange(-fto_y, fto_y + 1) +# ff_x = fto_x * 2 + 1 +# ff_y = fto_y * 2 + 1 # ff_xy = ff_x * ff_y # ky_vector = k0 * (n_I * jnp.sin(theta) * jnp.sin(phi) + fourier_indices_y * ( # wavelength / period[1])).astype(type_complex) @@ -809,14 +809,14 @@ def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_ # # # -# def field_dist_2d_lax_heavy(wavelength, kx_vector, n_I, theta, phi, fourier_order_x, fourier_order_y, T1, layer_info_list, period, +# def field_dist_2d_lax_heavy(wavelength, kx_vector, n_I, theta, phi, fto_x, fto_y, T1, layer_info_list, period, # resolution=(10, 10, 10), # type_complex=jnp.complex128): # # k0 = 2 * jnp.pi / wavelength -# fourier_indices_y = jnp.arange(-fourier_order_y, fourier_order_y + 1) -# ff_x = fourier_order_x * 2 + 1 -# ff_y = fourier_order_y * 2 + 1 +# fourier_indices_y = jnp.arange(-fto_y, fto_y + 1) +# ff_x = fto_x * 2 + 1 +# ff_y = fto_y * 2 + 1 # ff_xy = ff_x * ff_y # ky_vector = k0 * (n_I * jnp.sin(theta) * jnp.sin(phi) + fourier_indices_y * ( # wavelength / period[1])).astype(type_complex) diff --git a/meent/on_numpy/emsolver/_base.py b/meent/on_numpy/emsolver/_base.py index 112416a..4ca5bf9 100644 --- a/meent/on_numpy/emsolver/_base.py +++ b/meent/on_numpy/emsolver/_base.py @@ -197,7 +197,7 @@ def get_kx_vector(self, wavelength): return kx_vector - def solve_1d(self, wavelength, E_conv_all, o_E_conv_all): + def solve_1d_d(self, wavelength, E_conv_all, o_E_conv_all): self.layer_info_list = [] self.T1 = None @@ -226,7 +226,7 @@ def solve_1d(self, wavelength, E_conv_all, o_E_conv_all): # From the last layer for layer_index in range(count)[::-1]: E_conv = E_conv_all[layer_index] - # o_E_conv = o_E_conv_all[layer_index] + o_E_conv = o_E_conv_all[layer_index] d = self.thickness[layer_index] @@ -242,14 +242,15 @@ def solve_1d(self, wavelength, E_conv_all, o_E_conv_all): elif self.pol == 1: E_conv_i = np.linalg.inv(E_conv) B = Kx @ E_conv_i @ Kx - np.eye(E_conv.shape[0], dtype=self.type_complex) - # o_E_conv_i = np.linalg.inv(o_E_conv) + o_E_conv_i = np.linalg.inv(o_E_conv) + + # eigenvalues, W = np.linalg.eig(E_conv @ B) + eigenvalues, W = np.linalg.eig(o_E_conv_i @ B) - eigenvalues, W = np.linalg.eig(E_conv @ B) eigenvalues += 0j # to get positive square root q = eigenvalues ** 0.5 Q = np.diag(q) - # V = o_E_conv @ W @ Q - V = E_conv_i @ W @ Q + V = o_E_conv @ W @ Q else: raise ValueError @@ -279,7 +280,7 @@ def solve_1d(self, wavelength, E_conv_all, o_E_conv_all): return de_ri, de_ti, self.layer_info_list, self.T1 - def solve_1d_conical(self, wavelength, E_conv_all, o_E_conv_all): + def solve_1d_conical_d(self, wavelength, E_conv_all, o_E_conv_all): self.layer_info_list = [] self.T1 = None @@ -307,6 +308,77 @@ def solve_1d_conical(self, wavelength, E_conv_all, o_E_conv_all): # From the last layer for layer_index in range(count)[::-1]: + E_conv = E_conv_all[layer_index] + o_E_conv = o_E_conv_all[layer_index] + + d = self.thickness[layer_index] + + E_conv_i = np.linalg.inv(E_conv) + o_E_conv_i = np.linalg.inv(o_E_conv) + + if self.algo == 'TMM': + big_X, big_F, big_G, big_T, big_A_i, big_B, W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 \ + = transfer_1d_conical_2(k0, Kx, ky, E_conv, E_conv_i, o_E_conv_i, ff, d, + varphi, big_F, big_G, big_T, + type_complex=self.type_complex) + layer_info = [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] + self.layer_info_list.append(layer_info) + + elif self.algo == 'SMM': + raise ValueError + else: + raise ValueError + + if self.algo == 'TMM': + de_ri, de_ti, big_T1 = transfer_1d_conical_3(big_F, big_G, big_T, Z_I, Y_I, self.psi, self.theta, ff, + delta_i0, k_I_z, k0, self.n_I, self.n_II, k_II_z, + type_complex=self.type_complex) + self.T1 = big_T1 + + elif self.algo == 'SMM': + raise ValueError + else: + raise ValueError + + return de_ri, de_ti, self.layer_info_list, self.T1 + + def solve_2d_d(self, wavelength, E_conv_all, o_E_conv_all): + + self.layer_info_list = [] + self.T1 = None + + fourier_indices_y = np.arange(-self.fourier_order[1], self.fourier_order[1] + 1) + + ff_x = self.fourier_order[0] * 2 + 1 + ff_y = self.fourier_order[1] * 2 + 1 + ff_xy = ff_x * ff_y + + delta_i0 = np.zeros((ff_xy, 1), dtype=self.type_complex) + delta_i0[ff_xy // 2, 0] = 1 + + I = np.eye(ff_xy, dtype=self.type_complex) + O = np.zeros((ff_xy, ff_xy), dtype=self.type_complex) + + center = ff_xy + + k0 = 2 * np.pi / wavelength + + if self.algo == 'TMM': + kx_vector, ky_vector, Kx, Ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ + = transfer_2d_1(ff_x, ff_y, ff_xy, k0, self.n_I, self.n_II, self.kx_vector, self.period, fourier_indices_y, + self.theta, self.phi, wavelength, type_complex=self.type_complex) + + elif self.algo == 'SMM': + Kx, Ky, kz_inc, Wg, Vg, Kzg, Wr, Vr, Kzr, Wt, Vt, Kzt, Ar, Br, Sg \ + = scattering_2d_1(self.n_I, self.n_II, self.theta, self.phi, k0, self.period, self.fourier_order) + else: + raise ValueError + + # for E_conv, o_E_conv, d in zip(E_conv_all[::-1], o_E_conv_all[::-1], self.thickness[::-1]): + count = min(len(E_conv_all), len(o_E_conv_all), len(self.thickness)) + + # From the last layer + for layer_index in range(count)[::-1]: E_conv = E_conv_all[layer_index] # o_E_conv = o_E_conv_all[layer_index] o_E_conv = None @@ -314,9 +386,174 @@ def solve_1d_conical(self, wavelength, E_conv_all, o_E_conv_all): d = self.thickness[layer_index] E_conv_i = np.linalg.inv(E_conv) + # o_E_conv_i = np.linalg.inv(o_E_conv) o_E_conv_i = None + + + epz_conv = E_conv_all[layer_index] + + epz_conv_i = np.linalg.inv(epz_conv) + + epx_conv = 0 + epy_conv = 0 + + + if self.algo == 'TMM': + W, V, q = transfer_2d_wv(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, type_complex=self.type_complex) + + big_X, big_F, big_G, big_T, big_A_i, big_B, \ + W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22 \ + = transfer_2d_2(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, + type_complex=self.type_complex) + + layer_info = [E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] + self.layer_info_list.append(layer_info) + + elif self.algo == 'SMM': + W, V, q = scattering_2d_wv(ff_xy, Kx, Ky, E_conv, o_E_conv, o_E_conv_i, E_conv_i) + A, B, Sl_dict, Sg_matrix, Sg = scattering_2d_2(W, Wg, V, Vg, d, k0, Sg, q) + else: + raise ValueError + + if self.algo == 'TMM': + de_ri, de_ti, big_T1 = transfer_2d_3(center, big_F, big_G, big_T, Z_I, Y_I, self.psi, self.theta, ff_xy, + delta_i0, k_I_z, k0, self.n_I, self.n_II, k_II_z, + type_complex=self.type_complex) + self.T1 = big_T1 + + elif self.algo == 'SMM': + de_ri, de_ti = scattering_2d_3(ff_xy, Wt, Wg, Vt, Vg, Sg, Wr, Kx, Ky, Kzr, Kzt, kz_inc, self.n_I, + self.pol, self.theta, self.phi, self.fourier_order) + else: + raise ValueError + de_ri = de_ri.reshape((ff_y, ff_x)).T + de_ti = de_ti.reshape((ff_y, ff_x)).T + + return de_ri, de_ti, self.layer_info_list, self.T1 + + def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): + self.layer_info_list = [] + self.T1 = None + + ff = self.fourier_order[0] * 2 + 1 + + delta_i0 = np.zeros(ff, dtype=self.type_complex) + delta_i0[self.fourier_order[0]] = 1 + + k0 = 2 * np.pi / wavelength + + if self.algo == 'TMM': + kx_vector, Kx, k_I_z, k_II_z, f, YZ_I, g, inc_term, T \ + = transfer_1d_1(ff, self.pol, k0, self.n_I, self.n_II, self.kx_vector, + self.theta, delta_i0, self.fourier_order, type_complex=self.type_complex) + elif self.algo == 'SMM': + Kx, Wg, Vg, Kzg, Wr, Vr, Kzr, Wt, Vt, Kzt, Ar, Br, Sg \ + = scattering_1d_1(k0, self.n_I, self.n_II, self.theta, self.phi, self.period, + self.pol, wl=wavelength) + else: + raise ValueError + + # From the last layer + # for E_conv, o_E_conv, d in zip(E_conv_all[::-1], o_E_conv_all[::-1], self.thickness[::-1]): + # count = min(len(epx_conv_all), len(self.thickness)) + assert len(epx_conv_all) == len(self.thickness) + + # From the last layer + for layer_index in range(len(self.thickness))[::-1]: + epx_conv = epx_conv_all[layer_index] + epy_conv = epy_conv_all[layer_index] + epz_i_conv = epz_i_conv_all[layer_index] + + d = self.thickness[layer_index] + + if self.pol == 0: + A = Kx ** 2 - epy_conv + eigenvalues, W = np.linalg.eig(A) + eigenvalues += 0j # to get positive square root + q = eigenvalues ** 0.5 + Q = np.diag(q) + V = W @ Q + + elif self.pol == 1: + B = Kx @ epz_i_conv @ Kx - np.eye(epy_conv.shape[0], dtype=self.type_complex) + + # eigenvalues, W = np.linalg.eig(E_conv @ B) + eigenvalues, W = np.linalg.eig(epx_conv @ B) + + eigenvalues += 0j # to get positive square root + q = eigenvalues ** 0.5 + + Q = np.diag(q) + + Q_i = np.diag(1/q) + V = epx_conv @ W @ Q_i + + else: + raise ValueError + + if self.algo == 'TMM': + X, f, g, T, a_i, b = transfer_1d_2(k0, q, d, W, V, f, g, self.fourier_order, T, + type_complex=self.type_complex) + + layer_info = [epz_i_conv, q, W, X, a_i, b, d] + self.layer_info_list.append(layer_info) + + elif self.algo == 'SMM': + A, B, S_dict, Sg = scattering_1d_2(W, Wg, V, Vg, d, k0, Q, Sg) + else: + raise ValueError + + if self.algo == 'TMM': + de_ri, de_ti, T1 = transfer_1d_3(g, YZ_I, f, delta_i0, inc_term, T, k_I_z, k0, self.n_I, self.n_II, + self.theta, self.pol, k_II_z) + self.T1 = T1 + + elif self.algo == 'SMM': + de_ri, de_ti = scattering_1d_3(Wt, Wg, Vt, Vg, Sg, ff, Wr, self.fourier_order, Kzr, Kzt, + self.n_I, self.n_II, self.theta, self.pol) + else: + raise ValueError + + return de_ri, de_ti, self.layer_info_list, self.T1 + + def solve_1d_conical(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): + + self.layer_info_list = [] + self.T1 = None + + ff = self.fourier_order[0] * 2 + 1 + + delta_i0 = np.zeros(ff, dtype=self.type_complex) + delta_i0[self.fourier_order[0]] = 1 + + k0 = 2 * np.pi / wavelength + + if self.algo == 'TMM': + Kx, ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ + = transfer_1d_conical_1(ff, k0, self.n_I, self.n_II, self.kx_vector, self.theta, self.phi, + type_complex=self.type_complex) + elif self.algo == 'SMM': + print('SMM for 1D conical is not implemented') + return np.nan, np.nan + else: + raise ValueError + + # for E_conv, o_E_conv, d in zip(E_conv_all[::-1], o_E_conv_all[::-1], self.thickness[::-1]): + count = min(len(E_conv_all), len(o_E_conv_all), len(self.thickness)) + + # From the last layer + for layer_index in range(count)[::-1]: + + E_conv = E_conv_all[layer_index] + o_E_conv = o_E_conv_all[layer_index] + + d = self.thickness[layer_index] + + E_conv_i = np.linalg.inv(E_conv) + o_E_conv_i = np.linalg.inv(o_E_conv) + if self.algo == 'TMM': big_X, big_F, big_G, big_T, big_A_i, big_B, W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 \ = transfer_1d_conical_2(k0, Kx, ky, E_conv, E_conv_i, o_E_conv_i, ff, d, @@ -343,7 +580,7 @@ def solve_1d_conical(self, wavelength, E_conv_all, o_E_conv_all): return de_ri, de_ti, self.layer_info_list, self.T1 - def solve_2d(self, wavelength, E_conv_all, o_E_conv_all): + def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): self.layer_info_list = [] self.T1 = None @@ -387,9 +624,20 @@ def solve_2d(self, wavelength, E_conv_all, o_E_conv_all): d = self.thickness[layer_index] E_conv_i = np.linalg.inv(E_conv) + # o_E_conv_i = np.linalg.inv(o_E_conv) o_E_conv_i = None + + + epz_conv = E_conv_all[layer_index] + + epz_conv_i = np.linalg.inv(epz_conv) + + epx_conv = 0 + epy_conv = 0 + + if self.algo == 'TMM': W, V, q = transfer_2d_wv(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, type_complex=self.type_complex) diff --git a/meent/on_numpy/emsolver/convolution_matrix.py b/meent/on_numpy/emsolver/convolution_matrix.py index 07e301d..577ece5 100644 --- a/meent/on_numpy/emsolver/convolution_matrix.py +++ b/meent/on_numpy/emsolver/convolution_matrix.py @@ -1,4 +1,5 @@ import numpy as np +from .fourier_analysis import dfs2d, cfs2d def cell_compression(cell, type_complex=np.complex128): @@ -81,134 +82,223 @@ def fft_piecewise_constant(cell, x, y, fourier_order_x, fourier_order_y, type_co return f_coeffs_xy.T -def to_conv_mat_vector(ucell_info_list, fourier_order_x, fourier_order_y, device=None, +def to_conv_mat_vector(ucell_info_list, fto_x, fto_y, device=None, type_complex=np.complex128): - ff_x = 2 * fourier_order_x + 1 - ff_y = 2 * fourier_order_y + 1 + ff_x = 2 * fto_x + 1 + ff_y = 2 * fto_y + 1 - e_conv_all = np.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - o_e_conv_all = np.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + # e_conv_all = np.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + # o_e_conv_all = np.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + + epx_conv_all = np.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + epy_conv_all = np.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + epz_i_conv_all = np.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) # 2D for i, ucell_info in enumerate(ucell_info_list): ucell_layer, x_list, y_list = ucell_info - ucell_layer = ucell_layer ** 2 + # ucell_layer = ucell_layer ** 2 + eps_compressed = ucell_layer ** 2 + + # f_coeffs = fft_piecewise_constant(ucell_layer, x_list, y_list, + # fto_x, fto_y, type_complex=type_complex) + # o_f_coeffs = fft_piecewise_constant(1 / ucell_layer, x_list, y_list, + # fto_x, fto_y, type_complex=type_complex) + + epx_f = cfs2d(eps_compressed, x_list, y_list, fto_x, fto_y, 0, 1, type_complex) + epy_f = cfs2d(eps_compressed, x_list, y_list, fto_x, fto_y, 1, 0, type_complex) + epz_f = cfs2d(eps_compressed, x_list, y_list, fto_x, fto_y, 1, 1, type_complex) + + # center = np.array(f_coeffs.shape) // 2 + center = np.array(epz_f.shape) // 2 - f_coeffs = fft_piecewise_constant(ucell_layer, x_list, y_list, - fourier_order_x, fourier_order_y, type_complex=type_complex) - o_f_coeffs = fft_piecewise_constant(1 / ucell_layer, x_list, y_list, - fourier_order_x, fourier_order_y, type_complex=type_complex) - center = np.array(f_coeffs.shape) // 2 + conv_y = np.arange(-ff_y + 1, ff_y, 1) + conv_y = circulant(conv_y) + conv_y = np.repeat(conv_y, ff_x, axis=1) + conv_y = np.repeat(conv_y, [ff_x] * ff_y, axis=0) - conv_idx_y = np.arange(-ff_y + 1, ff_y, 1) - conv_idx_y = circulant(conv_idx_y) - conv_i = np.repeat(conv_idx_y, ff_x, axis=1) - conv_i = np.repeat(conv_i, [ff_x] * ff_y, axis=0) + conv_x = np.arange(-ff_x + 1, ff_x, 1) + conv_x = circulant(conv_x) + conv_x = np.tile(conv_x, (ff_y, ff_y)) - conv_idx_x = np.arange(-ff_x + 1, ff_x, 1) - conv_idx_x = circulant(conv_idx_x) - conv_j = np.tile(conv_idx_x, (ff_y, ff_y)) + # e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] + # o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] + # e_conv_all[i] = e_conv + # o_e_conv_all[i] = o_e_conv - e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] - o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] + # XY to RC + epx_conv = epx_f[center[0] + conv_y, center[1] + conv_x] + epy_conv = epy_f[center[0] + conv_y, center[1] + conv_x] + epz_conv = epz_f[center[0] + conv_y, center[1] + conv_x] - e_conv_all[i] = e_conv - o_e_conv_all[i] = o_e_conv + epx_conv_all[i] = epx_conv + epy_conv_all[i] = epy_conv + epz_i_conv_all[i] = np.linalg.inv(epz_conv) - return e_conv_all, o_e_conv_all + # return e_conv_all, o_e_conv_all + return epx_conv_all, epy_conv_all, epz_i_conv_all -def to_conv_mat_raster_continuous(ucell, fourier_order_x, fourier_order_y, device=None, type_complex=np.complex128): +def to_conv_mat_raster_continuous(ucell, fto_x, fto_y, device=None, type_complex=np.complex128): ucell_pmt = ucell ** 2 if ucell_pmt.shape[1] == 1: # 1D - ff = 2 * fourier_order_x + 1 + ff = 2 * fto_x + 1 - e_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) - o_e_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + # e_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + # o_e_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + + epx_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + epy_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + epz_i_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) for i, layer in enumerate(ucell_pmt): - cell, x, y = cell_compression(layer, type_complex=type_complex) + eps_compressed, x, y = cell_compression(layer, type_complex=type_complex) + + # f_coeffs = fft_piecewise_constant(cell, x, y, fto_x, fto_y, type_complex=type_complex) + # o_f_coeffs = fft_piecewise_constant(1 / cell, x, y, fto_x, fto_y, type_complex=type_complex) + + epx_f = cfs2d(eps_compressed, x, y, fto_x, fto_y, 0, 1, type_complex) + epy_f = cfs2d(eps_compressed, x, y, fto_x, fto_y, 1, 0, type_complex) + epz_f = cfs2d(eps_compressed, x, y, fto_x, fto_y, 1, 1, type_complex) + + # center = np.array(f_coeffs.shape) // 2 + center = np.array(epz_f.shape) // 2 - f_coeffs = fft_piecewise_constant(cell, x, y, fourier_order_x, fourier_order_y, type_complex=type_complex) - o_f_coeffs = fft_piecewise_constant(1 / cell, x, y, fourier_order_x, fourier_order_y, type_complex=type_complex) + conv_x = np.arange(-ff + 1, ff, 1, dtype=int) + conv_x = circulant(conv_x) - center = np.array(f_coeffs.shape) // 2 - conv_idx = np.arange(-ff + 1, ff, 1, dtype=int) - conv_idx = circulant(conv_idx) - e_conv = f_coeffs[center[0], center[1] + conv_idx] - o_e_conv = o_f_coeffs[center[0], center[1] + conv_idx] - e_conv_all[i] = e_conv - o_e_conv_all[i] = o_e_conv + # e_conv = f_coeffs[center[0], center[1] + conv_idx] + # o_e_conv = o_f_coeffs[center[0], center[1] + conv_idx] + # e_conv_all[i] = e_conv + # o_e_conv_all[i] = o_e_conv + + # XY to RC + epx_conv = epx_f[center[0], center[1] + conv_x] + epy_conv = epy_f[center[0], center[1] + conv_x] + epz_conv = epz_f[center[0], center[1] + conv_x] + + epx_conv_all[i] = epx_conv + epy_conv_all[i] = epy_conv + epz_i_conv_all[i] = np.linalg.inv(epz_conv) else: # 2D - ff_x = 2 * fourier_order_x + 1 - ff_y = 2 * fourier_order_y + 1 + ff_x = 2 * fto_x + 1 + ff_y = 2 * fto_y + 1 - e_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - o_e_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + # e_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + # o_e_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + + epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + epz_i_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) for i, layer in enumerate(ucell_pmt): - cell, x, y = cell_compression(layer, type_complex=type_complex) + eps_compressed, x, y = cell_compression(layer, type_complex=type_complex) + + # f_coeffs = fft_piecewise_constant(cell, x, y, fto_x, fto_y, type_complex=type_complex) + # o_f_coeffs = fft_piecewise_constant(1 / cell, x, y, fto_x, fto_y, type_complex=type_complex) + + epx_f = cfs2d(eps_compressed, x, y, fto_x, fto_y, 0, 1, type_complex) + epy_f = cfs2d(eps_compressed, x, y, fto_x, fto_y, 1, 0, type_complex) + epz_f = cfs2d(eps_compressed, x, y, fto_x, fto_y, 1, 1, type_complex) + + # center = np.array(f_coeffs.shape) // 2 + center = np.array(epz_f.shape) // 2 + + conv_y = np.arange(-ff_y + 1, ff_y, 1) + conv_y = circulant(conv_y) + conv_y = np.repeat(conv_y, ff_x, axis=1) + conv_y = np.repeat(conv_y, [ff_x] * ff_y, axis=0) + + conv_x = np.arange(-ff_x + 1, ff_x, 1) + conv_x = circulant(conv_x) + conv_x = np.tile(conv_x, (ff_y, ff_y)) - f_coeffs = fft_piecewise_constant(cell, x, y, fourier_order_x, fourier_order_y, type_complex=type_complex) - o_f_coeffs = fft_piecewise_constant(1 / cell, x, y, fourier_order_x, fourier_order_y, type_complex=type_complex) - center = np.array(f_coeffs.shape) // 2 + # e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] + # o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] + # e_conv_all[i] = e_conv + # o_e_conv_all[i] = o_e_conv - conv_idx_y = np.arange(-ff_y + 1, ff_y, 1) - conv_idx_y = circulant(conv_idx_y) - conv_i = np.repeat(conv_idx_y, ff_x, axis=1) - conv_i = np.repeat(conv_i, [ff_x] * ff_y, axis=0) + # XY to RC + epx_conv = epx_f[center[0] + conv_y, center[1] + conv_x] + epy_conv = epy_f[center[0] + conv_y, center[1] + conv_x] + epz_conv = epz_f[center[0] + conv_y, center[1] + conv_x] - conv_idx_x = np.arange(-ff_x + 1, ff_x, 1) - conv_idx_x = circulant(conv_idx_x) - conv_j = np.tile(conv_idx_x, (ff_y, ff_y)) + epx_conv_all[i] = epx_conv + epy_conv_all[i] = epy_conv + epz_i_conv_all[i] = np.linalg.inv(epz_conv) - e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] - o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] - e_conv_all[i] = e_conv - o_e_conv_all[i] = o_e_conv - return e_conv_all, o_e_conv_all + # return e_conv_all, o_e_conv_all + return epx_conv_all, epy_conv_all, epz_i_conv_all -def to_conv_mat_raster_discrete(ucell, fourier_order_x, fourier_order_y, device=None, type_complex=np.complex128, +def to_conv_mat_raster_discrete(ucell, fto_x, fto_y, device=None, type_complex=np.complex128, improve_dft=True): ucell_pmt = ucell ** 2 if ucell_pmt.shape[1] == 1: # 1D - ff = 2 * fourier_order_x + 1 - e_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) - o_e_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + ff = 2 * fto_x + 1 + + # e_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + # o_e_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + + epx_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + epy_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + epz_i_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + if improve_dft: minimum_pattern_size = 2 * ff * ucell_pmt.shape[2] # TODO: scale factor is 2? to avoid alias? else: - minimum_pattern_size = 4 * fourier_order_x + 1 # TODO: align with other bds + minimum_pattern_size = 4 * fto_x + 1 # TODO: align with other bds for i, layer in enumerate(ucell_pmt): n = minimum_pattern_size // layer.shape[1] layer = np.repeat(layer, n + 1, axis=1) - f_coeffs = np.fft.fftshift(np.fft.fft(layer / layer.size).astype(type_complex)) - o_f_coeffs = np.fft.fftshift(np.fft.fft(1/layer / layer.size).astype(type_complex)) + + # f_coeffs = np.fft.fftshift(np.fft.fft(layer / layer.size).astype(type_complex)) + # o_f_coeffs = np.fft.fftshift(np.fft.fft(1/layer / layer.size).astype(type_complex)) + # FFT scaling: # https://kr.mathworks.com/matlabcentral/answers/15770-scaling-the-fft-and-the-ifft?s_tid=srchtitle - center = np.array(f_coeffs.shape) // 2 + epx_f = dfs2d(layer, 0, 1, type_complex) # inverse rule + epy_f = dfs2d(layer, 1, 0, type_complex) + epz_f = dfs2d(layer, 1, 1, type_complex) + + # center = np.array(f_coeffs.shape) // 2 + center = np.array(epz_f.shape) // 2 + + conv_x = np.arange(-ff + 1, ff, 1, dtype=int) + conv_x = circulant(conv_x) + + # e_conv = f_coeffs[center[0], center[1] + conv_idx] + # o_e_conv = o_f_coeffs[center[0], center[1] + conv_idx] + # e_conv_all[i] = e_conv + # o_e_conv_all[i] = o_e_conv + + # XY to RC + epx_conv = epx_f[center[0], center[1] + conv_x] + epy_conv = epy_f[center[0], center[1] + conv_x] + epz_conv = epz_f[center[0], center[1] + conv_x] + + epx_conv_all[i] = epx_conv + epy_conv_all[i] = epy_conv + epz_i_conv_all[i] = np.linalg.inv(epz_conv) - conv_idx = np.arange(-ff + 1, ff, 1, dtype=int) - conv_idx = circulant(conv_idx) - e_conv = f_coeffs[center[0], center[1] + conv_idx] - o_e_conv = o_f_coeffs[center[0], center[1] + conv_idx] - e_conv_all[i] = e_conv - o_e_conv_all[i] = o_e_conv else: # 2D - ff_x = 2 * fourier_order_x + 1 - ff_y = 2 * fourier_order_y + 1 + ff_x = 2 * fto_x + 1 + ff_y = 2 * fto_y + 1 - e_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - o_e_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + # e_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + # o_e_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + + epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + epz_i_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) if improve_dft: minimum_pattern_size_y = 2 * ff_y * ucell_pmt.shape[1] @@ -216,7 +306,7 @@ def to_conv_mat_raster_discrete(ucell, fourier_order_x, fourier_order_y, device= else: minimum_pattern_size_y = 2 * ff_y minimum_pattern_size_x = 2 * ff_x - # e.g., 8 bytes * (40*500) * (40*500) / 1E6 = 3200 MB = 3.2 GB + # e.g., 8 bytes * (40*500) * (40*500) / 1E6 = 3200 MB = 3.2 GB for i, layer in enumerate(ucell_pmt): if layer.shape[0] < minimum_pattern_size_y: @@ -227,24 +317,38 @@ def to_conv_mat_raster_discrete(ucell, fourier_order_x, fourier_order_y, device= n = minimum_pattern_size_x // layer.shape[1] layer = np.repeat(layer, n + 1, axis=1) - f_coeffs = np.fft.fftshift(np.fft.fft2(layer / layer.size).astype(type_complex)) - o_f_coeffs = np.fft.fftshift(np.fft.fft2(1/layer / layer.size).astype(type_complex)) - center = np.array(f_coeffs.shape) // 2 + # f_coeffs = np.fft.fftshift(np.fft.fft2(layer / layer.size).astype(type_complex)) + # o_f_coeffs = np.fft.fftshift(np.fft.fft2(1/layer / layer.size).astype(type_complex)) + + epx_f = dfs2d(layer, 0, 1, type_complex) + epy_f = dfs2d(layer, 1, 0, type_complex) + epz_f = dfs2d(layer, 1, 1, type_complex) + + center = np.array(epz_f.shape) // 2 + + conv_y = np.arange(-ff_y + 1, ff_y, 1) + conv_y = circulant(conv_y) + conv_y = np.repeat(conv_y, ff_x, axis=1) + conv_y = np.repeat(conv_y, [ff_x] * ff_y, axis=0) + + conv_x = np.arange(-ff_x + 1, ff_x, 1) + conv_x = circulant(conv_x) + conv_x = np.tile(conv_x, (ff_y, ff_y)) + + # e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] + # o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] + # e_conv_all[i] = e_conv + # o_e_conv_all[i] = o_e_conv - conv_idx_y = np.arange(-ff_y + 1, ff_y, 1) - conv_idx_y = circulant(conv_idx_y) - conv_i = np.repeat(conv_idx_y, ff_x, axis=1) - conv_i = np.repeat(conv_i, [ff_x] * ff_y, axis=0) + epx_conv = epx_f[center[0] + conv_y, center[1] + conv_x] + epy_conv = epy_f[center[0] + conv_y, center[1] + conv_x] + epz_conv = epz_f[center[0] + conv_y, center[1] + conv_x] - conv_idx_x = np.arange(-ff_x + 1, ff_x, 1) - conv_idx_x = circulant(conv_idx_x) - conv_j = np.tile(conv_idx_x, (ff_y, ff_y)) + epx_conv_all[i] = epx_conv + epy_conv_all[i] = epy_conv + epz_i_conv_all[i] = np.linalg.inv(epz_conv) - e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] - o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] - e_conv_all[i] = e_conv - o_e_conv_all[i] = o_e_conv - return e_conv_all, o_e_conv_all + return epx_conv_all, epy_conv_all, epz_i_conv_all def circulant(c): diff --git a/meent/on_numpy/emsolver/fourier_analysis.py b/meent/on_numpy/emsolver/fourier_analysis.py new file mode 100644 index 0000000..9e4417b --- /dev/null +++ b/meent/on_numpy/emsolver/fourier_analysis.py @@ -0,0 +1,88 @@ +import numpy as np + + +def _cfs(x, cell, fto, period, type_complex=np.complex128): + + cell_next = np.roll(cell, -1, axis=1) + cell_diff = cell_next - cell + + modes = np.arange(-2 * fto, 2 * fto + 1, 1) + + center = 2 * fto + nc = np.ones(len(modes), dtype=bool) + nc[center] = False + + x_next = np.vstack((np.roll(x, -1, axis=0)[:-1], period)) - x + + f = cell_diff @ np.exp(-1j * 2 * np.pi * x @ modes[None, :] / period, dtype=type_complex) + + f[:, nc] /= (1j * 2 * np.pi * modes[nc]) + f[:, center] = (cell @ np.vstack((x[0], x_next[:-1]))).flatten() / period + + return f + + +def cfs2d(cell, x, y, fto_x, fto_y, cx, cy, type_complex=np.complex128): + cell = cell.astype(type_complex) + + # (cx, cy) + # (1, 1): epz_conv; (0, 1): epx_conv; (1, 0): epy_conv + + period_x, period_y = x[-1], y[-1] + + # X axis + if cx == 0: # discontinuous in x: inverse rule is applied. + cell = 1 / cell + + fx = _cfs(x, cell, fto_x, period_x) + + if cx == 0: # discontinuous in x: inverse rule is applied. + fx = np.linalg.inv(fx) + + # Y axis + if cy == 0: + fx = np.linalg.inv(fx) + + fxy = _cfs(y, fx.T, fto_y, period_y).T + + if cy == 0: + fxy = np.linalg.inv(fxy) + + return fxy + + +def dfs2d(cell, cx, cy, type_complex=np.complex128): + cell = cell.astype(type_complex) + + # (cx, cy) + # (1, 1): epz_conv; (0, 1): epx_conv; (1, 0): epy_conv + + if cx == cy == 1: + fxy = np.fft.fft2(cell/cell.size).astype(type_complex) + + else: + rows, cols = cell.shape + + fxy = np.zeros([rows, cols], dtype=type_complex) + + if cx == 0: # discontinuous in x: inverse rule is applied. + cell = 1 / cell + + for r in range(rows): + fxy[r, :] = np.fft.fft(cell[r, :] / cols).astype(type_complex) + + if cx == 0: + fxy = np.linalg.inv(fxy) + + if cy == 0: # discontinuous in y: inverse rule is applied. + fxy = np.linalg.inv(fxy) + + for c in range(cols): + fxy[:, c] = np.fft.fft(fxy[:, c] / rows).astype(type_complex) + + if cy == 0: + fxy = np.linalg.inv(fxy) + + fxy = np.fft.fftshift(fxy) + + return fxy diff --git a/meent/on_numpy/emsolver/rcwa.py b/meent/on_numpy/emsolver/rcwa.py index d62449c..6aba7e4 100644 --- a/meent/on_numpy/emsolver/rcwa.py +++ b/meent/on_numpy/emsolver/rcwa.py @@ -67,7 +67,7 @@ def ucell(self, ucell): else: raise ValueError - def _solve(self, wavelength, e_conv_all, o_e_conv_all): + def _solve_d(self, wavelength, e_conv_all, o_e_conv_all): self.kx_vector = self.get_kx_vector(wavelength) if self.grating_type == 0: @@ -81,7 +81,21 @@ def _solve(self, wavelength, e_conv_all, o_e_conv_all): return de_ri, de_ti, layer_info_list, T1, self.kx_vector - def solve(self, wavelength, e_conv_all, o_e_conv_all): + def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): + self.kx_vector = self.get_kx_vector(wavelength) + + if self.grating_type == 0: + de_ri, de_ti, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all) + elif self.grating_type == 1: + de_ri, de_ti, layer_info_list, T1 = self.solve_1d_conical(wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all) + elif self.grating_type == 2: + de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all) + else: + raise ValueError + + return de_ri, de_ti, layer_info_list, T1, self.kx_vector + + def solve_d(self, wavelength, e_conv_all, o_e_conv_all): de_ri, de_ti, layer_info_list, T1, kx_vector = self._solve(wavelength, e_conv_all, o_e_conv_all) self.layer_info_list = layer_info_list @@ -90,7 +104,16 @@ def solve(self, wavelength, e_conv_all, o_e_conv_all): return de_ri, de_ti - def conv_solve(self, **kwargs): + def solve(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): + de_ri, de_ti, layer_info_list, T1, kx_vector = self._solve(wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all) + + self.layer_info_list = layer_info_list + self.T1 = T1 + self.kx_vector = kx_vector + + return de_ri, de_ti + + def conv_solve_d(self, **kwargs): # [setattr(self, k, v) for k, v in kwargs.items()] # no need in npmeent if self.fft_type == 0: @@ -114,6 +137,30 @@ def conv_solve(self, **kwargs): return de_ri, de_ti + def conv_solve(self, **kwargs): + # [setattr(self, k, v) for k, v in kwargs.items()] # no need in npmeent + + if self.fft_type == 0: + epx_conv_all, epy_conv_all, epz_i_conv_all = to_conv_mat_raster_discrete(self.ucell, self.fourier_order[0], self.fourier_order[1], + type_complex=self.type_complex, improve_dft=self.improve_dft) + elif self.fft_type == 1: + epx_conv_all, epy_conv_all, epz_i_conv_all = to_conv_mat_raster_continuous(self.ucell, self.fourier_order[0], self.fourier_order[1], + type_complex=self.type_complex) + elif self.fft_type == 2: + epx_conv_all, epy_conv_all, epz_i_conv_all = to_conv_mat_vector(self.ucell_info_list, self.fourier_order[0], + self.fourier_order[1], + type_complex=self.type_complex) + else: + raise ValueError + + de_ri, de_ti, layer_info_list, T1, kx_vector = self._solve(self.wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all) + + self.layer_info_list = layer_info_list + self.T1 = T1 + self.kx_vector = kx_vector + + return de_ri, de_ti + def calculate_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): if self.grating_type == 0: res_y = 1 diff --git a/meent/on_numpy/emsolver/scattering_method.py b/meent/on_numpy/emsolver/scattering_method.py index aa7fc33..9726a5b 100644 --- a/meent/on_numpy/emsolver/scattering_method.py +++ b/meent/on_numpy/emsolver/scattering_method.py @@ -78,7 +78,7 @@ def scattering_2d_1(n_I, n_II, theta, phi, k0, period, fourier_order): ky_inc = n_I * np.sin(theta) * np.sin(phi) kz_inc = np.sqrt(n_I ** 2 * 1 - kx_inc ** 2 - ky_inc ** 2) - Kx, Ky = K_matrix_cubic_2D(kx_inc, ky_inc, k0, period[0], period[1], fourier_order, fourier_order) + Kx, Ky = K_matrix_cubic_2D(kx_inc, ky_inc, k0, period[0], period[1], fourier_order[0], fourier_order[1]) # specify gap media (this is an LHI so no eigenvalue problem should be solved e_h = 1 @@ -111,8 +111,8 @@ def scattering_2d_2(W, Wg, V, Vg, d, k0, Sg, LAMBDA): return A, B, Sl_dict, Sg_matrix, Sg -def scattering_2d_3(Wt, Wg, Vt, Vg, Sg, Wr, Kx, Ky, Kzr, Kzt, kz_inc, n_I, pol, theta, - phi, fourier_order, ff): +def scattering_2d_3(ff, Wt, Wg, Vt, Vg, Sg, Wr, Kx, Ky, Kzr, Kzt, kz_inc, n_I, pol, theta, + phi, fourier_order): normal_vector = np.array([0, 0, 1]) # positive z points down; # amplitude of the te vs tm modes (which are decoupled) @@ -125,9 +125,9 @@ def scattering_2d_3(Wt, Wg, Vt, Vg, Sg, Wr, Kx, Ky, Kzr, Kzt, kz_inc, n_I, pol, else: raise ValueError - M = N = fourier_order + M, N = fourier_order NM = ff ** 2 - + NM = ff # get At, Bt # since transmission is the same as gap, order does not matter At, Bt = A_B_matrices_half_space(Vt, Vg) @@ -168,6 +168,7 @@ def scattering_2d_wv(ff, Kx, Ky, E_conv, oneover_E_conv, oneover_E_conv_i, E_i, # ------------------------- # W and V from SMM method. NM = ff ** 2 + NM = ff if mu_conv is None: mu_conv = np.identity(NM) diff --git a/meent/on_numpy/emsolver/transfer_method.py b/meent/on_numpy/emsolver/transfer_method.py index 2554692..fd6b765 100644 --- a/meent/on_numpy/emsolver/transfer_method.py +++ b/meent/on_numpy/emsolver/transfer_method.py @@ -121,8 +121,9 @@ def transfer_1d_conical_2(k0, Kx, ky, E_conv, E_conv_i, o_E_conv_i, ff, d, varph B_i = np.linalg.inv(B) to_decompose_W_1 = (ky/k0) ** 2 * I + A - # to_decompose_W_2 = (ky/k0) ** 2 * I + B @ o_E_conv_i - to_decompose_W_2 = (ky/k0) ** 2 * I + B @ E_conv + + to_decompose_W_2 = (ky/k0) ** 2 * I + B @ o_E_conv_i + # to_decompose_W_2 = (ky/k0) ** 2 * I + B @ E_conv eigenvalues_1, W_1 = np.linalg.eig(to_decompose_W_1) eigenvalues_2, W_2 = np.linalg.eig(to_decompose_W_2) diff --git a/meent/on_torch/emsolver/convolution_matrix.py b/meent/on_torch/emsolver/convolution_matrix.py index d568b4e..dd6e573 100644 --- a/meent/on_torch/emsolver/convolution_matrix.py +++ b/meent/on_torch/emsolver/convolution_matrix.py @@ -138,10 +138,10 @@ def to_conv_mat_vector(ucell_info_list, fourier_order_x, fourier_order_y, device # return c.T # # -# def to_conv_mat_continuous_vector_sinc(ucell_info_list, fourier_order_x, fourier_order_y, device=torch.device('cpu'), +# def to_conv_mat_continuous_vector_sinc(ucell_info_list, fto_x, fto_y, device=torch.device('cpu'), # type_complex=torch.complex128): -# ff_x = 2 * fourier_order_x + 1 -# ff_y = 2 * fourier_order_y + 1 +# ff_x = 2 * fto_x + 1 +# ff_y = 2 * fto_y + 1 # # e_conv_all = torch.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).type(type_complex) # o_e_conv_all = torch.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).type(type_complex) @@ -155,9 +155,9 @@ def to_conv_mat_vector(ucell_info_list, fourier_order_x, fourier_order_y, device # # y_list = torch.tensor(y_list, dtype=type_complex) if type(y_list) != torch.Tensor else y_list # # f_coeffs = fft_piecewise_constant_vector(ucell_layer, x_list, y_list, -# fourier_order_x, fourier_order_y, type_complex=type_complex) +# fto_x, fto_y, type_complex=type_complex) # o_f_coeffs = fft_piecewise_constant_vector(1/ucell_layer, x_list, y_list, -# fourier_order_x, fourier_order_y, type_complex=type_complex) +# fto_x, fto_y, type_complex=type_complex) # # import seaborn as sns # import matplotlib.pyplot as plt diff --git a/meent/on_torch/emsolver/scattering_method.py b/meent/on_torch/emsolver/scattering_method.py index aa7fc33..98d62c0 100644 --- a/meent/on_torch/emsolver/scattering_method.py +++ b/meent/on_torch/emsolver/scattering_method.py @@ -78,7 +78,7 @@ def scattering_2d_1(n_I, n_II, theta, phi, k0, period, fourier_order): ky_inc = n_I * np.sin(theta) * np.sin(phi) kz_inc = np.sqrt(n_I ** 2 * 1 - kx_inc ** 2 - ky_inc ** 2) - Kx, Ky = K_matrix_cubic_2D(kx_inc, ky_inc, k0, period[0], period[1], fourier_order, fourier_order) + Kx, Ky = K_matrix_cubic_2D(kx_inc, ky_inc, k0, period[0], period[1], fourier_order[0], fourier_order[1]) # specify gap media (this is an LHI so no eigenvalue problem should be solved e_h = 1 From 68f2ce8c42222d5a376d33032ae813c50351bc44 Mon Sep 17 00:00:00 2001 From: yonghakim Date: Fri, 19 Jul 2024 15:40:33 +0900 Subject: [PATCH 02/15] updating --- meent/on_numpy/emsolver/_base.py | 445 ++++----------- meent/on_numpy/emsolver/convolution_matrix.py | 225 +++----- meent/on_numpy/emsolver/field_distribution.py | 16 +- meent/on_numpy/emsolver/fourier_analysis.py | 533 ++++++++++++++++-- meent/on_numpy/emsolver/rcwa.py | 82 +-- meent/on_numpy/emsolver/transfer_method.py | 385 +++++++++---- setup.py | 2 +- 7 files changed, 951 insertions(+), 737 deletions(-) diff --git a/meent/on_numpy/emsolver/_base.py b/meent/on_numpy/emsolver/_base.py index 4ca5bf9..d5f02a6 100644 --- a/meent/on_numpy/emsolver/_base.py +++ b/meent/on_numpy/emsolver/_base.py @@ -2,12 +2,12 @@ from .scattering_method import scattering_1d_1, scattering_1d_2, scattering_1d_3, scattering_2d_1, scattering_2d_wv, \ scattering_2d_2, scattering_2d_3 -from .transfer_method import transfer_1d_1, transfer_1d_2, transfer_1d_3, transfer_1d_conical_1, transfer_1d_conical_2, \ - transfer_1d_conical_3, transfer_2d_1, transfer_2d_wv, transfer_2d_2, transfer_2d_3 +from .transfer_method import transfer_1d_1, transfer_1d_2, transfer_1d_3, transfer_1d_4, transfer_1d_conical_1, transfer_1d_conical_2, \ + transfer_1d_conical_3, transfer_1d_conical_4, transfer_2d_1, transfer_2d_2, transfer_2d_3, transfer_2d_4 class _BaseRCWA: - def __init__(self, grating_type, n_I=1., n_II=1., theta=0., phi=0., pol=0., fourier_order=(2, 2), + def __init__(self, grating_type, n_I=1., n_II=1., theta=0., phi=0., pol=0., fto=(2, 2), period=(100., 100.), wavelength=900., thickness=(0., ), algo='TMM', perturbation=1E-20, type_complex=np.complex128, *args, **kwargs): @@ -37,14 +37,14 @@ def __init__(self, grating_type, n_I=1., n_II=1., theta=0., phi=0., pol=0., four self.pol = pol self._psi = np.array((np.pi / 2 * (1 - pol)), dtype=self.type_float) - self.fourier_order = fourier_order + self.fto = fto self.period = period self.wavelength = wavelength self.thickness = thickness self.algo = algo self.layer_info_list = [] self.T1 = None - self.kx_vector = None # only kx, not ky, because kx is always used while ky is 2D only. + # self.kx_vector = None # only kx, not ky, because kx is always used while ky is 2D only. @property def device(self): @@ -75,7 +75,7 @@ def type_complex(self, type_complex): self.phi = self.phi self._psi = self.psi - self.fourier_order = self.fourier_order + self.fto = self.fto self.thickness = self.thickness @property @@ -127,11 +127,11 @@ def psi(self): return self._psi @property - def fourier_order(self): + def fto(self): return self._fourier_order - @fourier_order.setter - def fourier_order(self, fourier_order): + @fto.setter + def fto(self, fourier_order): if type(fourier_order) in (list, tuple): if len(fourier_order) == 1: @@ -186,7 +186,7 @@ def thickness(self, thickness): def get_kx_vector(self, wavelength): k0 = 2 * np.pi / wavelength - fourier_indices_x = np.arange(-self.fourier_order[0], self.fourier_order[0] + 1) + fourier_indices_x = np.arange(-self.fto[0], self.fto[0] + 1) if self.grating_type == 0: kx_vector = k0 * (self.n_I * np.sin(self.theta) + fourier_indices_x * (wavelength / self.period[0]) @@ -197,257 +197,40 @@ def get_kx_vector(self, wavelength): return kx_vector - def solve_1d_d(self, wavelength, E_conv_all, o_E_conv_all): - self.layer_info_list = [] - self.T1 = None - - ff = self.fourier_order[0] * 2 + 1 - - delta_i0 = np.zeros(ff, dtype=self.type_complex) - delta_i0[self.fourier_order[0]] = 1 - + def get_kx_ky_vector(self, wavelength): k0 = 2 * np.pi / wavelength + fto_x_range = np.arange(-self.fto[0], self.fto[0] + 1) + fto_y_range = np.arange(-self.fto[1], self.fto[1] + 1) - if self.algo == 'TMM': - kx_vector, Kx, k_I_z, k_II_z, f, YZ_I, g, inc_term, T \ - = transfer_1d_1(ff, self.pol, k0, self.n_I, self.n_II, self.kx_vector, - self.theta, delta_i0, self.fourier_order, type_complex=self.type_complex) - elif self.algo == 'SMM': - Kx, Wg, Vg, Kzg, Wr, Vr, Kzr, Wt, Vt, Kzt, Ar, Br, Sg \ - = scattering_1d_1(k0, self.n_I, self.n_II, self.theta, self.phi, self.period, - self.pol, wl=wavelength) + if self.grating_type == 0: + kx_vector = k0 * (self.n_I * np.sin(self.theta) + fto_x_range * (wavelength / self.period[0]) + ).astype(self.type_complex) else: - raise ValueError - - # From the last layer - # for E_conv, o_E_conv, d in zip(E_conv_all[::-1], o_E_conv_all[::-1], self.thickness[::-1]): - count = min(len(E_conv_all), len(o_E_conv_all), len(self.thickness)) - - # From the last layer - for layer_index in range(count)[::-1]: - E_conv = E_conv_all[layer_index] - o_E_conv = o_E_conv_all[layer_index] - - d = self.thickness[layer_index] - - if self.pol == 0: - E_conv_i = None - A = Kx ** 2 - E_conv - eigenvalues, W = np.linalg.eig(A) - eigenvalues += 0j # to get positive square root - q = eigenvalues ** 0.5 - Q = np.diag(q) - V = W @ Q - - elif self.pol == 1: - E_conv_i = np.linalg.inv(E_conv) - B = Kx @ E_conv_i @ Kx - np.eye(E_conv.shape[0], dtype=self.type_complex) - o_E_conv_i = np.linalg.inv(o_E_conv) - - # eigenvalues, W = np.linalg.eig(E_conv @ B) - eigenvalues, W = np.linalg.eig(o_E_conv_i @ B) - - eigenvalues += 0j # to get positive square root - q = eigenvalues ** 0.5 - Q = np.diag(q) - V = o_E_conv @ W @ Q - - else: - raise ValueError - - if self.algo == 'TMM': - X, f, g, T, a_i, b = transfer_1d_2(k0, q, d, W, V, f, g, self.fourier_order, T, - type_complex=self.type_complex) - - layer_info = [E_conv_i, q, W, X, a_i, b, d] - self.layer_info_list.append(layer_info) - - elif self.algo == 'SMM': - A, B, S_dict, Sg = scattering_1d_2(W, Wg, V, Vg, d, k0, Q, Sg) - else: - raise ValueError + kx_vector = k0 * (self.n_I * np.sin(self.theta) * np.cos(self.phi) + fto_x_range * ( + wavelength / self.period[0])).astype(self.type_complex) - if self.algo == 'TMM': - de_ri, de_ti, T1 = transfer_1d_3(g, YZ_I, f, delta_i0, inc_term, T, k_I_z, k0, self.n_I, self.n_II, - self.theta, self.pol, k_II_z) - self.T1 = T1 + ky_vector = k0 * (self.n_I * np.sin(self.theta) * np.sin(self.phi) + fto_y_range * ( + wavelength / self.period[1])).astype(self.type_complex) - elif self.algo == 'SMM': - de_ri, de_ti = scattering_1d_3(Wt, Wg, Vt, Vg, Sg, ff, Wr, self.fourier_order, Kzr, Kzt, - self.n_I, self.n_II, self.theta, self.pol) - else: - raise ValueError - - return de_ri, de_ti, self.layer_info_list, self.T1 - - def solve_1d_conical_d(self, wavelength, E_conv_all, o_E_conv_all): + return kx_vector, ky_vector + def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): self.layer_info_list = [] self.T1 = None - ff = self.fourier_order[0] * 2 + 1 + ff = self.fto[0] * 2 + 1 delta_i0 = np.zeros(ff, dtype=self.type_complex) - delta_i0[self.fourier_order[0]] = 1 - - k0 = 2 * np.pi / wavelength - - if self.algo == 'TMM': - Kx, ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ - = transfer_1d_conical_1(ff, k0, self.n_I, self.n_II, self.kx_vector, self.theta, self.phi, - type_complex=self.type_complex) - elif self.algo == 'SMM': - print('SMM for 1D conical is not implemented') - return np.nan, np.nan - else: - raise ValueError - - # for E_conv, o_E_conv, d in zip(E_conv_all[::-1], o_E_conv_all[::-1], self.thickness[::-1]): - count = min(len(E_conv_all), len(o_E_conv_all), len(self.thickness)) - - # From the last layer - for layer_index in range(count)[::-1]: - - E_conv = E_conv_all[layer_index] - o_E_conv = o_E_conv_all[layer_index] - - d = self.thickness[layer_index] - - E_conv_i = np.linalg.inv(E_conv) - o_E_conv_i = np.linalg.inv(o_E_conv) - - if self.algo == 'TMM': - big_X, big_F, big_G, big_T, big_A_i, big_B, W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 \ - = transfer_1d_conical_2(k0, Kx, ky, E_conv, E_conv_i, o_E_conv_i, ff, d, - varphi, big_F, big_G, big_T, - type_complex=self.type_complex) - layer_info = [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] - self.layer_info_list.append(layer_info) - - elif self.algo == 'SMM': - raise ValueError - else: - raise ValueError - - if self.algo == 'TMM': - de_ri, de_ti, big_T1 = transfer_1d_conical_3(big_F, big_G, big_T, Z_I, Y_I, self.psi, self.theta, ff, - delta_i0, k_I_z, k0, self.n_I, self.n_II, k_II_z, - type_complex=self.type_complex) - self.T1 = big_T1 - - elif self.algo == 'SMM': - raise ValueError - else: - raise ValueError - - return de_ri, de_ti, self.layer_info_list, self.T1 - - def solve_2d_d(self, wavelength, E_conv_all, o_E_conv_all): - - self.layer_info_list = [] - self.T1 = None - - fourier_indices_y = np.arange(-self.fourier_order[1], self.fourier_order[1] + 1) - - ff_x = self.fourier_order[0] * 2 + 1 - ff_y = self.fourier_order[1] * 2 + 1 - ff_xy = ff_x * ff_y - - delta_i0 = np.zeros((ff_xy, 1), dtype=self.type_complex) - delta_i0[ff_xy // 2, 0] = 1 - - I = np.eye(ff_xy, dtype=self.type_complex) - O = np.zeros((ff_xy, ff_xy), dtype=self.type_complex) - - center = ff_xy + delta_i0[self.fto[0]] = 1 k0 = 2 * np.pi / wavelength - if self.algo == 'TMM': - kx_vector, ky_vector, Kx, Ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ - = transfer_2d_1(ff_x, ff_y, ff_xy, k0, self.n_I, self.n_II, self.kx_vector, self.period, fourier_indices_y, - self.theta, self.phi, wavelength, type_complex=self.type_complex) - - elif self.algo == 'SMM': - Kx, Ky, kz_inc, Wg, Vg, Kzg, Wr, Vr, Kzr, Wt, Vt, Kzt, Ar, Br, Sg \ - = scattering_2d_1(self.n_I, self.n_II, self.theta, self.phi, k0, self.period, self.fourier_order) - else: - raise ValueError - - # for E_conv, o_E_conv, d in zip(E_conv_all[::-1], o_E_conv_all[::-1], self.thickness[::-1]): - count = min(len(E_conv_all), len(o_E_conv_all), len(self.thickness)) - - # From the last layer - for layer_index in range(count)[::-1]: - E_conv = E_conv_all[layer_index] - # o_E_conv = o_E_conv_all[layer_index] - o_E_conv = None - - d = self.thickness[layer_index] - - E_conv_i = np.linalg.inv(E_conv) - - # o_E_conv_i = np.linalg.inv(o_E_conv) - o_E_conv_i = None - - - - epz_conv = E_conv_all[layer_index] - - epz_conv_i = np.linalg.inv(epz_conv) - - epx_conv = 0 - epy_conv = 0 - - - if self.algo == 'TMM': - W, V, q = transfer_2d_wv(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, type_complex=self.type_complex) - - big_X, big_F, big_G, big_T, big_A_i, big_B, \ - W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22 \ - = transfer_2d_2(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, - type_complex=self.type_complex) - - layer_info = [E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] - self.layer_info_list.append(layer_info) - - elif self.algo == 'SMM': - W, V, q = scattering_2d_wv(ff_xy, Kx, Ky, E_conv, o_E_conv, o_E_conv_i, E_conv_i) - A, B, Sl_dict, Sg_matrix, Sg = scattering_2d_2(W, Wg, V, Vg, d, k0, Sg, q) - else: - raise ValueError + kx_vector, _ = self.get_kx_ky_vector(wavelength) if self.algo == 'TMM': - de_ri, de_ti, big_T1 = transfer_2d_3(center, big_F, big_G, big_T, Z_I, Y_I, self.psi, self.theta, ff_xy, - delta_i0, k_I_z, k0, self.n_I, self.n_II, k_II_z, - type_complex=self.type_complex) - self.T1 = big_T1 - - elif self.algo == 'SMM': - de_ri, de_ti = scattering_2d_3(ff_xy, Wt, Wg, Vt, Vg, Sg, Wr, Kx, Ky, Kzr, Kzt, kz_inc, self.n_I, - self.pol, self.theta, self.phi, self.fourier_order) - else: - raise ValueError - de_ri = de_ri.reshape((ff_y, ff_x)).T - de_ti = de_ti.reshape((ff_y, ff_x)).T - - return de_ri, de_ti, self.layer_info_list, self.T1 - - def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): - self.layer_info_list = [] - self.T1 = None - - ff = self.fourier_order[0] * 2 + 1 - - delta_i0 = np.zeros(ff, dtype=self.type_complex) - delta_i0[self.fourier_order[0]] = 1 - - k0 = 2 * np.pi / wavelength - - if self.algo == 'TMM': - kx_vector, Kx, k_I_z, k_II_z, f, YZ_I, g, inc_term, T \ - = transfer_1d_1(ff, self.pol, k0, self.n_I, self.n_II, self.kx_vector, - self.theta, delta_i0, self.fourier_order, type_complex=self.type_complex) + kx_vector, Kx, kz_top, kz_bot, f, YZ_I, g, inc_term, T \ + = transfer_1d_1(ff, self.pol, k0, self.n_I, self.n_II, kx_vector, + self.theta, delta_i0, self.fto, type_complex=self.type_complex) elif self.algo == 'SMM': Kx, Wg, Vg, Kzg, Wr, Vr, Kzr, Wt, Vt, Kzt, Ar, Br, Sg \ = scattering_1d_1(k0, self.n_I, self.n_II, self.theta, self.phi, self.period, @@ -462,42 +245,42 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): # From the last layer for layer_index in range(len(self.thickness))[::-1]: + epx_conv = epx_conv_all[layer_index] epy_conv = epy_conv_all[layer_index] - epz_i_conv = epz_i_conv_all[layer_index] + epz_conv_i = epz_conv_i_all[layer_index] d = self.thickness[layer_index] - - if self.pol == 0: - A = Kx ** 2 - epy_conv - eigenvalues, W = np.linalg.eig(A) - eigenvalues += 0j # to get positive square root - q = eigenvalues ** 0.5 - Q = np.diag(q) - V = W @ Q - - elif self.pol == 1: - B = Kx @ epz_i_conv @ Kx - np.eye(epy_conv.shape[0], dtype=self.type_complex) - - # eigenvalues, W = np.linalg.eig(E_conv @ B) - eigenvalues, W = np.linalg.eig(epx_conv @ B) - - eigenvalues += 0j # to get positive square root - q = eigenvalues ** 0.5 - - Q = np.diag(q) - - Q_i = np.diag(1/q) - V = epx_conv @ W @ Q_i - - else: - raise ValueError + # if self.pol == 0: + # A = Kx ** 2 - epy_conv + # eigenvalues, W = np.linalg.eig(A) + # eigenvalues += 0j # to get positive square root + # q = eigenvalues ** 0.5 + # Q = np.diag(q) + # V = W @ Q + # + # elif self.pol == 1: + # B = Kx @ epz_conv_i @ Kx - np.eye(epy_conv.shape[0], dtype=self.type_complex) + # + # # eigenvalues, W = np.linalg.eig(E_conv @ B) + # eigenvalues, W = np.linalg.eig(epx_conv @ B) + # + # eigenvalues += 0j # to get positive square root + # q = eigenvalues ** 0.5 + # + # Q = np.diag(q) + # V = np.linalg.inv(epx_conv) @ W @ Q + # + # else: + # raise ValueError if self.algo == 'TMM': - X, f, g, T, a_i, b = transfer_1d_2(k0, q, d, W, V, f, g, self.fourier_order, T, + W, V, q = transfer_1d_2(self.pol, Kx, epx_conv, epy_conv, epz_conv_i, self.type_complex) + + X, f, g, T, a_i, b = transfer_1d_3(k0, W, V, q, d, f, g, T, type_complex=self.type_complex) - layer_info = [epz_i_conv, q, W, X, a_i, b, d] + layer_info = [epz_conv_i, W, V, q, d, X, a_i, b] # TODO: change field recover code self.layer_info_list.append(layer_info) elif self.algo == 'SMM': @@ -506,33 +289,31 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): raise ValueError if self.algo == 'TMM': - de_ri, de_ti, T1 = transfer_1d_3(g, YZ_I, f, delta_i0, inc_term, T, k_I_z, k0, self.n_I, self.n_II, - self.theta, self.pol, k_II_z) + de_ri, de_ti, T1 = transfer_1d_4(g, YZ_I, f, delta_i0, inc_term, T, kz_top, k0, self.n_I, self.n_II, + self.theta, self.pol, kz_bot) self.T1 = T1 elif self.algo == 'SMM': - de_ri, de_ti = scattering_1d_3(Wt, Wg, Vt, Vg, Sg, ff, Wr, self.fourier_order, Kzr, Kzt, + de_ri, de_ti = scattering_1d_3(Wt, Wg, Vt, Vg, Sg, ff, Wr, self.fto, Kzr, Kzt, self.n_I, self.n_II, self.theta, self.pol) else: raise ValueError return de_ri, de_ti, self.layer_info_list, self.T1 - def solve_1d_conical(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): + def solve_1d_conical(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): self.layer_info_list = [] self.T1 = None - ff = self.fourier_order[0] * 2 + 1 - - delta_i0 = np.zeros(ff, dtype=self.type_complex) - delta_i0[self.fourier_order[0]] = 1 + ff_x = self.fto[0] * 2 + 1 k0 = 2 * np.pi / wavelength + kx_vector, ky_vector = self.get_kx_ky_vector(wavelength) if self.algo == 'TMM': - Kx, ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ - = transfer_1d_conical_1(ff, k0, self.n_I, self.n_II, self.kx_vector, self.theta, self.phi, + Kx, Ky, kz_top, kz_bot, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ + = transfer_1d_conical_1(k0, ff_x, kx_vector, ky_vector, self.n_I, self.n_II, type_complex=self.type_complex) elif self.algo == 'SMM': print('SMM for 1D conical is not implemented') @@ -540,26 +321,25 @@ def solve_1d_conical(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_al else: raise ValueError - # for E_conv, o_E_conv, d in zip(E_conv_all[::-1], o_E_conv_all[::-1], self.thickness[::-1]): - count = min(len(E_conv_all), len(o_E_conv_all), len(self.thickness)) + assert len(epx_conv_all) == len(self.thickness) # From the last layer - for layer_index in range(count)[::-1]: + # for layer_index in range(count)[::-1]: + for layer_index in range(len(self.thickness))[::-1]: - E_conv = E_conv_all[layer_index] - o_E_conv = o_E_conv_all[layer_index] + epx_conv = epx_conv_all[layer_index] + epy_conv = epy_conv_all[layer_index] + epz_conv_i = epz_conv_i_all[layer_index] d = self.thickness[layer_index] - E_conv_i = np.linalg.inv(E_conv) - o_E_conv_i = np.linalg.inv(o_E_conv) - if self.algo == 'TMM': - big_X, big_F, big_G, big_T, big_A_i, big_B, W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 \ - = transfer_1d_conical_2(k0, Kx, ky, E_conv, E_conv_i, o_E_conv_i, ff, d, - varphi, big_F, big_G, big_T, - type_complex=self.type_complex) - layer_info = [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] + W, V, q = transfer_1d_conical_2(Kx, Ky, epx_conv, epy_conv, epz_conv_i, type_complex=self.type_complex) + + big_X, big_F, big_G, big_T, big_A_i, big_B, \ + = transfer_1d_conical_3(k0,W, V, q, d, varphi, big_F, big_G, big_T, type_complex=self.type_complex) + + layer_info = [epz_conv_i, W, V, q, d, big_X, big_A_i, big_B] # TODO: change field recover code self.layer_info_list.append(layer_info) elif self.algo == 'SMM': @@ -568,8 +348,8 @@ def solve_1d_conical(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_al raise ValueError if self.algo == 'TMM': - de_ri, de_ti, big_T1 = transfer_1d_conical_3(big_F, big_G, big_T, Z_I, Y_I, self.psi, self.theta, ff, - delta_i0, k_I_z, k0, self.n_I, self.n_II, k_II_z, + de_ri, de_ti, big_T1 = transfer_1d_conical_4(k0, big_F, big_G, big_T, Z_I, Y_I, kz_top, kz_bot, + self.psi, self.theta, self.n_I, self.n_II, type_complex=self.type_complex) self.T1 = big_T1 @@ -580,73 +360,45 @@ def solve_1d_conical(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_al return de_ri, de_ti, self.layer_info_list, self.T1 - def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): + def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): self.layer_info_list = [] self.T1 = None - fourier_indices_y = np.arange(-self.fourier_order[1], self.fourier_order[1] + 1) - - ff_x = self.fourier_order[0] * 2 + 1 - ff_y = self.fourier_order[1] * 2 + 1 - ff_xy = ff_x * ff_y - - delta_i0 = np.zeros((ff_xy, 1), dtype=self.type_complex) - delta_i0[ff_xy // 2, 0] = 1 - - I = np.eye(ff_xy, dtype=self.type_complex) - O = np.zeros((ff_xy, ff_xy), dtype=self.type_complex) - - center = ff_xy + ff_x = self.fto[0] * 2 + 1 + ff_y = self.fto[1] * 2 + 1 k0 = 2 * np.pi / wavelength + kx_vector, ky_vector = self.get_kx_ky_vector(wavelength) if self.algo == 'TMM': - kx_vector, ky_vector, Kx, Ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ - = transfer_2d_1(ff_x, ff_y, ff_xy, k0, self.n_I, self.n_II, self.kx_vector, self.period, fourier_indices_y, - self.theta, self.phi, wavelength, type_complex=self.type_complex) + # Kx, Ky, kz_top, kz_bot, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ + kz_top, kz_bot, varphi, big_F, big_G, big_T \ + = transfer_2d_1(k0, ff_x, ff_y, kx_vector, ky_vector, self.n_I, self.n_II, + type_complex=self.type_complex) elif self.algo == 'SMM': Kx, Ky, kz_inc, Wg, Vg, Kzg, Wr, Vr, Kzr, Wt, Vt, Kzt, Ar, Br, Sg \ - = scattering_2d_1(self.n_I, self.n_II, self.theta, self.phi, k0, self.period, self.fourier_order) + = scattering_2d_1(self.n_I, self.n_II, self.theta, self.phi, k0, self.period, self.fto) else: raise ValueError - # for E_conv, o_E_conv, d in zip(E_conv_all[::-1], o_E_conv_all[::-1], self.thickness[::-1]): - count = min(len(E_conv_all), len(o_E_conv_all), len(self.thickness)) - # From the last layer - for layer_index in range(count)[::-1]: - E_conv = E_conv_all[layer_index] - # o_E_conv = o_E_conv_all[layer_index] - o_E_conv = None - - d = self.thickness[layer_index] - - E_conv_i = np.linalg.inv(E_conv) - - # o_E_conv_i = np.linalg.inv(o_E_conv) - o_E_conv_i = None - - - - epz_conv = E_conv_all[layer_index] - - epz_conv_i = np.linalg.inv(epz_conv) + for layer_index in range(len(self.thickness))[::-1]: - epx_conv = 0 - epy_conv = 0 + epx_conv = epx_conv_all[layer_index] + epy_conv = epy_conv_all[layer_index] + epz_conv_i = epz_conv_i_all[layer_index] + d = self.thickness[layer_index] if self.algo == 'TMM': - W, V, q = transfer_2d_wv(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, type_complex=self.type_complex) + W, V, q = transfer_2d_2(k0, kx_vector, ky_vector, epx_conv, epy_conv, epz_conv_i, type_complex=self.type_complex) big_X, big_F, big_G, big_T, big_A_i, big_B, \ - W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22 \ - = transfer_2d_2(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, - type_complex=self.type_complex) + = transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=self.type_complex) - layer_info = [E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] + layer_info = [epz_conv_i, W, V, q, d, big_X, big_A_i, big_B] # TODO: change field recover code self.layer_info_list.append(layer_info) elif self.algo == 'SMM': @@ -656,14 +408,13 @@ def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): raise ValueError if self.algo == 'TMM': - de_ri, de_ti, big_T1 = transfer_2d_3(center, big_F, big_G, big_T, Z_I, Y_I, self.psi, self.theta, ff_xy, - delta_i0, k_I_z, k0, self.n_I, self.n_II, k_II_z, - type_complex=self.type_complex) + de_ri, de_ti, big_T1 = transfer_2d_4(k0, big_F, big_G, big_T, kz_top, kz_bot, self.psi, self.theta, + self.n_I, self.n_II, type_complex=self.type_complex) self.T1 = big_T1 elif self.algo == 'SMM': de_ri, de_ti = scattering_2d_3(ff_xy, Wt, Wg, Vt, Vg, Sg, Wr, Kx, Ky, Kzr, Kzt, kz_inc, self.n_I, - self.pol, self.theta, self.phi, self.fourier_order) + self.pol, self.theta, self.phi, self.fto) else: raise ValueError de_ri = de_ri.reshape((ff_y, ff_x)).T diff --git a/meent/on_numpy/emsolver/convolution_matrix.py b/meent/on_numpy/emsolver/convolution_matrix.py index 577ece5..c0f4dfe 100644 --- a/meent/on_numpy/emsolver/convolution_matrix.py +++ b/meent/on_numpy/emsolver/convolution_matrix.py @@ -88,9 +88,6 @@ def to_conv_mat_vector(ucell_info_list, fto_x, fto_y, device=None, ff_x = 2 * fto_x + 1 ff_y = 2 * fto_y + 1 - # e_conv_all = np.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - # o_e_conv_all = np.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - epx_conv_all = np.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) epy_conv_all = np.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) epz_i_conv_all = np.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) @@ -101,11 +98,6 @@ def to_conv_mat_vector(ucell_info_list, fto_x, fto_y, device=None, # ucell_layer = ucell_layer ** 2 eps_compressed = ucell_layer ** 2 - # f_coeffs = fft_piecewise_constant(ucell_layer, x_list, y_list, - # fto_x, fto_y, type_complex=type_complex) - # o_f_coeffs = fft_piecewise_constant(1 / ucell_layer, x_list, y_list, - # fto_x, fto_y, type_complex=type_complex) - epx_f = cfs2d(eps_compressed, x_list, y_list, fto_x, fto_y, 0, 1, type_complex) epy_f = cfs2d(eps_compressed, x_list, y_list, fto_x, fto_y, 1, 0, type_complex) epz_f = cfs2d(eps_compressed, x_list, y_list, fto_x, fto_y, 1, 1, type_complex) @@ -144,168 +136,118 @@ def to_conv_mat_raster_continuous(ucell, fto_x, fto_y, device=None, type_complex ucell_pmt = ucell ** 2 if ucell_pmt.shape[1] == 1: # 1D - ff = 2 * fto_x + 1 - - # e_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) - # o_e_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + ff_x = 2 * fto_x + 1 + ff_y = 2 * fto_y + 1 # which is 1 - epx_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) - epy_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) - epz_i_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) for i, layer in enumerate(ucell_pmt): eps_compressed, x, y = cell_compression(layer, type_complex=type_complex) - # f_coeffs = fft_piecewise_constant(cell, x, y, fto_x, fto_y, type_complex=type_complex) - # o_f_coeffs = fft_piecewise_constant(1 / cell, x, y, fto_x, fto_y, type_complex=type_complex) - - epx_f = cfs2d(eps_compressed, x, y, fto_x, fto_y, 0, 1, type_complex) - epy_f = cfs2d(eps_compressed, x, y, fto_x, fto_y, 1, 0, type_complex) - epz_f = cfs2d(eps_compressed, x, y, fto_x, fto_y, 1, 1, type_complex) - - # center = np.array(f_coeffs.shape) // 2 - center = np.array(epz_f.shape) // 2 - - conv_x = np.arange(-ff + 1, ff, 1, dtype=int) - conv_x = circulant(conv_x) - - # e_conv = f_coeffs[center[0], center[1] + conv_idx] - # o_e_conv = o_f_coeffs[center[0], center[1] + conv_idx] - # e_conv_all[i] = e_conv - # o_e_conv_all[i] = o_e_conv - - # XY to RC - epx_conv = epx_f[center[0], center[1] + conv_x] - epy_conv = epy_f[center[0], center[1] + conv_x] - epz_conv = epz_f[center[0], center[1] + conv_x] + epz_conv = cfs2d(eps_compressed, x, y, 1, 1, fto_x, fto_y, type_complex) + epy_conv = cfs2d(eps_compressed, x, y, 1, 0, fto_x, fto_y, type_complex) + epx_conv = cfs2d(eps_compressed, x, y, 0, 1, fto_x, fto_y, type_complex) + + # # center = np.array(f_coeffs.shape) // 2 + # center = np.array(epz_f.shape) // 2 + # + # conv_x = np.arange(-ff + 1, ff, 1, dtype=int) + # conv_x = circulant(conv_x) + # + # # XY to RC + # epx_conv = epx_f[center[0], center[1] + conv_x] + # epy_conv = epy_f[center[0], center[1] + conv_x] + # epz_conv = epz_f[center[0], center[1] + conv_x] epx_conv_all[i] = epx_conv epy_conv_all[i] = epy_conv - epz_i_conv_all[i] = np.linalg.inv(epz_conv) + epz_conv_i_all[i] = np.linalg.inv(epz_conv) else: # 2D ff_x = 2 * fto_x + 1 ff_y = 2 * fto_y + 1 - # e_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - # o_e_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - - epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - epz_i_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) for i, layer in enumerate(ucell_pmt): eps_compressed, x, y = cell_compression(layer, type_complex=type_complex) - # f_coeffs = fft_piecewise_constant(cell, x, y, fto_x, fto_y, type_complex=type_complex) - # o_f_coeffs = fft_piecewise_constant(1 / cell, x, y, fto_x, fto_y, type_complex=type_complex) - - epx_f = cfs2d(eps_compressed, x, y, fto_x, fto_y, 0, 1, type_complex) - epy_f = cfs2d(eps_compressed, x, y, fto_x, fto_y, 1, 0, type_complex) - epz_f = cfs2d(eps_compressed, x, y, fto_x, fto_y, 1, 1, type_complex) - - # center = np.array(f_coeffs.shape) // 2 - center = np.array(epz_f.shape) // 2 - - conv_y = np.arange(-ff_y + 1, ff_y, 1) - conv_y = circulant(conv_y) - conv_y = np.repeat(conv_y, ff_x, axis=1) - conv_y = np.repeat(conv_y, [ff_x] * ff_y, axis=0) - - conv_x = np.arange(-ff_x + 1, ff_x, 1) - conv_x = circulant(conv_x) - conv_x = np.tile(conv_x, (ff_y, ff_y)) - - # e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] - # o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] - # e_conv_all[i] = e_conv - # o_e_conv_all[i] = o_e_conv - - # XY to RC - epx_conv = epx_f[center[0] + conv_y, center[1] + conv_x] - epy_conv = epy_f[center[0] + conv_y, center[1] + conv_x] - epz_conv = epz_f[center[0] + conv_y, center[1] + conv_x] + epz_conv = cfs2d(eps_compressed, x, y, 1, 1, fto_x, fto_y, type_complex) + epy_conv = cfs2d(eps_compressed, x, y, 1, 0, fto_x, fto_y, type_complex) + epx_conv = cfs2d(eps_compressed, x, y, 0, 1, fto_x, fto_y, type_complex) epx_conv_all[i] = epx_conv epy_conv_all[i] = epy_conv - epz_i_conv_all[i] = np.linalg.inv(epz_conv) + epz_conv_i_all[i] = np.linalg.inv(epz_conv) - # return e_conv_all, o_e_conv_all - return epx_conv_all, epy_conv_all, epz_i_conv_all + return epx_conv_all, epy_conv_all, epz_conv_i_all def to_conv_mat_raster_discrete(ucell, fto_x, fto_y, device=None, type_complex=np.complex128, - improve_dft=True): + enhanced_dfs=True): ucell_pmt = ucell ** 2 if ucell_pmt.shape[1] == 1: # 1D - ff = 2 * fto_x + 1 - - # e_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) - # o_e_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + ff_x = 2 * fto_x + 1 + ff_y = 2 * fto_y + 1 # which is 1 - epx_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) - epy_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) - epz_i_conv_all = np.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - if improve_dft: - minimum_pattern_size = 2 * ff * ucell_pmt.shape[2] # TODO: scale factor is 2? to avoid alias? + if enhanced_dfs: + minimum_pattern_size_x = (4 * fto_x + 1) * ucell_pmt.shape[2] else: - minimum_pattern_size = 4 * fto_x + 1 # TODO: align with other bds + minimum_pattern_size_x = (4 * fto_x + 1) # TODO: align with other bds for i, layer in enumerate(ucell_pmt): - n = minimum_pattern_size // layer.shape[1] + n = minimum_pattern_size_x // layer.shape[1] layer = np.repeat(layer, n + 1, axis=1) - # f_coeffs = np.fft.fftshift(np.fft.fft(layer / layer.size).astype(type_complex)) - # o_f_coeffs = np.fft.fftshift(np.fft.fft(1/layer / layer.size).astype(type_complex)) - - # FFT scaling: - # https://kr.mathworks.com/matlabcentral/answers/15770-scaling-the-fft-and-the-ifft?s_tid=srchtitle - - epx_f = dfs2d(layer, 0, 1, type_complex) # inverse rule - epy_f = dfs2d(layer, 1, 0, type_complex) - epz_f = dfs2d(layer, 1, 1, type_complex) - - # center = np.array(f_coeffs.shape) // 2 - center = np.array(epz_f.shape) // 2 - - conv_x = np.arange(-ff + 1, ff, 1, dtype=int) - conv_x = circulant(conv_x) - - # e_conv = f_coeffs[center[0], center[1] + conv_idx] - # o_e_conv = o_f_coeffs[center[0], center[1] + conv_idx] - # e_conv_all[i] = e_conv - # o_e_conv_all[i] = o_e_conv - - # XY to RC - epx_conv = epx_f[center[0], center[1] + conv_x] - epy_conv = epy_f[center[0], center[1] + conv_x] - epz_conv = epz_f[center[0], center[1] + conv_x] + epz_conv = dfs2d(layer, 1, 1, fto_x, fto_y, type_complex) + epy_conv = dfs2d(layer, 1, 0, fto_x, fto_y, type_complex) + epx_conv = dfs2d(layer, 0, 1, fto_x, fto_y, type_complex) + + # # center = np.array(f_coeffs.shape) // 2 + # center = np.array(epz_f.shape) // 2 + # + # conv_x = np.arange(-ff + 1, ff, 1, dtype=int) + # conv_x = circulant(conv_x) + # + # # e_conv = f_coeffs[center[0], center[1] + conv_idx] + # # o_e_conv = o_f_coeffs[center[0], center[1] + conv_idx] + # # e_conv_all[i] = e_conv + # # o_e_conv_all[i] = o_e_conv + # + # # XY to RC + # epx_conv = epx_f[center[0], center[1] + conv_x] + # epy_conv = epy_f[center[0], center[1] + conv_x] + # epz_conv = epz_f[center[0], center[1] + conv_x] epx_conv_all[i] = epx_conv epy_conv_all[i] = epy_conv - epz_i_conv_all[i] = np.linalg.inv(epz_conv) + epz_conv_i_all[i] = np.linalg.inv(epz_conv) else: # 2D ff_x = 2 * fto_x + 1 ff_y = 2 * fto_y + 1 - # e_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - # o_e_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - epz_i_conv_all = np.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - - if improve_dft: - minimum_pattern_size_y = 2 * ff_y * ucell_pmt.shape[1] - minimum_pattern_size_x = 2 * ff_x * ucell_pmt.shape[2] + if enhanced_dfs: + minimum_pattern_size_y = (4 * fto_y + 1) * ucell_pmt.shape[1] + minimum_pattern_size_x = (4 * fto_x + 1) * ucell_pmt.shape[2] else: - minimum_pattern_size_y = 2 * ff_y - minimum_pattern_size_x = 2 * ff_x + minimum_pattern_size_y = 4 * fto_y + 1 + minimum_pattern_size_x = 4 * fto_x + 1 # e.g., 8 bytes * (40*500) * (40*500) / 1E6 = 3200 MB = 3.2 GB for i, layer in enumerate(ucell_pmt): @@ -317,38 +259,17 @@ def to_conv_mat_raster_discrete(ucell, fto_x, fto_y, device=None, type_complex=n n = minimum_pattern_size_x // layer.shape[1] layer = np.repeat(layer, n + 1, axis=1) - # f_coeffs = np.fft.fftshift(np.fft.fft2(layer / layer.size).astype(type_complex)) - # o_f_coeffs = np.fft.fftshift(np.fft.fft2(1/layer / layer.size).astype(type_complex)) - - epx_f = dfs2d(layer, 0, 1, type_complex) - epy_f = dfs2d(layer, 1, 0, type_complex) - epz_f = dfs2d(layer, 1, 1, type_complex) - - center = np.array(epz_f.shape) // 2 - - conv_y = np.arange(-ff_y + 1, ff_y, 1) - conv_y = circulant(conv_y) - conv_y = np.repeat(conv_y, ff_x, axis=1) - conv_y = np.repeat(conv_y, [ff_x] * ff_y, axis=0) - - conv_x = np.arange(-ff_x + 1, ff_x, 1) - conv_x = circulant(conv_x) - conv_x = np.tile(conv_x, (ff_y, ff_y)) - - # e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] - # o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] - # e_conv_all[i] = e_conv - # o_e_conv_all[i] = o_e_conv - - epx_conv = epx_f[center[0] + conv_y, center[1] + conv_x] - epy_conv = epy_f[center[0] + conv_y, center[1] + conv_x] - epz_conv = epz_f[center[0] + conv_y, center[1] + conv_x] + epz_conv = dfs2d(layer, 1, 1, fto_x, fto_y, type_complex) + epy_conv = dfs2d(layer, 1, 0, fto_x, fto_y, type_complex) + epx_conv = dfs2d(layer, 0, 1, fto_x, fto_y, type_complex) epx_conv_all[i] = epx_conv epy_conv_all[i] = epy_conv - epz_i_conv_all[i] = np.linalg.inv(epz_conv) + epz_conv_i_all[i] = np.linalg.inv(epz_conv) + # a = np.linalg.inv(epz_conv) + # epz_i_conv_all[i] = a[0][0] - return epx_conv_all, epy_conv_all, epz_i_conv_all + return epx_conv_all, epy_conv_all, epz_conv_i_all def circulant(c): diff --git a/meent/on_numpy/emsolver/field_distribution.py b/meent/on_numpy/emsolver/field_distribution.py index 641b821..4704235 100644 --- a/meent/on_numpy/emsolver/field_distribution.py +++ b/meent/on_numpy/emsolver/field_distribution.py @@ -362,15 +362,21 @@ def field_dist_1d_conical_vectorized_kji(wavelength, kx_vector, n_I, theta, phi, return field_cell -def field_dist_2d_vectorized_kji(wavelength, kx_vector, n_I, theta, phi, fourier_order_x, fourier_order_y, T1, layer_info_list, period, +def field_dist_2d_vectorized_kji(wavelength, n_I, theta, phi, fto, T1, layer_info_list, period, res_x=20, res_y=20, res_z=20, type_complex=np.complex128): k0 = 2 * np.pi / wavelength - fourier_indices_y = np.arange(-fourier_order_y, fourier_order_y + 1) - ff_x = fourier_order_x * 2 + 1 - ff_y = fourier_order_y * 2 + 1 - ky_vector = k0 * (n_I * np.sin(theta) * np.sin(phi) + fourier_indices_y * ( + fto_x_range = np.arange(-fto[0], fto[0] + 1) + fto_y_range = np.arange(-fto[1], fto[1] + 1) + + ff_x = fto[0] * 2 + 1 + ff_y = fto[1] * 2 + 1 + + kx_vector = k0 * (n_I * np.sin(theta) * np.cos(phi) + fto_x_range * ( + wavelength / period[0])).astype(type_complex) + + ky_vector = k0 * (n_I * np.sin(theta) * np.sin(phi) + fto_y_range * ( wavelength / period[1])).astype(type_complex) Kx = np.diag(np.tile(kx_vector, ff_y).flatten()) / k0 diff --git a/meent/on_numpy/emsolver/fourier_analysis.py b/meent/on_numpy/emsolver/fourier_analysis.py index 9e4417b..b7675eb 100644 --- a/meent/on_numpy/emsolver/fourier_analysis.py +++ b/meent/on_numpy/emsolver/fourier_analysis.py @@ -22,67 +22,512 @@ def _cfs(x, cell, fto, period, type_complex=np.complex128): return f -def cfs2d(cell, x, y, fto_x, fto_y, cx, cy, type_complex=np.complex128): +def cfs2d(cell, x, y, conti_x, conti_y, fto_x, fto_y, type_complex=np.complex128): cell = cell.astype(type_complex) - # (cx, cy) - # (1, 1): epz_conv; (0, 1): epx_conv; (1, 0): epy_conv + ff_x = 2 * fto_x + 1 + ff_y = 2 * fto_y + 1 - period_x, period_y = x[-1], y[-1] + period_x, period_y = x[-1], y[-1] # TODO: needed? for vector modeling? - # X axis - if cx == 0: # discontinuous in x: inverse rule is applied. - cell = 1 / cell - - fx = _cfs(x, cell, fto_x, period_x) - - if cx == 0: # discontinuous in x: inverse rule is applied. - fx = np.linalg.inv(fx) - - # Y axis - if cy == 0: - fx = np.linalg.inv(fx) - - fxy = _cfs(y, fx.T, fto_y, period_y).T + cell = cell.T - if cy == 0: - fxy = np.linalg.inv(fxy) + if conti_y == 0: # discontinuous in Y (Row): inverse rule is applied. + cell = 1 / cell - return fxy + cfs1d = _cfs(y, cell, fto_y, period_y) + conv_index_1 = circulant(fto_y) + (2 * fto_y) + conv_index_2 = circulant(fto_x) + (2 * fto_x) -def dfs2d(cell, cx, cy, type_complex=np.complex128): - cell = cell.astype(type_complex) + conv1d = cfs1d[:, conv_index_1] - # (cx, cy) - # (1, 1): epz_conv; (0, 1): epx_conv; (1, 0): epy_conv + if conti_x ^ conti_y: + conv1d = np.linalg.inv(conv1d) - if cx == cy == 1: - fxy = np.fft.fft2(cell/cell.size).astype(type_complex) + conv1d = conv1d.reshape((-1, ff_y ** 2)) - else: - rows, cols = cell.shape + cfs2d = _cfs(x, conv1d.T, fto_x, period_x) - fxy = np.zeros([rows, cols], dtype=type_complex) + conv2d = cfs2d[:, conv_index_2] + conv2d = conv2d.reshape((ff_y, ff_y, ff_x, ff_x)) + conv2d = np.moveaxis(conv2d, 1, 2) + conv2d = conv2d.reshape((ff_y*ff_x, ff_y*ff_x)) - if cx == 0: # discontinuous in x: inverse rule is applied. - cell = 1 / cell + if conti_x == 0: # discontinuous in X (Column): inverse rule is applied. + conv2d = np.linalg.inv(conv2d) - for r in range(rows): - fxy[r, :] = np.fft.fft(cell[r, :] / cols).astype(type_complex) + return conv2d - if cx == 0: - fxy = np.linalg.inv(fxy) - if cy == 0: # discontinuous in y: inverse rule is applied. - fxy = np.linalg.inv(fxy) +def dfs2d(cell, conti_x, conti_y, fto_x, fto_y, type_complex=np.complex128, perturbation=1E-100): + cell = cell.astype(type_complex) - for c in range(cols): - fxy[:, c] = np.fft.fft(fxy[:, c] / rows).astype(type_complex) + ff_x = 2 * fto_x + 1 + ff_y = 2 * fto_y + 1 - if cy == 0: - fxy = np.linalg.inv(fxy) + cell = cell.T - fxy = np.fft.fftshift(fxy) + if conti_y == 0: # discontinuous in Y (Row): inverse rule is applied. + cell = 1 / cell - return fxy + dfs1d = np.fft.fft(cell / cell.shape[1]) + + conv_index_1 = circulant(fto_y) + conv_index_2 = circulant(fto_x) + + conv1d = dfs1d[:, conv_index_1] + + if conti_x ^ conti_y: + conv1d = np.linalg.inv(conv1d) + + conv1d = conv1d.reshape((-1, ff_y ** 2)) + + dfs2d = np.fft.fft(conv1d.T / conv1d.T.shape[1]) + + conv2d = dfs2d[:, conv_index_2] + conv2d = conv2d.reshape((ff_y, ff_y, ff_x, ff_x)) + conv2d = np.moveaxis(conv2d, 1, 2) + conv2d = conv2d.reshape((ff_y*ff_x, ff_y*ff_x)) + + if conti_x == 0: # discontinuous in X (Column): inverse rule is applied. + conv2d = np.linalg.inv(conv2d) + + return conv2d + + +# def dfs2d_debug(cell, conti_x, conti_y, fto_x, fto_y, type_complex=np.complex128, perturbation=1E-10): +# """ +# algorithm from reticolo. +# Args: +# cell: +# conti_x: +# conti_y: +# fto_x: +# fto_y: +# type_complex: +# +# Returns: +# +# """ +# cell = cell.astype(type_complex) +# +# ff_x = 2 * fto_x + 1 +# ff_y = 2 * fto_y + 1 +# # fto = max(ff_x, ff_y) +# +# # (cx, cy) +# # (1, 1): epz_conv; (0, 1): epx_conv; (1, 0): epy_conv +# +# if conti_x == conti_y == 1: +# +# # case 1 +# fxy = np.fft.fft2(cell/cell.size).astype(type_complex) +# Y, X = convolution_matrix(fxy, ff_x, ff_y) +# +# fxy_conv = fxy[Y, X] +# +# # case 2 +# rows, cols = cell.shape +# fft1d = np.fft.fft(cell/cell.shape[1]).astype(type_complex) +# solution = np.fft.fft(fft1d.T/fft1d.shape[0]).T +# +# conv_index = circulant(fto_y) * 1 +# +# a_conv1d = np.zeros((rows, ff_y, ff_y), dtype=np.complex128) +# +# for r in range(rows): +# aa = fft1d[r, conv_index] +# a_conv1d[r, :, :] = aa +# +# a_conv1d_reshaped = a_conv1d.reshape(-1, ff_y**2).T +# +# a_fft2d = np.fft.fft(a_conv1d_reshaped / a_conv1d_reshaped.shape[1]) +# +# a_fft2d_1 = a_fft2d.reshape((3, 3, 6)) +# +# a_conv2d = np.zeros((3, 3, ff_y, ff_y), dtype=np.complex128) +# +# for r in range(3): +# for c in range(3): +# a_conv2d[:, :, r, c] = a_fft2d_1[r, c, conv_index] +# a_conv2d_1 = np.moveaxis(a_conv2d, 2, 1) +# a_conv2d_2 = a_conv2d_1.reshape(ff_y**2, ff_x**2) +# +# # case 4: RETICOLO +# bb = np.arange(54).reshape((3,3,6)) +# b_conv2d = np.zeros((3, 3, ff_y, ff_y), dtype=int) +# +# for r in range(3): +# for c in range(3): +# b_conv2d[:, :, r, c] = bb[r, c, conv_index] +# b_conv2d_1 = np.moveaxis(b_conv2d, 2, 1) +# b_conv2d_2 = b_conv2d_1.reshape(ff_y**2, ff_x**2) +# +# # case 5 +# bb = np.arange(54).reshape((3,3,6)) +# bbb = bb.reshape((9, 6)) +# c_conv2d = np.zeros((6, 3, 3), dtype=int) +# +# for c in range(bbb.shape[1]): +# c_conv2d[c] = bbb[:, c].reshape((3, 3)) +# +# c_conv2d_1 = np.block([ +# [c_conv2d[0], c_conv2d[1], c_conv2d[2]], +# [c_conv2d[-1], c_conv2d[0], c_conv2d[1]], +# [c_conv2d[-2], c_conv2d[-1], c_conv2d[0]], +# ]) +# +# # case 5 +# fft1d = np.fft.fft(cell/cell.shape[1]).astype(type_complex) +# +# axis1_length = fft1d.shape[0] +# axis2_length = ff_x +# axis3_length = ff_x +# +# axis1_coord = np.arange(axis1_length) +# conv_index_1 = circulant(fto_x) +# conv_index_2 = circulant(fto_y) +# +# conv1d = fft1d[:, conv_index_1] +# +# conv1d_1 = conv1d.reshape((-1, ff_x**2)) +# +# conv1d_2 = conv1d_1[:, np.r_[np.arange(ff_x), np.arange(-ff_x, -1, 1)]] +# +# conv1d_3 = conv1d_2.T +# fft2d = np.fft.fft(conv1d_3/conv1d_3.shape[1]) +# +# +# +# +# conv2d = fft2d[:, conv_index_2] +# conv2d_1 = conv2d.reshape((-1, ff_y**2)) +# conv2d_2 = conv2d_1[:, np.r_[np.arange(ff_y), np.arange(-ff_y, -1, 1)]] +# +# Y, X = convolution_matrix(conv2d_2, ff_x, ff_y) +# res = conv2d_2.T[Y, X] +# +# +# +# fft2d_t = fft2d.T +# conv2d_t = fft2d_t[conv_index_2, :] +# conv2d_t_1 = conv2d_t.reshape((ff_y**2, -1)) +# conv2d_t_2 = conv2d_t_1[np.r_[np.arange(ff_y), np.arange(-ff_y, -1, 1)], :] +# +# conv2d_t_3 = conv2d_t_2 +# +# Y, X = convolution_matrix(conv2d_t_3, ff_x, ff_y) +# res_t = conv2d_t_3[Y, X] +# +# +# # case 5 +# bb = np.arange(45).reshape((3,3,5)) +# bbb = bb.reshape((9, 5)) +# bbb = conv2d_1 +# c_conv2da = np.zeros((5, 3, 3), dtype=np.complex128) +# +# for c in range(bbb.shape[1]): +# c_conv2da[c] = bbb[:, c].reshape((3, 3)) +# +# c_conv2d_1a = np.block([ +# [c_conv2da[0], c_conv2da[1], c_conv2da[2]], +# [c_conv2da[-1], c_conv2da[0], c_conv2da[1]], +# [c_conv2da[-2], c_conv2da[-1], c_conv2da[0]], +# ]) +# +# Y, X = convolution_matrix(conv2d_2, ff_x, ff_y) +# +# res = conv2d_2[Y, X] +# +# # conv2d_1 = conv2d[conv_index_2] +# +# # case 0 +# center = np.array(bb.shape) // 2 +# +# conv_y = np.arange(-ff_y + 1, ff_y, 1) +# conv_y = circulant1(conv_y) +# conv_y = np.repeat(conv_y, ff_x, axis=1) +# conv_y = np.repeat(conv_y, [ff_x] * ff_y, axis=0) +# +# conv_x = np.arange(-ff_x + 1, ff_x, 1) +# conv_x = circulant1(conv_x) +# conv_x = np.tile(conv_x, (ff_y, ff_y)) +# +# +# # Y, X = convolution_matrix(bb, ff_x, ff_y) +# +# c = bb[conv_y, conv_x] +# +# return fxy_conv +# +# elif conti_x == 1 and conti_y == 0: +# +# rows, cols = cell.shape +# +# # o_fy = np.zeros([rows, cols], dtype=type_complex) +# +# o_cell = 1 / cell # discontinuous in y: inverse rule is applied. +# +# # Row direction, Y direction +# # for c in range(cols): +# # # o_fy[:, c] = np.fft.fftshift(np.fft.fft(o_cell[:, c] / rows).astype(type_complex)) +# # o_fy[:, c] = np.fft.fft(o_cell[:, c] / rows).astype(type_complex) +# +# o_fy = np.fft.fft(o_cell.T / o_cell.shape[0]).T +# +# +# idx_conv_y = circulant1(np.arange(-ff_y + 1, ff_y, 1)) +# idx_conv_y1 = circulant(fto_y) +# +# fy_conv = np.zeros((cols, ff_y, ff_y), dtype=np.complex128) +# +# for c in range(cols): +# +# fy_conv[c, :, :] = o_fy[idx_conv_y, c] +# +# fy_conv = np.linalg.inv(fy_conv) +# +# fy_conv = fy_conv.reshape(-1, ff_y**2).T +# # fy_conv = fy_conv.reshape(ff_y**2, -1) +# +# +# # fxy = np.zeros(fy_conv.shape, dtype=type_complex) +# # +# # for r in range(fy_conv.shape[0]): +# # # fxy[r, :] = np.fft.fftshift(np.fft.fft(o_fy_conv_i[r, :] / (cols)).astype(type_complex)) +# # fxy[r, :] = np.fft.fft(fy_conv[r, :] / cols).astype(type_complex) +# +# fxy = np.fft.fft(fy_conv / fy_conv.shape[1]) +# +# Y, X = convolution_matrix(fxy, ff_x, ff_y) +# +# fxy_conv = fxy[Y, X] +# +# return fxy_conv +# +# elif conti_x == 0 and conti_y == 1: +# +# rows, cols = cell.shape +# +# # o_fy = np.zeros([rows, cols], dtype=type_complex) +# +# # Row direction, Y direction +# # for c in range(cols): +# # # o_fy[:, c] = np.fft.fftshift(np.fft.fft(o_cell[:, c] / rows).astype(type_complex)) +# # o_fy[:, c] = np.fft.fft(o_cell[:, c] / rows).astype(type_complex) +# +# o_fy = np.fft.fft(cell.T / cell.shape[0]).T +# +# idx_conv_y = circulant1(np.arange(-ff_y + 1, ff_y, 1)) +# idx_conv_y1 = circulant(fto_y) +# +# fy_conv = np.zeros((cols, ff_y, ff_y), dtype=np.complex128) +# +# for c in range(cols): +# +# fy_conv[c, :, :] = o_fy[idx_conv_y, c] +# +# # fy_conv = np.linalg.inv(fy_conv) +# +# fy_conv = fy_conv.reshape(-1, ff_y**2).T +# +# # fxy = np.zeros(fy_conv.shape, dtype=type_complex) +# # +# # for r in range(fy_conv.shape[0]): +# # # fxy[r, :] = np.fft.fftshift(np.fft.fft(o_fy_conv_i[r, :] / (cols)).astype(type_complex)) +# # fxy[r, :] = np.fft.fft(fy_conv[r, :] / cols).astype(type_complex) +# +# a = np.where(fy_conv == 0) +# fy_conv[a] += perturbation +# +# fxy = np.fft.fft(1/fy_conv / fy_conv.shape[1]) +# +# Y, X = convolution_matrix(fxy, ff_x, ff_y) +# +# fxy_conv = fxy[Y, X] +# fxy_conv = np.linalg.inv(fxy_conv) +# +# return fxy_conv +# +# # +# # xx = np.zeros((rows, ff_x, ff_x), dtype=np.complex128) +# # +# # for r in range(rows): +# # +# # xx[r, :, :] = fxy[r, a] +# # +# # # xxx = np.moveaxis(xx, -1, 0) +# # +# # xxx = xx.reshape(-1, ff_y**2) +# # +# # conv_x = np.arange(-ff_x + 1, ff_x, 1) + 2 +# # a = circulant(conv_x) +# # +# # ff = xxx[a] +# # +# # +# # +# # +# # # fff = np.moveaxis(ff, -1, 0) +# # ffff = ff.reshape(ff_y*ff_x, ff_y*ff_x) +# # +# # +# # fxy = np.fft.fftshift(ff) +# # +# # +# # cx, cy = fxy.shape[0] // 2, fxy.shape[1] // 2 +# # +# # fxy = fxy[cx - fto:cx + fto + 1, cy - fto:cy + fto + 1] +# # +# # +# # +# # circ = np.zeros((ff_y, cols//2 + 1), dtype=int) +# # +# # for r in range(center + 1): +# # idx = np.arange(r, r - center - 1, -1, dtype=int) +# # +# # assign_value = c[center - idx] +# # circ[r] = assign_value +# # +# # +# # +# # conv_y = circulant(conv_y) +# # +# # center = c.shape[0] // 2 +# # circ = np.zeros((center + 1, center + 1), dtype=int) +# # +# # for r in range(center + 1): +# # idx = np.arange(r, r - center - 1, -1, dtype=int) +# # +# # assign_value = c[center - idx] +# # circ[r] = assign_value +# # +# # return circ +# # +# # +# # +# # +# # conv_y = np.repeat(conv_y, ff_y, axis=1) +# # +# # conv_y = conv_y.reshape(ff_y, ff_y, 2*cols+1) +# # +# # conv_x = np.arange(-cols + 1, cols, 1) +# # conv_x = circulant(conv_x) +# # conv_x = np.tile(conv_x, (ff_y, ff_y)) +# # +# # conv_x = conv_x.reshape(ff_y, ff_y, ff_x) +# # +# # o_fy[center[0] + conv_y, center[1] + conv_x] +# # +# # o_fy_conv_sub = convolution_matrix(o_fy, ff_x, ff_y) +# # o_fy_conv_sub_i = np.linalg.inv(o_fy_conv_sub) +# # +# # +# # +# # +# # def merge(arr): +# # pass +# # return arr +# # +# # o_fy_conv_i = merge(o_fy_conv_sub_i) +# # +# # for r in range(rows): +# # fxy[r, :] = np.fft.fft(o_fy_conv_i[r, :] / rows).astype(type_complex) +# # +# # fxy = np.fft.fftshift(fxy) +# # cx, cy = fxy.shape[0] // 2, fxy.shape[1] // 2 +# # +# # fxy = fxy[cx - fto:cx + fto + 1, cy - fto:cy + fto + 1] +# +# +# else: +# rows, cols = cell.shape +# +# fxy = np.zeros([rows, cols], dtype=type_complex) +# +# if conti_x == 0: # discontinuous in x: inverse rule is applied. +# cell = 1 / cell +# +# for r in range(rows): +# fxy[r, :] = np.fft.fft(cell[r, :] / cols).astype(type_complex) +# +# # if conti_x == 0: +# # cx, cy = fxy.shape[0]//2, fxy.shape[1]//2 +# # fxy = fxy[cx-fto:cx+fto+1, cy-fto:cy+fto+1] +# +# fxy_conv = convolution_matrix(fxy, ff_x, ff_y) +# fxy_conv_i = np.linalg.inv(fxy_conv) +# +# # fxy = np.linalg.inv(fxy+np.eye(2*fto+1)*1E-16) +# +# if conti_y == 0: # discontinuous in y: inverse rule is applied. +# cx, cy = fxy.shape[0]//2, fxy.shape[1]//2 +# +# fxy = fxy[cx-fto:cx+fto+1, cy-fto:cy+fto+1] +# +# fxy = np.linalg.inv(fxy+np.eye(2*fto+1)*1E-16) +# +# for c in range(fxy.shape[1]): +# fxy[:, c] = np.fft.fft(fxy[:, c] / rows).astype(type_complex) +# +# if conti_y == 0: +# fxy = np.linalg.inv(fxy+np.eye(2*fto+1)*1E-16) +# +# fxy = np.fft.fftshift(fxy) +# cx, cy = fxy.shape[0] // 2, fxy.shape[1] // 2 +# +# fxy = fxy[cx - fto:cx + fto + 1, cy - fto:cy + fto + 1] +# +# return fxy + +# +# def convolution_matrix(arr, ff_x, ff_y): +# center = np.array(arr.shape) // 2 +# +# conv_y = np.arange(-ff_y + 1, ff_y, 1) +# conv_y = circulant1(conv_y) +# conv_y = np.repeat(conv_y, ff_x, axis=1) +# conv_y = np.repeat(conv_y, [ff_x] * ff_y, axis=0) +# +# conv_x = np.arange(-ff_x + 1, ff_x, 1) +# conv_x = circulant1(conv_x) +# conv_x = np.tile(conv_x, (ff_y, ff_y)) +# +# return conv_y, conv_x +# +# +# def circulant1(c): +# center = c.shape[0] // 2 +# circ = np.zeros((center + 1, center + 1), dtype=int) +# +# for r in range(center + 1): +# idx = np.arange(r, r - center - 1, -1, dtype=int) +# +# assign_value = c[center - idx] +# circ[r] = assign_value +# +# return circ +# + + +def circulant(fto): + """ + Return circular matrix of indices. + Args: + fto: Fourier order, or number of harmonics, in use. + + Returns: circular matrix of indices. + + """ + ff = 2 * fto + 1 + + stride = 2 * fto + + circ = np.zeros((ff, ff), dtype=int) + + for r in range(stride + 1): + idx = np.arange(-r, -r + ff, 1, dtype=int) + circ[r] = idx + + return circ diff --git a/meent/on_numpy/emsolver/rcwa.py b/meent/on_numpy/emsolver/rcwa.py index 6aba7e4..90770ea 100644 --- a/meent/on_numpy/emsolver/rcwa.py +++ b/meent/on_numpy/emsolver/rcwa.py @@ -22,19 +22,19 @@ def __init__(self, backend=0, grating_type=0, pol=0., - fourier_order=(2, 0), + fto=(2, 0), ucell_materials=None, algo='TMM', perturbation=1E-20, device='cpu', type_complex=np.complex128, fft_type=0, - improve_dft=True, + enhanced_dfs=True, **kwargs, ): super().__init__(grating_type=grating_type, n_I=n_I, n_II=n_II, theta=theta, phi=phi, pol=pol, - fourier_order=fourier_order, period=period, wavelength=wavelength, + fto=fto, period=period, wavelength=wavelength, thickness=thickness, algo=algo, perturbation=perturbation, device=device, type_complex=type_complex, ) @@ -44,7 +44,7 @@ def __init__(self, self.backend = backend self.fft_type = fft_type - self.improve_dft = improve_dft + self.enhanced_dfs = enhanced_dfs self.layer_info_list = [] @@ -67,22 +67,7 @@ def ucell(self, ucell): else: raise ValueError - def _solve_d(self, wavelength, e_conv_all, o_e_conv_all): - self.kx_vector = self.get_kx_vector(wavelength) - - if self.grating_type == 0: - de_ri, de_ti, layer_info_list, T1 = self.solve_1d(wavelength, e_conv_all, o_e_conv_all) - elif self.grating_type == 1: - de_ri, de_ti, layer_info_list, T1 = self.solve_1d_conical(wavelength, e_conv_all, o_e_conv_all) - elif self.grating_type == 2: - de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, e_conv_all, o_e_conv_all) - else: - raise ValueError - - return de_ri, de_ti, layer_info_list, T1, self.kx_vector - def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): - self.kx_vector = self.get_kx_vector(wavelength) if self.grating_type == 0: de_ri, de_ti, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all) @@ -93,47 +78,13 @@ def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): else: raise ValueError - return de_ri, de_ti, layer_info_list, T1, self.kx_vector - - def solve_d(self, wavelength, e_conv_all, o_e_conv_all): - de_ri, de_ti, layer_info_list, T1, kx_vector = self._solve(wavelength, e_conv_all, o_e_conv_all) - - self.layer_info_list = layer_info_list - self.T1 = T1 - self.kx_vector = kx_vector - - return de_ri, de_ti + return de_ri, de_ti, layer_info_list, T1 def solve(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): - de_ri, de_ti, layer_info_list, T1, kx_vector = self._solve(wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all) - - self.layer_info_list = layer_info_list - self.T1 = T1 - self.kx_vector = kx_vector - - return de_ri, de_ti - - def conv_solve_d(self, **kwargs): - # [setattr(self, k, v) for k, v in kwargs.items()] # no need in npmeent - - if self.fft_type == 0: - E_conv_all, o_E_conv_all = to_conv_mat_raster_discrete(self.ucell, self.fourier_order[0], self.fourier_order[1], - type_complex=self.type_complex, improve_dft=self.improve_dft) - elif self.fft_type == 1: - E_conv_all, o_E_conv_all = to_conv_mat_raster_continuous(self.ucell, self.fourier_order[0], self.fourier_order[1], - type_complex=self.type_complex) - elif self.fft_type == 2: - E_conv_all, o_E_conv_all = to_conv_mat_vector(self.ucell_info_list, self.fourier_order[0], - self.fourier_order[1], - type_complex=self.type_complex) - else: - raise ValueError - - de_ri, de_ti, layer_info_list, T1, kx_vector = self._solve(self.wavelength, E_conv_all, o_E_conv_all) + de_ri, de_ti, layer_info_list, T1 = self._solve(wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all) self.layer_info_list = layer_info_list self.T1 = T1 - self.kx_vector = kx_vector return de_ri, de_ti @@ -141,23 +92,22 @@ def conv_solve(self, **kwargs): # [setattr(self, k, v) for k, v in kwargs.items()] # no need in npmeent if self.fft_type == 0: - epx_conv_all, epy_conv_all, epz_i_conv_all = to_conv_mat_raster_discrete(self.ucell, self.fourier_order[0], self.fourier_order[1], - type_complex=self.type_complex, improve_dft=self.improve_dft) + epx_conv_all, epy_conv_all, epz_i_conv_all = to_conv_mat_raster_discrete(self.ucell, self.fto[0], self.fto[1], + type_complex=self.type_complex, enhanced_dfs=self.enhanced_dfs) elif self.fft_type == 1: - epx_conv_all, epy_conv_all, epz_i_conv_all = to_conv_mat_raster_continuous(self.ucell, self.fourier_order[0], self.fourier_order[1], + epx_conv_all, epy_conv_all, epz_i_conv_all = to_conv_mat_raster_continuous(self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex) elif self.fft_type == 2: - epx_conv_all, epy_conv_all, epz_i_conv_all = to_conv_mat_vector(self.ucell_info_list, self.fourier_order[0], - self.fourier_order[1], + epx_conv_all, epy_conv_all, epz_i_conv_all = to_conv_mat_vector(self.ucell_info_list, self.fto[0], + self.fto[1], type_complex=self.type_complex) else: raise ValueError - de_ri, de_ti, layer_info_list, T1, kx_vector = self._solve(self.wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all) + de_ri, de_ti, layer_info_list, T1 = self._solve(self.wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all) self.layer_info_list = layer_info_list self.T1 = T1 - self.kx_vector = kx_vector return de_ri, de_ti @@ -197,16 +147,16 @@ def calculate_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): elif self.grating_type == 2: if field_algo == 0: field_cell = field_dist_2d_vanilla(self.wavelength, self.kx_vector, self.n_I, self.theta, self.phi, - self.fourier_order[0], self.fourier_order[1], self.T1, self.layer_info_list, self.period, + self.fto[0], self.fto[1], self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif field_algo == 1: field_cell = field_dist_2d_vectorized_ji(self.wavelength, self.kx_vector, self.n_I, self.theta, - self.phi, self.fourier_order[0], self.fourier_order[1], self.T1, self.layer_info_list, + self.phi, self.fto[0], self.fto[1], self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif field_algo == 2: - field_cell = field_dist_2d_vectorized_kji(self.wavelength, self.kx_vector, self.n_I, self.theta, - self.phi, self.fourier_order[0], self.fourier_order[1], self.T1, self.layer_info_list, + field_cell = field_dist_2d_vectorized_kji(self.wavelength, self.n_I, self.theta, + self.phi, self.fto[0], self.fto[1], self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) else: diff --git a/meent/on_numpy/emsolver/transfer_method.py b/meent/on_numpy/emsolver/transfer_method.py index fd6b765..733cb8f 100644 --- a/meent/on_numpy/emsolver/transfer_method.py +++ b/meent/on_numpy/emsolver/transfer_method.py @@ -6,41 +6,73 @@ def transfer_1d_1(ff, polarization, k0, n_I, n_II, kx_vector, theta, delta_i0, f # kx_vector = k0 * (n_I * np.sin(theta) + fourier_indices * (wavelength / period[0])).astype(type_complex) - k_I_z = (k0 ** 2 * n_I ** 2 - kx_vector ** 2) ** 0.5 - k_II_z = (k0 ** 2 * n_II ** 2 - kx_vector ** 2) ** 0.5 + kz_top = (k0 ** 2 * n_I ** 2 - kx_vector ** 2) ** 0.5 + kz_bot = (k0 ** 2 * n_II ** 2 - kx_vector ** 2) ** 0.5 - k_I_z = k_I_z.conjugate() - k_II_z = k_II_z.conjugate() + kz_top = kz_top.conjugate() + kz_bot = kz_bot.conjugate() Kx = np.diag(kx_vector / k0) f = np.eye(ff, dtype=type_complex) if polarization == 0: # TE - Y_I = np.diag(k_I_z / k0) - Y_II = np.diag(k_II_z / k0) + Y_I = np.diag(kz_top / k0) + Y_II = np.diag(kz_bot / k0) YZ_I = Y_I g = 1j * Y_II inc_term = 1j * n_I * np.cos(theta) * delta_i0 elif polarization == 1: # TM - Z_I = np.diag(k_I_z / (k0 * n_I ** 2)) - Z_II = np.diag(k_II_z / (k0 * n_II ** 2)) + Z_I = np.diag(kz_top / (k0 * n_I ** 2)) + Z_II = np.diag(kz_bot / (k0 * n_II ** 2)) YZ_I = Z_I g = 1j * Z_II - inc_term = 1j * delta_i0 * np.cos(theta) / n_I + inc_term = 1j * delta_i0 * np.cos(theta) / n_I # tODO: inc term? else: raise ValueError T = np.eye(2 * fourier_order[0] + 1, dtype=type_complex) - return kx_vector, Kx, k_I_z, k_II_z, f, YZ_I, g, inc_term, T + return kx_vector, Kx, kz_top, kz_bot, f, YZ_I, g, inc_term, T -def transfer_1d_2(k0, q, d, W, V, f, g, fourier_order, T, type_complex=np.complex128): +def transfer_1d_2(pol, Kx, epx_conv, epy_conv, epz_conv_i, type_complex=np.complex128): + + if pol == 0: + A = Kx ** 2 - epy_conv + eigenvalues, W = np.linalg.eig(A) + eigenvalues += 0j # to get positive square root + q = eigenvalues ** 0.5 + Q = np.diag(q) + V = W @ Q + + elif pol == 1: + B = Kx @ epz_conv_i @ Kx - np.eye(epy_conv.shape[0], dtype=type_complex) + + # eigenvalues, W = np.linalg.eig(E_conv @ B) + eigenvalues, W = np.linalg.eig(epx_conv @ B) + + eigenvalues += 0j # to get positive square root + q = eigenvalues ** 0.5 + + Q = np.diag(q) + V = np.linalg.inv(epx_conv) @ W @ Q + + else: + raise ValueError + + return W, V, q + + +def transfer_1d_3(k0, W, V, q, d, f, g, T, type_complex=np.complex128): + + ff_x = len(q) + + I = np.eye(ff_x, dtype=type_complex) X = np.diag(np.exp(-k0 * q * d)) @@ -52,78 +84,82 @@ def transfer_1d_2(k0, q, d, W, V, f, g, fourier_order, T, type_complex=np.comple a_i = np.linalg.inv(a) - f = W @ (np.eye(2 * fourier_order[0] + 1, dtype=type_complex) + X @ b @ a_i @ X) - g = V @ (np.eye(2 * fourier_order[0] + 1, dtype=type_complex) - X @ b @ a_i @ X) + f = W @ (I+ X @ b @ a_i @ X) + g = V @ (I- X @ b @ a_i @ X) T = T @ a_i @ X return X, f, g, T, a_i, b -def transfer_1d_3(g1, YZ_I, f1, delta_i0, inc_term, T, k_I_z, k0, n_I, n_II, theta, polarization, k_II_z): - T1 = np.linalg.inv(g1 + 1j * YZ_I @ f1) @ (1j * YZ_I @ delta_i0 + inc_term) - R = f1 @ T1 - delta_i0 +def transfer_1d_4(k0, f, g, T, YZ_I, kz_top, delta_i0, inc_term, n_I, n_II, theta, pol, kz_bot): + + T1 = np.linalg.inv(g + 1j * YZ_I @ f) @ (1j * YZ_I @ delta_i0 + inc_term) + R = f @ T1 - delta_i0 T = T @ T1 - de_ri = np.real(R * np.conj(R) * k_I_z / (k0 * n_I * np.cos(theta))) - if polarization == 0: - de_ti = T * np.conj(T) * np.real(k_II_z / (k0 * n_I * np.cos(theta))) - elif polarization == 1: - de_ti = T * np.conj(T) * np.real(k_II_z / n_II ** 2) / (k0 * np.cos(theta) / n_I) + de_ri = np.real(R * np.conj(R) * kz_top / (k0 * n_I * np.cos(theta))) + if pol == 0: + de_ti = T * np.conj(T) * np.real(kz_bot / (k0 * n_I * np.cos(theta))) + elif pol == 1: + de_ti = T * np.conj(T) * np.real(kz_bot / n_II ** 2) / (k0 * np.cos(theta) / n_I) else: raise ValueError return de_ri.real, de_ti.real, T1 -def transfer_1d_conical_1(ff, k0, n_I, n_II, kx_vector, theta, phi, type_complex=np.complex128): +def transfer_1d_conical_1(k0, ff_x, n_I, n_II, kx_vector, ky_vector, type_complex=np.complex128): - I = np.eye(ff, dtype=type_complex) - O = np.zeros((ff, ff), dtype=type_complex) + I = np.eye(ff_x, dtype=type_complex) + O = np.zeros((ff_x, ff_x), dtype=type_complex) # kx_vector = k0 * (n_I * np.sin(theta) * np.cos(phi) + fourier_indices * (wavelength / period[0]) # ).astype(type_complex) - ky = k0 * n_I * np.sin(theta) * np.sin(phi) + # ky = k0 * n_I * np.sin(theta) * np.sin(phi) # TODO: check ky is equal to ky_vector - k_I_z = (k0 ** 2 * n_I ** 2 - kx_vector ** 2 - ky ** 2) ** 0.5 - k_II_z = (k0 ** 2 * n_II ** 2 - kx_vector ** 2 - ky ** 2) ** 0.5 + kz_top = (k0 ** 2 * n_I ** 2 - kx_vector ** 2 - ky_vector ** 2) ** 0.5 + kz_bot = (k0 ** 2 * n_II ** 2 - kx_vector ** 2 - ky_vector ** 2) ** 0.5 - k_I_z = k_I_z.conjugate() - k_II_z = k_II_z.conjugate() + kz_top = kz_top.conjugate() + kz_bot = kz_bot.conjugate() Kx = np.diag(kx_vector / k0) + Ky = np.diag(ky_vector / k0) - varphi = np.arctan(ky / kx_vector) + varphi = np.arctan(ky_vector / kx_vector) - Y_I = np.diag(k_I_z / k0) - Y_II = np.diag(k_II_z / k0) + Y_I = np.diag(kz_top / k0) + Y_II = np.diag(kz_bot / k0) - Z_I = np.diag(k_I_z / (k0 * n_I ** 2)) - Z_II = np.diag(k_II_z / (k0 * n_II ** 2)) + Z_I = np.diag(kz_top / (k0 * n_I ** 2)) + Z_II = np.diag(kz_bot / (k0 * n_II ** 2)) big_F = np.block([[I, O], [O, 1j * Z_II]]) big_G = np.block([[1j * Y_II, O], [O, I]]) - big_T = np.eye(2 * ff, dtype=type_complex) + big_T = np.eye(2 * ff_x, dtype=type_complex) - return Kx, ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T + return Kx, Ky, kz_top, kz_bot, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T -def transfer_1d_conical_2(k0, Kx, ky, E_conv, E_conv_i, o_E_conv_i, ff, d, varphi, big_F, big_G, big_T, +def transfer_1d_conical_2(Kx, Ky, epx_conv, epy_conv, epz_conv_i, type_complex=np.complex128): - I = np.eye(ff, dtype=type_complex) - O = np.zeros((ff, ff), dtype=type_complex) - A = Kx ** 2 - E_conv - B = Kx @ E_conv_i @ Kx - I + I = np.eye(len(Kx), dtype=type_complex) + + A = Kx ** 2 - epy_conv + B = Kx @ epz_conv_i @ Kx - I A_i = np.linalg.inv(A) B_i = np.linalg.inv(B) - to_decompose_W_1 = (ky/k0) ** 2 * I + A + # Todo: remove k0 + # to_decompose_W_1 = (ky/k0) ** 2 * I + A + to_decompose_W_1 = Ky ** 2 * I + A - to_decompose_W_2 = (ky/k0) ** 2 * I + B @ o_E_conv_i - # to_decompose_W_2 = (ky/k0) ** 2 * I + B @ E_conv + # to_decompose_W_2 = (ky/k0) ** 2 * I + B @ epx_conv + to_decompose_W_2 = Ky ** 2 * I + B @ epx_conv eigenvalues_1, W_1 = np.linalg.eig(to_decompose_W_1) eigenvalues_2, W_2 = np.linalg.eig(to_decompose_W_2) @@ -136,11 +172,81 @@ def transfer_1d_conical_2(k0, Kx, ky, E_conv, E_conv_i, o_E_conv_i, ff, d, varph Q_1 = np.diag(q_1) Q_2 = np.diag(q_2) + # V_11 = A_i @ W_1 @ Q_1 + # V_12 = (ky / k0) * A_i @ Kx @ W_2 + # V_21 = (ky / k0) * B_i @ Kx @ epz_conv_i @ W_1 + # V_22 = B_i @ W_2 @ Q_2 + V_11 = A_i @ W_1 @ Q_1 - V_12 = (ky / k0) * A_i @ Kx @ W_2 - V_21 = (ky / k0) * B_i @ Kx @ E_conv_i @ W_1 + V_12 = Ky * A_i @ Kx @ W_2 + V_21 = Ky * B_i @ Kx @ epz_conv_i @ W_1 V_22 = B_i @ W_2 @ Q_2 + W = np.block([W_1, W_2]) + V = np.block([[V_11, V_12], + [V_21, V_22]]) + q = np.hstack([q_1, q_2]) + + # return W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 + + return W, V, q + + # + # X_1 = np.diag(np.exp(-k0 * q_1 * d)) + # X_2 = np.diag(np.exp(-k0 * q_2 * d)) + # + # F_c = np.diag(np.cos(varphi)) + # F_s = np.diag(np.sin(varphi)) + # + # V_ss = F_c @ V_11 + # V_sp = F_c @ V_12 - F_s @ W_2 + # W_ss = F_c @ W_1 + F_s @ V_21 + # W_sp = F_s @ V_22 + # W_ps = F_s @ V_11 + # W_pp = F_c @ W_2 + F_s @ V_12 + # V_ps = F_c @ V_21 - F_s @ W_1 + # V_pp = F_c @ V_22 + # + # big_I = np.eye(2 * (len(I)), dtype=type_complex) + # big_X = np.block([[X_1, O], [O, X_2]]) + # big_W = np.block([[V_ss, V_sp], [W_ps, W_pp]]) + # big_V = np.block([[W_ss, W_sp], [V_ps, V_pp]]) + # + # big_W_i = np.linalg.inv(big_W) + # big_V_i = np.linalg.inv(big_V) + # + # big_A = 0.5 * (big_W_i @ big_F + big_V_i @ big_G) + # big_B = 0.5 * (big_W_i @ big_F - big_V_i @ big_G) + # + # big_A_i = np.linalg.inv(big_A) + # + # big_F = big_W @ (big_I + big_X @ big_B @ big_A_i @ big_X) + # big_G = big_V @ (big_I - big_X @ big_B @ big_A_i @ big_X) + # + # big_T = big_T @ big_A_i @ big_X + # + # return big_X, big_F, big_G, big_T, big_A_i, big_B, W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 + + +def transfer_1d_conical_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, + type_complex=np.complex128): + + ff_x = len(W) + + I = np.eye(ff_x, dtype=type_complex) + O = np.zeros((ff_x, ff_x), dtype=type_complex) + + W_1 = W[:ff_x] + W_2 = W[ff_x:] + + V_11 = V[:ff_x, :ff_x] + V_12 = V[:ff_x, ff_x:] + V_21 = V[ff_x:, :ff_x] + V_22 = V[ff_x:, ff_x:] + + q_1 = q[:ff_x] + q_2 = q[ff_x:] + X_1 = np.diag(np.exp(-k0 * q_1 * d)) X_2 = np.diag(np.exp(-k0 * q_2 * d)) @@ -174,23 +280,29 @@ def transfer_1d_conical_2(k0, Kx, ky, E_conv, E_conv_i, o_E_conv_i, ff, d, varph big_T = big_T @ big_A_i @ big_X - return big_X, big_F, big_G, big_T, big_A_i, big_B, W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 + return big_X, big_F, big_G, big_T, big_A_i, big_B -def transfer_1d_conical_3(big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff, delta_i0, k_I_z, k0, n_I, n_II, k_II_z, +def transfer_1d_conical_4(k0, big_F, big_G, big_T, Z_I, Y_I, kz_top, kz_bot, psi, theta, n_I, n_II, type_complex=np.complex128): - I = np.eye(ff, dtype=type_complex) - O = np.zeros((ff, ff), dtype=type_complex) - big_F_11 = big_F[:ff, :ff] - big_F_12 = big_F[:ff, ff:] - big_F_21 = big_F[ff:, :ff] - big_F_22 = big_F[ff:, ff:] + ff_xy = len(big_F) // 2 + + I = np.eye(ff_xy, dtype=type_complex) + O = np.zeros((ff_xy, ff_xy), dtype=type_complex) + + big_F_11 = big_F[:ff_xy, :ff_xy] + big_F_12 = big_F[:ff_xy, ff_xy:] + big_F_21 = big_F[ff_xy:, :ff_xy] + big_F_22 = big_F[ff_xy:, ff_xy:] + + big_G_11 = big_G[:ff_xy, :ff_xy] + big_G_12 = big_G[:ff_xy, ff_xy:] + big_G_21 = big_G[ff_xy:, :ff_xy] + big_G_22 = big_G[ff_xy:, ff_xy:] - big_G_11 = big_G[:ff, :ff] - big_G_12 = big_G[:ff, ff:] - big_G_21 = big_G[ff:, :ff] - big_G_22 = big_G[ff:, ff:] + delta_i0 = np.zeros(ff_xy, dtype=type_complex) + delta_i0[ff_xy // 2] = 1 # Final Equation in form of AX=B final_A = np.block( @@ -211,70 +323,77 @@ def transfer_1d_conical_3(big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff, delta_i final_RT = np.linalg.inv(final_A) @ final_B - R_s = final_RT[:ff, :].flatten() - R_p = final_RT[ff:2 * ff, :].flatten() + R_s = final_RT[:ff_xy, :].flatten() + R_p = final_RT[ff_xy:2 * ff_xy, :].flatten() - big_T1 = final_RT[2 * ff:, :] + big_T1 = final_RT[2 * ff_xy:, :] big_T = big_T @ big_T1 - T_s = big_T[:ff, :].flatten() - T_p = big_T[ff:, :].flatten() + T_s = big_T[:ff_xy, :].flatten() + T_p = big_T[ff_xy:, :].flatten() - de_ri = R_s * np.conj(R_s) * np.real(k_I_z / (k0 * n_I * np.cos(theta))) \ - + R_p * np.conj(R_p) * np.real((k_I_z / n_I ** 2) / (k0 * n_I * np.cos(theta))) + de_ri = R_s * np.conj(R_s) * np.real(kz_top / (k0 * n_I * np.cos(theta))) \ + + R_p * np.conj(R_p) * np.real((kz_top / n_I ** 2) / (k0 * n_I * np.cos(theta))) - de_ti = T_s * np.conj(T_s) * np.real(k_II_z / (k0 * n_I * np.cos(theta))) \ - + T_p * np.conj(T_p) * np.real((k_II_z / n_II ** 2) / (k0 * n_I * np.cos(theta))) + de_ti = T_s * np.conj(T_s) * np.real(kz_bot / (k0 * n_I * np.cos(theta))) \ + + T_p * np.conj(T_p) * np.real((kz_bot / n_II ** 2) / (k0 * n_I * np.cos(theta))) return de_ri.real, de_ti.real, big_T1 -def transfer_2d_1(ff_x, ff_y, ff_xy, k0, n_I, n_II, kx_vector, period, fourier_indices_y, theta, phi, wavelength, - type_complex=np.complex128): +def transfer_2d_1(k0, ff_x, ff_y, kx_vector, ky_vector, n_I, n_II, type_complex=np.complex128): + + ff_xy = ff_x * ff_y + I = np.eye(ff_xy, dtype=type_complex) O = np.zeros((ff_xy, ff_xy), dtype=type_complex) - # kx_vector = k0 * (n_I * np.sin(theta) * np.cos(phi) + fourier_indices * ( - # wavelength / period[0])).astype(type_complex) + kz_top = (k0 ** 2 * n_I ** 2 - kx_vector ** 2 - ky_vector.reshape((-1, 1)) ** 2) ** 0.5 + kz_bot = (k0 ** 2 * n_II ** 2 - kx_vector ** 2 - ky_vector.reshape((-1, 1)) ** 2) ** 0.5 - ky_vector = k0 * (n_I * np.sin(theta) * np.sin(phi) + fourier_indices_y * ( - wavelength / period[1])).astype(type_complex) + kz_top = kz_top.flatten().conjugate() + kz_bot = kz_bot.flatten().conjugate() - k_I_z = (k0 ** 2 * n_I ** 2 - kx_vector ** 2 - ky_vector.reshape((-1, 1)) ** 2) ** 0.5 - k_II_z = (k0 ** 2 * n_II ** 2 - kx_vector ** 2 - ky_vector.reshape((-1, 1)) ** 2) ** 0.5 + varphi = np.arctan(ky_vector.reshape((-1, 1)) / kx_vector).flatten() - k_I_z = k_I_z.flatten().conjugate() - k_II_z = k_II_z.flatten().conjugate() + Kz_bot_s = np.diag(kz_bot / k0) + Kz_bot_p = np.diag(kz_bot / (k0 * n_II ** 2)) - Kx = np.diag(np.tile(kx_vector, ff_y).flatten()) / k0 - Ky = np.diag(np.tile(ky_vector.reshape((-1, 1)), ff_x).flatten()) / k0 + big_F = np.block([[I, O], [O, 1j * Kz_bot_p]]) + big_G = np.block([[1j * Kz_bot_s, O], [O, I]]) - varphi = np.arctan(ky_vector.reshape((-1, 1)) / kx_vector).flatten() + Kz_bot = np.diag(kz_bot / k0) + Kz_bot_p = np.diag(kz_bot / (k0 * n_II ** 2)) - Y_I = np.diag(k_I_z / k0) - Y_II = np.diag(k_II_z / k0) + big_F = np.block([[I, O], [O, 1j * Kz_bot_p]]) + big_G = np.block([[1j * Kz_bot_s, O], [O, I]]) - Z_I = np.diag(k_I_z / (k0 * n_I ** 2)) - Z_II = np.diag(k_II_z / (k0 * n_II ** 2)) - big_F = np.block([[I, O], [O, 1j * Z_II]]) - big_G = np.block([[1j * Y_II, O], [O, I]]) big_T = np.eye(2 * ff_xy, dtype=type_complex) - return kx_vector, ky_vector, Kx, Ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T + # return Kx, Ky, kz_top, kz_bot, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T + return kz_top, kz_bot, varphi, big_F, big_G, big_T -def transfer_2d_wv(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, type_complex=np.complex128): - I = np.eye(ff_xy, dtype=type_complex) +def transfer_2d_2(k0, kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=np.complex128): + + ff_x = len(kx) + ff_y = len(ky) + + I = np.eye(ff_y * ff_x, dtype=type_complex) + + Kx = np.diag(np.tile(kx, ff_y).flatten()) / k0 + Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) / k0 + + B = Kx @ epz_conv_i @ Kx - I + D = Ky @ epz_conv_i @ Ky - I - B = Kx @ E_conv_i @ Kx - I - D = Ky @ E_conv_i @ Ky - I S2_from_S = np.block( [ - [Ky ** 2 + B @ E_conv, Kx @ (E_conv_i @ Ky @ E_conv - Ky)], - [Ky @ (E_conv_i @ Kx @ E_conv - Kx), Kx ** 2 + D @ E_conv] + [Ky ** 2 + B @ epx_conv, Kx @ (epz_conv_i @ Ky @ epy_conv - Ky)], + [Ky @ (epz_conv_i @ Kx @ epx_conv - Kx), Kx ** 2 + D @ epy_conv] ]) eigenvalues, W = np.linalg.eig(S2_from_S) @@ -286,8 +405,8 @@ def transfer_2d_wv(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, type_complex=np. U1_from_S = np.block( [ - [-Kx @ Ky, Kx ** 2 - E_conv], - [E_conv - Ky ** 2, Ky @ Kx] + [-Kx @ Ky, Kx ** 2 - epy_conv], + [epx_conv - Ky ** 2, Ky @ Kx] ] ) @@ -296,20 +415,25 @@ def transfer_2d_wv(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, type_complex=np. return W, V, q -def transfer_2d_2(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, type_complex=np.complex128): +def transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=np.complex128): + + ff_xy = len(q)//2 + + I = np.eye(ff_xy, dtype=type_complex) + O = np.zeros((ff_xy, ff_xy), dtype=type_complex) - q1 = q[:center] - q2 = q[center:] + q1 = q[:ff_xy] + q2 = q[ff_xy:] - W_11 = W[:center, :center] - W_12 = W[:center, center:] - W_21 = W[center:, :center] - W_22 = W[center:, center:] + W_11 = W[:ff_xy, :ff_xy] + W_12 = W[:ff_xy, ff_xy:] + W_21 = W[ff_xy:, :ff_xy] + W_22 = W[ff_xy:, ff_xy:] - V_11 = V[:center, :center] - V_12 = V[:center, center:] - V_21 = V[center:, :center] - V_22 = V[center:, center:] + V_11 = V[:ff_xy, :ff_xy] + V_12 = V[:ff_xy, ff_xy:] + V_21 = V[ff_xy:, :ff_xy] + V_22 = V[ff_xy:, ff_xy:] X_1 = np.diag(np.exp(-k0 * q1 * d)) X_2 = np.diag(np.exp(-k0 * q2 * d)) @@ -345,30 +469,45 @@ def transfer_2d_2(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, typ big_T = big_T @ big_A_i @ big_X - return big_X, big_F, big_G, big_T, big_A_i, big_B, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22 + return big_X, big_F, big_G, big_T, big_A_i, big_B -def transfer_2d_3(center, big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff_xy, delta_i0, k_I_z, k0, n_I, n_II, k_II_z, +def transfer_2d_4(k0, big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, n_II, type_complex=np.complex128): + + ff_xy = len(big_F) // 2 + + Kz_top_s = np.diag(kz_top / k0) # Y_I + Kz_top_p = np.diag(kz_top / (k0 * n_I ** 2)) # Z_I + + Kz_bot_s = np.diag(kz_bot / k0) # Y_II + Kz_bot_p = np.diag(kz_bot / (k0 * n_II ** 2)) # Z_II + + kz_bot_s = np.diag(kz_bot / k0) # Y_II + kz_bot_p = np.diag(kz_bot / (k0 * n_II ** 2)) # Z_II + I = np.eye(ff_xy, dtype=type_complex) O = np.zeros((ff_xy, ff_xy), dtype=type_complex) - big_F_11 = big_F[:center, :center] - big_F_12 = big_F[:center, center:] - big_F_21 = big_F[center:, :center] - big_F_22 = big_F[center:, center:] + big_F_11 = big_F[:ff_xy, :ff_xy] + big_F_12 = big_F[:ff_xy, ff_xy:] + big_F_21 = big_F[ff_xy:, :ff_xy] + big_F_22 = big_F[ff_xy:, ff_xy:] + + big_G_11 = big_G[:ff_xy, :ff_xy] + big_G_12 = big_G[:ff_xy, ff_xy:] + big_G_21 = big_G[ff_xy:, :ff_xy] + big_G_22 = big_G[ff_xy:, ff_xy:] - big_G_11 = big_G[:center, :center] - big_G_12 = big_G[:center, center:] - big_G_21 = big_G[center:, :center] - big_G_22 = big_G[center:, center:] + delta_i0 = np.zeros((ff_xy, 1), dtype=type_complex) + delta_i0[ff_xy // 2, 0] = 1 # Final Equation in form of AX=B final_A = np.block( [ [I, O, -big_F_11, -big_F_12], - [O, -1j * Z_I, -big_F_21, -big_F_22], - [-1j * Y_I, O, -big_G_11, -big_G_12], + [O, -1j * Kz_top_p, -big_F_21, -big_F_22], + [-1j * Kz_top_s, O, -big_G_11, -big_G_12], [O, I, -big_G_21, -big_G_22], ] ) @@ -387,16 +526,18 @@ def transfer_2d_3(center, big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff_xy, delt R_s = final_RT[:ff_xy, :].flatten() R_p = final_RT[ff_xy: 2 * ff_xy, :].flatten() + # TODO: check why this is not applied for TE big_T1 = final_RT[2 * ff_xy:, :] big_T = big_T @ big_T1 T_s = big_T[:ff_xy, :].flatten() T_p = big_T[ff_xy:, :].flatten() - de_ri = R_s * np.conj(R_s) * np.real(k_I_z / (k0 * n_I * np.cos(theta))) \ - + R_p * np.conj(R_p) * np.real((k_I_z / n_I ** 2) / (k0 * n_I * np.cos(theta))) + de_ri = R_s * np.conj(R_s) * np.real(np.diag(Kz_top_s) / (n_I * np.cos(theta))) \ + + R_p * np.conj(R_p) * np.real(np.diag(Kz_top_p) / (n_I * np.cos(theta))) + + de_ti = T_s * np.conj(T_s) * np.real(np.diag(Kz_bot_s) / (n_I * np.cos(theta))) \ + + T_p * np.conj(T_p) * np.real((np.diag(Kz_bot_p) / n_II ** 2) / (n_I * np.cos(theta))) - de_ti = T_s * np.conj(T_s) * np.real(k_II_z / (k0 * n_I * np.cos(theta))) \ - + T_p * np.conj(T_p) * np.real((k_II_z / n_II ** 2) / (k0 * n_I * np.cos(theta))) return de_ri.real, de_ti.real, big_T1 diff --git a/setup.py b/setup.py index 8d514fd..0273b3b 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ } setup( name='meent', - version='0.9.13', + version='0.10.1', url='https://github.com/kc-ml2/meent', author='KC ML2', author_email='yongha@kc-ml2.com', From c7811d33a09cfdc395c8cc3b22c9921e343bae97 Mon Sep 17 00:00:00 2001 From: yonghakim Date: Fri, 19 Jul 2024 21:17:35 +0900 Subject: [PATCH 03/15] updating --- meent/on_numpy/emsolver/_base.py | 61 +++---- meent/on_numpy/emsolver/transfer_method.py | 183 +++++++++++---------- 2 files changed, 125 insertions(+), 119 deletions(-) diff --git a/meent/on_numpy/emsolver/_base.py b/meent/on_numpy/emsolver/_base.py index d5f02a6..0618eff 100644 --- a/meent/on_numpy/emsolver/_base.py +++ b/meent/on_numpy/emsolver/_base.py @@ -198,18 +198,18 @@ def get_kx_vector(self, wavelength): return kx_vector def get_kx_ky_vector(self, wavelength): - k0 = 2 * np.pi / wavelength + fto_x_range = np.arange(-self.fto[0], self.fto[0] + 1) fto_y_range = np.arange(-self.fto[1], self.fto[1] + 1) if self.grating_type == 0: - kx_vector = k0 * (self.n_I * np.sin(self.theta) + fto_x_range * (wavelength / self.period[0]) + kx_vector = (self.n_I * np.sin(self.theta) + fto_x_range * (wavelength / self.period[0]) ).astype(self.type_complex) else: - kx_vector = k0 * (self.n_I * np.sin(self.theta) * np.cos(self.phi) + fto_x_range * ( + kx_vector = (self.n_I * np.sin(self.theta) * np.cos(self.phi) + fto_x_range * ( wavelength / self.period[0])).astype(self.type_complex) - ky_vector = k0 * (self.n_I * np.sin(self.theta) * np.sin(self.phi) + fto_y_range * ( + ky_vector = (self.n_I * np.sin(self.theta) * np.sin(self.phi) + fto_y_range * ( wavelength / self.period[1])).astype(self.type_complex) return kx_vector, ky_vector @@ -218,19 +218,19 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): self.layer_info_list = [] self.T1 = None - ff = self.fto[0] * 2 + 1 + ff_x = self.fto[0] * 2 + 1 + ff_y = 1 - delta_i0 = np.zeros(ff, dtype=self.type_complex) + delta_i0 = np.zeros(ff_x, dtype=self.type_complex) delta_i0[self.fto[0]] = 1 k0 = 2 * np.pi / wavelength - - kx_vector, _ = self.get_kx_ky_vector(wavelength) + kx, ky = self.get_kx_ky_vector(wavelength) if self.algo == 'TMM': - kx_vector, Kx, kz_top, kz_bot, f, YZ_I, g, inc_term, T \ - = transfer_1d_1(ff, self.pol, k0, self.n_I, self.n_II, kx_vector, - self.theta, delta_i0, self.fto, type_complex=self.type_complex) + kz_top, kz_bot, f, g, T \ + = transfer_1d_1(ff_x, ff_y, kx, ky, self.pol, self.n_I, self.n_II, + type_complex=self.type_complex) elif self.algo == 'SMM': Kx, Wg, Vg, Kzg, Wr, Vr, Kzr, Wt, Vt, Kzt, Ar, Br, Sg \ = scattering_1d_1(k0, self.n_I, self.n_II, self.theta, self.phi, self.period, @@ -238,9 +238,6 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): else: raise ValueError - # From the last layer - # for E_conv, o_E_conv, d in zip(E_conv_all[::-1], o_E_conv_all[::-1], self.thickness[::-1]): - # count = min(len(epx_conv_all), len(self.thickness)) assert len(epx_conv_all) == len(self.thickness) # From the last layer @@ -275,7 +272,7 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): # raise ValueError if self.algo == 'TMM': - W, V, q = transfer_1d_2(self.pol, Kx, epx_conv, epy_conv, epz_conv_i, self.type_complex) + W, V, q = transfer_1d_2(self.pol, kx, epx_conv, epy_conv, epz_conv_i, self.type_complex) X, f, g, T, a_i, b = transfer_1d_3(k0, W, V, q, d, f, g, T, type_complex=self.type_complex) @@ -289,8 +286,8 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): raise ValueError if self.algo == 'TMM': - de_ri, de_ti, T1 = transfer_1d_4(g, YZ_I, f, delta_i0, inc_term, T, kz_top, k0, self.n_I, self.n_II, - self.theta, self.pol, kz_bot) + de_ri, de_ti, T1 = transfer_1d_4(f, g, T, kz_top, kz_bot, self.psi, self.theta, self.n_I, self.n_II, + self.pol, type_complex=self.type_complex) self.T1 = T1 elif self.algo == 'SMM': @@ -307,24 +304,21 @@ def solve_1d_conical(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_al self.T1 = None ff_x = self.fto[0] * 2 + 1 + ff_y = 1 k0 = 2 * np.pi / wavelength - kx_vector, ky_vector = self.get_kx_ky_vector(wavelength) + kx, ky = self.get_kx_ky_vector(wavelength) if self.algo == 'TMM': - Kx, Ky, kz_top, kz_bot, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ - = transfer_1d_conical_1(k0, ff_x, kx_vector, ky_vector, self.n_I, self.n_II, - type_complex=self.type_complex) + kz_top, kz_bot, varphi, big_F, big_G, big_T \ + = transfer_1d_conical_1(ff_x, ff_y, kx, ky, self.n_I, self.n_II, type_complex=self.type_complex) elif self.algo == 'SMM': print('SMM for 1D conical is not implemented') return np.nan, np.nan else: raise ValueError - assert len(epx_conv_all) == len(self.thickness) - # From the last layer - # for layer_index in range(count)[::-1]: for layer_index in range(len(self.thickness))[::-1]: epx_conv = epx_conv_all[layer_index] @@ -334,10 +328,10 @@ def solve_1d_conical(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_al d = self.thickness[layer_index] if self.algo == 'TMM': - W, V, q = transfer_1d_conical_2(Kx, Ky, epx_conv, epy_conv, epz_conv_i, type_complex=self.type_complex) + W, V, q = transfer_1d_conical_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=self.type_complex) big_X, big_F, big_G, big_T, big_A_i, big_B, \ - = transfer_1d_conical_3(k0,W, V, q, d, varphi, big_F, big_G, big_T, type_complex=self.type_complex) + = transfer_1d_conical_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=self.type_complex) layer_info = [epz_conv_i, W, V, q, d, big_X, big_A_i, big_B] # TODO: change field recover code self.layer_info_list.append(layer_info) @@ -348,9 +342,8 @@ def solve_1d_conical(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_al raise ValueError if self.algo == 'TMM': - de_ri, de_ti, big_T1 = transfer_1d_conical_4(k0, big_F, big_G, big_T, Z_I, Y_I, kz_top, kz_bot, - self.psi, self.theta, self.n_I, self.n_II, - type_complex=self.type_complex) + de_ri, de_ti, big_T1 = transfer_1d_conical_4(big_F, big_G, big_T, kz_top, kz_bot, self.psi, self.theta, + self.n_I, self.n_II, type_complex=self.type_complex) self.T1 = big_T1 elif self.algo == 'SMM': @@ -369,13 +362,11 @@ def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): ff_y = self.fto[1] * 2 + 1 k0 = 2 * np.pi / wavelength - kx_vector, ky_vector = self.get_kx_ky_vector(wavelength) + kx, ky = self.get_kx_ky_vector(wavelength) if self.algo == 'TMM': - # Kx, Ky, kz_top, kz_bot, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ kz_top, kz_bot, varphi, big_F, big_G, big_T \ - = transfer_2d_1(k0, ff_x, ff_y, kx_vector, ky_vector, self.n_I, self.n_II, - type_complex=self.type_complex) + = transfer_2d_1(ff_x, ff_y, kx, ky, self.n_I, self.n_II, type_complex=self.type_complex) elif self.algo == 'SMM': Kx, Ky, kz_inc, Wg, Vg, Kzg, Wr, Vr, Kzr, Wt, Vt, Kzt, Ar, Br, Sg \ @@ -393,7 +384,7 @@ def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): d = self.thickness[layer_index] if self.algo == 'TMM': - W, V, q = transfer_2d_2(k0, kx_vector, ky_vector, epx_conv, epy_conv, epz_conv_i, type_complex=self.type_complex) + W, V, q = transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=self.type_complex) big_X, big_F, big_G, big_T, big_A_i, big_B, \ = transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=self.type_complex) @@ -408,7 +399,7 @@ def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): raise ValueError if self.algo == 'TMM': - de_ri, de_ti, big_T1 = transfer_2d_4(k0, big_F, big_G, big_T, kz_top, kz_bot, self.psi, self.theta, + de_ri, de_ti, big_T1 = transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, self.psi, self.theta, self.n_I, self.n_II, type_complex=self.type_complex) self.T1 = big_T1 diff --git a/meent/on_numpy/emsolver/transfer_method.py b/meent/on_numpy/emsolver/transfer_method.py index 733cb8f..e146c88 100644 --- a/meent/on_numpy/emsolver/transfer_method.py +++ b/meent/on_numpy/emsolver/transfer_method.py @@ -108,61 +108,92 @@ def transfer_1d_4(k0, f, g, T, YZ_I, kz_top, delta_i0, inc_term, n_I, n_II, the return de_ri.real, de_ti.real, T1 -def transfer_1d_conical_1(k0, ff_x, n_I, n_II, kx_vector, ky_vector, type_complex=np.complex128): +def transfer_1d_conical_1(ff_x, ff_y, kx_vector, ky_vector, n_I, n_II, type_complex=np.complex128): - I = np.eye(ff_x, dtype=type_complex) - O = np.zeros((ff_x, ff_x), dtype=type_complex) + ff_xy = ff_x * ff_y + + I = np.eye(ff_xy, dtype=type_complex) + O = np.zeros((ff_xy, ff_xy), dtype=type_complex) # kx_vector = k0 * (n_I * np.sin(theta) * np.cos(phi) + fourier_indices * (wavelength / period[0]) # ).astype(type_complex) # ky = k0 * n_I * np.sin(theta) * np.sin(phi) # TODO: check ky is equal to ky_vector - kz_top = (k0 ** 2 * n_I ** 2 - kx_vector ** 2 - ky_vector ** 2) ** 0.5 - kz_bot = (k0 ** 2 * n_II ** 2 - kx_vector ** 2 - ky_vector ** 2) ** 0.5 + kz_top = (n_I ** 2 - kx_vector ** 2 - ky_vector ** 2) ** 0.5 + kz_bot = (n_II ** 2 - kx_vector ** 2 - ky_vector ** 2) ** 0.5 kz_top = kz_top.conjugate() kz_bot = kz_bot.conjugate() - Kx = np.diag(kx_vector / k0) - Ky = np.diag(ky_vector / k0) + # Kx = np.diag(kx_vector) + # Ky = np.diag(ky_vector) varphi = np.arctan(ky_vector / kx_vector) - Y_I = np.diag(kz_top / k0) - Y_II = np.diag(kz_bot / k0) - - Z_I = np.diag(kz_top / (k0 * n_I ** 2)) - Z_II = np.diag(kz_bot / (k0 * n_II ** 2)) + Kz_bot = np.diag(kz_bot) - big_F = np.block([[I, O], [O, 1j * Z_II]]) - big_G = np.block([[1j * Y_II, O], [O, I]]) + # Y_I = np.diag(kz_top) + # Y_II = np.diag(kz_bot) + # + # Z_I = np.diag(kz_top / (n_I ** 2)) + # Z_II = np.diag(kz_bot / (n_II ** 2)) - big_T = np.eye(2 * ff_x, dtype=type_complex) + big_F = np.block([[I, O], [O, 1j * Kz_bot / (n_II ** 2)]]) + big_G = np.block([[1j * Kz_bot, O], [O, I]]) + big_T = np.eye(2 * ff_xy, dtype=type_complex) - return Kx, Ky, kz_top, kz_bot, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T + return kz_top, kz_bot, varphi, big_F, big_G, big_T -def transfer_1d_conical_2(Kx, Ky, epx_conv, epy_conv, epz_conv_i, +def transfer_1d_conical_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=np.complex128): - I = np.eye(len(Kx), dtype=type_complex) + ff_x = len(kx) + ff_y = len(ky) + + I = np.eye(ff_y * ff_x, dtype=type_complex) - A = Kx ** 2 - epy_conv + Kx = np.diag(np.tile(kx, ff_y).flatten()) + Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) + + epz_conv = np.linalg.inv(epz_conv_i) + + A = Kx ** 2 - epz_conv B = Kx @ epz_conv_i @ Kx - I - A_i = np.linalg.inv(A) - B_i = np.linalg.inv(B) + Omega2_RL = Ky ** 2 + A + Omega2_LR = Ky ** 2 + B @ epz_conv + + + + # A = Kx ** 2 - epz_conv + # B = Kx @ epz_conv_i @ Kx - I + # + # Omega2_RL = Ky ** 2 + A + # Omega2_LR = Ky ** 2 + B @ epx_conv - # Todo: remove k0 - # to_decompose_W_1 = (ky/k0) ** 2 * I + A - to_decompose_W_1 = Ky ** 2 * I + A - # to_decompose_W_2 = (ky/k0) ** 2 * I + B @ epx_conv - to_decompose_W_2 = Ky ** 2 * I + B @ epx_conv - eigenvalues_1, W_1 = np.linalg.eig(to_decompose_W_1) - eigenvalues_2, W_2 = np.linalg.eig(to_decompose_W_2) + # A = Kx ** 2 - epy_conv + # B = Kx @ epz_conv_i @ Kx - I + # + # Omega2_RL = Ky ** 2 + A + # Omega2_LR = Ky ** 2 + B @ epx_conv + # + # + # + # A = Kx ** 2 - epx_conv + # B = Kx @ epz_conv_i @ Kx - I + # + # Omega2_RL = Ky ** 2 + A + # Omega2_LR = Ky ** 2 + B @ epy_conv + + + + + eigenvalues_1, W_1 = np.linalg.eig(Omega2_RL) + eigenvalues_2, W_2 = np.linalg.eig(Omega2_LR) eigenvalues_1 += 0j # to get positive square root eigenvalues_2 += 0j # to get positive square root @@ -172,10 +203,8 @@ def transfer_1d_conical_2(Kx, Ky, epx_conv, epy_conv, epz_conv_i, Q_1 = np.diag(q_1) Q_2 = np.diag(q_2) - # V_11 = A_i @ W_1 @ Q_1 - # V_12 = (ky / k0) * A_i @ Kx @ W_2 - # V_21 = (ky / k0) * B_i @ Kx @ epz_conv_i @ W_1 - # V_22 = B_i @ W_2 @ Q_2 + A_i = np.linalg.inv(A) + B_i = np.linalg.inv(B) V_11 = A_i @ W_1 @ Q_1 V_12 = Ky * A_i @ Kx @ W_2 @@ -185,7 +214,7 @@ def transfer_1d_conical_2(Kx, Ky, epx_conv, epy_conv, epz_conv_i, W = np.block([W_1, W_2]) V = np.block([[V_11, V_12], [V_21, V_22]]) - q = np.hstack([q_1, q_2]) + q = np.block([q_1, q_2]) # return W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 @@ -236,8 +265,8 @@ def transfer_1d_conical_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, I = np.eye(ff_x, dtype=type_complex) O = np.zeros((ff_x, ff_x), dtype=type_complex) - W_1 = W[:ff_x] - W_2 = W[ff_x:] + W_1 = W[:, :ff_x] + W_2 = W[:, ff_x:] V_11 = V[:ff_x, :ff_x] V_12 = V[:ff_x, ff_x:] @@ -283,11 +312,13 @@ def transfer_1d_conical_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, return big_X, big_F, big_G, big_T, big_A_i, big_B -def transfer_1d_conical_4(k0, big_F, big_G, big_T, Z_I, Y_I, kz_top, kz_bot, psi, theta, n_I, n_II, +def transfer_1d_conical_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, n_II, type_complex=np.complex128): ff_xy = len(big_F) // 2 + Kz_top = np.diag(kz_top) + I = np.eye(ff_xy, dtype=type_complex) O = np.zeros((ff_xy, ff_xy), dtype=type_complex) @@ -304,22 +335,25 @@ def transfer_1d_conical_4(k0, big_F, big_G, big_T, Z_I, Y_I, kz_top, kz_bot, psi delta_i0 = np.zeros(ff_xy, dtype=type_complex) delta_i0[ff_xy // 2] = 1 + delta_i0 = np.zeros((ff_xy, 1), dtype=type_complex) + delta_i0[ff_xy // 2, 0] = 1 + # Final Equation in form of AX=B final_A = np.block( [ [I, O, -big_F_11, -big_F_12], - [O, -1j * Z_I, -big_F_21, -big_F_22], - [-1j * Y_I, O, -big_G_11, -big_G_12], + [O, -1j * Kz_top / (n_I ** 2), -big_F_21, -big_F_22], + [-1j * Kz_top, O, -big_G_11, -big_G_12], [O, I, -big_G_21, -big_G_22], ] ) - final_B = np.hstack([ + final_B = np.block([ [-np.sin(psi) * delta_i0], [-np.cos(psi) * np.cos(theta) * delta_i0], [-1j * np.sin(psi) * n_I * np.cos(theta) * delta_i0], [1j * n_I * np.cos(psi) * delta_i0] - ]).T + ]) final_RT = np.linalg.inv(final_A) @ final_B @@ -332,85 +366,73 @@ def transfer_1d_conical_4(k0, big_F, big_G, big_T, Z_I, Y_I, kz_top, kz_bot, psi T_s = big_T[:ff_xy, :].flatten() T_p = big_T[ff_xy:, :].flatten() - de_ri = R_s * np.conj(R_s) * np.real(kz_top / (k0 * n_I * np.cos(theta))) \ - + R_p * np.conj(R_p) * np.real((kz_top / n_I ** 2) / (k0 * n_I * np.cos(theta))) + de_ri = R_s * np.conj(R_s) * np.real(kz_top / (n_I * np.cos(theta))) \ + + R_p * np.conj(R_p) * np.real(kz_top / (n_I ** 2) / (n_I * np.cos(theta))) - de_ti = T_s * np.conj(T_s) * np.real(kz_bot / (k0 * n_I * np.cos(theta))) \ - + T_p * np.conj(T_p) * np.real((kz_bot / n_II ** 2) / (k0 * n_I * np.cos(theta))) + de_ti = T_s * np.conj(T_s) * np.real(kz_bot / (n_I * np.cos(theta))) \ + + T_p * np.conj(T_p) * np.real(kz_bot / n_II ** 2 / (n_I * np.cos(theta))) return de_ri.real, de_ti.real, big_T1 -def transfer_2d_1(k0, ff_x, ff_y, kx_vector, ky_vector, n_I, n_II, type_complex=np.complex128): +def transfer_2d_1(ff_x, ff_y, kx_vector, ky_vector, n_I, n_II, type_complex=np.complex128): ff_xy = ff_x * ff_y I = np.eye(ff_xy, dtype=type_complex) O = np.zeros((ff_xy, ff_xy), dtype=type_complex) - kz_top = (k0 ** 2 * n_I ** 2 - kx_vector ** 2 - ky_vector.reshape((-1, 1)) ** 2) ** 0.5 - kz_bot = (k0 ** 2 * n_II ** 2 - kx_vector ** 2 - ky_vector.reshape((-1, 1)) ** 2) ** 0.5 + kz_top = (n_I ** 2 - kx_vector ** 2 - ky_vector.reshape((-1, 1)) ** 2) ** 0.5 + kz_bot = (n_II ** 2 - kx_vector ** 2 - ky_vector.reshape((-1, 1)) ** 2) ** 0.5 kz_top = kz_top.flatten().conjugate() kz_bot = kz_bot.flatten().conjugate() varphi = np.arctan(ky_vector.reshape((-1, 1)) / kx_vector).flatten() - Kz_bot_s = np.diag(kz_bot / k0) - Kz_bot_p = np.diag(kz_bot / (k0 * n_II ** 2)) - - big_F = np.block([[I, O], [O, 1j * Kz_bot_p]]) - big_G = np.block([[1j * Kz_bot_s, O], [O, I]]) - - Kz_bot = np.diag(kz_bot / k0) - Kz_bot_p = np.diag(kz_bot / (k0 * n_II ** 2)) - - big_F = np.block([[I, O], [O, 1j * Kz_bot_p]]) - big_G = np.block([[1j * Kz_bot_s, O], [O, I]]) - - + Kz_bot = np.diag(kz_bot) + big_F = np.block([[I, O], [O, 1j * Kz_bot / (n_II ** 2)]]) + big_G = np.block([[1j * Kz_bot, O], [O, I]]) big_T = np.eye(2 * ff_xy, dtype=type_complex) - # return Kx, Ky, kz_top, kz_bot, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T return kz_top, kz_bot, varphi, big_F, big_G, big_T -def transfer_2d_2(k0, kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=np.complex128): +def transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=np.complex128): ff_x = len(kx) ff_y = len(ky) I = np.eye(ff_y * ff_x, dtype=type_complex) - Kx = np.diag(np.tile(kx, ff_y).flatten()) / k0 - Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) / k0 + Kx = np.diag(np.tile(kx, ff_y).flatten()) + Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) B = Kx @ epz_conv_i @ Kx - I D = Ky @ epz_conv_i @ Ky - I - - S2_from_S = np.block( + Omega2_LR = np.block( [ [Ky ** 2 + B @ epx_conv, Kx @ (epz_conv_i @ Ky @ epy_conv - Ky)], [Ky @ (epz_conv_i @ Kx @ epx_conv - Kx), Kx ** 2 + D @ epy_conv] ]) - eigenvalues, W = np.linalg.eig(S2_from_S) + eigenvalues, W = np.linalg.eig(Omega2_LR) eigenvalues += 0j # to get positive square root q = eigenvalues ** 0.5 Q = np.diag(q) Q_i = np.linalg.inv(Q) - U1_from_S = np.block( + Omega_R = np.block( [ [-Kx @ Ky, Kx ** 2 - epy_conv], [epx_conv - Ky ** 2, Ky @ Kx] ] ) - V = U1_from_S @ W @ Q_i + V = Omega_R @ W @ Q_i return W, V, q @@ -472,19 +494,12 @@ def transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=np.c return big_X, big_F, big_G, big_T, big_A_i, big_B -def transfer_2d_4(k0, big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, n_II, +def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, n_II, type_complex=np.complex128): ff_xy = len(big_F) // 2 - Kz_top_s = np.diag(kz_top / k0) # Y_I - Kz_top_p = np.diag(kz_top / (k0 * n_I ** 2)) # Z_I - - Kz_bot_s = np.diag(kz_bot / k0) # Y_II - Kz_bot_p = np.diag(kz_bot / (k0 * n_II ** 2)) # Z_II - - kz_bot_s = np.diag(kz_bot / k0) # Y_II - kz_bot_p = np.diag(kz_bot / (k0 * n_II ** 2)) # Z_II + Kz_top = np.diag(kz_top) I = np.eye(ff_xy, dtype=type_complex) O = np.zeros((ff_xy, ff_xy), dtype=type_complex) @@ -506,8 +521,8 @@ def transfer_2d_4(k0, big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, n_II final_A = np.block( [ [I, O, -big_F_11, -big_F_12], - [O, -1j * Kz_top_p, -big_F_21, -big_F_22], - [-1j * Kz_top_s, O, -big_G_11, -big_G_12], + [O, -1j * Kz_top / (n_I ** 2), -big_F_21, -big_F_22], + [-1j * Kz_top, O, -big_G_11, -big_G_12], [O, I, -big_G_21, -big_G_22], ] ) @@ -533,11 +548,11 @@ def transfer_2d_4(k0, big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, n_II T_s = big_T[:ff_xy, :].flatten() T_p = big_T[ff_xy:, :].flatten() - de_ri = R_s * np.conj(R_s) * np.real(np.diag(Kz_top_s) / (n_I * np.cos(theta))) \ - + R_p * np.conj(R_p) * np.real(np.diag(Kz_top_p) / (n_I * np.cos(theta))) + de_ri = R_s * np.conj(R_s) * np.real(kz_top / (n_I * np.cos(theta))) \ + + R_p * np.conj(R_p) * np.real(kz_top / (n_I ** 2) / (n_I * np.cos(theta))) - de_ti = T_s * np.conj(T_s) * np.real(np.diag(Kz_bot_s) / (n_I * np.cos(theta))) \ - + T_p * np.conj(T_p) * np.real((np.diag(Kz_bot_p) / n_II ** 2) / (n_I * np.cos(theta))) + de_ti = T_s * np.conj(T_s) * np.real(kz_bot / (n_I * np.cos(theta))) \ + + T_p * np.conj(T_p) * np.real(kz_bot / n_II ** 2 / (n_I * np.cos(theta))) return de_ri.real, de_ti.real, big_T1 From 6aa433fce049783c1613f276e3128e2eb0c14b10 Mon Sep 17 00:00:00 2001 From: yonghakim Date: Sun, 21 Jul 2024 22:44:44 +0900 Subject: [PATCH 04/15] updating --- QA/run_debug.py | 4 +- QA/run_test.py | 4 +- QA/test_case.py | 12 +- benchmarks/benchmark_against_reticolo.py | 8 +- benchmarks/fft_method_comparison.py | 4 +- benchmarks/interface/GRCWA.py | 6 +- benchmarks/interface/Reticolo.py | 8 +- benchmarks/interface/TORCWA.py | 8 +- examples/vector_1d_verification.py | 2 +- examples/vector_2d_verification.py | 2 +- meent/on_jax/emsolver/_base.py | 2 +- meent/on_jax/emsolver/field_distribution.py | 26 +- meent/on_jax/emsolver/rcwa.py | 8 +- meent/on_jax/emsolver/transfer_method.py | 26 +- meent/on_jax/mee.py | 4 +- meent/on_jax/modeler/modeling.py | 4 +- meent/on_jax/optimizer/optimizer.py | 6 +- meent/on_numpy/emsolver/_base.py | 127 ++-- meent/on_numpy/emsolver/convolution_matrix.py | 397 ++++++------ meent/on_numpy/emsolver/field_distribution.py | 607 ++++++++++-------- meent/on_numpy/emsolver/rcwa.py | 120 ++-- meent/on_numpy/emsolver/transfer_method.py | 184 ++---- meent/on_torch/emsolver/_base.py | 2 +- meent/on_torch/emsolver/transfer_method.py | 6 +- setup.py | 2 +- 25 files changed, 777 insertions(+), 802 deletions(-) diff --git a/QA/run_debug.py b/QA/run_debug.py index 1e41caf..55bc097 100644 --- a/QA/run_debug.py +++ b/QA/run_debug.py @@ -42,8 +42,8 @@ def run_debug_cases(n_I, n_II, theta, phi, grating_type, pol): res.plot() # t0 = time.time() - # res = RCWA(grating_type, n_I, n_II, theta, phi, psi, fourier_order, period, wavelength, - # pol, patterns, thickness, algo='SMM') + # res = RCWA(grating_type, n_top, n_bot, theta, phi, psi, fourier_order, period, wavelength, + # pol, patterns, thickness, connecting_algo='SMM') # # res.loop_wavelength_fill_factor() # print(time.time() - t0) diff --git a/QA/run_test.py b/QA/run_test.py index 391a1de..07c876a 100644 --- a/QA/run_test.py +++ b/QA/run_test.py @@ -40,8 +40,8 @@ def run_test(n_I, n_II, theta, phi, grating_type, pol): res.plot(title='TMM') # t0 = time.time() - # res = RCWA(grating_type, n_I, n_II, theta, phi, psi, fourier_order, period, wavelength, - # pol, patterns, thickness, algo='SMM') + # res = RCWA(grating_type, n_top, n_bot, theta, phi, psi, fourier_order, period, wavelength, + # pol, patterns, thickness, connecting_algo='SMM') # # res.loop_wavelength_fill_factor() # print(time.time() - t0) diff --git a/QA/test_case.py b/QA/test_case.py index 07ad907..4d97507 100644 --- a/QA/test_case.py +++ b/QA/test_case.py @@ -37,7 +37,7 @@ def test(): print(de_ri, de_ti) # wavelength = np.linspace(500, 1000, 100) - # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, + # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, # fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) # de_ri, de_ti = AA.loop_wavelength_ucell() # AA.plot() @@ -68,7 +68,7 @@ def test(): print(de_ri, de_ti) # wavelength = np.linspace(500, 1000, 100) - # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, + # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, # fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) # de_ri, de_ti = AA.loop_wavelength_ucell() # AA.plot() @@ -94,7 +94,7 @@ def test(): print(de_ri, de_ti) # wavelength = np.linspace(500, 1000, 100) - # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, + # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, # fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) # de_ri, de_ti = AA.loop_wavelength_ucell() # AA.plot() @@ -125,7 +125,7 @@ def test(): print(de_ri, de_ti) # wavelength = np.linspace(500, 1000, 100) - # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, + # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, # fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) # de_ri, de_ti = AA.loop_wavelength_ucell() # AA.plot() @@ -156,7 +156,7 @@ def test(): print(de_ri, de_ti) # wavelength = np.linspace(500, 1000, 100) - # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, + # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, # fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) # de_ri, de_ti = AA.loop_wavelength_ucell() # AA.plot() @@ -196,7 +196,7 @@ def test(): print(de_ri, de_ti) # wavelength = np.linspace(500, 1000, 100) - # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, + # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, # fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) # de_ri, de_ti = AA.loop_wavelength_ucell() # AA.plot() diff --git a/benchmarks/benchmark_against_reticolo.py b/benchmarks/benchmark_against_reticolo.py index 2e825ad..e718820 100644 --- a/benchmarks/benchmark_against_reticolo.py +++ b/benchmarks/benchmark_against_reticolo.py @@ -9,8 +9,8 @@ def consistency(backend): option = {} option['grating_type'] = 0 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating option['pol'] = 0 # 0: TE, 1: TM - option['n_I'] = 1 # n_incidence - option['n_II'] = 1.5 # n_transmission + option['n_top'] = 1 # n_incidence + option['n_bot'] = 1.5 # n_transmission option['theta'] = 0 * np.pi / 180 option['phi'] = 0 * np.pi / 180 option['psi'] = 0 if option['pol'] else 90 * np.pi / 180 @@ -47,7 +47,7 @@ def consistency(backend): plt.plot(top_tran_info[center - plot_length:center + plot_length + 1], label='reticolo', marker=4) # Meent with CFT - mee.fft_type = 1 + mee.fourier_type = 1 de_ri, de_ti = mee.conv_solve() # print('meent_cont de_ri', de_ri) print('meent_cont; de_ri.sum(), de_ti.sum():', de_ri.sum(), de_ti.sum()) @@ -55,7 +55,7 @@ def consistency(backend): plt.plot(de_ti[center - plot_length:center + plot_length + 1], label='continuous', marker=6) # Meent with DFT - mee.fft_type = 0 + mee.fourier_type = 0 de_ri, de_ti = mee.conv_solve() # print('meent_disc de_ri', de_ri) print('meent_disc; de_ri.sum(), de_ti.sum():', de_ri.sum(), de_ti.sum()) diff --git a/benchmarks/fft_method_comparison.py b/benchmarks/fft_method_comparison.py index aa8729a..30ae372 100644 --- a/benchmarks/fft_method_comparison.py +++ b/benchmarks/fft_method_comparison.py @@ -42,9 +42,9 @@ def compare_conv_mat_method(backend, type_complex, device): ucell_thickness=thickness, device=device, type_complex=type_complex, ) - mee.fft_type = 0 + mee.fourier_type = 0 de_ri, de_ti = mee.conv_solve() - mee.fft_type = 1 + mee.fourier_type = 1 de_ri1, de_ti1 = mee.conv_solve() try: diff --git a/benchmarks/interface/GRCWA.py b/benchmarks/interface/GRCWA.py index f825590..64ea782 100644 --- a/benchmarks/interface/GRCWA.py +++ b/benchmarks/interface/GRCWA.py @@ -77,15 +77,15 @@ def run(self, pattern=None): option = { 'grating_type': 0, 'pol': 1, - 'n_I': 1, - 'n_II': 1, + 'n_top': 1, + 'n_bot': 1, 'theta': 1, 'phi': 1, 'wavelength': 1, 'fourier_order': 1, 'thickness': [1000, 300], 'period': [1000], - 'fft_type': 1, + 'fourier_type': 1, 'ucell': np.array( [ [[3.1, 1.1, 1.2, 1.6, 3.1]], diff --git a/benchmarks/interface/Reticolo.py b/benchmarks/interface/Reticolo.py index 12a6023..97e87e9 100644 --- a/benchmarks/interface/Reticolo.py +++ b/benchmarks/interface/Reticolo.py @@ -168,7 +168,7 @@ def _run(self, pol, theta, phi, period, n_I, fourier_order, # # abseff, effi_r, effi_t = self.eng.reticolo_res2(pattern, self.wavelength, self.deflected_angle, # self.fourier_order, - # self.n_I, self.n_II, self.thickness, self.theta, n_si, nout=3) + # self.n_top, self.n_bot, self.thickness, self.theta, n_si, nout=3) # effi_r, effi_t = np.array(effi_r).flatten(), np.array(effi_t).flatten() # # return abseff, effi_r, effi_t @@ -179,15 +179,15 @@ def _run(self, pol, theta, phi, period, n_I, fourier_order, option = { 'grating_type': 1, 'pol': 1, - 'n_I': 1, - 'n_II': 1, + 'n_top': 1, + 'n_bot': 1, 'theta': 1, 'phi': 1, 'wavelength': 1, 'fourier_order': 1, 'thickness': [1000, 300], 'period': [1000], - 'fft_type': 1, + 'fourier_type': 1, 'ucell': np.array( [ [[3.1, 1.1, 1.2, 1.6, 3.1]], diff --git a/benchmarks/interface/TORCWA.py b/benchmarks/interface/TORCWA.py index a3df556..bfa7706 100644 --- a/benchmarks/interface/TORCWA.py +++ b/benchmarks/interface/TORCWA.py @@ -56,7 +56,7 @@ def run(self): for layer, thick in zip(self.ucell,self.thickness): sim.add_layer(thickness=thick, eps=layer) - # sim.add_output_layer(eps=self.n_II) # This line makes error. + # sim.add_output_layer(eps=self.n_bot) # This line makes error. sim.solve_global_smatrix() order =[ @@ -95,15 +95,15 @@ def run(self): option = { 'grating_type': 1, 'pol': 1, - 'n_I': 1, - 'n_II': 1, + 'n_top': 1, + 'n_bot': 1, 'theta': 1, 'phi': 1, 'wavelength': 100, 'fourier_order': 1, 'thickness': [1000, 300], 'period': [1000], - 'fft_type': 1, + 'fourier_type': 1, 'ucell': np.array( [ [[3.1, 1.1, 1.2, 1.6, 3.1]*10], diff --git a/examples/vector_1d_verification.py b/examples/vector_1d_verification.py index 6c9f08a..bf0b34e 100644 --- a/examples/vector_1d_verification.py +++ b/examples/vector_1d_verification.py @@ -20,7 +20,7 @@ def run_raster(rcwa_options, backend, fft_type): # ucell = ucell.numpy() rcwa_options['backend'] = backend - rcwa_options['fft_type'] = fft_type + rcwa_options['fourier_type'] = fft_type # 0: Discrete Fourier series; 1 is for Continuous FS which is used in vector modeling. diff --git a/examples/vector_2d_verification.py b/examples/vector_2d_verification.py index 0f7e407..69c6c23 100644 --- a/examples/vector_2d_verification.py +++ b/examples/vector_2d_verification.py @@ -20,7 +20,7 @@ def run_raster(rcwa_options, backend, fft_type): # ucell = ucell.numpy() rcwa_options['backend'] = backend - rcwa_options['fft_type'] = fft_type + rcwa_options['fourier_type'] = fft_type # 0: Discrete Fourier series; 1 is for Continuous FS which is used in vector modeling. diff --git a/meent/on_jax/emsolver/_base.py b/meent/on_jax/emsolver/_base.py index 28f52a6..49a7033 100644 --- a/meent/on_jax/emsolver/_base.py +++ b/meent/on_jax/emsolver/_base.py @@ -229,7 +229,7 @@ def get_kx_vector(self, wavelength): kx_vector = k0 * (self.n_I * jnp.sin(self.theta) * jnp.cos(self.phi) + fourier_indices * ( wavelength / self.period[0])).astype(self.type_complex) - # kx_vector = jnp.where(kx_vector == 0, self.perturbation, kx_vector) + # kx = jnp.where(kx == 0, self.perturbation, kx) return kx_vector diff --git a/meent/on_jax/emsolver/field_distribution.py b/meent/on_jax/emsolver/field_distribution.py index dc4f044..6cdfaaf 100644 --- a/meent/on_jax/emsolver/field_distribution.py +++ b/meent/on_jax/emsolver/field_distribution.py @@ -592,7 +592,7 @@ def field_dist_1d_conical_vanilla(wavelength, kx_vector, n_I, theta, phi, T1, la for j in range(res_y): for i in range(res_x): - # val = x_loop_1d_conical(period, res_x, kx_vector, Sx, Sy, Sz, Ux, Uy, Uz, i) + # val = x_loop_1d_conical(period, res_x, kx, Sx, Sy, Sz, Ux, Uy, Uz, i) x = i * period[0] / res_x exp_K = jnp.exp(-1j * kx_vector.reshape((-1, 1)) * x) @@ -689,7 +689,7 @@ def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_ return field_cell -# def field_dist_2d_lax(wavelength, kx_vector, n_I, theta, phi, fto_x, fto_y, T1, layer_info_list, period, +# def field_dist_2d_lax(wavelength, kx, n_top, theta, phi, fto_x, fto_y, T1, layer_info_list, period, # resolution=(10, 10, 10), # type_complex=jnp.complex128): # @@ -698,10 +698,10 @@ def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_ # ff_x = fto_x * 2 + 1 # ff_y = fto_y * 2 + 1 # ff_xy = ff_x * ff_y -# ky_vector = k0 * (n_I * jnp.sin(theta) * jnp.sin(phi) + fourier_indices_y * ( +# ky_vector = k0 * (n_top * jnp.sin(theta) * jnp.sin(phi) + fourier_indices_y * ( # wavelength / period[1])).astype(type_complex) # -# Kx = jnp.diag(jnp.tile(kx_vector, ff_y).flatten()) / k0 +# Kx = jnp.diag(jnp.tile(kx, ff_y).flatten()) / k0 # Ky = jnp.diag(jnp.tile(ky_vector.reshape((-1, 1)), ff_x).flatten()) / k0 # # resolution_x, resolution_y, resolution_z = resolution @@ -718,7 +718,7 @@ def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_ # c = jnp.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer # i=j=k=0 # delete # -# args = [k, j, i, k0, resolution_z, resolution_y, resolution_x, idx_layer, d, kx_vector, ky_vector, q, period, c, Kx, Ky, E_conv_i, W_11, W_12, W_21, W_22, V_11, V_12, V_21] +# args = [k, j, i, k0, resolution_z, resolution_y, resolution_x, idx_layer, d, kx, ky_vector, q, period, c, Kx, Ky, E_conv_i, W_11, W_12, W_21, W_22, V_11, V_12, V_21] # # res_size = 1 * 9 + ff_x + ff_y + 2*ff_xy + 2 + 2*2*ff_xy + 11 * ff_xy**2 # res = jnp.zeros(res_size, dtype=type_complex) @@ -762,7 +762,7 @@ def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_ # d = args[8] # # b, e = 9, 9 + ff_x -# kx_vector = args[b:e] +# kx = args[b:e] # b, e = e, e + ff_y # ky_vector = args[b:e] # b, e = e, e + 2 * ff_xy @@ -799,7 +799,7 @@ def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_ # y = j * period[1] / resolution_y # Sx, Sy, Ux, Uy, Sz, Uz = z_loop_2d(k, c, k0, Kx, Ky, resolution_z, E_conv_i, q, W_11, W_12, W_21, W_22, # V_11, V_12, V_21, V_22, d) -# val = x_loop_2d(period, resolution_x, kx_vector, ky_vector, Sx, Sy, Sz, Ux, Uy, Uz, y, i) +# val = x_loop_2d(period, resolution_x, kx, ky_vector, Sx, Sy, Sz, Ux, Uy, Uz, y, i) # field_cell = field_cell.at[(resolution_z * idx_layer + k).real.astype(int), j.real.astype(int), i.real.astype(int)].set(val) # # return field_cell, val @@ -809,7 +809,7 @@ def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_ # # # -# def field_dist_2d_lax_heavy(wavelength, kx_vector, n_I, theta, phi, fto_x, fto_y, T1, layer_info_list, period, +# def field_dist_2d_lax_heavy(wavelength, kx, n_top, theta, phi, fto_x, fto_y, T1, layer_info_list, period, # resolution=(10, 10, 10), # type_complex=jnp.complex128): # @@ -818,10 +818,10 @@ def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_ # ff_x = fto_x * 2 + 1 # ff_y = fto_y * 2 + 1 # ff_xy = ff_x * ff_y -# ky_vector = k0 * (n_I * jnp.sin(theta) * jnp.sin(phi) + fourier_indices_y * ( +# ky_vector = k0 * (n_top * jnp.sin(theta) * jnp.sin(phi) + fourier_indices_y * ( # wavelength / period[1])).astype(type_complex) # -# Kx = jnp.diag(jnp.tile(kx_vector, ff_y).flatten()) / k0 +# Kx = jnp.diag(jnp.tile(kx, ff_y).flatten()) / k0 # Ky = jnp.diag(jnp.tile(ky_vector.reshape((-1, 1)), ff_x).flatten()) / k0 # # resolution_x, resolution_y, resolution_z = resolution @@ -838,7 +838,7 @@ def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_ # c = jnp.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer # i=j=k=0 # delete # -# args = [k, j, i, k0, resolution_z, resolution_y, resolution_x, idx_layer, d, kx_vector, ky_vector, q, period, c, Kx, Ky, E_conv_i, W_11, W_12, W_21, W_22, V_11, V_12, V_21] +# args = [k, j, i, k0, resolution_z, resolution_y, resolution_x, idx_layer, d, kx, ky_vector, q, period, c, Kx, Ky, E_conv_i, W_11, W_12, W_21, W_22, V_11, V_12, V_21] # # res_size = 1 * 9 + ff_x + ff_y + 2*ff_xy + 2 + 2*2*ff_xy + 11 * ff_xy**2 # res = jnp.zeros(res_size, dtype=type_complex) @@ -882,7 +882,7 @@ def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_ # d = args[8] # # b, e = 9, 9 + ff_x -# kx_vector = args[b:e] +# kx = args[b:e] # b, e = e, e + ff_y # ky_vector = args[b:e] # b, e = e, e + 2 * ff_xy @@ -919,7 +919,7 @@ def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_ # y = j * period[1] / resolution_y # Sx, Sy, Ux, Uy, Sz, Uz = z_loop_2d(k, c, k0, Kx, Ky, resolution_z, E_conv_i, q, W_11, W_12, W_21, W_22, # V_11, V_12, V_21, V_22, d) -# val = x_loop_2d(period, resolution_x, kx_vector, ky_vector, Sx, Sy, Sz, Ux, Uy, Uz, y, i) +# val = x_loop_2d(period, resolution_x, kx, ky_vector, Sx, Sy, Sz, Ux, Uy, Uz, y, i) # field_cell = field_cell.at[(resolution_z * idx_layer + k).real.astype(int), j.real.astype(int), i.real.astype(int)].set(val) # # return field_cell, val diff --git a/meent/on_jax/emsolver/rcwa.py b/meent/on_jax/emsolver/rcwa.py index 5de78a7..9fcfa24 100644 --- a/meent/on_jax/emsolver/rcwa.py +++ b/meent/on_jax/emsolver/rcwa.py @@ -63,11 +63,11 @@ def _tree_flatten(self): 'pol': self.pol, 'fourier_order': self.fourier_order, 'ucell_materials': self.ucell_materials, - 'algo': self.algo, + 'connecting_algo': self.algo, 'perturbation': self.perturbation, 'device': self.device, 'type_complex': self.type_complex, - 'fft_type': self.fft_type, + 'fourier_type': self.fft_type, } return children, aux_data @@ -153,7 +153,7 @@ def _conv_solve_jit(self): def conv_solve(self, **kwargs): [setattr(self, k, v) for k, v in kwargs.items()] # needed for optimization if self.fft_type == 1: - # print('CFT (fft_type=1) is not supported for jit-compilation. Using non-jit-compiled method.') + # print('CFT (fourier_type=1) is not supported for jit-compilation. Using non-jit-compiled method.') de_ri, de_ti, layer_info_list, T1, kx_vector = self._conv_solve() else: @@ -258,7 +258,7 @@ def conv_solve_field(self, res_x=20, res_y=20, res_z=20, field_algo=2, **kwargs) [setattr(self, k, v) for k, v in kwargs.items()] # needed for optimization if self.fft_type == 1: - print('CFT (fft_type=1) is not supported with JAX jit-compilation. Use conv_solve_field_no_jit.') + print('CFT (fourier_type=1) is not supported with JAX jit-compilation. Use conv_solve_field_no_jit.') return None, None, None de_ri, de_ti, _, _, _ = self._conv_solve() diff --git a/meent/on_jax/emsolver/transfer_method.py b/meent/on_jax/emsolver/transfer_method.py index f4cb996..a1bfbc1 100644 --- a/meent/on_jax/emsolver/transfer_method.py +++ b/meent/on_jax/emsolver/transfer_method.py @@ -69,11 +69,11 @@ def transfer_1d_3(g, YZ_I, f, delta_i0, inc_term, T, k_I_z, k0, n_I, n_II, theta T = T @ T1 # conj() is not allowed with grad x jit - # de_ri = jnp.real(R * jnp.conj(R) * k_I_z / (k0 * n_I * jnp.cos(theta))) + # de_ri = jnp.real(R * jnp.conj(R) * k_I_z / (k0 * n_top * jnp.cos(theta))) # if polarization == 0: - # de_ti = T * jnp.conj(T) * jnp.real(k_II_z / (k0 * n_I * jnp.cos(theta))) + # de_ti = T * jnp.conj(T) * jnp.real(k_II_z / (k0 * n_top * jnp.cos(theta))) # elif polarization == 1: - # de_ti = T * jnp.conj(T) * jnp.real(k_II_z / n_II ** 2) / (k0 * jnp.cos(theta) / n_I) + # de_ti = T * jnp.conj(T) * jnp.real(k_II_z / n_bot ** 2) / (k0 * jnp.cos(theta) / n_top) # else: # raise ValueError @@ -92,7 +92,7 @@ def transfer_1d_conical_1(ff, k0, n_I, n_II, kx_vector, theta, phi, type_complex I = jnp.eye(ff).astype(type_complex) O = jnp.zeros((ff, ff)).astype(type_complex) - # kx_vector = k0 * (n_I * jnp.sin(theta) * jnp.cos(phi) - fourier_indices * (wavelength / period[0]) + # kx = k0 * (n_top * jnp.sin(theta) * jnp.cos(phi) - fourier_indices * (wavelength / period[0]) # ).astype(type_complex) ky = k0 * n_I * jnp.sin(theta) * jnp.sin(phi) @@ -235,11 +235,11 @@ def transfer_1d_conical_3(big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff, delta_i T_p = big_T[ff:, :].flatten() # conj() is not allowed with grad x jit - # de_ri = R_s * jnp.conj(R_s) * jnp.real(k_I_z / (k0 * n_I * jnp.cos(theta))) \ - # + R_p * jnp.conj(R_p) * jnp.real((k_I_z / n_I ** 2) / (k0 * n_I * jnp.cos(theta))) + # de_ri = R_s * jnp.conj(R_s) * jnp.real(k_I_z / (k0 * n_top * jnp.cos(theta))) \ + # + R_p * jnp.conj(R_p) * jnp.real((k_I_z / n_top ** 2) / (k0 * n_top * jnp.cos(theta))) # - # de_ti = T_s * jnp.conj(T_s) * jnp.real(k_II_z / (k0 * n_I * jnp.cos(theta))) \ - # + T_p * jnp.conj(T_p) * jnp.real((k_II_z / n_II ** 2) / (k0 * n_I * jnp.cos(theta))) + # de_ti = T_s * jnp.conj(T_s) * jnp.real(k_II_z / (k0 * n_top * jnp.cos(theta))) \ + # + T_p * jnp.conj(T_p) * jnp.real((k_II_z / n_bot ** 2) / (k0 * n_top * jnp.cos(theta))) de_ri = R_s * conj(R_s) * jnp.real(k_I_z / (k0 * n_I * jnp.cos(theta))) \ + R_p * conj(R_p) * jnp.real((k_I_z / n_I ** 2) / (k0 * n_I * jnp.cos(theta))) # manual conjugate @@ -255,7 +255,7 @@ def transfer_2d_1(ff_x, ff_y, ff_xy, k0, n_I, n_II, kx_vector, period, fourier_i I = jnp.eye(ff_xy).astype(type_complex) O = jnp.zeros((ff_xy, ff_xy), dtype=type_complex) - # kx_vector = k0 * (n_I * jnp.sin(theta) * jnp.cos(phi) + fourier_indices * ( + # kx = k0 * (n_top * jnp.sin(theta) * jnp.cos(phi) + fourier_indices * ( # wavelength / period[0])).astype(type_complex) ky_vector = k0 * (n_I * jnp.sin(theta) * jnp.sin(phi) + fourier_indices_y * ( @@ -420,11 +420,11 @@ def transfer_2d_3(center, big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff_xy, delt T_p = big_T[ff_xy:, :].flatten() # conj() is not allowed with grad x jit - # de_ri = R_s * jnp.conj(R_s) * jnp.real(k_I_z / (k0 * n_I * jnp.cos(theta))) \ - # + R_p * jnp.conj(R_p) * jnp.real((k_I_z / n_I ** 2) / (k0 * n_I * jnp.cos(theta))) + # de_ri = R_s * jnp.conj(R_s) * jnp.real(k_I_z / (k0 * n_top * jnp.cos(theta))) \ + # + R_p * jnp.conj(R_p) * jnp.real((k_I_z / n_top ** 2) / (k0 * n_top * jnp.cos(theta))) # - # de_ti = T_s * jnp.conj(T_s) * jnp.real(k_II_z / (k0 * n_I * jnp.cos(theta))) \ - # + T_p * jnp.conj(T_p) * jnp.real((k_II_z / n_II ** 2) / (k0 * n_I * jnp.cos(theta))) + # de_ti = T_s * jnp.conj(T_s) * jnp.real(k_II_z / (k0 * n_top * jnp.cos(theta))) \ + # + T_p * jnp.conj(T_p) * jnp.real((k_II_z / n_bot ** 2) / (k0 * n_top * jnp.cos(theta))) de_ri = R_s * conj(R_s) * jnp.real(k_I_z / (k0 * n_I * jnp.cos(theta))) \ + R_p * conj(R_p) * jnp.real((k_I_z / n_I ** 2) / (k0 * n_I * jnp.cos(theta))) # manual conjugate diff --git a/meent/on_jax/mee.py b/meent/on_jax/mee.py index 8b1dc67..f94d93a 100644 --- a/meent/on_jax/mee.py +++ b/meent/on_jax/mee.py @@ -19,11 +19,11 @@ def _tree_flatten(self): 'pol': self.pol, 'fourier_order': self.fourier_order, 'ucell_materials': self.ucell_materials, - 'algo': self.algo, + 'connecting_algo': self.algo, 'perturbation': self.perturbation, 'device': self.device, 'type_complex': self.type_complex, - 'fft_type': self.fft_type, + 'fourier_type': self.fft_type, } return children, aux_data diff --git a/meent/on_jax/modeler/modeling.py b/meent/on_jax/modeler/modeling.py index 27682ef..6a29c99 100644 --- a/meent/on_jax/modeler/modeling.py +++ b/meent/on_jax/modeler/modeling.py @@ -25,11 +25,11 @@ def _tree_flatten(self): # TODO 'pol': self.pol, 'fourier_order': self.fourier_order, 'ucell_materials': self.ucell_materials, - 'algo': self.algo, + 'connecting_algo': self.algo, 'perturbation': self.perturbation, 'device': self.device, 'type_complex': self.type_complex, - 'fft_type': self.fft_type, + 'fourier_type': self.fft_type, } return children, aux_data diff --git a/meent/on_jax/optimizer/optimizer.py b/meent/on_jax/optimizer/optimizer.py index 1f2120f..2389a1a 100644 --- a/meent/on_jax/optimizer/optimizer.py +++ b/meent/on_jax/optimizer/optimizer.py @@ -10,7 +10,7 @@ def __init__(self, *args, **kwargs): super().__init__() # def _tree_flatten(self): - # children = (self.n_I, self.n_II, self.theta, self.phi, self.psi, + # children = (self.n_top, self.n_bot, self.theta, self.phi, self.psi, # self.period, self.wavelength, self.ucell, self.ucell_info_list, self.thickness) # aux_data = { # 'backend': self.backend, @@ -18,11 +18,11 @@ def __init__(self, *args, **kwargs): # 'pol': self.pol, # 'fourier_order': self.fourier_order, # 'ucell_materials': self.ucell_materials, - # 'algo': self.algo, + # 'connecting_algo': self.connecting_algo, # 'perturbation': self.perturbation, # 'device': self.device, # 'type_complex': self.type_complex, - # 'fft_type': self.fft_type, + # 'fourier_type': self.fourier_type, # } # # return children, aux_data diff --git a/meent/on_numpy/emsolver/_base.py b/meent/on_numpy/emsolver/_base.py index 0618eff..0f94f9c 100644 --- a/meent/on_numpy/emsolver/_base.py +++ b/meent/on_numpy/emsolver/_base.py @@ -7,9 +7,9 @@ class _BaseRCWA: - def __init__(self, grating_type, n_I=1., n_II=1., theta=0., phi=0., pol=0., fto=(2, 2), - period=(100., 100.), wavelength=900., - thickness=(0., ), algo='TMM', perturbation=1E-20, + def __init__(self, n_top=1., n_bot=1., theta=0., phi=0., psi=None, pol=0., fto=(0, 0), + period=(100., 100.), wavelength=1., + thickness=(0., ), connecting_algo='TMM', perturbation=1E-20, type_complex=np.complex128, *args, **kwargs): self._device = 0 @@ -27,24 +27,21 @@ def __init__(self, grating_type, n_I=1., n_II=1., theta=0., phi=0., pol=0., fto= self._type_int = np.int64 if self.type_complex is not np.complex64 else np.int32 self.perturbation = perturbation - self.grating_type = grating_type # 1D=0, 1D_conical=1, 2D=2 - self.n_I = n_I - self.n_II = n_II + self.n_top = n_top + self.n_bot = n_bot - # degree to radian due to JAX JIT self.theta = theta self.phi = phi self.pol = pol - self._psi = np.array((np.pi / 2 * (1 - pol)), dtype=self.type_float) + self.psi = psi self.fto = fto self.period = period self.wavelength = wavelength self.thickness = thickness - self.algo = algo + self.connecting_algo = connecting_algo self.layer_info_list = [] self.T1 = None - # self.kx_vector = None # only kx, not ky, because kx is always used while ky is 2D only. @property def device(self): @@ -126,6 +123,13 @@ def phi(self, phi): def psi(self): return self._psi + @psi.setter + def psi(self, psi): + if psi is not None: + self._psi = np.array(psi, dtype=self.type_float) + pol = -(2 * psi / np.pi - 1) + self._pol = pol + @property def fto(self): return self._fourier_order @@ -167,6 +171,8 @@ def period(self, period): if type(period) in (int, float): self._period = np.array([period], dtype=self.type_float) elif type(period) in (list, tuple, np.ndarray): + if len(period) == 1: + period = [period[0], 1] self._period = np.array(period, dtype=self.type_float) else: raise ValueError @@ -184,32 +190,15 @@ def thickness(self, thickness): else: raise ValueError - def get_kx_vector(self, wavelength): - k0 = 2 * np.pi / wavelength - fourier_indices_x = np.arange(-self.fto[0], self.fto[0] + 1) - - if self.grating_type == 0: - kx_vector = k0 * (self.n_I * np.sin(self.theta) + fourier_indices_x * (wavelength / self.period[0]) - ).astype(self.type_complex) - else: - kx_vector = k0 * (self.n_I * np.sin(self.theta) * np.cos(self.phi) + fourier_indices_x * ( - wavelength / self.period[0])).astype(self.type_complex) - - return kx_vector - def get_kx_ky_vector(self, wavelength): fto_x_range = np.arange(-self.fto[0], self.fto[0] + 1) fto_y_range = np.arange(-self.fto[1], self.fto[1] + 1) - if self.grating_type == 0: - kx_vector = (self.n_I * np.sin(self.theta) + fto_x_range * (wavelength / self.period[0]) - ).astype(self.type_complex) - else: - kx_vector = (self.n_I * np.sin(self.theta) * np.cos(self.phi) + fto_x_range * ( - wavelength / self.period[0])).astype(self.type_complex) + kx_vector = (self.n_top * np.sin(self.theta) * np.cos(self.phi) + fto_x_range * ( + wavelength / self.period[0])).astype(self.type_complex) - ky_vector = (self.n_I * np.sin(self.theta) * np.sin(self.phi) + fto_y_range * ( + ky_vector = (self.n_top * np.sin(self.theta) * np.sin(self.phi) + fto_y_range * ( wavelength / self.period[1])).astype(self.type_complex) return kx_vector, ky_vector @@ -219,27 +208,20 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): self.T1 = None ff_x = self.fto[0] * 2 + 1 - ff_y = 1 - - delta_i0 = np.zeros(ff_x, dtype=self.type_complex) - delta_i0[self.fto[0]] = 1 k0 = 2 * np.pi / wavelength - kx, ky = self.get_kx_ky_vector(wavelength) + kx, _ = self.get_kx_ky_vector(wavelength) - if self.algo == 'TMM': - kz_top, kz_bot, f, g, T \ - = transfer_1d_1(ff_x, ff_y, kx, ky, self.pol, self.n_I, self.n_II, - type_complex=self.type_complex) - elif self.algo == 'SMM': + if self.connecting_algo == 'TMM': + kz_top, kz_bot, F, G, T \ + = transfer_1d_1(self.pol, ff_x, kx, self.n_top, self.n_bot, type_complex=self.type_complex) + elif self.connecting_algo == 'SMM': Kx, Wg, Vg, Kzg, Wr, Vr, Kzr, Wt, Vt, Kzt, Ar, Br, Sg \ - = scattering_1d_1(k0, self.n_I, self.n_II, self.theta, self.phi, self.period, + = scattering_1d_1(k0, self.n_top, self.n_bot, self.theta, self.phi, self.period, self.pol, wl=wavelength) else: raise ValueError - assert len(epx_conv_all) == len(self.thickness) - # From the last layer for layer_index in range(len(self.thickness))[::-1]: @@ -271,28 +253,27 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): # else: # raise ValueError - if self.algo == 'TMM': + if self.connecting_algo == 'TMM': W, V, q = transfer_1d_2(self.pol, kx, epx_conv, epy_conv, epz_conv_i, self.type_complex) - X, f, g, T, a_i, b = transfer_1d_3(k0, W, V, q, d, f, g, T, - type_complex=self.type_complex) + X, F, G, T, A_i, B = transfer_1d_3(k0, W, V, q, d, F, G, T, type_complex=self.type_complex) - layer_info = [epz_conv_i, W, V, q, d, X, a_i, b] # TODO: change field recover code + layer_info = [epz_conv_i, W, V, q, d, A_i, B] # TODO: change field recover code self.layer_info_list.append(layer_info) - elif self.algo == 'SMM': + elif self.connecting_algo == 'SMM': A, B, S_dict, Sg = scattering_1d_2(W, Wg, V, Vg, d, k0, Q, Sg) else: raise ValueError - if self.algo == 'TMM': - de_ri, de_ti, T1 = transfer_1d_4(f, g, T, kz_top, kz_bot, self.psi, self.theta, self.n_I, self.n_II, - self.pol, type_complex=self.type_complex) + if self.connecting_algo == 'TMM': + de_ri, de_ti, T1 = transfer_1d_4(self.pol, F, G, T, kz_top, kz_bot, self.theta, self.n_top, self.n_bot, + type_complex=self.type_complex) self.T1 = T1 - elif self.algo == 'SMM': + elif self.connecting_algo == 'SMM': de_ri, de_ti = scattering_1d_3(Wt, Wg, Vt, Vg, Sg, ff, Wr, self.fto, Kzr, Kzt, - self.n_I, self.n_II, self.theta, self.pol) + self.n_top, self.n_bot, self.theta, self.pol) else: raise ValueError @@ -309,10 +290,10 @@ def solve_1d_conical(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_al k0 = 2 * np.pi / wavelength kx, ky = self.get_kx_ky_vector(wavelength) - if self.algo == 'TMM': + if self.connecting_algo == 'TMM': kz_top, kz_bot, varphi, big_F, big_G, big_T \ - = transfer_1d_conical_1(ff_x, ff_y, kx, ky, self.n_I, self.n_II, type_complex=self.type_complex) - elif self.algo == 'SMM': + = transfer_1d_conical_1(ff_x, ff_y, kx, ky, self.n_top, self.n_bot, type_complex=self.type_complex) + elif self.connecting_algo == 'SMM': print('SMM for 1D conical is not implemented') return np.nan, np.nan else: @@ -327,26 +308,26 @@ def solve_1d_conical(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_al d = self.thickness[layer_index] - if self.algo == 'TMM': + if self.connecting_algo == 'TMM': W, V, q = transfer_1d_conical_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=self.type_complex) big_X, big_F, big_G, big_T, big_A_i, big_B, \ = transfer_1d_conical_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=self.type_complex) - layer_info = [epz_conv_i, W, V, q, d, big_X, big_A_i, big_B] # TODO: change field recover code + layer_info = [epz_conv_i, W, V, q, d, big_A_i, big_B] # TODO: change field recover code self.layer_info_list.append(layer_info) - elif self.algo == 'SMM': + elif self.connecting_algo == 'SMM': raise ValueError else: raise ValueError - if self.algo == 'TMM': + if self.connecting_algo == 'TMM': de_ri, de_ti, big_T1 = transfer_1d_conical_4(big_F, big_G, big_T, kz_top, kz_bot, self.psi, self.theta, - self.n_I, self.n_II, type_complex=self.type_complex) + self.n_top, self.n_bot, type_complex=self.type_complex) self.T1 = big_T1 - elif self.algo == 'SMM': + elif self.connecting_algo == 'SMM': raise ValueError else: raise ValueError @@ -364,13 +345,13 @@ def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): k0 = 2 * np.pi / wavelength kx, ky = self.get_kx_ky_vector(wavelength) - if self.algo == 'TMM': + if self.connecting_algo == 'TMM': kz_top, kz_bot, varphi, big_F, big_G, big_T \ - = transfer_2d_1(ff_x, ff_y, kx, ky, self.n_I, self.n_II, type_complex=self.type_complex) + = transfer_2d_1(ff_x, ff_y, kx, ky, self.n_top, self.n_bot, type_complex=self.type_complex) - elif self.algo == 'SMM': + elif self.connecting_algo == 'SMM': Kx, Ky, kz_inc, Wg, Vg, Kzg, Wr, Vr, Kzr, Wt, Vt, Kzt, Ar, Br, Sg \ - = scattering_2d_1(self.n_I, self.n_II, self.theta, self.phi, k0, self.period, self.fto) + = scattering_2d_1(self.n_top, self.n_bot, self.theta, self.phi, k0, self.period, self.fto) else: raise ValueError @@ -383,28 +364,28 @@ def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): d = self.thickness[layer_index] - if self.algo == 'TMM': + if self.connecting_algo == 'TMM': W, V, q = transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=self.type_complex) big_X, big_F, big_G, big_T, big_A_i, big_B, \ = transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=self.type_complex) - layer_info = [epz_conv_i, W, V, q, d, big_X, big_A_i, big_B] # TODO: change field recover code + layer_info = [epz_conv_i, W, V, q, d, big_A_i, big_B] # TODO: change field recover code self.layer_info_list.append(layer_info) - elif self.algo == 'SMM': + elif self.connecting_algo == 'SMM': W, V, q = scattering_2d_wv(ff_xy, Kx, Ky, E_conv, o_E_conv, o_E_conv_i, E_conv_i) A, B, Sl_dict, Sg_matrix, Sg = scattering_2d_2(W, Wg, V, Vg, d, k0, Sg, q) else: raise ValueError - if self.algo == 'TMM': + if self.connecting_algo == 'TMM': de_ri, de_ti, big_T1 = transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, self.psi, self.theta, - self.n_I, self.n_II, type_complex=self.type_complex) + self.n_top, self.n_bot, type_complex=self.type_complex) self.T1 = big_T1 - elif self.algo == 'SMM': - de_ri, de_ti = scattering_2d_3(ff_xy, Wt, Wg, Vt, Vg, Sg, Wr, Kx, Ky, Kzr, Kzt, kz_inc, self.n_I, + elif self.connecting_algo == 'SMM': + de_ri, de_ti = scattering_2d_3(ff_xy, Wt, Wg, Vt, Vg, Sg, Wr, Kx, Ky, Kzr, Kzt, kz_inc, self.n_top, self.pol, self.theta, self.phi, self.fto) else: raise ValueError diff --git a/meent/on_numpy/emsolver/convolution_matrix.py b/meent/on_numpy/emsolver/convolution_matrix.py index c0f4dfe..4e58406 100644 --- a/meent/on_numpy/emsolver/convolution_matrix.py +++ b/meent/on_numpy/emsolver/convolution_matrix.py @@ -38,239 +38,234 @@ def cell_compression(cell, type_complex=np.complex128): return cell_comp, x, y -def fft_piecewise_constant(cell, x, y, fourier_order_x, fourier_order_y, type_complex=np.complex128): +# def fft_piecewise_constant(cell, x, y, fourier_order_x, fourier_order_y, type_complex=np.complex128): +# +# period_x, period_y = x[-1], y[-1] +# +# # X axis +# cell_next_x = np.roll(cell, -1, axis=1) +# cell_diff_x = cell_next_x - cell +# cell_diff_x = cell_diff_x.astype(type_complex) +# +# cell = cell.astype(type_complex) +# +# modes_x = np.arange(-2 * fourier_order_x, 2 * fourier_order_x + 1, 1) +# +# f_coeffs_x = cell_diff_x @ np.exp(-1j * 2 * np.pi * x @ modes_x[None, :] / period_x, dtype=type_complex) +# c = f_coeffs_x.shape[1] // 2 +# +# x_next = np.vstack((np.roll(x, -1, axis=0)[:-1], period_x)) - x +# +# f_coeffs_x[:, c] = (cell @ np.vstack((x[0], x_next[:-1]))).flatten() / period_x +# mask = np.ones(f_coeffs_x.shape[1], dtype=bool) +# mask[c] = False +# f_coeffs_x[:, mask] /= (1j * 2 * np.pi * modes_x[mask]) +# +# # Y axis +# f_coeffs_x_next_y = np.roll(f_coeffs_x, -1, axis=0) +# f_coeffs_x_diff_y = f_coeffs_x_next_y - f_coeffs_x +# +# modes_y = np.arange(-2 * fourier_order_y, 2 * fourier_order_y + 1, 1) +# +# f_coeffs_xy = f_coeffs_x_diff_y.T @ np.exp(-1j * 2 * np.pi * y @ modes_y[None, :] / period_y, dtype=type_complex) +# c = f_coeffs_xy.shape[1] // 2 +# +# y_next = np.vstack((np.roll(y, -1, axis=0)[:-1], period_y)) - y +# +# f_coeffs_xy[:, c] = f_coeffs_x.T @ np.vstack((y[0], y_next[:-1])).flatten() / period_y +# +# if c: +# mask = np.ones(f_coeffs_xy.shape[1], dtype=bool) +# mask[c] = False +# f_coeffs_xy[:, mask] /= (1j * 2 * np.pi * modes_y[mask]) +# +# return f_coeffs_xy.T + + +def to_conv_mat_vector(ucell_info_list, fto_x, fto_y, device=None, type_complex=np.complex128): + + ff_xy = (2 * fto_x + 1) * (2 * fto_y + 1) + + epx_conv_all = np.zeros((len(ucell_info_list), ff_xy, ff_xy)).astype(type_complex) + epy_conv_all = np.zeros((len(ucell_info_list), ff_xy, ff_xy)).astype(type_complex) + epz_conv_i_all = np.zeros((len(ucell_info_list), ff_xy, ff_xy)).astype(type_complex) - period_x, period_y = x[-1], y[-1] - - # X axis - cell_next_x = np.roll(cell, -1, axis=1) - cell_diff_x = cell_next_x - cell - cell_diff_x = cell_diff_x.astype(type_complex) - - cell = cell.astype(type_complex) - - modes_x = np.arange(-2 * fourier_order_x, 2 * fourier_order_x + 1, 1) - - f_coeffs_x = cell_diff_x @ np.exp(-1j * 2 * np.pi * x @ modes_x[None, :] / period_x, dtype=type_complex) - c = f_coeffs_x.shape[1] // 2 - - x_next = np.vstack((np.roll(x, -1, axis=0)[:-1], period_x)) - x - - f_coeffs_x[:, c] = (cell @ np.vstack((x[0], x_next[:-1]))).flatten() / period_x - mask = np.ones(f_coeffs_x.shape[1], dtype=bool) - mask[c] = False - f_coeffs_x[:, mask] /= (1j * 2 * np.pi * modes_x[mask]) - - # Y axis - f_coeffs_x_next_y = np.roll(f_coeffs_x, -1, axis=0) - f_coeffs_x_diff_y = f_coeffs_x_next_y - f_coeffs_x - - modes_y = np.arange(-2 * fourier_order_y, 2 * fourier_order_y + 1, 1) - - f_coeffs_xy = f_coeffs_x_diff_y.T @ np.exp(-1j * 2 * np.pi * y @ modes_y[None, :] / period_y, dtype=type_complex) - c = f_coeffs_xy.shape[1] // 2 - - y_next = np.vstack((np.roll(y, -1, axis=0)[:-1], period_y)) - y - - f_coeffs_xy[:, c] = f_coeffs_x.T @ np.vstack((y[0], y_next[:-1])).flatten() / period_y - - if c: - mask = np.ones(f_coeffs_xy.shape[1], dtype=bool) - mask[c] = False - f_coeffs_xy[:, mask] /= (1j * 2 * np.pi * modes_y[mask]) - - return f_coeffs_xy.T - - -def to_conv_mat_vector(ucell_info_list, fto_x, fto_y, device=None, - type_complex=np.complex128): - - ff_x = 2 * fto_x + 1 - ff_y = 2 * fto_y + 1 - - epx_conv_all = np.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - epy_conv_all = np.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - epz_i_conv_all = np.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - - # 2D for i, ucell_info in enumerate(ucell_info_list): ucell_layer, x_list, y_list = ucell_info - # ucell_layer = ucell_layer ** 2 - eps_compressed = ucell_layer ** 2 - - epx_f = cfs2d(eps_compressed, x_list, y_list, fto_x, fto_y, 0, 1, type_complex) - epy_f = cfs2d(eps_compressed, x_list, y_list, fto_x, fto_y, 1, 0, type_complex) - epz_f = cfs2d(eps_compressed, x_list, y_list, fto_x, fto_y, 1, 1, type_complex) - - # center = np.array(f_coeffs.shape) // 2 - center = np.array(epz_f.shape) // 2 - - conv_y = np.arange(-ff_y + 1, ff_y, 1) - conv_y = circulant(conv_y) - conv_y = np.repeat(conv_y, ff_x, axis=1) - conv_y = np.repeat(conv_y, [ff_x] * ff_y, axis=0) + eps_matrix = ucell_layer ** 2 - conv_x = np.arange(-ff_x + 1, ff_x, 1) - conv_x = circulant(conv_x) - conv_x = np.tile(conv_x, (ff_y, ff_y)) - - # e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] - # o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] - # e_conv_all[i] = e_conv - # o_e_conv_all[i] = o_e_conv - - # XY to RC - epx_conv = epx_f[center[0] + conv_y, center[1] + conv_x] - epy_conv = epy_f[center[0] + conv_y, center[1] + conv_x] - epz_conv = epz_f[center[0] + conv_y, center[1] + conv_x] + epz_conv = cfs2d(eps_matrix, x_list, y_list, 1, 1, fto_x, fto_y, type_complex) + epy_conv = cfs2d(eps_matrix, x_list, y_list, 1, 0, fto_x, fto_y, type_complex) + epx_conv = cfs2d(eps_matrix, x_list, y_list, 0, 1, fto_x, fto_y, type_complex) epx_conv_all[i] = epx_conv epy_conv_all[i] = epy_conv - epz_i_conv_all[i] = np.linalg.inv(epz_conv) + epz_conv_i_all[i] = np.linalg.inv(epz_conv) - # return e_conv_all, o_e_conv_all - return epx_conv_all, epy_conv_all, epz_i_conv_all + return epx_conv_all, epy_conv_all, epz_conv_i_all def to_conv_mat_raster_continuous(ucell, fto_x, fto_y, device=None, type_complex=np.complex128): - ucell_pmt = ucell ** 2 - - if ucell_pmt.shape[1] == 1: # 1D - ff_x = 2 * fto_x + 1 - ff_y = 2 * fto_y + 1 # which is 1 - - epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - - for i, layer in enumerate(ucell_pmt): - - eps_compressed, x, y = cell_compression(layer, type_complex=type_complex) - - epz_conv = cfs2d(eps_compressed, x, y, 1, 1, fto_x, fto_y, type_complex) - epy_conv = cfs2d(eps_compressed, x, y, 1, 0, fto_x, fto_y, type_complex) - epx_conv = cfs2d(eps_compressed, x, y, 0, 1, fto_x, fto_y, type_complex) - - # # center = np.array(f_coeffs.shape) // 2 - # center = np.array(epz_f.shape) // 2 - # - # conv_x = np.arange(-ff + 1, ff, 1, dtype=int) - # conv_x = circulant(conv_x) - # - # # XY to RC - # epx_conv = epx_f[center[0], center[1] + conv_x] - # epy_conv = epy_f[center[0], center[1] + conv_x] - # epz_conv = epz_f[center[0], center[1] + conv_x] - - epx_conv_all[i] = epx_conv - epy_conv_all[i] = epy_conv - epz_conv_i_all[i] = np.linalg.inv(epz_conv) - else: # 2D - ff_x = 2 * fto_x + 1 - ff_y = 2 * fto_y + 1 + ff_xy = (2 * fto_x + 1) * (2 * fto_y + 1) - epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + epx_conv_all = np.zeros((ucell.shape[0], ff_xy, ff_xy)).astype(type_complex) + epy_conv_all = np.zeros((ucell.shape[0], ff_xy, ff_xy)).astype(type_complex) + epz_conv_i_all = np.zeros((ucell.shape[0], ff_xy, ff_xy)).astype(type_complex) - for i, layer in enumerate(ucell_pmt): + for i, layer in enumerate(ucell): + n_compressed, x_list, y_list = cell_compression(layer, type_complex=type_complex) + eps_matrix = n_compressed ** 2 - eps_compressed, x, y = cell_compression(layer, type_complex=type_complex) + epz_conv = cfs2d(eps_matrix, x_list, y_list, 1, 1, fto_x, fto_y, type_complex) + epy_conv = cfs2d(eps_matrix, x_list, y_list, 1, 0, fto_x, fto_y, type_complex) + epx_conv = cfs2d(eps_matrix, x_list, y_list, 0, 1, fto_x, fto_y, type_complex) - epz_conv = cfs2d(eps_compressed, x, y, 1, 1, fto_x, fto_y, type_complex) - epy_conv = cfs2d(eps_compressed, x, y, 1, 0, fto_x, fto_y, type_complex) - epx_conv = cfs2d(eps_compressed, x, y, 0, 1, fto_x, fto_y, type_complex) - - epx_conv_all[i] = epx_conv - epy_conv_all[i] = epy_conv - epz_conv_i_all[i] = np.linalg.inv(epz_conv) + epx_conv_all[i] = epx_conv + epy_conv_all[i] = epy_conv + epz_conv_i_all[i] = np.linalg.inv(epz_conv) + + # if ucell_pmt.shape[1] == 1: # 1D + # # ff_x = 2 * fto_x + 1 + # # ff_y = 2 * fto_y + 1 # which is 1 + # # + # # epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + # # epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + # # epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + # + # for i, layer in enumerate(ucell_pmt): + # + # eps_matrix, x, y = cell_compression(layer, type_complex=type_complex) + # + # epz_conv = cfs2d(eps_matrix, x, y, 1, 1, fto_x, fto_y, type_complex) + # epy_conv = cfs2d(eps_matrix, x, y, 1, 0, fto_x, fto_y, type_complex) + # epx_conv = cfs2d(eps_matrix, x, y, 0, 1, fto_x, fto_y, type_complex) + # + # epx_conv_all[i] = epx_conv + # epy_conv_all[i] = epy_conv + # epz_conv_i_all[i] = np.linalg.inv(epz_conv) + # + # else: # 2D + # # ff_x = 2 * fto_x + 1 + # # ff_y = 2 * fto_y + 1 + # # + # # epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + # # epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + # # epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + # + # for i, layer in enumerate(ucell_pmt): + # + # eps_matrix, x, y = cell_compression(layer, type_complex=type_complex) + # + # epz_conv = cfs2d(eps_matrix, x, y, 1, 1, fto_x, fto_y, type_complex) + # epy_conv = cfs2d(eps_matrix, x, y, 1, 0, fto_x, fto_y, type_complex) + # epx_conv = cfs2d(eps_matrix, x, y, 0, 1, fto_x, fto_y, type_complex) + # + # epx_conv_all[i] = epx_conv + # epy_conv_all[i] = epy_conv + # epz_conv_i_all[i] = np.linalg.inv(epz_conv) return epx_conv_all, epy_conv_all, epz_conv_i_all def to_conv_mat_raster_discrete(ucell, fto_x, fto_y, device=None, type_complex=np.complex128, enhanced_dfs=True): - ucell_pmt = ucell ** 2 - if ucell_pmt.shape[1] == 1: # 1D - ff_x = 2 * fto_x + 1 - ff_y = 2 * fto_y + 1 # which is 1 + ff_xy = (2 * fto_x + 1) * (2 * fto_y + 1) - epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + epx_conv_all = np.zeros((ucell.shape[0], ff_xy, ff_xy)).astype(type_complex) + epy_conv_all = np.zeros((ucell.shape[0], ff_xy, ff_xy)).astype(type_complex) + epz_conv_i_all = np.zeros((ucell.shape[0], ff_xy, ff_xy)).astype(type_complex) + + if enhanced_dfs: + minimum_pattern_size_y = (4 * fto_y + 1) * ucell.shape[1] + minimum_pattern_size_x = (4 * fto_x + 1) * ucell.shape[2] + else: + minimum_pattern_size_y = 4 * fto_y + 1 + minimum_pattern_size_x = 4 * fto_x + 1 + # e.g., 8 bytes * (40*500) * (40*500) / 1E6 = 3200 MB = 3.2 GB - if enhanced_dfs: - minimum_pattern_size_x = (4 * fto_x + 1) * ucell_pmt.shape[2] - else: - minimum_pattern_size_x = (4 * fto_x + 1) # TODO: align with other bds + for i, layer in enumerate(ucell): + if layer.shape[0] < minimum_pattern_size_y: + n = minimum_pattern_size_y // layer.shape[0] + layer = np.repeat(layer, n + 1, axis=0) - for i, layer in enumerate(ucell_pmt): + if layer.shape[1] < minimum_pattern_size_x: n = minimum_pattern_size_x // layer.shape[1] layer = np.repeat(layer, n + 1, axis=1) - epz_conv = dfs2d(layer, 1, 1, fto_x, fto_y, type_complex) - epy_conv = dfs2d(layer, 1, 0, fto_x, fto_y, type_complex) - epx_conv = dfs2d(layer, 0, 1, fto_x, fto_y, type_complex) - - # # center = np.array(f_coeffs.shape) // 2 - # center = np.array(epz_f.shape) // 2 - # - # conv_x = np.arange(-ff + 1, ff, 1, dtype=int) - # conv_x = circulant(conv_x) - # - # # e_conv = f_coeffs[center[0], center[1] + conv_idx] - # # o_e_conv = o_f_coeffs[center[0], center[1] + conv_idx] - # # e_conv_all[i] = e_conv - # # o_e_conv_all[i] = o_e_conv - # - # # XY to RC - # epx_conv = epx_f[center[0], center[1] + conv_x] - # epy_conv = epy_f[center[0], center[1] + conv_x] - # epz_conv = epz_f[center[0], center[1] + conv_x] - - epx_conv_all[i] = epx_conv - epy_conv_all[i] = epy_conv - epz_conv_i_all[i] = np.linalg.inv(epz_conv) - - else: # 2D - ff_x = 2 * fto_x + 1 - ff_y = 2 * fto_y + 1 - - epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - - if enhanced_dfs: - minimum_pattern_size_y = (4 * fto_y + 1) * ucell_pmt.shape[1] - minimum_pattern_size_x = (4 * fto_x + 1) * ucell_pmt.shape[2] - else: - minimum_pattern_size_y = 4 * fto_y + 1 - minimum_pattern_size_x = 4 * fto_x + 1 - # e.g., 8 bytes * (40*500) * (40*500) / 1E6 = 3200 MB = 3.2 GB - - for i, layer in enumerate(ucell_pmt): - if layer.shape[0] < minimum_pattern_size_y: - n = minimum_pattern_size_y // layer.shape[0] - layer = np.repeat(layer, n + 1, axis=0) - - if layer.shape[1] < minimum_pattern_size_x: - n = minimum_pattern_size_x // layer.shape[1] - layer = np.repeat(layer, n + 1, axis=1) - - epz_conv = dfs2d(layer, 1, 1, fto_x, fto_y, type_complex) - epy_conv = dfs2d(layer, 1, 0, fto_x, fto_y, type_complex) - epx_conv = dfs2d(layer, 0, 1, fto_x, fto_y, type_complex) - - epx_conv_all[i] = epx_conv - epy_conv_all[i] = epy_conv - epz_conv_i_all[i] = np.linalg.inv(epz_conv) - # a = np.linalg.inv(epz_conv) - # epz_i_conv_all[i] = a[0][0] + eps_matrix = layer ** 2 + + epz_conv = dfs2d(eps_matrix, 1, 1, fto_x, fto_y, type_complex) + epy_conv = dfs2d(eps_matrix, 1, 0, fto_x, fto_y, type_complex) + epx_conv = dfs2d(eps_matrix, 0, 1, fto_x, fto_y, type_complex) + + epx_conv_all[i] = epx_conv + epy_conv_all[i] = epy_conv + epz_conv_i_all[i] = np.linalg.inv(epz_conv) return epx_conv_all, epy_conv_all, epz_conv_i_all + # if ucell_pmt.shape[1] == 1: # 1D + # # ff_x = 2 * fto_x + 1 + # # ff_y = 2 * fto_y + 1 # which is 1 + # + # # epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + # # epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + # # epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + # + # if enhanced_dfs: + # minimum_pattern_size_x = (4 * fto_x + 1) * ucell_pmt.shape[2] + # else: + # minimum_pattern_size_x = (4 * fto_x + 1) # TODO: align with other bds + # + # for i, layer in enumerate(ucell_pmt): + # n = minimum_pattern_size_x // layer.shape[1] + # layer = np.repeat(layer, n + 1, axis=1) + # + # epz_conv = dfs2d(layer, 1, 1, fto_x, fto_y, type_complex) + # epy_conv = dfs2d(layer, 1, 0, fto_x, fto_y, type_complex) + # epx_conv = dfs2d(layer, 0, 1, fto_x, fto_y, type_complex) + # + # epx_conv_all[i] = epx_conv + # epy_conv_all[i] = epy_conv + # epz_conv_i_all[i] = np.linalg.inv(epz_conv) + # + # else: # 2D + # # ff_x = 2 * fto_x + 1 + # # ff_y = 2 * fto_y + 1 + # + # # epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + # # epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + # # epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) + # + # if enhanced_dfs: + # minimum_pattern_size_y = (4 * fto_y + 1) * ucell_pmt.shape[1] + # minimum_pattern_size_x = (4 * fto_x + 1) * ucell_pmt.shape[2] + # else: + # minimum_pattern_size_y = 4 * fto_y + 1 + # minimum_pattern_size_x = 4 * fto_x + 1 + # # e.g., 8 bytes * (40*500) * (40*500) / 1E6 = 3200 MB = 3.2 GB + # + # for i, layer in enumerate(ucell_pmt): + # if layer.shape[0] < minimum_pattern_size_y: + # n = minimum_pattern_size_y // layer.shape[0] + # layer = np.repeat(layer, n + 1, axis=0) + # + # if layer.shape[1] < minimum_pattern_size_x: + # n = minimum_pattern_size_x // layer.shape[1] + # layer = np.repeat(layer, n + 1, axis=1) + # + # epz_conv = dfs2d(layer, 1, 1, fto_x, fto_y, type_complex) + # epy_conv = dfs2d(layer, 1, 0, fto_x, fto_y, type_complex) + # epx_conv = dfs2d(layer, 0, 1, fto_x, fto_y, type_complex) + # + # epx_conv_all[i] = epx_conv + # epy_conv_all[i] = epy_conv + # epz_conv_i_all[i] = np.linalg.inv(epz_conv) + # + # return epx_conv_all, epy_conv_all, epz_conv_i_all + def circulant(c): diff --git a/meent/on_numpy/emsolver/field_distribution.py b/meent/on_numpy/emsolver/field_distribution.py index 4704235..383eb3a 100644 --- a/meent/on_numpy/emsolver/field_distribution.py +++ b/meent/on_numpy/emsolver/field_distribution.py @@ -1,21 +1,281 @@ import numpy as np -def field_dist_1d_vectorized_ji(wavelength, kx_vector, T1, layer_info_list, period, +def field_dist_1d_vectorized_kji(wavelength, kx, T1, layer_info_list, period, + pol, res_x=20, res_y=20, res_z=20, type_complex=np.complex128): + + k0 = 2 * np.pi / wavelength + Kx = np.diag(kx) + + field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) + + T_layer = T1 + + # From the first layer + for idx_layer, (epz_conv_i, W, V, q, d, A_i, B) in enumerate(layer_info_list[::-1]): + c1 = T_layer[:, None] + X = np.diag(np.exp(-k0 * q * d)) + + c2 = B @ A_i @ X @ T_layer[:, None] + Q = np.diag(q) + + z_1d = np.arange(res_z).reshape((-1, 1, 1)) / res_z * d + + My = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + Mx = V @ (-diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + Mz = epz_conv_i @ Kx @ My if pol else Kx @ My + + x_1d = np.arange(res_x).reshape((1, -1, 1)) + x_1d = -1j * x_1d * period[0] / res_x + x_2d = np.tile(x_1d, (res_y, 1, 1)) + x_2d = x_2d * kx + x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) + + exp_K = np.exp(x_2d) + exp_K = exp_K.reshape((res_y, res_x, -1)) + + Fy = exp_K[:, :, None, :] @ My[:, None, None, :, :] + Fx = -1j * exp_K[:, :, None, :] @ Mx[:, None, None, :, :] + Fz = -1j * exp_K[:, :, None, :] @ Mz[:, None, None, :, :] + + val = np.concatenate((Fy.squeeze(-1), Fx.squeeze(-1), Fz.squeeze(-1)), axis=-1) + + # + # + # if pol == 0: + # Sy = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + # Ux = V @ (-diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + # Uz = Kx @ Sy + # + # x_1d = np.arange(res_x).reshape((1, -1, 1)) + # x_1d = -1j * x_1d * period[0] / res_x + # x_2d = np.tile(x_1d, (res_y, 1, 1)) + # x_2d = x_2d * kx + # x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) + # + # exp_K = np.exp(x_2d) + # exp_K = exp_K.reshape((res_y, res_x, -1)) + # + # Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] + # Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] + # Hz = -1j * exp_K[:, :, None, :] @ Uz[:, None, None, :, :] + # + # val = np.concatenate((Ey.squeeze(-1), Hx.squeeze(-1), Hz.squeeze(-1)), axis=-1) + # + # else: + # Uy = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + # Sx = V @ (-diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + # Sz = epz_conv_i @ Kx @ Uy # there is a better option for convergence + # + # x_1d = np.arange(res_x).reshape((1, -1, 1)) + # x_1d = -1j * x_1d * period[0] / res_x + # x_2d = np.tile(x_1d, (res_y, 1, 1)) + # x_2d = x_2d * kx + # x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) + # + # exp_K = np.exp(x_2d) + # exp_K = exp_K.reshape((res_y, res_x, -1)) + # + # Hy = exp_K[:, :, None, :] @ Uy[:, None, None, :, :] + # Ex = 1j * exp_K[:, :, None, :] @ Sx[:, None, None, :, :] + # Ez = -1j * exp_K[:, :, None, :] @ Sz[:, None, None, :, :] + # + # val = np.concatenate((Hy.squeeze(-1), Ex.squeeze(-1), Ez.squeeze(-1)), axis=-1) + + field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val + + T_layer = A_i @ X @ T_layer + + return field_cell + + +def field_dist_1d_conical_vectorized_kji(wavelength, kx, ky, T1, layer_info_list, period, + res_x=20, res_y=20, res_z=20, type_complex=np.complex128): + + k0 = 2 * np.pi / wavelength + Kx = np.diag(kx) + + field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) + + T_layer = T1 + + big_I = np.eye(len(T1)).astype(type_complex) + + # From the first layer + for idx_layer, (epz_conv_i, W, V, q, d, big_A_i, big_B) in enumerate(layer_info_list[::-1]): + + ff_x = len(W) + + W_1 = W[:, :ff_x] + W_2 = W[:, ff_x:] + + V_11 = V[:ff_x, :ff_x] + V_12 = V[:ff_x, ff_x:] + V_21 = V[ff_x:, :ff_x] + V_22 = V[ff_x:, ff_x:] + + q_1 = q[:ff_x] + q_2 = q[ff_x:] + # + # + # X_1 = np.diag(np.exp(-k0 * q_1 * d)) + # X_2 = np.diag(np.exp(-k0 * q_2 * d)) + + big_X = np.diag(np.exp(-k0 * q * d)) + + c = np.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer + z_1d = np.arange(res_z).reshape((-1, 1, 1)) / res_z * d + + ff = len(c) // 4 + + c1_plus = c[0 * ff:1 * ff] + c2_plus = c[1 * ff:2 * ff] + c1_minus = c[2 * ff:3 * ff] + c2_minus = c[3 * ff:4 * ff] + + big_Q1 = np.diag(q_1) + big_Q2 = np.diag(q_2) + + Sx = W_2 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Sy = V_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + + V_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Ux = W_1 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) + Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Sz = -1j * epz_conv_i @ (Kx @ Uy - ky * Ux) + Uz = -1j * (Kx @ Sy - ky * Sx) + + x_1d = np.arange(res_x).reshape((1, -1, 1)) + x_1d = -1j * x_1d * period[0] / res_x + x_2d = np.tile(x_1d, (res_y, 1, 1)) + x_2d = x_2d * kx + x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) + + exp_K = np.exp(x_2d) + exp_K = exp_K.reshape((res_y, res_x, -1)) + + Ex = exp_K[:, :, None, :] @ Sx[:, None, None, :, :] + Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] + Ez = exp_K[:, :, None, :] @ Sz[:, None, None, :, :] + + Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] + Hy = -1j * exp_K[:, :, None, :] @ Uy[:, None, None, :, :] + Hz = -1j * exp_K[:, :, None, :] @ Uz[:, None, None, :, :] + + val = np.concatenate( + (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), -1) + field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val + T_layer = big_A_i @ big_X @ T_layer + + return field_cell + + +def field_dist_2d_vectorized_kji(wavelength, kx, ky, T1, layer_info_list, period, + res_x=20, res_y=20, res_z=20, type_complex=np.complex128): + + k0 = 2 * np.pi / wavelength + + # fto_x_range = np.arange(-fto[0], fto[0] + 1) + # fto_y_range = np.arange(-fto[1], fto[1] + 1) + + ff_x = len(kx) + ff_y = len(ky) + + # kx = k0 * (n_I * np.sin(theta) * np.cos(phi) + fto_x_range * ( + # wavelength / period[0])).astype(type_complex) + # + # ky_vector = k0 * (n_I * np.sin(theta) * np.sin(phi) + fto_y_range * ( + # wavelength / period[1])).astype(type_complex) + + # kx = kx + # ky_vector = ky + + Kx = np.diag(np.tile(kx, ff_y).flatten()) / k0 + Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) / k0 + + field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) + + T_layer = T1 + + big_I = np.eye((len(T1))).astype(type_complex) + + # From the first layer + for idx_layer, (E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_A_i, big_B, d)\ + in enumerate(layer_info_list[::-1]): + + big_X = np.diag(np.exp(-k0 * q * d)) + + c = np.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer + z_1d = np.arange(res_z).reshape((-1, 1, 1)) / res_z * d + + ff = len(c) // 4 + + c1_plus = c[0 * ff:1 * ff] + c2_plus = c[1 * ff:2 * ff] + c1_minus = c[2 * ff:3 * ff] + c2_minus = c[3 * ff:4 * ff] + + q1 = q[:len(q) // 2] + q2 = q[len(q) // 2:] + big_Q1 = np.diag(q1) + big_Q2 = np.diag(q2) + + Sx = W_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + + W_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Sy = W_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + + W_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Ux = V_11 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + + V_12 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Sz = -1j * E_conv_i @ (Kx @ Uy - Ky @ Ux) + Uz = -1j * (Kx @ Sy - Ky @ Sx) + + x_1d = np.arange(res_x).reshape((1, -1, 1)) + y_1d = np.arange(res_y).reshape((-1, 1, 1)) + x_1d = -1j * x_1d * period[0] / res_x + y_1d = -1j * y_1d * period[1] / res_y + x_2d = np.tile(x_1d, (res_y, 1, 1)) + y_2d = np.tile(y_1d, (1, res_x, 1)) + x_2d = x_2d * kx + y_2d = y_2d * ky + x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) + y_2d = y_2d.reshape((res_y, res_x, len(ky), 1)) + + exp_K = np.exp(x_2d) * np.exp(y_2d) + exp_K = exp_K.reshape((res_y, res_x, -1)) + + Ex = exp_K[:, :, None, :] @ Sx[:, None, None, :, :] + Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] + Ez = exp_K[:, :, None, :] @ Sz[:, None, None, :, :] + Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] + Hy = -1j * exp_K[:, :, None, :] @ Uy[:, None, None, :, :] + Hz = -1j * exp_K[:, :, None, :] @ Uz[:, None, None, :, :] + + val = np.concatenate( + (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), -1) + field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val + + T_layer = big_A_i @ big_X @ T_layer + + return field_cell + + +def field_dist_1d_vectorized_ji(wavelength, kx, T1, layer_info_list, period, pol, res_x=20, res_y=20, res_z=20, type_complex=np.complex128): k0 = 2 * np.pi / wavelength - Kx = np.diag(kx_vector / k0) + Kx = np.diag(kx) field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) T_layer = T1 # From the first layer - for idx_layer, (E_conv_i, q, W, X, a_i, b, d) in enumerate(layer_info_list[::-1]): + for idx_layer, (epz_conv_i, W, V, q, d, X, A_i, B) in enumerate(layer_info_list[::-1]): c1 = T_layer[:, None] - c2 = b @ a_i @ X @ T_layer[:, None] + c2 = B @ A_i @ X @ T_layer[:, None] Q = np.diag(q) @@ -24,8 +284,8 @@ def field_dist_1d_vectorized_ji(wavelength, kx_vector, T1, layer_info_list, peri EKx = None else: - V = E_conv_i @ W @ Q - EKx = E_conv_i @ Kx + V = epz_conv_i @ W @ Q + EKx = epz_conv_i @ Kx for k in range(res_z): z = k / res_z * d @@ -33,57 +293,56 @@ def field_dist_1d_vectorized_ji(wavelength, kx_vector, T1, layer_info_list, peri if pol == 0: Sy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) Ux = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - C = Kx @ Sy + Uz = Kx @ Sy x_1d = np.arange(res_x).reshape((1, -1, 1)) x_1d = -1j * x_1d * period[0] / res_x x_2d = np.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) + x_2d = x_2d * kx + x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) exp_K = np.exp(x_2d) exp_K = exp_K.reshape((res_y, res_x, -1)) Ey = exp_K @ Sy Hx = -1j * exp_K @ Ux - Hz = -1j * exp_K @ C + Hz = -1j * exp_K @ Uz val = np.concatenate((Ey, Hx, Hz), axis=-1) else: Uy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) Sx = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - - C = EKx @ Uy # there is a better option for convergence + Sz = EKx @ Uy # there is a better option for convergence x_1d = np.arange(res_x).reshape((1, -1, 1)) x_1d = -1j * x_1d * period[0] / res_x x_2d = np.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) + x_2d = x_2d * kx + x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) exp_K = np.exp(x_2d) exp_K = exp_K.reshape((res_y, res_x, -1)) Hy = exp_K @ Uy Ex = 1j * exp_K @ Sx - Ez = -1j * exp_K @ C + Ez = -1j * exp_K @ Sz val = np.concatenate((Hy, Ex, Ez), axis=-1) field_cell[res_z * idx_layer + k] = val - T_layer = a_i @ X @ T_layer + T_layer = A_i @ X @ T_layer return field_cell -def field_dist_1d_conical_vectorized_ji(wavelength, kx_vector, n_I, theta, phi, T1, layer_info_list, period, +def field_dist_1d_conical_vectorized_ji(wavelength, kx, ky, T1, layer_info_list, period, res_x=20, res_y=20, res_z=20, type_complex=np.complex128): k0 = 2 * np.pi / wavelength - ky = k0 * n_I * np.sin(theta) * np.sin(phi) - Kx = np.diag(kx_vector / k0) + # ky = k0 * n_I * np.sin(theta) * np.sin(phi) + Kx = np.diag(kx) field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) @@ -121,8 +380,8 @@ def field_dist_1d_conical_vectorized_ji(wavelength, kx_vector, n_I, theta, phi, x_1d = np.arange(res_x).reshape((1, -1, 1)) x_1d = -1j * x_1d * period[0] / res_x x_2d = np.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) + x_2d = x_2d * kx + x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) exp_K = np.exp(x_2d) exp_K = exp_K.reshape((res_y, res_x, -1)) @@ -144,19 +403,22 @@ def field_dist_1d_conical_vectorized_ji(wavelength, kx_vector, n_I, theta, phi, return field_cell -def field_dist_2d_vectorized_ji(wavelength, kx_vector, n_I, theta, phi, fourier_order_x, fourier_order_y, T1, layer_info_list, period, +def field_dist_2d_vectorized_ji(wavelength, kx, ky, T1, layer_info_list, period, res_x=20, res_y=20, res_z=20, type_complex=np.complex128): k0 = 2 * np.pi / wavelength - fourier_indices_y = np.arange(-fourier_order_y, fourier_order_y + 1) - ff_x = fourier_order_x * 2 + 1 - ff_y = fourier_order_y * 2 + 1 - ky_vector = k0 * (n_I * np.sin(theta) * np.sin(phi) + fourier_indices_y * ( - wavelength / period[1])).astype(type_complex) + ff_x = len(kx) + ff_y = len(ky) + + # fourier_indices_y = np.arange(-fourier_order_y, fourier_order_y + 1) + # ff_x = fourier_order_x * 2 + 1 + # ff_y = fourier_order_y * 2 + 1 + # ky = k0 * (n_I * np.sin(theta) * np.sin(phi) + fourier_indices_y * ( + # wavelength / period[1])).astype(type_complex) - Kx = np.diag(np.tile(kx_vector, ff_y).flatten()) / k0 - Ky = np.diag(np.tile(ky_vector.reshape((-1, 1)), ff_x).flatten()) / k0 + Kx = np.diag(np.tile(kx, ff_y).flatten()) / k0 + Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) / k0 field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) @@ -202,10 +464,10 @@ def field_dist_2d_vectorized_ji(wavelength, kx_vector, n_I, theta, phi, fourier_ y_1d = -1j * y_1d * period[1] / res_y x_2d = np.tile(x_1d, (res_y, 1, 1)) y_2d = np.tile(y_1d, (1, res_x, 1)) - x_2d = x_2d * kx_vector - y_2d = y_2d * ky_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - y_2d = y_2d.reshape((res_y, res_x, len(ky_vector), 1)) + x_2d = x_2d * kx + y_2d = y_2d * ky + x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) + y_2d = y_2d.reshape((res_y, res_x, len(ky), 1)) exp_K = np.exp(x_2d) * np.exp(y_2d) exp_K = exp_K.reshape((res_y, res_x, -1)) @@ -225,251 +487,28 @@ def field_dist_2d_vectorized_ji(wavelength, kx_vector, n_I, theta, phi, fourier_ return field_cell -def field_dist_1d_vectorized_kji(wavelength, kx_vector, T1, layer_info_list, period, - pol, res_x=20, res_y=20, res_z=20, type_complex=np.complex128): - - k0 = 2 * np.pi / wavelength - Kx = np.diag(kx_vector / k0) - - field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) - - T_layer = T1 - - # From the first layer - for idx_layer, (E_conv_i, q, W, X, a_i, b, d) in enumerate(layer_info_list[::-1]): - c1 = T_layer[:, None] - c2 = b @ a_i @ X @ T_layer[:, None] - Q = np.diag(q) - - if pol == 0: - V = W @ Q - EKx = None - else: - V = E_conv_i @ W @ Q - EKx = E_conv_i @ Kx - - z_1d = np.arange(res_z).reshape((-1, 1, 1)) / res_z * d - - if pol == 0: - Sy = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - Ux = V @ (-diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - C = Kx @ Sy - - x_1d = np.arange(res_x).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = np.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - - exp_K = np.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] - Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] - Hz = -1j * exp_K[:, :, None, :] @ C[:, None, None, :, :] - - val = np.concatenate((Ey.squeeze(-1), Hx.squeeze(-1), Hz.squeeze(-1)), axis=-1) - - else: - Uy = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - Sx = V @ (-diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - - C = EKx @ Uy # there is a better option for convergence - - x_1d = np.arange(res_x).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = np.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - - exp_K = np.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Hy = exp_K[:, :, None, :] @ Uy[:, None, None, :, :] - Ex = 1j * exp_K[:, :, None, :] @ Sx[:, None, None, :, :] - Ez = -1j * exp_K[:, :, None, :] @ C[:, None, None, :, :] - - val = np.concatenate((Hy.squeeze(-1), Ex.squeeze(-1), Ez.squeeze(-1)), axis=-1) - - field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val - - T_layer = a_i @ X @ T_layer - - return field_cell - - -def field_dist_1d_conical_vectorized_kji(wavelength, kx_vector, n_I, theta, phi, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, type_complex=np.complex128): - - k0 = 2 * np.pi / wavelength - ky = k0 * n_I * np.sin(theta) * np.sin(phi) - Kx = np.diag(kx_vector / k0) - - field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) - - T_layer = T1 - - big_I = np.eye((len(T1))).astype(type_complex) - - # From the first layer - for idx_layer, [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] \ - in enumerate(layer_info_list[::-1]): - - c = np.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer - z_1d = np.arange(res_z).reshape((-1, 1, 1)) / res_z * d - - ff = len(c) // 4 - - c1_plus = c[0 * ff:1 * ff] - c2_plus = c[1 * ff:2 * ff] - c1_minus = c[2 * ff:3 * ff] - c2_minus = c[3 * ff:4 * ff] - - big_Q1 = np.diag(q_1) - big_Q2 = np.diag(q_2) - - Sx = W_2 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Sy = V_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Ux = W_1 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) - Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Sz = -1j * E_conv_i @ (Kx @ Uy - ky * Ux) - Uz = -1j * (Kx @ Sy - ky * Sx) - - x_1d = np.arange(res_x).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = np.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - - exp_K = np.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Ex = exp_K[:, :, None, :] @ Sx[:, None, None, :, :] - Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] - Ez = exp_K[:, :, None, :] @ Sz[:, None, None, :, :] - - Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] - Hy = -1j * exp_K[:, :, None, :] @ Uy[:, None, None, :, :] - Hz = -1j * exp_K[:, :, None, :] @ Uz[:, None, None, :, :] - - val = np.concatenate( - (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), -1) - field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - - -def field_dist_2d_vectorized_kji(wavelength, n_I, theta, phi, fto, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, type_complex=np.complex128): - - k0 = 2 * np.pi / wavelength - - fto_x_range = np.arange(-fto[0], fto[0] + 1) - fto_y_range = np.arange(-fto[1], fto[1] + 1) - - ff_x = fto[0] * 2 + 1 - ff_y = fto[1] * 2 + 1 - - kx_vector = k0 * (n_I * np.sin(theta) * np.cos(phi) + fto_x_range * ( - wavelength / period[0])).astype(type_complex) - - ky_vector = k0 * (n_I * np.sin(theta) * np.sin(phi) + fto_y_range * ( - wavelength / period[1])).astype(type_complex) - - Kx = np.diag(np.tile(kx_vector, ff_y).flatten()) / k0 - Ky = np.diag(np.tile(ky_vector.reshape((-1, 1)), ff_x).flatten()) / k0 - - field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) - - T_layer = T1 - - big_I = np.eye((len(T1))).astype(type_complex) - - # From the first layer - for idx_layer, (E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d)\ - in enumerate(layer_info_list[::-1]): - - c = np.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer - z_1d = np.arange(res_z).reshape((-1, 1, 1)) / res_z * d - - ff = len(c) // 4 - - c1_plus = c[0 * ff:1 * ff] - c2_plus = c[1 * ff:2 * ff] - c1_minus = c[2 * ff:3 * ff] - c2_minus = c[3 * ff:4 * ff] - - q1 = q[:len(q) // 2] - q2 = q[len(q) // 2:] - big_Q1 = np.diag(q1) - big_Q2 = np.diag(q2) - - Sx = W_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + W_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Sy = W_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + W_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Ux = V_11 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_12 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Sz = -1j * E_conv_i @ (Kx @ Uy - Ky @ Ux) - Uz = -1j * (Kx @ Sy - Ky @ Sx) - - x_1d = np.arange(res_x).reshape((1, -1, 1)) - y_1d = np.arange(res_y).reshape((-1, 1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - y_1d = -1j * y_1d * period[1] / res_y - x_2d = np.tile(x_1d, (res_y, 1, 1)) - y_2d = np.tile(y_1d, (1, res_x, 1)) - x_2d = x_2d * kx_vector - y_2d = y_2d * ky_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - y_2d = y_2d.reshape((res_y, res_x, len(ky_vector), 1)) - - exp_K = np.exp(x_2d) * np.exp(y_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Ex = exp_K[:, :, None, :] @ Sx[:, None, None, :, :] - Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] - Ez = exp_K[:, :, None, :] @ Sz[:, None, None, :, :] - Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] - Hy = -1j * exp_K[:, :, None, :] @ Uy[:, None, None, :, :] - Hz = -1j * exp_K[:, :, None, :] @ Uz[:, None, None, :, :] - - val = np.concatenate( - (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), -1) - field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val - - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - - -def field_dist_1d_vanilla(wavelength, kx_vector, T1, layer_info_list, period, pol, res_x=20, res_y=20, res_z=20, +def field_dist_1d_vanilla(wavelength, kx, T1, layer_info_list, period, pol, res_x=20, res_y=20, res_z=20, type_complex=np.complex128): k0 = 2 * np.pi / wavelength - Kx = np.diag(kx_vector / k0) + Kx = np.diag(kx) field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) T_layer = T1 # From the first layer - for idx_layer, (E_conv_i, q, W, X, a_i, b, d) in enumerate(layer_info_list[::-1]): + for idx_layer, (epz_conv_i, W, V, q, d, X, A_i, B) in enumerate(layer_info_list[::-1]): c1 = T_layer[:, None] - c2 = b @ a_i @ X @ T_layer[:, None] + c2 = B @ A_i @ X @ T_layer[:, None] Q = np.diag(q) if pol == 0: V = W @ Q EKx = None else: - V = E_conv_i @ W @ Q - EKx = E_conv_i @ Kx + V = epz_conv_i @ W @ Q + EKx = epz_conv_i @ Kx for k in range(res_z): z = k / res_z * d @@ -483,9 +522,9 @@ def field_dist_1d_vanilla(wavelength, kx_vector, T1, layer_info_list, period, po for i in range(res_x): x = i * period[0] / res_x - Ey = Sy.T @ np.exp(-1j * kx_vector.reshape((-1, 1)) * x) - Hx = -1j * Ux.T @ np.exp(-1j * kx_vector.reshape((-1, 1)) * x) - Hz = f_here.T @ np.exp(-1j * kx_vector.reshape((-1, 1)) * x) + Ey = Sy.T @ np.exp(-1j * kx.reshape((-1, 1)) * x) + Hx = -1j * Ux.T @ np.exp(-1j * kx.reshape((-1, 1)) * x) + Hz = f_here.T @ np.exp(-1j * kx.reshape((-1, 1)) * x) field_cell[res_z * idx_layer + k, j, i] = [Ey[0, 0], Hx[0, 0], Hz[0, 0]] else: # TM @@ -498,23 +537,23 @@ def field_dist_1d_vanilla(wavelength, kx_vector, T1, layer_info_list, period, po for i in range(res_x): x = i * period[0] / res_x - Hy = Uy.T @ np.exp(-1j * kx_vector.reshape((-1, 1)) * x) - Ex = 1j * Sx.T @ np.exp(-1j * kx_vector.reshape((-1, 1)) * x) - Ez = f_here.T @ np.exp(-1j * kx_vector.reshape((-1, 1)) * x) + Hy = Uy.T @ np.exp(-1j * kx.reshape((-1, 1)) * x) + Ex = 1j * Sx.T @ np.exp(-1j * kx.reshape((-1, 1)) * x) + Ez = f_here.T @ np.exp(-1j * kx.reshape((-1, 1)) * x) field_cell[res_z * idx_layer + k, j, i] = [Hy[0, 0], Ex[0, 0], Ez[0, 0]] - T_layer = a_i @ X @ T_layer + T_layer = A_i @ X @ T_layer return field_cell -def field_dist_1d_conical_vanilla(wavelength, kx_vector, n_I, theta, phi, T1, layer_info_list, period, +def field_dist_1d_conical_vanilla(wavelength, kx, ky, n_I, theta, phi, T1, layer_info_list, period, res_x=20, res_y=20, res_z=20, type_complex=np.complex128): k0 = 2 * np.pi / wavelength - ky = k0 * n_I * np.sin(theta) * np.sin(phi) - Kx = np.diag(kx_vector / k0) + # ky = k0 * n_I * np.sin(theta) * np.sin(phi) + Kx = np.diag(kx) field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) @@ -552,7 +591,7 @@ def field_dist_1d_conical_vanilla(wavelength, kx_vector, n_I, theta, phi, T1, la for j in range(res_y): for i in range(res_x): x = i * period[0] / res_x - exp_K = np.exp(-1j*kx_vector.reshape((-1, 1)) * x) + exp_K = np.exp(-1j * kx.reshape((-1, 1)) * x) # exp_K = exp_K.flatten() Ex = Sx.T @ exp_K @@ -569,21 +608,23 @@ def field_dist_1d_conical_vanilla(wavelength, kx_vector, n_I, theta, phi, T1, la return field_cell -def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_x, fourier_order_y, T1, layer_info_list, +def field_dist_2d_vanilla(wavelength, kx, ky, T1, layer_info_list, period, res_x=20, res_y=20, res_z=20, type_complex=np.complex128): k0 = 2 * np.pi / wavelength + ff_x = len(kx) + ff_y = len(ky) - fourier_indices_y = np.arange(-fourier_order_y, fourier_order_y + 1) - ff_x = fourier_order_x * 2 + 1 - ff_y = fourier_order_y * 2 + 1 - - ky_vector = k0 * (n_I * np.sin(theta) * np.sin(phi) + fourier_indices_y * ( - wavelength / period[1])).astype(type_complex) + # fourier_indices_y = np.arange(-fourier_order_y, fourier_order_y + 1) + # ff_x = fourier_order_x * 2 + 1 + # ff_y = fourier_order_y * 2 + 1 + # + # ky_vector = k0 * (n_I * np.sin(theta) * np.sin(phi) + fourier_indices_y * ( + # wavelength / period[1])).astype(type_complex) - Kx = np.diag(np.tile(kx_vector, ff_y).flatten()) / k0 - Ky = np.diag(np.tile(ky_vector.reshape((-1, 1)), ff_x).flatten()) / k0 + Kx = np.diag(np.tile(kx, ff_y).flatten()) / k0 + Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) / k0 field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) @@ -628,7 +669,7 @@ def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_ for i in range(res_x): x = i * period[0] / res_x - exp_K = np.exp(-1j*kx_vector.reshape((1, -1)) * x) * np.exp(-1j*ky_vector.reshape((-1, 1)) * y) + exp_K = np.exp(-1j * kx.reshape((1, -1)) * x) * np.exp(-1j * ky.reshape((-1, 1)) * y) exp_K = exp_K.flatten() Ex = Sx.T @ exp_K diff --git a/meent/on_numpy/emsolver/rcwa.py b/meent/on_numpy/emsolver/rcwa.py index 90770ea..b8f5763 100644 --- a/meent/on_numpy/emsolver/rcwa.py +++ b/meent/on_numpy/emsolver/rcwa.py @@ -10,32 +10,34 @@ class RCWANumpy(_BaseRCWA): def __init__(self, - n_I=1., - n_II=1., + n_top=1., + n_bot=1., theta=0., phi=0., + psi=None, period=(100., 100.), wavelength=900., ucell=None, ucell_info_list=None, thickness=(0., ), backend=0, - grating_type=0, + grating_type=None, + modeling_type=None, pol=0., - fto=(2, 0), + fto=(0, 0), ucell_materials=None, - algo='TMM', + stitching_algo='TMM', perturbation=1E-20, device='cpu', type_complex=np.complex128, - fft_type=0, + fourier_type=None, # 0 DFS, 1 EFS, 2 CFS enhanced_dfs=True, **kwargs, ): - super().__init__(grating_type=grating_type, n_I=n_I, n_II=n_II, theta=theta, phi=phi, pol=pol, + super().__init__(n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, psi=psi, pol=pol, fto=fto, period=period, wavelength=wavelength, - thickness=thickness, algo=algo, perturbation=perturbation, + thickness=thickness, stitching_algo=stitching_algo, perturbation=perturbation, device=device, type_complex=type_complex, ) self.ucell = ucell @@ -43,11 +45,38 @@ def __init__(self, self.ucell_info_list = ucell_info_list self.backend = backend - self.fft_type = fft_type + self.modeling_type = modeling_type + self._modeling_type_assigned = None + self.grating_type = grating_type + self._grating_type_assigned = None + self.fourier_type = fourier_type self.enhanced_dfs = enhanced_dfs self.layer_info_list = [] + # grating type setting + if self.grating_type is None: + if self.ucell.shape[1] == 1: + if (self.pol in (0, 1)) and (self.phi % (2*np.pi) == 0): + self._grating_type_assigned = 0 + else: + self._grating_type_assigned = 1 + else: + self._grating_type_assigned = 2 + else: + self._grating_type_assigned = self.grating_type + + # modeling type setting + if self.modeling_type is None: + if self.ucell_info_list is None: + self._modeling_type_assigned = 0 + elif self.ucell is None: + self._modeling_type_assigned = 1 + else: + raise ValueError('Define "modeling_type" in "call_mee" function.') + else: + self._modeling_type_assigned = self.modeling_type + @property def ucell(self): return self._ucell @@ -67,21 +96,22 @@ def ucell(self, ucell): else: raise ValueError - def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): + def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): - if self.grating_type == 0: - de_ri, de_ti, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all) - elif self.grating_type == 1: - de_ri, de_ti, layer_info_list, T1 = self.solve_1d_conical(wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all) - elif self.grating_type == 2: - de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all) + if self._grating_type_assigned == 0: + de_ri, de_ti, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + elif self._grating_type_assigned == 1: + de_ri, de_ti, layer_info_list, T1 = self.solve_1d_conical(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + elif self._grating_type_assigned == 2: + de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) else: raise ValueError return de_ri, de_ti, layer_info_list, T1 - def solve(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): - de_ri, de_ti, layer_info_list, T1 = self._solve(wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all) + def solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): + + de_ri, de_ti, layer_info_list, T1 = self._solve(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) self.layer_info_list = layer_info_list self.T1 = T1 @@ -91,20 +121,19 @@ def solve(self, wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all): def conv_solve(self, **kwargs): # [setattr(self, k, v) for k, v in kwargs.items()] # no need in npmeent - if self.fft_type == 0: - epx_conv_all, epy_conv_all, epz_i_conv_all = to_conv_mat_raster_discrete(self.ucell, self.fto[0], self.fto[1], - type_complex=self.type_complex, enhanced_dfs=self.enhanced_dfs) - elif self.fft_type == 1: - epx_conv_all, epy_conv_all, epz_i_conv_all = to_conv_mat_raster_continuous(self.ucell, self.fto[0], self.fto[1], - type_complex=self.type_complex) - elif self.fft_type == 2: - epx_conv_all, epy_conv_all, epz_i_conv_all = to_conv_mat_vector(self.ucell_info_list, self.fto[0], - self.fto[1], - type_complex=self.type_complex) + if self._modeling_type_assigned == 0 and self.fourier_type in (0, 1): + epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( + self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, enhanced_dfs=self.fourier_type) + elif self._modeling_type_assigned == 0 and self.fourier_type == 2: + epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_continuous( + self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex) + elif self._modeling_type_assigned == 1: + epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_vector( + self.ucell_info_list, self.fto[0], self.fto[1], type_complex=self.type_complex) else: - raise ValueError + raise ValueError("Check 'modeling_type' and 'fourier_type'.") - de_ri, de_ti, layer_info_list, T1 = self._solve(self.wavelength, epx_conv_all, epy_conv_all, epz_i_conv_all) + de_ri, de_ti, layer_info_list, T1 = self._solve(self.wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) self.layer_info_list = layer_info_list self.T1 = T1 @@ -112,51 +141,46 @@ def conv_solve(self, **kwargs): return de_ri, de_ti def calculate_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): - if self.grating_type == 0: + kx, ky = self.get_kx_ky_vector(wavelength=self.wavelength) + if self._grating_type_assigned == 0: res_y = 1 if field_algo == 0: - field_cell = field_dist_1d_vanilla(self.wavelength, self.kx_vector, + field_cell = field_dist_1d_vanilla(self.wavelength, kx, self.T1, self.layer_info_list, self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif field_algo == 1: - field_cell = field_dist_1d_vectorized_ji(self.wavelength, self.kx_vector, self.T1, self.layer_info_list, + field_cell = field_dist_1d_vectorized_ji(self.wavelength, kx, self.T1, self.layer_info_list, self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif field_algo == 2: - field_cell = field_dist_1d_vectorized_kji(self.wavelength, self.kx_vector, self.T1, + field_cell = field_dist_1d_vectorized_kji(self.wavelength, kx, self.T1, self.layer_info_list, self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) else: raise ValueError - elif self.grating_type == 1: + elif self._grating_type_assigned == 1: res_y = 1 if field_algo == 0: - field_cell = field_dist_1d_conical_vanilla(self.wavelength, self.kx_vector, self.n_I, self.theta, - self.phi, self.T1, self.layer_info_list, self.period, + field_cell = field_dist_1d_conical_vanilla(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif field_algo == 1: - field_cell = field_dist_1d_conical_vectorized_ji(self.wavelength, self.kx_vector, self.n_I, self.theta, - self.phi, self.T1, self.layer_info_list, self.period, + field_cell = field_dist_1d_conical_vectorized_ji(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif field_algo == 2: - field_cell = field_dist_1d_conical_vectorized_kji(self.wavelength, self.kx_vector, self.n_I, self.theta, - self.phi, self.T1, self.layer_info_list, self.period, + field_cell = field_dist_1d_conical_vectorized_kji(self.wavelength,kx, ky, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) else: raise ValueError - elif self.grating_type == 2: + elif self._grating_type_assigned == 2: if field_algo == 0: - field_cell = field_dist_2d_vanilla(self.wavelength, self.kx_vector, self.n_I, self.theta, self.phi, - self.fto[0], self.fto[1], self.T1, self.layer_info_list, self.period, + field_cell = field_dist_2d_vanilla(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif field_algo == 1: - field_cell = field_dist_2d_vectorized_ji(self.wavelength, self.kx_vector, self.n_I, self.theta, - self.phi, self.fto[0], self.fto[1], self.T1, self.layer_info_list, + field_cell = field_dist_2d_vectorized_ji(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif field_algo == 2: - field_cell = field_dist_2d_vectorized_kji(self.wavelength, self.n_I, self.theta, - self.phi, self.fto[0], self.fto[1], self.T1, self.layer_info_list, + field_cell = field_dist_2d_vectorized_kji(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) else: diff --git a/meent/on_numpy/emsolver/transfer_method.py b/meent/on_numpy/emsolver/transfer_method.py index e146c88..a4485b3 100644 --- a/meent/on_numpy/emsolver/transfer_method.py +++ b/meent/on_numpy/emsolver/transfer_method.py @@ -1,46 +1,42 @@ import numpy as np -def transfer_1d_1(ff, polarization, k0, n_I, n_II, kx_vector, theta, delta_i0, fourier_order, - type_complex=np.complex128): +def transfer_1d_1(pol, ff_x, kx, n_I, n_II, type_complex=np.complex128): - # kx_vector = k0 * (n_I * np.sin(theta) + fourier_indices * (wavelength / period[0])).astype(type_complex) + # kx = k0 * (n_top * np.sin(theta) + fourier_indices * (wavelength / period[0])).astype(type_complex) + ff_xy = ff_x * 1 - kz_top = (k0 ** 2 * n_I ** 2 - kx_vector ** 2) ** 0.5 - kz_bot = (k0 ** 2 * n_II ** 2 - kx_vector ** 2) ** 0.5 + kz_top = (n_I ** 2 - kx ** 2) ** 0.5 + kz_bot = (n_II ** 2 - kx ** 2) ** 0.5 kz_top = kz_top.conjugate() kz_bot = kz_bot.conjugate() - Kx = np.diag(kx_vector / k0) + # Kx = np.diag(kx / k0) - f = np.eye(ff, dtype=type_complex) + F = np.eye(ff_xy, dtype=type_complex) - if polarization == 0: # TE - Y_I = np.diag(kz_top / k0) - Y_II = np.diag(kz_bot / k0) + if pol == 0: # TE + Kz_bot = np.diag(kz_bot) - YZ_I = Y_I - g = 1j * Y_II - inc_term = 1j * n_I * np.cos(theta) * delta_i0 + G = 1j * Kz_bot - elif polarization == 1: # TM - Z_I = np.diag(kz_top / (k0 * n_I ** 2)) - Z_II = np.diag(kz_bot / (k0 * n_II ** 2)) + elif pol == 1: # TM + Kz_bot = np.diag(kz_bot / (n_II ** 2)) - YZ_I = Z_I - g = 1j * Z_II - inc_term = 1j * delta_i0 * np.cos(theta) / n_I # tODO: inc term? + G = 1j * Kz_bot else: raise ValueError - T = np.eye(2 * fourier_order[0] + 1, dtype=type_complex) + T = np.eye(ff_xy, dtype=type_complex) + # TODO: F G T + return kz_top, kz_bot, F, G, T - return kx_vector, Kx, kz_top, kz_bot, f, YZ_I, g, inc_term, T +def transfer_1d_2(pol, kx, epx_conv, epy_conv, epz_conv_i, type_complex=np.complex128): -def transfer_1d_2(pol, Kx, epx_conv, epy_conv, epz_conv_i, type_complex=np.complex128): + Kx = np.diag(kx) if pol == 0: A = Kx ** 2 - epy_conv @@ -68,7 +64,7 @@ def transfer_1d_2(pol, Kx, epx_conv, epy_conv, epz_conv_i, type_complex=np.compl return W, V, q -def transfer_1d_3(k0, W, V, q, d, f, g, T, type_complex=np.complex128): +def transfer_1d_3(k0, W, V, q, d, F, G, T, type_complex=np.complex128): ff_x = len(q) @@ -79,29 +75,50 @@ def transfer_1d_3(k0, W, V, q, d, f, g, T, type_complex=np.complex128): W_i = np.linalg.inv(W) V_i = np.linalg.inv(V) - a = 0.5 * (W_i @ f + V_i @ g) - b = 0.5 * (W_i @ f - V_i @ g) + A = 0.5 * (W_i @ F + V_i @ G) + B = 0.5 * (W_i @ F - V_i @ G) + + A_i = np.linalg.inv(A) + + F = W @ (I + X @ B @ A_i @ X) + G = V @ (I - X @ B @ A_i @ X) + T = T @ A_i @ X + + return X, F, G, T, A_i, B + - a_i = np.linalg.inv(a) +def transfer_1d_4(pol, F, G, T, kz_top, kz_bot, theta, n_I, n_II, type_complex=np.complex128): - f = W @ (I+ X @ b @ a_i @ X) - g = V @ (I- X @ b @ a_i @ X) - T = T @ a_i @ X + ff_xy = len(kz_top) + + Kz_top = np.diag(kz_top) - return X, f, g, T, a_i, b + delta_i0 = np.zeros(ff_xy, dtype=type_complex) + delta_i0[ff_xy // 2] = 1 + + if pol == 0: # TE + + inc_term = 1j * n_I * np.cos(theta) * delta_i0 + + T1 = np.linalg.inv(G + 1j * Kz_top @ F) @ (1j * Kz_top @ delta_i0 + inc_term) + + elif pol == 1: # TM + + inc_term = 1j * delta_i0 * np.cos(theta) / n_I # tODO: inc term? + T1 = np.linalg.inv(G + 1j * Kz_top/(n_I ** 2) @ F) @ (1j * Kz_top/(n_I ** 2) @ delta_i0 + inc_term) -def transfer_1d_4(k0, f, g, T, YZ_I, kz_top, delta_i0, inc_term, n_I, n_II, theta, pol, kz_bot): + # T1 = np.linalg.inv(G + 1j * YZ_I @ F) @ (1j * YZ_I @ delta_i0 + inc_term) + R = F @ T1 - delta_i0 - T1 = np.linalg.inv(g + 1j * YZ_I @ f) @ (1j * YZ_I @ delta_i0 + inc_term) - R = f @ T1 - delta_i0 T = T @ T1 - de_ri = np.real(R * np.conj(R) * kz_top / (k0 * n_I * np.cos(theta))) + de_ri = np.real(R * np.conj(R) * kz_top / (n_I * np.cos(theta))) + if pol == 0: - de_ti = T * np.conj(T) * np.real(kz_bot / (k0 * n_I * np.cos(theta))) + de_ti = T * np.conj(T) * np.real(kz_bot / (n_I * np.cos(theta))) elif pol == 1: - de_ti = T * np.conj(T) * np.real(kz_bot / n_II ** 2) / (k0 * np.cos(theta) / n_I) + de_ti = T * np.conj(T) * np.real(kz_bot / n_II ** 2) / (np.cos(theta) / n_I) else: raise ValueError @@ -115,30 +132,16 @@ def transfer_1d_conical_1(ff_x, ff_y, kx_vector, ky_vector, n_I, n_II, type_comp I = np.eye(ff_xy, dtype=type_complex) O = np.zeros((ff_xy, ff_xy), dtype=type_complex) - # kx_vector = k0 * (n_I * np.sin(theta) * np.cos(phi) + fourier_indices * (wavelength / period[0]) - # ).astype(type_complex) - - # ky = k0 * n_I * np.sin(theta) * np.sin(phi) # TODO: check ky is equal to ky_vector - kz_top = (n_I ** 2 - kx_vector ** 2 - ky_vector ** 2) ** 0.5 kz_bot = (n_II ** 2 - kx_vector ** 2 - ky_vector ** 2) ** 0.5 kz_top = kz_top.conjugate() kz_bot = kz_bot.conjugate() - # Kx = np.diag(kx_vector) - # Ky = np.diag(ky_vector) - varphi = np.arctan(ky_vector / kx_vector) Kz_bot = np.diag(kz_bot) - # Y_I = np.diag(kz_top) - # Y_II = np.diag(kz_bot) - # - # Z_I = np.diag(kz_top / (n_I ** 2)) - # Z_II = np.diag(kz_bot / (n_II ** 2)) - big_F = np.block([[I, O], [O, 1j * Kz_bot / (n_II ** 2)]]) big_G = np.block([[1j * Kz_bot, O], [O, I]]) big_T = np.eye(2 * ff_xy, dtype=type_complex) @@ -146,8 +149,7 @@ def transfer_1d_conical_1(ff_x, ff_y, kx_vector, ky_vector, n_I, n_II, type_comp return kz_top, kz_bot, varphi, big_F, big_G, big_T -def transfer_1d_conical_2(kx, ky, epx_conv, epy_conv, epz_conv_i, - type_complex=np.complex128): +def transfer_1d_conical_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=np.complex128): ff_x = len(kx) ff_y = len(ky) @@ -157,40 +159,12 @@ def transfer_1d_conical_2(kx, ky, epx_conv, epy_conv, epz_conv_i, Kx = np.diag(np.tile(kx, ff_y).flatten()) Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) - epz_conv = np.linalg.inv(epz_conv_i) - - A = Kx ** 2 - epz_conv + A = Kx ** 2 - epy_conv B = Kx @ epz_conv_i @ Kx - I + # TODO: Rearrange W and V Omega2_RL = Ky ** 2 + A - Omega2_LR = Ky ** 2 + B @ epz_conv - - - - # A = Kx ** 2 - epz_conv - # B = Kx @ epz_conv_i @ Kx - I - # - # Omega2_RL = Ky ** 2 + A - # Omega2_LR = Ky ** 2 + B @ epx_conv - - - - # A = Kx ** 2 - epy_conv - # B = Kx @ epz_conv_i @ Kx - I - # - # Omega2_RL = Ky ** 2 + A - # Omega2_LR = Ky ** 2 + B @ epx_conv - # - # - # - # A = Kx ** 2 - epx_conv - # B = Kx @ epz_conv_i @ Kx - I - # - # Omega2_RL = Ky ** 2 + A - # Omega2_LR = Ky ** 2 + B @ epy_conv - - - + Omega2_LR = Ky ** 2 + B @ epx_conv eigenvalues_1, W_1 = np.linalg.eig(Omega2_RL) eigenvalues_2, W_2 = np.linalg.eig(Omega2_LR) @@ -216,46 +190,8 @@ def transfer_1d_conical_2(kx, ky, epx_conv, epy_conv, epz_conv_i, [V_21, V_22]]) q = np.block([q_1, q_2]) - # return W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 - return W, V, q - # - # X_1 = np.diag(np.exp(-k0 * q_1 * d)) - # X_2 = np.diag(np.exp(-k0 * q_2 * d)) - # - # F_c = np.diag(np.cos(varphi)) - # F_s = np.diag(np.sin(varphi)) - # - # V_ss = F_c @ V_11 - # V_sp = F_c @ V_12 - F_s @ W_2 - # W_ss = F_c @ W_1 + F_s @ V_21 - # W_sp = F_s @ V_22 - # W_ps = F_s @ V_11 - # W_pp = F_c @ W_2 + F_s @ V_12 - # V_ps = F_c @ V_21 - F_s @ W_1 - # V_pp = F_c @ V_22 - # - # big_I = np.eye(2 * (len(I)), dtype=type_complex) - # big_X = np.block([[X_1, O], [O, X_2]]) - # big_W = np.block([[V_ss, V_sp], [W_ps, W_pp]]) - # big_V = np.block([[W_ss, W_sp], [V_ps, V_pp]]) - # - # big_W_i = np.linalg.inv(big_W) - # big_V_i = np.linalg.inv(big_V) - # - # big_A = 0.5 * (big_W_i @ big_F + big_V_i @ big_G) - # big_B = 0.5 * (big_W_i @ big_F - big_V_i @ big_G) - # - # big_A_i = np.linalg.inv(big_A) - # - # big_F = big_W @ (big_I + big_X @ big_B @ big_A_i @ big_X) - # big_G = big_V @ (big_I - big_X @ big_B @ big_A_i @ big_X) - # - # big_T = big_T @ big_A_i @ big_X - # - # return big_X, big_F, big_G, big_T, big_A_i, big_B, W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 - def transfer_1d_conical_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=np.complex128): @@ -367,7 +303,7 @@ def transfer_1d_conical_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, T_p = big_T[ff_xy:, :].flatten() de_ri = R_s * np.conj(R_s) * np.real(kz_top / (n_I * np.cos(theta))) \ - + R_p * np.conj(R_p) * np.real(kz_top / (n_I ** 2) / (n_I * np.cos(theta))) + + R_p * np.conj(R_p) * np.real(kz_top / n_I ** 2 / (n_I * np.cos(theta))) de_ti = T_s * np.conj(T_s) * np.real(kz_bot / (n_I * np.cos(theta))) \ + T_p * np.conj(T_p) * np.real(kz_bot / n_II ** 2 / (n_I * np.cos(theta))) @@ -541,7 +477,6 @@ def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, n_II, R_s = final_RT[:ff_xy, :].flatten() R_p = final_RT[ff_xy: 2 * ff_xy, :].flatten() - # TODO: check why this is not applied for TE big_T1 = final_RT[2 * ff_xy:, :] big_T = big_T @ big_T1 @@ -549,10 +484,9 @@ def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, n_II, T_p = big_T[ff_xy:, :].flatten() de_ri = R_s * np.conj(R_s) * np.real(kz_top / (n_I * np.cos(theta))) \ - + R_p * np.conj(R_p) * np.real(kz_top / (n_I ** 2) / (n_I * np.cos(theta))) + + R_p * np.conj(R_p) * np.real(kz_top / n_I ** 2 / (n_I * np.cos(theta))) de_ti = T_s * np.conj(T_s) * np.real(kz_bot / (n_I * np.cos(theta))) \ + T_p * np.conj(T_p) * np.real(kz_bot / n_II ** 2 / (n_I * np.cos(theta))) - return de_ri.real, de_ti.real, big_T1 diff --git a/meent/on_torch/emsolver/_base.py b/meent/on_torch/emsolver/_base.py index d7b8545..80c2b1a 100644 --- a/meent/on_torch/emsolver/_base.py +++ b/meent/on_torch/emsolver/_base.py @@ -236,7 +236,7 @@ def get_kx_vector(self, wavelength): kx_vector = k0 * (self.n_I * torch.sin(self.theta) * torch.cos(self.phi) + fourier_indices_x * ( wavelength / self.period[0])).type(self.type_complex) - # kx_vector = torch.where(kx_vector == 0, self.perturbation, kx_vector) + # kx = torch.where(kx == 0, self.perturbation, kx) return kx_vector diff --git a/meent/on_torch/emsolver/transfer_method.py b/meent/on_torch/emsolver/transfer_method.py index 8997e9e..31e7437 100644 --- a/meent/on_torch/emsolver/transfer_method.py +++ b/meent/on_torch/emsolver/transfer_method.py @@ -6,7 +6,7 @@ def transfer_1d_1(ff, polarization, k0, n_I, n_II, kx_vector, theta, delta_i0, fourier_order, device='cpu', type_complex=torch.complex128): - # kx_vector = k0 * (n_I * torch.sin(theta) + fourier_indices * (wavelength / period[0])).type(type_complex) + # kx = k0 * (n_top * torch.sin(theta) + fourier_indices * (wavelength / period[0])).type(type_complex) k_I_z = (k0 ** 2 * n_I ** 2 - kx_vector ** 2) ** 0.5 k_II_z = (k0 ** 2 * n_II ** 2 - kx_vector ** 2) ** 0.5 @@ -82,7 +82,7 @@ def transfer_1d_conical_1(ff, k0, n_I, n_II, kx_vector, theta, phi, device='cpu' I = torch.eye(ff, device=device, dtype=type_complex) O = torch.zeros((ff, ff), device=device, dtype=type_complex) - # kx_vector = k0 * (n_I * torch.sin(theta) * torch.cos(phi) + fourier_indices * ( + # kx = k0 * (n_top * torch.sin(theta) * torch.cos(phi) + fourier_indices * ( # wavelength / period[0])).type(type_complex) ky = k0 * n_I * torch.sin(theta) * torch.sin(phi) @@ -254,7 +254,7 @@ def transfer_2d_1(ff_x, ff_y, ff_xy, k0, n_I, n_II, kx_vector, period, fourier_i I = torch.eye(ff_xy, device=device, dtype=type_complex) O = torch.zeros((ff_xy, ff_xy), device=device, dtype=type_complex) - # kx_vector = k0 * (n_I * torch.sin(theta) * torch.cos(phi) + fourier_indices * ( + # kx = k0 * (n_top * torch.sin(theta) * torch.cos(phi) + fourier_indices * ( # wavelength / period[0])).type(type_complex) ky_vector = k0 * (n_I * torch.sin(theta) * torch.sin(phi) + fourier_indices_y * ( diff --git a/setup.py b/setup.py index 0273b3b..1ef6a50 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ } setup( name='meent', - version='0.10.1', + version='0.10.0', url='https://github.com/kc-ml2/meent', author='KC ML2', author_email='yongha@kc-ml2.com', From 68d041942bb1eb8eba6bb0e8adbfef8c23d6e0d4 Mon Sep 17 00:00:00 2001 From: yonghakim Date: Mon, 22 Jul 2024 18:34:21 +0900 Subject: [PATCH 05/15] updating --- benchmarks/interface/Reticolo.py | 106 +++++++++++------- meent/on_numpy/emsolver/field_distribution.py | 12 +- meent/on_numpy/emsolver/rcwa.py | 22 ++-- meent/on_numpy/emsolver/transfer_method.py | 5 +- 4 files changed, 88 insertions(+), 57 deletions(-) diff --git a/benchmarks/interface/Reticolo.py b/benchmarks/interface/Reticolo.py index 97e87e9..e8b0550 100644 --- a/benchmarks/interface/Reticolo.py +++ b/benchmarks/interface/Reticolo.py @@ -33,14 +33,15 @@ def __init__(self, engine_type='octave', *args, **kwargs): m_path = os.path.dirname(__file__) self.eng.addpath(self.eng.genpath(m_path)) - def run_res2(self, grating_type, period, fourier_order, ucell, thickness, theta, phi, pol, wavelength, n_I, n_II, + def run_res2(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, wavelength, n_I, n_II, *args, **kwargs): + theta *= (180 / np.pi) phi *= (180 / np.pi) if grating_type in (0, 1): period = period[0] - fourier_order = fourier_order + fto = fto Nx = ucell.shape[2] period_x = period grid_x = np.linspace(0, period, Nx + 1)[1:] @@ -84,19 +85,21 @@ def run_res2(self, grating_type, period, fourier_order, ucell, thickness, theta, profile = np.array([[0, *thickness, 0], range(1, len(thickness) + 3)]) top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info = \ - self._run(pol, theta, phi, period, n_I, fourier_order, textures, profile, wavelength, grating_type, + self._run(pol, theta, phi, period, n_I, fto, textures, profile, wavelength, grating_type, cal_field=False) return top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, bottom_tran_info.efficiency - def run_res3(self, grating_type, period, fourier_order, ucell, thickness, theta, phi, pol, wavelength, n_I, n_II, + def run_res3(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, wavelength, n_top, n_bot, matlab_plot_field=0, res3_npts=0, *args, **kwargs): + + # theta *= (180 / np.pi) phi *= (180 / np.pi) if grating_type in (0, 1): period = period[0] - fourier_order = fourier_order + fto = fto Nx = ucell.shape[2] period_x = period grid_x = np.linspace(0, period, Nx + 1)[1:] @@ -109,7 +112,7 @@ def run_res3(self, grating_type, period, fourier_order, ucell, thickness, theta, ucell_layer = [grid_x, ucell[z, 0]] ucell_new.append(ucell_layer) - textures = [n_I, *ucell_new, n_II] + textures = [n_top, *ucell_new, n_bot] else: @@ -135,29 +138,29 @@ def run_res3(self, grating_type, period, fourier_order, ucell, thickness, theta, obj = [xval, yval, unit_x, unit_y, ucell[z, y, x], 1] ucell_layer.append(obj) ucell_new.append(ucell_layer) - textures = [n_I, *ucell_new, n_II] + textures = [n_top, *ucell_new, n_bot] profile = np.array([[0, *thickness, 0], range(1, len(thickness) + 3)]) top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell = \ - self._run(pol, theta, phi, period, n_I, fourier_order, textures, profile, wavelength, grating_type, + self._run(pol, theta, phi, period, n_top, fto, textures, profile, wavelength, grating_type, cal_field=True, matlab_plot_field=matlab_plot_field, res3_npts=res3_npts) return top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, \ bottom_tran_info.efficiency, field_cell - def _run(self, pol, theta, phi, period, n_I, fourier_order, + def _run(self, pol, theta, phi, period, n_top, fto, textures, profile, wavelength, grating_type, cal_field=False, matlab_plot_field=0, res3_npts=0): if cal_field: top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell = \ - self.eng.reticolo_res3(pol, theta, phi, period, n_I, fourier_order, + self.eng.reticolo_res3(pol, theta, phi, period, n_top, fto, textures, profile, wavelength, grating_type, matlab_plot_field, res3_npts, nout=5) res = (top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell) else: top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info = \ - self.eng.reticolo_res2(pol, theta, phi, period, n_I, fourier_order, + self.eng.reticolo_res2(pol, theta, phi, period, n_top, fto, textures, profile, wavelength, grating_type, nout=4) res = (top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info) return res @@ -167,7 +170,7 @@ def _run(self, pol, theta, phi, period, n_I, fourier_order, # n_si = find_nk_index(n_si, self.mat_table, self.wavelength) # # abseff, effi_r, effi_t = self.eng.reticolo_res2(pattern, self.wavelength, self.deflected_angle, - # self.fourier_order, + # self.fto, # self.n_top, self.n_bot, self.thickness, self.theta, n_si, nout=3) # effi_r, effi_t = np.array(effi_r).flatten(), np.array(effi_t).flatten() # @@ -184,18 +187,43 @@ def _run(self, pol, theta, phi, period, n_I, fourier_order, 'theta': 1, 'phi': 1, 'wavelength': 1, - 'fourier_order': 1, - 'thickness': [1000, 300], + 'fto': 1, + 'thickness': [1000], 'period': [1000], - 'fourier_type': 1, + 'fourier_type': 2, 'ucell': np.array( [ [[3.1, 1.1, 1.2, 1.6, 3.1]], - [[3, 3, 1, 1, 1]], ] - ), + ).astype(np.complex128), } + # option = { + # 'grating_type': 1, + # 'pol': 1, + # 'n_top': 1, + # 'n_bot': 1, + # 'theta': 1, + # 'phi': 1, + # 'wavelength': 550, + # 'fto': 1, + # 'thickness': [220], + # 'period': [480], + # 'fourier_type': 2, + # 'ucell': (np.array( + # [ + # [ + # [1, 1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, 1, + # 1, 1, 1, + # 1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, + # 1, 1, + # 1, ], + # ]] + # ).astype(np.complex128)+1) * 1.5 + 1, + # } + + + reti = Reticolo() reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option) print('reti de_ri', np.array(reti_de_ri).flatten()) @@ -209,21 +237,21 @@ def _run(self, pol, theta, phi, period, n_I, fourier_order, print('nmeent de_ri', n_de_ri) print('nmeent de_ti', n_de_ti) - # JAX - backend = 1 - jmee = meent.call_mee(backend=backend, perturbation=1E-30, **option) - j_de_ri, j_de_ti = jmee.conv_solve() - j_field_cell = jmee.calculate_field(res_z=200, res_x=5) - print('jmeent de_ri', j_de_ri) - print('jmeent de_ti', j_de_ti) - - # Torch - backend = 2 - tmee = meent.call_mee(backend=backend, perturbation=1E-30, **option) - t_de_ri, t_de_ti = tmee.conv_solve() - t_field_cell = tmee.calculate_field(res_z=200, res_x=5) - print('tmeent de_ri', t_de_ri) - print('tmeent de_ti', t_de_ti) + # # JAX + # backend = 1 + # jmee = meent.call_mee(backend=backend, perturbation=1E-30, **option) + # j_de_ri, j_de_ti = jmee.conv_solve() + # j_field_cell = jmee.calculate_field(res_z=200, res_x=5) + # print('jmeent de_ri', j_de_ri) + # print('jmeent de_ti', j_de_ti) + # + # # Torch + # backend = 2 + # tmee = meent.call_mee(backend=backend, perturbation=1E-30, **option) + # t_de_ri, t_de_ti = tmee.conv_solve() + # t_field_cell = tmee.calculate_field(res_z=200, res_x=5) + # print('tmeent de_ri', t_de_ri) + # print('tmeent de_ti', t_de_ti) import matplotlib.pyplot as plt @@ -235,10 +263,10 @@ def _run(self, pol, theta, phi, period, n_I, fourier_order, plt.colorbar() plt.show() - plt.imshow(abs(j_field_cell[:,0,:,0]**2), cmap='jet', aspect='auto') - plt.colorbar() - plt.show() - - plt.imshow(abs(t_field_cell[:,0,:,0]**2), cmap='jet', aspect='auto') - plt.colorbar() - plt.show() + # plt.imshow(abs(j_field_cell[:,0,:,0]**2), cmap='jet', aspect='auto') + # plt.colorbar() + # plt.show() + # + # plt.imshow(abs(t_field_cell[:,0,:,0]**2), cmap='jet', aspect='auto') + # plt.colorbar() + # plt.show() diff --git a/meent/on_numpy/emsolver/field_distribution.py b/meent/on_numpy/emsolver/field_distribution.py index 383eb3a..d6fc5fb 100644 --- a/meent/on_numpy/emsolver/field_distribution.py +++ b/meent/on_numpy/emsolver/field_distribution.py @@ -1,8 +1,8 @@ import numpy as np -def field_dist_1d_vectorized_kji(wavelength, kx, T1, layer_info_list, period, - pol, res_x=20, res_y=20, res_z=20, type_complex=np.complex128): +def field_dist_1d(wavelength, kx, T1, layer_info_list, period, + pol, res_x=20, res_y=1, res_z=20, type_complex=np.complex128): k0 = 2 * np.pi / wavelength Kx = np.diag(kx) @@ -89,8 +89,8 @@ def field_dist_1d_vectorized_kji(wavelength, kx, T1, layer_info_list, period, return field_cell -def field_dist_1d_conical_vectorized_kji(wavelength, kx, ky, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, type_complex=np.complex128): +def field_dist_1d_conical(wavelength, kx, ky, T1, layer_info_list, period, + res_x=20, res_y=20, res_z=20, type_complex=np.complex128): k0 = 2 * np.pi / wavelength Kx = np.diag(kx) @@ -170,8 +170,8 @@ def field_dist_1d_conical_vectorized_kji(wavelength, kx, ky, T1, layer_info_list return field_cell -def field_dist_2d_vectorized_kji(wavelength, kx, ky, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, type_complex=np.complex128): +def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, + res_x=20, res_y=20, res_z=20, type_complex=np.complex128): k0 = 2 * np.pi / wavelength diff --git a/meent/on_numpy/emsolver/rcwa.py b/meent/on_numpy/emsolver/rcwa.py index b8f5763..7e3f86a 100644 --- a/meent/on_numpy/emsolver/rcwa.py +++ b/meent/on_numpy/emsolver/rcwa.py @@ -4,8 +4,8 @@ from ._base import _BaseRCWA from .convolution_matrix import to_conv_mat_raster_continuous, to_conv_mat_raster_discrete, to_conv_mat_vector from .field_distribution import field_dist_1d_vectorized_ji, field_dist_1d_conical_vectorized_ji, field_dist_2d_vectorized_ji, field_plot, field_dist_1d_vanilla, \ - field_dist_1d_vectorized_kji, field_dist_1d_conical_vanilla, field_dist_1d_conical_vectorized_kji, \ - field_dist_2d_vectorized_kji, field_dist_2d_vanilla + field_dist_1d, field_dist_1d_conical_vanilla, field_dist_1d_conical, \ + field_dist_2d, field_dist_2d_vanilla class RCWANumpy(_BaseRCWA): @@ -141,7 +141,9 @@ def conv_solve(self, **kwargs): return de_ri, de_ti def calculate_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): + kx, ky = self.get_kx_ky_vector(wavelength=self.wavelength) + if self._grating_type_assigned == 0: res_y = 1 if field_algo == 0: @@ -153,9 +155,9 @@ def calculate_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif field_algo == 2: - field_cell = field_dist_1d_vectorized_kji(self.wavelength, kx, self.T1, - self.layer_info_list, self.period, self.pol, - res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) + field_cell = field_dist_1d(self.wavelength, kx, self.T1, + self.layer_info_list, self.period, self.pol, + res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) else: raise ValueError elif self._grating_type_assigned == 1: @@ -167,8 +169,8 @@ def calculate_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): field_cell = field_dist_1d_conical_vectorized_ji(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif field_algo == 2: - field_cell = field_dist_1d_conical_vectorized_kji(self.wavelength,kx, ky, self.T1, self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) + field_cell = field_dist_1d_conical(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, + res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) else: raise ValueError elif self._grating_type_assigned == 2: @@ -180,9 +182,9 @@ def calculate_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif field_algo == 2: - field_cell = field_dist_2d_vectorized_kji(self.wavelength, kx, ky, self.T1, self.layer_info_list, - self.period, res_x=res_x, res_y=res_y, res_z=res_z, - type_complex=self.type_complex) + field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, + self.period, res_x=res_x, res_y=res_y, res_z=res_z, + type_complex=self.type_complex) else: raise ValueError else: diff --git a/meent/on_numpy/emsolver/transfer_method.py b/meent/on_numpy/emsolver/transfer_method.py index a4485b3..277bcf3 100644 --- a/meent/on_numpy/emsolver/transfer_method.py +++ b/meent/on_numpy/emsolver/transfer_method.py @@ -183,6 +183,7 @@ def transfer_1d_conical_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=n V_11 = A_i @ W_1 @ Q_1 V_12 = Ky * A_i @ Kx @ W_2 V_21 = Ky * B_i @ Kx @ epz_conv_i @ W_1 + # V_21 = Ky * B_i @ Kx @ np.linalg.inv(epy_conv) @ W_1 V_22 = B_i @ W_2 @ Q_2 W = np.block([W_1, W_2]) @@ -268,8 +269,8 @@ def transfer_1d_conical_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, big_G_21 = big_G[ff_xy:, :ff_xy] big_G_22 = big_G[ff_xy:, ff_xy:] - delta_i0 = np.zeros(ff_xy, dtype=type_complex) - delta_i0[ff_xy // 2] = 1 + # delta_i0 = np.zeros(ff_xy, dtype=type_complex) + # delta_i0[ff_xy // 2] = 1 delta_i0 = np.zeros((ff_xy, 1), dtype=type_complex) delta_i0[ff_xy // 2, 0] = 1 From 44bf89a6682c7fd11623205f9e9cd62dcc6fdec0 Mon Sep 17 00:00:00 2001 From: yonghakim Date: Tue, 30 Jul 2024 19:16:40 +0900 Subject: [PATCH 06/15] updating --- benchmarks/interface/reti_meent_1D.py | 291 +++++++ benchmarks/interface/reti_meent_1Dc.py | 292 +++++++ benchmarks/interface/reti_meent_1Dc_old.py | 267 +++++++ meent/on_numpy/emsolver/_base.py | 88 +-- meent/on_numpy/emsolver/convolution_matrix.py | 146 +--- meent/on_numpy/emsolver/field_distribution.py | 736 ++++-------------- meent/on_numpy/emsolver/rcwa.py | 149 ++-- meent/on_numpy/emsolver/transfer_method.py | 10 +- 8 files changed, 1106 insertions(+), 873 deletions(-) create mode 100644 benchmarks/interface/reti_meent_1D.py create mode 100644 benchmarks/interface/reti_meent_1Dc.py create mode 100644 benchmarks/interface/reti_meent_1Dc_old.py diff --git a/benchmarks/interface/reti_meent_1D.py b/benchmarks/interface/reti_meent_1D.py new file mode 100644 index 0000000..61362c5 --- /dev/null +++ b/benchmarks/interface/reti_meent_1D.py @@ -0,0 +1,291 @@ +import os +import numpy as np +import matplotlib.pyplot as plt + +import meent + +# os.environ['OCTAVE_EXECUTABLE'] = '/opt/homebrew/bin/octave-cli' + + +class Reticolo: + + def __init__(self, engine_type='octave', *args, **kwargs): + + if engine_type == 'octave': + try: + from oct2py import octave + except Exception as e: + raise e + self.eng = octave + + elif engine_type == 'matlab': + try: + import matlab.engine + except Exception as e: + raise e + self.eng = matlab.engine.start_matlab() + else: + raise ValueError + + # path that has file to run in octave + m_path = os.path.dirname(__file__) + self.eng.addpath(self.eng.genpath(m_path)) + + def run_res2(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, wavelength, n_I, n_II, + *args, **kwargs): + theta *= (180 / np.pi) + phi *= (180 / np.pi) + + if grating_type in (0, 1): + period = period[0] + + fto = fto + Nx = ucell.shape[2] + period_x = period + grid_x = np.linspace(0, period, Nx + 1)[1:] + grid_x -= period_x / 2 + + # grid = np.linspace(0, period, Nx) + + ucell_new = [] + for z in range(ucell.shape[0]): + ucell_layer = [grid_x, ucell[z, 0]] + ucell_new.append(ucell_layer) + + textures = [n_I, *ucell_new, n_II] + + else: + + Nx = ucell.shape[2] + Ny = ucell.shape[1] + period_x = period[0] + period_y = period[1] + + unit_x = period_x / Nx + unit_y = period_y / Ny + + grid_x = np.linspace(0, period[0], Nx + 1)[1:] + grid_y = np.linspace(0, period[1], Ny + 1)[1:] + + grid_x -= period_x / 2 + grid_y -= period_y / 2 + + ucell_new = [] + for z in range(ucell.shape[0]): + ucell_layer = [10] + for y, yval in enumerate(grid_y): + for x, xval in enumerate(grid_x): + obj = [xval, yval, unit_x, unit_y, ucell[z, y, x], 1] + ucell_layer.append(obj) + ucell_new.append(ucell_layer) + textures = [n_I, *ucell_new, n_II] + + profile = np.array([[0, *thickness, 0], range(1, len(thickness) + 3)]) + + top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info = \ + self._run(pol, theta, phi, period, n_I, fto, textures, profile, wavelength, grating_type, + cal_field=False) + + return top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, bottom_tran_info.efficiency + + def run_res3(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, wavelength, n_top, n_bot, + matlab_plot_field=0, res3_npts=0, *args, **kwargs): + + # theta *= (180 / np.pi) + phi *= (180 / np.pi) + + if grating_type in (0, 1): + period = period[0] + + fto = fto + Nx = ucell.shape[2] + period_x = period + grid_x = np.linspace(0, period, Nx + 1)[1:] + grid_x -= period_x / 2 + + # grid = np.linspace(0, period, Nx) + + ucell_new = [] + for z in range(ucell.shape[0]): + ucell_layer = [grid_x, ucell[z, 0]] + ucell_new.append(ucell_layer) + + textures = [n_top, *ucell_new, n_bot] + + else: + + Nx = ucell.shape[2] + Ny = ucell.shape[1] + period_x = period[0] + period_y = period[1] + + unit_x = period_x / Nx + unit_y = period_y / Ny + + grid_x = np.linspace(0, period[0], Nx + 1)[1:] + grid_y = np.linspace(0, period[1], Ny + 1)[1:] + + grid_x -= period_x / 2 + grid_y -= period_y / 2 + + ucell_new = [] + for z in range(ucell.shape[0]): + ucell_layer = [10] + for y, yval in enumerate(grid_y): + for x, xval in enumerate(grid_x): + obj = [xval, yval, unit_x, unit_y, ucell[z, y, x], 1] + ucell_layer.append(obj) + ucell_new.append(ucell_layer) + textures = [n_top, *ucell_new, n_bot] + + profile = np.array([[0, *thickness, 0], range(1, len(thickness) + 3)]) + + top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell = \ + self._run(pol, theta, phi, period, n_top, fto, textures, profile, wavelength, grating_type, + cal_field=True, matlab_plot_field=matlab_plot_field, res3_npts=res3_npts) + + return top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, \ + bottom_tran_info.efficiency, field_cell + + def _run(self, pol, theta, phi, period, n_top, fto, + textures, profile, wavelength, grating_type, cal_field=False, matlab_plot_field=0, res3_npts=0): + + if cal_field: + top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell = \ + self.eng.reticolo_res3(pol, theta, phi, period, n_top, fto, + textures, profile, wavelength, grating_type, matlab_plot_field, res3_npts, + nout=5) + res = (top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell) + else: + top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info = \ + self.eng.reticolo_res2(pol, theta, phi, period, n_top, fto, + textures, profile, wavelength, grating_type, nout=4) + res = (top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info) + return res + + +if __name__ == '__main__': + + factor = 100 + option = {} + option['grating_type'] = 0 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating + option['pol'] = 0 # 0: TE, 1: TM + option['n_top'] = 2.2 # n_incidence + option['n_bot'] = 1 # n_transmission + option['theta'] = 60 * np.pi / 180 + option['phi'] = 0 * np.pi / 180 + option['fto'] = 1 + option['period'] = [770/factor] + option['wavelength'] = 777/factor + option['thickness'] = [100/factor, 100/factor, 100/factor, 100/factor, 100/factor, 100/factor] # final term is for h_substrate + # option['thickness'] = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1] # final term is for h_substrate + option['fourier_type'] = 2 + + ucell = np.array( + [ + [[3, 3, 3, 3, 3, 1, 1, 1, 1,]], + ]) + + option['ucell'] = ucell + option['thickness'] = [100/factor,] # final term is for h_substrate + + res3_npts = 20 + reti = Reticolo() + reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, matlab_plot_field=0, res3_npts=res3_npts) + print('reti de_ri', np.array(reti_de_ri).flatten()) + print('reti de_ti', np.array(reti_de_ti).flatten()) + + # Numpy + backend = 0 + nmee = meent.call_mee(backend=backend, perturbation=1E-30, **option) + n_de_ri, n_de_ti = nmee.conv_solve() + n_field_cell = nmee.calculate_field(res_z=20, res_x=ucell.shape[-1]) + + # n_field_cell = np.roll(n_field_cell, -1, 2) + + print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + + + if option['pol'] == 0: # TE + title = ['1D Ey', '1D Hx', '1D Hz', ] + else: # TM + title = ['1D Hy', '1D Ex', '1D Ez', ] + + for i in range(3): + a0 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, i]) + b0 = n_field_cell[:, 0, :, i] + + res = [] + res.append(np.linalg.norm(a0.conj() - b0).round(3)) + res.append(np.linalg.norm(abs(a0.conj())**2 - abs(b0)**2).round(3)) + res.append(np.linalg.norm(a0.conj().real - b0.real).round(3)) + res.append(np.linalg.norm(a0.conj().imag - b0.imag).round(3)) + print(f'{title[i]}, {res}') + + aa = np.angle(a0.conj()) + bb = np.angle(b0) + + # print(aa[0][1:] - aa[0][:-1]) + # print(bb[0][1:] - bb[0][:-1]) + + print(aa[0] - bb[0]) + print(1) + + # + # print('Ey, val diff', np.linalg.norm(a0.conj() - b0)) + # print('Ey, abs2 diff', np.linalg.norm(abs(a0.conj())**2 - abs(b0)**2)) + # print('Ey, real diff', np.linalg.norm(a0.conj().real - b0.real)) + # print('Ey, imag diff', np.linalg.norm(a0.conj().imag - b0.imag)) + # + # a1 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 1]) + # b1 = n_field_cell[:, 0, :, 1] + # print(np.linalg.norm(a1.conj() - b1)) + # print('Hx, val diff', np.linalg.norm(a1.conj() - b1)) + # print('Ey, abs2 diff', np.linalg.norm(abs(a1.conj())**2 - abs(b1)**2)) + # print('Ey, real diff', np.linalg.norm(a1.conj().real - b1.real)) + # print('Ey, imag diff', np.linalg.norm(a1.conj().imag - b1.imag)) + # + # a2 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 2]) + # b2 = n_field_cell[:, 0, :, 2] + # print(np.linalg.norm(a2.conj() - b2)) + # print('Hz, val diff', np.linalg.norm(a2.conj() - b2)) + # print('Ey, abs2 diff', np.linalg.norm(abs(a2.conj())**2 - abs(b2)**2)) + # print('Ey, real diff', np.linalg.norm(a2.conj().real - b2.real)) + # print('Ey, imag diff', np.linalg.norm(a2.conj().imag - b2.imag)) + + fig, axes = plt.subplots(3, 6, figsize=(10, 5)) + + for ix in range(len(title)): + r_data = np.flipud(r_field_cell[res3_npts:-res3_npts, :, ix]).conj() + + im = axes[ix, 0].imshow(abs(r_data)**2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + + n_data = n_field_cell[:, 0, :, ix] + + im = axes[ix, 1].imshow(abs(n_data)**2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + ix=0 + axes[ix, 0].title.set_text('abs**2 reti') + axes[ix, 2].title.set_text('Re, reti') + axes[ix, 4].title.set_text('Im, reti') + axes[ix, 1].title.set_text('abs**2 meen') + axes[ix, 3].title.set_text('Re, meen') + axes[ix, 5].title.set_text('Im, meen') + + plt.show() + + 1 diff --git a/benchmarks/interface/reti_meent_1Dc.py b/benchmarks/interface/reti_meent_1Dc.py new file mode 100644 index 0000000..f827b2e --- /dev/null +++ b/benchmarks/interface/reti_meent_1Dc.py @@ -0,0 +1,292 @@ +import os +import numpy as np +import matplotlib.pyplot as plt + +import meent + +# os.environ['OCTAVE_EXECUTABLE'] = '/opt/homebrew/bin/octave-cli' + + +class Reticolo: + + def __init__(self, engine_type='octave', *args, **kwargs): + + if engine_type == 'octave': + try: + from oct2py import octave + except Exception as e: + raise e + self.eng = octave + + elif engine_type == 'matlab': + try: + import matlab.engine + except Exception as e: + raise e + self.eng = matlab.engine.start_matlab() + else: + raise ValueError + + # path that has file to run in octave + m_path = os.path.dirname(__file__) + self.eng.addpath(self.eng.genpath(m_path)) + + def run_res2(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, wavelength, n_I, n_II, + *args, **kwargs): + theta *= (180 / np.pi) + phi *= (180 / np.pi) + + if grating_type in (0, 1): + period = period[0] + + fto = fto + Nx = ucell.shape[2] + period_x = period + grid_x = np.linspace(0, period, Nx + 1)[1:] + grid_x -= period_x / 2 + + # grid = np.linspace(0, period, Nx) + + ucell_new = [] + for z in range(ucell.shape[0]): + ucell_layer = [grid_x, ucell[z, 0]] + ucell_new.append(ucell_layer) + + textures = [n_I, *ucell_new, n_II] + + else: + + Nx = ucell.shape[2] + Ny = ucell.shape[1] + period_x = period[0] + period_y = period[1] + + unit_x = period_x / Nx + unit_y = period_y / Ny + + grid_x = np.linspace(0, period[0], Nx + 1)[1:] + grid_y = np.linspace(0, period[1], Ny + 1)[1:] + + grid_x -= period_x / 2 + grid_y -= period_y / 2 + + ucell_new = [] + for z in range(ucell.shape[0]): + ucell_layer = [10] + for y, yval in enumerate(grid_y): + for x, xval in enumerate(grid_x): + obj = [xval, yval, unit_x, unit_y, ucell[z, y, x], 1] + ucell_layer.append(obj) + ucell_new.append(ucell_layer) + textures = [n_I, *ucell_new, n_II] + + profile = np.array([[0, *thickness, 0], range(1, len(thickness) + 3)]) + + top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info = \ + self._run(pol, theta, phi, period, n_I, fto, textures, profile, wavelength, grating_type, + cal_field=False) + + return top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, bottom_tran_info.efficiency + + def run_res3(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, wavelength, n_top, n_bot, + matlab_plot_field=0, res3_npts=0, *args, **kwargs): + + # theta *= (180 / np.pi) + phi *= (180 / np.pi) + + if grating_type in (0, 1): + period = period[0] + + fto = fto + Nx = ucell.shape[2] + period_x = period + grid_x = np.linspace(0, period, Nx + 1)[1:] + grid_x -= period_x / 2 + + # grid = np.linspace(0, period, Nx) + + ucell_new = [] + for z in range(ucell.shape[0]): + ucell_layer = [grid_x, ucell[z, 0]] + ucell_new.append(ucell_layer) + + textures = [n_top, *ucell_new, n_bot] + + else: + + Nx = ucell.shape[2] + Ny = ucell.shape[1] + period_x = period[0] + period_y = period[1] + + unit_x = period_x / Nx + unit_y = period_y / Ny + + grid_x = np.linspace(0, period[0], Nx + 1)[1:] + grid_y = np.linspace(0, period[1], Ny + 1)[1:] + + grid_x -= period_x / 2 + grid_y -= period_y / 2 + + ucell_new = [] + for z in range(ucell.shape[0]): + ucell_layer = [10] + for y, yval in enumerate(grid_y): + for x, xval in enumerate(grid_x): + obj = [xval, yval, unit_x, unit_y, ucell[z, y, x], 1] + ucell_layer.append(obj) + ucell_new.append(ucell_layer) + textures = [n_top, *ucell_new, n_bot] + + profile = np.array([[0, *thickness, 0], range(1, len(thickness) + 3)]) + + top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell = \ + self._run(pol, theta, phi, period, n_top, fto, textures, profile, wavelength, grating_type, + cal_field=True, matlab_plot_field=matlab_plot_field, res3_npts=res3_npts) + + return top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, \ + bottom_tran_info.efficiency, field_cell + + def _run(self, pol, theta, phi, period, n_top, fto, + textures, profile, wavelength, grating_type, cal_field=False, matlab_plot_field=0, res3_npts=0): + + if cal_field: + top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell = \ + self.eng.reticolo_res3(pol, theta, phi, period, n_top, fto, + textures, profile, wavelength, grating_type, matlab_plot_field, res3_npts, + nout=5) + res = (top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell) + else: + top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info = \ + self.eng.reticolo_res2(pol, theta, phi, period, n_top, fto, + textures, profile, wavelength, grating_type, nout=4) + res = (top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info) + return res + + +if __name__ == '__main__': + + factor = 100 + option = {} + option['grating_type'] = 1 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating + option['pol'] = 0 # 0: TE, 1: TM + option['n_top'] = 2.2 # n_incidence + option['n_bot'] = 2 # n_transmission + option['theta'] = 40 * np.pi / 180 + option['phi'] = 20 * np.pi / 180 + option['fto'] = [40, 0] + option['period'] = [770/factor] + option['wavelength'] = 777/factor + option['thickness'] = [100/factor, 100/factor, 100/factor, 100/factor, 100/factor, 100/factor] # final term is for h_substrate + option['thickness'] = [100/factor,] # final term is for h_substrate + option['fourier_type'] = 2 + + ucell = np.array( + [ + [[3, 3, 3, 3, 3, 1, 1, 1, 1, 1]], + ]) + + option['ucell'] = ucell + + res3_npts = 20 + reti = Reticolo() + reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, matlab_plot_field=0, res3_npts=res3_npts) + print('reti de_ri', np.array(reti_de_ri).flatten()) + print('reti de_ti', np.array(reti_de_ti).flatten()) + + # Numpy + backend = 0 + nmee = meent.call_mee(backend=backend, perturbation=1E-30, **option) + n_de_ri, n_de_ti = nmee.conv_solve() + n_field_cell = nmee.calculate_field(res_z=20, res_x=ucell.shape[-1]) + + # n_field_cell = np.roll(n_field_cell, -1, 2) + + print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + + + if option['pol'] == 0: # TE + title = ['1D Ey', '1D Hx', '1D Hz', ] + else: # TM + title = ['1D Hy', '1D Ex', '1D Ez', ] + + title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] + for i in range(len(title)): + a0 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, i]) + b0 = n_field_cell[:, 0, :, i] + + res = [] + res.append(np.linalg.norm(a0.conj() - b0).round(3)) + res.append(np.linalg.norm(abs(a0.conj())**2 - abs(b0)**2).round(3)) + res.append(np.linalg.norm(a0.conj().real - b0.real).round(3)) + res.append(np.linalg.norm(a0.conj().imag - b0.imag).round(3)) + + print(f'{title[i]}, {res}') + + aa = np.angle(a0.conj()) + bb = np.angle(b0) + + print(aa[0][1:] - aa[0][:-1]) + print(bb[0][1:] - bb[0][:-1]) + + print(aa[0] - bb[0]) + print(1) + + # + # print('Ey, val diff', np.linalg.norm(a0.conj() - b0)) + # print('Ey, abs2 diff', np.linalg.norm(abs(a0.conj())**2 - abs(b0)**2)) + # print('Ey, real diff', np.linalg.norm(a0.conj().real - b0.real)) + # print('Ey, imag diff', np.linalg.norm(a0.conj().imag - b0.imag)) + # + # a1 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 1]) + # b1 = n_field_cell[:, 0, :, 1] + # print(np.linalg.norm(a1.conj() - b1)) + # print('Hx, val diff', np.linalg.norm(a1.conj() - b1)) + # print('Ey, abs2 diff', np.linalg.norm(abs(a1.conj())**2 - abs(b1)**2)) + # print('Ey, real diff', np.linalg.norm(a1.conj().real - b1.real)) + # print('Ey, imag diff', np.linalg.norm(a1.conj().imag - b1.imag)) + # + # a2 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 2]) + # b2 = n_field_cell[:, 0, :, 2] + # print(np.linalg.norm(a2.conj() - b2)) + # print('Hz, val diff', np.linalg.norm(a2.conj() - b2)) + # print('Ey, abs2 diff', np.linalg.norm(abs(a2.conj())**2 - abs(b2)**2)) + # print('Ey, real diff', np.linalg.norm(a2.conj().real - b2.real)) + # print('Ey, imag diff', np.linalg.norm(a2.conj().imag - b2.imag)) + + fig, axes = plt.subplots(6, 6, figsize=(10, 5)) + + for ix in range(len(title)): + r_data = np.flipud(r_field_cell[res3_npts:-res3_npts, :, ix]).conj() + + im = axes[ix, 0].imshow(abs(r_data)**2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + + n_data = n_field_cell[:, 0, :, ix] + + im = axes[ix, 1].imshow(abs(n_data)**2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + ix=0 + axes[ix, 0].title.set_text('abs**2 reti') + axes[ix, 2].title.set_text('Re, reti') + axes[ix, 4].title.set_text('Im, reti') + axes[ix, 1].title.set_text('abs**2 meen') + axes[ix, 3].title.set_text('Re, meen') + axes[ix, 5].title.set_text('Im, meen') + + plt.show() + + 1 diff --git a/benchmarks/interface/reti_meent_1Dc_old.py b/benchmarks/interface/reti_meent_1Dc_old.py new file mode 100644 index 0000000..05b462c --- /dev/null +++ b/benchmarks/interface/reti_meent_1Dc_old.py @@ -0,0 +1,267 @@ +import os +import numpy as np +import matplotlib.pyplot as plt + +import meent + +# os.environ['OCTAVE_EXECUTABLE'] = '/opt/homebrew/bin/octave-cli' + + +class Reticolo: + + def __init__(self, engine_type='octave', *args, **kwargs): + + if engine_type == 'octave': + try: + from oct2py import octave + except Exception as e: + raise e + self.eng = octave + + elif engine_type == 'matlab': + try: + import matlab.engine + except Exception as e: + raise e + self.eng = matlab.engine.start_matlab() + else: + raise ValueError + + # path that has file to run in octave + m_path = os.path.dirname(__file__) + self.eng.addpath(self.eng.genpath(m_path)) + + def run_res2(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, wavelength, n_I, n_II, + *args, **kwargs): + theta *= (180 / np.pi) + phi *= (180 / np.pi) + + if grating_type in (0, 1): + period = period[0] + + fto = fto + Nx = ucell.shape[2] + period_x = period + grid_x = np.linspace(0, period, Nx + 1)[1:] + grid_x -= period_x / 2 + + # grid = np.linspace(0, period, Nx) + + ucell_new = [] + for z in range(ucell.shape[0]): + ucell_layer = [grid_x, ucell[z, 0]] + ucell_new.append(ucell_layer) + + textures = [n_I, *ucell_new, n_II] + + else: + + Nx = ucell.shape[2] + Ny = ucell.shape[1] + period_x = period[0] + period_y = period[1] + + unit_x = period_x / Nx + unit_y = period_y / Ny + + grid_x = np.linspace(0, period[0], Nx + 1)[1:] + grid_y = np.linspace(0, period[1], Ny + 1)[1:] + + grid_x -= period_x / 2 + grid_y -= period_y / 2 + + ucell_new = [] + for z in range(ucell.shape[0]): + ucell_layer = [10] + for y, yval in enumerate(grid_y): + for x, xval in enumerate(grid_x): + obj = [xval, yval, unit_x, unit_y, ucell[z, y, x], 1] + ucell_layer.append(obj) + ucell_new.append(ucell_layer) + textures = [n_I, *ucell_new, n_II] + + profile = np.array([[0, *thickness, 0], range(1, len(thickness) + 3)]) + + top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info = \ + self._run(pol, theta, phi, period, n_I, fto, textures, profile, wavelength, grating_type, + cal_field=False) + + return top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, bottom_tran_info.efficiency + + def run_res3(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, wavelength, n_top, n_bot, + matlab_plot_field=0, res3_npts=0, *args, **kwargs): + + # theta *= (180 / np.pi) + phi *= (180 / np.pi) + + if grating_type in (0, 1): + period = period[0] + + fto = fto + Nx = ucell.shape[2] + period_x = period + grid_x = np.linspace(0, period, Nx + 1)[1:] + grid_x -= period_x / 2 + + # grid = np.linspace(0, period, Nx) + + ucell_new = [] + for z in range(ucell.shape[0]): + ucell_layer = [grid_x, ucell[z, 0]] + ucell_new.append(ucell_layer) + + textures = [n_top, *ucell_new, n_bot] + + else: + + Nx = ucell.shape[2] + Ny = ucell.shape[1] + period_x = period[0] + period_y = period[1] + + unit_x = period_x / Nx + unit_y = period_y / Ny + + grid_x = np.linspace(0, period[0], Nx + 1)[1:] + grid_y = np.linspace(0, period[1], Ny + 1)[1:] + + grid_x -= period_x / 2 + grid_y -= period_y / 2 + + ucell_new = [] + for z in range(ucell.shape[0]): + ucell_layer = [10] + for y, yval in enumerate(grid_y): + for x, xval in enumerate(grid_x): + obj = [xval, yval, unit_x, unit_y, ucell[z, y, x], 1] + ucell_layer.append(obj) + ucell_new.append(ucell_layer) + textures = [n_top, *ucell_new, n_bot] + + profile = np.array([[0, *thickness, 0], range(1, len(thickness) + 3)]) + + top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell = \ + self._run(pol, theta, phi, period, n_top, fto, textures, profile, wavelength, grating_type, + cal_field=True, matlab_plot_field=matlab_plot_field, res3_npts=res3_npts) + + return top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, \ + bottom_tran_info.efficiency, field_cell + + def _run(self, pol, theta, phi, period, n_top, fto, + textures, profile, wavelength, grating_type, cal_field=False, matlab_plot_field=0, res3_npts=0): + + if cal_field: + top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell = \ + self.eng.reticolo_res3(pol, theta, phi, period, n_top, fto, + textures, profile, wavelength, grating_type, matlab_plot_field, res3_npts, + nout=5) + res = (top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell) + else: + top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info = \ + self.eng.reticolo_res2(pol, theta, phi, period, n_top, fto, + textures, profile, wavelength, grating_type, nout=4) + res = (top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info) + return res + + +if __name__ == '__main__': + + option = {} + option['grating_type'] = 1 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating + option['pol'] = 1 # 0: TE, 1: TM + option['n_top'] = 1 # n_incidence + option['n_bot'] = 1.5 # n_transmission + option['theta'] = 30 * np.pi / 180 + option['phi'] = 0 * np.pi / 180 + option['fto'] = 40 + option['period'] = [1000] + option['wavelength'] = 650 + option['thickness'] = [100, 100, 100, 100, 100, 100] # final term is for h_substrate + option['fourier_type'] = 2 + + ucell = np.array( + [ + [[1, 1, 1, 1, 1, 0, 0, 1, 1, 1, ]], + [[1, 0, 0, 1, 0, 0, 0, 1, 1, 1, ]], + [[1, 1, 0, 1, 1, 1, 1, 1, 0, 1, ]], + [[1, 1, 1, 0, 1, 0, 0, 1, 1, 1, ]], + [[0, 0, 1, 0, 1, 0, 0, 1, 1, 1, ]], + [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]], + ]) * (3 - 1) + 1 + ucell = np.repeat(ucell, 10, axis=2) + option['ucell'] = ucell + + res3_npts = 20 + reti = Reticolo() + reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, res3_npts=res3_npts) + print('reti de_ri', np.array(reti_de_ri).flatten()) + print('reti de_ti', np.array(reti_de_ti).flatten()) + + # Numpy + backend = 0 + nmee = meent.call_mee(backend=backend, **option) + n_de_ri, n_de_ti = nmee.conv_solve() + n_field_cell = nmee.calculate_field(res_z=res3_npts, res_x=100) + print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + + if True: + a0 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 0]) + b0 = n_field_cell[:, 0, :, 0] + print('Ex', np.linalg.norm(a0.conj() - b0)) + + a1 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 1]) + b1 = n_field_cell[:, 0, :, 1] + print('Ey', np.linalg.norm(a1.conj() - b1)) + + a2 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 2]) + b2 = n_field_cell[:, 0, :, 2] + print('Ez', np.linalg.norm(a2.conj() - b2)) + + a3 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 3]) + b3 = n_field_cell[:, 0, :, 3] + print('Hx', np.linalg.norm(a3.conj() - b3)) + + a4 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 4]) + b4 = n_field_cell[:, 0, :, 4] + print('Hy', np.linalg.norm(a4.conj() - b4)) + + a5 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 5]) + b5 = n_field_cell[:, 0, :, 5] + print('Hz', np.linalg.norm(a5.conj() - b5)) + + title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz', ] + fig, axes = plt.subplots(2, 6, figsize=(15, 4)) + + for ix in range(len(title)): + data = r_field_cell[res3_npts:-res3_npts, :, ix] + val = data.real + # val = np.clip(val, -1, 1) + im = axes[0, ix].imshow(np.flipud(val), cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[0, ix], shrink=1) + axes[0, ix].title.set_text(title[ix]) + + val = data.imag + im = axes[1, ix].imshow(np.flipud(val), cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[1, ix], shrink=1) + plt.show() + + fig, axes = plt.subplots(2, 6, figsize=(15, 4)) + + for ix in range(len(title)): + + data = n_field_cell[:, 0, :, ix] + val = data.real + # val = np.clip(val, -1, 1) + im = axes[0, ix].imshow(val, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[0, ix], shrink=1) + axes[0, ix].title.set_text(title[ix]) + + val = -data.imag + # val = np.clip(val, -1, 1) + im = axes[1, ix].imshow(val, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[1, ix], shrink=1) + + plt.show() + + print('End') diff --git a/meent/on_numpy/emsolver/_base.py b/meent/on_numpy/emsolver/_base.py index 0f94f9c..5a53da8 100644 --- a/meent/on_numpy/emsolver/_base.py +++ b/meent/on_numpy/emsolver/_base.py @@ -100,6 +100,8 @@ def pol(self, pol): self._pol = pol psi = np.pi / 2 * (1 - self.pol) + + # TODO: directioin of ky_vector self._psi = np.array(psi, dtype=self.type_float) @property @@ -172,7 +174,7 @@ def period(self, period): self._period = np.array([period], dtype=self.type_float) elif type(period) in (list, tuple, np.ndarray): if len(period) == 1: - period = [period[0], 1] + period = [period[0], period[0]] self._period = np.array(period, dtype=self.type_float) else: raise ValueError @@ -193,7 +195,10 @@ def thickness(self, thickness): def get_kx_ky_vector(self, wavelength): fto_x_range = np.arange(-self.fto[0], self.fto[0] + 1) + + # TODO: reverse? fto_y_range = np.arange(-self.fto[1], self.fto[1] + 1) + # fto_y_range = np.arange(-self.fto[1], self.fto[1] + 1)[::-1] kx_vector = (self.n_top * np.sin(self.theta) * np.cos(self.phi) + fto_x_range * ( wavelength / self.period[0])).astype(self.type_complex) @@ -230,35 +235,13 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): epz_conv_i = epz_conv_i_all[layer_index] d = self.thickness[layer_index] - # if self.pol == 0: - # A = Kx ** 2 - epy_conv - # eigenvalues, W = np.linalg.eig(A) - # eigenvalues += 0j # to get positive square root - # q = eigenvalues ** 0.5 - # Q = np.diag(q) - # V = W @ Q - # - # elif self.pol == 1: - # B = Kx @ epz_conv_i @ Kx - np.eye(epy_conv.shape[0], dtype=self.type_complex) - # - # # eigenvalues, W = np.linalg.eig(E_conv @ B) - # eigenvalues, W = np.linalg.eig(epx_conv @ B) - # - # eigenvalues += 0j # to get positive square root - # q = eigenvalues ** 0.5 - # - # Q = np.diag(q) - # V = np.linalg.inv(epx_conv) @ W @ Q - # - # else: - # raise ValueError if self.connecting_algo == 'TMM': W, V, q = transfer_1d_2(self.pol, kx, epx_conv, epy_conv, epz_conv_i, self.type_complex) X, F, G, T, A_i, B = transfer_1d_3(k0, W, V, q, d, F, G, T, type_complex=self.type_complex) - layer_info = [epz_conv_i, W, V, q, d, A_i, B] # TODO: change field recover code + layer_info = [epz_conv_i, W, V, q, d, A_i, B] self.layer_info_list.append(layer_info) elif self.connecting_algo == 'SMM': @@ -267,7 +250,7 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): raise ValueError if self.connecting_algo == 'TMM': - de_ri, de_ti, T1 = transfer_1d_4(self.pol, F, G, T, kz_top, kz_bot, self.theta, self.n_top, self.n_bot, + de_ri, de_ti, T1 = transfer_1d_4(self.pol, k0, F, G, T, kz_top, kz_bot, self.theta, self.n_top, self.n_bot, type_complex=self.type_complex) self.T1 = T1 @@ -279,61 +262,6 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): return de_ri, de_ti, self.layer_info_list, self.T1 - def solve_1d_conical(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): - - self.layer_info_list = [] - self.T1 = None - - ff_x = self.fto[0] * 2 + 1 - ff_y = 1 - - k0 = 2 * np.pi / wavelength - kx, ky = self.get_kx_ky_vector(wavelength) - - if self.connecting_algo == 'TMM': - kz_top, kz_bot, varphi, big_F, big_G, big_T \ - = transfer_1d_conical_1(ff_x, ff_y, kx, ky, self.n_top, self.n_bot, type_complex=self.type_complex) - elif self.connecting_algo == 'SMM': - print('SMM for 1D conical is not implemented') - return np.nan, np.nan - else: - raise ValueError - - # From the last layer - for layer_index in range(len(self.thickness))[::-1]: - - epx_conv = epx_conv_all[layer_index] - epy_conv = epy_conv_all[layer_index] - epz_conv_i = epz_conv_i_all[layer_index] - - d = self.thickness[layer_index] - - if self.connecting_algo == 'TMM': - W, V, q = transfer_1d_conical_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=self.type_complex) - - big_X, big_F, big_G, big_T, big_A_i, big_B, \ - = transfer_1d_conical_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=self.type_complex) - - layer_info = [epz_conv_i, W, V, q, d, big_A_i, big_B] # TODO: change field recover code - self.layer_info_list.append(layer_info) - - elif self.connecting_algo == 'SMM': - raise ValueError - else: - raise ValueError - - if self.connecting_algo == 'TMM': - de_ri, de_ti, big_T1 = transfer_1d_conical_4(big_F, big_G, big_T, kz_top, kz_bot, self.psi, self.theta, - self.n_top, self.n_bot, type_complex=self.type_complex) - self.T1 = big_T1 - - elif self.connecting_algo == 'SMM': - raise ValueError - else: - raise ValueError - - return de_ri, de_ti, self.layer_info_list, self.T1 - def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): self.layer_info_list = [] diff --git a/meent/on_numpy/emsolver/convolution_matrix.py b/meent/on_numpy/emsolver/convolution_matrix.py index 4e58406..8289e50 100644 --- a/meent/on_numpy/emsolver/convolution_matrix.py +++ b/meent/on_numpy/emsolver/convolution_matrix.py @@ -38,50 +38,6 @@ def cell_compression(cell, type_complex=np.complex128): return cell_comp, x, y -# def fft_piecewise_constant(cell, x, y, fourier_order_x, fourier_order_y, type_complex=np.complex128): -# -# period_x, period_y = x[-1], y[-1] -# -# # X axis -# cell_next_x = np.roll(cell, -1, axis=1) -# cell_diff_x = cell_next_x - cell -# cell_diff_x = cell_diff_x.astype(type_complex) -# -# cell = cell.astype(type_complex) -# -# modes_x = np.arange(-2 * fourier_order_x, 2 * fourier_order_x + 1, 1) -# -# f_coeffs_x = cell_diff_x @ np.exp(-1j * 2 * np.pi * x @ modes_x[None, :] / period_x, dtype=type_complex) -# c = f_coeffs_x.shape[1] // 2 -# -# x_next = np.vstack((np.roll(x, -1, axis=0)[:-1], period_x)) - x -# -# f_coeffs_x[:, c] = (cell @ np.vstack((x[0], x_next[:-1]))).flatten() / period_x -# mask = np.ones(f_coeffs_x.shape[1], dtype=bool) -# mask[c] = False -# f_coeffs_x[:, mask] /= (1j * 2 * np.pi * modes_x[mask]) -# -# # Y axis -# f_coeffs_x_next_y = np.roll(f_coeffs_x, -1, axis=0) -# f_coeffs_x_diff_y = f_coeffs_x_next_y - f_coeffs_x -# -# modes_y = np.arange(-2 * fourier_order_y, 2 * fourier_order_y + 1, 1) -# -# f_coeffs_xy = f_coeffs_x_diff_y.T @ np.exp(-1j * 2 * np.pi * y @ modes_y[None, :] / period_y, dtype=type_complex) -# c = f_coeffs_xy.shape[1] // 2 -# -# y_next = np.vstack((np.roll(y, -1, axis=0)[:-1], period_y)) - y -# -# f_coeffs_xy[:, c] = f_coeffs_x.T @ np.vstack((y[0], y_next[:-1])).flatten() / period_y -# -# if c: -# mask = np.ones(f_coeffs_xy.shape[1], dtype=bool) -# mask[c] = False -# f_coeffs_xy[:, mask] /= (1j * 2 * np.pi * modes_y[mask]) -# -# return f_coeffs_xy.T - - def to_conv_mat_vector(ucell_info_list, fto_x, fto_y, device=None, type_complex=np.complex128): ff_xy = (2 * fto_x + 1) * (2 * fto_y + 1) @@ -125,46 +81,6 @@ def to_conv_mat_raster_continuous(ucell, fto_x, fto_y, device=None, type_complex epy_conv_all[i] = epy_conv epz_conv_i_all[i] = np.linalg.inv(epz_conv) - # if ucell_pmt.shape[1] == 1: # 1D - # # ff_x = 2 * fto_x + 1 - # # ff_y = 2 * fto_y + 1 # which is 1 - # # - # # epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - # # epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - # # epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - # - # for i, layer in enumerate(ucell_pmt): - # - # eps_matrix, x, y = cell_compression(layer, type_complex=type_complex) - # - # epz_conv = cfs2d(eps_matrix, x, y, 1, 1, fto_x, fto_y, type_complex) - # epy_conv = cfs2d(eps_matrix, x, y, 1, 0, fto_x, fto_y, type_complex) - # epx_conv = cfs2d(eps_matrix, x, y, 0, 1, fto_x, fto_y, type_complex) - # - # epx_conv_all[i] = epx_conv - # epy_conv_all[i] = epy_conv - # epz_conv_i_all[i] = np.linalg.inv(epz_conv) - # - # else: # 2D - # # ff_x = 2 * fto_x + 1 - # # ff_y = 2 * fto_y + 1 - # # - # # epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - # # epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - # # epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - # - # for i, layer in enumerate(ucell_pmt): - # - # eps_matrix, x, y = cell_compression(layer, type_complex=type_complex) - # - # epz_conv = cfs2d(eps_matrix, x, y, 1, 1, fto_x, fto_y, type_complex) - # epy_conv = cfs2d(eps_matrix, x, y, 1, 0, fto_x, fto_y, type_complex) - # epx_conv = cfs2d(eps_matrix, x, y, 0, 1, fto_x, fto_y, type_complex) - # - # epx_conv_all[i] = epx_conv - # epy_conv_all[i] = epy_conv - # epz_conv_i_all[i] = np.linalg.inv(epz_conv) - return epx_conv_all, epy_conv_all, epz_conv_i_all @@ -181,7 +97,7 @@ def to_conv_mat_raster_discrete(ucell, fto_x, fto_y, device=None, type_complex=n minimum_pattern_size_y = (4 * fto_y + 1) * ucell.shape[1] minimum_pattern_size_x = (4 * fto_x + 1) * ucell.shape[2] else: - minimum_pattern_size_y = 4 * fto_y + 1 + minimum_pattern_size_y = 4 * fto_y + 1 # TODO: align with other bds minimum_pattern_size_x = 4 * fto_x + 1 # e.g., 8 bytes * (40*500) * (40*500) / 1E6 = 3200 MB = 3.2 GB @@ -206,66 +122,6 @@ def to_conv_mat_raster_discrete(ucell, fto_x, fto_y, device=None, type_complex=n return epx_conv_all, epy_conv_all, epz_conv_i_all - # if ucell_pmt.shape[1] == 1: # 1D - # # ff_x = 2 * fto_x + 1 - # # ff_y = 2 * fto_y + 1 # which is 1 - # - # # epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - # # epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - # # epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - # - # if enhanced_dfs: - # minimum_pattern_size_x = (4 * fto_x + 1) * ucell_pmt.shape[2] - # else: - # minimum_pattern_size_x = (4 * fto_x + 1) # TODO: align with other bds - # - # for i, layer in enumerate(ucell_pmt): - # n = minimum_pattern_size_x // layer.shape[1] - # layer = np.repeat(layer, n + 1, axis=1) - # - # epz_conv = dfs2d(layer, 1, 1, fto_x, fto_y, type_complex) - # epy_conv = dfs2d(layer, 1, 0, fto_x, fto_y, type_complex) - # epx_conv = dfs2d(layer, 0, 1, fto_x, fto_y, type_complex) - # - # epx_conv_all[i] = epx_conv - # epy_conv_all[i] = epy_conv - # epz_conv_i_all[i] = np.linalg.inv(epz_conv) - # - # else: # 2D - # # ff_x = 2 * fto_x + 1 - # # ff_y = 2 * fto_y + 1 - # - # # epx_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - # # epy_conv_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - # # epz_conv_i_all = np.zeros((ucell_pmt.shape[0], ff_y * ff_x, ff_y * ff_x)).astype(type_complex) - # - # if enhanced_dfs: - # minimum_pattern_size_y = (4 * fto_y + 1) * ucell_pmt.shape[1] - # minimum_pattern_size_x = (4 * fto_x + 1) * ucell_pmt.shape[2] - # else: - # minimum_pattern_size_y = 4 * fto_y + 1 - # minimum_pattern_size_x = 4 * fto_x + 1 - # # e.g., 8 bytes * (40*500) * (40*500) / 1E6 = 3200 MB = 3.2 GB - # - # for i, layer in enumerate(ucell_pmt): - # if layer.shape[0] < minimum_pattern_size_y: - # n = minimum_pattern_size_y // layer.shape[0] - # layer = np.repeat(layer, n + 1, axis=0) - # - # if layer.shape[1] < minimum_pattern_size_x: - # n = minimum_pattern_size_x // layer.shape[1] - # layer = np.repeat(layer, n + 1, axis=1) - # - # epz_conv = dfs2d(layer, 1, 1, fto_x, fto_y, type_complex) - # epy_conv = dfs2d(layer, 1, 0, fto_x, fto_y, type_complex) - # epx_conv = dfs2d(layer, 0, 1, fto_x, fto_y, type_complex) - # - # epx_conv_all[i] = epx_conv - # epy_conv_all[i] = epy_conv - # epz_conv_i_all[i] = np.linalg.inv(epz_conv) - # - # return epx_conv_all, epy_conv_all, epz_conv_i_all - def circulant(c): diff --git a/meent/on_numpy/emsolver/field_distribution.py b/meent/on_numpy/emsolver/field_distribution.py index d6fc5fb..6fe6934 100644 --- a/meent/on_numpy/emsolver/field_distribution.py +++ b/meent/on_numpy/emsolver/field_distribution.py @@ -1,198 +1,167 @@ import numpy as np -def field_dist_1d(wavelength, kx, T1, layer_info_list, period, - pol, res_x=20, res_y=1, res_z=20, type_complex=np.complex128): +def field_dist_1dd(wavelength, n_I, theta, kx_vector, T1, layer_info_list, period, pol, res_x=20, res_y=20, res_z=20, + type_complex=np.complex128): + res_y = 1 k0 = 2 * np.pi / wavelength - Kx = np.diag(kx) + Kx = np.diag(kx_vector) + fourier_centering = np.exp(-1j * k0 * n_I * np.sin(theta) * -period[0] / 2) field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) T_layer = T1 # From the first layer - for idx_layer, (epz_conv_i, W, V, q, d, A_i, B) in enumerate(layer_info_list[::-1]): - c1 = T_layer[:, None] - X = np.diag(np.exp(-k0 * q * d)) + for idx_layer, (E_conv_i, W, V, q, d, a_i, b) in enumerate(layer_info_list[::-1]): + # E_conv_i = np.linalg.inv(E_conv_i) - c2 = B @ A_i @ X @ T_layer[:, None] + X = np.diag(np.exp(-k0 * q * d)) + c1 = T_layer[:, None] + c2 = b @ a_i @ X @ T_layer[:, None] Q = np.diag(q) - z_1d = np.arange(res_z).reshape((-1, 1, 1)) / res_z * d + if pol == 0: + V = W @ Q + EKx = None + else: + V = E_conv_i @ W @ Q + EKx = E_conv_i @ Kx - My = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - Mx = V @ (-diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - Mz = epz_conv_i @ Kx @ My if pol else Kx @ My + z_1d = np.linspace(0, d, res_z).reshape((-1, 1, 1)) + # z_1d = np.linspace(-d/2, d/2, res_z).reshape((-1, 1, 1)) - x_1d = np.arange(res_x).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = np.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) + for k in range(res_z): + z = k / res_z * d + z = z_1d[k] - exp_K = np.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) + if pol == 0: # TE + Sy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) + Ux = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) + f_here = (-1j) * Kx @ Sy - Fy = exp_K[:, :, None, :] @ My[:, None, None, :, :] - Fx = -1j * exp_K[:, :, None, :] @ Mx[:, None, None, :, :] - Fz = -1j * exp_K[:, :, None, :] @ Mz[:, None, None, :, :] + for j in range(res_y): + for i in range(res_x): + # x_1d = np.linspace(0, res_x, res_x) - val = np.concatenate((Fy.squeeze(-1), Fx.squeeze(-1), Fz.squeeze(-1)), axis=-1) + # TODO: delete +1. +1 is to match to reticolo + x = (i+1) * period[0] / res_x + # x = x_1d[i] * period[0] / res_x - # - # - # if pol == 0: - # Sy = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - # Ux = V @ (-diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - # Uz = Kx @ Sy - # - # x_1d = np.arange(res_x).reshape((1, -1, 1)) - # x_1d = -1j * x_1d * period[0] / res_x - # x_2d = np.tile(x_1d, (res_y, 1, 1)) - # x_2d = x_2d * kx - # x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) - # - # exp_K = np.exp(x_2d) - # exp_K = exp_K.reshape((res_y, res_x, -1)) - # - # Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] - # Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] - # Hz = -1j * exp_K[:, :, None, :] @ Uz[:, None, None, :, :] - # - # val = np.concatenate((Ey.squeeze(-1), Hx.squeeze(-1), Hz.squeeze(-1)), axis=-1) - # - # else: - # Uy = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - # Sx = V @ (-diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - # Sz = epz_conv_i @ Kx @ Uy # there is a better option for convergence - # - # x_1d = np.arange(res_x).reshape((1, -1, 1)) - # x_1d = -1j * x_1d * period[0] / res_x - # x_2d = np.tile(x_1d, (res_y, 1, 1)) - # x_2d = x_2d * kx - # x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) - # - # exp_K = np.exp(x_2d) - # exp_K = exp_K.reshape((res_y, res_x, -1)) - # - # Hy = exp_K[:, :, None, :] @ Uy[:, None, None, :, :] - # Ex = 1j * exp_K[:, :, None, :] @ Sx[:, None, None, :, :] - # Ez = -1j * exp_K[:, :, None, :] @ Sz[:, None, None, :, :] - # - # val = np.concatenate((Hy.squeeze(-1), Ex.squeeze(-1), Ez.squeeze(-1)), axis=-1) + Ey = Sy.T @ np.exp(-1j * k0 * kx_vector.reshape((-1, 1)) * x) * fourier_centering + Hx = 1j * Ux.T @ np.exp(-1j*k0 * kx_vector.reshape((-1, 1)) * x) * fourier_centering + Hz = 1j * f_here.T @ np.exp(-1j*k0 * kx_vector.reshape((-1, 1)) * x) * fourier_centering - field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val + field_cell[res_z * idx_layer + k, j, i-1] = [Ey[0, 0], Hx[0, 0], Hz[0, 0]] + else: # TM + Uy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) + Sx = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - T_layer = A_i @ X @ T_layer + f_here = (-1j) * EKx @ Uy # there is a better option for convergence + + for j in range(res_y): + for i in range(res_x): + x = i * period[0] / res_x + + Hy = Uy.T @ np.exp(-1j * kx_vector.reshape((-1, 1)) * x) * fourier_centering + Ex = 1j * Sx.T @ np.exp(-1j * kx_vector.reshape((-1, 1)) * x) * fourier_centering + Ez = f_here.T @ np.exp(-1j * kx_vector.reshape((-1, 1)) * x) * fourier_centering + + field_cell[res_z * idx_layer + k, j, i] = [Hy[0, 0], Ex[0, 0], Ez[0, 0]] + + T_layer = a_i @ X @ T_layer return field_cell -def field_dist_1d_conical(wavelength, kx, ky, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, type_complex=np.complex128): +def field_dist_1d(wavelength, n_I, theta, kx, T1, layer_info_list, period, + pol, res_x=20, res_y=1, res_z=20, type_complex=np.complex128): + res_y = 1 k0 = 2 * np.pi / wavelength Kx = np.diag(kx) + fourier_centering = np.exp(-1j * k0 * n_I * np.sin(theta) * -period[0] / 2) - field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) + field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) T_layer = T1 - big_I = np.eye(len(T1)).astype(type_complex) - # From the first layer - for idx_layer, (epz_conv_i, W, V, q, d, big_A_i, big_B) in enumerate(layer_info_list[::-1]): - - ff_x = len(W) - - W_1 = W[:, :ff_x] - W_2 = W[:, ff_x:] - - V_11 = V[:ff_x, :ff_x] - V_12 = V[:ff_x, ff_x:] - V_21 = V[ff_x:, :ff_x] - V_22 = V[ff_x:, ff_x:] - - q_1 = q[:ff_x] - q_2 = q[ff_x:] - # - # - # X_1 = np.diag(np.exp(-k0 * q_1 * d)) - # X_2 = np.diag(np.exp(-k0 * q_2 * d)) - - big_X = np.diag(np.exp(-k0 * q * d)) - - c = np.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer - z_1d = np.arange(res_z).reshape((-1, 1, 1)) / res_z * d + for idx_layer, (epz_conv_i, W, V, q, d, A_i, B) in enumerate(layer_info_list[::-1]): + c1 = T_layer[:, None] + X = np.diag(np.exp(-k0 * q * d)) - ff = len(c) // 4 + c2 = B @ A_i @ X @ T_layer[:, None] + Q = np.diag(q) - c1_plus = c[0 * ff:1 * ff] - c2_plus = c[1 * ff:2 * ff] - c1_minus = c[2 * ff:3 * ff] - c2_minus = c[3 * ff:4 * ff] + z_1d = np.linspace(0, res_z, res_z).reshape((-1, 1, 1)) / res_z * d - big_Q1 = np.diag(q_1) - big_Q2 = np.diag(q_2) + # tODO: merge My and Mx - Sx = W_2 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Sy = V_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Ux = W_1 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) - Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Sz = -1j * epz_conv_i @ (Kx @ Uy - ky * Ux) - Uz = -1j * (Kx @ Sy - ky * Sx) + if pol == 0: + My = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + Mx = V @ (diag_exp_batch(-k0 * Q * z_1d) @ -c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + Mz = -1j * Kx @ My + else: + My = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + Mx = V @ (diag_exp_batch(-k0 * Q * z_1d) @ -c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + Mz = -1j * epz_conv_i @ Kx @ My if pol else -1j * Kx @ My - x_1d = np.arange(res_x).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x + x_1d = np.arange(1, res_x+1).reshape((1, -1, 1)) + x_1d = x_1d * period[0] / res_x x_2d = np.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx + x_2d = x_2d * kx * k0 x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) - exp_K = np.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) + inv_fourier = np.exp(-1j * x_2d) + inv_fourier = inv_fourier.reshape((res_y, res_x, -1)) - Ex = exp_K[:, :, None, :] @ Sx[:, None, None, :, :] - Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] - Ez = exp_K[:, :, None, :] @ Sz[:, None, None, :, :] + if pol == 0: + Fy = inv_fourier[:, :, None, :] @ My[:, None, None, :, :] * fourier_centering + Fx = 1j * inv_fourier[:, :, None, :] @ Mx[:, None, None, :, :] * fourier_centering + Fz = 1j * inv_fourier[:, :, None, :] @ Mz[:, None, None, :, :] * fourier_centering - Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] - Hy = -1j * exp_K[:, :, None, :] @ Uy[:, None, None, :, :] - Hz = -1j * exp_K[:, :, None, :] @ Uz[:, None, None, :, :] + else: + Fy = inv_fourier[:, :, None, :] @ My[:, None, None, :, :] * fourier_centering + Fx = -1j * inv_fourier[:, :, None, :] @ Mx[:, None, None, :, :] * fourier_centering + Fz = -1j * inv_fourier[:, :, None, :] @ Mz[:, None, None, :, :] * fourier_centering - val = np.concatenate( - (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), -1) + val = np.concatenate((Fy.squeeze(-1), Fx.squeeze(-1), Fz.squeeze(-1)), axis=-1) + val = np.roll(val, 1, 2) field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val - T_layer = big_A_i @ big_X @ T_layer + + T_layer = A_i @ X @ T_layer return field_cell -def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, +def field_dist_2d(wavelength, n_I, theta, phi, kx, ky, T1, layer_info_list, period, res_x=20, res_y=20, res_z=20, type_complex=np.complex128): k0 = 2 * np.pi / wavelength - # fto_x_range = np.arange(-fto[0], fto[0] + 1) - # fto_y_range = np.arange(-fto[1], fto[1] + 1) - ff_x = len(kx) ff_y = len(ky) - # kx = k0 * (n_I * np.sin(theta) * np.cos(phi) + fto_x_range * ( - # wavelength / period[0])).astype(type_complex) - # - # ky_vector = k0 * (n_I * np.sin(theta) * np.sin(phi) + fto_y_range * ( - # wavelength / period[1])).astype(type_complex) + Kx = np.diag(np.tile(kx, ff_y).flatten()) + Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) - # kx = kx - # ky_vector = ky + # if ff_x > 1: + # fourier_centering_x = np.exp(-1j * k0 * n_I * np.sin(theta) * np.cos(phi) * -period[0] / 2) + # else: + # fourier_centering_x = np.exp(-1j * k0 * n_I * np.sin(theta) * np.cos(phi) * -period[0]) + # + # if ff_y > 1: + # fourier_centering_y = np.exp(-1j * k0 * n_I * np.sin(theta) * np.sin(phi) * -period[1] / 2) + # else: + # fourier_centering_y = np.exp(-1j * k0 * n_I * np.sin(theta) * np.sin(phi) * -period[1]) - Kx = np.diag(np.tile(kx, ff_y).flatten()) / k0 - Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) / k0 + fourier_centering_x = np.exp(-1j * k0 * n_I * np.sin(theta) * np.cos(phi) * -period[0] / 2) + fourier_centering_y = np.exp(-1j * k0 * n_I * np.sin(theta) * np.sin(phi) * -period[1] / 2) + fourier_centering = fourier_centering_x * fourier_centering_y + # fourier_centering = 1 field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) T_layer = T1 @@ -200,20 +169,32 @@ def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, big_I = np.eye((len(T1))).astype(type_complex) # From the first layer - for idx_layer, (E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_A_i, big_B, d)\ - in enumerate(layer_info_list[::-1]): + for idx_layer, (epz_conv_i, W, V, q, d, big_A_i, big_B) in enumerate(layer_info_list[::-1]): + + ff_xy = len(q) // 2 + + W_11 = W[:ff_xy, :ff_xy] + W_12 = W[:ff_xy, ff_xy:] + W_21 = W[ff_xy:, :ff_xy] + W_22 = W[ff_xy:, ff_xy:] + + V_11 = V[:ff_xy, :ff_xy] + V_12 = V[:ff_xy, ff_xy:] + V_21 = V[ff_xy:, :ff_xy] + V_22 = V[ff_xy:, ff_xy:] big_X = np.diag(np.exp(-k0 * q * d)) c = np.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer - z_1d = np.arange(res_z).reshape((-1, 1, 1)) / res_z * d + z_1d = np.linspace(0, res_z, res_z).reshape((-1, 1, 1)) / res_z * d + # z_1d = np.arange(0, res_z, res_z).reshape((-1, 1, 1)) / res_z * d - ff = len(c) // 4 + # ff = len(c) // 4 - c1_plus = c[0 * ff:1 * ff] - c2_plus = c[1 * ff:2 * ff] - c1_minus = c[2 * ff:3 * ff] - c2_minus = c[3 * ff:4 * ff] + c1_plus = c[0 * ff_xy:1 * ff_xy] + c2_plus = c[1 * ff_xy:2 * ff_xy] + c1_minus = c[2 * ff_xy:3 * ff_xy] + c2_minus = c[3 * ff_xy:4 * ff_xy] q1 = q[:len(q) // 2] q2 = q[len(q) // 2:] @@ -228,458 +209,47 @@ def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, + V_12 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Sz = -1j * E_conv_i @ (Kx @ Uy - Ky @ Ux) + Sz = -1j * epz_conv_i @ (Kx @ Uy - Ky @ Ux) Uz = -1j * (Kx @ Sy - Ky @ Sx) - x_1d = np.arange(res_x).reshape((1, -1, 1)) - y_1d = np.arange(res_y).reshape((-1, 1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - y_1d = -1j * y_1d * period[1] / res_y + x_1d = np.arange(1, res_x+1).reshape((1, -1, 1)) + x_1d = x_1d * period[0] / res_x + x_1d = np.linspace(0, period[0], res_x).reshape((1, -1, 1)) + # x_1d = np.arange(res_x).reshape((1, -1, 1)) * period[0] / res_x + + # y_1d = np.arange(1, res_y+1).reshape((-1, 1, 1)) + # y_1d = np.arange(res_y, 0, -1).reshape((-1, 1, 1)) + # y_1d = np.arange(res_y-1, -1, -1).reshape((-1, 1, 1)) + + # y_1d = np.arange(res_y-1, -1, -1).reshape((-1, 1, 1)) + # y_1d = np.arange(res_y).reshape((-1, 1, 1)) + # y_1d = y_1d * period[1] / res_y + # y_1d = np.linspace(0, period[1], res_y).reshape((-1, 1, 1)) + y_1d = np.linspace(period[1], 0, res_y).reshape((-1, 1, 1)) # TODO + x_2d = np.tile(x_1d, (res_y, 1, 1)) - y_2d = np.tile(y_1d, (1, res_x, 1)) - x_2d = x_2d * kx - y_2d = y_2d * ky + x_2d = x_2d * kx * k0 x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) + + y_2d = np.tile(y_1d, (1, res_x, 1)) + y_2d = y_2d * ky * k0 y_2d = y_2d.reshape((res_y, res_x, len(ky), 1)) - exp_K = np.exp(x_2d) * np.exp(y_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) + inv_fourier = np.exp(-1j * x_2d) * np.exp(-1j * y_2d) + inv_fourier = inv_fourier.reshape((res_y, res_x, -1)) - Ex = exp_K[:, :, None, :] @ Sx[:, None, None, :, :] - Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] - Ez = exp_K[:, :, None, :] @ Sz[:, None, None, :, :] - Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] - Hy = -1j * exp_K[:, :, None, :] @ Uy[:, None, None, :, :] - Hz = -1j * exp_K[:, :, None, :] @ Uz[:, None, None, :, :] + Ex = inv_fourier[:, :, None, :] @ Sx[:, None, None, :, :] * fourier_centering + Ey = inv_fourier[:, :, None, :] @ Sy[:, None, None, :, :] * fourier_centering + Ez = inv_fourier[:, :, None, :] @ Sz[:, None, None, :, :] * fourier_centering + Hx = 1j * inv_fourier[:, :, None, :] @ Ux[:, None, None, :, :] * fourier_centering + Hy = 1j * inv_fourier[:, :, None, :] @ Uy[:, None, None, :, :] * fourier_centering + Hz = 1j * inv_fourier[:, :, None, :] @ Uz[:, None, None, :, :] * fourier_centering val = np.concatenate( (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), -1) - field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val - - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - - -def field_dist_1d_vectorized_ji(wavelength, kx, T1, layer_info_list, period, - pol, res_x=20, res_y=20, res_z=20, type_complex=np.complex128): - - k0 = 2 * np.pi / wavelength - Kx = np.diag(kx) - - field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) - - T_layer = T1 - - # From the first layer - for idx_layer, (epz_conv_i, W, V, q, d, X, A_i, B) in enumerate(layer_info_list[::-1]): - - c1 = T_layer[:, None] - c2 = B @ A_i @ X @ T_layer[:, None] - - Q = np.diag(q) - - if pol == 0: - V = W @ Q - EKx = None - - else: - V = epz_conv_i @ W @ Q - EKx = epz_conv_i @ Kx - - for k in range(res_z): - z = k / res_z * d - - if pol == 0: - Sy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Ux = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Uz = Kx @ Sy - - x_1d = np.arange(res_x).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = np.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) - - exp_K = np.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Ey = exp_K @ Sy - Hx = -1j * exp_K @ Ux - Hz = -1j * exp_K @ Uz - - val = np.concatenate((Ey, Hx, Hz), axis=-1) - - else: - Uy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Sx = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Sz = EKx @ Uy # there is a better option for convergence - - x_1d = np.arange(res_x).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = np.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) - - exp_K = np.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Hy = exp_K @ Uy - Ex = 1j * exp_K @ Sx - Ez = -1j * exp_K @ Sz - - val = np.concatenate((Hy, Ex, Ez), axis=-1) - - field_cell[res_z * idx_layer + k] = val - - T_layer = A_i @ X @ T_layer - - return field_cell - - -def field_dist_1d_conical_vectorized_ji(wavelength, kx, ky, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, type_complex=np.complex128): - - k0 = 2 * np.pi / wavelength - # ky = k0 * n_I * np.sin(theta) * np.sin(phi) - Kx = np.diag(kx) - - field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) - - T_layer = T1 - - big_I = np.eye((len(T1))).astype(type_complex) - - # From the first layer - for idx_layer, [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] \ - in enumerate(layer_info_list[::-1]): - - c = np.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer - cut = len(c) // 4 - - c1_plus = c[0*cut:1*cut] - c2_plus = c[1*cut:2*cut] - c1_minus = c[2*cut:3*cut] - c2_minus = c[3*cut:4*cut] - - big_Q1 = np.diag(q_1) - big_Q2 = np.diag(q_2) - for k in range(res_z): - z = k / res_z * d - - Sx = W_2 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Sy = V_11 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_12 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Ux = W_1 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) - Uy = V_21 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_22 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Sz = -1j * E_conv_i @ (Kx @ Uy - ky * Ux) - Uz = -1j * (Kx @ Sy - ky * Sx) - - x_1d = np.arange(res_x).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = np.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) - - exp_K = np.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Ex = exp_K @ Sx - Ey = exp_K @ Sy - Ez = exp_K @ Sz - - Hx = -1j * exp_K @ Ux - Hy = -1j * exp_K @ Uy - Hz = -1j * exp_K @ Uz - - val = np.concatenate((Ex, Ey, Ez, Hx, Hy, Hz), axis=-1) - - field_cell[res_z * idx_layer + k] = val - - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - - -def field_dist_2d_vectorized_ji(wavelength, kx, ky, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, type_complex=np.complex128): - - k0 = 2 * np.pi / wavelength - - ff_x = len(kx) - ff_y = len(ky) - - # fourier_indices_y = np.arange(-fourier_order_y, fourier_order_y + 1) - # ff_x = fourier_order_x * 2 + 1 - # ff_y = fourier_order_y * 2 + 1 - # ky = k0 * (n_I * np.sin(theta) * np.sin(phi) + fourier_indices_y * ( - # wavelength / period[1])).astype(type_complex) - - Kx = np.diag(np.tile(kx, ff_y).flatten()) / k0 - Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) / k0 - - field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) - - T_layer = T1 - - big_I = np.eye((len(T1))).astype(type_complex) - - # From the first layer - for idx_layer, (E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d)\ - in enumerate(layer_info_list[::-1]): - - c = np.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer - - ff = len(c) // 4 - - c1_plus = c[0*ff:1*ff] - c2_plus = c[1*ff:2*ff] - c1_minus = c[2*ff:3*ff] - c2_minus = c[3*ff:4*ff] - - q1 = q[:len(q)//2] - q2 = q[len(q)//2:] - big_Q1 = np.diag(q1) - big_Q2 = np.diag(q2) - - for k in range(res_z): - z = k / res_z * d - - Sx = W_11 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + W_12 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Sy = W_21 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + W_22 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Ux = V_11 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_12 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Uy = V_21 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_22 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Sz = -1j * E_conv_i @ (Kx @ Uy - Ky @ Ux) - Uz = -1j * (Kx @ Sy - Ky @ Sx) - - x_1d = np.arange(res_x).reshape((1, -1, 1)) - y_1d = np.arange(res_y).reshape((-1, 1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - y_1d = -1j * y_1d * period[1] / res_y - x_2d = np.tile(x_1d, (res_y, 1, 1)) - y_2d = np.tile(y_1d, (1, res_x, 1)) - x_2d = x_2d * kx - y_2d = y_2d * ky - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) - y_2d = y_2d.reshape((res_y, res_x, len(ky), 1)) - - exp_K = np.exp(x_2d) * np.exp(y_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Ex = exp_K @ Sx - Ey = exp_K @ Sy - Ez = exp_K @ Sz - Hx = -1j * exp_K @ Ux - Hy = -1j * exp_K @ Uy - Hz = -1j * exp_K @ Uz - - val = np.concatenate((Ex, Ey, Ez, Hx, Hy, Hz), axis=-1) - field_cell[res_z * idx_layer + k] = val - - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - - -def field_dist_1d_vanilla(wavelength, kx, T1, layer_info_list, period, pol, res_x=20, res_y=20, res_z=20, - type_complex=np.complex128): - - k0 = 2 * np.pi / wavelength - Kx = np.diag(kx) - - field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) - - T_layer = T1 - - # From the first layer - for idx_layer, (epz_conv_i, W, V, q, d, X, A_i, B) in enumerate(layer_info_list[::-1]): - c1 = T_layer[:, None] - c2 = B @ A_i @ X @ T_layer[:, None] - Q = np.diag(q) - - if pol == 0: - V = W @ Q - EKx = None - else: - V = epz_conv_i @ W @ Q - EKx = epz_conv_i @ Kx - - for k in range(res_z): - z = k / res_z * d - - if pol == 0: # TE - Sy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Ux = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - f_here = (-1j) * Kx @ Sy - - for j in range(res_y): - for i in range(res_x): - x = i * period[0] / res_x - - Ey = Sy.T @ np.exp(-1j * kx.reshape((-1, 1)) * x) - Hx = -1j * Ux.T @ np.exp(-1j * kx.reshape((-1, 1)) * x) - Hz = f_here.T @ np.exp(-1j * kx.reshape((-1, 1)) * x) - - field_cell[res_z * idx_layer + k, j, i] = [Ey[0, 0], Hx[0, 0], Hz[0, 0]] - else: # TM - Uy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Sx = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - - f_here = (-1j) * EKx @ Uy # there is a better option for convergence - - for j in range(res_y): - for i in range(res_x): - x = i * period[0] / res_x - - Hy = Uy.T @ np.exp(-1j * kx.reshape((-1, 1)) * x) - Ex = 1j * Sx.T @ np.exp(-1j * kx.reshape((-1, 1)) * x) - Ez = f_here.T @ np.exp(-1j * kx.reshape((-1, 1)) * x) - - field_cell[res_z * idx_layer + k, j, i] = [Hy[0, 0], Ex[0, 0], Ez[0, 0]] - - T_layer = A_i @ X @ T_layer - - return field_cell - - -def field_dist_1d_conical_vanilla(wavelength, kx, ky, n_I, theta, phi, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, type_complex=np.complex128): - - k0 = 2 * np.pi / wavelength - # ky = k0 * n_I * np.sin(theta) * np.sin(phi) - Kx = np.diag(kx) - - field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) - - T_layer = T1 - big_I = np.eye((len(T1)), dtype=type_complex) - - # From the first layer - for idx_layer, [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] \ - in enumerate(layer_info_list[::-1]): - - c = np.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer - - cut = len(c) // 4 - - c1_plus = c[0*cut:1*cut] - c2_plus = c[1*cut:2*cut] - c1_minus = c[2*cut:3*cut] - c2_minus = c[3*cut:4*cut] - - big_Q1 = np.diag(q_1) - big_Q2 = np.diag(q_2) - - for k in range(res_z): - z = k / res_z * d - - Sx = W_2 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Sy = V_11 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_12 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Ux = W_1 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) - Uy = V_21 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_22 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Sz = -1j * E_conv_i @ (Kx @ Uy - ky * Ux) - Uz = -1j * (Kx @ Sy - ky * Sx) - - for j in range(res_y): - for i in range(res_x): - x = i * period[0] / res_x - exp_K = np.exp(-1j * kx.reshape((-1, 1)) * x) - # exp_K = exp_K.flatten() - - Ex = Sx.T @ exp_K - Ey = Sy.T @ exp_K - Ez = Sz.T @ exp_K - Hx = -1j * Ux.T @ exp_K - Hy = -1j * Uy.T @ exp_K - Hz = -1j * Uz.T @ exp_K - - field_cell[res_z * idx_layer + k, j, i] = [Ex[0, 0], Ey[0, 0], Ez[0, 0], Hx[0, 0], Hy[0, 0], Hz[0, 0]] - - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - - -def field_dist_2d_vanilla(wavelength, kx, ky, T1, layer_info_list, - period, res_x=20, res_y=20, res_z=20, - type_complex=np.complex128): - - k0 = 2 * np.pi / wavelength - ff_x = len(kx) - ff_y = len(ky) - - # fourier_indices_y = np.arange(-fourier_order_y, fourier_order_y + 1) - # ff_x = fourier_order_x * 2 + 1 - # ff_y = fourier_order_y * 2 + 1 - # - # ky_vector = k0 * (n_I * np.sin(theta) * np.sin(phi) + fourier_indices_y * ( - # wavelength / period[1])).astype(type_complex) - - Kx = np.diag(np.tile(kx, ff_y).flatten()) / k0 - Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) / k0 - - field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) - - T_layer = T1 - big_I = np.eye((len(T1)), dtype=type_complex) - - # From the first layer - for idx_layer, (E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d)\ - in enumerate(layer_info_list[::-1]): - - c = np.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer - - ff = len(c) // 4 - - c1_plus = c[0*ff:1*ff] - c2_plus = c[1*ff:2*ff] - c1_minus = c[2*ff:3*ff] - c2_minus = c[3*ff:4*ff] - - q1 = q[:len(q)//2] - q2 = q[len(q)//2:] - big_Q1 = np.diag(q1) - big_Q2 = np.diag(q2) - - for k in range(res_z): - z = k / res_z * d + field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val - Sx = W_11 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + W_12 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Sy = W_21 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + W_22 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Ux = V_11 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_12 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Uy = V_21 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_22 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Sz = -1j * E_conv_i @ (Kx @ Uy - Ky @ Ux) - Uz = -1j * (Kx @ Sy - Ky @ Sx) - - for j in range(res_y): - y = j * period[1] / res_y - - for i in range(res_x): - x = i * period[0] / res_x - - exp_K = np.exp(-1j * kx.reshape((1, -1)) * x) * np.exp(-1j * ky.reshape((-1, 1)) * y) - exp_K = exp_K.flatten() - - Ex = Sx.T @ exp_K - Ey = Sy.T @ exp_K - Ez = Sz.T @ exp_K - Hx = -1j * Ux.T @ exp_K - Hy = -1j * Uy.T @ exp_K - Hz = -1j * Uz.T @ exp_K - - field_cell[res_z * idx_layer + k, j, i] = [Ex[0], Ey[0], Ez[0], Hx[0], Hy[0], Hz[0]] T_layer = big_A_i @ big_X @ T_layer return field_cell diff --git a/meent/on_numpy/emsolver/rcwa.py b/meent/on_numpy/emsolver/rcwa.py index 7e3f86a..418812e 100644 --- a/meent/on_numpy/emsolver/rcwa.py +++ b/meent/on_numpy/emsolver/rcwa.py @@ -3,9 +3,7 @@ from ._base import _BaseRCWA from .convolution_matrix import to_conv_mat_raster_continuous, to_conv_mat_raster_discrete, to_conv_mat_vector -from .field_distribution import field_dist_1d_vectorized_ji, field_dist_1d_conical_vectorized_ji, field_dist_2d_vectorized_ji, field_plot, field_dist_1d_vanilla, \ - field_dist_1d, field_dist_1d_conical_vanilla, field_dist_1d_conical, \ - field_dist_2d, field_dist_2d_vanilla +from .field_distribution import field_plot, field_dist_1d, field_dist_2d class RCWANumpy(_BaseRCWA): @@ -56,11 +54,8 @@ def __init__(self, # grating type setting if self.grating_type is None: - if self.ucell.shape[1] == 1: - if (self.pol in (0, 1)) and (self.phi % (2*np.pi) == 0): - self._grating_type_assigned = 0 - else: - self._grating_type_assigned = 1 + if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2*np.pi) == 0): + self._grating_type_assigned = 0 else: self._grating_type_assigned = 2 else: @@ -100,12 +95,12 @@ def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): if self._grating_type_assigned == 0: de_ri, de_ti, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) - elif self._grating_type_assigned == 1: - de_ri, de_ti, layer_info_list, T1 = self.solve_1d_conical(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) - elif self._grating_type_assigned == 2: - de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + # elif self._grating_type_assigned == 1: + # de_ri, de_ti, layer_info_list, T1 = self.solve_1d_conical(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + # elif self._grating_type_assigned == 2: + # de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) else: - raise ValueError + de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) return de_ri, de_ti, layer_info_list, T1 @@ -121,17 +116,32 @@ def solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): def conv_solve(self, **kwargs): # [setattr(self, k, v) for k, v in kwargs.items()] # no need in npmeent - if self._modeling_type_assigned == 0 and self.fourier_type in (0, 1): - epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( - self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, enhanced_dfs=self.fourier_type) - elif self._modeling_type_assigned == 0 and self.fourier_type == 2: - epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_continuous( - self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex) - elif self._modeling_type_assigned == 1: + if self._modeling_type_assigned == 0: # Raster + + if self.fourier_type == 0: + enhance = False + epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( + self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, + enhanced_dfs=enhance) + + elif (self.fourier_type == 1) or (self.fourier_type is None): + enhance = True + epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( + self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, + enhanced_dfs=enhance) + + elif self.fourier_type == 2: + epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_continuous( + self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex) + else: + raise ValueError("Check 'modeling_type' and 'fourier_type' in 'conv_solve'.") + + elif self._modeling_type_assigned == 1: # Vector epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_vector( self.ucell_info_list, self.fto[0], self.fto[1], type_complex=self.type_complex) + else: - raise ValueError("Check 'modeling_type' and 'fourier_type'.") + raise ValueError("Check 'modeling_type' and 'fourier_type' in 'conv_solve'.") de_ri, de_ti, layer_info_list, T1 = self._solve(self.wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) @@ -146,49 +156,66 @@ def calculate_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): if self._grating_type_assigned == 0: res_y = 1 - if field_algo == 0: - field_cell = field_dist_1d_vanilla(self.wavelength, kx, - self.T1, self.layer_info_list, self.period, self.pol, - res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) - elif field_algo == 1: - field_cell = field_dist_1d_vectorized_ji(self.wavelength, kx, self.T1, self.layer_info_list, - self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, - type_complex=self.type_complex) - elif field_algo == 2: - field_cell = field_dist_1d(self.wavelength, kx, self.T1, - self.layer_info_list, self.period, self.pol, - res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) - else: - raise ValueError + field_cell = field_dist_1d(self.wavelength, self.n_top, self.theta, kx, self.T1, + self.layer_info_list, self.period, self.pol, + res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif self._grating_type_assigned == 1: res_y = 1 - if field_algo == 0: - field_cell = field_dist_1d_conical_vanilla(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) - elif field_algo == 1: - field_cell = field_dist_1d_conical_vectorized_ji(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) - elif field_algo == 2: - field_cell = field_dist_1d_conical(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) - else: - raise ValueError - elif self._grating_type_assigned == 2: - if field_algo == 0: - field_cell = field_dist_2d_vanilla(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) - elif field_algo == 1: - field_cell = field_dist_2d_vectorized_ji(self.wavelength, kx, ky, self.T1, self.layer_info_list, - self.period, res_x=res_x, res_y=res_y, res_z=res_z, - type_complex=self.type_complex) - elif field_algo == 2: - field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, - self.period, res_x=res_x, res_y=res_y, res_z=res_z, - type_complex=self.type_complex) - else: - raise ValueError + field_cell = field_dist_2d(self.wavelength, self.n_top, self.theta, self.phi, kx, ky, self.T1, self.layer_info_list, self.period, + res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) else: - raise ValueError + field_cell = field_dist_2d(self.wavelength, self.n_top, self.theta, self.phi, kx, ky, self.T1, self.layer_info_list, self.period, + res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) + # + # if self._grating_type_assigned == 0: + # res_y = 1 + # if field_algo == 0: + # field_cell = field_dist_1d_vanilla(self.wavelength, kx, + # self.T1, self.layer_info_list, self.period, self.pol, + # res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) + # elif field_algo == 1: + # field_cell = field_dist_1d_vectorized_ji(self.wavelength, kx, self.T1, self.layer_info_list, + # self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, + # type_complex=self.type_complex) + # elif field_algo == 2: + # field_cell = field_dist_1d(self.wavelength, kx, self.T1, + # self.layer_info_list, self.period, self.pol, + # res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) + # else: + # raise ValueError + # # elif self._grating_type_assigned == 1: + # # res_y = 1 + # # if field_algo == 0: + # # field_cell = field_dist_1d_conical_vanilla(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, + # # res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) + # # elif field_algo == 1: + # # field_cell = field_dist_1d_conical_vectorized_ji(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, + # # res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) + # # elif field_algo == 2: + # # field_cell = field_dist_1d_conical(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, + # # res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) + # # else: + # # raise ValueError + # + # # elif self._grating_type_assigned == 2: + # + # else: + # if field_algo == 0: + # field_cell = field_dist_2d_vanilla(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, + # res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) + # elif field_algo == 1: + # field_cell = field_dist_2d_vectorized_ji(self.wavelength, kx, ky, self.T1, self.layer_info_list, + # self.period, res_x=res_x, res_y=res_y, res_z=res_z, + # type_complex=self.type_complex) + # elif field_algo == 2: + # field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, + # self.period, res_x=res_x, res_y=res_y, res_z=res_z, + # type_complex=self.type_complex) + # else: + # raise ValueError + # else: + # raise ValueError + return field_cell def conv_solve_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): diff --git a/meent/on_numpy/emsolver/transfer_method.py b/meent/on_numpy/emsolver/transfer_method.py index 277bcf3..1692b82 100644 --- a/meent/on_numpy/emsolver/transfer_method.py +++ b/meent/on_numpy/emsolver/transfer_method.py @@ -87,7 +87,7 @@ def transfer_1d_3(k0, W, V, q, d, F, G, T, type_complex=np.complex128): return X, F, G, T, A_i, B -def transfer_1d_4(pol, F, G, T, kz_top, kz_bot, theta, n_I, n_II, type_complex=np.complex128): +def transfer_1d_4(pol, k0, F, G, T, kz_top, kz_bot, theta, n_I, n_II, type_complex=np.complex128): ff_xy = len(kz_top) @@ -97,7 +97,7 @@ def transfer_1d_4(pol, F, G, T, kz_top, kz_bot, theta, n_I, n_II, type_complex=n delta_i0[ff_xy // 2] = 1 if pol == 0: # TE - + # TODO: check sign of H inc_term = 1j * n_I * np.cos(theta) * delta_i0 T1 = np.linalg.inv(G + 1j * Kz_top @ F) @ (1j * Kz_top @ delta_i0 + inc_term) @@ -160,11 +160,13 @@ def transfer_1d_conical_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=n Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) A = Kx ** 2 - epy_conv + # A = Kx ** 2 - np.linalg.inv(epz_conv_i) B = Kx @ epz_conv_i @ Kx - I # TODO: Rearrange W and V Omega2_RL = Ky ** 2 + A Omega2_LR = Ky ** 2 + B @ epx_conv + # Omega2_LR = Ky ** 2 + B @ np.linalg.inv(epz_conv_i) eigenvalues_1, W_1 = np.linalg.eig(Omega2_RL) eigenvalues_2, W_2 = np.linalg.eig(Omega2_LR) @@ -467,9 +469,9 @@ def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, n_II, final_B = np.block( [ [-np.sin(psi) * delta_i0], - [-np.cos(psi) * np.cos(theta) * delta_i0], + [np.cos(psi) * np.cos(theta) * delta_i0], [-1j * np.sin(psi) * n_I * np.cos(theta) * delta_i0], - [1j * n_I * np.cos(psi) * delta_i0] + [-1j * n_I * np.cos(psi) * delta_i0] ] ) From 82aabcc978b344eb7ecb2553934a4f12c42c4d97 Mon Sep 17 00:00:00 2001 From: yonghakim Date: Wed, 31 Jul 2024 17:25:52 +0900 Subject: [PATCH 07/15] updating. finished 2D. --- benchmarks/interface/Reticolo.py | 2 +- benchmarks/interface/reti/test2d_1.m | 86 +++++++++++ benchmarks/interface/reti/test2d_2.m | 83 +++++++++++ benchmarks/interface/reti/test2d_3.m | 80 ++++++++++ benchmarks/interface/reti/test2d_4.m | 123 +++++++++++++++ benchmarks/interface/reti/test2d_5.m | 141 ++++++++++++++++++ benchmarks/interface/reti_meent_1Dc.py | 60 +++++--- benchmarks/interface/reticolo_res3.m | 13 +- meent/on_numpy/emsolver/_base.py | 2 +- meent/on_numpy/emsolver/convolution_matrix.py | 14 ++ meent/on_numpy/emsolver/field_distribution.py | 37 +++-- meent/on_numpy/emsolver/rcwa.py | 2 +- 12 files changed, 594 insertions(+), 49 deletions(-) create mode 100644 benchmarks/interface/reti/test2d_1.m create mode 100644 benchmarks/interface/reti/test2d_2.m create mode 100644 benchmarks/interface/reti/test2d_3.m create mode 100644 benchmarks/interface/reti/test2d_4.m create mode 100644 benchmarks/interface/reti/test2d_5.m diff --git a/benchmarks/interface/Reticolo.py b/benchmarks/interface/Reticolo.py index e8b0550..d928b5e 100644 --- a/benchmarks/interface/Reticolo.py +++ b/benchmarks/interface/Reticolo.py @@ -1,7 +1,7 @@ import os import numpy as np -import meent +# import meent from meent.on_numpy.modeler.modeling import find_nk_index diff --git a/benchmarks/interface/reti/test2d_1.m b/benchmarks/interface/reti/test2d_1.m new file mode 100644 index 0000000..0c8068b --- /dev/null +++ b/benchmarks/interface/reti/test2d_1.m @@ -0,0 +1,86 @@ +function [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = test2d_1(); + + warning('off', 'Octave:possible-matlab-short-circuit-operator'); + warning('off', 'Invalid UTF-8 byte sequences have been replaced.'); + warning('off', 'findstr is obsolete; use strfind instead'); + + factor = 1; + pol = -1; + n_top = 1; + n_bot = 1; + theta = 20; + phi = 33; + nn = [11,11]; + period = [770/factor, 770/factor]; + wavelength = 777/factor; + thickness = 100/factor; + + b = [-period(1)/4, -period(2)/4, period(1)/2, period(2)*5/10, 3, 1]; + c = [-period(1)/10*4, period(2)/10*4, period(1)*2/10, period(2)*2/10, 4, 1]; + d = [-period(1)/10*2, period(2)/10*4, period(1)*2/10, period(2)*2/10, 6, 1]; + + b = [-period(1)/4+period(1)/2, -period(2)/4+period(2)/2, period(1)/2, period(2)*5/10, 3, 1]; + c = [-period(1)/10*4+period(1)/2, period(2)/10*4+period(2)/2, period(1)*2/10, period(2)*2/10, 4, 1]; + d = [-period(1)/10*2+period(1)/2, period(2)/10*4+period(2)/2, period(1)*2/10, period(2)*2/10, 6, 1]; + + tt = {1, b, c, d}; + + retio; + textures = cell(1,3); + textures{1} = n_top; + textures{2} = tt; + textures{3} = n_bot; + + parm = res0; + parm.res1.champ = 1; % calculate precisely +% parm.res1.trace = 1; +% parm.res3.trace = 1; % trace automatique % automatic trace + + k_parallel = n_top*sind(theta); % n_air, or whatever the refractive index of the medium where light is coming in. + + parm = res0; + + parm.not_io = 1; % no write data on hard disk + parm.res1.champ = 1; % the electromagnetic field is calculated accurately +% parm.res3.npts=[0,1,0]; + parm.res3.npts=[11,11,11]; + + profile = {[0, thickness, 0], [1, 2, 3]}; + aa = res1(wavelength,period,textures,nn,k_parallel, phi, parm); + res = res2(aa, profile); + + x = linspace(-period(1)/2, period(1)/2, 50); + y = linspace(period(2)/2, -period(2)/2, 50); + x = linspace(0, period(1), 50); + y = linspace(period(2), 0, 50); + +% x = [0:1:49] * period(1) / 50 - period(1)/2; +% x = [1:1:50] * period(1) / 50 - period(1)/2; +% y = [0:1:49] .* period(2) / 50 - period(2)/2 +% y = [1:1:50] .* period(2) / 50 - period(2)/2 +% y = [50:-1:1] .* period(2) / 50 - period(2)/2 +% y = [49:-1:0] .* period(2) / 50 - period(2)/2 + + + if pol == 1 + einc = [0, 1]; + elseif pol == -1 + einc = [1, 0]; + else + disp('only TE or TM is allowed.'); + end + [e,z,o]=res3(x,y,aa,profile,einc, parm); + + if pol == 1 % TE + top_refl_info = res.TEinc_top_reflected; + top_tran_info = res.TEinc_top_transmitted; + bottom_refl_info = res.TEinc_bottom_reflected; + bottom_tran_info = res.TEinc_bottom_transmitted; + else % TM + top_refl_info = res.TMinc_top_reflected; + top_tran_info = res.TMinc_top_transmitted; + bottom_refl_info = res.TMinc_bottom_reflected; + bottom_tran_info = res.TMinc_bottom_transmitted; + end + disp(1) +end diff --git a/benchmarks/interface/reti/test2d_2.m b/benchmarks/interface/reti/test2d_2.m new file mode 100644 index 0000000..c80777c --- /dev/null +++ b/benchmarks/interface/reti/test2d_2.m @@ -0,0 +1,83 @@ +function [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = test2d_2(); + + warning('off', 'Octave:possible-matlab-short-circuit-operator'); + warning('off', 'Invalid UTF-8 byte sequences have been replaced.'); + warning('off', 'findstr is obsolete; use strfind instead'); + + factor = 1; + pol = -1; + n_top = 1; + n_bot = 1; + theta = 20; + phi = 33; + nn = [11,11]; + period = [770/factor, 770/factor]; + wavelength = 777/factor; + thickness = 100/factor; + + b = [-period(1)/4, -period(2)/4, period(1)/2, period(2)*5/10, 3, 1]; + b = [period(1)/4, period(2)/4, period(1)/2, period(2)*5/10, 3, 1]; + + tt = {1, b}; + + retio; + textures = cell(1,3); + textures{1} = n_top; + textures{2} = tt; + textures{3} = n_bot; + + parm = res0; + parm.res1.champ = 1; % calculate precisely +% parm.res1.trace = 1; +% parm.res3.trace = 1; % trace automatique % automatic trace + + k_parallel = n_top*sind(theta); % n_air, or whatever the refractive index of the medium where light is coming in. + + parm = res0; + + parm.not_io = 1; % no write data on hard disk + parm.res1.champ = 1; % the electromagnetic field is calculated accurately +% parm.res3.npts=[0,1,0]; + parm.res3.npts=[11,11,11]; + + profile = {[0, thickness, 0], [1, 2, 3]}; + aa = res1(wavelength,period,textures,nn,k_parallel, phi, parm); + res = res2(aa, profile); + + x = linspace(-period(1)/2, period(1)/2, 50); + y = linspace(-period(2)/2, period(2)/2, 50); + y = linspace(period(2)/2, -period(2)/2, 50); + x = linspace(0, period(1), 50); + y = linspace(period(2), 0, 50); + +% x = [0:1:49] * period(1) / 50 - period(1)/2; +% x = [1:1:50] * period(1) / 50 - period(1)/2; +% y = [0:1:49] .* period(2) / 50 - period(2)/2 +% y = [1:1:50] .* period(2) / 50 - period(2)/2 +% y = [50:-1:1] .* period(2) / 50 - period(2)/2 +% y = [49:-1:0] .* period(2) / 50 - period(2)/2 + + parm.res3.trace=1; %trace automatique % automatic trace + + if pol == 1 + einc = [0, 1]; + elseif pol == -1 + einc = [1, 0]; + else + disp('only TE or TM is allowed.'); + end + [e,z,o]=res3(x,y,aa,profile,einc, parm); + + if pol == 1 % TE + top_refl_info = res.TEinc_top_reflected; + top_tran_info = res.TEinc_top_transmitted; + bottom_refl_info = res.TEinc_bottom_reflected; + bottom_tran_info = res.TEinc_bottom_transmitted; + else % TM + top_refl_info = res.TMinc_top_reflected; + top_tran_info = res.TMinc_top_transmitted; + bottom_refl_info = res.TMinc_bottom_reflected; + bottom_tran_info = res.TMinc_bottom_transmitted; + end + disp(1) +end diff --git a/benchmarks/interface/reti/test2d_3.m b/benchmarks/interface/reti/test2d_3.m new file mode 100644 index 0000000..201a1cc --- /dev/null +++ b/benchmarks/interface/reti/test2d_3.m @@ -0,0 +1,80 @@ +function [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = test2d_3(); + + warning('off', 'Octave:possible-matlab-short-circuit-operator'); + warning('off', 'Invalid UTF-8 byte sequences have been replaced.'); + warning('off', 'findstr is obsolete; use strfind instead'); + + factor = 1; + pol = -1; + n_top = 1; + n_bot = 1; + theta = 20; + phi = 33; + nn = [11,11]; + period = [770/factor, 770/factor]; + wavelength = 777/factor; + thickness = 100/factor; + + + a = [period(1)/4, period(2)/2, period(1)/2, period(2), 4, 1]; + tt = {1, a}; + + retio; + textures = cell(1,3); + textures{1} = n_top; + textures{2} = tt; + textures{3} = n_bot; + + parm = res0; + parm.res1.champ = 1; % calculate precisely + parm.res1.trace = 1; + + k_parallel = n_top*sind(theta); % n_air, or whatever the refractive index of the medium where light is coming in. + + parm = res0; + + parm.not_io = 1; % no write data on hard disk + parm.res1.champ = 1; % the electromagnetic field is calculated accurately + parm.res3.npts=[11,11,11]; + + profile = {[0, thickness, 0], [1, 2, 3]}; + aa = res1(wavelength,period,textures,nn,k_parallel, phi, parm); + res = res2(aa, profile); + + x = linspace(-period(1)/2, period(1)/2, 50); + y = linspace(-period(2)/2, period(2)/2, 50); + y = linspace(period(2)/2, -period(2)/2, 50); + x = linspace(0, period(1), 50); + y = linspace(period(2), 0, 50); + +% x = [0:1:49] * period(1) / 50 - period(1)/2; +% x = [1:1:50] * period(1) / 50 - period(1)/2; +% y = [0:1:49] .* period(2) / 50 - period(2)/2 +% y = [1:1:50] .* period(2) / 50 - period(2)/2 +% y = [50:-1:1] .* period(2) / 50 - period(2)/2 +% y = [49:-1:0] .* period(2) / 50 - period(2)/2 + + parm.res3.trace=1; %trace automatique % automatic trace + + if pol == 1 + einc = [0, 1]; + elseif pol == -1 + einc = [1, 0]; + else + disp('only TE or TM is allowed.'); + end + [e,z,o]=res3(x,y,aa,profile,einc, parm); + + if pol == 1 % TE + top_refl_info = res.TEinc_top_reflected; + top_tran_info = res.TEinc_top_transmitted; + bottom_refl_info = res.TEinc_bottom_reflected; + bottom_tran_info = res.TEinc_bottom_transmitted; + else % TM + top_refl_info = res.TMinc_top_reflected; + top_tran_info = res.TMinc_top_transmitted; + bottom_refl_info = res.TMinc_bottom_reflected; + bottom_tran_info = res.TMinc_bottom_transmitted; + end + disp(1) +end diff --git a/benchmarks/interface/reti/test2d_4.m b/benchmarks/interface/reti/test2d_4.m new file mode 100644 index 0000000..f1998c9 --- /dev/null +++ b/benchmarks/interface/reti/test2d_4.m @@ -0,0 +1,123 @@ +function [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = test2d_4(); + + warning('off', 'Octave:possible-matlab-short-circuit-operator'); + warning('off', 'Invalid UTF-8 byte sequences have been replaced.'); + warning('off', 'findstr is obsolete; use strfind instead'); + + factor = 1; + pol = 1; + n_top = 1; + n_bot = 1; + theta = 0; + phi = 0; + nn = [11,11]; + period = [480/factor, 480/factor]; + wavelength = 550/factor; + thickness = 220/factor; + + + a = [0+240, 120+240, 160, 80, 4, 1]; + b = [0+240, -120+240, 160, 80, 4, 1]; + c = [120+240, 0+240, 80, 160, 4, 1]; + d = [-120+240, 0+240, 80, 160, 4, 1]; + + textures = cell(1,3); + textures{1} = n_top; + textures{2} = {1,a, b, c, d}; + textures{3} = n_bot; + + + parm = res0; + parm.res1.champ = 1; % calculate precisely + parm.res1.trace = 1; + + k_parallel = n_top*sind(theta); % n_air, or whatever the refractive index of the medium where light is coming in. + + parm = res0; + + parm.not_io = 1; % no write data on hard disk + parm.res1.champ = 1; % the electromagnetic field is calculated accurately +% parm.res3.npts=[0,1,0]; + parm.res3.npts=[11,11,11]; + + %parm.res1.trace = 1; % show the texture + % + %textures = cell(1, size(_textures, 2)); + %for i = 1:length(_textures) + % textures(i) = _textures(i); + %end + % + %profile = cell(1, size(_profile, 1)); + %profile(1) = _profile(1, :); + %profile(2) = _profile(2, :); + + profile = {[0, thickness, 0], [1, 2, 3]}; + aa = res1(wavelength,period,textures,nn,k_parallel, phi, parm); + res = res2(aa, profile); + + %res3(aa) + %parm.res3.sens=1; + %##parm.res3.gauss_x = 100 + + x = linspace(-period(1)/2, period(1)/2, 50); + y = linspace(-period(2)/2, period(2)/2, 50); + y = linspace(period(2)/2, -period(2)/2, 50); + x = linspace(0, period(1), 50); + y = linspace(period(2), 0, 50); + +% x = [0:1:49] * period(1) / 50 - period(1)/2; +% x = [1:1:50] * period(1) / 50 - period(1)/2; +% y = [0:1:49] .* period(2) / 50 - period(2)/2 +% y = [1:1:50] .* period(2) / 50 - period(2)/2 +% y = [50:-1:1] .* period(2) / 50 - period(2)/2 +% y = [49:-1:0] .* period(2) / 50 - period(2)/2 + + parm.res3.trace=1; %trace automatique % automatic trace + +% parm.res3.npts = res3_npts; + + if pol == 1 + einc = [0, 1]; + elseif pol == -1 + einc = [1, 0]; + else + disp('only TE or TM is allowed.'); + end + [e,z,o]=res3(x,y,aa,profile,einc, parm); + + if pol == 1 % TE + top_refl_info = res.TEinc_top_reflected; + top_tran_info = res.TEinc_top_transmitted; + bottom_refl_info = res.TEinc_bottom_reflected; + bottom_tran_info = res.TEinc_bottom_transmitted; + else % TM + top_refl_info = res.TMinc_top_reflected; + top_tran_info = res.TMinc_top_transmitted; + bottom_refl_info = res.TMinc_bottom_reflected; + bottom_tran_info = res.TMinc_bottom_transmitted; + end + disp(1) +end + +% Divides the given geometry into rectangles to be used in Reticolo +function GeometryOut = FractureGeom(PatternIn,nLow,nHigh,XGrid,YGrid) + + % Acceptable refractive index tolerance in fracturing + + % Extract grid parameters + dX = XGrid(2)-XGrid(1); + dY = YGrid(2)-YGrid(1); + [Nx, Ny] = size(PatternIn) + + Geometry = {nLow}; %Define background index + + % Fracture non binarized pixels + for i = 1:Nx % Defining texture for patterned layer. Probably could have vectorized this. + for j = 1:Ny + if PatternIn(i,j) == 1 + Geometry = [Geometry,{[XGrid(i),YGrid(j),dX,dY,nHigh,1]}]; + end + end + end + GeometryOut = Geometry; +end \ No newline at end of file diff --git a/benchmarks/interface/reti/test2d_5.m b/benchmarks/interface/reti/test2d_5.m new file mode 100644 index 0000000..a4cb0e5 --- /dev/null +++ b/benchmarks/interface/reti/test2d_5.m @@ -0,0 +1,141 @@ +function [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = test2d_5(); + + warning('off', 'Octave:possible-matlab-short-circuit-operator'); + warning('off', 'Invalid UTF-8 byte sequences have been replaced.'); + warning('off', 'findstr is obsolete; use strfind instead'); + + factor = 1; + pol = 1; + n_top = 1; + n_bot = 1; + theta = 0; + phi = 0; + nn = [11,11]; + period = [480/factor, 480/factor]; + wavelength = 550/factor; + thickness = 220/factor; + + PatternIn = [0 0 0 0 0 0; 0 0 1 1 0 0; 0 1 0 0 1 0; 0 1 0 0 1 0; 0 0 1 1 0 0; 0 0 0 0 0 0]; +% PatternIn = [3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; ] +% PatternIn = [3, 3, 3, 3, 3, 1, 1, 1, 1, 1] +% PatternIn = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;] +% PatternIn = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0] + + XGrid = [3.5:1:8.5]/6 * period(1); + YGrid = [3.5:1:8.5]/6 * period(1); + + XGrid = linspace(-period(1)/2 + period(1)/12, period(1)/2 - period(1)/12, 6) + period(1)/2; + YGrid = linspace(-period(2)/2 + period(2)/12, period(2)/2 - period(2)/12, 6) + period(2)/2; + YGrid = -linspace(-period(2)/2 + period(2)/12, period(2)/2 - period(2)/12, 6) - period(2)/2; + +% XGrid = linspace(-period(1)/2 + period(1)/12, period(1)/2 - period(1)/12, 6); +% YGrid = -linspace(-period(2)/2 + period(2)/12, period(2)/2 - period(2)/12, 6); + +% XGrid = [0.5:1:9.5] * period(1) / 10 +% YGrid = [0.5:1:9.5] * period(2) / 10 + + % RCWA + + retio; + textures = cell(1,3); + textures{1} = {n_top}; + textures{2} = FractureGeom(PatternIn,1,4,XGrid,YGrid); + textures{3} = {n_bot}; + profile = {[0, thickness, 0], [1, 2, 3]}; + + parm = res0; + parm.res1.champ = 1; % calculate precisely + parm.res1.trace = 1; + + k_parallel = n_top*sind(theta); % n_air, or whatever the refractive index of the medium where light is coming in. + + parm = res0; + + parm.not_io = 1; % no write data on hard disk + parm.res1.champ = 1; % the electromagnetic field is calculated accurately +% parm.res3.npts=[0,1,0]; + parm.res3.npts=[11,11,11]; + + %parm.res1.trace = 1; % show the texture + % + %textures = cell(1, size(_textures, 2)); + %for i = 1:length(_textures) + % textures(i) = _textures(i); + %end + % + %profile = cell(1, size(_profile, 1)); + %profile(1) = _profile(1, :); + %profile(2) = _profile(2, :); + + profile = {[0, thickness, 0], [1, 2, 3]}; + aa = res1(wavelength,period,textures,nn,k_parallel, phi, parm); + res = res2(aa, profile); + + %res3(aa) + %parm.res3.sens=1; + %##parm.res3.gauss_x = 100 + + x = linspace(-period(1)/2, period(1)/2, 50); + y = linspace(-period(2)/2, period(2)/2, 50); + y = linspace(period(2)/2, -period(2)/2, 50); + + + x = linspace(0, period(1), 50); + y = linspace(period(2), 0, 50); + +% x = [0:1:49] * period(1) / 50 - period(1)/2; +% x = [1:1:50] * period(1) / 50 - period(1)/2; +% y = [0:1:49] .* period(2) / 50 - period(2)/2 +% y = [1:1:50] .* period(2) / 50 - period(2)/2 +% y = [50:-1:1] .* period(2) / 50 - period(2)/2 +% y = [49:-1:0] .* period(2) / 50 - period(2)/2 + + parm.res3.trace=1; %trace automatique % automatic trace + +% parm.res3.npts = res3_npts; + + if pol == 1 + einc = [0, 1]; + elseif pol == -1 + einc = [1, 0]; + else + disp('only TE or TM is allowed.'); + end + [e,z,o]=res3(x,y,aa,profile,einc, parm); + + if pol == 1 % TE + top_refl_info = res.TEinc_top_reflected; + top_tran_info = res.TEinc_top_transmitted; + bottom_refl_info = res.TEinc_bottom_reflected; + bottom_tran_info = res.TEinc_bottom_transmitted; + else % TM + top_refl_info = res.TMinc_top_reflected; + top_tran_info = res.TMinc_top_transmitted; + bottom_refl_info = res.TMinc_bottom_reflected; + bottom_tran_info = res.TMinc_bottom_transmitted; + end + disp(1) +end + +% Divides the given geometry into rectangles to be used in Reticolo +function GeometryOut = FractureGeom(PatternIn,nLow,nHigh,XGrid,YGrid) + + % Acceptable refractive index tolerance in fracturing + + % Extract grid parameters + dX = abs(XGrid(2)-XGrid(1)); + dY = abs(YGrid(2)-YGrid(1)); + [Nx, Ny] = size(PatternIn); + + Geometry = {nLow}; %Define background index + + % Fracture non binarized pixels + for i = 1:Nx % Defining texture for patterned layer. Probably could have vectorized this. + for j = 1:Ny + if PatternIn(i,j) == 1 + Geometry = [Geometry,{[XGrid(i),YGrid(j),dX,dY,nHigh,1]}]; + end + end + end + GeometryOut = Geometry; +end \ No newline at end of file diff --git a/benchmarks/interface/reti_meent_1Dc.py b/benchmarks/interface/reti_meent_1Dc.py index f827b2e..930f8b0 100644 --- a/benchmarks/interface/reti_meent_1Dc.py +++ b/benchmarks/interface/reti_meent_1Dc.py @@ -174,7 +174,7 @@ def _run(self, pol, theta, phi, period, n_top, fto, option['n_bot'] = 2 # n_transmission option['theta'] = 40 * np.pi / 180 option['phi'] = 20 * np.pi / 180 - option['fto'] = [40, 0] + option['fto'] = [40, 1] option['period'] = [770/factor] option['wavelength'] = 777/factor option['thickness'] = [100/factor, 100/factor, 100/factor, 100/factor, 100/factor, 100/factor] # final term is for h_substrate @@ -187,10 +187,11 @@ def _run(self, pol, theta, phi, period, n_top, fto, ]) option['ucell'] = ucell + res_z = 11 - res3_npts = 20 + # res3_npts = 20 reti = Reticolo() - reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, matlab_plot_field=0, res3_npts=res3_npts) + reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, matlab_plot_field=0, res3_npts=res_z) print('reti de_ri', np.array(reti_de_ri).flatten()) print('reti de_ti', np.array(reti_de_ti).flatten()) @@ -198,40 +199,50 @@ def _run(self, pol, theta, phi, period, n_top, fto, backend = 0 nmee = meent.call_mee(backend=backend, perturbation=1E-30, **option) n_de_ri, n_de_ti = nmee.conv_solve() - n_field_cell = nmee.calculate_field(res_z=20, res_x=ucell.shape[-1]) + n_field_cell = nmee.calculate_field(res_z=res_z, res_y=50, res_x=50) - # n_field_cell = np.roll(n_field_cell, -1, 2) print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) - if option['pol'] == 0: # TE title = ['1D Ey', '1D Hx', '1D Hz', ] else: # TM title = ['1D Hy', '1D Ex', '1D Ez', ] title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] - for i in range(len(title)): - a0 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, i]) - b0 = n_field_cell[:, 0, :, i] - - res = [] - res.append(np.linalg.norm(a0.conj() - b0).round(3)) - res.append(np.linalg.norm(abs(a0.conj())**2 - abs(b0)**2).round(3)) - res.append(np.linalg.norm(a0.conj().real - b0.real).round(3)) - res.append(np.linalg.norm(a0.conj().imag - b0.imag).round(3)) - - print(f'{title[i]}, {res}') - aa = np.angle(a0.conj()) - bb = np.angle(b0) + r_field_cell = np.moveaxis(r_field_cell, 2, 1) + r_field_cell = r_field_cell[res_z:-res_z] + r_field_cell = np.flip(r_field_cell, 0) + r_field_cell = r_field_cell.conj() + print(np.linalg.norm(r_field_cell - n_field_cell[:,:,:])) + title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] - print(aa[0][1:] - aa[0][:-1]) - print(bb[0][1:] - bb[0][:-1]) + for i in range(6): + print(i, np.linalg.norm(r_field_cell[:, 0, :, i] - n_field_cell[:, 0, :, i])) - print(aa[0] - bb[0]) - print(1) + # for i in range(len(title)): + # # a0 = np.flipud(r_field_cell[res_z:-res_z, :, i]) + # a0 = r_field_cell[:, :, i] + # b0 = n_field_cell[:, 0, :, i] + # + # res = [] + # res.append(np.linalg.norm(a0.conj() - b0).round(3)) + # res.append(np.linalg.norm(abs(a0.conj())**2 - abs(b0)**2).round(3)) + # res.append(np.linalg.norm(a0.conj().real - b0.real).round(3)) + # res.append(np.linalg.norm(a0.conj().imag - b0.imag).round(3)) + # + # print(f'{title[i]}, {res}') + # + # aa = np.angle(a0.conj()) + # bb = np.angle(b0) + # + # print(aa[0][1:] - aa[0][:-1]) + # print(bb[0][1:] - bb[0][:-1]) + # + # print(aa[0] - bb[0]) + # print(1) # # print('Ey, val diff', np.linalg.norm(a0.conj() - b0)) @@ -258,7 +269,8 @@ def _run(self, pol, theta, phi, period, n_top, fto, fig, axes = plt.subplots(6, 6, figsize=(10, 5)) for ix in range(len(title)): - r_data = np.flipud(r_field_cell[res3_npts:-res3_npts, :, ix]).conj() + # r_data = np.flipud(r_field_cell[res3_npts:-res3_npts, :, ix]).conj() + r_data = r_field_cell[:, 0, :, ix] im = axes[ix, 0].imshow(abs(r_data)**2, cmap='jet', aspect='auto') fig.colorbar(im, ax=axes[ix, 0], shrink=1) diff --git a/benchmarks/interface/reticolo_res3.m b/benchmarks/interface/reticolo_res3.m index c2772e0..bb3389e 100644 --- a/benchmarks/interface/reticolo_res3.m +++ b/benchmarks/interface/reticolo_res3.m @@ -41,8 +41,8 @@ res = res2(aa, profile); end -%res3(aa) -x = textures(2){1}{1}; +x = linspace(-period(1)/2, period(1)/2, 50); + %parm.res3.sens=1; %##parm.res3.gauss_x = 100 if matlab_plot_field == 1 @@ -54,9 +54,16 @@ if res3_npts ~= 0 parm.res3.npts = res3_npts; end + if grating_type == 0 [e,z,o]=res3(x,aa,profile,1,parm); else + if grating_type == 1 + y = period(1)/2; + else + y = linspace(period(1)/2, -period(1)/2, 50); + end + if pol == 1 einc = [0, 1]; elseif pol == -1 @@ -64,7 +71,7 @@ else disp('only TE or TM is allowed.'); end - [e,z,o]=res3(x,aa,profile,einc, parm); + [e,z,o]=res3(x, y, aa,profile,einc, parm); end if grating_type == 0 diff --git a/meent/on_numpy/emsolver/_base.py b/meent/on_numpy/emsolver/_base.py index 5a53da8..7c31d90 100644 --- a/meent/on_numpy/emsolver/_base.py +++ b/meent/on_numpy/emsolver/_base.py @@ -101,7 +101,7 @@ def pol(self, pol): self._pol = pol psi = np.pi / 2 * (1 - self.pol) - # TODO: directioin of ky_vector + # TODO: direction of ky_vector self._psi = np.array(psi, dtype=self.type_float) @property diff --git a/meent/on_numpy/emsolver/convolution_matrix.py b/meent/on_numpy/emsolver/convolution_matrix.py index 8289e50..a5c478e 100644 --- a/meent/on_numpy/emsolver/convolution_matrix.py +++ b/meent/on_numpy/emsolver/convolution_matrix.py @@ -4,6 +4,8 @@ def cell_compression(cell, type_complex=np.complex128): + cell = np.flipud(cell) # TODO + if type_complex == np.complex128: type_float = np.float64 else: @@ -26,11 +28,23 @@ def cell_compression(cell, type_complex=np.complex128): cell_x = np.array(cell_x).T cell_x_next = np.roll(cell_x, -1, axis=0) + # for row in range(cell_x.shape[0]): + # if not (cell_x[row, :] == cell_x_next[row, :]).all() or (row == cell_x.shape[0] - 1): + # y.append(step_y * (row + 1)) + # cell_xy.append(cell_x[row, :]) + for row in range(cell_x.shape[0]): if not (cell_x[row, :] == cell_x_next[row, :]).all() or (row == cell_x.shape[0] - 1): y.append(step_y * (row + 1)) cell_xy.append(cell_x[row, :]) + # y_length = cell_x.shape[0] + # for row in range(y_length): + # if not (cell_x[row, :] == cell_x_next[row, :]).all() or (row == cell_x.shape[0] - 1): + # y.append(step_y * (row + 1)) + # y.append(step_y * (y_length-row + 1)) + # cell_xy.append(cell_x[row, :]) + x = np.array(x).reshape((-1, 1)) y = np.array(y).reshape((-1, 1)) cell_comp = np.array(cell_xy) diff --git a/meent/on_numpy/emsolver/field_distribution.py b/meent/on_numpy/emsolver/field_distribution.py index 6fe6934..bc00b7f 100644 --- a/meent/on_numpy/emsolver/field_distribution.py +++ b/meent/on_numpy/emsolver/field_distribution.py @@ -147,21 +147,12 @@ def field_dist_2d(wavelength, n_I, theta, phi, kx, ky, T1, layer_info_list, peri Kx = np.diag(np.tile(kx, ff_y).flatten()) Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) - # if ff_x > 1: - # fourier_centering_x = np.exp(-1j * k0 * n_I * np.sin(theta) * np.cos(phi) * -period[0] / 2) - # else: - # fourier_centering_x = np.exp(-1j * k0 * n_I * np.sin(theta) * np.cos(phi) * -period[0]) + # fourier_centering_x = np.exp(-1j * k0 * n_I * np.sin(theta) * np.cos(phi) * -period[0] / 2) + # fourier_centering_y = np.exp(-1j * k0 * n_I * np.sin(theta) * np.sin(phi) * -period[1] / 2) # - # if ff_y > 1: - # fourier_centering_y = np.exp(-1j * k0 * n_I * np.sin(theta) * np.sin(phi) * -period[1] / 2) - # else: - # fourier_centering_y = np.exp(-1j * k0 * n_I * np.sin(theta) * np.sin(phi) * -period[1]) - - fourier_centering_x = np.exp(-1j * k0 * n_I * np.sin(theta) * np.cos(phi) * -period[0] / 2) - fourier_centering_y = np.exp(-1j * k0 * n_I * np.sin(theta) * np.sin(phi) * -period[1] / 2) - - fourier_centering = fourier_centering_x * fourier_centering_y + # fourier_centering = fourier_centering_x * fourier_centering_y # fourier_centering = 1 + field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) T_layer = T1 @@ -226,6 +217,7 @@ def field_dist_2d(wavelength, n_I, theta, phi, kx, ky, T1, layer_info_list, peri # y_1d = y_1d * period[1] / res_y # y_1d = np.linspace(0, period[1], res_y).reshape((-1, 1, 1)) y_1d = np.linspace(period[1], 0, res_y).reshape((-1, 1, 1)) # TODO + # y_1d = np.linspace(0, period[1], res_y)[::-1].reshape((-1, 1, 1)) x_2d = np.tile(x_1d, (res_y, 1, 1)) x_2d = x_2d * kx * k0 @@ -238,12 +230,19 @@ def field_dist_2d(wavelength, n_I, theta, phi, kx, ky, T1, layer_info_list, peri inv_fourier = np.exp(-1j * x_2d) * np.exp(-1j * y_2d) inv_fourier = inv_fourier.reshape((res_y, res_x, -1)) - Ex = inv_fourier[:, :, None, :] @ Sx[:, None, None, :, :] * fourier_centering - Ey = inv_fourier[:, :, None, :] @ Sy[:, None, None, :, :] * fourier_centering - Ez = inv_fourier[:, :, None, :] @ Sz[:, None, None, :, :] * fourier_centering - Hx = 1j * inv_fourier[:, :, None, :] @ Ux[:, None, None, :, :] * fourier_centering - Hy = 1j * inv_fourier[:, :, None, :] @ Uy[:, None, None, :, :] * fourier_centering - Hz = 1j * inv_fourier[:, :, None, :] @ Uz[:, None, None, :, :] * fourier_centering + # Ex = inv_fourier[:, :, None, :] @ Sx[:, None, None, :, :] * fourier_centering + # Ey = inv_fourier[:, :, None, :] @ Sy[:, None, None, :, :] * fourier_centering + # Ez = inv_fourier[:, :, None, :] @ Sz[:, None, None, :, :] * fourier_centering + # Hx = 1j * inv_fourier[:, :, None, :] @ Ux[:, None, None, :, :] * fourier_centering + # Hy = 1j * inv_fourier[:, :, None, :] @ Uy[:, None, None, :, :] * fourier_centering + # Hz = 1j * inv_fourier[:, :, None, :] @ Uz[:, None, None, :, :] * fourier_centering + + Ex = inv_fourier[:, :, None, :] @ Sx[:, None, None, :, :] + Ey = inv_fourier[:, :, None, :] @ Sy[:, None, None, :, :] + Ez = inv_fourier[:, :, None, :] @ Sz[:, None, None, :, :] + Hx = 1j * inv_fourier[:, :, None, :] @ Ux[:, None, None, :, :] + Hy = 1j * inv_fourier[:, :, None, :] @ Uy[:, None, None, :, :] + Hz = 1j * inv_fourier[:, :, None, :] @ Uz[:, None, None, :, :] val = np.concatenate( (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), -1) diff --git a/meent/on_numpy/emsolver/rcwa.py b/meent/on_numpy/emsolver/rcwa.py index 418812e..711ea2a 100644 --- a/meent/on_numpy/emsolver/rcwa.py +++ b/meent/on_numpy/emsolver/rcwa.py @@ -151,7 +151,7 @@ def conv_solve(self, **kwargs): return de_ri, de_ti def calculate_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): - + # TODO: change res_ to accept array of points. kx, ky = self.get_kx_ky_vector(wavelength=self.wavelength) if self._grating_type_assigned == 0: From 67c1305f31e63f4e5bbc831f5828a080ad1036d9 Mon Sep 17 00:00:00 2001 From: yonghakim Date: Mon, 5 Aug 2024 21:02:40 +0900 Subject: [PATCH 08/15] updating. finished examples test codes. --- QA/fourier_expansion.py | 2 +- benchmarks/benchmark_against_reticolo.py | 2 +- benchmarks/interface/Reticolo.py | 25 +- benchmarks/interface/reti_2d.m | 613 +++++++++++ benchmarks/interface/reti_meent_1Dc.py | 304 ------ benchmarks/interface/reti_meent_1Dc_old.py | 267 ----- benchmarks/interface/reticolo_res3.m | 6 +- .../interface/{ => trashcan}/reti_meent_1D.py | 0 .../interface/{reti => trashcan}/test2d_1.m | 0 .../interface/{reti => trashcan}/test2d_2.m | 0 .../interface/{reti => trashcan}/test2d_3.m | 0 .../interface/{reti => trashcan}/test2d_4.m | 4 +- .../interface/{reti => trashcan}/test2d_5.m | 0 benchmarks/reti_meent_1D.py | 196 ++++ benchmarks/reti_meent_1Dc.py | 185 ++++ benchmarks/reti_meent_2D.py | 984 ++++++++++++++++++ examples/vector_1d.py | 2 +- examples/vector_1d_verification.py | 2 +- examples/vector_2d.py | 2 +- examples/vector_2d_verification.py | 2 +- meent/on_numpy/emsolver/_base.py | 8 +- meent/on_numpy/emsolver/convolution_matrix.py | 17 +- meent/on_numpy/emsolver/field_distribution.py | 137 +-- meent/on_numpy/emsolver/rcwa.py | 120 +-- meent/on_numpy/emsolver/transfer_method.py | 9 +- meent/on_numpy/modeler/modeling.py | 18 +- 26 files changed, 2075 insertions(+), 830 deletions(-) create mode 100644 benchmarks/interface/reti_2d.m delete mode 100644 benchmarks/interface/reti_meent_1Dc.py delete mode 100644 benchmarks/interface/reti_meent_1Dc_old.py rename benchmarks/interface/{ => trashcan}/reti_meent_1D.py (100%) rename benchmarks/interface/{reti => trashcan}/test2d_1.m (100%) rename benchmarks/interface/{reti => trashcan}/test2d_2.m (100%) rename benchmarks/interface/{reti => trashcan}/test2d_3.m (100%) rename benchmarks/interface/{reti => trashcan}/test2d_4.m (98%) rename benchmarks/interface/{reti => trashcan}/test2d_5.m (100%) create mode 100644 benchmarks/reti_meent_1D.py create mode 100644 benchmarks/reti_meent_1Dc.py create mode 100644 benchmarks/reti_meent_2D.py diff --git a/QA/fourier_expansion.py b/QA/fourier_expansion.py index fc52bb8..93ac531 100644 --- a/QA/fourier_expansion.py +++ b/QA/fourier_expansion.py @@ -152,4 +152,4 @@ def dfs2d(cell, cx, cy, type_complex=np.complex128): aa = cfs2d(ucell, x, x, 1, 1, 1, 1) aaa = fft_piecewise_constant(ucell, x, x, 1, 1) - 1 + diff --git a/benchmarks/benchmark_against_reticolo.py b/benchmarks/benchmark_against_reticolo.py index e718820..f4a5466 100644 --- a/benchmarks/benchmark_against_reticolo.py +++ b/benchmarks/benchmark_against_reticolo.py @@ -14,7 +14,7 @@ def consistency(backend): option['theta'] = 0 * np.pi / 180 option['phi'] = 0 * np.pi / 180 option['psi'] = 0 if option['pol'] else 90 * np.pi / 180 - option['fourier_order'] = 40 + option['fto'] = 40 option['period'] = [1000] option['wavelength'] = 650 option['thickness'] = [500, 200, 100, 60, 432, 500] # final term is for h_substrate diff --git a/benchmarks/interface/Reticolo.py b/benchmarks/interface/Reticolo.py index d928b5e..c965d1d 100644 --- a/benchmarks/interface/Reticolo.py +++ b/benchmarks/interface/Reticolo.py @@ -35,6 +35,26 @@ def __init__(self, engine_type='octave', *args, **kwargs): def run_res2(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, wavelength, n_I, n_II, *args, **kwargs): + """ + Deprecated. Use run_res3. + Args: + grating_type: + period: + fto: + ucell: + thickness: + theta: + phi: + pol: + wavelength: + n_I: + n_II: + *args: + **kwargs: + + Returns: + + """ theta *= (180 / np.pi) phi *= (180 / np.pi) @@ -44,8 +64,9 @@ def run_res2(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, fto = fto Nx = ucell.shape[2] period_x = period + # grid_x = np.linspace(0, period, Nx + 1)[1:] + # grid_x -= period_x / 2 grid_x = np.linspace(0, period, Nx + 1)[1:] - grid_x -= period_x / 2 # grid = np.linspace(0, period, Nx) @@ -104,6 +125,8 @@ def run_res3(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, period_x = period grid_x = np.linspace(0, period, Nx + 1)[1:] grid_x -= period_x / 2 + grid_x = np.linspace(0, period, Nx + 1)[1:] + grid_x = np.arange(1, Nx+1) * (period/Nx) # grid = np.linspace(0, period, Nx) diff --git a/benchmarks/interface/reti_2d.m b/benchmarks/interface/reti_2d.m new file mode 100644 index 0000000..5b53e8b --- /dev/null +++ b/benchmarks/interface/reti_2d.m @@ -0,0 +1,613 @@ + +function [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = reti_2d(ex_case); + warning('off', 'Octave:possible-matlab-short-circuit-operator'); + warning('off', 'Invalid UTF-8 byte sequences have been replaced.'); + warning('off', 'findstr is obsolete; use strfind instead'); + + if ex_case == 1 + [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = reti_2d_1(); + elseif ex_case == 2 + [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = reti_2d_2(); + elseif ex_case == 3 + [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = reti_2d_3(); + elseif ex_case == 4 + [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = reti_2d_4(); + elseif ex_case == 5 + [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = reti_2d_5(); + elseif ex_case == 6 + [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = reti_2d_6(); + end + +end + +function [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = reti_2d_1(); + + warning('off', 'Octave:possible-matlab-short-circuit-operator'); + warning('off', 'Invalid UTF-8 byte sequences have been replaced.'); + warning('off', 'findstr is obsolete; use strfind instead'); + + factor = 1; + pol = -1; + n_top = 1; + n_bot = 1; + theta = 20; + phi = 33; + nn = [11,11]; + period = [770/factor, 770/factor]; + wavelength = 777/factor; + thickness = 100/factor; + + b = [-period(1)/4, -period(2)/4, period(1)/2, period(2)*5/10, 3, 1]; + c = [-period(1)/10*4, period(2)/10*4, period(1)*2/10, period(2)*2/10, 4, 1]; + d = [-period(1)/10*2, period(2)/10*4, period(1)*2/10, period(2)*2/10, 6, 1]; + + b = [-period(1)/4+period(1)/2, -period(2)/4+period(2)/2, period(1)/2, period(2)*5/10, 3, 1]; + c = [-period(1)/10*4+period(1)/2, period(2)/10*4+period(2)/2, period(1)*2/10, period(2)*2/10, 4, 1]; + d = [-period(1)/10*2+period(1)/2, period(2)/10*4+period(2)/2, period(1)*2/10, period(2)*2/10, 6, 1]; + + tt = {1, b, c, d}; + + retio; + textures = cell(1,3); + textures{1} = n_top; + textures{2} = tt; + textures{3} = n_bot; + + parm = res0; + parm.res1.champ = 1; % calculate precisely +% parm.res1.trace = 1; +% parm.res3.trace = 1; % trace automatique % automatic trace + + k_parallel = n_top*sind(theta); % n_air, or whatever the refractive index of the medium where light is coming in. + + parm = res0; + + parm.not_io = 1; % no write data on hard disk + parm.res1.champ = 1; % the electromagnetic field is calculated accurately +% parm.res3.npts=[0,1,0]; + parm.res3.npts=[11,11,11]; + + profile = {[0, thickness, 0], [1, 2, 3]}; + aa = res1(wavelength,period,textures,nn,k_parallel, phi, parm); + res = res2(aa, profile); + + x = linspace(-period(1)/2, period(1)/2, 50); + y = linspace(period(2)/2, -period(2)/2, 50); + x = linspace(0, period(1), 50); + y = linspace(period(2), 0, 50); + +% x = [0:1:49] * period(1) / 50 - period(1)/2; +% x = [1:1:50] * period(1) / 50 - period(1)/2; +% y = [0:1:49] .* period(2) / 50 - period(2)/2 +% y = [1:1:50] .* period(2) / 50 - period(2)/2 +% y = [50:-1:1] .* period(2) / 50 - period(2)/2 +% y = [49:-1:0] .* period(2) / 50 - period(2)/2 + + + if pol == 1 + einc = [0, 1]; + elseif pol == -1 + einc = [1, 0]; + else + disp('only TE or TM is allowed.'); + end + [e,z,o]=res3(x,y,aa,profile,einc, parm); + + if pol == 1 % TE + top_refl_info = res.TEinc_top_reflected; + top_tran_info = res.TEinc_top_transmitted; + bottom_refl_info = res.TEinc_bottom_reflected; + bottom_tran_info = res.TEinc_bottom_transmitted; + else % TM + top_refl_info = res.TMinc_top_reflected; + top_tran_info = res.TMinc_top_transmitted; + bottom_refl_info = res.TMinc_bottom_reflected; + bottom_tran_info = res.TMinc_bottom_transmitted; + end +end + +function [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = reti_2d_2(); + + warning('off', 'Octave:possible-matlab-short-circuit-operator'); + warning('off', 'Invalid UTF-8 byte sequences have been replaced.'); + warning('off', 'findstr is obsolete; use strfind instead'); + + factor = 1; + pol = -1; + n_top = 1; + n_bot = 1; + theta = 20; + phi = 33; + nn = [11,11]; + period = [770/factor, 770/factor]; + wavelength = 777/factor; + thickness = 100/factor; + + b = [-period(1)/4, -period(2)/4, period(1)/2, period(2)*5/10, 3, 1]; + b = [period(1)/4, period(2)/4, period(1)/2, period(2)*5/10, 3, 1]; + + tt = {1, b}; + + retio; + textures = cell(1,3); + textures{1} = n_top; + textures{2} = tt; + textures{3} = n_bot; + + parm = res0; + parm.res1.champ = 1; % calculate precisely +% parm.res1.trace = 1; +% parm.res3.trace = 1; % trace automatique % automatic trace + + k_parallel = n_top*sind(theta); % n_air, or whatever the refractive index of the medium where light is coming in. + + parm = res0; + + parm.not_io = 1; % no write data on hard disk + parm.res1.champ = 1; % the electromagnetic field is calculated accurately +% parm.res3.npts=[0,1,0]; + parm.res3.npts=[11,11,11]; + + profile = {[0, thickness, 0], [1, 2, 3]}; + aa = res1(wavelength,period,textures,nn,k_parallel, phi, parm); + res = res2(aa, profile); + + x = linspace(-period(1)/2, period(1)/2, 50); + y = linspace(-period(2)/2, period(2)/2, 50); + y = linspace(period(2)/2, -period(2)/2, 50); + x = linspace(0, period(1), 50); + y = linspace(period(2), 0, 50); + +% x = [0:1:49] * period(1) / 50 - period(1)/2; +% x = [1:1:50] * period(1) / 50 - period(1)/2; +% y = [0:1:49] .* period(2) / 50 - period(2)/2 +% y = [1:1:50] .* period(2) / 50 - period(2)/2 +% y = [50:-1:1] .* period(2) / 50 - period(2)/2 +% y = [49:-1:0] .* period(2) / 50 - period(2)/2 + + parm.res3.trace=1; %trace automatique % automatic trace + + if pol == 1 + einc = [0, 1]; + elseif pol == -1 + einc = [1, 0]; + else + disp('only TE or TM is allowed.'); + end + [e,z,o]=res3(x,y,aa,profile,einc, parm); + + if pol == 1 % TE + top_refl_info = res.TEinc_top_reflected; + top_tran_info = res.TEinc_top_transmitted; + bottom_refl_info = res.TEinc_bottom_reflected; + bottom_tran_info = res.TEinc_bottom_transmitted; + else % TM + top_refl_info = res.TMinc_top_reflected; + top_tran_info = res.TMinc_top_transmitted; + bottom_refl_info = res.TMinc_bottom_reflected; + bottom_tran_info = res.TMinc_bottom_transmitted; + end +end + + +function [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = reti_2d_3(); + + warning('off', 'Octave:possible-matlab-short-circuit-operator'); + warning('off', 'Invalid UTF-8 byte sequences have been replaced.'); + warning('off', 'findstr is obsolete; use strfind instead'); + + factor = 1; + pol = -1; + n_top = 1; + n_bot = 1; + theta = 20; + phi = 33; + nn = [11,11]; + period = [770/factor, 770/factor]; + wavelength = 777/factor; + thickness = 100/factor; + + + a = [period(1)/4, period(2)/2, period(1)/2, period(2), 4, 1]; + tt = {1, a}; + + retio; + textures = cell(1,3); + textures{1} = n_top; + textures{2} = tt; + textures{3} = n_bot; + + parm = res0; + parm.res1.champ = 1; % calculate precisely + parm.res1.trace = 1; + + k_parallel = n_top*sind(theta); % n_air, or whatever the refractive index of the medium where light is coming in. + + parm = res0; + + parm.not_io = 1; % no write data on hard disk + parm.res1.champ = 1; % the electromagnetic field is calculated accurately + parm.res3.npts=[11,11,11]; + + profile = {[0, thickness, 0], [1, 2, 3]}; + aa = res1(wavelength,period,textures,nn,k_parallel, phi, parm); + res = res2(aa, profile); + + x = linspace(-period(1)/2, period(1)/2, 50); + y = linspace(-period(2)/2, period(2)/2, 50); + y = linspace(period(2)/2, -period(2)/2, 50); + x = linspace(0, period(1), 50); + y = linspace(period(2), 0, 50); + +% x = [0:1:49] * period(1) / 50 - period(1)/2; +% x = [1:1:50] * period(1) / 50 - period(1)/2; +% y = [0:1:49] .* period(2) / 50 - period(2)/2 +% y = [1:1:50] .* period(2) / 50 - period(2)/2 +% y = [50:-1:1] .* period(2) / 50 - period(2)/2 +% y = [49:-1:0] .* period(2) / 50 - period(2)/2 + + parm.res3.trace=1; %trace automatique % automatic trace + + if pol == 1 + einc = [0, 1]; + elseif pol == -1 + einc = [1, 0]; + else + disp('only TE or TM is allowed.'); + end + [e,z,o]=res3(x,y,aa,profile,einc, parm); + + if pol == 1 % TE + top_refl_info = res.TEinc_top_reflected; + top_tran_info = res.TEinc_top_transmitted; + bottom_refl_info = res.TEinc_bottom_reflected; + bottom_tran_info = res.TEinc_bottom_transmitted; + else % TM + top_refl_info = res.TMinc_top_reflected; + top_tran_info = res.TMinc_top_transmitted; + bottom_refl_info = res.TMinc_bottom_reflected; + bottom_tran_info = res.TMinc_bottom_transmitted; + end +end + + +function [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = reti_2d_4(); + + warning('off', 'Octave:possible-matlab-short-circuit-operator'); + warning('off', 'Invalid UTF-8 byte sequences have been replaced.'); + warning('off', 'findstr is obsolete; use strfind instead'); + + factor = 1; + pol = 1; + n_top = 1; + n_bot = 1; + theta = 0; + phi = 0; + nn = [11,11]; + period = [480/factor, 480/factor]; + wavelength = 550/factor; + thickness = 220/factor; + + + a = [0+240, 120+240, 160, 80, 4, 1]; + b = [0+240, -120+240, 160, 80, 4, 1]; + c = [120+240, 0+240, 80, 160, 4, 1]; + d = [-120+240, 0+240, 80, 160, 4, 1]; + + textures = cell(1,3); + textures{1} = n_top; + textures{2} = {1,a, b, c, d}; + textures{3} = n_bot; + + + parm = res0; + parm.res1.champ = 1; % calculate precisely + parm.res1.trace = 1; + + k_parallel = n_top*sind(theta); % n_air, or whatever the refractive index of the medium where light is coming in. + + parm = res0; + + parm.not_io = 1; % no write data on hard disk + parm.res1.champ = 1; % the electromagnetic field is calculated accurately +% parm.res3.npts=[0,1,0]; + parm.res3.npts=[11,11,11]; + + %parm.res1.trace = 1; % show the texture + % + %textures = cell(1, size(_textures, 2)); + %for i = 1:length(_textures) + % textures(i) = _textures(i); + %end + % + %profile = cell(1, size(_profile, 1)); + %profile(1) = _profile(1, :); + %profile(2) = _profile(2, :); + + profile = {[0, thickness, 0], [1, 2, 3]}; + aa = res1(wavelength,period,textures,nn,k_parallel, phi, parm); + res = res2(aa, profile); + + %res3(aa) + %parm.res3.sens=1; + %##parm.res3.gauss_x = 100 + +% x = linspace(-period(1)/2, period(1)/2, 50); +% y = linspace(-period(2)/2, period(2)/2, 50); +% y = linspace(period(2)/2, -period(2)/2, 50); + x = linspace(0, period(1), 50); + y = linspace(period(2), 0, 50); + +% x = [0:1:49] * period(1) / 50 - period(1)/2; +% x = [1:1:50] * period(1) / 50 - period(1)/2; +% y = [0:1:49] .* period(2) / 50 - period(2)/2 +% y = [1:1:50] .* period(2) / 50 - period(2)/2 +% y = [50:-1:1] .* period(2) / 50 - period(2)/2 +% y = [49:-1:0] .* period(2) / 50 - period(2)/2 + + parm.res3.trace=1; %trace automatique % automatic trace + +% parm.res3.npts = res3_npts; + + if pol == 1 + einc = [0, 1]; + elseif pol == -1 + einc = [1, 0]; + else + disp('only TE or TM is allowed.'); + end + [e,z,o]=res3(x,y,aa,profile,einc, parm); + + if pol == 1 % TE + top_refl_info = res.TEinc_top_reflected; + top_tran_info = res.TEinc_top_transmitted; + bottom_refl_info = res.TEinc_bottom_reflected; + bottom_tran_info = res.TEinc_bottom_transmitted; + else % TM + top_refl_info = res.TMinc_top_reflected; + top_tran_info = res.TMinc_top_transmitted; + bottom_refl_info = res.TMinc_bottom_reflected; + bottom_tran_info = res.TMinc_bottom_transmitted; + end +end + +function [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = reti_2d_5(); + + warning('off', 'Octave:possible-matlab-short-circuit-operator'); + warning('off', 'Invalid UTF-8 byte sequences have been replaced.'); + warning('off', 'findstr is obsolete; use strfind instead'); + + factor = 1; + pol = 1; + n_top = 1; + n_bot = 1; + theta = 0; + phi = 0; + nn = [11,11]; + period = [480/factor, 480/factor]; + wavelength = 550/factor; + thickness = 220/factor; + + PatternIn = [0 0 0 0 0 0; 0 0 1 1 0 0; 0 1 0 0 1 0; 0 1 0 0 1 0; 0 0 1 1 0 0; 0 0 0 0 0 0]; +% PatternIn = [3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; 3, 3, 3, 3, 3, 1, 1, 1, 1, 1; ] +% PatternIn = [3, 3, 3, 3, 3, 1, 1, 1, 1, 1] +% PatternIn = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;1, 1, 1, 1, 1, 0, 0, 0, 0, 0;] +% PatternIn = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0] + + XGrid = [3.5:1:8.5]/6 * period(1); + YGrid = [3.5:1:8.5]/6 * period(1); + + XGrid = linspace(-period(1)/2 + period(1)/12, period(1)/2 - period(1)/12, 6) + period(1)/2; + YGrid = linspace(-period(2)/2 + period(2)/12, period(2)/2 - period(2)/12, 6) + period(2)/2; + YGrid = -linspace(-period(2)/2 + period(2)/12, period(2)/2 - period(2)/12, 6) - period(2)/2; + +% XGrid = linspace(-period(1)/2 + period(1)/12, period(1)/2 - period(1)/12, 6); +% YGrid = -linspace(-period(2)/2 + period(2)/12, period(2)/2 - period(2)/12, 6); + +% XGrid = [0.5:1:9.5] * period(1) / 10 +% YGrid = [0.5:1:9.5] * period(2) / 10 + + % RCWA + + retio; + textures = cell(1,3); + textures{1} = {n_top}; + textures{2} = FractureGeom(PatternIn,1,4,XGrid,YGrid); + textures{3} = {n_bot}; + profile = {[0, thickness, 0], [1, 2, 3]}; + + parm = res0; + parm.res1.champ = 1; % calculate precisely + parm.res1.trace = 1; + + k_parallel = n_top*sind(theta); % n_air, or whatever the refractive index of the medium where light is coming in. + + parm = res0; + + parm.not_io = 1; % no write data on hard disk + parm.res1.champ = 1; % the electromagnetic field is calculated accurately +% parm.res3.npts=[0,1,0]; + parm.res3.npts=[11,11,11]; + + %parm.res1.trace = 1; % show the texture + % + %textures = cell(1, size(_textures, 2)); + %for i = 1:length(_textures) + % textures(i) = _textures(i); + %end + % + %profile = cell(1, size(_profile, 1)); + %profile(1) = _profile(1, :); + %profile(2) = _profile(2, :); + + profile = {[0, thickness, 0], [1, 2, 3]}; + aa = res1(wavelength,period,textures,nn,k_parallel, phi, parm); + res = res2(aa, profile); + + %res3(aa) + %parm.res3.sens=1; + %##parm.res3.gauss_x = 100 + + x = linspace(-period(1)/2, period(1)/2, 50); + y = linspace(-period(2)/2, period(2)/2, 50); + y = linspace(period(2)/2, -period(2)/2, 50); + + + x = linspace(0, period(1), 50); + y = linspace(period(2), 0, 50); + +% x = [0:1:49] * period(1) / 50 - period(1)/2; +% x = [1:1:50] * period(1) / 50 - period(1)/2; +% y = [0:1:49] .* period(2) / 50 - period(2)/2 +% y = [1:1:50] .* period(2) / 50 - period(2)/2 +% y = [50:-1:1] .* period(2) / 50 - period(2)/2 +% y = [49:-1:0] .* period(2) / 50 - period(2)/2 + + parm.res3.trace=1; %trace automatique % automatic trace + +% parm.res3.npts = res3_npts; + + if pol == 1 + einc = [0, 1]; + elseif pol == -1 + einc = [1, 0]; + else + disp('only TE or TM is allowed.'); + end + [e,z,o]=res3(x,y,aa,profile,einc, parm); + + if pol == 1 % TE + top_refl_info = res.TEinc_top_reflected; + top_tran_info = res.TEinc_top_transmitted; + bottom_refl_info = res.TEinc_bottom_reflected; + bottom_tran_info = res.TEinc_bottom_transmitted; + else % TM + top_refl_info = res.TMinc_top_reflected; + top_tran_info = res.TMinc_top_transmitted; + bottom_refl_info = res.TMinc_bottom_reflected; + bottom_tran_info = res.TMinc_bottom_transmitted; + end +end + +function [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, e] = reti_2d_6(); + + warning('off', 'Octave:possible-matlab-short-circuit-operator'); + warning('off', 'Invalid UTF-8 byte sequences have been replaced.'); + warning('off', 'findstr is obsolete; use strfind instead'); + + factor = 1; + pol = 1; + n_top = 1; + n_bot = 1; + theta = 10; + phi = 20; + nn = [11,11]; + period = [480/factor, 480/factor]; + wavelength = 550/factor; + thickness = 220/factor; + + + a = [0+240, 120+240, 160, 80, 4, 1]; + b = [0+240, -120+240, 160, 80, 4, 1]; + c = [120+240, 0+240, 80, 160, 4, 1]; + d = [-120+240, 0+240, 80, 160, 4, 1]; + + textures = cell(1,3); + textures{1} = n_top; + textures{2} = {1,a, b, c, d}; + textures{3} = n_bot; + + + parm = res0; + parm.res1.champ = 1; % calculate precisely + parm.res1.trace = 1; + + k_parallel = n_top*sind(theta); % n_air, or whatever the refractive index of the medium where light is coming in. + + parm = res0; + + parm.not_io = 1; % no write data on hard disk + parm.res1.champ = 1; % the electromagnetic field is calculated accurately +% parm.res3.npts=[0,1,0]; + parm.res3.npts=[11,11,11]; + + %parm.res1.trace = 1; % show the texture + % + %textures = cell(1, size(_textures, 2)); + %for i = 1:length(_textures) + % textures(i) = _textures(i); + %end + % + %profile = cell(1, size(_profile, 1)); + %profile(1) = _profile(1, :); + %profile(2) = _profile(2, :); + + profile = {[0, thickness, 0], [1, 2, 3]}; + aa = res1(wavelength,period,textures,nn,k_parallel, phi, parm); + res = res2(aa, profile); + + %res3(aa) + %parm.res3.sens=1; + %##parm.res3.gauss_x = 100 + +% x = linspace(-period(1)/2, period(1)/2, 50); +% y = linspace(-period(2)/2, period(2)/2, 50); +% y = linspace(period(2)/2, -period(2)/2, 50); + x = linspace(0, period(1), 50); + y = linspace(period(2), 0, 50); + +% x = [0:1:49] * period(1) / 50 - period(1)/2; +% x = [1:1:50] * period(1) / 50 - period(1)/2; +% y = [0:1:49] .* period(2) / 50 - period(2)/2 +% y = [1:1:50] .* period(2) / 50 - period(2)/2 +% y = [50:-1:1] .* period(2) / 50 - period(2)/2 +% y = [49:-1:0] .* period(2) / 50 - period(2)/2 + + parm.res3.trace=1; %trace automatique % automatic trace + +% parm.res3.npts = res3_npts; + + if pol == 1 + einc = [0, 1]; + elseif pol == -1 + einc = [1, 0]; + else + disp('only TE or TM is allowed.'); + end + [e,z,o]=res3(x,y,aa,profile,einc, parm); + + if pol == 1 % TE + top_refl_info = res.TEinc_top_reflected; + top_tran_info = res.TEinc_top_transmitted; + bottom_refl_info = res.TEinc_bottom_reflected; + bottom_tran_info = res.TEinc_bottom_transmitted; + else % TM + top_refl_info = res.TMinc_top_reflected; + top_tran_info = res.TMinc_top_transmitted; + bottom_refl_info = res.TMinc_bottom_reflected; + bottom_tran_info = res.TMinc_bottom_transmitted; + end +end + +% Divides the given geometry into rectangles to be used in Reticolo +function GeometryOut = FractureGeom(PatternIn,nLow,nHigh,XGrid,YGrid) + + % Acceptable refractive index tolerance in fracturing + + % Extract grid parameters + dX = abs(XGrid(2)-XGrid(1)); + dY = abs(YGrid(2)-YGrid(1)); + [Nx, Ny] = size(PatternIn); + + Geometry = {nLow}; %Define background index + + % Fracture non binarized pixels + for i = 1:Nx % Defining texture for patterned layer. Probably could have vectorized this. + for j = 1:Ny + if PatternIn(i,j) == 1 + Geometry = [Geometry,{[XGrid(i),YGrid(j),dX,dY,nHigh,1]}]; + end + end + end + GeometryOut = Geometry; +end \ No newline at end of file diff --git a/benchmarks/interface/reti_meent_1Dc.py b/benchmarks/interface/reti_meent_1Dc.py deleted file mode 100644 index 930f8b0..0000000 --- a/benchmarks/interface/reti_meent_1Dc.py +++ /dev/null @@ -1,304 +0,0 @@ -import os -import numpy as np -import matplotlib.pyplot as plt - -import meent - -# os.environ['OCTAVE_EXECUTABLE'] = '/opt/homebrew/bin/octave-cli' - - -class Reticolo: - - def __init__(self, engine_type='octave', *args, **kwargs): - - if engine_type == 'octave': - try: - from oct2py import octave - except Exception as e: - raise e - self.eng = octave - - elif engine_type == 'matlab': - try: - import matlab.engine - except Exception as e: - raise e - self.eng = matlab.engine.start_matlab() - else: - raise ValueError - - # path that has file to run in octave - m_path = os.path.dirname(__file__) - self.eng.addpath(self.eng.genpath(m_path)) - - def run_res2(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, wavelength, n_I, n_II, - *args, **kwargs): - theta *= (180 / np.pi) - phi *= (180 / np.pi) - - if grating_type in (0, 1): - period = period[0] - - fto = fto - Nx = ucell.shape[2] - period_x = period - grid_x = np.linspace(0, period, Nx + 1)[1:] - grid_x -= period_x / 2 - - # grid = np.linspace(0, period, Nx) - - ucell_new = [] - for z in range(ucell.shape[0]): - ucell_layer = [grid_x, ucell[z, 0]] - ucell_new.append(ucell_layer) - - textures = [n_I, *ucell_new, n_II] - - else: - - Nx = ucell.shape[2] - Ny = ucell.shape[1] - period_x = period[0] - period_y = period[1] - - unit_x = period_x / Nx - unit_y = period_y / Ny - - grid_x = np.linspace(0, period[0], Nx + 1)[1:] - grid_y = np.linspace(0, period[1], Ny + 1)[1:] - - grid_x -= period_x / 2 - grid_y -= period_y / 2 - - ucell_new = [] - for z in range(ucell.shape[0]): - ucell_layer = [10] - for y, yval in enumerate(grid_y): - for x, xval in enumerate(grid_x): - obj = [xval, yval, unit_x, unit_y, ucell[z, y, x], 1] - ucell_layer.append(obj) - ucell_new.append(ucell_layer) - textures = [n_I, *ucell_new, n_II] - - profile = np.array([[0, *thickness, 0], range(1, len(thickness) + 3)]) - - top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info = \ - self._run(pol, theta, phi, period, n_I, fto, textures, profile, wavelength, grating_type, - cal_field=False) - - return top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, bottom_tran_info.efficiency - - def run_res3(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, wavelength, n_top, n_bot, - matlab_plot_field=0, res3_npts=0, *args, **kwargs): - - # theta *= (180 / np.pi) - phi *= (180 / np.pi) - - if grating_type in (0, 1): - period = period[0] - - fto = fto - Nx = ucell.shape[2] - period_x = period - grid_x = np.linspace(0, period, Nx + 1)[1:] - grid_x -= period_x / 2 - - # grid = np.linspace(0, period, Nx) - - ucell_new = [] - for z in range(ucell.shape[0]): - ucell_layer = [grid_x, ucell[z, 0]] - ucell_new.append(ucell_layer) - - textures = [n_top, *ucell_new, n_bot] - - else: - - Nx = ucell.shape[2] - Ny = ucell.shape[1] - period_x = period[0] - period_y = period[1] - - unit_x = period_x / Nx - unit_y = period_y / Ny - - grid_x = np.linspace(0, period[0], Nx + 1)[1:] - grid_y = np.linspace(0, period[1], Ny + 1)[1:] - - grid_x -= period_x / 2 - grid_y -= period_y / 2 - - ucell_new = [] - for z in range(ucell.shape[0]): - ucell_layer = [10] - for y, yval in enumerate(grid_y): - for x, xval in enumerate(grid_x): - obj = [xval, yval, unit_x, unit_y, ucell[z, y, x], 1] - ucell_layer.append(obj) - ucell_new.append(ucell_layer) - textures = [n_top, *ucell_new, n_bot] - - profile = np.array([[0, *thickness, 0], range(1, len(thickness) + 3)]) - - top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell = \ - self._run(pol, theta, phi, period, n_top, fto, textures, profile, wavelength, grating_type, - cal_field=True, matlab_plot_field=matlab_plot_field, res3_npts=res3_npts) - - return top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, \ - bottom_tran_info.efficiency, field_cell - - def _run(self, pol, theta, phi, period, n_top, fto, - textures, profile, wavelength, grating_type, cal_field=False, matlab_plot_field=0, res3_npts=0): - - if cal_field: - top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell = \ - self.eng.reticolo_res3(pol, theta, phi, period, n_top, fto, - textures, profile, wavelength, grating_type, matlab_plot_field, res3_npts, - nout=5) - res = (top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell) - else: - top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info = \ - self.eng.reticolo_res2(pol, theta, phi, period, n_top, fto, - textures, profile, wavelength, grating_type, nout=4) - res = (top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info) - return res - - -if __name__ == '__main__': - - factor = 100 - option = {} - option['grating_type'] = 1 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating - option['pol'] = 0 # 0: TE, 1: TM - option['n_top'] = 2.2 # n_incidence - option['n_bot'] = 2 # n_transmission - option['theta'] = 40 * np.pi / 180 - option['phi'] = 20 * np.pi / 180 - option['fto'] = [40, 1] - option['period'] = [770/factor] - option['wavelength'] = 777/factor - option['thickness'] = [100/factor, 100/factor, 100/factor, 100/factor, 100/factor, 100/factor] # final term is for h_substrate - option['thickness'] = [100/factor,] # final term is for h_substrate - option['fourier_type'] = 2 - - ucell = np.array( - [ - [[3, 3, 3, 3, 3, 1, 1, 1, 1, 1]], - ]) - - option['ucell'] = ucell - res_z = 11 - - # res3_npts = 20 - reti = Reticolo() - reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, matlab_plot_field=0, res3_npts=res_z) - print('reti de_ri', np.array(reti_de_ri).flatten()) - print('reti de_ti', np.array(reti_de_ti).flatten()) - - # Numpy - backend = 0 - nmee = meent.call_mee(backend=backend, perturbation=1E-30, **option) - n_de_ri, n_de_ti = nmee.conv_solve() - n_field_cell = nmee.calculate_field(res_z=res_z, res_y=50, res_x=50) - - - print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) - print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) - - if option['pol'] == 0: # TE - title = ['1D Ey', '1D Hx', '1D Hz', ] - else: # TM - title = ['1D Hy', '1D Ex', '1D Ez', ] - - title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] - - r_field_cell = np.moveaxis(r_field_cell, 2, 1) - r_field_cell = r_field_cell[res_z:-res_z] - r_field_cell = np.flip(r_field_cell, 0) - r_field_cell = r_field_cell.conj() - print(np.linalg.norm(r_field_cell - n_field_cell[:,:,:])) - title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] - - for i in range(6): - print(i, np.linalg.norm(r_field_cell[:, 0, :, i] - n_field_cell[:, 0, :, i])) - - # for i in range(len(title)): - # # a0 = np.flipud(r_field_cell[res_z:-res_z, :, i]) - # a0 = r_field_cell[:, :, i] - # b0 = n_field_cell[:, 0, :, i] - # - # res = [] - # res.append(np.linalg.norm(a0.conj() - b0).round(3)) - # res.append(np.linalg.norm(abs(a0.conj())**2 - abs(b0)**2).round(3)) - # res.append(np.linalg.norm(a0.conj().real - b0.real).round(3)) - # res.append(np.linalg.norm(a0.conj().imag - b0.imag).round(3)) - # - # print(f'{title[i]}, {res}') - # - # aa = np.angle(a0.conj()) - # bb = np.angle(b0) - # - # print(aa[0][1:] - aa[0][:-1]) - # print(bb[0][1:] - bb[0][:-1]) - # - # print(aa[0] - bb[0]) - # print(1) - - # - # print('Ey, val diff', np.linalg.norm(a0.conj() - b0)) - # print('Ey, abs2 diff', np.linalg.norm(abs(a0.conj())**2 - abs(b0)**2)) - # print('Ey, real diff', np.linalg.norm(a0.conj().real - b0.real)) - # print('Ey, imag diff', np.linalg.norm(a0.conj().imag - b0.imag)) - # - # a1 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 1]) - # b1 = n_field_cell[:, 0, :, 1] - # print(np.linalg.norm(a1.conj() - b1)) - # print('Hx, val diff', np.linalg.norm(a1.conj() - b1)) - # print('Ey, abs2 diff', np.linalg.norm(abs(a1.conj())**2 - abs(b1)**2)) - # print('Ey, real diff', np.linalg.norm(a1.conj().real - b1.real)) - # print('Ey, imag diff', np.linalg.norm(a1.conj().imag - b1.imag)) - # - # a2 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 2]) - # b2 = n_field_cell[:, 0, :, 2] - # print(np.linalg.norm(a2.conj() - b2)) - # print('Hz, val diff', np.linalg.norm(a2.conj() - b2)) - # print('Ey, abs2 diff', np.linalg.norm(abs(a2.conj())**2 - abs(b2)**2)) - # print('Ey, real diff', np.linalg.norm(a2.conj().real - b2.real)) - # print('Ey, imag diff', np.linalg.norm(a2.conj().imag - b2.imag)) - - fig, axes = plt.subplots(6, 6, figsize=(10, 5)) - - for ix in range(len(title)): - # r_data = np.flipud(r_field_cell[res3_npts:-res3_npts, :, ix]).conj() - r_data = r_field_cell[:, 0, :, ix] - - im = axes[ix, 0].imshow(abs(r_data)**2, cmap='jet', aspect='auto') - fig.colorbar(im, ax=axes[ix, 0], shrink=1) - im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') - fig.colorbar(im, ax=axes[ix, 2], shrink=1) - im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') - fig.colorbar(im, ax=axes[ix, 4], shrink=1) - - - n_data = n_field_cell[:, 0, :, ix] - - im = axes[ix, 1].imshow(abs(n_data)**2, cmap='jet', aspect='auto') - fig.colorbar(im, ax=axes[ix, 1], shrink=1) - - im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') - fig.colorbar(im, ax=axes[ix, 3], shrink=1) - - im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') - fig.colorbar(im, ax=axes[ix, 5], shrink=1) - - ix=0 - axes[ix, 0].title.set_text('abs**2 reti') - axes[ix, 2].title.set_text('Re, reti') - axes[ix, 4].title.set_text('Im, reti') - axes[ix, 1].title.set_text('abs**2 meen') - axes[ix, 3].title.set_text('Re, meen') - axes[ix, 5].title.set_text('Im, meen') - - plt.show() - - 1 diff --git a/benchmarks/interface/reti_meent_1Dc_old.py b/benchmarks/interface/reti_meent_1Dc_old.py deleted file mode 100644 index 05b462c..0000000 --- a/benchmarks/interface/reti_meent_1Dc_old.py +++ /dev/null @@ -1,267 +0,0 @@ -import os -import numpy as np -import matplotlib.pyplot as plt - -import meent - -# os.environ['OCTAVE_EXECUTABLE'] = '/opt/homebrew/bin/octave-cli' - - -class Reticolo: - - def __init__(self, engine_type='octave', *args, **kwargs): - - if engine_type == 'octave': - try: - from oct2py import octave - except Exception as e: - raise e - self.eng = octave - - elif engine_type == 'matlab': - try: - import matlab.engine - except Exception as e: - raise e - self.eng = matlab.engine.start_matlab() - else: - raise ValueError - - # path that has file to run in octave - m_path = os.path.dirname(__file__) - self.eng.addpath(self.eng.genpath(m_path)) - - def run_res2(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, wavelength, n_I, n_II, - *args, **kwargs): - theta *= (180 / np.pi) - phi *= (180 / np.pi) - - if grating_type in (0, 1): - period = period[0] - - fto = fto - Nx = ucell.shape[2] - period_x = period - grid_x = np.linspace(0, period, Nx + 1)[1:] - grid_x -= period_x / 2 - - # grid = np.linspace(0, period, Nx) - - ucell_new = [] - for z in range(ucell.shape[0]): - ucell_layer = [grid_x, ucell[z, 0]] - ucell_new.append(ucell_layer) - - textures = [n_I, *ucell_new, n_II] - - else: - - Nx = ucell.shape[2] - Ny = ucell.shape[1] - period_x = period[0] - period_y = period[1] - - unit_x = period_x / Nx - unit_y = period_y / Ny - - grid_x = np.linspace(0, period[0], Nx + 1)[1:] - grid_y = np.linspace(0, period[1], Ny + 1)[1:] - - grid_x -= period_x / 2 - grid_y -= period_y / 2 - - ucell_new = [] - for z in range(ucell.shape[0]): - ucell_layer = [10] - for y, yval in enumerate(grid_y): - for x, xval in enumerate(grid_x): - obj = [xval, yval, unit_x, unit_y, ucell[z, y, x], 1] - ucell_layer.append(obj) - ucell_new.append(ucell_layer) - textures = [n_I, *ucell_new, n_II] - - profile = np.array([[0, *thickness, 0], range(1, len(thickness) + 3)]) - - top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info = \ - self._run(pol, theta, phi, period, n_I, fto, textures, profile, wavelength, grating_type, - cal_field=False) - - return top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, bottom_tran_info.efficiency - - def run_res3(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, wavelength, n_top, n_bot, - matlab_plot_field=0, res3_npts=0, *args, **kwargs): - - # theta *= (180 / np.pi) - phi *= (180 / np.pi) - - if grating_type in (0, 1): - period = period[0] - - fto = fto - Nx = ucell.shape[2] - period_x = period - grid_x = np.linspace(0, period, Nx + 1)[1:] - grid_x -= period_x / 2 - - # grid = np.linspace(0, period, Nx) - - ucell_new = [] - for z in range(ucell.shape[0]): - ucell_layer = [grid_x, ucell[z, 0]] - ucell_new.append(ucell_layer) - - textures = [n_top, *ucell_new, n_bot] - - else: - - Nx = ucell.shape[2] - Ny = ucell.shape[1] - period_x = period[0] - period_y = period[1] - - unit_x = period_x / Nx - unit_y = period_y / Ny - - grid_x = np.linspace(0, period[0], Nx + 1)[1:] - grid_y = np.linspace(0, period[1], Ny + 1)[1:] - - grid_x -= period_x / 2 - grid_y -= period_y / 2 - - ucell_new = [] - for z in range(ucell.shape[0]): - ucell_layer = [10] - for y, yval in enumerate(grid_y): - for x, xval in enumerate(grid_x): - obj = [xval, yval, unit_x, unit_y, ucell[z, y, x], 1] - ucell_layer.append(obj) - ucell_new.append(ucell_layer) - textures = [n_top, *ucell_new, n_bot] - - profile = np.array([[0, *thickness, 0], range(1, len(thickness) + 3)]) - - top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell = \ - self._run(pol, theta, phi, period, n_top, fto, textures, profile, wavelength, grating_type, - cal_field=True, matlab_plot_field=matlab_plot_field, res3_npts=res3_npts) - - return top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, \ - bottom_tran_info.efficiency, field_cell - - def _run(self, pol, theta, phi, period, n_top, fto, - textures, profile, wavelength, grating_type, cal_field=False, matlab_plot_field=0, res3_npts=0): - - if cal_field: - top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell = \ - self.eng.reticolo_res3(pol, theta, phi, period, n_top, fto, - textures, profile, wavelength, grating_type, matlab_plot_field, res3_npts, - nout=5) - res = (top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell) - else: - top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info = \ - self.eng.reticolo_res2(pol, theta, phi, period, n_top, fto, - textures, profile, wavelength, grating_type, nout=4) - res = (top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info) - return res - - -if __name__ == '__main__': - - option = {} - option['grating_type'] = 1 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating - option['pol'] = 1 # 0: TE, 1: TM - option['n_top'] = 1 # n_incidence - option['n_bot'] = 1.5 # n_transmission - option['theta'] = 30 * np.pi / 180 - option['phi'] = 0 * np.pi / 180 - option['fto'] = 40 - option['period'] = [1000] - option['wavelength'] = 650 - option['thickness'] = [100, 100, 100, 100, 100, 100] # final term is for h_substrate - option['fourier_type'] = 2 - - ucell = np.array( - [ - [[1, 1, 1, 1, 1, 0, 0, 1, 1, 1, ]], - [[1, 0, 0, 1, 0, 0, 0, 1, 1, 1, ]], - [[1, 1, 0, 1, 1, 1, 1, 1, 0, 1, ]], - [[1, 1, 1, 0, 1, 0, 0, 1, 1, 1, ]], - [[0, 0, 1, 0, 1, 0, 0, 1, 1, 1, ]], - [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ]], - ]) * (3 - 1) + 1 - ucell = np.repeat(ucell, 10, axis=2) - option['ucell'] = ucell - - res3_npts = 20 - reti = Reticolo() - reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, res3_npts=res3_npts) - print('reti de_ri', np.array(reti_de_ri).flatten()) - print('reti de_ti', np.array(reti_de_ti).flatten()) - - # Numpy - backend = 0 - nmee = meent.call_mee(backend=backend, **option) - n_de_ri, n_de_ti = nmee.conv_solve() - n_field_cell = nmee.calculate_field(res_z=res3_npts, res_x=100) - print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) - print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) - - if True: - a0 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 0]) - b0 = n_field_cell[:, 0, :, 0] - print('Ex', np.linalg.norm(a0.conj() - b0)) - - a1 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 1]) - b1 = n_field_cell[:, 0, :, 1] - print('Ey', np.linalg.norm(a1.conj() - b1)) - - a2 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 2]) - b2 = n_field_cell[:, 0, :, 2] - print('Ez', np.linalg.norm(a2.conj() - b2)) - - a3 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 3]) - b3 = n_field_cell[:, 0, :, 3] - print('Hx', np.linalg.norm(a3.conj() - b3)) - - a4 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 4]) - b4 = n_field_cell[:, 0, :, 4] - print('Hy', np.linalg.norm(a4.conj() - b4)) - - a5 = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 5]) - b5 = n_field_cell[:, 0, :, 5] - print('Hz', np.linalg.norm(a5.conj() - b5)) - - title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz', ] - fig, axes = plt.subplots(2, 6, figsize=(15, 4)) - - for ix in range(len(title)): - data = r_field_cell[res3_npts:-res3_npts, :, ix] - val = data.real - # val = np.clip(val, -1, 1) - im = axes[0, ix].imshow(np.flipud(val), cmap='jet', aspect='auto') - fig.colorbar(im, ax=axes[0, ix], shrink=1) - axes[0, ix].title.set_text(title[ix]) - - val = data.imag - im = axes[1, ix].imshow(np.flipud(val), cmap='jet', aspect='auto') - fig.colorbar(im, ax=axes[1, ix], shrink=1) - plt.show() - - fig, axes = plt.subplots(2, 6, figsize=(15, 4)) - - for ix in range(len(title)): - - data = n_field_cell[:, 0, :, ix] - val = data.real - # val = np.clip(val, -1, 1) - im = axes[0, ix].imshow(val, cmap='jet', aspect='auto') - fig.colorbar(im, ax=axes[0, ix], shrink=1) - axes[0, ix].title.set_text(title[ix]) - - val = -data.imag - # val = np.clip(val, -1, 1) - im = axes[1, ix].imshow(val, cmap='jet', aspect='auto') - fig.colorbar(im, ax=axes[1, ix], shrink=1) - - plt.show() - - print('End') diff --git a/benchmarks/interface/reticolo_res3.m b/benchmarks/interface/reticolo_res3.m index bb3389e..5db962a 100644 --- a/benchmarks/interface/reticolo_res3.m +++ b/benchmarks/interface/reticolo_res3.m @@ -41,7 +41,7 @@ res = res2(aa, profile); end -x = linspace(-period(1)/2, period(1)/2, 50); +x = linspace(0, period(1), 50); %parm.res3.sens=1; %##parm.res3.gauss_x = 100 @@ -59,9 +59,9 @@ [e,z,o]=res3(x,aa,profile,1,parm); else if grating_type == 1 - y = period(1)/2; + y=0; else - y = linspace(period(1)/2, -period(1)/2, 50); + y = linspace(period(1), 0, 50); end if pol == 1 diff --git a/benchmarks/interface/reti_meent_1D.py b/benchmarks/interface/trashcan/reti_meent_1D.py similarity index 100% rename from benchmarks/interface/reti_meent_1D.py rename to benchmarks/interface/trashcan/reti_meent_1D.py diff --git a/benchmarks/interface/reti/test2d_1.m b/benchmarks/interface/trashcan/test2d_1.m similarity index 100% rename from benchmarks/interface/reti/test2d_1.m rename to benchmarks/interface/trashcan/test2d_1.m diff --git a/benchmarks/interface/reti/test2d_2.m b/benchmarks/interface/trashcan/test2d_2.m similarity index 100% rename from benchmarks/interface/reti/test2d_2.m rename to benchmarks/interface/trashcan/test2d_2.m diff --git a/benchmarks/interface/reti/test2d_3.m b/benchmarks/interface/trashcan/test2d_3.m similarity index 100% rename from benchmarks/interface/reti/test2d_3.m rename to benchmarks/interface/trashcan/test2d_3.m diff --git a/benchmarks/interface/reti/test2d_4.m b/benchmarks/interface/trashcan/test2d_4.m similarity index 98% rename from benchmarks/interface/reti/test2d_4.m rename to benchmarks/interface/trashcan/test2d_4.m index f1998c9..103c323 100644 --- a/benchmarks/interface/reti/test2d_4.m +++ b/benchmarks/interface/trashcan/test2d_4.m @@ -105,8 +105,8 @@ % Acceptable refractive index tolerance in fracturing % Extract grid parameters - dX = XGrid(2)-XGrid(1); - dY = YGrid(2)-YGrid(1); + dX = abs(XGrid(2)-XGrid(1)); + dY = abs(YGrid(2)-YGrid(1)); [Nx, Ny] = size(PatternIn) Geometry = {nLow}; %Define background index diff --git a/benchmarks/interface/reti/test2d_5.m b/benchmarks/interface/trashcan/test2d_5.m similarity index 100% rename from benchmarks/interface/reti/test2d_5.m rename to benchmarks/interface/trashcan/test2d_5.m diff --git a/benchmarks/reti_meent_1D.py b/benchmarks/reti_meent_1D.py new file mode 100644 index 0000000..2dfb73b --- /dev/null +++ b/benchmarks/reti_meent_1D.py @@ -0,0 +1,196 @@ +import numpy as np +import matplotlib.pyplot as plt + +import meent + +try: + from benchmarks.interface.Reticolo import Reticolo + +except: + import sys + from pathlib import Path + sys.path.append(str(Path(__file__).parent.parent)) + + from Reticolo import Reticolo + + +def test1d_1(plot_figure=False): + + factor = 1000 + option = {} + option['grating_type'] = 0 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating + option['pol'] = 0 # 0: TE, 1: TM + option['n_top'] = 2 # n_incidence + option['n_bot'] = 1 # n_transmission + option['theta'] = 12 * np.pi / 180 + option['phi'] = 0 * np.pi / 180 + option['fto'] = 1 + option['period'] = [770/factor] + option['wavelength'] = 777/factor + option['thickness'] = [100/factor, 100/factor, 100/factor, 100/factor, 100/factor, 100/factor] # final term is for h_substrate + # option['thickness'] = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1] # final term is for h_substrate + option['fourier_type'] = 1 + + ucell = np.array( + [ + [[3, 3, 3, 3, 3, 1, 1, 1, 1, 1]], + ]) + + option['ucell'] = ucell + option['thickness'] = [100/factor,] # final term is for h_substrate + + res_z = 11 + reti = Reticolo() + reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, matlab_plot_field=0, res3_npts=res_z) + print('reti de_ri', np.array(reti_de_ri).flatten()) + print('reti de_ti', np.array(reti_de_ti).flatten()) + + # Numpy + backend = 0 + nmee = meent.call_mee(backend=backend, perturbation=1E-30, **option) + n_de_ri, n_de_ti = nmee.conv_solve() + n_field_cell = nmee.calculate_field(res_z=res_z, res_x=50) + + print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + + # r_field_cell = np.moveaxis(r_field_cell, 2, 1) + r_field_cell = r_field_cell[:, None, :, :] + r_field_cell = r_field_cell[res_z:-res_z] + r_field_cell = np.flip(r_field_cell, 0) + r_field_cell = r_field_cell.conj() + + for i in range(r_field_cell.shape[-1]): + print(i, np.linalg.norm(r_field_cell[:, :, :, i] - n_field_cell[:, :, :, i])) + + if plot_figure: + + if option['pol'] == 0: # TE + title = ['1D Ey', '1D Hx', '1D Hz', ] + else: # TM + title = ['1D Hy', '1D Ex', '1D Ez', ] + + fig, axes = plt.subplots(3, 6, figsize=(10, 5)) + + for ix in range(len(title)): + r_data = r_field_cell[:, 0, :, ix] + + im = axes[ix, 0].imshow(abs(r_data)**2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[:, 0, :, ix] + + im = axes[ix, 1].imshow(abs(n_data)**2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + axes[0, 0].title.set_text('abs**2 reti') + axes[0, 2].title.set_text('Re, reti') + axes[0, 4].title.set_text('Im, reti') + axes[0, 1].title.set_text('abs**2 meen') + axes[0, 3].title.set_text('Re, meen') + axes[0, 5].title.set_text('Im, meen') + + plt.show() + + +def test1d_2(plot_figure=False): + + factor = 1 + option = {} + option['grating_type'] = 0 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating + option['pol'] = 1 # 0: TE, 1: TM + option['n_top'] = 1 # n_incidence + option['n_bot'] = 2.2 # n_transmission + option['theta'] = 0 * np.pi / 180 + option['phi'] = 0 * np.pi / 180 + option['fto'] = 80 + option['period'] = [770/factor] + option['wavelength'] = 777/factor + # option['thickness'] = [100/factor, 100/factor, 100/factor, 100/factor, 100/factor, 100/factor] # final term is for h_substrate + option['thickness'] = [100/factor,] # final term is for h_substrate + option['fourier_type'] = 1 + + ucell = np.array( + [ + [[3, 3, 3, 3, 3, 1, 1, 1, 1, 1]], + ]) + + option['ucell'] = ucell + + res_z = 11 + reti = Reticolo() + reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, matlab_plot_field=0, res3_npts=res_z) + print('reti de_ri', np.array(reti_de_ri).flatten()) + print('reti de_ti', np.array(reti_de_ti).flatten()) + + # Numpy + backend = 0 + nmee = meent.call_mee(backend=backend, perturbation=1E-30, **option) + n_de_ri, n_de_ti = nmee.conv_solve() + n_field_cell = nmee.calculate_field(res_z=res_z, res_x=50) + + print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + + # r_field_cell = np.moveaxis(r_field_cell, 2, 1) + r_field_cell = r_field_cell[:, None, :, :] + r_field_cell = r_field_cell[res_z:-res_z] + r_field_cell = np.flip(r_field_cell, 0) + r_field_cell = r_field_cell.conj() + + for i in range(r_field_cell.shape[-1]): + print(i, np.linalg.norm(r_field_cell[:, :, :, i] - n_field_cell[:, :, :, i])) + + if plot_figure: + + if option['pol'] == 0: # TE + title = ['1D Ey', '1D Hx', '1D Hz', ] + else: # TM + title = ['1D Hy', '1D Ex', '1D Ez', ] + + fig, axes = plt.subplots(3, 6, figsize=(10, 5)) + + for ix in range(len(title)): + r_data = r_field_cell[:, 0, :, ix] + + im = axes[ix, 0].imshow(abs(r_data)**2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[:, 0, :, ix] + + im = axes[ix, 1].imshow(abs(n_data)**2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + axes[0, 0].title.set_text('abs**2 reti') + axes[0, 2].title.set_text('Re, reti') + axes[0, 4].title.set_text('Im, reti') + axes[0, 1].title.set_text('abs**2 meen') + axes[0, 3].title.set_text('Re, meen') + axes[0, 5].title.set_text('Im, meen') + + plt.show() + + +if __name__ == '__main__': + test1d_1(False) + test1d_2(False) diff --git a/benchmarks/reti_meent_1Dc.py b/benchmarks/reti_meent_1Dc.py new file mode 100644 index 0000000..9acef6f --- /dev/null +++ b/benchmarks/reti_meent_1Dc.py @@ -0,0 +1,185 @@ +import numpy as np +import matplotlib.pyplot as plt + +import meent + +try: + from benchmarks.interface.Reticolo import Reticolo + +except: + import sys + from pathlib import Path + sys.path.append(str(Path(__file__).parent.parent)) + + from Reticolo import Reticolo + + +def test1dc_1(plot_figure=False): + factor = 100 + option = {} + option['grating_type'] = 1 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating + option['pol'] = 0 # 0: TE, 1: TM + option['n_top'] = 2.2 # n_incidence + option['n_bot'] = 2 # n_transmission + option['theta'] = 40 * np.pi / 180 + option['phi'] = 20 * np.pi / 180 + option['fto'] = [40, 1] + option['period'] = [770 / factor] + option['wavelength'] = 777 / factor + # option['thickness'] = [100/factor, 100/factor, 100/factor, 100/factor, 100/factor, 100/factor] # final term is for h_substrate + option['thickness'] = [100 / factor, ] # final term is for h_substrate + option['fourier_type'] = 1 + + ucell = np.array( + [ + [[3, 3, 3, 3, 3, 1, 1, 1, 1, 1]], + ]) + + option['ucell'] = ucell + + res_z = 11 + reti = Reticolo() + reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, matlab_plot_field=0, res3_npts=res_z) + print('reti de_ri', np.array(reti_de_ri).flatten()) + print('reti de_ti', np.array(reti_de_ti).flatten()) + + # Numpy + backend = 0 + nmee = meent.call_mee(backend=backend, perturbation=1E-30, **option) + n_de_ri, n_de_ti = nmee.conv_solve() + n_field_cell = nmee.calculate_field(res_z=res_z, res_y=1, res_x=50) + + print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + + r_field_cell = np.moveaxis(r_field_cell, 2, 1) + r_field_cell = r_field_cell[res_z:-res_z] + r_field_cell = np.flip(r_field_cell, 0) + r_field_cell = r_field_cell.conj() + + for i in range(6): + print(i, np.linalg.norm(r_field_cell[:, :, :, i] - n_field_cell[:, :, :, i])) + + if plot_figure: + title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] + + fig, axes = plt.subplots(6, 6, figsize=(10, 5)) + + for ix in range(len(title)): + r_data = r_field_cell[:, 0, :, ix] + + im = axes[ix, 0].imshow(abs(r_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[:, 0, :, ix] + + im = axes[ix, 1].imshow(abs(n_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + ix = 0 + axes[ix, 0].title.set_text('abs**2 reti') + axes[ix, 2].title.set_text('Re, reti') + axes[ix, 4].title.set_text('Im, reti') + axes[ix, 1].title.set_text('abs**2 meen') + axes[ix, 3].title.set_text('Re, meen') + axes[ix, 5].title.set_text('Im, meen') + + plt.show() + + +def test1dc_2(plot_figure=False): + factor = 10 + option = {} + option['grating_type'] = 1 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating + option['pol'] = 1 # 0: TE, 1: TM + option['n_top'] = 1 # n_incidence + option['n_bot'] = 2 # n_transmission + option['theta'] = 0 * np.pi / 180 + option['phi'] = 90 * np.pi / 180 + option['fto'] = [10, 0] + option['period'] = [3000 / factor] + option['wavelength'] = 100 / factor + option['thickness'] = [400 / factor, ] # final term is for h_substrate + option['fourier_type'] = 1 + + ucell = np.array( + [ + [[3, 3, 3, 3, 3, 1, 1, 1, 1, 1]], + ]) + + option['ucell'] = ucell + + res_z = 11 + reti = Reticolo() + reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, matlab_plot_field=0, res3_npts=res_z) + print('reti de_ri', np.array(reti_de_ri).flatten()) + print('reti de_ti', np.array(reti_de_ti).flatten()) + + # Numpy + backend = 0 + nmee = meent.call_mee(backend=backend, perturbation=1E-30, **option) + n_de_ri, n_de_ti = nmee.conv_solve() + n_field_cell = nmee.calculate_field(res_z=res_z, res_y=1, res_x=50) + + print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + + r_field_cell = np.moveaxis(r_field_cell, 2, 1) + r_field_cell = r_field_cell[res_z:-res_z] + r_field_cell = np.flip(r_field_cell, 0) + r_field_cell = r_field_cell.conj() + + for i in range(6): + print(i, np.linalg.norm(r_field_cell[:, :, :, i] - n_field_cell[:, :, :, i])) + + if plot_figure: + title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] + + fig, axes = plt.subplots(6, 6, figsize=(10, 5)) + + for ix in range(len(title)): + r_data = r_field_cell[:, 0, :, ix] + + im = axes[ix, 0].imshow(abs(r_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[:, 0, :, ix] + + im = axes[ix, 1].imshow(abs(n_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + ix = 0 + axes[ix, 0].title.set_text('abs**2 reti') + axes[ix, 2].title.set_text('Re, reti') + axes[ix, 4].title.set_text('Im, reti') + axes[ix, 1].title.set_text('abs**2 meen') + axes[ix, 3].title.set_text('Re, meen') + axes[ix, 5].title.set_text('Im, meen') + + plt.show() + + +if __name__ == '__main__': + test1dc_1() + test1dc_2() + diff --git a/benchmarks/reti_meent_2D.py b/benchmarks/reti_meent_2D.py new file mode 100644 index 0000000..3aeb075 --- /dev/null +++ b/benchmarks/reti_meent_2D.py @@ -0,0 +1,984 @@ +import os +import numpy as np +import matplotlib.pyplot as plt + +import meent + +try: + from benchmarks.interface.Reticolo import Reticolo + +except: + import sys + from pathlib import Path + sys.path.append(str(Path(__file__).parent.parent)) + + from Reticolo import Reticolo + +# oct2py.octave.addpath(octave.genpath('E:/funcs/software/octave_calls')) + + +def test2d_1(plot_figure=False): + reti = Reticolo() + + [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell] = reti.eng.reti_2d(1, nout=5) + reti_de_ri, reti_de_ti, c, d, r_field_cell = top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, \ + bottom_tran_info.efficiency, field_cell + + factor = 1 + option = {} + option['grating_type'] = 2 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating + option['pol'] = 1 # 0: TE, 1: TM + option['n_top'] = 1 # n_incidence + option['n_bot'] = 1 # n_transmission + option['theta'] = 20 * np.pi / 180 + option['phi'] = 33 * np.pi / 180 + option['fto'] = [11, 11] + option['period'] = [770 / factor, 770 / factor] + option['wavelength'] = 777 / factor + option['thickness'] = [100 / factor, ] # final term is for h_substrate + option['fourier_type'] = 1 + + ucell = np.array( + [[ + [4, 4, 6, 6, 1, 1, 1, 1, 1, 1], + [4, 4, 6, 6, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + ]]) + + option['ucell'] = ucell + + print('reti de_ri', np.array(reti_de_ri)) + print('reti de_ti', np.array(reti_de_ti)) + + res_z = 11 + + # Numpy + backend = 0 + nmee = meent.call_mee(backend=backend, **option) + n_de_ri, n_de_ti = nmee.conv_solve() + n_field_cell = nmee.calculate_field(res_z=res_z, res_y=50, res_x=50) + # print('nmeent de_ri', n_de_ri) + # print('nmeent de_ti', n_de_ti) + print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + + r_field_cell = np.moveaxis(r_field_cell, 2, 1) + r_field_cell = r_field_cell[res_z:-res_z] + r_field_cell = np.flip(r_field_cell, 0) + r_field_cell = r_field_cell.conj() + + title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] + + for i in range(6): + print(i, np.linalg.norm(r_field_cell[:, :, :, i] - n_field_cell[:, :, :, i])) + + + if plot_figure: + title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] + fig, axes = plt.subplots(6, 6, figsize=(10, 5)) + + for ix in range(len(title)): + # r_data = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 0, ix]).conj() + r_data = r_field_cell[:, 0, :, ix] + im = axes[ix, 0].imshow(abs(r_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[:, 0, :, ix] + + im = axes[ix, 1].imshow(abs(n_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + ix = 0 + axes[ix, 0].title.set_text('abs**2 reti') + axes[ix, 2].title.set_text('Re, reti') + axes[ix, 4].title.set_text('Im, reti') + axes[ix, 1].title.set_text('abs**2 meen') + axes[ix, 3].title.set_text('Re, meen') + axes[ix, 5].title.set_text('Im, meen') + + plt.show() + + fig, axes = plt.subplots(6, 6, figsize=(10, 5)) + + for ix in range(len(title)): + # r_data = np.transpose(r_field_cell[2*res3_npts, :, :, ix]).conj() + r_data = r_field_cell[5, :, :, ix] + + im = axes[ix, 0].imshow(abs(r_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[5, :, :, ix] + + im = axes[ix, 1].imshow(abs(n_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + ix = 0 + axes[ix, 0].title.set_text('abs**2 reti') + axes[ix, 2].title.set_text('Re, reti') + axes[ix, 4].title.set_text('Im, reti') + axes[ix, 1].title.set_text('abs**2 meen') + axes[ix, 3].title.set_text('Re, meen') + axes[ix, 5].title.set_text('Im, meen') + + plt.show() + + return + + +def test2d_2(plot_figure=False): + reti = Reticolo() + + [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell] = reti.eng.reti_2d(2, nout=5) + reti_de_ri, reti_de_ti, c, d, r_field_cell = top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, \ + bottom_tran_info.efficiency, field_cell + + factor = 1 + option = {} + option['grating_type'] = 2 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating + option['pol'] = 1 # 0: TE, 1: TM + option['n_top'] = 1 # n_incidence + option['n_bot'] = 1 # n_transmission + option['theta'] = 20 * np.pi / 180 + option['phi'] = 33 * np.pi / 180 + option['fto'] = [11, 11] + option['period'] = [770 / factor, 770 / factor] + option['wavelength'] = 777 / factor + option['thickness'] = [100 / factor, ] # final term is for h_substrate + option['fourier_type'] = 1 + + ucell = np.array( + [ + [ + [0, 1, 0, 0, 1, 0], + [1, 0, 0, 0, 0, 1], + [0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 1, 0], + ]] + ) * (3) + 1 + + ucell = np.array( + [ + [[0, 0, 0, 0, 0, 0, ], + [0, 0, 1, 1, 0, 0], + [0, 1, 0, 0, 1, 0], + [0, 1, 0, 0, 1, 0], + [0, 0, 1, 1, 0, 0], + [0, 0, 0, 0, 0, 0]]] + ) * (3) + 1 + ucell = np.array( + [[ + [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + ]]) + + # ucell = np.array( + # [[ + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + # ]]) + + + ucell = np.array( + [[ + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + ]]) + + # ucell = np.array( + # [[ + # [4, 4, 6, 6, 1, 1, 1, 1, 1, 1], + # [4, 4, 6, 6, 1, 1, 1, 1, 1, 1], + # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # ]]) + + # ucell = np.array( + # [[ + # [1, 1, 3, 1, 1, 1, 1, 1, 3, 1], + # [4, 1, 3, 1, 1, 1, 1, 1, 1, 1], + # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + # [8, 1, 1, 1, 1, 1, 1, 1, 5, 1], + # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], + # ]]) + + + # ucell = np.repeat(ucell, 10, axis=2) + option['ucell'] = ucell + + # reti = Reticolo() + # reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, res3_npts=res3_npts) + print('reti de_ri', np.array(reti_de_ri)) + print('reti de_ti', np.array(reti_de_ti)) + # print('reti de_ri', np.array(reti_de_ri).flatten()) + # print('reti de_ti', np.array(reti_de_ti).flatten()) + + res_z = 11 + + # Numpy + backend = 0 + nmee = meent.call_mee(backend=backend, **option) + n_de_ri, n_de_ti = nmee.conv_solve() + n_field_cell = nmee.calculate_field(res_z=res_z, res_y=50, res_x=50) + # print('nmeent de_ri', n_de_ri) + # print('nmeent de_ti', n_de_ti) + print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + + r_field_cell = np.moveaxis(r_field_cell, 2, 1) + r_field_cell = r_field_cell[res_z:-res_z] + r_field_cell = np.flip(r_field_cell, 0) + r_field_cell = r_field_cell.conj() + + title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] + + for i in range(6): + print(i, np.linalg.norm(r_field_cell[:, :, :, i] - n_field_cell[:, :, :, i])) + + if plot_figure: + title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] + fig, axes = plt.subplots(6, 6, figsize=(10, 5)) + + for ix in range(len(title)): + # r_data = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 0, ix]).conj() + r_data = r_field_cell[:, 0, :, ix] + im = axes[ix, 0].imshow(abs(r_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[:, 0, :, ix] + + im = axes[ix, 1].imshow(abs(n_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + ix = 0 + axes[ix, 0].title.set_text('abs**2 reti') + axes[ix, 2].title.set_text('Re, reti') + axes[ix, 4].title.set_text('Im, reti') + axes[ix, 1].title.set_text('abs**2 meen') + axes[ix, 3].title.set_text('Re, meen') + axes[ix, 5].title.set_text('Im, meen') + + plt.show() + + fig, axes = plt.subplots(6, 6, figsize=(10, 5)) + + for ix in range(len(title)): + # r_data = np.transpose(r_field_cell[2*res3_npts, :, :, ix]).conj() + r_data = r_field_cell[5, :, :, ix] + + im = axes[ix, 0].imshow(abs(r_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[5, :, :, ix] + + im = axes[ix, 1].imshow(abs(n_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + ix = 0 + axes[ix, 0].title.set_text('abs**2 reti') + axes[ix, 2].title.set_text('Re, reti') + axes[ix, 4].title.set_text('Im, reti') + axes[ix, 1].title.set_text('abs**2 meen') + axes[ix, 3].title.set_text('Re, meen') + axes[ix, 5].title.set_text('Im, meen') + + plt.show() + + return + + +def test2d_3(plot_figure=False): + reti = Reticolo() + + [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell] = reti.eng.reti_2d(3, nout=5) + reti_de_ri, reti_de_ti, c, d, r_field_cell = top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, \ + bottom_tran_info.efficiency, field_cell + + factor = 1 + option = {} + option['grating_type'] = 2 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating + option['pol'] = 1 # 0: TE, 1: TM + option['n_top'] = 1 # n_incidence + option['n_bot'] = 1 # n_transmission + option['theta'] = 20 * np.pi / 180 + option['phi'] = 33 * np.pi / 180 + option['fto'] = [11, 11] + option['period'] = [770 / factor, 770 / factor] + option['wavelength'] = 777 / factor + option['thickness'] = [100 / factor, ] # final term is for h_substrate + option['fourier_type'] = 1 + + ucell = np.array( + [ + [ + [0, 1, 0, 0, 1, 0], + [1, 0, 0, 0, 0, 1], + [0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 1, 0], + ]] + ) * (3) + 1 + + ucell = np.array( + [ + [[0, 0, 0, 0, 0, 0, ], + [0, 0, 1, 1, 0, 0], + [0, 1, 0, 0, 1, 0], + [0, 1, 0, 0, 1, 0], + [0, 0, 1, 1, 0, 0], + [0, 0, 0, 0, 0, 0]]] + ) * (3) + 1 + + ucell = np.array( + [[ + [4, 4, 4, 4, 4, 1, 1, 1, 1, 1], + [4, 4, 4, 4, 4, 1, 1, 1, 1, 1], + [4, 4, 4, 4, 4, 1, 1, 1, 1, 1], + [4, 4, 4, 4, 4, 1, 1, 1, 1, 1], + [4, 4, 4, 4, 4, 1, 1, 1, 1, 1], + [4, 4, 4, 4, 4, 1, 1, 1, 1, 1], + [4, 4, 4, 4, 4, 1, 1, 1, 1, 1], + [4, 4, 4, 4, 4, 1, 1, 1, 1, 1], + [4, 4, 4, 4, 4, 1, 1, 1, 1, 1], + [4, 4, 4, 4, 4, 1, 1, 1, 1, 1], + ]]) + + option['ucell'] = ucell + + # reti = Reticolo() + # reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, res3_npts=res3_npts) + print('reti de_ri', np.array(reti_de_ri)) + print('reti de_ti', np.array(reti_de_ti)) + # print('reti de_ri', np.array(reti_de_ri).flatten()) + # print('reti de_ti', np.array(reti_de_ti).flatten()) + + res_z = 11 + + # Numpy + backend = 0 + nmee = meent.call_mee(backend=backend, **option) + n_de_ri, n_de_ti = nmee.conv_solve() + n_field_cell = nmee.calculate_field(res_z=res_z, res_y=50, res_x=50) + # print('nmeent de_ri', n_de_ri) + # print('nmeent de_ti', n_de_ti) + print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + + r_field_cell = np.moveaxis(r_field_cell, 2, 1) + r_field_cell = r_field_cell[res_z:-res_z] + r_field_cell = np.flip(r_field_cell, 0) + r_field_cell = r_field_cell.conj() + + title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] + + for i in range(6): + print(i, np.linalg.norm(r_field_cell[:, :, :, i] - n_field_cell[:, :, :, i])) + + if plot_figure: + title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] + fig, axes = plt.subplots(6, 6, figsize=(10, 5)) + + for ix in range(len(title)): + # r_data = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 0, ix]).conj() + r_data = r_field_cell[:, 0, :, ix] + im = axes[ix, 0].imshow(abs(r_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[:, 0, :, ix] + + im = axes[ix, 1].imshow(abs(n_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + ix = 0 + axes[ix, 0].title.set_text('abs**2 reti') + axes[ix, 2].title.set_text('Re, reti') + axes[ix, 4].title.set_text('Im, reti') + axes[ix, 1].title.set_text('abs**2 meen') + axes[ix, 3].title.set_text('Re, meen') + axes[ix, 5].title.set_text('Im, meen') + + plt.show() + + fig, axes = plt.subplots(6, 6, figsize=(10, 5)) + + for ix in range(len(title)): + # r_data = np.transpose(r_field_cell[2*res3_npts, :, :, ix]).conj() + r_data = r_field_cell[5, :, :, ix] + + im = axes[ix, 0].imshow(abs(r_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[5, :, :, ix] + + im = axes[ix, 1].imshow(abs(n_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + ix = 0 + axes[ix, 0].title.set_text('abs**2 reti') + axes[ix, 2].title.set_text('Re, reti') + axes[ix, 4].title.set_text('Im, reti') + axes[ix, 1].title.set_text('abs**2 meen') + axes[ix, 3].title.set_text('Re, meen') + axes[ix, 5].title.set_text('Im, meen') + + plt.show() + + return + + +def test2d_4(plot_figure=False): + reti = Reticolo() + + [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell] = reti.eng.reti_2d(4, nout=5) + reti_de_ri, reti_de_ti, c, d, r_field_cell = top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, \ + bottom_tran_info.efficiency, field_cell + + factor = 1 + option = {} + option['grating_type'] = 2 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating + option['pol'] = 0 # 0: TE, 1: TM + option['n_top'] = 1 # n_incidence + option['n_bot'] = 1 # n_transmission + option['theta'] = 0 * np.pi / 180 + option['phi'] = 0 * np.pi / 180 + option['fto'] = [11, 11] + option['period'] = [480 / factor, 480 / factor] + option['wavelength'] = 550 / factor + option['thickness'] = [220 / factor, ] # final term is for h_substrate + option['fourier_type'] = 1 + + ucell = np.array( + [ + [ + [0, 1, 0, 0, 1, 0], + [1, 0, 0, 0, 0, 1], + [0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 1, 0], + ]] + ) * (3) + 1 + + ucell = np.array( + [ + [[0, 0, 0, 0, 0, 0, ], + [0, 0, 1, 1, 0, 0], + [0, 1, 0, 0, 1, 0], + [0, 1, 0, 0, 1, 0], + [0, 0, 1, 1, 0, 0], + [0, 0, 0, 0, 0, 0]]] + ) * 3 + 1 + + option['ucell'] = ucell + + # reti = Reticolo() + # reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, res3_npts=res3_npts) + print('reti de_ri', np.array(reti_de_ri)) + print('reti de_ti', np.array(reti_de_ti)) + # print('reti de_ri', np.array(reti_de_ri).flatten()) + # print('reti de_ti', np.array(reti_de_ti).flatten()) + + res_z = 11 + + # Numpy + backend = 0 + nmee = meent.call_mee(backend=backend, **option) + n_de_ri, n_de_ti = nmee.conv_solve() + n_field_cell = nmee.calculate_field(res_z=res_z, res_y=50, res_x=50) + # print('nmeent de_ri', n_de_ri) + # print('nmeent de_ti', n_de_ti) + print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + + r_field_cell = np.moveaxis(r_field_cell, 2, 1) + r_field_cell = r_field_cell[res_z:-res_z] + r_field_cell = np.flip(r_field_cell, 0) + r_field_cell = r_field_cell.conj() + + title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] + + for i in range(6): + print(i, np.linalg.norm(r_field_cell[:, :, :, i] - n_field_cell[:, :, :, i])) + + + if plot_figure: + title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] + fig, axes = plt.subplots(6, 6, figsize=(10, 5)) + + for ix in range(len(title)): + # r_data = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 0, ix]).conj() + r_data = r_field_cell[:, 0, :, ix] + im = axes[ix, 0].imshow(abs(r_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[:, 0, :, ix] + + im = axes[ix, 1].imshow(abs(n_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + ix = 0 + axes[ix, 0].title.set_text('abs**2 reti') + axes[ix, 2].title.set_text('Re, reti') + axes[ix, 4].title.set_text('Im, reti') + axes[ix, 1].title.set_text('abs**2 meen') + axes[ix, 3].title.set_text('Re, meen') + axes[ix, 5].title.set_text('Im, meen') + + plt.show() + + fig, axes = plt.subplots(6, 6, figsize=(10, 5)) + + for ix in range(len(title)): + # r_data = np.transpose(r_field_cell[2*res3_npts, :, :, ix]).conj() + r_data = r_field_cell[5, :, :, ix] + + im = axes[ix, 0].imshow(abs(r_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[5, :, :, ix] + + im = axes[ix, 1].imshow(abs(n_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + ix = 0 + axes[ix, 0].title.set_text('abs**2 reti') + axes[ix, 2].title.set_text('Re, reti') + axes[ix, 4].title.set_text('Im, reti') + axes[ix, 1].title.set_text('abs**2 meen') + axes[ix, 3].title.set_text('Re, meen') + axes[ix, 5].title.set_text('Im, meen') + + plt.show() + + return + + +def test2d_5(plot_figure=False): + reti = Reticolo() + + [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell] = reti.eng.reti_2d(5, nout=5) + reti_de_ri, reti_de_ti, c, d, r_field_cell = top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, \ + bottom_tran_info.efficiency, field_cell + + factor = 1 + option = {} + option['grating_type'] = 2 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating + option['pol'] = 0 # 0: TE, 1: TM + option['n_top'] = 1 # n_incidence + option['n_bot'] = 1 # n_transmission + option['theta'] = 0 * np.pi / 180 + option['phi'] = 0 * np.pi / 180 + option['fto'] = [11, 11] + option['period'] = [480 / factor, 480 / factor] + option['wavelength'] = 550 / factor + option['thickness'] = [220 / factor, ] # final term is for h_substrate + option['fourier_type'] = 1 + + ucell = np.array( + [ + [ + [0, 1, 0, 0, 1, 0], + [1, 0, 0, 0, 0, 1], + [0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0], + [1, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 1, 0], + ]] + ) * (3) + 1 + + ucell = np.array( + [ + [[0, 0, 0, 0, 0, 0, ], + [0, 0, 1, 1, 0, 0], + [0, 1, 0, 0, 1, 0], + [0, 1, 0, 0, 1, 0], + [0, 0, 1, 1, 0, 0], + [0, 0, 0, 0, 0, 0]]] + ) * 3 + 1 + + option['ucell'] = ucell + + # reti = Reticolo() + # reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, res3_npts=res3_npts) + print('reti de_ri', np.array(reti_de_ri)) + print('reti de_ti', np.array(reti_de_ti)) + # print('reti de_ri', np.array(reti_de_ri).flatten()) + # print('reti de_ti', np.array(reti_de_ti).flatten()) + + res_z = 11 + + # Numpy + backend = 0 + nmee = meent.call_mee(backend=backend, **option) + n_de_ri, n_de_ti = nmee.conv_solve() + n_field_cell = nmee.calculate_field(res_z=res_z, res_y=50, res_x=50) + # print('nmeent de_ri', n_de_ri) + # print('nmeent de_ti', n_de_ti) + print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + + r_field_cell = np.moveaxis(r_field_cell, 2, 1) + r_field_cell = r_field_cell[res_z:-res_z] + r_field_cell = np.flip(r_field_cell, 0) + r_field_cell = r_field_cell.conj() + + for i in range(6): + print(i, np.linalg.norm(r_field_cell[:, :, :, i] - n_field_cell[:, :, :, i])) + + if plot_figure: + title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] + fig, axes = plt.subplots(6, 6, figsize=(10, 5)) + + for ix in range(len(title)): + # r_data = np.flipud(r_field_cell[res3_npts:-res3_npts, :, 0, ix]).conj() + r_data = r_field_cell[:, 0, :, ix] + im = axes[ix, 0].imshow(abs(r_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[:, 0, :, ix] + + im = axes[ix, 1].imshow(abs(n_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + axes[0, 0].title.set_text('abs**2 reti') + axes[0, 2].title.set_text('Re, reti') + axes[0, 4].title.set_text('Im, reti') + axes[0, 1].title.set_text('abs**2 meen') + axes[0, 3].title.set_text('Re, meen') + axes[0, 5].title.set_text('Im, meen') + + plt.show() + + fig, axes = plt.subplots(6, 6, figsize=(10, 5)) + + for ix in range(len(title)): + # r_data = np.transpose(r_field_cell[2*res3_npts, :, :, ix]).conj() + r_data = r_field_cell[5, :, :, ix] + + im = axes[ix, 0].imshow(abs(r_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[5, :, :, ix] + + im = axes[ix, 1].imshow(abs(n_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + axes[0, 0].title.set_text('abs**2 reti') + axes[0, 2].title.set_text('Re, reti') + axes[0, 4].title.set_text('Im, reti') + axes[0, 1].title.set_text('abs**2 meen') + axes[0, 3].title.set_text('Re, meen') + axes[0, 5].title.set_text('Im, meen') + + plt.show() + + return + + +def test2d_6(plot_figure=False): + + res_z = 11 + + reti = Reticolo() + + [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell] = reti.eng.reti_2d(6, nout=5) + reti_de_ri, reti_de_ti, c, d, r_field_cell = top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, \ + bottom_tran_info.efficiency, field_cell + print('reti de_ri', np.array(reti_de_ri)) + print('reti de_ti', np.array(reti_de_ti)) + r_field_cell = np.moveaxis(r_field_cell, 2, 1) + r_field_cell = r_field_cell[res_z:-res_z] + r_field_cell = np.flip(r_field_cell, 0) + r_field_cell = r_field_cell.conj() + + factor = 1 + option = {} + option['grating_type'] = 2 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating + option['pol'] = 0 # 0: TE, 1: TM + option['n_top'] = 1 # n_incidence + option['n_bot'] = 1 # n_transmission + option['theta'] = 10 * np.pi / 180 + option['phi'] = 20 * np.pi / 180 + option['fto'] = [11, 11] + option['period'] = [480 / factor, 480 / factor] + option['wavelength'] = 550 / factor + option['thickness'] = [220 / factor, ] # final term is for h_substrate + option['fourier_type'] = 1 + + # Numpy + backend = 0 + mee = meent.call_mee(backend=backend, **option) + + instructions = [ + # layer 1 + [1, + [ + # obj 1 + ['rectangle', 0+240, 120+240, 160, 80, 4, 0, 0, 0], + # obj 2 + ['rectangle', 0+240, -120+240, 160, 80, 4, 0, 0, 0], + # obj 3 + ['rectangle', 120+240, 0+240, 80, 160, 4, 0, 0, 0], + # obj 4 + ['rectangle', -120+240, 0+240, 80, 160, 4, 0, 0, 0], + ], + ], + ] + + # instructions = [ + # # layer 1 + # [1, + # [ + # # obj 1 + # ['ellipse', 75, 225, 101.5, 81.5, si, 20 * np.pi / 180, 40, 40], + # # obj 2 + # ['rectangle', 225, 75, 98.5, 81.5, si, 0, 0, 0], + # ], + # ], + # # layer 2 + # [si3n4, + # [ + # # obj 1 + # ['rectangle', 50, 150, 31, 300, si, 0, 0, 0], + # # obj 2 + # ['rectangle', 200, 150, 49.5, 300, si, 0, 0, 0], + # ], + # ], + # # layer 3 + # [si, + # [] + # ], + # ] + + mee.modeling_vector_instruction(instructions) + + n_de_ri, n_de_ti = mee.conv_solve() + n_field_cell = mee.calculate_field(res_z=res_z, res_y=50, res_x=50) + # print('nmeent de_ri', n_de_ri) + # print('nmeent de_ti', n_de_ti) + print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + + for i in range(6): + print(i, np.linalg.norm(r_field_cell[:, :, :, i] - n_field_cell[:, :, :, i])) + + if plot_figure: + title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] + fig, axes = plt.subplots(6, 6, figsize=(10, 5)) + + for ix in range(len(title)): + r_data = r_field_cell[:, 0, :, ix] + im = axes[ix, 0].imshow(abs(r_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[:, 0, :, ix] + + im = axes[ix, 1].imshow(abs(n_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + axes[0, 0].title.set_text('abs**2 reti') + axes[0, 2].title.set_text('Re, reti') + axes[0, 4].title.set_text('Im, reti') + axes[0, 1].title.set_text('abs**2 meen') + axes[0, 3].title.set_text('Re, meen') + axes[0, 5].title.set_text('Im, meen') + + plt.show() + + fig, axes = plt.subplots(6, 6, figsize=(10, 5)) + + for ix in range(len(title)): + r_data = r_field_cell[5, :, :, ix] + + im = axes[ix, 0].imshow(abs(r_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 0], shrink=1) + im = axes[ix, 2].imshow(r_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 2], shrink=1) + im = axes[ix, 4].imshow(r_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 4], shrink=1) + + n_data = n_field_cell[5, :, :, ix] + + im = axes[ix, 1].imshow(abs(n_data) ** 2, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 1], shrink=1) + + im = axes[ix, 3].imshow(n_data.real, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 3], shrink=1) + + im = axes[ix, 5].imshow(n_data.imag, cmap='jet', aspect='auto') + fig.colorbar(im, ax=axes[ix, 5], shrink=1) + + axes[0, 0].title.set_text('abs**2 reti') + axes[0, 2].title.set_text('Re, reti') + axes[0, 4].title.set_text('Im, reti') + axes[0, 1].title.set_text('abs**2 meen') + axes[0, 3].title.set_text('Re, meen') + axes[0, 5].title.set_text('Im, meen') + + plt.show() + + return + + +if __name__ == '__main__': + + test2d_1() + test2d_2() + test2d_3() + test2d_4() + test2d_5() + test2d_6() diff --git a/examples/vector_1d.py b/examples/vector_1d.py index 349ea56..c2f4040 100644 --- a/examples/vector_1d.py +++ b/examples/vector_1d.py @@ -41,7 +41,7 @@ def run(): ] mee = meent.call_mee(**rcwa_options) - mee.modeling_vector_instruction(rcwa_options, instructions) + mee.modeling_vector_instruction(instructions) de_ri, de_ti = mee.conv_solve() print(de_ri) diff --git a/examples/vector_1d_verification.py b/examples/vector_1d_verification.py index bf0b34e..b9a79be 100644 --- a/examples/vector_1d_verification.py +++ b/examples/vector_1d_verification.py @@ -8,7 +8,7 @@ def run_vector(rcwa_options, backend): rcwa_options['backend'] = backend mee = meent.call_mee(**rcwa_options) - mee.modeling_vector_instruction(rcwa_options, instructions) + mee.modeling_vector_instruction(instructions) de_ri, de_ti = mee.conv_solve() diff --git a/examples/vector_2d.py b/examples/vector_2d.py index 6d2f15f..5a11568 100644 --- a/examples/vector_2d.py +++ b/examples/vector_2d.py @@ -41,7 +41,7 @@ def run(): ] mee = meent.call_mee(**rcwa_options) - mee.modeling_vector_instruction(rcwa_options, instructions) + mee.modeling_vector_instruction(instructions) de_ri, de_ti = mee.conv_solve() print(de_ri) diff --git a/examples/vector_2d_verification.py b/examples/vector_2d_verification.py index 69c6c23..ecc425b 100644 --- a/examples/vector_2d_verification.py +++ b/examples/vector_2d_verification.py @@ -8,7 +8,7 @@ def run_vector(rcwa_options, backend): rcwa_options['backend'] = backend mee = meent.call_mee(**rcwa_options) - mee.modeling_vector_instruction(rcwa_options, instructions) + mee.modeling_vector_instruction(instructions) de_ri, de_ti = mee.conv_solve() diff --git a/meent/on_numpy/emsolver/_base.py b/meent/on_numpy/emsolver/_base.py index 7c31d90..5707143 100644 --- a/meent/on_numpy/emsolver/_base.py +++ b/meent/on_numpy/emsolver/_base.py @@ -101,7 +101,6 @@ def pol(self, pol): self._pol = pol psi = np.pi / 2 * (1 - self.pol) - # TODO: direction of ky_vector self._psi = np.array(psi, dtype=self.type_float) @property @@ -195,10 +194,7 @@ def thickness(self, thickness): def get_kx_ky_vector(self, wavelength): fto_x_range = np.arange(-self.fto[0], self.fto[0] + 1) - - # TODO: reverse? fto_y_range = np.arange(-self.fto[1], self.fto[1] + 1) - # fto_y_range = np.arange(-self.fto[1], self.fto[1] + 1)[::-1] kx_vector = (self.n_top * np.sin(self.theta) * np.cos(self.phi) + fto_x_range * ( wavelength / self.period[0])).astype(self.type_complex) @@ -250,7 +246,7 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): raise ValueError if self.connecting_algo == 'TMM': - de_ri, de_ti, T1 = transfer_1d_4(self.pol, k0, F, G, T, kz_top, kz_bot, self.theta, self.n_top, self.n_bot, + de_ri, de_ti, T1 = transfer_1d_4(self.pol, F, G, T, kz_top, kz_bot, self.theta, self.n_top, self.n_bot, type_complex=self.type_complex) self.T1 = T1 @@ -298,7 +294,7 @@ def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): big_X, big_F, big_G, big_T, big_A_i, big_B, \ = transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=self.type_complex) - layer_info = [epz_conv_i, W, V, q, d, big_A_i, big_B] # TODO: change field recover code + layer_info = [epz_conv_i, W, V, q, d, big_A_i, big_B] self.layer_info_list.append(layer_info) elif self.connecting_algo == 'SMM': diff --git a/meent/on_numpy/emsolver/convolution_matrix.py b/meent/on_numpy/emsolver/convolution_matrix.py index a5c478e..b151547 100644 --- a/meent/on_numpy/emsolver/convolution_matrix.py +++ b/meent/on_numpy/emsolver/convolution_matrix.py @@ -4,7 +4,10 @@ def cell_compression(cell, type_complex=np.complex128): - cell = np.flipud(cell) # TODO + cell = np.flipud(cell) + # This is needed because the comp. algo begins from 0 to period (RC coord. system). + # On the other hand, the field data is from period to 0 (XY coord. system). + # Will be flipped again during field reconstruction. if type_complex == np.complex128: type_float = np.float64 @@ -28,23 +31,11 @@ def cell_compression(cell, type_complex=np.complex128): cell_x = np.array(cell_x).T cell_x_next = np.roll(cell_x, -1, axis=0) - # for row in range(cell_x.shape[0]): - # if not (cell_x[row, :] == cell_x_next[row, :]).all() or (row == cell_x.shape[0] - 1): - # y.append(step_y * (row + 1)) - # cell_xy.append(cell_x[row, :]) - for row in range(cell_x.shape[0]): if not (cell_x[row, :] == cell_x_next[row, :]).all() or (row == cell_x.shape[0] - 1): y.append(step_y * (row + 1)) cell_xy.append(cell_x[row, :]) - # y_length = cell_x.shape[0] - # for row in range(y_length): - # if not (cell_x[row, :] == cell_x_next[row, :]).all() or (row == cell_x.shape[0] - 1): - # y.append(step_y * (row + 1)) - # y.append(step_y * (y_length-row + 1)) - # cell_xy.append(cell_x[row, :]) - x = np.array(x).reshape((-1, 1)) y = np.array(y).reshape((-1, 1)) cell_comp = np.array(cell_xy) diff --git a/meent/on_numpy/emsolver/field_distribution.py b/meent/on_numpy/emsolver/field_distribution.py index bc00b7f..48ac36c 100644 --- a/meent/on_numpy/emsolver/field_distribution.py +++ b/meent/on_numpy/emsolver/field_distribution.py @@ -1,87 +1,12 @@ import numpy as np -def field_dist_1dd(wavelength, n_I, theta, kx_vector, T1, layer_info_list, period, pol, res_x=20, res_y=20, res_z=20, - type_complex=np.complex128): - res_y = 1 - - k0 = 2 * np.pi / wavelength - Kx = np.diag(kx_vector) - fourier_centering = np.exp(-1j * k0 * n_I * np.sin(theta) * -period[0] / 2) - - field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) - - T_layer = T1 - - # From the first layer - for idx_layer, (E_conv_i, W, V, q, d, a_i, b) in enumerate(layer_info_list[::-1]): - # E_conv_i = np.linalg.inv(E_conv_i) - - X = np.diag(np.exp(-k0 * q * d)) - c1 = T_layer[:, None] - c2 = b @ a_i @ X @ T_layer[:, None] - Q = np.diag(q) - - if pol == 0: - V = W @ Q - EKx = None - else: - V = E_conv_i @ W @ Q - EKx = E_conv_i @ Kx - - z_1d = np.linspace(0, d, res_z).reshape((-1, 1, 1)) - # z_1d = np.linspace(-d/2, d/2, res_z).reshape((-1, 1, 1)) - - for k in range(res_z): - z = k / res_z * d - z = z_1d[k] - - if pol == 0: # TE - Sy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Ux = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - f_here = (-1j) * Kx @ Sy - - for j in range(res_y): - for i in range(res_x): - # x_1d = np.linspace(0, res_x, res_x) - - # TODO: delete +1. +1 is to match to reticolo - x = (i+1) * period[0] / res_x - # x = x_1d[i] * period[0] / res_x - - Ey = Sy.T @ np.exp(-1j * k0 * kx_vector.reshape((-1, 1)) * x) * fourier_centering - Hx = 1j * Ux.T @ np.exp(-1j*k0 * kx_vector.reshape((-1, 1)) * x) * fourier_centering - Hz = 1j * f_here.T @ np.exp(-1j*k0 * kx_vector.reshape((-1, 1)) * x) * fourier_centering - - field_cell[res_z * idx_layer + k, j, i-1] = [Ey[0, 0], Hx[0, 0], Hz[0, 0]] - else: # TM - Uy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Sx = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - - f_here = (-1j) * EKx @ Uy # there is a better option for convergence - - for j in range(res_y): - for i in range(res_x): - x = i * period[0] / res_x - - Hy = Uy.T @ np.exp(-1j * kx_vector.reshape((-1, 1)) * x) * fourier_centering - Ex = 1j * Sx.T @ np.exp(-1j * kx_vector.reshape((-1, 1)) * x) * fourier_centering - Ez = f_here.T @ np.exp(-1j * kx_vector.reshape((-1, 1)) * x) * fourier_centering - - field_cell[res_z * idx_layer + k, j, i] = [Hy[0, 0], Ex[0, 0], Ez[0, 0]] - - T_layer = a_i @ X @ T_layer - - return field_cell - - -def field_dist_1d(wavelength, n_I, theta, kx, T1, layer_info_list, period, +def field_dist_1d(wavelength, kx, T1, layer_info_list, period, pol, res_x=20, res_y=1, res_z=20, type_complex=np.complex128): res_y = 1 k0 = 2 * np.pi / wavelength Kx = np.diag(kx) - fourier_centering = np.exp(-1j * k0 * n_I * np.sin(theta) * -period[0] / 2) field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) @@ -97,19 +22,19 @@ def field_dist_1d(wavelength, n_I, theta, kx, T1, layer_info_list, period, z_1d = np.linspace(0, res_z, res_z).reshape((-1, 1, 1)) / res_z * d - # tODO: merge My and Mx + My = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + Mx = V @ (diag_exp_batch(-k0 * Q * z_1d) @ -c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) if pol == 0: - My = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - Mx = V @ (diag_exp_batch(-k0 * Q * z_1d) @ -c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) Mz = -1j * Kx @ My else: - My = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - Mx = V @ (diag_exp_batch(-k0 * Q * z_1d) @ -c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) Mz = -1j * epz_conv_i @ Kx @ My if pol else -1j * Kx @ My - x_1d = np.arange(1, res_x+1).reshape((1, -1, 1)) - x_1d = x_1d * period[0] / res_x + # x_1d = np.arange(1, res_x+1).reshape((1, -1, 1)) + # x_1d = x_1d * period[0] / res_x + + x_1d = np.linspace(0, period[0], res_x).reshape((1, -1, 1)) + x_2d = np.tile(x_1d, (res_y, 1, 1)) x_2d = x_2d * kx * k0 x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) @@ -118,17 +43,16 @@ def field_dist_1d(wavelength, n_I, theta, kx, T1, layer_info_list, period, inv_fourier = inv_fourier.reshape((res_y, res_x, -1)) if pol == 0: - Fy = inv_fourier[:, :, None, :] @ My[:, None, None, :, :] * fourier_centering - Fx = 1j * inv_fourier[:, :, None, :] @ Mx[:, None, None, :, :] * fourier_centering - Fz = 1j * inv_fourier[:, :, None, :] @ Mz[:, None, None, :, :] * fourier_centering + Fy = inv_fourier[:, :, None, :] @ My[:, None, None, :, :] + Fx = 1j * inv_fourier[:, :, None, :] @ Mx[:, None, None, :, :] + Fz = 1j * inv_fourier[:, :, None, :] @ Mz[:, None, None, :, :] else: - Fy = inv_fourier[:, :, None, :] @ My[:, None, None, :, :] * fourier_centering - Fx = -1j * inv_fourier[:, :, None, :] @ Mx[:, None, None, :, :] * fourier_centering - Fz = -1j * inv_fourier[:, :, None, :] @ Mz[:, None, None, :, :] * fourier_centering + Fy = inv_fourier[:, :, None, :] @ My[:, None, None, :, :] + Fx = -1j * inv_fourier[:, :, None, :] @ Mx[:, None, None, :, :] + Fz = -1j * inv_fourier[:, :, None, :] @ Mz[:, None, None, :, :] val = np.concatenate((Fy.squeeze(-1), Fx.squeeze(-1), Fz.squeeze(-1)), axis=-1) - val = np.roll(val, 1, 2) field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val T_layer = A_i @ X @ T_layer @@ -136,7 +60,7 @@ def field_dist_1d(wavelength, n_I, theta, kx, T1, layer_info_list, period, return field_cell -def field_dist_2d(wavelength, n_I, theta, phi, kx, ky, T1, layer_info_list, period, +def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, res_x=20, res_y=20, res_z=20, type_complex=np.complex128): k0 = 2 * np.pi / wavelength @@ -147,12 +71,6 @@ def field_dist_2d(wavelength, n_I, theta, phi, kx, ky, T1, layer_info_list, peri Kx = np.diag(np.tile(kx, ff_y).flatten()) Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) - # fourier_centering_x = np.exp(-1j * k0 * n_I * np.sin(theta) * np.cos(phi) * -period[0] / 2) - # fourier_centering_y = np.exp(-1j * k0 * n_I * np.sin(theta) * np.sin(phi) * -period[1] / 2) - # - # fourier_centering = fourier_centering_x * fourier_centering_y - # fourier_centering = 1 - field_cell = np.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) T_layer = T1 @@ -180,8 +98,6 @@ def field_dist_2d(wavelength, n_I, theta, phi, kx, ky, T1, layer_info_list, peri z_1d = np.linspace(0, res_z, res_z).reshape((-1, 1, 1)) / res_z * d # z_1d = np.arange(0, res_z, res_z).reshape((-1, 1, 1)) / res_z * d - # ff = len(c) // 4 - c1_plus = c[0 * ff_xy:1 * ff_xy] c2_plus = c[1 * ff_xy:2 * ff_xy] c1_minus = c[2 * ff_xy:3 * ff_xy] @@ -203,21 +119,11 @@ def field_dist_2d(wavelength, n_I, theta, phi, kx, ky, T1, layer_info_list, peri Sz = -1j * epz_conv_i @ (Kx @ Uy - Ky @ Ux) Uz = -1j * (Kx @ Sy - Ky @ Sx) - x_1d = np.arange(1, res_x+1).reshape((1, -1, 1)) - x_1d = x_1d * period[0] / res_x - x_1d = np.linspace(0, period[0], res_x).reshape((1, -1, 1)) # x_1d = np.arange(res_x).reshape((1, -1, 1)) * period[0] / res_x + x_1d = np.linspace(0, period[0], res_x).reshape((1, -1, 1)) - # y_1d = np.arange(1, res_y+1).reshape((-1, 1, 1)) - # y_1d = np.arange(res_y, 0, -1).reshape((-1, 1, 1)) - # y_1d = np.arange(res_y-1, -1, -1).reshape((-1, 1, 1)) - - # y_1d = np.arange(res_y-1, -1, -1).reshape((-1, 1, 1)) - # y_1d = np.arange(res_y).reshape((-1, 1, 1)) - # y_1d = y_1d * period[1] / res_y - # y_1d = np.linspace(0, period[1], res_y).reshape((-1, 1, 1)) - y_1d = np.linspace(period[1], 0, res_y).reshape((-1, 1, 1)) # TODO - # y_1d = np.linspace(0, period[1], res_y)[::-1].reshape((-1, 1, 1)) + # y_1d = np.arange(res_y-1, -1, -1).reshape((-1, 1, 1)) * period[1] / res_y + y_1d = np.linspace(0, period[1], res_y)[::-1].reshape((-1, 1, 1)) x_2d = np.tile(x_1d, (res_y, 1, 1)) x_2d = x_2d * kx * k0 @@ -230,13 +136,6 @@ def field_dist_2d(wavelength, n_I, theta, phi, kx, ky, T1, layer_info_list, peri inv_fourier = np.exp(-1j * x_2d) * np.exp(-1j * y_2d) inv_fourier = inv_fourier.reshape((res_y, res_x, -1)) - # Ex = inv_fourier[:, :, None, :] @ Sx[:, None, None, :, :] * fourier_centering - # Ey = inv_fourier[:, :, None, :] @ Sy[:, None, None, :, :] * fourier_centering - # Ez = inv_fourier[:, :, None, :] @ Sz[:, None, None, :, :] * fourier_centering - # Hx = 1j * inv_fourier[:, :, None, :] @ Ux[:, None, None, :, :] * fourier_centering - # Hy = 1j * inv_fourier[:, :, None, :] @ Uy[:, None, None, :, :] * fourier_centering - # Hz = 1j * inv_fourier[:, :, None, :] @ Uz[:, None, None, :, :] * fourier_centering - Ex = inv_fourier[:, :, None, :] @ Sx[:, None, None, :, :] Ey = inv_fourier[:, :, None, :] @ Sy[:, None, None, :, :] Ez = inv_fourier[:, :, None, :] @ Sz[:, None, None, :, :] diff --git a/meent/on_numpy/emsolver/rcwa.py b/meent/on_numpy/emsolver/rcwa.py index 711ea2a..17af558 100644 --- a/meent/on_numpy/emsolver/rcwa.py +++ b/meent/on_numpy/emsolver/rcwa.py @@ -50,7 +50,8 @@ def __init__(self, self.fourier_type = fourier_type self.enhanced_dfs = enhanced_dfs - self.layer_info_list = [] + # self.layer_info_list = [] + # self._layer_info_list = [] # grating type setting if self.grating_type is None: @@ -78,6 +79,8 @@ def ucell(self): @ucell.setter def ucell(self, ucell): + self._modeling_type_assigned = 0 # Raster type + if isinstance(ucell, np.ndarray): if ucell.dtype in (np.int64, np.float64, np.int32, np.float32): dtype = self.type_float @@ -91,14 +94,20 @@ def ucell(self, ucell): else: raise ValueError + @property + def ucell_info_list(self): + return self._ucell_info_list + + @ucell_info_list.setter + def ucell_info_list(self, ucell_info_list): + + self._modeling_type_assigned = 1 # Vector type + self._ucell_info_list = ucell_info_list + def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): if self._grating_type_assigned == 0: de_ri, de_ti, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) - # elif self._grating_type_assigned == 1: - # de_ri, de_ti, layer_info_list, T1 = self.solve_1d_conical(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) - # elif self._grating_type_assigned == 2: - # de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) else: de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) @@ -119,18 +128,23 @@ def conv_solve(self, **kwargs): if self._modeling_type_assigned == 0: # Raster if self.fourier_type == 0: - enhance = False epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, - enhanced_dfs=enhance) - - elif (self.fourier_type == 1) or (self.fourier_type is None): - enhance = True - epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( - self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, - enhanced_dfs=enhance) - - elif self.fourier_type == 2: + enhanced_dfs=self.enhanced_dfs) + + # if self.fourier_type == 0: + # enhance = False + # epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( + # self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, + # enhanced_dfs=enhance) + # + # elif (self.fourier_type == 1) or (self.fourier_type is None): + # enhance = True + # epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( + # self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, + # enhanced_dfs=enhance) + + elif self.fourier_type == 1: epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_continuous( self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex) else: @@ -150,95 +164,29 @@ def conv_solve(self, **kwargs): return de_ri, de_ti - def calculate_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): + def calculate_field(self, res_x=20, res_y=20, res_z=20): # TODO: change res_ to accept array of points. kx, ky = self.get_kx_ky_vector(wavelength=self.wavelength) if self._grating_type_assigned == 0: res_y = 1 - field_cell = field_dist_1d(self.wavelength, self.n_top, self.theta, kx, self.T1, + field_cell = field_dist_1d(self.wavelength, kx, self.T1, self.layer_info_list, self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif self._grating_type_assigned == 1: res_y = 1 - field_cell = field_dist_2d(self.wavelength, self.n_top, self.theta, self.phi, kx, ky, self.T1, self.layer_info_list, self.period, + field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) else: - field_cell = field_dist_2d(self.wavelength, self.n_top, self.theta, self.phi, kx, ky, self.T1, self.layer_info_list, self.period, + field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) - # - # if self._grating_type_assigned == 0: - # res_y = 1 - # if field_algo == 0: - # field_cell = field_dist_1d_vanilla(self.wavelength, kx, - # self.T1, self.layer_info_list, self.period, self.pol, - # res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) - # elif field_algo == 1: - # field_cell = field_dist_1d_vectorized_ji(self.wavelength, kx, self.T1, self.layer_info_list, - # self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, - # type_complex=self.type_complex) - # elif field_algo == 2: - # field_cell = field_dist_1d(self.wavelength, kx, self.T1, - # self.layer_info_list, self.period, self.pol, - # res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) - # else: - # raise ValueError - # # elif self._grating_type_assigned == 1: - # # res_y = 1 - # # if field_algo == 0: - # # field_cell = field_dist_1d_conical_vanilla(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, - # # res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) - # # elif field_algo == 1: - # # field_cell = field_dist_1d_conical_vectorized_ji(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, - # # res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) - # # elif field_algo == 2: - # # field_cell = field_dist_1d_conical(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, - # # res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) - # # else: - # # raise ValueError - # - # # elif self._grating_type_assigned == 2: - # - # else: - # if field_algo == 0: - # field_cell = field_dist_2d_vanilla(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, - # res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) - # elif field_algo == 1: - # field_cell = field_dist_2d_vectorized_ji(self.wavelength, kx, ky, self.T1, self.layer_info_list, - # self.period, res_x=res_x, res_y=res_y, res_z=res_z, - # type_complex=self.type_complex) - # elif field_algo == 2: - # field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, - # self.period, res_x=res_x, res_y=res_y, res_z=res_z, - # type_complex=self.type_complex) - # else: - # raise ValueError - # else: - # raise ValueError return field_cell def conv_solve_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): de_ri, de_ti = self.conv_solve() - field_cell = self.calculate_field(res_x, res_y, res_z, field_algo=field_algo) + field_cell = self.calculate_field(res_x, res_y, res_z) return de_ri, de_ti, field_cell def field_plot(self, field_cell): field_plot(field_cell, self.pol) - - def calculate_field_all(self, res_x=20, res_y=20, res_z=20): - t0 = time.time() - field_cell0 = self.calculate_field(res_x=res_x, res_y=res_y, res_z=res_z, field_algo=0) - print('no vector', time.time() - t0) - t0 = time.time() - field_cell1 = self.calculate_field(res_x=res_x, res_y=res_y, res_z=res_z, field_algo=1) - print('ji vector', time.time() - t0) - t0 = time.time() - field_cell2 = self.calculate_field(res_x=res_x, res_y=res_y, res_z=res_z, field_algo=2) - print('kji vector', time.time() - t0) - - print('gap(1-0): ', np.linalg.norm(field_cell1 - field_cell0)) - print('gap(2-1): ', np.linalg.norm(field_cell2 - field_cell1)) - print('gap(0-2): ', np.linalg.norm(field_cell0 - field_cell2)) - - return field_cell0, field_cell1, field_cell2 diff --git a/meent/on_numpy/emsolver/transfer_method.py b/meent/on_numpy/emsolver/transfer_method.py index 1692b82..8da2996 100644 --- a/meent/on_numpy/emsolver/transfer_method.py +++ b/meent/on_numpy/emsolver/transfer_method.py @@ -3,7 +3,6 @@ def transfer_1d_1(pol, ff_x, kx, n_I, n_II, type_complex=np.complex128): - # kx = k0 * (n_top * np.sin(theta) + fourier_indices * (wavelength / period[0])).astype(type_complex) ff_xy = ff_x * 1 kz_top = (n_I ** 2 - kx ** 2) ** 0.5 @@ -12,8 +11,6 @@ def transfer_1d_1(pol, ff_x, kx, n_I, n_II, type_complex=np.complex128): kz_top = kz_top.conjugate() kz_bot = kz_bot.conjugate() - # Kx = np.diag(kx / k0) - F = np.eye(ff_xy, dtype=type_complex) if pol == 0: # TE @@ -30,7 +27,7 @@ def transfer_1d_1(pol, ff_x, kx, n_I, n_II, type_complex=np.complex128): raise ValueError T = np.eye(ff_xy, dtype=type_complex) - # TODO: F G T + return kz_top, kz_bot, F, G, T @@ -49,7 +46,6 @@ def transfer_1d_2(pol, kx, epx_conv, epy_conv, epz_conv_i, type_complex=np.compl elif pol == 1: B = Kx @ epz_conv_i @ Kx - np.eye(epy_conv.shape[0], dtype=type_complex) - # eigenvalues, W = np.linalg.eig(E_conv @ B) eigenvalues, W = np.linalg.eig(epx_conv @ B) eigenvalues += 0j # to get positive square root @@ -87,7 +83,7 @@ def transfer_1d_3(k0, W, V, q, d, F, G, T, type_complex=np.complex128): return X, F, G, T, A_i, B -def transfer_1d_4(pol, k0, F, G, T, kz_top, kz_bot, theta, n_I, n_II, type_complex=np.complex128): +def transfer_1d_4(pol, F, G, T, kz_top, kz_bot, theta, n_I, n_II, type_complex=np.complex128): ff_xy = len(kz_top) @@ -163,7 +159,6 @@ def transfer_1d_conical_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=n # A = Kx ** 2 - np.linalg.inv(epz_conv_i) B = Kx @ epz_conv_i @ Kx - I - # TODO: Rearrange W and V Omega2_RL = Ky ** 2 + A Omega2_LR = Ky ** 2 + B @ epx_conv # Omega2_LR = Ky ** 2 + B @ np.linalg.inv(epz_conv_i) diff --git a/meent/on_numpy/modeler/modeling.py b/meent/on_numpy/modeler/modeling.py index 0fd1d8c..9ff9820 100644 --- a/meent/on_numpy/modeler/modeling.py +++ b/meent/on_numpy/modeler/modeling.py @@ -536,7 +536,6 @@ def vector_per_layer_numeric(self, layer_info, x64=True): top_left[0] = top_left[0] + perturbation else: - # top_left[0] = top_left[0] - (top_left[0] * perturbation) # TODO: plus or minus? top_left[0] = top_left[0] + (top_left[0] * perturbation) # TODO: change; save how many perturbations were applied in a variable row_list.insert(index, top_left[0]) break @@ -668,7 +667,7 @@ def put_refractive_index_in_ucell(self, ucell, mat_list, wl, type_complex=np.com for i_mat, material in enumerate(mat_list): mask = np.nonzero(ucell_mask == i_mat) - if type(material) == str: + if type(material) is str: if not self.mat_table: self.mat_table = read_material_table() assign_value = find_nk_index(material, self.mat_table, wl) @@ -678,20 +677,7 @@ def put_refractive_index_in_ucell(self, ucell, mat_list, wl, type_complex=np.com return res - def modeling_vector_instruction(self, rcwa_options, instructions): - - # wavelength = rcwa_options['wavelength'] - - # # Thickness update - # t = rcwa_options['thickness'] - # for i in range(len(t)): - # if f'l{i + 1}_thickness' in fitting_parameter_name: - # t[i] = fitting_parameter_value[fitting_parameter_name[f'l{i + 1}_thickness']].reshape((1, 1)) - # mee.thickness = t - - # mat_table = read_material_table() - - # TODO: refractive index support string for nI and nII + def modeling_vector_instruction(self, instructions): # Modeling layer_info_list = [] From a9eb59038f611c4a9259b1558cfa3fc39ea67758 Mon Sep 17 00:00:00 2001 From: yonghakim Date: Tue, 6 Aug 2024 17:47:34 +0900 Subject: [PATCH 09/15] Updated JAXMeent and TorchMeent. --- QA/run_debug.py | 2 +- QA/run_test.py | 2 +- QA/test_case.py | 12 +- benchmarks/benchmark_against_reticolo.py | 67 ++ benchmarks/interface/GRCWA.py | 2 +- benchmarks/interface/TORCWA.py | 20 +- benchmarks/interface/reticolo_res2.m | 2 +- benchmarks/interface/reticolo_res3.m | 2 +- meent/main.py | 12 +- meent/on_jax/emsolver/__init__.py | 14 +- meent/on_jax/emsolver/_base.py | 392 ++++---- meent/on_jax/emsolver/convolution_matrix.py | 331 +++---- meent/on_jax/emsolver/field_distribution.py | 928 ++---------------- meent/on_jax/emsolver/fourier_analysis.py | 137 +++ meent/on_jax/emsolver/rcwa.py | 259 +++-- meent/on_jax/emsolver/smm_util.py | 6 +- meent/on_jax/emsolver/transfer_method.py | 439 ++++++++- meent/on_jax/mee.py | 11 +- meent/on_jax/modeler/modeling.py | 2 +- meent/on_jax/optimizer/optimizer.py | 2 +- meent/on_numpy/emsolver/_base.py | 51 +- meent/on_numpy/emsolver/convolution_matrix.py | 15 +- meent/on_numpy/emsolver/field_distribution.py | 16 +- meent/on_numpy/emsolver/fourier_analysis.py | 6 +- meent/on_numpy/emsolver/rcwa.py | 12 +- meent/on_numpy/emsolver/smm_util.py | 6 +- meent/on_numpy/emsolver/transfer_method.py | 84 +- meent/on_torch/emsolver/_base.py | 397 ++++---- meent/on_torch/emsolver/convolution_matrix.py | 279 ++++-- meent/on_torch/emsolver/field_distribution.py | 527 ++++------ meent/on_torch/emsolver/fourier_analysis.py | 538 ++++++++++ meent/on_torch/emsolver/rcwa.py | 321 +++--- meent/on_torch/emsolver/smm_util.py | 6 +- meent/on_torch/emsolver/transfer_method.py | 332 +++++-- 34 files changed, 2924 insertions(+), 2308 deletions(-) create mode 100644 meent/on_jax/emsolver/fourier_analysis.py create mode 100644 meent/on_torch/emsolver/fourier_analysis.py diff --git a/QA/run_debug.py b/QA/run_debug.py index 55bc097..12aceea 100644 --- a/QA/run_debug.py +++ b/QA/run_debug.py @@ -42,7 +42,7 @@ def run_debug_cases(n_I, n_II, theta, phi, grating_type, pol): res.plot() # t0 = time.time() - # res = RCWA(grating_type, n_top, n_bot, theta, phi, psi, fourier_order, period, wavelength, + # res = RCWA(grating_type, n_top, n_bot, theta, phi, psi, fto, period, wavelength, # pol, patterns, thickness, connecting_algo='SMM') # # res.loop_wavelength_fill_factor() diff --git a/QA/run_test.py b/QA/run_test.py index 07c876a..cad0e81 100644 --- a/QA/run_test.py +++ b/QA/run_test.py @@ -40,7 +40,7 @@ def run_test(n_I, n_II, theta, phi, grating_type, pol): res.plot(title='TMM') # t0 = time.time() - # res = RCWA(grating_type, n_top, n_bot, theta, phi, psi, fourier_order, period, wavelength, + # res = RCWA(grating_type, n_top, n_bot, theta, phi, psi, fto, period, wavelength, # pol, patterns, thickness, connecting_algo='SMM') # # res.loop_wavelength_fill_factor() diff --git a/QA/test_case.py b/QA/test_case.py index 4d97507..8cb690c 100644 --- a/QA/test_case.py +++ b/QA/test_case.py @@ -38,7 +38,7 @@ def test(): # wavelength = np.linspace(500, 1000, 100) # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, - # fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) + # fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) # de_ri, de_ti = AA.loop_wavelength_ucell() # AA.plot() @@ -69,7 +69,7 @@ def test(): # wavelength = np.linspace(500, 1000, 100) # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, - # fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) + # fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) # de_ri, de_ti = AA.loop_wavelength_ucell() # AA.plot() @@ -95,7 +95,7 @@ def test(): # wavelength = np.linspace(500, 1000, 100) # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, - # fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) + # fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) # de_ri, de_ti = AA.loop_wavelength_ucell() # AA.plot() @@ -126,7 +126,7 @@ def test(): # wavelength = np.linspace(500, 1000, 100) # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, - # fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) + # fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) # de_ri, de_ti = AA.loop_wavelength_ucell() # AA.plot() @@ -157,7 +157,7 @@ def test(): # wavelength = np.linspace(500, 1000, 100) # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, - # fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) + # fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) # de_ri, de_ti = AA.loop_wavelength_ucell() # AA.plot() @@ -197,7 +197,7 @@ def test(): # wavelength = np.linspace(500, 1000, 100) # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, - # fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) + # fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) # de_ri, de_ti = AA.loop_wavelength_ucell() # AA.plot() # assert True diff --git a/benchmarks/benchmark_against_reticolo.py b/benchmarks/benchmark_against_reticolo.py index f4a5466..bf016fa 100644 --- a/benchmarks/benchmark_against_reticolo.py +++ b/benchmarks/benchmark_against_reticolo.py @@ -39,6 +39,10 @@ def consistency(backend): # Reticolo reti = Reticolo() top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell_reti = reti.run_res3(**option) + + # top_refl_info = np.array([top_refl_info]) + # top_tran_info = np.array([top_tran_info]) + center = top_tran_info.shape[0] // 2 plot_length = min(center, 2) @@ -69,7 +73,70 @@ def consistency(backend): mee.field_plot(field_cell_meent) +def consistency_jax(backend): + option = {} + option['grating_type'] = 0 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating + option['pol'] = 0 # 0: TE, 1: TM + option['n_top'] = 1 # n_incidence + option['n_bot'] = 1.5 # n_transmission + option['theta'] = 0 * np.pi / 180 + option['phi'] = 0 * np.pi / 180 + option['psi'] = 0 if option['pol'] else 90 * np.pi / 180 + option['fto'] = 0 + option['period'] = [1000] + option['wavelength'] = 650 + option['thickness'] = [500, 200, 100, 60, 432, 500] # final term is for h_substrate + + n_1 = 1 + n_2 = 3 + + ucell = np.array( + [ + [[1, 1, 1, 1, 1, 0, 0, 1, 1, 1,]], + [[1, 0, 0, 1, 0, 0, 0, 1, 1, 1,]], + [[1, 1, 0, 1, 1, 1, 1, 1, 0, 1,]], + [[1, 1, 1, 0, 1, 0, 0, 1, 1, 1,]], + [[0, 0, 1, 0, 1, 0, 0, 1, 1, 1,]], + [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0,]], + ]) * (n_2 - n_1) + n_1 + + option['ucell'] = ucell + + mee = call_mee(backend=backend, **option) + + # # Reticolo + # reti = Reticolo() + # top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell_reti = reti.run_res3(**option) + # + # top_refl_info = np.array([top_refl_info]) + # top_tran_info = np.array([top_tran_info]) + # + # center = top_tran_info.shape[0] // 2 + # plot_length = min(center, 2) + # + # # print('reti de_ri', top_refl_info) + # print('reticolo ; de_ri.sum(), de_ti.sum():', top_refl_info.sum(), top_tran_info.sum()) + # plt.plot(top_tran_info[center - plot_length:center + plot_length + 1], label='reticolo', marker=4) + + # Meent with CFT + mee.fourier_type = 1 + de_ri, de_ti = mee.conv_solve() + # print('meent_cont de_ri', de_ri) + print('meent_cont; de_ri.sum(), de_ti.sum():', de_ri.sum(), de_ti.sum()) + + # Meent with DFT + mee.enhanced_dfs = False + mee.fourier_type = 0 + de_ri, de_ti = mee.conv_solve() + # print('meent_disc de_ri', de_ri) + print('meent_disc; de_ri.sum(), de_ti.sum():', de_ri.sum(), de_ti.sum()) + + field_cell_meent = mee.calculate_field() + mee.field_plot(field_cell_meent) + + if __name__ == '__main__': + try: print('NumpyMeent') consistency(0) diff --git a/benchmarks/interface/GRCWA.py b/benchmarks/interface/GRCWA.py index 64ea782..db90a0d 100644 --- a/benchmarks/interface/GRCWA.py +++ b/benchmarks/interface/GRCWA.py @@ -82,7 +82,7 @@ def run(self, pattern=None): 'theta': 1, 'phi': 1, 'wavelength': 1, - 'fourier_order': 1, + 'fto': 1, 'thickness': [1000, 300], 'period': [1000], 'fourier_type': 1, diff --git a/benchmarks/interface/TORCWA.py b/benchmarks/interface/TORCWA.py index bfa7706..a98bc00 100644 --- a/benchmarks/interface/TORCWA.py +++ b/benchmarks/interface/TORCWA.py @@ -14,7 +14,7 @@ def __init__(self, n_I=1., n_II=1., theta=0., phi=0., fourier_order=40, period=( self.fourier_order = [fourier_order, 0] self.fourier_order = [0, fourier_order] - # self.fourier_order = [fourier_order, fourier_order] + # self.fto = [fto, fto] self.pol = pol if type(period) in (int, float): @@ -77,15 +77,15 @@ def run(self): g = (abs(sim.S_parameters(orders=order, direction='forward', port='r', polarization='sp', ref_order=[0, 0]))**2) h = (abs(sim.S_parameters(orders=order, direction='forward', port='r', polarization='ps', ref_order=[0, 0]))**2) - # a = (abs(sim.S_parameters(orders=order, direction='forward', port='t', polarization='xx', ref_order=[0, 0]))**2) - # b = (abs(sim.S_parameters(orders=order, direction='forward', port='t', polarization='yy', ref_order=[0, 0]))**2) - # c = (abs(sim.S_parameters(orders=order, direction='forward', port='t', polarization='xy', ref_order=[0, 0]))**2) - # d = (abs(sim.S_parameters(orders=order, direction='forward', port='t', polarization='yx', ref_order=[0, 0]))**2) + # a = (abs(sim.S_parameters(orders=order, direction='forward', port='t', pol='xx', ref_order=[0, 0]))**2) + # b = (abs(sim.S_parameters(orders=order, direction='forward', port='t', pol='yy', ref_order=[0, 0]))**2) + # c = (abs(sim.S_parameters(orders=order, direction='forward', port='t', pol='xy', ref_order=[0, 0]))**2) + # d = (abs(sim.S_parameters(orders=order, direction='forward', port='t', pol='yx', ref_order=[0, 0]))**2) # - # e = (abs(sim.S_parameters(orders=order, direction='forward', port='r', polarization='xx', ref_order=[0, 0]))**2) - # f = (abs(sim.S_parameters(orders=order, direction='forward', port='r', polarization='yy', ref_order=[0, 0]))**2) - # g = (abs(sim.S_parameters(orders=order, direction='forward', port='r', polarization='xy', ref_order=[0, 0]))**2) - # h = (abs(sim.S_parameters(orders=order, direction='forward', port='r', polarization='yx', ref_order=[0, 0]))**2) + # e = (abs(sim.S_parameters(orders=order, direction='forward', port='r', pol='xx', ref_order=[0, 0]))**2) + # f = (abs(sim.S_parameters(orders=order, direction='forward', port='r', pol='yy', ref_order=[0, 0]))**2) + # g = (abs(sim.S_parameters(orders=order, direction='forward', port='r', pol='xy', ref_order=[0, 0]))**2) + # h = (abs(sim.S_parameters(orders=order, direction='forward', port='r', pol='yx', ref_order=[0, 0]))**2) return e+f+g+h, a+b+c+d @@ -100,7 +100,7 @@ def run(self): 'theta': 1, 'phi': 1, 'wavelength': 100, - 'fourier_order': 1, + 'fto': 1, 'thickness': [1000, 300], 'period': [1000], 'fourier_type': 1, diff --git a/benchmarks/interface/reticolo_res2.m b/benchmarks/interface/reticolo_res2.m index 5c6f69f..b10b25b 100644 --- a/benchmarks/interface/reticolo_res2.m +++ b/benchmarks/interface/reticolo_res2.m @@ -15,7 +15,7 @@ end if grating_type == 0 - parm = res0(pol); % TE polarization. For TM : parm=res0(-1) + parm = res0(pol); % TE pol. For TM : parm=res0(-1) else parm = res0; end diff --git a/benchmarks/interface/reticolo_res3.m b/benchmarks/interface/reticolo_res3.m index 5db962a..e1d8675 100644 --- a/benchmarks/interface/reticolo_res3.m +++ b/benchmarks/interface/reticolo_res3.m @@ -16,7 +16,7 @@ end if grating_type == 0 - parm = res0(pol); % TE polarization. For TM : parm=res0(-1) + parm = res0(pol); % TE pol. For TM : parm=res0(-1) else parm = res0; end diff --git a/meent/main.py b/meent/main.py index b980d9f..f12f8c6 100644 --- a/meent/main.py +++ b/meent/main.py @@ -78,7 +78,7 @@ def call_mee(backend=0, *args, **kwargs): # spectrum_r = np.zeros(wavelength_array.shape[0]) # spectrum_t = np.zeros(wavelength_array.shape[0]) # emsolver = call_solver(backend, *args, **kwargs) -# spectrum_r, spectrum_t = init_spectrum_array(emsolver.grating_type, wavelength_array, emsolver.fourier_order) +# spectrum_r, spectrum_t = init_spectrum_array(emsolver.grating_type, wavelength_array, emsolver.fto) # # for i, wavelength in enumerate(wavelength_array): # @@ -104,13 +104,13 @@ def call_mee(backend=0, *args, **kwargs): # return spectrum_r, spectrum_t # # -# def init_spectrum_array(grating_type, wavelength_array, fourier_order): +# def init_spectrum_array(grating_type, wavelength_array, fto): # if grating_type in (0, 1): -# spectrum_r = np.zeros((len(wavelength_array), 2 * fourier_order + 1)) -# spectrum_t = np.zeros((len(wavelength_array), 2 * fourier_order + 1)) +# spectrum_r = np.zeros((len(wavelength_array), 2 * fto + 1)) +# spectrum_t = np.zeros((len(wavelength_array), 2 * fto + 1)) # elif grating_type == 2: -# spectrum_r = np.zeros((len(wavelength_array), 2 * fourier_order + 1, 2 * fourier_order + 1)) -# spectrum_t = np.zeros((len(wavelength_array), 2 * fourier_order + 1, 2 * fourier_order + 1)) +# spectrum_r = np.zeros((len(wavelength_array), 2 * fto + 1, 2 * fto + 1)) +# spectrum_t = np.zeros((len(wavelength_array), 2 * fto + 1, 2 * fto + 1)) # else: # raise ValueError # return spectrum_r, spectrum_t diff --git a/meent/on_jax/emsolver/__init__.py b/meent/on_jax/emsolver/__init__.py index 7c65020..999dd71 100644 --- a/meent/on_jax/emsolver/__init__.py +++ b/meent/on_jax/emsolver/__init__.py @@ -1,7 +1,7 @@ -from jax import tree_util - -from .rcwa import RCWAJax - -tree_util.register_pytree_node(RCWAJax, - RCWAJax._tree_flatten, - RCWAJax._tree_unflatten) +# from jax import tree_util +# +# from .rcwa import RCWAJax +# +# tree_util.register_pytree_node(RCWAJax, +# RCWAJax._tree_flatten, +# RCWAJax._tree_unflatten) diff --git a/meent/on_jax/emsolver/_base.py b/meent/on_jax/emsolver/_base.py index 49a7033..7dc0849 100644 --- a/meent/on_jax/emsolver/_base.py +++ b/meent/on_jax/emsolver/_base.py @@ -4,18 +4,17 @@ import jax.numpy as jnp import numpy as np -from .primitives import eig -from .scattering_method import scattering_1d_1, scattering_1d_2, scattering_1d_3, scattering_2d_1, scattering_2d_wv, \ - scattering_2d_2, scattering_2d_3 -from .transfer_method import transfer_1d_1, transfer_1d_2, transfer_1d_3, transfer_1d_conical_1, transfer_1d_conical_2, \ - transfer_1d_conical_3, transfer_2d_1, transfer_2d_wv, transfer_2d_2, transfer_2d_3 +from .scattering_method import (scattering_1d_1, scattering_1d_2, scattering_1d_3, + scattering_2d_1, scattering_2d_wv, scattering_2d_2, scattering_2d_3) +from .transfer_method import (transfer_1d_1, transfer_1d_2, transfer_1d_3, transfer_1d_4, + transfer_2d_1, transfer_2d_2, transfer_2d_3, transfer_2d_4) class _BaseRCWA: - def __init__(self, grating_type, n_I=1., n_II=1., theta=0., phi=0., pol=0., fourier_order=(2, 0), - period=(100., 100.), wavelength=900., - thickness=(0.,), algo='TMM', perturbation=1E-20, + def __init__(self, n_top=1., n_bot=1., theta=0., phi=0., psi=None, pol=0., fto=(2, 0), + period=(100., 100.), wavelength=1., + thickness=(0.,), connecting_algo='TMM', perturbation=1E-20, device=0, type_complex=jnp.complex128): self.device = device @@ -33,24 +32,24 @@ def __init__(self, grating_type, n_I=1., n_II=1., theta=0., phi=0., pol=0., four self._type_int = jnp.int64 if self._type_complex is not jnp.complex64 else jnp.int32 self.perturbation = perturbation - self.grating_type = grating_type # 1D=0, 1D_conical=1, 2D=2 - self.n_I = n_I - self.n_II = n_II + self.n_top = n_top + self.n_bot = n_bot # degree to radian due to JAX JIT self.theta = theta self.phi = phi self.pol = pol - self._psi = jnp.array((jnp.pi / 2 * (1 - pol)), dtype=self.type_float) + self.psi = psi + # self._psi = jnp.array((jnp.pi / 2 * (1 - pol)), dtype=self.type_float) - self.fourier_order = fourier_order + self.fto = fto self.period = period self.wavelength = wavelength self.thickness = thickness - self.algo = algo + self.connecting_algo = connecting_algo self.layer_info_list = [] self.T1 = None - self.kx_vector = None # only kx, not ky, because kx is always used while ky is 2D only. + # self.kx = None # only kx, not ky, because kx is always used while ky is 2D only. @property def device(self): @@ -87,7 +86,7 @@ def type_complex(self, type_complex): self.phi = self.phi self._psi = self.psi - self.fourier_order = self.fourier_order + self.fto = self.fto self.thickness = self.thickness @property @@ -138,35 +137,42 @@ def phi(self, phi): def psi(self): return self._psi + @psi.setter + def psi(self, psi): + if psi is not None: + self._psi = jnp.array(psi, dtype=self.type_float) + pol = -(2 * psi / jnp.pi - 1) + self._pol = pol + @property - def fourier_order(self): - return self._fourier_order + def fto(self): + return self._fto - @fourier_order.setter - def fourier_order(self, fourier_order): + @fto.setter + def fto(self, fto): - if type(fourier_order) in (list, tuple): - if len(fourier_order) == 1: - self._fourier_order = [int(fourier_order[0]), 0] - elif len(fourier_order) == 2: - self._fourier_order = [int(v) for v in fourier_order] + if type(fto) in (list, tuple): + if len(fto) == 1: + self._fto = [int(fto[0]), 0] + elif len(fto) == 2: + self._fto = [int(v) for v in fto] else: raise ValueError - elif isinstance(fourier_order, np.ndarray) or isinstance(fourier_order, jnp.ndarray): - self._fourier_order = fourier_order.tolist() - if type(self._fourier_order) is list: - if len(self._fourier_order) == 1: - self._fourier_order = [int(self._fourier_order[0]), 0] - elif len(self._fourier_order) == 2: - self._fourier_order = [int(v) for v in self._fourier_order] + elif isinstance(fto, np.ndarray) or isinstance(fto, jnp.ndarray): + self._fto = fto.tolist() + if type(self._fto) is list: + if len(self._fto) == 1: + self._fto = [int(self._fto[0]), 0] + elif len(self._fto) == 2: + self._fto = [int(v) for v in self._fto] else: raise ValueError - elif type(self._fourier_order) in (int, float): - self._fourier_order = [int(self._fourier_order), 0] + elif type(self._fto) in (int, float): + self._fto = [int(self._fto), 0] else: raise ValueError - elif type(fourier_order) in (int, float): - self._fourier_order = [int(fourier_order), 0] + elif type(fto) in (int, float): + self._fto = [int(fto), 0] else: raise ValueError @@ -177,10 +183,10 @@ def period(self): @period.setter def period(self, period): if type(period) in (int, float): - self._period = jnp.array([period], dtype=self.type_float) - elif type(period) in (list, tuple, np.ndarray): - self._period = jnp.array(period, dtype=self.type_float) - elif isinstance(period, jnp.ndarray): + self._period = jnp.array([period, period], dtype=self.type_float) + elif type(period) in (list, tuple, np.ndarray) or isinstance(period, jnp.ndarray): + if len(period) == 1: + period = [period[0], period[0]] self._period = jnp.array(period, dtype=self.type_float) elif type(period) is jax.interpreters.partial_eval.DynamicJaxprTracer: print('init period') @@ -219,250 +225,198 @@ def wrap(*args, **kwargs): return wrap @jax_device_set - def get_kx_vector(self, wavelength): - k0 = 2 * jnp.pi / wavelength - fourier_indices = jnp.arange(-self.fourier_order[0], self.fourier_order[0] + 1) - if self.grating_type == 0: - kx_vector = k0 * (self.n_I * jnp.sin(self.theta) + fourier_indices * (wavelength / self.period[0]) - ).astype(self.type_complex) - else: - kx_vector = k0 * (self.n_I * jnp.sin(self.theta) * jnp.cos(self.phi) + fourier_indices * ( - wavelength / self.period[0])).astype(self.type_complex) + def get_kx_ky_vector(self, wavelength): - # kx = jnp.where(kx == 0, self.perturbation, kx) + fto_x_range = jnp.arange(-self.fto[0], self.fto[0] + 1) + fto_y_range = jnp.arange(-self.fto[1], self.fto[1] + 1) - return kx_vector + kx_vector = (self.n_top * jnp.sin(self.theta) * jnp.cos(self.phi) + fto_x_range * ( + wavelength / self.period[0])).astype(self.type_complex) + + ky_vector = (self.n_top * jnp.sin(self.theta) * jnp.sin(self.phi) + fto_y_range * ( + wavelength / self.period[1])).astype(self.type_complex) + + return kx_vector, ky_vector @jax_device_set - def solve_1d(self, wavelength, E_conv_all, o_E_conv_all): + def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): self.layer_info_list = [] self.T1 = None - ff = self.fourier_order[0] * 2 + 1 - - delta_i0 = jnp.zeros(ff, dtype=self.type_complex) - delta_i0 = delta_i0.at[self.fourier_order[0]].set(1) + ff_x = self.fto[0] * 2 + 1 k0 = 2 * jnp.pi / wavelength + kx, _ = self.get_kx_ky_vector(wavelength) - if self.algo == 'TMM': - kx_vector, Kx, k_I_z, k_II_z, f, YZ_I, g, inc_term, T \ - = transfer_1d_1(ff, self.pol, k0, self.n_I, self.n_II, self.kx_vector, - self.theta, delta_i0, self.fourier_order, type_complex=self.type_complex) - elif self.algo == 'SMM': + if self.connecting_algo == 'TMM': + kz_top, kz_bot, F, G, T \ + = transfer_1d_1(self.pol, ff_x, kx, self.n_top, self.n_bot, type_complex=self.type_complex) + elif self.connecting_algo == 'SMM': Kx, Wg, Vg, Kzg, Wr, Vr, Kzr, Wt, Vt, Kzt, Ar, Br, Sg \ - = scattering_1d_1(k0, self.n_I, self.n_II, self.theta, self.phi, self.period, + = scattering_1d_1(k0, self.n_top, self.n_bot, self.theta, self.phi, self.period, self.pol, wl=wavelength) else: raise ValueError # From the last layer - # for E_conv, o_E_conv, d in zip(E_conv_all[::-1], o_E_conv_all[::-1], self.thickness[::-1]): - count = min(len(E_conv_all), len(o_E_conv_all), len(self.thickness)) + for layer_index in range(len(self.thickness))[::-1]: + + epx_conv = epx_conv_all[layer_index] + epy_conv = epy_conv_all[layer_index] + epz_conv_i = epz_conv_i_all[layer_index] - # From the last layer - for layer_index in range(count)[::-1]: - E_conv = E_conv_all[layer_index] - o_E_conv = o_E_conv_all[layer_index] d = self.thickness[layer_index] - if self.pol == 0: - E_conv_i = None - A = Kx ** 2 - E_conv - eigenvalues, W = eig(A, type_complex=self.type_complex, perturbation=self.perturbation, device=self.device) - eigenvalues += 0j # to get positive square root - q = eigenvalues ** 0.5 - Q = jnp.diag(q) - V = W @ Q - - elif self.pol == 1: - E_conv_i = jnp.linalg.inv(E_conv) - B = Kx @ E_conv_i @ Kx - jnp.eye(E_conv.shape[0]).astype(self.type_complex) - # o_E_conv_i = jnp.linalg.inv(o_E_conv) - - eigenvalues, W = eig(E_conv @ B, type_complex=self.type_complex, perturbation=self.perturbation, - device=self.device) - eigenvalues += 0j # to get positive square root - q = eigenvalues ** 0.5 - Q = jnp.diag(q) - # V = o_E_conv @ W @ Q - V = E_conv_i @ W @ Q + if self.connecting_algo == 'TMM': + W, V, q = transfer_1d_2(self.pol, kx, epx_conv, epy_conv, epz_conv_i, self.type_complex) - else: - raise ValueError + X, F, G, T, A_i, B = transfer_1d_3(k0, W, V, q, d, F, G, T, type_complex=self.type_complex) - if self.algo == 'TMM': - X, f, g, T, a_i, b = transfer_1d_2(k0, q, d, W, V, f, g, self.fourier_order, T, - type_complex=self.type_complex) - - layer_info = [E_conv_i, q, W, X, a_i, b, d] + layer_info = [epz_conv_i, W, V, q, d, A_i, B] self.layer_info_list.append(layer_info) - elif self.algo == 'SMM': + elif self.connecting_algo == 'SMM': A, B, S_dict, Sg = scattering_1d_2(W, Wg, V, Vg, d, k0, Q, Sg) else: raise ValueError - if self.algo == 'TMM': - de_ri, de_ti, T1 = transfer_1d_3(g, YZ_I, f, delta_i0, inc_term, T, k_I_z, k0, self.n_I, self.n_II, - self.theta, self.pol, k_II_z) + if self.connecting_algo == 'TMM': + de_ri, de_ti, T1 = transfer_1d_4(self.pol, F, G, T, kz_top, kz_bot, self.theta, self.n_top, self.n_bot, + type_complex=self.type_complex) self.T1 = T1 - elif self.algo == 'SMM': - de_ri, de_ti = scattering_1d_3(Wt, Wg, Vt, Vg, Sg, self.ff, Wr, self.fourier_order, Kzr, Kzt, - self.n_I, self.n_II, self.theta, self.pol) + elif self.connecting_algo == 'SMM': + de_ri, de_ti = scattering_1d_3(Wt, Wg, Vt, Vg, Sg, ff, Wr, self.fto, Kzr, Kzt, + self.n_top, self.n_bot, self.theta, self.pol) else: raise ValueError return de_ri, de_ti, self.layer_info_list, self.T1 + # @jax_device_set + # def solve_1d_conical(self, wavelength, E_conv_all, o_E_conv_all): + # + # self.layer_info_list = [] + # self.T1 = None + # + # # fourier_indices = jnp.arange(-self.fto, self.fto + 1) + # ff = self.fto[0] * 2 + 1 + # + # delta_i0 = jnp.zeros(ff, dtype=self.type_complex) + # delta_i0 = delta_i0.at[self.fto[0]].set(1) + # + # k0 = 2 * jnp.pi / wavelength + # + # if self.connecting_algo == 'TMM': + # Kx, ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ + # = transfer_1d_conical_1(ff, k0, self.n_top, self.n_bot, self.kx, self.theta, self.phi, + # type_complex=self.type_complex) + # elif self.connecting_algo == 'SMM': + # print('SMM for 1D conical is not implemented') + # return jnp.nan, jnp.nan + # else: + # raise ValueError + # + # # for E_conv, o_E_conv, d in zip(E_conv_all[::-1], o_E_conv_all[::-1], self.thickness[::-1]): + # count = min(len(E_conv_all), len(o_E_conv_all), len(self.thickness)) + # + # # From the last layer + # for layer_index in range(count)[::-1]: + # + # E_conv = E_conv_all[layer_index] + # # o_E_conv = o_E_conv_all[layer_index] + # o_E_conv = None + # + # d = self.thickness[layer_index] + # + # E_conv_i = jnp.linalg.inv(E_conv) + # # o_E_conv_i = jnp.linalg.inv(o_E_conv) + # o_E_conv_i = None + # + # if self.connecting_algo == 'TMM': + # big_X, big_F, big_G, big_T, big_A_i, big_B, W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 \ + # = transfer_1d_conical_2(k0, Kx, ky, E_conv, E_conv_i, o_E_conv_i, ff, d, + # varphi, big_F, big_G, big_T, + # type_complex=self.type_complex, device=self.device) + # + # layer_info = [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] + # self.layer_info_list.append(layer_info) + # + # elif self.connecting_algo == 'SMM': + # raise ValueError + # else: + # raise ValueError + # + # if self.connecting_algo == 'TMM': + # de_ri, de_ti, big_T1 = transfer_1d_conical_3(big_F, big_G, big_T, Z_I, Y_I, self.psi, self.theta, ff, + # delta_i0, k_I_z, k0, self.n_top, self.n_bot, k_II_z, + # type_complex=self.type_complex) + # self.T1 = big_T1 + # + # elif self.connecting_algo == 'SMM': + # raise ValueError + # else: + # raise ValueError + # + # return de_ri, de_ti, self.layer_info_list, self.T1 @jax_device_set - def solve_1d_conical(self, wavelength, E_conv_all, o_E_conv_all): + def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): self.layer_info_list = [] self.T1 = None - # fourier_indices = jnp.arange(-self.fourier_order, self.fourier_order + 1) - ff = self.fourier_order[0] * 2 + 1 - - delta_i0 = jnp.zeros(ff, dtype=self.type_complex) - delta_i0 = delta_i0.at[self.fourier_order[0]].set(1) + ff_x = self.fto[0] * 2 + 1 + ff_y = self.fto[1] * 2 + 1 k0 = 2 * jnp.pi / wavelength + kx, ky = self.get_kx_ky_vector(wavelength) - if self.algo == 'TMM': - Kx, ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ - = transfer_1d_conical_1(ff, k0, self.n_I, self.n_II, self.kx_vector, self.theta, self.phi, - type_complex=self.type_complex) - elif self.algo == 'SMM': - print('SMM for 1D conical is not implemented') - return jnp.nan, jnp.nan - else: - raise ValueError - - # for E_conv, o_E_conv, d in zip(E_conv_all[::-1], o_E_conv_all[::-1], self.thickness[::-1]): - count = min(len(E_conv_all), len(o_E_conv_all), len(self.thickness)) - - # From the last layer - for layer_index in range(count)[::-1]: - - E_conv = E_conv_all[layer_index] - # o_E_conv = o_E_conv_all[layer_index] - o_E_conv = None - - d = self.thickness[layer_index] - - E_conv_i = jnp.linalg.inv(E_conv) - # o_E_conv_i = jnp.linalg.inv(o_E_conv) - o_E_conv_i = None - - if self.algo == 'TMM': - big_X, big_F, big_G, big_T, big_A_i, big_B, W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 \ - = transfer_1d_conical_2(k0, Kx, ky, E_conv, E_conv_i, o_E_conv_i, ff, d, - varphi, big_F, big_G, big_T, - type_complex=self.type_complex, device=self.device) - - layer_info = [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] - self.layer_info_list.append(layer_info) - - elif self.algo == 'SMM': - raise ValueError - else: - raise ValueError - - if self.algo == 'TMM': - de_ri, de_ti, big_T1 = transfer_1d_conical_3(big_F, big_G, big_T, Z_I, Y_I, self.psi, self.theta, ff, - delta_i0, k_I_z, k0, self.n_I, self.n_II, k_II_z, - type_complex=self.type_complex) - self.T1 = big_T1 - - elif self.algo == 'SMM': - raise ValueError - else: - raise ValueError - - return de_ri, de_ti, self.layer_info_list, self.T1 + if self.connecting_algo == 'TMM': + kz_top, kz_bot, varphi, big_F, big_G, big_T \ + = transfer_2d_1(ff_x, ff_y, kx, ky, self.n_top, self.n_bot, type_complex=self.type_complex) - @jax_device_set - def solve_2d(self, wavelength, E_conv_all, o_E_conv_all): - - self.layer_info_list = [] - self.T1 = None - - fourier_indices_y = jnp.arange(-self.fourier_order[1], self.fourier_order[1] + 1) - - ff_x = self.fourier_order[0] * 2 + 1 - ff_y = self.fourier_order[1] * 2 + 1 - ff_xy = ff_x * ff_y - - delta_i0 = jnp.zeros((ff_xy, 1), dtype=self.type_complex) - delta_i0 = delta_i0.at[ff_xy // 2, 0].set(1) - - I = jnp.eye(ff_xy).astype(self.type_complex) - O = jnp.zeros((ff_xy, ff_xy), dtype=self.type_complex) - - center = ff_xy - - k0 = 2 * jnp.pi / wavelength - - if self.algo == 'TMM': - kx_vector, ky_vector, Kx, Ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ - = transfer_2d_1(ff_x, ff_y, ff_xy, k0, self.n_I, self.n_II, self.kx_vector, self.period, fourier_indices_y, - self.theta, self.phi, wavelength, type_complex=self.type_complex) - elif self.algo == 'SMM': + elif self.connecting_algo == 'SMM': Kx, Ky, kz_inc, Wg, Vg, Kzg, Wr, Vr, Kzr, Wt, Vt, Kzt, Ar, Br, Sg \ - = scattering_2d_1(self.n_I, self.n_II, self.theta, self.phi, k0, self.period, self.fourier_order) + = scattering_2d_1(self.n_top, self.n_bot, self.theta, self.phi, k0, self.period, self.fto) else: raise ValueError # From the last layer - # for E_conv, o_E_conv, d in zip(E_conv_all[::-1], o_E_conv_all[::-1], self.thickness[::-1]): - - count = min(len(E_conv_all), len(o_E_conv_all), len(self.thickness)) + for layer_index in range(len(self.thickness))[::-1]: - # From the last layer - for layer_index in range(count)[::-1]: - E_conv = E_conv_all[layer_index] - # o_E_conv = o_E_conv_all[layer_index] - o_E_conv = None + epx_conv = epx_conv_all[layer_index] + epy_conv = epy_conv_all[layer_index] + epz_conv_i = epz_conv_i_all[layer_index] d = self.thickness[layer_index] - E_conv_i = jnp.linalg.inv(E_conv) - # o_E_conv_i = jnp.linalg.inv(o_E_conv) - o_E_conv_i = None - - if self.algo == 'TMM': - W, V, q = transfer_2d_wv(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, - device=self.device, type_complex=self.type_complex) + if self.connecting_algo == 'TMM': + W, V, q = transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=self.type_complex) big_X, big_F, big_G, big_T, big_A_i, big_B, \ - W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22 \ - = transfer_2d_2(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, - type_complex=self.type_complex) + = transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=self.type_complex) - layer_info = [E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] + layer_info = [epz_conv_i, W, V, q, d, big_A_i, big_B] self.layer_info_list.append(layer_info) - elif self.algo == 'SMM': - W, V, LAMBDA = scattering_2d_wv(Kx, Ky, E_conv, o_E_conv, o_E_conv_i, E_conv_i) - A, B, Sl_dict, Sg_matrix, Sg = scattering_2d_2(W, Wg, V, Vg, d, k0, Sg, LAMBDA) + elif self.connecting_algo == 'SMM': + W, V, q = scattering_2d_wv(ff_xy, Kx, Ky, E_conv, o_E_conv, o_E_conv_i, E_conv_i) + A, B, Sl_dict, Sg_matrix, Sg = scattering_2d_2(W, Wg, V, Vg, d, k0, Sg, q) else: raise ValueError - if self.algo == 'TMM': - de_ri, de_ti, big_T1 = transfer_2d_3(center, big_F, big_G, big_T, Z_I, Y_I, self.psi, self.theta, ff_xy, - delta_i0, k_I_z, k0, self.n_I, self.n_II, k_II_z, - type_complex=self.type_complex) + if self.connecting_algo == 'TMM': + de_ri, de_ti, big_T1 = transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, self.psi, self.theta, + self.n_top, self.n_bot, type_complex=self.type_complex) self.T1 = big_T1 - elif self.algo == 'SMM': - de_ri, de_ti = scattering_2d_3(Wt, Wg, Vt, Vg, Sg, Wr, Kx, Ky, Kzr, Kzt, kz_inc, self.n_I, - self.pol, self.theta, self.phi, self.fourier_order, self.fourier_order) + elif self.connecting_algo == 'SMM': + de_ri, de_ti = scattering_2d_3(ff_xy, Wt, Wg, Vt, Vg, Sg, Wr, Kx, Ky, Kzr, Kzt, kz_inc, self.n_top, + self.pol, self.theta, self.phi, self.fto) else: raise ValueError - de_ri = de_ri.reshape((ff_y, ff_x)).T de_ti = de_ti.reshape((ff_y, ff_x)).T return de_ri, de_ti, self.layer_info_list, self.T1 + diff --git a/meent/on_jax/emsolver/convolution_matrix.py b/meent/on_jax/emsolver/convolution_matrix.py index 6bd2388..ad93838 100644 --- a/meent/on_jax/emsolver/convolution_matrix.py +++ b/meent/on_jax/emsolver/convolution_matrix.py @@ -3,9 +3,16 @@ from functools import partial +from .fourier_analysis import dfs2d, cfs2d + def cell_compression(cell, type_complex=jnp.complex128): + cell = jnp.flipud(cell) + # This is needed because the comp. connecting_algo begins from 0 to period (RC coord. system). + # On the other hand, the field data is from period to 0 (XY coord. system). + # Will be flipped again during field reconstruction. + if type_complex == jnp.complex128: type_float = jnp.float64 else: @@ -22,7 +29,6 @@ def cell_compression(cell, type_complex=jnp.complex128): for col in range(cell.shape[1]): if not (cell[:, col] == cell_next[:, col]).all() or (col == cell.shape[1] - 1): - x.append(step_x * (col + 1)) cell_x.append(cell[:, col]) @@ -41,217 +47,174 @@ def cell_compression(cell, type_complex=jnp.complex128): return cell_comp, x, y -# @partial(jax.jit, static_argnums=(1,2 )) -def fft_piecewise_constant(cell, x, y, fourier_order_x, fourier_order_y, type_complex=jnp.complex128): - - period_x, period_y = x[-1], y[-1] - - # X axis - cell_next_x = jnp.roll(cell, -1, axis=1) - cell_diff_x = cell_next_x - cell - - modes_x = jnp.arange(-2 * fourier_order_x, 2 * fourier_order_x + 1, 1) - - f_coeffs_x = cell_diff_x @ jnp.exp(-1j * 2 * jnp.pi * x @ modes_x[None, :] / period_x).astype(type_complex) - c = f_coeffs_x.shape[1] // 2 - - x_next = jnp.vstack((jnp.roll(x, -1, axis=0)[:-1], period_x)) - x - - assign_index = (jnp.arange(len(f_coeffs_x)), jnp.array([c])) - assign_value = (cell @ jnp.vstack((x[0], x_next[:-1])) / period_x).flatten().astype(type_complex) - f_coeffs_x = f_coeffs_x.at[assign_index].set(assign_value) - - mask = jnp.hstack([jnp.arange(c), jnp.arange(c+1, f_coeffs_x.shape[1])]) - assign_index = mask - assign_value = f_coeffs_x[:, mask] / (1j * 2 * jnp.pi * modes_x[mask]) - f_coeffs_x = f_coeffs_x.at[:, assign_index].set(assign_value) - - # Y axis - f_coeffs_x_next_y = jnp.roll(f_coeffs_x, -1, axis=0) - f_coeffs_x_diff_y = f_coeffs_x_next_y - f_coeffs_x - - modes_y = jnp.arange(-2 * fourier_order_y, 2 * fourier_order_y + 1, 1) - - f_coeffs_xy = f_coeffs_x_diff_y.T @ jnp.exp(-1j * 2 * jnp.pi * y @ modes_y[None, :] / period_y).astype(type_complex) - c = f_coeffs_xy.shape[1] // 2 - - y_next = jnp.vstack((jnp.roll(y, -1, axis=0)[:-1], period_y)) - y - assign_index = [c] - assign_value = (f_coeffs_x.T @ jnp.vstack((y[0], y_next[:-1])) / period_y).astype(type_complex) - f_coeffs_xy = f_coeffs_xy.at[:, assign_index].set(assign_value) - - if c: - mask = jnp.hstack([jnp.arange(c), jnp.arange(c + 1, f_coeffs_x.shape[1])]) - - assign_index = mask - assign_value = f_coeffs_xy[:, mask] / (1j * 2 * jnp.pi * modes_y[mask]) - - f_coeffs_xy = f_coeffs_xy.at[:, assign_index].set(assign_value) - - return f_coeffs_xy.T - - -def to_conv_mat_vector(ucell_info_list, fourier_order_x, fourier_order_y, device=None, +# @partial(jax.jit, static_argnums=(1,2 )) +# def fft_piecewise_constant(cell, x, y, fto_x, fto_y, type_complex=jnp.complex128): +# +# period_x, period_y = x[-1], y[-1] +# +# # X axis +# cell_next_x = jnp.roll(cell, -1, axis=1) +# cell_diff_x = cell_next_x - cell +# +# modes_x = jnp.arange(-2 * fto_x, 2 * fto_x + 1, 1) +# +# f_coeffs_x = cell_diff_x @ jnp.exp(-1j * 2 * jnp.pi * x @ modes_x[None, :] / period_x).astype(type_complex) +# c = f_coeffs_x.shape[1] // 2 +# +# x_next = jnp.vstack((jnp.roll(x, -1, axis=0)[:-1], period_x)) - x +# +# assign_index = (jnp.arange(len(f_coeffs_x)), jnp.array([c])) +# assign_value = (cell @ jnp.vstack((x[0], x_next[:-1])) / period_x).flatten().astype(type_complex) +# f_coeffs_x = f_coeffs_x.at[assign_index].set(assign_value) +# +# mask = jnp.hstack([jnp.arange(c), jnp.arange(c+1, f_coeffs_x.shape[1])]) +# assign_index = mask +# assign_value = f_coeffs_x[:, mask] / (1j * 2 * jnp.pi * modes_x[mask]) +# f_coeffs_x = f_coeffs_x.at[:, assign_index].set(assign_value) +# +# # Y axis +# f_coeffs_x_next_y = jnp.roll(f_coeffs_x, -1, axis=0) +# f_coeffs_x_diff_y = f_coeffs_x_next_y - f_coeffs_x +# +# modes_y = jnp.arange(-2 * fto_y, 2 * fto_y + 1, 1) +# +# f_coeffs_xy = f_coeffs_x_diff_y.T @ jnp.exp(-1j * 2 * jnp.pi * y @ modes_y[None, :] / period_y).astype(type_complex) +# c = f_coeffs_xy.shape[1] // 2 +# +# y_next = jnp.vstack((jnp.roll(y, -1, axis=0)[:-1], period_y)) - y +# +# assign_index = [c] +# assign_value = (f_coeffs_x.T @ jnp.vstack((y[0], y_next[:-1])) / period_y).astype(type_complex) +# f_coeffs_xy = f_coeffs_xy.at[:, assign_index].set(assign_value) +# +# if c: +# mask = jnp.hstack([jnp.arange(c), jnp.arange(c + 1, f_coeffs_x.shape[1])]) +# +# assign_index = mask +# assign_value = f_coeffs_xy[:, mask] / (1j * 2 * jnp.pi * modes_y[mask]) +# +# f_coeffs_xy = f_coeffs_xy.at[:, assign_index].set(assign_value) +# +# return f_coeffs_xy.T + + +def to_conv_mat_vector(ucell_info_list, fto_x, fto_y, device=None, type_complex=jnp.complex128): - ff_x = 2 * fourier_order_x + 1 - ff_y = 2 * fourier_order_y + 1 + ff_xy = (2 * fto_x + 1) * (2 * fto_y + 1) - e_conv_all = jnp.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - o_e_conv_all = jnp.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + epx_conv_all = jnp.zeros((len(ucell_info_list), ff_xy, ff_xy)).astype(type_complex) + epy_conv_all = jnp.zeros((len(ucell_info_list), ff_xy, ff_xy)).astype(type_complex) + epz_conv_i_all = jnp.zeros((len(ucell_info_list), ff_xy, ff_xy)).astype(type_complex) - # 2D for i, ucell_info in enumerate(ucell_info_list): ucell_layer, x_list, y_list = ucell_info - ucell_layer = ucell_layer ** 2 + eps_matrix = ucell_layer ** 2 - f_coeffs = fft_piecewise_constant(ucell_layer, x_list, y_list, - fourier_order_x, fourier_order_y, type_complex=type_complex) - o_f_coeffs = fft_piecewise_constant(1/ucell_layer, x_list, y_list, - fourier_order_x, fourier_order_y, type_complex=type_complex) - center = jnp.array(f_coeffs.shape) // 2 + epz_conv = cfs2d(eps_matrix, x_list, y_list, 1, 1, fto_x, fto_y, type_complex) + epy_conv = cfs2d(eps_matrix, x_list, y_list, 1, 0, fto_x, fto_y, type_complex) + epx_conv = cfs2d(eps_matrix, x_list, y_list, 0, 1, fto_x, fto_y, type_complex) - conv_idx_y = jnp.arange(-ff_y + 1, ff_y, 1) - conv_idx_y = circulant(conv_idx_y) - conv_i = jnp.repeat(conv_idx_y, ff_x, axis=1) - conv_i = jnp.repeat(conv_i, jnp.array([ff_x] * ff_y), axis=0, total_repeat_length=ff_x * ff_y) + # epx_conv_all[i] = epx_conv + # epy_conv_all[i] = epy_conv + # epz_conv_i_all[i] = jnp.linalg.inv(epz_conv) - conv_idx_x = jnp.arange(-ff_x + 1, ff_x, 1) - conv_idx_x = circulant(conv_idx_x) - conv_j = jnp.tile(conv_idx_x, (ff_y, ff_y)) + epx_conv_all = epx_conv_all.at[i].set(epx_conv) + epy_conv_all = epy_conv_all.at[i].set(epy_conv) + epz_conv_i_all = epz_conv_i_all.at[i].set(jnp.linalg.inv(epz_conv)) - e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] - o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] + # f_coeffs = fft_piecewise_constant(ucell_layer, x_list, y_list, + # fto_x, fto_y, type_complex=type_complex) + # o_f_coeffs = fft_piecewise_constant(1/ucell_layer, x_list, y_list, + # fto_x, fto_y, type_complex=type_complex) + # center = jnp.array(f_coeffs.shape) // 2 + # + # conv_idx_y = jnp.arange(-ff_y + 1, ff_y, 1) + # conv_idx_y = circulant(conv_idx_y) + # conv_i = jnp.repeat(conv_idx_y, ff_x, axis=1) + # conv_i = jnp.repeat(conv_i, jnp.array([ff_x] * ff_y), axis=0, total_repeat_length=ff_x * ff_y) + # + # conv_idx_x = jnp.arange(-ff_x + 1, ff_x, 1) + # conv_idx_x = circulant(conv_idx_x) + # conv_j = jnp.tile(conv_idx_x, (ff_y, ff_y)) + # + # e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] + # o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] + # + # e_conv_all = e_conv_all.at[i].set(e_conv) + # o_e_conv_all = o_e_conv_all.at[i].set(o_e_conv) - e_conv_all = e_conv_all.at[i].set(e_conv) - o_e_conv_all = o_e_conv_all.at[i].set(o_e_conv) - return e_conv_all, o_e_conv_all + return epx_conv_all, epy_conv_all, epz_conv_i_all -def to_conv_mat_raster_continuous(ucell, fourier_order_x, fourier_order_y, device=None, type_complex=jnp.complex128): - ucell_pmt = ucell ** 2 +def to_conv_mat_raster_continuous(ucell, fto_x, fto_y, device=None, type_complex=jnp.complex128): - if ucell_pmt.shape[1] == 1: # 1D - ff = 2 * fourier_order_x + 1 + ff_xy = (2 * fto_x + 1) * (2 * fto_y + 1) - e_conv_all = jnp.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) - o_e_conv_all = jnp.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) + epx_conv_all = jnp.zeros((ucell.shape[0], ff_xy, ff_xy)).astype(type_complex) + epy_conv_all = jnp.zeros((ucell.shape[0], ff_xy, ff_xy)).astype(type_complex) + epz_conv_i_all = jnp.zeros((ucell.shape[0], ff_xy, ff_xy)).astype(type_complex) - for i, layer in enumerate(ucell_pmt): + for i, layer in enumerate(ucell): + n_compressed, x_list, y_list = cell_compression(layer, type_complex=type_complex) + eps_matrix = n_compressed ** 2 - cell, x, y = cell_compression(layer, type_complex=type_complex) + epz_conv = cfs2d(eps_matrix, x_list, y_list, 1, 1, fto_x, fto_y, type_complex) + epy_conv = cfs2d(eps_matrix, x_list, y_list, 1, 0, fto_x, fto_y, type_complex) + epx_conv = cfs2d(eps_matrix, x_list, y_list, 0, 1, fto_x, fto_y, type_complex) - f_coeffs = fft_piecewise_constant(cell, x, y, fourier_order_x, fourier_order_y, type_complex=type_complex) - o_f_coeffs = fft_piecewise_constant(1/cell, x, y, fourier_order_x, fourier_order_y, type_complex=type_complex) - center = jnp.array(f_coeffs.shape) // 2 - conv_idx = jnp.arange(-ff + 1, ff, 1) - conv_idx = circulant(conv_idx) - e_conv = f_coeffs[center[0], center[1] + conv_idx] - o_e_conv = o_f_coeffs[center[0], center[1] + conv_idx] - e_conv_all = e_conv_all.at[i].set(e_conv) - o_e_conv_all = o_e_conv_all.at[i].set(o_e_conv) - else: # 2D - ff_x = 2 * fourier_order_x + 1 - ff_y = 2 * fourier_order_y + 1 + # epx_conv_all[i] = epx_conv + # epy_conv_all[i] = epy_conv + # epz_conv_i_all[i] = jnp.linalg.inv(epz_conv) - e_conv_all = jnp.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - o_e_conv_all = jnp.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) + epx_conv_all = epx_conv_all.at[i].set(epx_conv) + epy_conv_all = epy_conv_all.at[i].set(epy_conv) + epz_conv_i_all = epz_conv_i_all.at[i].set(jnp.linalg.inv(epz_conv)) - for i, layer in enumerate(ucell_pmt): + return epx_conv_all, epy_conv_all, epz_conv_i_all - cell, x, y = cell_compression(layer, type_complex=type_complex) - f_coeffs = fft_piecewise_constant(cell, x, y, fourier_order_x, fourier_order_y, type_complex=type_complex) - o_f_coeffs = fft_piecewise_constant(1/cell, x, y, fourier_order_x, fourier_order_y, type_complex=type_complex) - center = jnp.array(f_coeffs.shape) // 2 +# @partial(jax.jit, static_argnums=(1, 2, 3, 4, 5)) +def to_conv_mat_raster_discrete(ucell, fto_x, fto_y, device=None, type_complex=jnp.complex128, + enhanced_dfs=True): + ff_xy = (2 * fto_x + 1) * (2 * fto_y + 1) - conv_idx_y = jnp.arange(-ff_y + 1, ff_y, 1) - conv_idx_y = circulant(conv_idx_y) - conv_i = jnp.repeat(conv_idx_y, ff_x, axis=1) - conv_i = jnp.repeat(conv_i, jnp.array([ff_x] * ff_y), axis=0, total_repeat_length=ff_x * ff_y) + epx_conv_all = jnp.zeros((ucell.shape[0], ff_xy, ff_xy)).astype(type_complex) + epy_conv_all = jnp.zeros((ucell.shape[0], ff_xy, ff_xy)).astype(type_complex) + epz_conv_i_all = jnp.zeros((ucell.shape[0], ff_xy, ff_xy)).astype(type_complex) - conv_idx_x = jnp.arange(-ff_x + 1, ff_x, 1) - conv_idx_x = circulant(conv_idx_x) - conv_j = jnp.tile(conv_idx_x, (ff_y, ff_y)) + if enhanced_dfs: + minimum_pattern_size_y = (4 * fto_y + 1) * ucell.shape[1] + minimum_pattern_size_x = (4 * fto_x + 1) * ucell.shape[2] + else: + minimum_pattern_size_y = 4 * fto_y + 1 + minimum_pattern_size_x = 4 * fto_x + 1 + # e.g., 8 bytes * (40*500) * (40*500) / 1E6 = 3200 MB = 3.2 GB + + for i, layer in enumerate(ucell): + if layer.shape[0] < minimum_pattern_size_y: + n = minimum_pattern_size_y // layer.shape[0] + layer = jnp.repeat(layer, n + 1, axis=0, total_repeat_length=layer.shape[0] * (n + 1)) + if layer.shape[1] < minimum_pattern_size_x: + n = minimum_pattern_size_x // layer.shape[1] + layer = jnp.repeat(layer, n + 1, axis=1, total_repeat_length=layer.shape[1] * (n + 1)) - e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] - o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] - e_conv_all = e_conv_all.at[i].set(e_conv) - o_e_conv_all = o_e_conv_all.at[i].set(o_e_conv) - return e_conv_all, o_e_conv_all + eps_matrix = layer ** 2 + epz_conv = dfs2d(eps_matrix, 1, 1, fto_x, fto_y, type_complex) + epy_conv = dfs2d(eps_matrix, 1, 0, fto_x, fto_y, type_complex) + epx_conv = dfs2d(eps_matrix, 0, 1, fto_x, fto_y, type_complex) -# @partial(jax.jit, static_argnums=(1, 2, 3, 4, 5)) -def to_conv_mat_raster_discrete(ucell, fourier_order_x, fourier_order_y, device=None, type_complex=jnp.complex128, - improve_dft=True): - ucell_pmt = ucell ** 2 - - if ucell_pmt.shape[1] == 1: # 1D - ff = 2 * fourier_order_x + 1 - e_conv_all = jnp.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) - o_e_conv_all = jnp.zeros((ucell_pmt.shape[0], ff, ff)).astype(type_complex) - if improve_dft: - minimum_pattern_size = 2 * ff * ucell_pmt.shape[2] - else: - minimum_pattern_size = 2 * ff - - for i, layer in enumerate(ucell_pmt): - n = minimum_pattern_size // layer.shape[1] - layer = jnp.repeat(layer, n + 1, axis=1, total_repeat_length=layer.shape[1] * (n + 1)) - f_coeffs = jnp.fft.fftshift(jnp.fft.fft(layer / layer.size)) - o_f_coeffs = jnp.fft.fftshift(jnp.fft.fft(1/layer / layer.size)) - # FFT scaling: - # https://kr.mathworks.com/matlabcentral/answers/15770-scaling-the-fft-and-the-ifft?s_tid=srchtitle - - center = jnp.array(f_coeffs.shape) // 2 - conv_idx = jnp.arange(-ff + 1, ff, 1) - conv_idx = circulant(conv_idx) - e_conv = f_coeffs[center[0], center[1] + conv_idx] - o_e_conv = o_f_coeffs[center[0], center[1] + conv_idx] - e_conv_all = e_conv_all.at[i].set(e_conv) - o_e_conv_all = o_e_conv_all.at[i].set(o_e_conv) - else: # 2D - ff_x = 2 * fourier_order_x + 1 - ff_y = 2 * fourier_order_y + 1 - - e_conv_all = jnp.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - o_e_conv_all = jnp.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y)).astype(type_complex) - - if improve_dft: - minimum_pattern_size_y = 2 * ff_y * ucell_pmt.shape[1] - minimum_pattern_size_x = 2 * ff_x * ucell_pmt.shape[2] - else: - minimum_pattern_size_y = 2 * ff_y - minimum_pattern_size_x = 2 * ff_x - # 9 * (40*500) * (40*500) / 1E6 = 3600 MB = 3.6 GB - - for i, layer in enumerate(ucell_pmt): - if layer.shape[0] < minimum_pattern_size_y: - n = minimum_pattern_size_y // layer.shape[0] - layer = jnp.repeat(layer, n + 1, axis=0, total_repeat_length=layer.shape[0] * (n + 1)) - if layer.shape[1] < minimum_pattern_size_x: - n = minimum_pattern_size_x // layer.shape[1] - layer = jnp.repeat(layer, n + 1, axis=1, total_repeat_length=layer.shape[1] * (n + 1)) - - f_coeffs = jnp.fft.fftshift(jnp.fft.fft2(layer / layer.size)) - o_f_coeffs = jnp.fft.fftshift(jnp.fft.fft2(1/layer / layer.size)) - center = jnp.array(f_coeffs.shape) // 2 - - conv_idx_y = jnp.arange(-ff_y + 1, ff_y, 1) - conv_idx_y = circulant(conv_idx_y) - conv_i = jnp.repeat(conv_idx_y, ff_x, axis=1) - conv_i = jnp.repeat(conv_i, jnp.array([ff_x] * ff_y), axis=0, total_repeat_length=ff_x * ff_y) - - conv_idx_x = jnp.arange(-ff_x + 1, ff_x, 1) - conv_idx_x = circulant(conv_idx_x) - conv_j = jnp.tile(conv_idx_x, (ff_y, ff_y)) - - e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] - o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] - e_conv_all = e_conv_all.at[i].set(e_conv) - o_e_conv_all = o_e_conv_all.at[i].set(o_e_conv) - return e_conv_all, o_e_conv_all + # epx_conv_all[i] = epx_conv + # epy_conv_all[i] = epy_conv + # epz_conv_i_all[i] = jnp.linalg.inv(epz_conv) + + epx_conv_all = epx_conv_all.at[i].set(epx_conv) + epy_conv_all = epy_conv_all.at[i].set(epy_conv) + epz_conv_i_all = epz_conv_i_all.at[i].set(jnp.linalg.inv(epz_conv)) + + return epx_conv_all, epy_conv_all, epz_conv_i_all def circulant(c): diff --git a/meent/on_jax/emsolver/field_distribution.py b/meent/on_jax/emsolver/field_distribution.py index 6cdfaaf..d2e949d 100644 --- a/meent/on_jax/emsolver/field_distribution.py +++ b/meent/on_jax/emsolver/field_distribution.py @@ -3,410 +3,79 @@ from functools import partial -# @partial(jax.jit, static_argnums=(5, 6, 7, 8, 9)) -def field_dist_1d_vectorized_ji(wavelength, kx_vector, T1, layer_info_list, period, - pol, res_x=20, res_y=20, res_z=20, type_complex=jnp.complex128, type_float=jnp.float64): + +def field_dist_1d(wavelength, kx, T1, layer_info_list, period, pol, res_x=20, res_y=1, res_z=20, + type_complex=jnp.complex128): k0 = 2 * jnp.pi / wavelength - Kx = jnp.diag(kx_vector / k0) + Kx = jnp.diag(kx / k0) field_cell = jnp.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) T_layer = T1 # From the first layer - for idx_layer, (E_conv_i, q, W, X, a_i, b, d) in enumerate(layer_info_list[::-1]): + for idx_layer, (epz_conv_i, W, V, q, d, A_i, B) in enumerate(layer_info_list[::-1]): + X = jnp.diag(jnp.exp(-k0 * q * d)) c1 = T_layer[:, None] - c2 = b @ a_i @ X @ T_layer[:, None] - + c2 = B @ A_i @ X @ T_layer[:, None] Q = jnp.diag(q) - if pol == 0: - V = W @ Q - EKx = None - - else: - V = E_conv_i @ W @ Q - EKx = E_conv_i @ Kx - - for k in range(res_z): - z = k / res_z * d - - if pol == 0: - Sy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Ux = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - C = Kx @ Sy - - x_1d = jnp.arange(res_x, dtype=type_float).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = jnp.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - - exp_K = jnp.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Ey = exp_K @ Sy - Hx = -1j * exp_K @ Ux - Hz = -1j * exp_K @ C - - val = jnp.concatenate((Ey, Hx, Hz), axis=-1) - - else: - Uy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Sx = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - - C = EKx @ Uy # there is a better option for convergence - - x_1d = jnp.arange(res_x, dtype=type_float).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = jnp.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - - exp_K = jnp.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Hy = exp_K @ Uy - Ex = 1j * exp_K @ Sx - Ez = -1j * exp_K @ C + # z_1d = jnp.arange(res_z, dtype=type_float).reshape((-1, 1, 1)) / res_z * d + z_1d = jnp.linspace(0, res_z, res_z).reshape((-1, 1, 1)) / res_z * d - val = jnp.concatenate((Hy, Ex, Ez), axis=-1) - - field_cell = field_cell.at[res_z * idx_layer + k].set(val) - - T_layer = a_i @ X @ T_layer - - return field_cell - - -# @partial(jax.jit, static_argnums=(8, 9, 10, 11)) -def field_dist_1d_conical_vectorized_ji(wavelength, kx_vector, n_I, theta, phi, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, type_complex=jnp.complex128, type_float=jnp.float64): - - k0 = 2 * jnp.pi / wavelength - ky = k0 * n_I * jnp.sin(theta) * jnp.sin(phi) - Kx = jnp.diag(kx_vector / k0) - - field_cell = jnp.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) - - T_layer = T1 - - big_I = jnp.eye((len(T1))).astype(type_complex) - - # From the first layer - for idx_layer, [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] \ - in enumerate(layer_info_list[::-1]): - - c = jnp.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer - - ff = len(c) // 4 - - c1_plus = c[0 * ff:1 * ff] - c2_plus = c[1 * ff:2 * ff] - c1_minus = c[2 * ff:3 * ff] - c2_minus = c[3 * ff:4 * ff] - - big_Q1 = jnp.diag(q_1) - big_Q2 = jnp.diag(q_2) - for k in range(res_z): - # Sx, Sy, Ux, Uy, Sz, Uz = z_loop_1d_conical(k, c, k0, Kx, ky, res_z, E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, d) - - z = k / res_z * d - - Sx = W_2 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Sy = V_11 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_12 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Ux = W_1 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) - - Uy = V_21 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_22 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Sz = -1j * E_conv_i @ (Kx @ Uy - ky * Ux) - - Uz = -1j * (Kx @ Sy - ky * Sx) - - x_1d = jnp.arange(res_x, dtype=type_float).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = jnp.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - - exp_K = jnp.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Ex = exp_K @ Sx - Ey = exp_K @ Sy - Ez = exp_K @ Sz - - Hx = -1j * exp_K @ Ux - Hy = -1j * exp_K @ Uy - Hz = -1j * exp_K @ Uz - - val = jnp.concatenate((Ex, Ey, Ez, Hx, Hy, Hz), axis=-1) - - field_cell = field_cell.at[res_z * idx_layer + k].set(val) - - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - - -# @partial(jax.jit, static_argnums=(5, 6, 10, 11, 12, 13)) -def field_dist_2d_vectorized_ji(wavelength, kx_vector, n_I, theta, phi, fourier_order_x, fourier_order_y, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, type_complex=jnp.complex128, type_float=jnp.float64): - - k0 = 2 * jnp.pi / wavelength - - fourier_indices_y = jnp.arange(-fourier_order_y, fourier_order_y + 1, dtype=type_float) - ff_x = fourier_order_x * 2 + 1 - ff_y = fourier_order_y * 2 + 1 - ky_vector = k0 * (n_I * jnp.sin(theta) * jnp.sin(phi) + fourier_indices_y * ( - wavelength / period[1])).astype(type_complex) - - Kx = jnp.diag(jnp.tile(kx_vector, ff_y).flatten()) / k0 - Ky = jnp.diag(jnp.tile(ky_vector.reshape((-1, 1)), ff_x).flatten()) / k0 - - field_cell = jnp.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) - - T_layer = T1 - - big_I = jnp.eye((len(T1))).astype(type_complex) - - # From the first layer - for idx_layer, (E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d)\ - in enumerate(layer_info_list[::-1]): - - c = jnp.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer - - ff = len(c) // 4 - - c1_plus = c[0 * ff:1 * ff] - c2_plus = c[1 * ff:2 * ff] - c1_minus = c[2 * ff:3 * ff] - c2_minus = c[3 * ff:4 * ff] - - q1 = q[:len(q) // 2] - q2 = q[len(q) // 2:] - big_Q1 = jnp.diag(q1) - big_Q2 = jnp.diag(q2) - for k in range(res_z): - z = k / res_z * d - Sx = W_11 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + W_12 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Sy = W_21 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + W_22 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Ux = V_11 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_12 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Uy = V_21 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_22 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Sz = -1j * E_conv_i @ (Kx @ Uy - Ky @ Ux) - - Uz = -1j * (Kx @ Sy - Ky @ Sx) - - x_1d = jnp.arange(res_x, dtype=type_float).reshape((1, -1, 1)) - y_1d = jnp.arange(res_y, dtype=type_float).reshape((-1, 1, 1)) - - x_1d = -1j * x_1d * period[0] / res_x - y_1d = -1j * y_1d * period[1] / res_y - - x_2d = jnp.tile(x_1d, (res_y, 1, 1)) - y_2d = jnp.tile(y_1d, (1, res_x, 1)) - - x_2d = x_2d * kx_vector - y_2d = y_2d * ky_vector - - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - y_2d = y_2d.reshape((res_y, res_x, len(ky_vector), 1)) - - exp_K = jnp.exp(x_2d) * jnp.exp(y_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Ex = exp_K @ Sx - Ey = exp_K @ Sy - Ez = exp_K @ Sz - - Hx = -1j * exp_K @ Ux - Hy = -1j * exp_K @ Uy - Hz = -1j * exp_K @ Uz - - val = jnp.concatenate((Ex, Ey, Ez, Hx, Hy, Hz), axis=-1) - - field_cell = field_cell.at[res_z * idx_layer + k].set(val) - - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - - -def field_dist_1d_vectorized_kji(wavelength, kx_vector, T1, layer_info_list, period, pol, res_x=20, res_y=20, res_z=20, - type_complex=jnp.complex128, type_float=jnp.float64): - - k0 = 2 * jnp.pi / wavelength - Kx = jnp.diag(kx_vector / k0) - - field_cell = jnp.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) - - T_layer = T1 - - # From the first layer - for idx_layer, (E_conv_i, q, W, X, a_i, b, d) in enumerate(layer_info_list[::-1]): - - c1 = T_layer[:, None] - c2 = b @ a_i @ X @ T_layer[:, None] - - Q = jnp.diag(q) + My = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + Mx = V @ (diag_exp_batch(-k0 * Q * z_1d) @ -c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) if pol == 0: - V = W @ Q - EKx = None - + Mz = -1j * Kx @ My else: - V = E_conv_i @ W @ Q - EKx = E_conv_i @ Kx + Mz = -1j * epz_conv_i @ Kx @ My if pol else -1j * Kx @ My - z_1d = jnp.arange(res_z, dtype=type_float).reshape((-1, 1, 1)) / res_z * d - - if pol == 0: - Sy = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - Ux = V @ (-diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - C = Kx @ Sy + # x_1d = np.arange(1, res_x+1).reshape((1, -1, 1)) + # x_1d = x_1d * period[0] / res_x - x_1d = jnp.arange(res_x, dtype=type_float).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = jnp.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) + x_1d = jnp.linspace(0, period[0], res_x).reshape((1, -1, 1)) - exp_K = jnp.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) + x_2d = jnp.tile(x_1d, (res_y, 1, 1)) + x_2d = x_2d * kx * k0 + x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) - Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] - Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] - Hz = -1j * exp_K[:, :, None, :] @ C[:, None, None, :, :] + inv_fourier = jnp.exp(-1j * x_2d) + inv_fourier = inv_fourier.reshape((res_y, res_x, -1)) - val = jnp.concatenate((Ey.squeeze(-1), Hx.squeeze(-1), Hz.squeeze(-1)), axis=-1) + if pol == 0: + Fy = inv_fourier[:, :, None, :] @ My[:, None, None, :, :] + Fx = 1j * inv_fourier[:, :, None, :] @ Mx[:, None, None, :, :] + Fz = 1j * inv_fourier[:, :, None, :] @ Mz[:, None, None, :, :] else: - Uy = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - Sx = V @ (-diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - - C = EKx @ Uy # there is a better option for convergence - - x_1d = jnp.arange(res_x, dtype=type_float).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = jnp.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - - exp_K = jnp.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Hy = exp_K[:, :, None, :] @ Uy[:, None, None, :, :] - Ex = 1j * exp_K[:, :, None, :] @ Sx[:, None, None, :, :] - Ez = -1j * exp_K[:, :, None, :] @ C[:, None, None, :, :] - - val = jnp.concatenate((Hy.squeeze(-1), Ex.squeeze(-1), Ez.squeeze(-1)), axis=-1) + Fy = inv_fourier[:, :, None, :] @ My[:, None, None, :, :] + Fx = -1j * inv_fourier[:, :, None, :] @ Mx[:, None, None, :, :] + Fz = -1j * inv_fourier[:, :, None, :] @ Mz[:, None, None, :, :] + val = jnp.concatenate((Fy.squeeze(-1), Fx.squeeze(-1), Fz.squeeze(-1)), axis=-1) + # field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val field_cell = field_cell.at[res_z * idx_layer:res_z * (idx_layer + 1)].set(val) - T_layer = a_i @ X @ T_layer + T_layer = A_i @ X @ T_layer return field_cell -# @partial(jax.jit, static_argnums=(8, 9, 10, 11)) -def field_dist_1d_conical_vectorized_kji(wavelength, kx_vector, n_I, theta, phi, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, - type_complex=jnp.complex128, type_float=jnp.float64): - - k0 = 2 * jnp.pi / wavelength - ky = k0 * n_I * jnp.sin(theta) * jnp.sin(phi) - Kx = jnp.diag(kx_vector / k0) - - field_cell = jnp.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) - - T_layer = T1 - - big_I = jnp.eye((len(T1))).astype(type_complex) - - # From the first layer - for idx_layer, [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] \ - in enumerate(layer_info_list[::-1]): - - c = jnp.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer - - z_1d = jnp.arange(res_z, dtype=type_float).reshape((-1, 1, 1)) / res_z * d - - ff = len(c) // 4 - - c1_plus = c[0 * ff:1 * ff] - c2_plus = c[1 * ff:2 * ff] - c1_minus = c[2 * ff:3 * ff] - c2_minus = c[3 * ff:4 * ff] - - big_Q1 = jnp.diag(q_1) - big_Q2 = jnp.diag(q_2) - - Sx = W_2 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - - Sy = V_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - - Ux = W_1 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) - - Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - - Sz = -1j * E_conv_i @ (Kx @ Uy - ky * Ux) - Uz = -1j * (Kx @ Sy - ky * Sx) - - x_1d = jnp.arange(res_x, dtype=type_float).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = jnp.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - - exp_K = jnp.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Ex = exp_K[:, :, None, :] @ Sx[:, None, None, :, :] - Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] - Ez = exp_K[:, :, None, :] @ Sz[:, None, None, :, :] - - Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] - Hy = -1j * exp_K[:, :, None, :] @ Uy[:, None, None, :, :] - Hz = -1j * exp_K[:, :, None, :] @ Uz[:, None, None, :, :] - - val = jnp.concatenate( - (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), - axis=-1) - field_cell = field_cell.at[res_z * idx_layer:res_z * (idx_layer + 1)].set(val) - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - # @partial(jax.jit, static_argnums=(5, 6, 10, 11, 12, 13)) -def field_dist_2d_vectorized_kji(wavelength, kx_vector, n_I, theta, phi, fourier_order_x, fourier_order_y, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, type_complex=jnp.complex128, type_float=jnp.float64): +def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, + res_x=20, res_y=20, res_z=20, type_complex=jnp.complex128, type_float=jnp.float64): k0 = 2 * jnp.pi / wavelength - fourier_indices_y = jnp.arange(-fourier_order_y, fourier_order_y + 1, dtype=type_float) - ff_x = fourier_order_x * 2 + 1 - ff_y = fourier_order_y * 2 + 1 - ky_vector = k0 * (n_I * jnp.sin(theta) * jnp.sin(phi) + fourier_indices_y * ( - wavelength / period[1])).astype(type_complex) + ff_x = len(kx) + ff_y = len(ky) + ff_xy = ff_x * ff_y - Kx = jnp.diag(jnp.tile(kx_vector, ff_y).flatten()) / k0 - Ky = jnp.diag(jnp.tile(ky_vector.reshape((-1, 1)), ff_x).flatten()) / k0 + Kx = jnp.diag(jnp.tile(kx, ff_y).flatten()) + Ky = jnp.diag(jnp.tile(ky.reshape((-1, 1)), ff_x).flatten()) field_cell = jnp.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) @@ -415,18 +84,28 @@ def field_dist_2d_vectorized_kji(wavelength, kx_vector, n_I, theta, phi, fourier big_I = jnp.eye((len(T1))).astype(type_complex) # From the first layer - for idx_layer, (E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d)\ - in enumerate(layer_info_list[::-1]): + for idx_layer, (epz_conv_i, W, V, q, d, big_A_i, big_B) in enumerate(layer_info_list[::-1]): - c = jnp.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer - z_1d = jnp.arange(res_z, dtype=type_float).reshape((-1, 1, 1)) / res_z * d + W_11 = W[:ff_xy, :ff_xy] + W_12 = W[:ff_xy, ff_xy:] + W_21 = W[ff_xy:, :ff_xy] + W_22 = W[ff_xy:, ff_xy:] + + V_11 = V[:ff_xy, :ff_xy] + V_12 = V[:ff_xy, ff_xy:] + V_21 = V[ff_xy:, :ff_xy] + V_22 = V[ff_xy:, ff_xy:] - ff = len(c) // 4 + big_X = jnp.diag(jnp.exp(-k0 * q * d)) - c1_plus = c[0 * ff:1 * ff] - c2_plus = c[1 * ff:2 * ff] - c1_minus = c[2 * ff:3 * ff] - c2_minus = c[3 * ff:4 * ff] + c = jnp.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer + z_1d = jnp.linspace(0, res_z, res_z).reshape((-1, 1, 1)) / res_z * d + # z_1d = np.arange(0, res_z, res_z).reshape((-1, 1, 1)) / res_z * d + + c1_plus = c[0 * ff_xy:1 * ff_xy] + c2_plus = c[1 * ff_xy:2 * ff_xy] + c1_minus = c[2 * ff_xy:3 * ff_xy] + c2_minus = c[3 * ff_xy:4 * ff_xy] q1 = q[:len(q) // 2] q2 = q[len(q) // 2:] @@ -439,44 +118,40 @@ def field_dist_2d_vectorized_kji(wavelength, kx_vector, n_I, theta, phi, fourier Sy = W_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + W_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Ux = V_11 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_12 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Ux = -V_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + - V_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - - Sz = -1j * E_conv_i @ (Kx @ Uy - Ky @ Ux) + Uy = -V_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + - V_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Sz = -1j * epz_conv_i @ (Kx @ Uy - Ky @ Ux) Uz = -1j * (Kx @ Sy - Ky @ Sx) - x_1d = jnp.arange(res_x, dtype=type_float).reshape((1, -1, 1)) - y_1d = jnp.arange(res_y, dtype=type_float).reshape((-1, 1, 1)) + # x_1d = jnp.arange(res_x).reshape((1, -1, 1)) * period[0] / res_x + x_1d = jnp.linspace(0, period[0], res_x).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - y_1d = -1j * y_1d * period[1] / res_y + # y_1d = jnp.arange(res_y-1, -1, -1).reshape((-1, 1, 1)) * period[1] / res_y + y_1d = jnp.linspace(0, period[1], res_y)[::-1].reshape((-1, 1, 1)) x_2d = jnp.tile(x_1d, (res_y, 1, 1)) - y_2d = jnp.tile(y_1d, (1, res_x, 1)) + x_2d = x_2d * kx * k0 + x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) - x_2d = x_2d * kx_vector - y_2d = y_2d * ky_vector - - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - y_2d = y_2d.reshape((res_y, res_x, len(ky_vector), 1)) - - exp_K = jnp.exp(x_2d) * jnp.exp(y_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) + y_2d = jnp.tile(y_1d, (1, res_x, 1)) + y_2d = y_2d * ky * k0 + y_2d = y_2d.reshape((res_y, res_x, len(ky), 1)) - Ex = exp_K[:, :, None, :] @ Sx[:, None, None, :, :] - Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] - Ez = exp_K[:, :, None, :] @ Sz[:, None, None, :, :] + inv_fourier = jnp.exp(-1j * x_2d) * jnp.exp(-1j * y_2d) + inv_fourier = inv_fourier.reshape((res_y, res_x, -1)) - Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] - Hy = -1j * exp_K[:, :, None, :] @ Uy[:, None, None, :, :] - Hz = -1j * exp_K[:, :, None, :] @ Uz[:, None, None, :, :] + Ex = inv_fourier[:, :, None, :] @ Sx[:, None, None, :, :] + Ey = inv_fourier[:, :, None, :] @ Sy[:, None, None, :, :] + Ez = inv_fourier[:, :, None, :] @ Sz[:, None, None, :, :] + Hx = 1j * inv_fourier[:, :, None, :] @ Ux[:, None, None, :, :] + Hy = 1j * inv_fourier[:, :, None, :] @ Uy[:, None, None, :, :] + Hz = 1j * inv_fourier[:, :, None, :] @ Uz[:, None, None, :, :] val = jnp.concatenate( - (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), - axis=-1) + (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), -1) field_cell = field_cell.at[res_z * idx_layer:res_z * (idx_layer + 1)].set(val) @@ -485,449 +160,6 @@ def field_dist_2d_vectorized_kji(wavelength, kx_vector, n_I, theta, phi, fourier return field_cell -def field_dist_1d_vanilla(wavelength, kx_vector, T1, layer_info_list, period, - pol, res_x=20, res_y=20, res_z=20, type_complex=jnp.complex128): - - k0 = 2 * jnp.pi / wavelength - Kx = jnp.diag(kx_vector / k0) - - field_cell = jnp.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) - - T_layer = T1 - - # From the first layer - for idx_layer, (E_conv_i, q, W, X, a_i, b, d) in enumerate(layer_info_list[::-1]): - - c1 = T_layer[:, None] - c2 = b @ a_i @ X @ T_layer[:, None] - - Q = jnp.diag(q) - - if pol == 0: - V = W @ Q - EKx = None - - else: - V = E_conv_i @ W @ Q - EKx = E_conv_i @ Kx - - for k in range(res_z): - z = k / res_z * d - - if pol == 0: - Sy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Ux = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - C = Kx @ Sy - - for j in range(res_y): - for i in range(res_x): - x = i * period[0] / res_x - - Ey = Sy.T @ jnp.exp(-1j * kx_vector.reshape((-1, 1)) * x) - Hx = -1j * Ux.T @ jnp.exp(-1j * kx_vector.reshape((-1, 1)) * x) - Hz = -1j * C.T @ jnp.exp(-1j * kx_vector.reshape((-1, 1)) * x) - - field_cell = field_cell.at[res_z * idx_layer + k, j, i].set([Ey[0, 0], Hx[0, 0], Hz[0, 0]]) - - else: - Uy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Sx = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - - C = EKx @ Uy # there is a better option for convergence - for j in range(res_y): - for i in range(res_x): - x = i * period[0] / res_x - - Hy = Uy.T @ jnp.exp(-1j * kx_vector.reshape((-1, 1)) * x) - Ex = 1j * Sx.T @ jnp.exp(-1j * kx_vector.reshape((-1, 1)) * x) - Ez = (-1j) * C.T @ jnp.exp(-1j * kx_vector.reshape((-1, 1)) * x) - - field_cell = field_cell.at[res_z * idx_layer + k, j, i].set([Hy[0, 0], Ex[0, 0], Ez[0, 0]]) - - T_layer = a_i @ X @ T_layer - - return field_cell - - -def field_dist_1d_conical_vanilla(wavelength, kx_vector, n_I, theta, phi, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, type_complex=jnp.complex128): - - k0 = 2 * jnp.pi / wavelength - ky = k0 * n_I * jnp.sin(theta) * jnp.sin(phi) - Kx = jnp.diag(kx_vector / k0) - - field_cell = jnp.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) - - T_layer = T1 - - big_I = jnp.eye((len(T1))).astype(type_complex) - - # From the first layer - for idx_layer, [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] \ - in enumerate(layer_info_list[::-1]): - - c = jnp.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer - - ff = len(c) // 4 - - c1_plus = c[0 * ff:1 * ff] - c2_plus = c[1 * ff:2 * ff] - c1_minus = c[2 * ff:3 * ff] - c2_minus = c[3 * ff:4 * ff] - - big_Q1 = jnp.diag(q_1) - big_Q2 = jnp.diag(q_2) - - for k in range(res_z): - z = k / res_z * d - - Sx = W_2 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Sy = V_11 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_12 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Ux = W_1 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) - Uy = V_21 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_22 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Sz = -1j * E_conv_i @ (Kx @ Uy - ky * Ux) - Uz = -1j * (Kx @ Sy - ky * Sx) - - for j in range(res_y): - for i in range(res_x): - # val = x_loop_1d_conical(period, res_x, kx, Sx, Sy, Sz, Ux, Uy, Uz, i) - x = i * period[0] / res_x - - exp_K = jnp.exp(-1j * kx_vector.reshape((-1, 1)) * x) - # exp_K = exp_K.flatten() - - Ex = Sx.T @ exp_K - Ey = Sy.T @ exp_K - Ez = Sz.T @ exp_K - - Hx = -1j * Ux.T @ exp_K - Hy = -1j * Uy.T @ exp_K - Hz = -1j * Uz.T @ exp_K - - val = [Ex[0, 0], Ey[0, 0], Ez[0, 0], Hx[0, 0], Hy[0, 0], Hz[0, 0]] - field_cell = field_cell.at[res_z * idx_layer + k, j, i].set(val) - - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - - -def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_x, fourier_order_y, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, type_complex=jnp.complex128): - - k0 = 2 * jnp.pi / wavelength - - fourier_indices_y = jnp.arange(-fourier_order_y, fourier_order_y + 1) - ff_x = fourier_order_x * 2 + 1 - ff_y = fourier_order_y * 2 + 1 - ky_vector = k0 * (n_I * jnp.sin(theta) * jnp.sin(phi) + fourier_indices_y * ( - wavelength / period[1])).astype(type_complex) - - Kx = jnp.diag(jnp.tile(kx_vector, ff_y).flatten()) / k0 - Ky = jnp.diag(jnp.tile(ky_vector.reshape((-1, 1)), ff_x).flatten()) / k0 - - field_cell = jnp.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) - - T_layer = T1 - - big_I = jnp.eye((len(T1))).astype(type_complex) - - # From the first layer - for idx_layer, (E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d)\ - in enumerate(layer_info_list[::-1]): - c = jnp.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer - - ff = len(c) // 4 - - c1_plus = c[0 * ff:1 * ff] - c2_plus = c[1 * ff:2 * ff] - c1_minus = c[2 * ff:3 * ff] - c2_minus = c[3 * ff:4 * ff] - - q1 = q[:len(q) // 2] - q2 = q[len(q) // 2:] - big_Q1 = jnp.diag(q1) - big_Q2 = jnp.diag(q2) - - for k in range(res_z): - z = k / res_z * d - - Sx = W_11 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + W_12 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Sy = W_21 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + W_22 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Ux = V_11 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_12 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Uy = V_21 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_22 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - Sz = -1j * E_conv_i @ (Kx @ Uy - Ky @ Ux) - Uz = -1j * (Kx @ Sy - Ky @ Sx) - - for j in range(res_y): - y = j * period[1] / res_y - for i in range(res_x): - x = i * period[0] / res_x - - exp_K = jnp.exp(-1j * kx_vector.reshape((1, -1)) * x) * jnp.exp( - -1j * ky_vector.reshape((-1, 1)) * y) - exp_K = exp_K.flatten() - - Ex = Sx.T @ exp_K - Ey = Sy.T @ exp_K - Ez = Sz.T @ exp_K - Hx = -1j * Ux.T @ exp_K - Hy = -1j * Uy.T @ exp_K - Hz = -1j * Uz.T @ exp_K - - val = [Ex[0], Ey[0], Ez[0], Hx[0], Hy[0], Hz[0]] - - field_cell = field_cell.at[res_z * idx_layer + k, j, i].set(val) - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - - -# def field_dist_2d_lax(wavelength, kx, n_top, theta, phi, fto_x, fto_y, T1, layer_info_list, period, -# resolution=(10, 10, 10), -# type_complex=jnp.complex128): -# -# k0 = 2 * jnp.pi / wavelength -# fourier_indices_y = jnp.arange(-fto_y, fto_y + 1) -# ff_x = fto_x * 2 + 1 -# ff_y = fto_y * 2 + 1 -# ff_xy = ff_x * ff_y -# ky_vector = k0 * (n_top * jnp.sin(theta) * jnp.sin(phi) + fourier_indices_y * ( -# wavelength / period[1])).astype(type_complex) -# -# Kx = jnp.diag(jnp.tile(kx, ff_y).flatten()) / k0 -# Ky = jnp.diag(jnp.tile(ky_vector.reshape((-1, 1)), ff_x).flatten()) / k0 -# -# resolution_x, resolution_y, resolution_z = resolution -# field_cell = jnp.zeros((resolution_z * len(layer_info_list), resolution_y, resolution_x, 6), dtype=type_complex) -# -# T_layer = T1 -# -# big_I = jnp.eye((len(T1))).astype(type_complex) -# -# # From the first layer -# for idx_layer, (E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d)\ -# in enumerate(layer_info_list[::-1]): -# -# c = jnp.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer -# i=j=k=0 # delete -# -# args = [k, j, i, k0, resolution_z, resolution_y, resolution_x, idx_layer, d, kx, ky_vector, q, period, c, Kx, Ky, E_conv_i, W_11, W_12, W_21, W_22, V_11, V_12, V_21] -# -# res_size = 1 * 9 + ff_x + ff_y + 2*ff_xy + 2 + 2*2*ff_xy + 11 * ff_xy**2 -# res = jnp.zeros(res_size, dtype=type_complex) -# -# b = 0 -# for ix, item in enumerate(args): -# if type(item) in (float, int): -# length = 1 -# val = item -# elif isinstance(item, jax.numpy.ndarray): -# length = item.size -# val = item.flatten() -# elif type(item) is list: -# length = len(item) -# val = jnp.array(item) -# else: -# raise -# -# res[b:b+length] = val -# b += length -# -# ress = jnp.tile(res, (resolution_z * resolution_y * resolution_x, 1)) -# -# base = jnp.arange(resolution_x) -# i_list = jnp.tile(base, resolution_z * resolution_y)[:,None] -# j_list = jnp.tile(jnp.repeat(base, resolution_x), resolution_z)[:,None] -# k_list = jnp.repeat(base, resolution_x * resolution_y)[:,None] -# kji = jnp.hstack((k_list, j_list, i_list)) -# -# resss = ress.at[:, :3].set(kji) -# -# def calc(field_cell, args): -# k = args[0] -# j = args[1] -# i = args[2] -# k0 = args[3] -# resolution_z = args[4] -# resolution_y = args[5] -# resolution_x = args[6] -# idx_layer = args[7] -# d = args[8] -# -# b, e = 9, 9 + ff_x -# kx = args[b:e] -# b, e = e, e + ff_y -# ky_vector = args[b:e] -# b, e = e, e + 2 * ff_xy -# q = args[b:e] -# b, e = e, e + 2 -# period = args[b:e] -# -# b, e = e, e + 2 * 2 * ff_xy -# c = args[b:e].reshape((-1, 1)) -# -# b, e = e, e + ff_xy * ff_xy -# Kx = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# Ky = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# E_conv_i = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# W_11 = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# W_12 = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# W_21 = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# W_22 = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# V_11 = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# V_12 = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# V_21 = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# V_22 = args[b:e].reshape((ff_xy, ff_xy)) -# -# y = j * period[1] / resolution_y -# Sx, Sy, Ux, Uy, Sz, Uz = z_loop_2d(k, c, k0, Kx, Ky, resolution_z, E_conv_i, q, W_11, W_12, W_21, W_22, -# V_11, V_12, V_21, V_22, d) -# val = x_loop_2d(period, resolution_x, kx, ky_vector, Sx, Sy, Sz, Ux, Uy, Uz, y, i) -# field_cell = field_cell.at[(resolution_z * idx_layer + k).real.astype(int), j.real.astype(int), i.real.astype(int)].set(val) -# -# return field_cell, val -# -# field_cell, _ = jax.lax.scan(calc, field_cell, resss) -# return field_cell -# -# -# -# def field_dist_2d_lax_heavy(wavelength, kx, n_top, theta, phi, fto_x, fto_y, T1, layer_info_list, period, -# resolution=(10, 10, 10), -# type_complex=jnp.complex128): -# -# k0 = 2 * jnp.pi / wavelength -# fourier_indices_y = jnp.arange(-fto_y, fto_y + 1) -# ff_x = fto_x * 2 + 1 -# ff_y = fto_y * 2 + 1 -# ff_xy = ff_x * ff_y -# ky_vector = k0 * (n_top * jnp.sin(theta) * jnp.sin(phi) + fourier_indices_y * ( -# wavelength / period[1])).astype(type_complex) -# -# Kx = jnp.diag(jnp.tile(kx, ff_y).flatten()) / k0 -# Ky = jnp.diag(jnp.tile(ky_vector.reshape((-1, 1)), ff_x).flatten()) / k0 -# -# resolution_x, resolution_y, resolution_z = resolution -# field_cell = jnp.zeros((resolution_z * len(layer_info_list), resolution_y, resolution_x, 6), dtype=type_complex) -# -# T_layer = T1 -# -# big_I = jnp.eye((len(T1))).astype(type_complex) -# -# # From the first layer -# for idx_layer, (E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d)\ -# in enumerate(layer_info_list[::-1]): -# -# c = jnp.block([[big_I], [big_B @ big_A_i @ big_X]]) @ T_layer -# i=j=k=0 # delete -# -# args = [k, j, i, k0, resolution_z, resolution_y, resolution_x, idx_layer, d, kx, ky_vector, q, period, c, Kx, Ky, E_conv_i, W_11, W_12, W_21, W_22, V_11, V_12, V_21] -# -# res_size = 1 * 9 + ff_x + ff_y + 2*ff_xy + 2 + 2*2*ff_xy + 11 * ff_xy**2 -# res = jnp.zeros(res_size, dtype=type_complex) -# -# b = 0 -# for ix, item in enumerate(args): -# if type(item) in (float, int): -# length = 1 -# val = item -# elif isinstance(item, jax.numpy.ndarray): -# length = item.size -# val = item.flatten() -# elif type(item) is list: -# length = len(item) -# val = jnp.array(item) -# else: -# raise -# -# res[b:b+length] = val -# b += length -# -# ress = jnp.tile(res, (resolution_z * resolution_y * resolution_x, 1)) -# -# base = jnp.arange(resolution_x) -# i_list = jnp.tile(base, resolution_z * resolution_y)[:,None] -# j_list = jnp.tile(jnp.repeat(base, resolution_x), resolution_z)[:,None] -# k_list = jnp.repeat(base, resolution_x * resolution_y)[:,None] -# kji = jnp.hstack((k_list, j_list, i_list)) -# -# resss = ress.at[:, :3].set(kji) -# -# def calc(field_cell, args): -# k = args[0] -# j = args[1] -# i = args[2] -# k0 = args[3] -# resolution_z = args[4] -# resolution_y = args[5] -# resolution_x = args[6] -# idx_layer = args[7] -# d = args[8] -# -# b, e = 9, 9 + ff_x -# kx = args[b:e] -# b, e = e, e + ff_y -# ky_vector = args[b:e] -# b, e = e, e + 2 * ff_xy -# q = args[b:e] -# b, e = e, e + 2 -# period = args[b:e] -# -# b, e = e, e + 2 * 2 * ff_xy -# c = args[b:e].reshape((-1, 1)) -# -# b, e = e, e + ff_xy * ff_xy -# Kx = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# Ky = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# E_conv_i = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# W_11 = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# W_12 = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# W_21 = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# W_22 = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# V_11 = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# V_12 = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# V_21 = args[b:e].reshape((ff_xy, ff_xy)) -# b, e = e, e + ff_xy * ff_xy -# V_22 = args[b:e].reshape((ff_xy, ff_xy)) -# -# y = j * period[1] / resolution_y -# Sx, Sy, Ux, Uy, Sz, Uz = z_loop_2d(k, c, k0, Kx, Ky, resolution_z, E_conv_i, q, W_11, W_12, W_21, W_22, -# V_11, V_12, V_21, V_22, d) -# val = x_loop_2d(period, resolution_x, kx, ky_vector, Sx, Sy, Sz, Ux, Uy, Uz, y, i) -# field_cell = field_cell.at[(resolution_z * idx_layer + k).real.astype(int), j.real.astype(int), i.real.astype(int)].set(val) -# -# return field_cell, val -# -# field_cell, _ = jax.lax.scan(calc, field_cell, resss) -# return field_cell - - def field_plot(field_cell, pol=0, plot_indices=(1, 1, 1, 1, 1, 1), y_slice=0, z_slice=-1, zx=True, yx=True): try: import matplotlib.pyplot as plt diff --git a/meent/on_jax/emsolver/fourier_analysis.py b/meent/on_jax/emsolver/fourier_analysis.py new file mode 100644 index 0000000..3cf2086 --- /dev/null +++ b/meent/on_jax/emsolver/fourier_analysis.py @@ -0,0 +1,137 @@ +import jax.numpy as jnp + + +def _cfs(x, cell, fto, period, type_complex=jnp.complex128): + + cell_next = jnp.roll(cell, -1, axis=1) + cell_diff = cell_next - cell + + modes = jnp.arange(-2 * fto, 2 * fto + 1, 1) + + center = 2 * fto + nc = jnp.ones(len(modes), dtype=bool) + # nc[center] = False + nc = nc.at[center].set(False) + + x_next = jnp.vstack((jnp.roll(x, -1, axis=0)[:-1], period)) - x + + # f_coeffs_xy = f_coeffs_x_diff_y.T @ jnp.exp(-1j * 2 * jnp.pi * y @ modes_y[None, :] / period_y).astype(type_complex) + f = cell_diff @ jnp.exp(-1j * 2 * jnp.pi * x @ modes[None, :] / period).astype(type_complex) + + assign_value = f[:, nc] / (1j * 2 * jnp.pi * modes[nc]) + f = f.at[:, nc].set(assign_value) + # f[:, nc] /= (1j * 2 * jnp.pi * modes[nc]) + + assign_value = (cell @ jnp.vstack((x[0], x_next[:-1]))).flatten() / period + f = f.at[:, center].set(assign_value) + # f[:, center] = (cell @ jnp.vstack((x[0], x_next[:-1]))).flatten() / period + + return f + + +def cfs2d(cell, x, y, conti_x, conti_y, fto_x, fto_y, type_complex=jnp.complex128): + cell = cell.astype(type_complex) + + ff_x = 2 * fto_x + 1 + ff_y = 2 * fto_y + 1 + + period_x, period_y = x[-1], y[-1] + + cell = cell.T + + if conti_y == 0: # discontinuous in Y (Row): inverse rule is applied. + cell = 1 / cell + + cfs1d = _cfs(y, cell, fto_y, period_y) + + conv_index_1 = circulant(fto_y) + (2 * fto_y) + conv_index_2 = circulant(fto_x) + (2 * fto_x) + + conv1d = cfs1d[:, conv_index_1] + + if conti_x ^ conti_y: + conv1d = jnp.linalg.inv(conv1d) + + conv1d = conv1d.reshape((-1, ff_y ** 2)) + + cfs2d = _cfs(x, conv1d.T, fto_x, period_x) + + conv2d = cfs2d[:, conv_index_2] + conv2d = conv2d.reshape((ff_y, ff_y, ff_x, ff_x)) + conv2d = jnp.moveaxis(conv2d, 1, 2) + conv2d = conv2d.reshape((ff_y*ff_x, ff_y*ff_x)) + + if conti_x == 0: # discontinuous in X (Column): inverse rule is applied. + conv2d = jnp.linalg.inv(conv2d) + + return conv2d + + +def dfs2d(cell, conti_x, conti_y, fto_x, fto_y, type_complex=jnp.complex128): + cell = cell.astype(type_complex) + + ff_x = 2 * fto_x + 1 + ff_y = 2 * fto_y + 1 + + cell = cell.T + + if conti_y == 0: # discontinuous in Y (Row): inverse rule is applied. + cell = 1 / cell + + dfs1d = jnp.fft.fft(cell / cell.shape[1]) + + conv_index_1 = circulant(fto_y) + conv_index_2 = circulant(fto_x) + + conv1d = dfs1d[:, conv_index_1] + + if conti_x ^ conti_y: + conv1d = jnp.linalg.inv(conv1d) + + conv1d = conv1d.reshape((-1, ff_y ** 2)) + + dfs2d = jnp.fft.fft(conv1d.T / conv1d.T.shape[1]) + + conv2d = dfs2d[:, conv_index_2] + conv2d = conv2d.reshape((ff_y, ff_y, ff_x, ff_x)) + conv2d = jnp.moveaxis(conv2d, 1, 2) + conv2d = conv2d.reshape((ff_y*ff_x, ff_y*ff_x)) + + if conti_x == 0: # discontinuous in X (Column): inverse rule is applied. + conv2d = jnp.linalg.inv(conv2d) + + return conv2d + + +def circulant(fto): + """ + Return circular matrix of indices. + Args: + fto: Fourier order, or number of harmonics, in use. + + Returns: circular matrix of indices. + + """ + ff = 2 * fto + 1 + + stride = 2 * fto + + circ = jnp.zeros((ff, ff), dtype=int) + + for r in range(stride + 1): + idx = jnp.arange(-r, -r + ff, 1, dtype=int) + # circ[r] = idx + circ = circ.at[r].set(idx) + + return circ + + +# def circulant(c): +# center = c.shape[0] // 2 +# circ = jnp.zeros((center + 1, center + 1), int) +# +# for r in range(center+1): +# idx = jnp.arange(r, r - center - 1, -1) +# circ = circ.at[r].set(c[center - idx]) +# +# return circ diff --git a/meent/on_jax/emsolver/rcwa.py b/meent/on_jax/emsolver/rcwa.py index 9fcfa24..3ebd6ea 100644 --- a/meent/on_jax/emsolver/rcwa.py +++ b/meent/on_jax/emsolver/rcwa.py @@ -8,40 +8,39 @@ from ._base import _BaseRCWA from .convolution_matrix import to_conv_mat_raster_discrete, to_conv_mat_raster_continuous, to_conv_mat_vector -from .field_distribution import field_dist_1d_vectorized_ji, field_dist_1d_conical_vectorized_ji, \ - field_dist_2d_vectorized_ji, field_plot, \ - field_dist_1d_vectorized_kji, field_dist_1d_conical_vectorized_kji, field_dist_1d_vanilla, \ - field_dist_1d_conical_vanilla, field_dist_2d_vanilla, field_dist_2d_vectorized_kji +from .field_distribution import field_dist_1d, field_dist_2d, field_plot class RCWAJax(_BaseRCWA): def __init__(self, - n_I=1., - n_II=1., + n_top=1., + n_bot=1., theta=0., phi=0., + psi=None, period=(100., 100.), wavelength=900., ucell=None, ucell_info_list=None, thickness=(0., ), - backend=1, - grating_type=0, + backend=0, + grating_type=None, + modeling_type=None, pol=0., - fourier_order=(2, 0), + fto=(0, 0), ucell_materials=None, - algo='TMM', + connecting_algo='TMM', perturbation=1E-20, device='cpu', - type_complex=jnp.complex128, - fft_type=0, - improve_dft=True, + type_complex=np.complex128, + fourier_type=None, # 0 DFS, 1 EFS, 2 CFS + enhanced_dfs=True, **kwargs, ): - super().__init__(grating_type=grating_type, n_I=n_I, n_II=n_II, theta=theta, phi=phi, pol=pol, - fourier_order=fourier_order, period=period, wavelength=wavelength, - thickness=thickness, algo=algo, perturbation=perturbation, + super().__init__(n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, psi=psi, pol=pol, + fto=fto, period=period, wavelength=wavelength, + thickness=thickness, connecting_algo=connecting_algo, perturbation=perturbation, device=device, type_complex=type_complex) self.ucell = ucell @@ -49,32 +48,56 @@ def __init__(self, self.ucell_info_list = ucell_info_list self.backend = backend - self.fft_type = fft_type - self.improve_dft = improve_dft - - self.layer_info_list = [] - - def _tree_flatten(self): - children = (self.n_I, self.n_II, self.theta, self.phi, self.psi, - self.period, self.wavelength, self.ucell, self.ucell_info_list, self.thickness) - aux_data = { - 'backend': self.backend, - 'grating_type': self.grating_type, - 'pol': self.pol, - 'fourier_order': self.fourier_order, - 'ucell_materials': self.ucell_materials, - 'connecting_algo': self.algo, - 'perturbation': self.perturbation, - 'device': self.device, - 'type_complex': self.type_complex, - 'fourier_type': self.fft_type, - } - - return children, aux_data - - @classmethod - def _tree_unflatten(cls, aux_data, children): - return cls(*children, **aux_data) + self.modeling_type = modeling_type + self._modeling_type_assigned = None + self.grating_type = grating_type + self._grating_type_assigned = None + self.fourier_type = fourier_type + self.enhanced_dfs = enhanced_dfs + + # grating type setting + if self.grating_type is None: + if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0): + self._grating_type_assigned = 0 + else: + self._grating_type_assigned = 2 + else: + self._grating_type_assigned = self.grating_type + + # modeling type setting + if self.modeling_type is None: + if self.ucell_info_list is None: + self._modeling_type_assigned = 0 + elif self.ucell is None: + self._modeling_type_assigned = 1 + else: + raise ValueError('Define "modeling_type" in "call_mee" function.') + else: + self._modeling_type_assigned = self.modeling_type + + # def _tree_flatten(self): + # children = (self.n_top, self.n_bot, self.theta, self.phi, self.psi, + # self.period, self.wavelength, self.ucell, self.ucell_info_list, self.thickness) + # aux_data = { + # 'backend': self.backend, + # 'grating_type': self.grating_type, + # 'modeling_type': self.modeling_type, + # 'pol': self.pol, + # 'fto': self.fto, + # 'ucell_materials': self.ucell_materials, + # 'connecting_algo': self.connecting_algo, + # 'perturbation': self.perturbation, + # 'device': self.device, + # 'type_complex': self.type_complex, + # 'fourier_type': self.fourier_type, + # 'enhanced_dfs': self.enhanced_dfs, + # } + # + # return children, aux_data + # + # @classmethod + # def _tree_unflatten(cls, aux_data, children): + # return cls(*children, **aux_data) @property def ucell(self): @@ -82,6 +105,10 @@ def ucell(self): @ucell.setter def ucell(self, ucell): + + if ucell is not None: + self._modeling_type_assigned = 0 # Raster type + if isinstance(ucell, jnp.ndarray): if ucell.dtype in (jnp.float64, jnp.float32, jnp.int64, jnp.int32): dtype = self.type_float @@ -103,7 +130,26 @@ def ucell(self, ucell): else: raise ValueError - def _solve(self, wavelength, e_conv_all, o_e_conv_all): + @property + def ucell_info_list(self): + return self._ucell_info_list + + @ucell_info_list.setter + def ucell_info_list(self, ucell_info_list): + self._ucell_info_list = ucell_info_list + if ucell_info_list is not None: # TODO: apply for numpy + self._modeling_type_assigned = 1 # Vector type + + def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): + + if self._grating_type_assigned == 0: + de_ri, de_ti, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + else: + de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + + return de_ri, de_ti, layer_info_list, T1 + + def _solve_old(self, wavelength, e_conv_all, o_e_conv_all): self.kx_vector = self.get_kx_vector(wavelength) if self.grating_type == 0: @@ -123,15 +169,15 @@ def solve(self, wavelength, e_conv_all, o_e_conv_all): self.layer_info_list = layer_info_list self.T1 = T1 - self.kx_vector = kx_vector + # self.kx = kx return de_ri, de_ti - def _conv_solve(self): + def _conv_solve_old(self): if self.fft_type == 0: E_conv_all, o_E_conv_all = to_conv_mat_raster_discrete(self.ucell, self.fourier_order[0], self.fourier_order[1], - type_complex=self.type_complex, improve_dft=self.improve_dft) + type_complex=self.type_complex, enhanced_dfs=self.improve_dft) elif self.fft_type == 1: E_conv_all, o_E_conv_all = to_conv_mat_raster_continuous(self.ucell, self.fourier_order[0], self.fourier_order[1], type_complex=self.type_complex) @@ -145,6 +191,47 @@ def _conv_solve(self): de_ri, de_ti, layer_info_list, T1, kx_vector = self._solve(self.wavelength, E_conv_all, o_E_conv_all) return de_ri, de_ti, layer_info_list, T1, kx_vector + def _conv_solve(self, **kwargs): + + if self._modeling_type_assigned == 0: # Raster + + if self.fourier_type == 0: + epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( + self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, + enhanced_dfs=self.enhanced_dfs) + + # if self.fourier_type == 0: + # enhance = False + # epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( + # self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, + # enhanced_dfs=enhance) + # + # elif (self.fourier_type == 1) or (self.fourier_type is None): + # enhance = True + # epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( + # self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, + # enhanced_dfs=enhance) + + elif self.fourier_type == 1: + epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_continuous( + self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex) + else: + raise ValueError("Check 'modeling_type' and 'fourier_type' in 'conv_solve'.") + + elif self._modeling_type_assigned == 1: # Vector + epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_vector( + self.ucell_info_list, self.fto[0], self.fto[1], type_complex=self.type_complex) + + else: + raise ValueError("Check 'modeling_type' and 'fourier_type' in 'conv_solve'.") + + de_ri, de_ti, layer_info_list, T1 = self._solve(self.wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + + self.layer_info_list = layer_info_list + self.T1 = T1 + + return de_ri, de_ti, layer_info_list, T1 + @jax.jit def _conv_solve_jit(self): return self._conv_solve() @@ -152,21 +239,41 @@ def _conv_solve_jit(self): @_BaseRCWA.jax_device_set def conv_solve(self, **kwargs): [setattr(self, k, v) for k, v in kwargs.items()] # needed for optimization - if self.fft_type == 1: + if self.fourier_type == 1: # print('CFT (fourier_type=1) is not supported for jit-compilation. Using non-jit-compiled method.') - de_ri, de_ti, layer_info_list, T1, kx_vector = self._conv_solve() + de_ri, de_ti, layer_info_list, T1 = self._conv_solve() else: - de_ri, de_ti, layer_info_list, T1, kx_vector = self._conv_solve_jit() + de_ri, de_ti, layer_info_list, T1 = self._conv_solve() + # de_ri, de_ti, layer_info_list, T1 = self._conv_solve_jit() - self.layer_info_list = layer_info_list - self.T1 = T1 - self.kx_vector = kx_vector + # self.layer_info_list = layer_info_list + # self.T1 = T1 return de_ri, de_ti @_BaseRCWA.jax_device_set - def calculate_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): + def calculate_field(self, res_x=20, res_y=20, res_z=20): + + kx, ky = self.get_kx_ky_vector(wavelength=self.wavelength) + + if self._grating_type_assigned == 0: + res_y = 1 + field_cell = field_dist_1d(self.wavelength, kx, self.T1, self.layer_info_list, self.period, self.pol, + res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) + + elif self._grating_type_assigned == 1: + res_y = 1 + field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, + res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) + else: + field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, + res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) + + return field_cell + + @_BaseRCWA.jax_device_set + def calculate_field_old(self, res_x=20, res_y=20, res_z=20, field_algo=2): if self.grating_type == 0: res_y = 1 @@ -180,27 +287,27 @@ def calculate_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex, type_float=self.type_float) elif field_algo == 2: - field_cell = field_dist_1d_vectorized_kji(self.wavelength, self.kx_vector, self.T1, - self.layer_info_list, self.period, self.pol, - res_x=res_x, res_y=res_y, res_z=res_z, - type_complex=self.type_complex, type_float=self.type_float) + field_cell = field_dist_1d(self.wavelength, self.kx_vector, self.T1, + self.layer_info_list, self.period, self.pol, + res_x=res_x, res_y=res_y, res_z=res_z, + type_complex=self.type_complex, type_float=self.type_float) else: raise ValueError elif self.grating_type == 1: res_y = 1 if field_algo == 0: - field_cell = field_dist_1d_conical_vanilla(self.wavelength, self.kx_vector, self.n_I, self.theta, + field_cell = field_dist_1d_conical_vanilla(self.wavelength, self.kx_vector, self.n_top, self.theta, self.phi, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif field_algo == 1: - field_cell = field_dist_1d_conical_vectorized_ji(self.wavelength, self.kx_vector, self.n_I, self.theta, + field_cell = field_dist_1d_conical_vectorized_ji(self.wavelength, self.kx_vector, self.n_top, self.theta, self.phi, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex, type_float=self.type_float) elif field_algo == 2: - field_cell = field_dist_1d_conical_vectorized_kji(self.wavelength, self.kx_vector, self.n_I, self.theta, + field_cell = field_dist_1d_conical_vectorized_kji(self.wavelength, self.kx_vector, self.n_top, self.theta, self.phi, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex, type_float=self.type_float) @@ -210,20 +317,20 @@ def calculate_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): elif self.grating_type == 2: if field_algo == 0: - field_cell = field_dist_2d_vanilla(self.wavelength, self.kx_vector, self.n_I, self.theta, self.phi, + field_cell = field_dist_2d_vanilla(self.wavelength, self.kx_vector, self.n_top, self.theta, self.phi, *self.fourier_order, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif field_algo == 1: - field_cell = field_dist_2d_vectorized_ji(self.wavelength, self.kx_vector, self.n_I, self.theta, + field_cell = field_dist_2d_vectorized_ji(self.wavelength, self.kx_vector, self.n_top, self.theta, self.phi, *self.fourier_order, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex, type_float=self.type_float) elif field_algo == 2: - field_cell = field_dist_2d_vectorized_kji(self.wavelength, self.kx_vector, self.n_I, self.theta, - self.phi, *self.fourier_order, self.T1, self.layer_info_list, - self.period, res_x=res_x, res_y=res_y, res_z=res_z, - type_complex=self.type_complex, type_float=self.type_float) + field_cell = field_dist_2d(self.wavelength, self.kx_vector, self.n_top, self.theta, + self.phi, *self.fourier_order, self.T1, self.layer_info_list, + self.period, res_x=res_x, res_y=res_y, res_z=res_z, + type_complex=self.type_complex, type_float=self.type_float) else: raise ValueError else: @@ -237,13 +344,13 @@ def field_plot(self, field_cell): @_BaseRCWA.jax_device_set def calculate_field_all(self, res_x=20, res_y=20, res_z=20): t0 = time.time() - field_cell0 = self.calculate_field(res_x=res_x, res_y=res_y, res_z=res_z, field_algo=0) + field_cell0 = self.calculate_field(res_x=res_x, res_y=res_y, res_z=res_z) print('no vector', time.time() - t0) t0 = time.time() - field_cell1 = self.calculate_field(res_x=res_x, res_y=res_y, res_z=res_z, field_algo=1) + field_cell1 = self.calculate_field(res_x=res_x, res_y=res_y, res_z=res_z) print('ji vector', time.time() - t0) t0 = time.time() - field_cell2 = self.calculate_field(res_x=res_x, res_y=res_y, res_z=res_z, field_algo=2) + field_cell2 = self.calculate_field(res_x=res_x, res_y=res_y, res_z=res_z) print('kji vector', time.time() - t0) print('gap(1-0): ', jnp.linalg.norm(field_cell1 - field_cell0)) @@ -254,21 +361,21 @@ def calculate_field_all(self, res_x=20, res_y=20, res_z=20): @partial(jax.jit, static_argnums=(1, 2, 3, 4)) @_BaseRCWA.jax_device_set - def conv_solve_field(self, res_x=20, res_y=20, res_z=20, field_algo=2, **kwargs): + def conv_solve_field(self, res_x=20, res_y=20, res_z=20, **kwargs): [setattr(self, k, v) for k, v in kwargs.items()] # needed for optimization - if self.fft_type == 1: + if self.fourier_type == 1: print('CFT (fourier_type=1) is not supported with JAX jit-compilation. Use conv_solve_field_no_jit.') return None, None, None - de_ri, de_ti, _, _, _ = self._conv_solve() - field_cell = self.calculate_field(res_x, res_y, res_z, field_algo=field_algo) + de_ri, de_ti, _, _ = self._conv_solve() + field_cell = self.calculate_field(res_x, res_y, res_z) return de_ri, de_ti, field_cell @_BaseRCWA.jax_device_set - def conv_solve_field_no_jit(self, res_x=20, res_y=20, res_z=20, field_algo=2): - de_ri, de_ti, _, _, _ = self._conv_solve() - field_cell = self.calculate_field(res_x, res_y, res_z, field_algo=field_algo) + def conv_solve_field_no_jit(self, res_x=20, res_y=20, res_z=20): + de_ri, de_ti, _, _ = self._conv_solve() + field_cell = self.calculate_field(res_x, res_y, res_z) return de_ri, de_ti, field_cell def run_ucell_vmap(self, ucell_list): diff --git a/meent/on_jax/emsolver/smm_util.py b/meent/on_jax/emsolver/smm_util.py index 60aea3d..307e0f5 100644 --- a/meent/on_jax/emsolver/smm_util.py +++ b/meent/on_jax/emsolver/smm_util.py @@ -249,10 +249,10 @@ def initial_conditions(K_inc_vector, theta, normal_vector, pte, ptm, P, Q): :param K_inc_vector: whether it's normalized or not is not important... :param theta: angle of incience :param normal_vector: pointing into z direction - :param pte: te polarization amplitude - :param ptm: tm polarization amplitude + :param pte: te pol amplitude + :param ptm: tm pol amplitude :return: - calculates the incident E field, cinc, and the polarization fro the initial condition vectors + calculates the incident E field, cinc, and the pol fro the initial condition vectors """ # ate -> unit vector holding the out of plane direction of TE # atm -> unit vector holding the out of plane direction of TM diff --git a/meent/on_jax/emsolver/transfer_method.py b/meent/on_jax/emsolver/transfer_method.py index a1bfbc1..ead4cb8 100644 --- a/meent/on_jax/emsolver/transfer_method.py +++ b/meent/on_jax/emsolver/transfer_method.py @@ -4,7 +4,50 @@ from .primitives import eig, conj -def transfer_1d_1(ff, polarization, k0, n_I, n_II, kx_vector, theta, delta_i0, fourier_order, +def transfer_1d_1(pol, ff_x, kx, n_top, n_bot, type_complex=jnp.complex128): + + ff_xy = ff_x * 1 + + kz_top = (n_top ** 2 - kx ** 2) ** 0.5 + kz_bot = (n_bot ** 2 - kx ** 2) ** 0.5 + + kz_top = kz_top.conjugate() + kz_bot = kz_bot.conjugate() + + F = jnp.eye(ff_xy, dtype=type_complex) + + # if pol == 0: # TE + # Kz_bot = jnp.diag(kz_bot) + # + # G = 1j * Kz_bot + # + # elif pol == 1: # TM + # Kz_bot = jnp.diag(kz_bot / (n_bot ** 2)) + # + # G = 1j * Kz_bot + # else: + # raise ValueError + + def false_fun(kz_bot): + Kz_bot = jnp.diag(kz_bot) + + G = 1j * Kz_bot + return Kz_bot, G + + def true_fun(kz_bot): + Kz_bot = jnp.diag(kz_bot / (n_bot ** 2)) + + G = 1j * Kz_bot + return Kz_bot, G + + Kz_bot, G = jax.lax.cond(pol, true_fun, false_fun, kz_bot) + + T = jnp.eye(ff_xy, dtype=type_complex) + + return kz_top, kz_bot, F, G, T + +# TODO: delete old codes +def transfer_1d_1_old(ff, polarization, k0, n_I, n_II, kx_vector, theta, delta_i0, fourier_order, type_complex=jnp.complex128): k_I_z = (k0 ** 2 * n_I ** 2 - kx_vector ** 2) ** 0.5 @@ -45,7 +88,59 @@ def transfer_1d_1(ff, polarization, k0, n_I, n_II, kx_vector, theta, delta_i0, f return kx_vector, Kx, k_I_z, k_II_z, f, YZ_I, g, inc_term, T -def transfer_1d_2(k0, q, d, W, V, f, g, fourier_order, T, type_complex=jnp.complex128): +def transfer_1d_2(pol, kx, epx_conv, epy_conv, epz_conv_i, type_complex=jnp.complex128): + + Kx = jnp.diag(kx) + + # if pol == 0: + # A = Kx ** 2 - epy_conv + # eigenvalues, W = jnp.linalg.eig(A) + # eigenvalues += 0j # to get positive square root + # q = eigenvalues ** 0.5 + # Q = jnp.diag(q) + # V = W @ Q + # + # elif pol == 1: + # B = Kx @ epz_conv_i @ Kx - jnp.eye(epy_conv.shape[0], dtype=type_complex) + # + # eigenvalues, W = jnp.linalg.eig(epx_conv @ B) + # + # eigenvalues += 0j # to get positive square root + # q = eigenvalues ** 0.5 + # + # Q = jnp.diag(q) + # V = jnp.linalg.inv(epx_conv) @ W @ Q + # + # else: + # raise ValueError + + def false_fun(Kx, epy_conv): # TE + A = Kx ** 2 - epy_conv + eigenvalues, W = jnp.linalg.eig(A) + eigenvalues += 0j # to get positive square root + q = eigenvalues ** 0.5 + Q = jnp.diag(q) + V = W @ Q + return W, V, q + + def true_fun(Kx, epy_conv): # TM + B = Kx @ epz_conv_i @ Kx - jnp.eye(epy_conv.shape[0], dtype=type_complex) + + eigenvalues, W = jnp.linalg.eig(epx_conv @ B) + + eigenvalues += 0j # to get positive square root + q = eigenvalues ** 0.5 + + Q = jnp.diag(q) + V = jnp.linalg.inv(epx_conv) @ W @ Q + return W, V, q + + W, V, q = jax.lax.cond(pol, true_fun, false_fun, Kx, epy_conv) + + return W, V, q + + +def transfer_1d_2_old(k0, q, d, W, V, f, g, fourier_order, T, type_complex=jnp.complex128): X = jnp.diag(jnp.exp(-k0 * q * d)) W_i = jnp.linalg.inv(W) @@ -63,32 +158,128 @@ def transfer_1d_2(k0, q, d, W, V, f, g, fourier_order, T, type_complex=jnp.compl return X, f, g, T, a_i, b -def transfer_1d_3(g, YZ_I, f, delta_i0, inc_term, T, k_I_z, k0, n_I, n_II, theta, polarization, k_II_z): +def transfer_1d_3(k0, W, V, q, d, F, G, T, type_complex=jnp.complex128): + + ff_x = len(q) + + I = jnp.eye(ff_x, dtype=type_complex) + + X = jnp.diag(jnp.exp(-k0 * q * d)) + + W_i = jnp.linalg.inv(W) + V_i = jnp.linalg.inv(V) + + A = 0.5 * (W_i @ F + V_i @ G) + B = 0.5 * (W_i @ F - V_i @ G) + + A_i = jnp.linalg.inv(A) + + F = W @ (I + X @ B @ A_i @ X) + G = V @ (I - X @ B @ A_i @ X) + T = T @ A_i @ X + + return X, F, G, T, A_i, B + + +def transfer_1d_3_old(g, YZ_I, f, delta_i0, inc_term, T, k_I_z, k0, n_top, n_bot, theta, polarization, k_II_z): T1 = jnp.linalg.inv(g + 1j * YZ_I @ f) @ (1j * YZ_I @ delta_i0 + inc_term) R = f @ T1 - delta_i0 T = T @ T1 # conj() is not allowed with grad x jit # de_ri = jnp.real(R * jnp.conj(R) * k_I_z / (k0 * n_top * jnp.cos(theta))) - # if polarization == 0: + # if pol == 0: # de_ti = T * jnp.conj(T) * jnp.real(k_II_z / (k0 * n_top * jnp.cos(theta))) - # elif polarization == 1: + # elif pol == 1: # de_ti = T * jnp.conj(T) * jnp.real(k_II_z / n_bot ** 2) / (k0 * jnp.cos(theta) / n_top) # else: # raise ValueError - de_ri = jnp.real(R * conj(R) * k_I_z / (k0 * n_I * jnp.cos(theta))) # manual conjugate + de_ri = jnp.real(R * conj(R) * k_I_z / (k0 * n_top * jnp.cos(theta))) # manual conjugate if polarization == 0: - de_ti = T * conj(T) * jnp.real(k_II_z / (k0 * n_I * jnp.cos(theta))) # manual conjugate + de_ti = T * conj(T) * jnp.real(k_II_z / (k0 * n_top * jnp.cos(theta))) # manual conjugate elif polarization == 1: - de_ti = T * jnp.conj(T) * jnp.real(k_II_z / n_II ** 2) / (k0 * jnp.cos(theta) / n_I) # manual conjugate + de_ti = T * jnp.conj(T) * jnp.real(k_II_z / n_bot ** 2) / (k0 * jnp.cos(theta) / n_top) # manual conjugate else: raise ValueError return de_ri.real, de_ti.real, T1 +def transfer_1d_4(pol, F, G, T, kz_top, kz_bot, theta, n_top, n_bot, type_complex=jnp.complex128): + + ff_xy = len(kz_top) + + Kz_top = jnp.diag(kz_top) + + delta_i0 = jnp.zeros(ff_xy, dtype=type_complex) + # delta_i0[ff_xy // 2] = 1 + delta_i0 = delta_i0.at[ff_xy // 2].set(1) + + # if pol == 0: # TE + # inc_term = 1j * n_top * jnp.cos(theta) * delta_i0 + # T1 = jnp.linalg.inv(G + 1j * Kz_top @ F) @ (1j * Kz_top @ delta_i0 + inc_term) + # + # elif pol == 1: # TM + # inc_term = 1j * delta_i0 * jnp.cos(theta) / n_top + # T1 = jnp.linalg.inv(G + 1j * Kz_top/(n_top ** 2) @ F) @ (1j * Kz_top/(n_top ** 2) @ delta_i0 + inc_term) + + def false_fun(n_top, theta, delta_i0, G, Kz_top, T): # TE + inc_term = 1j * n_top * jnp.cos(theta) * delta_i0 + T1 = jnp.linalg.inv(G + 1j * Kz_top @ F) @ (1j * Kz_top @ delta_i0 + inc_term) + R = F @ T1 - delta_i0 + T = T @ T1 + + de_ri = jnp.real(R * jnp.conj(R) * kz_top / (n_top * jnp.cos(theta))) + de_ti = T * jnp.conj(T) * jnp.real(kz_bot / (n_top * jnp.cos(theta))) + + return de_ri, de_ti, T1 + + def true_fun(n_top, theta, delta_i0, G, Kz_top, T): # TM + inc_term = 1j * delta_i0 * jnp.cos(theta) / n_top + T1 = jnp.linalg.inv(G + 1j * Kz_top / (n_top ** 2) @ F) @ (1j * Kz_top / (n_top ** 2) @ delta_i0 + inc_term) + + R = F @ T1 - delta_i0 + T = T @ T1 + + de_ri = jnp.real(R * jnp.conj(R) * kz_top / (n_top * jnp.cos(theta))) + de_ti = T * jnp.conj(T) * jnp.real(kz_bot / n_bot ** 2) / (jnp.cos(theta) / n_top) + + return de_ri, de_ti, T1 + + de_ri, de_ti, T1 = jax.lax.cond(pol, true_fun, false_fun, n_top, theta, delta_i0, G, Kz_top, T) + + # R = F @ T1 - delta_i0 + # T = T @ T1 + # + # de_ri = jnp.real(R * jnp.conj(R) * kz_top / (n_top * jnp.cos(theta))) + # + # if pol == 0: + # de_ti = T * jnp.conj(T) * jnp.real(kz_bot / (n_top * jnp.cos(theta))) + # elif pol == 1: + # de_ti = T * jnp.conj(T) * jnp.real(kz_bot / n_bot ** 2) / (jnp.cos(theta) / n_top) + # else: + # raise ValueError + + return de_ri.real, de_ti.real, T1 + + def transfer_1d_conical_1(ff, k0, n_I, n_II, kx_vector, theta, phi, type_complex=jnp.complex128): + """ + Deprecated. + Args: + ff: + k0: + n_I: + n_II: + kx_vector: + theta: + phi: + type_complex: + + Returns: + + """ I = jnp.eye(ff).astype(type_complex) O = jnp.zeros((ff, ff)).astype(type_complex) @@ -126,6 +317,28 @@ def transfer_1d_conical_1(ff, k0, n_I, n_II, kx_vector, theta, phi, type_complex def transfer_1d_conical_2(k0, Kx, ky, E_conv, E_conv_i, o_E_conv_i, ff, d, varphi, big_F, big_G, big_T, type_complex=jnp.complex128, perturbation=1E-10, device='cpu'): + """ + Deprecated. + Args: + k0: + Kx: + ky: + E_conv: + E_conv_i: + o_E_conv_i: + ff: + d: + varphi: + big_F: + big_G: + big_T: + type_complex: + perturbation: + device: + + Returns: + + """ I = jnp.eye(ff).astype(type_complex) O = jnp.zeros((ff, ff)).astype(type_complex) @@ -192,6 +405,28 @@ def transfer_1d_conical_2(k0, Kx, ky, E_conv, E_conv_i, o_E_conv_i, ff, d, varph def transfer_1d_conical_3(big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff, delta_i0, k_I_z, k0, n_I, n_II, k_II_z, type_complex=jnp.complex128): + """ + Deprecated. + Args: + big_F: + big_G: + big_T: + Z_I: + Y_I: + psi: + theta: + ff: + delta_i0: + k_I_z: + k0: + n_I: + n_II: + k_II_z: + type_complex: + + Returns: + + """ I = jnp.eye(ff).astype(type_complex) O = jnp.zeros((ff, ff), dtype=type_complex) @@ -250,7 +485,31 @@ def transfer_1d_conical_3(big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff, delta_i return de_ri.real, de_ti.real, big_T1 -def transfer_2d_1(ff_x, ff_y, ff_xy, k0, n_I, n_II, kx_vector, period, fourier_indices_y, theta, phi, wavelength, +def transfer_2d_1(ff_x, ff_y, kx, ky, n_top, n_bot, type_complex=jnp.complex128): + + ff_xy = ff_x * ff_y + + I = jnp.eye(ff_xy, dtype=type_complex) + O = jnp.zeros((ff_xy, ff_xy), dtype=type_complex) + + kz_top = (n_top ** 2 - kx ** 2 - ky.reshape((-1, 1)) ** 2) ** 0.5 + kz_bot = (n_bot ** 2 - kx ** 2 - ky.reshape((-1, 1)) ** 2) ** 0.5 + + kz_top = kz_top.flatten().conjugate() + kz_bot = kz_bot.flatten().conjugate() + + varphi = jnp.arctan(ky.reshape((-1, 1)) / kx).flatten() + + Kz_bot = jnp.diag(kz_bot) + + big_F = jnp.block([[I, O], [O, 1j * Kz_bot / (n_bot ** 2)]]) + big_G = jnp.block([[1j * Kz_bot, O], [O, I]]) + big_T = jnp.eye(2 * ff_xy, dtype=type_complex) + + return kz_top, kz_bot, varphi, big_F, big_G, big_T + + +def transfer_2d_1_old(ff_x, ff_y, ff_xy, k0, n_I, n_II, kx_vector, period, fourier_indices_y, theta, phi, wavelength, type_complex=jnp.complex128): I = jnp.eye(ff_xy).astype(type_complex) O = jnp.zeros((ff_xy, ff_xy), dtype=type_complex) @@ -292,7 +551,45 @@ def transfer_2d_1(ff_x, ff_y, ff_xy, k0, n_I, n_II, kx_vector, period, fourier_i return kx_vector, ky_vector, Kx, Ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T -def transfer_2d_wv(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, device='cpu', type_complex=jnp.complex128, perturbation=1E-10): +def transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=jnp.complex128): + + ff_x = len(kx) + ff_y = len(ky) + + I = jnp.eye(ff_y * ff_x, dtype=type_complex) + + Kx = jnp.diag(jnp.tile(kx, ff_y).flatten()) + Ky = jnp.diag(jnp.tile(ky.reshape((-1, 1)), ff_x).flatten()) + + B = Kx @ epz_conv_i @ Kx - I + D = Ky @ epz_conv_i @ Ky - I + + Omega2_LR = jnp.block( + [ + [Ky ** 2 + B @ epx_conv, Kx @ (epz_conv_i @ Ky @ epy_conv - Ky)], + [Ky @ (epz_conv_i @ Kx @ epx_conv - Kx), Kx ** 2 + D @ epy_conv] + ]) + + eigenvalues, W = jnp.linalg.eig(Omega2_LR) + eigenvalues += 0j # to get positive square root + q = eigenvalues ** 0.5 + + Q = jnp.diag(q) + Q_i = jnp.linalg.inv(Q) + + Omega_R = jnp.block( + [ + [-Kx @ Ky, Kx ** 2 - epy_conv], + [epx_conv - Ky ** 2, Ky @ Kx] + ] + ) + + V = Omega_R @ W @ Q_i + + return W, V, q + + +def transfer_2d_wv_old(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, device='cpu', type_complex=jnp.complex128, perturbation=1E-10): I = jnp.eye(ff_xy).astype(type_complex) B = Kx @ E_conv_i @ Kx - I @@ -323,7 +620,64 @@ def transfer_2d_wv(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, device='cpu', ty return W, V, q -def transfer_2d_2(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, type_complex=jnp.complex128): +def transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=jnp.complex128): + + ff_xy = len(q)//2 + + I = jnp.eye(ff_xy, dtype=type_complex) + O = jnp.zeros((ff_xy, ff_xy), dtype=type_complex) + + q1 = q[:ff_xy] + q2 = q[ff_xy:] + + W_11 = W[:ff_xy, :ff_xy] + W_12 = W[:ff_xy, ff_xy:] + W_21 = W[ff_xy:, :ff_xy] + W_22 = W[ff_xy:, ff_xy:] + + V_11 = V[:ff_xy, :ff_xy] + V_12 = V[:ff_xy, ff_xy:] + V_21 = V[ff_xy:, :ff_xy] + V_22 = V[ff_xy:, ff_xy:] + + X_1 = jnp.diag(jnp.exp(-k0 * q1 * d)) + X_2 = jnp.diag(jnp.exp(-k0 * q2 * d)) + + F_c = jnp.diag(jnp.cos(varphi)) + F_s = jnp.diag(jnp.sin(varphi)) + + W_ss = F_c @ W_21 - F_s @ W_11 + W_sp = F_c @ W_22 - F_s @ W_12 + W_ps = F_c @ W_11 + F_s @ W_21 + W_pp = F_c @ W_12 + F_s @ W_22 + + V_ss = F_c @ V_11 + F_s @ V_21 + V_sp = F_c @ V_12 + F_s @ V_22 + V_ps = F_c @ V_21 - F_s @ V_11 + V_pp = F_c @ V_22 - F_s @ V_12 + + big_I = jnp.eye(2 * (len(I)), dtype=type_complex) + big_X = jnp.block([[X_1, O], [O, X_2]]) + big_W = jnp.block([[W_ss, W_sp], [W_ps, W_pp]]) + big_V = jnp.block([[V_ss, V_sp], [V_ps, V_pp]]) + + big_W_i = jnp.linalg.inv(big_W) + big_V_i = jnp.linalg.inv(big_V) + + big_A = 0.5 * (big_W_i @ big_F + big_V_i @ big_G) + big_B = 0.5 * (big_W_i @ big_F - big_V_i @ big_G) + + big_A_i = jnp.linalg.inv(big_A) + + big_F = big_W @ (big_I + big_X @ big_B @ big_A_i @ big_X) + big_G = big_V @ (big_I - big_X @ big_B @ big_A_i @ big_X) + + big_T = big_T @ big_A_i @ big_X + + return big_X, big_F, big_G, big_T, big_A_i, big_B + + +def transfer_2d_2_old(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, type_complex=jnp.complex128): q1 = q[:center] q2 = q[center:] @@ -374,7 +728,68 @@ def transfer_2d_2(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, typ return big_X, big_F, big_G, big_T, big_A_i, big_B, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22 -def transfer_2d_3(center, big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff_xy, delta_i0, k_I_z, k0, n_I, n_II, k_II_z, +def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_top, n_bot, type_complex=jnp.complex128): + + ff_xy = len(big_F) // 2 + + Kz_top = jnp.diag(kz_top) + + I = jnp.eye(ff_xy, dtype=type_complex) + O = jnp.zeros((ff_xy, ff_xy), dtype=type_complex) + + big_F_11 = big_F[:ff_xy, :ff_xy] + big_F_12 = big_F[:ff_xy, ff_xy:] + big_F_21 = big_F[ff_xy:, :ff_xy] + big_F_22 = big_F[ff_xy:, ff_xy:] + + big_G_11 = big_G[:ff_xy, :ff_xy] + big_G_12 = big_G[:ff_xy, ff_xy:] + big_G_21 = big_G[ff_xy:, :ff_xy] + big_G_22 = big_G[ff_xy:, ff_xy:] + + delta_i0 = jnp.zeros((ff_xy, 1), dtype=type_complex) + delta_i0[ff_xy // 2, 0] = 1 + + # Final Equation in form of AX=B + final_A = jnp.block( + [ + [I, O, -big_F_11, -big_F_12], + [O, -1j * Kz_top / (n_top ** 2), -big_F_21, -big_F_22], + [-1j * Kz_top, O, -big_G_11, -big_G_12], + [O, I, -big_G_21, -big_G_22], + ] + ) + + final_B = jnp.block( + [ + [-jnp.sin(psi) * delta_i0], + [jnp.cos(psi) * jnp.cos(theta) * delta_i0], + [-1j * jnp.sin(psi) * n_top * jnp.cos(theta) * delta_i0], + [-1j * n_top * jnp.cos(psi) * delta_i0] + ] + ) + + final_RT = jnp.linalg.inv(final_A) @ final_B + + R_s = final_RT[:ff_xy, :].flatten() + R_p = final_RT[ff_xy: 2 * ff_xy, :].flatten() + + big_T1 = final_RT[2 * ff_xy:, :] + big_T = big_T @ big_T1 + + T_s = big_T[:ff_xy, :].flatten() + T_p = big_T[ff_xy:, :].flatten() + + de_ri = R_s * jnp.conj(R_s) * jnp.real(kz_top / (n_top * jnp.cos(theta))) \ + + R_p * jnp.conj(R_p) * jnp.real(kz_top / n_top ** 2 / (n_top * jnp.cos(theta))) + + de_ti = T_s * jnp.conj(T_s) * jnp.real(kz_bot / (n_top * jnp.cos(theta))) \ + + T_p * jnp.conj(T_p) * jnp.real(kz_bot / n_bot ** 2 / (n_top * jnp.cos(theta))) + + return de_ri.real, de_ti.real, big_T1 + + +def transfer_2d_3_old(center, big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff_xy, delta_i0, k_I_z, k0, n_I, n_II, k_II_z, type_complex=jnp.complex128): I = jnp.eye(ff_xy).astype(type_complex) O = jnp.zeros((ff_xy, ff_xy), dtype=type_complex) diff --git a/meent/on_jax/mee.py b/meent/on_jax/mee.py index f94d93a..77712e9 100644 --- a/meent/on_jax/mee.py +++ b/meent/on_jax/mee.py @@ -11,19 +11,22 @@ def __init__(self, *args, **kwargs): OptimizerJax.__init__(self, *args, **kwargs) def _tree_flatten(self): - children = (self.n_I, self.n_II, self.theta, self.phi, + # TODO: check again and find all tree flatten + children = (self.n_top, self.n_bot, self.theta, self.phi, self.psi, self.period, self.wavelength, self.ucell, self.ucell_info_list, self.thickness) aux_data = { 'backend': self.backend, 'grating_type': self.grating_type, + 'modeling_type': self.modeling_type, 'pol': self.pol, - 'fourier_order': self.fourier_order, + 'fto': self.fto, 'ucell_materials': self.ucell_materials, - 'connecting_algo': self.algo, + 'connecting_algo': self.connecting_algo, 'perturbation': self.perturbation, 'device': self.device, 'type_complex': self.type_complex, - 'fourier_type': self.fft_type, + 'fourier_type': self.fourier_type, + 'enhanced_dfs': self.enhanced_dfs, } return children, aux_data diff --git a/meent/on_jax/modeler/modeling.py b/meent/on_jax/modeler/modeling.py index 6a29c99..ccbd5e8 100644 --- a/meent/on_jax/modeler/modeling.py +++ b/meent/on_jax/modeler/modeling.py @@ -23,7 +23,7 @@ def _tree_flatten(self): # TODO 'backend': self.backend, 'grating_type': self.grating_type, 'pol': self.pol, - 'fourier_order': self.fourier_order, + 'fto': self.fourier_order, 'ucell_materials': self.ucell_materials, 'connecting_algo': self.algo, 'perturbation': self.perturbation, diff --git a/meent/on_jax/optimizer/optimizer.py b/meent/on_jax/optimizer/optimizer.py index 2389a1a..2e173f3 100644 --- a/meent/on_jax/optimizer/optimizer.py +++ b/meent/on_jax/optimizer/optimizer.py @@ -16,7 +16,7 @@ def __init__(self, *args, **kwargs): # 'backend': self.backend, # 'grating_type': self.grating_type, # 'pol': self.pol, - # 'fourier_order': self.fourier_order, + # 'fto': self.fto, # 'ucell_materials': self.ucell_materials, # 'connecting_algo': self.connecting_algo, # 'perturbation': self.perturbation, diff --git a/meent/on_numpy/emsolver/_base.py b/meent/on_numpy/emsolver/_base.py index 5707143..afa8a63 100644 --- a/meent/on_numpy/emsolver/_base.py +++ b/meent/on_numpy/emsolver/_base.py @@ -2,15 +2,15 @@ from .scattering_method import scattering_1d_1, scattering_1d_2, scattering_1d_3, scattering_2d_1, scattering_2d_wv, \ scattering_2d_2, scattering_2d_3 -from .transfer_method import transfer_1d_1, transfer_1d_2, transfer_1d_3, transfer_1d_4, transfer_1d_conical_1, transfer_1d_conical_2, \ - transfer_1d_conical_3, transfer_1d_conical_4, transfer_2d_1, transfer_2d_2, transfer_2d_3, transfer_2d_4 +from .transfer_method import (transfer_1d_1, transfer_1d_2, transfer_1d_3, transfer_1d_4, + transfer_2d_1, transfer_2d_2, transfer_2d_3, transfer_2d_4) class _BaseRCWA: def __init__(self, n_top=1., n_bot=1., theta=0., phi=0., psi=None, pol=0., fto=(0, 0), period=(100., 100.), wavelength=1., thickness=(0., ), connecting_algo='TMM', perturbation=1E-20, - type_complex=np.complex128, *args, **kwargs): + type_complex=np.complex128, *args, **kwargs): # TODO: delete args and kwargs? self._device = 0 @@ -100,7 +100,6 @@ def pol(self, pol): self._pol = pol psi = np.pi / 2 * (1 - self.pol) - self._psi = np.array(psi, dtype=self.type_float) @property @@ -133,33 +132,33 @@ def psi(self, psi): @property def fto(self): - return self._fourier_order + return self._fto @fto.setter - def fto(self, fourier_order): + def fto(self, fto): - if type(fourier_order) in (list, tuple): - if len(fourier_order) == 1: - self._fourier_order = [int(fourier_order[0]), 0] - elif len(fourier_order) == 2: - self._fourier_order = [int(v) for v in fourier_order] + if type(fto) in (list, tuple): + if len(fto) == 1: + self._fto = [int(fto[0]), 0] + elif len(fto) == 2: + self._fto = [int(v) for v in fto] else: raise ValueError - elif isinstance(fourier_order, np.ndarray): - self._fourier_order = fourier_order.tolist() - if type(self._fourier_order) is list: - if len(self._fourier_order) == 1: - self._fourier_order = [int(self._fourier_order[0]), 0] - elif len(self._fourier_order) == 2: - self._fourier_order = [int(v) for v in self._fourier_order] + elif isinstance(fto, np.ndarray): + self._fto = fto.tolist() + if type(self._fto) is list: + if len(self._fto) == 1: + self._fto = [int(self._fto[0]), 0] + elif len(self._fto) == 2: + self._fto = [int(v) for v in self._fto] else: raise ValueError - elif type(self._fourier_order) in (int, float): - self._fourier_order = [int(self._fourier_order), 0] + elif type(self._fto) in (int, float): + self._fto = [int(self._fto), 0] else: raise ValueError - elif type(fourier_order) in (int, float): - self._fourier_order = [int(fourier_order), 0] + elif type(fto) in (int, float): + self._fto = [int(fto), 0] else: raise ValueError @@ -170,7 +169,7 @@ def period(self): @period.setter def period(self, period): if type(period) in (int, float): - self._period = np.array([period], dtype=self.type_float) + self._period = np.array([period, period], dtype=self.type_float) elif type(period) in (list, tuple, np.ndarray): if len(period) == 1: period = [period[0], period[0]] @@ -196,13 +195,13 @@ def get_kx_ky_vector(self, wavelength): fto_x_range = np.arange(-self.fto[0], self.fto[0] + 1) fto_y_range = np.arange(-self.fto[1], self.fto[1] + 1) - kx_vector = (self.n_top * np.sin(self.theta) * np.cos(self.phi) + fto_x_range * ( + kx = (self.n_top * np.sin(self.theta) * np.cos(self.phi) + fto_x_range * ( wavelength / self.period[0])).astype(self.type_complex) - ky_vector = (self.n_top * np.sin(self.theta) * np.sin(self.phi) + fto_y_range * ( + ky = (self.n_top * np.sin(self.theta) * np.sin(self.phi) + fto_y_range * ( wavelength / self.period[1])).astype(self.type_complex) - return kx_vector, ky_vector + return kx, ky def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): self.layer_info_list = [] diff --git a/meent/on_numpy/emsolver/convolution_matrix.py b/meent/on_numpy/emsolver/convolution_matrix.py index b151547..24a5eed 100644 --- a/meent/on_numpy/emsolver/convolution_matrix.py +++ b/meent/on_numpy/emsolver/convolution_matrix.py @@ -5,7 +5,7 @@ def cell_compression(cell, type_complex=np.complex128): cell = np.flipud(cell) - # This is needed because the comp. algo begins from 0 to period (RC coord. system). + # This is needed because the comp. connecting_algo begins from 0 to period (RC coord. system). # On the other hand, the field data is from period to 0 (XY coord. system). # Will be flipped again during field reconstruction. @@ -127,16 +127,3 @@ def to_conv_mat_raster_discrete(ucell, fto_x, fto_y, device=None, type_complex=n return epx_conv_all, epy_conv_all, epz_conv_i_all - -def circulant(c): - - center = c.shape[0] // 2 - circ = np.zeros((center + 1, center + 1), dtype=int) - - for r in range(center+1): - idx = np.arange(r, r - center - 1, -1, dtype=int) - - assign_value = c[center - idx] - circ[r] = assign_value - - return circ diff --git a/meent/on_numpy/emsolver/field_distribution.py b/meent/on_numpy/emsolver/field_distribution.py index 48ac36c..8752f2a 100644 --- a/meent/on_numpy/emsolver/field_distribution.py +++ b/meent/on_numpy/emsolver/field_distribution.py @@ -3,7 +3,6 @@ def field_dist_1d(wavelength, kx, T1, layer_info_list, period, pol, res_x=20, res_y=1, res_z=20, type_complex=np.complex128): - res_y = 1 k0 = 2 * np.pi / wavelength Kx = np.diag(kx) @@ -14,9 +13,9 @@ def field_dist_1d(wavelength, kx, T1, layer_info_list, period, # From the first layer for idx_layer, (epz_conv_i, W, V, q, d, A_i, B) in enumerate(layer_info_list[::-1]): - c1 = T_layer[:, None] - X = np.diag(np.exp(-k0 * q * d)) + X = np.diag(np.exp(-k0 * q * d)) + c1 = T_layer[:, None] c2 = B @ A_i @ X @ T_layer[:, None] Q = np.diag(q) @@ -67,6 +66,7 @@ def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, ff_x = len(kx) ff_y = len(ky) + ff_xy = ff_x * ff_y Kx = np.diag(np.tile(kx, ff_y).flatten()) Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) @@ -80,8 +80,6 @@ def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, # From the first layer for idx_layer, (epz_conv_i, W, V, q, d, big_A_i, big_B) in enumerate(layer_info_list[::-1]): - ff_xy = len(q) // 2 - W_11 = W[:ff_xy, :ff_xy] W_12 = W[:ff_xy, ff_xy:] W_21 = W[ff_xy:, :ff_xy] @@ -112,10 +110,10 @@ def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, + W_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) Sy = W_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + W_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Ux = V_11 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_12 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Ux = -V_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + - V_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Uy = -V_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + - V_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) Sz = -1j * epz_conv_i @ (Kx @ Uy - Ky @ Ux) Uz = -1j * (Kx @ Sy - Ky @ Sx) diff --git a/meent/on_numpy/emsolver/fourier_analysis.py b/meent/on_numpy/emsolver/fourier_analysis.py index b7675eb..ab89b9e 100644 --- a/meent/on_numpy/emsolver/fourier_analysis.py +++ b/meent/on_numpy/emsolver/fourier_analysis.py @@ -35,7 +35,7 @@ def cfs2d(cell, x, y, conti_x, conti_y, fto_x, fto_y, type_complex=np.complex128 if conti_y == 0: # discontinuous in Y (Row): inverse rule is applied. cell = 1 / cell - cfs1d = _cfs(y, cell, fto_y, period_y) + cfs1d = _cfs(y, cell, fto_y, period_y, type_complex=type_complex) conv_index_1 = circulant(fto_y) + (2 * fto_y) conv_index_2 = circulant(fto_x) + (2 * fto_x) @@ -47,7 +47,7 @@ def cfs2d(cell, x, y, conti_x, conti_y, fto_x, fto_y, type_complex=np.complex128 conv1d = conv1d.reshape((-1, ff_y ** 2)) - cfs2d = _cfs(x, conv1d.T, fto_x, period_x) + cfs2d = _cfs(x, conv1d.T, fto_x, period_x, type_complex=type_complex) conv2d = cfs2d[:, conv_index_2] conv2d = conv2d.reshape((ff_y, ff_y, ff_x, ff_x)) @@ -60,7 +60,7 @@ def cfs2d(cell, x, y, conti_x, conti_y, fto_x, fto_y, type_complex=np.complex128 return conv2d -def dfs2d(cell, conti_x, conti_y, fto_x, fto_y, type_complex=np.complex128, perturbation=1E-100): +def dfs2d(cell, conti_x, conti_y, fto_x, fto_y, type_complex=np.complex128): cell = cell.astype(type_complex) ff_x = 2 * fto_x + 1 diff --git a/meent/on_numpy/emsolver/rcwa.py b/meent/on_numpy/emsolver/rcwa.py index 17af558..ec79044 100644 --- a/meent/on_numpy/emsolver/rcwa.py +++ b/meent/on_numpy/emsolver/rcwa.py @@ -24,7 +24,7 @@ def __init__(self, pol=0., fto=(0, 0), ucell_materials=None, - stitching_algo='TMM', + connecting_algo='TMM', perturbation=1E-20, device='cpu', type_complex=np.complex128, @@ -35,7 +35,7 @@ def __init__(self, super().__init__(n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, psi=psi, pol=pol, fto=fto, period=period, wavelength=wavelength, - thickness=thickness, stitching_algo=stitching_algo, perturbation=perturbation, + thickness=thickness, connecting_algo=connecting_algo, perturbation=perturbation, device=device, type_complex=type_complex, ) self.ucell = ucell @@ -50,9 +50,6 @@ def __init__(self, self.fourier_type = fourier_type self.enhanced_dfs = enhanced_dfs - # self.layer_info_list = [] - # self._layer_info_list = [] - # grating type setting if self.grating_type is None: if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2*np.pi) == 0): @@ -170,8 +167,7 @@ def calculate_field(self, res_x=20, res_y=20, res_z=20): if self._grating_type_assigned == 0: res_y = 1 - field_cell = field_dist_1d(self.wavelength, kx, self.T1, - self.layer_info_list, self.period, self.pol, + field_cell = field_dist_1d(self.wavelength, kx, self.T1, self.layer_info_list, self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) elif self._grating_type_assigned == 1: res_y = 1 @@ -183,7 +179,7 @@ def calculate_field(self, res_x=20, res_y=20, res_z=20): return field_cell - def conv_solve_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): + def conv_solve_field(self, res_x=20, res_y=20, res_z=20): de_ri, de_ti = self.conv_solve() field_cell = self.calculate_field(res_x, res_y, res_z) return de_ri, de_ti, field_cell diff --git a/meent/on_numpy/emsolver/smm_util.py b/meent/on_numpy/emsolver/smm_util.py index d0ab6cc..c754de9 100644 --- a/meent/on_numpy/emsolver/smm_util.py +++ b/meent/on_numpy/emsolver/smm_util.py @@ -250,10 +250,10 @@ def initial_conditions(K_inc_vector, theta, normal_vector, pte, ptm, P, Q): :param K_inc_vector: whether it's normalized or not is not important... :param theta: angle of incience :param normal_vector: pointing into z direction - :param pte: te polarization amplitude - :param ptm: tm polarization amplitude + :param pte: te pol amplitude + :param ptm: tm pol amplitude :return: - calculates the incident E field, cinc, and the polarization fro the initial condition vectors + calculates the incident E field, cinc, and the pol fro the initial condition vectors """ # ate -> unit vector holding the out of plane direction of TE # atm -> unit vector holding the out of plane direction of TM diff --git a/meent/on_numpy/emsolver/transfer_method.py b/meent/on_numpy/emsolver/transfer_method.py index 8da2996..3ed76e1 100644 --- a/meent/on_numpy/emsolver/transfer_method.py +++ b/meent/on_numpy/emsolver/transfer_method.py @@ -1,12 +1,12 @@ import numpy as np -def transfer_1d_1(pol, ff_x, kx, n_I, n_II, type_complex=np.complex128): +def transfer_1d_1(pol, ff_x, kx, n_top, n_bot, type_complex=np.complex128): ff_xy = ff_x * 1 - kz_top = (n_I ** 2 - kx ** 2) ** 0.5 - kz_bot = (n_II ** 2 - kx ** 2) ** 0.5 + kz_top = (n_top ** 2 - kx ** 2) ** 0.5 + kz_bot = (n_bot ** 2 - kx ** 2) ** 0.5 kz_top = kz_top.conjugate() kz_bot = kz_bot.conjugate() @@ -19,7 +19,7 @@ def transfer_1d_1(pol, ff_x, kx, n_I, n_II, type_complex=np.complex128): G = 1j * Kz_bot elif pol == 1: # TM - Kz_bot = np.diag(kz_bot / (n_II ** 2)) + Kz_bot = np.diag(kz_bot / (n_bot ** 2)) G = 1j * Kz_bot @@ -83,7 +83,7 @@ def transfer_1d_3(k0, W, V, q, d, F, G, T, type_complex=np.complex128): return X, F, G, T, A_i, B -def transfer_1d_4(pol, F, G, T, kz_top, kz_bot, theta, n_I, n_II, type_complex=np.complex128): +def transfer_1d_4(pol, F, G, T, kz_top, kz_bot, theta, n_top, n_bot, type_complex=np.complex128): ff_xy = len(kz_top) @@ -94,42 +94,38 @@ def transfer_1d_4(pol, F, G, T, kz_top, kz_bot, theta, n_I, n_II, type_complex=n if pol == 0: # TE # TODO: check sign of H - inc_term = 1j * n_I * np.cos(theta) * delta_i0 - + inc_term = 1j * n_top * np.cos(theta) * delta_i0 T1 = np.linalg.inv(G + 1j * Kz_top @ F) @ (1j * Kz_top @ delta_i0 + inc_term) elif pol == 1: # TM - - inc_term = 1j * delta_i0 * np.cos(theta) / n_I # tODO: inc term? - - T1 = np.linalg.inv(G + 1j * Kz_top/(n_I ** 2) @ F) @ (1j * Kz_top/(n_I ** 2) @ delta_i0 + inc_term) + inc_term = 1j * delta_i0 * np.cos(theta) / n_top # tODO: inc term? + T1 = np.linalg.inv(G + 1j * Kz_top / (n_top ** 2) @ F) @ (1j * Kz_top / (n_top ** 2) @ delta_i0 + inc_term) # T1 = np.linalg.inv(G + 1j * YZ_I @ F) @ (1j * YZ_I @ delta_i0 + inc_term) R = F @ T1 - delta_i0 - T = T @ T1 - de_ri = np.real(R * np.conj(R) * kz_top / (n_I * np.cos(theta))) + de_ri = np.real(R * np.conj(R) * kz_top / (n_top * np.cos(theta))) if pol == 0: - de_ti = T * np.conj(T) * np.real(kz_bot / (n_I * np.cos(theta))) + de_ti = T * np.conj(T) * np.real(kz_bot / (n_top * np.cos(theta))) elif pol == 1: - de_ti = T * np.conj(T) * np.real(kz_bot / n_II ** 2) / (np.cos(theta) / n_I) + de_ti = T * np.conj(T) * np.real(kz_bot / n_bot ** 2) / (np.cos(theta) / n_top) else: raise ValueError return de_ri.real, de_ti.real, T1 -def transfer_1d_conical_1(ff_x, ff_y, kx_vector, ky_vector, n_I, n_II, type_complex=np.complex128): +def transfer_1d_conical_1(ff_x, ff_y, kx_vector, ky_vector, n_top, n_bot, type_complex=np.complex128): ff_xy = ff_x * ff_y I = np.eye(ff_xy, dtype=type_complex) O = np.zeros((ff_xy, ff_xy), dtype=type_complex) - kz_top = (n_I ** 2 - kx_vector ** 2 - ky_vector ** 2) ** 0.5 - kz_bot = (n_II ** 2 - kx_vector ** 2 - ky_vector ** 2) ** 0.5 + kz_top = (n_top ** 2 - kx_vector ** 2 - ky_vector ** 2) ** 0.5 + kz_bot = (n_bot ** 2 - kx_vector ** 2 - ky_vector ** 2) ** 0.5 kz_top = kz_top.conjugate() kz_bot = kz_bot.conjugate() @@ -138,7 +134,7 @@ def transfer_1d_conical_1(ff_x, ff_y, kx_vector, ky_vector, n_I, n_II, type_comp Kz_bot = np.diag(kz_bot) - big_F = np.block([[I, O], [O, 1j * Kz_bot / (n_II ** 2)]]) + big_F = np.block([[I, O], [O, 1j * Kz_bot / (n_bot ** 2)]]) big_G = np.block([[1j * Kz_bot, O], [O, I]]) big_T = np.eye(2 * ff_xy, dtype=type_complex) @@ -191,8 +187,7 @@ def transfer_1d_conical_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=n return W, V, q -def transfer_1d_conical_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, - type_complex=np.complex128): +def transfer_1d_conical_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=np.complex128): ff_x = len(W) @@ -246,8 +241,7 @@ def transfer_1d_conical_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, return big_X, big_F, big_G, big_T, big_A_i, big_B -def transfer_1d_conical_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, n_II, - type_complex=np.complex128): +def transfer_1d_conical_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_top, n_bot, type_complex=np.complex128): ff_xy = len(big_F) // 2 @@ -276,7 +270,7 @@ def transfer_1d_conical_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, final_A = np.block( [ [I, O, -big_F_11, -big_F_12], - [O, -1j * Kz_top / (n_I ** 2), -big_F_21, -big_F_22], + [O, -1j * Kz_top / (n_top ** 2), -big_F_21, -big_F_22], [-1j * Kz_top, O, -big_G_11, -big_G_12], [O, I, -big_G_21, -big_G_22], ] @@ -285,8 +279,8 @@ def transfer_1d_conical_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, final_B = np.block([ [-np.sin(psi) * delta_i0], [-np.cos(psi) * np.cos(theta) * delta_i0], - [-1j * np.sin(psi) * n_I * np.cos(theta) * delta_i0], - [1j * n_I * np.cos(psi) * delta_i0] + [-1j * np.sin(psi) * n_top * np.cos(theta) * delta_i0], + [1j * n_top * np.cos(psi) * delta_i0] ]) final_RT = np.linalg.inv(final_A) @ final_B @@ -300,33 +294,33 @@ def transfer_1d_conical_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, T_s = big_T[:ff_xy, :].flatten() T_p = big_T[ff_xy:, :].flatten() - de_ri = R_s * np.conj(R_s) * np.real(kz_top / (n_I * np.cos(theta))) \ - + R_p * np.conj(R_p) * np.real(kz_top / n_I ** 2 / (n_I * np.cos(theta))) + de_ri = R_s * np.conj(R_s) * np.real(kz_top / (n_top * np.cos(theta))) \ + + R_p * np.conj(R_p) * np.real(kz_top / n_top ** 2 / (n_top * np.cos(theta))) - de_ti = T_s * np.conj(T_s) * np.real(kz_bot / (n_I * np.cos(theta))) \ - + T_p * np.conj(T_p) * np.real(kz_bot / n_II ** 2 / (n_I * np.cos(theta))) + de_ti = T_s * np.conj(T_s) * np.real(kz_bot / (n_top * np.cos(theta))) \ + + T_p * np.conj(T_p) * np.real(kz_bot / n_bot ** 2 / (n_top * np.cos(theta))) return de_ri.real, de_ti.real, big_T1 -def transfer_2d_1(ff_x, ff_y, kx_vector, ky_vector, n_I, n_II, type_complex=np.complex128): +def transfer_2d_1(ff_x, ff_y, kx, ky, n_top, n_bot, type_complex=np.complex128): ff_xy = ff_x * ff_y I = np.eye(ff_xy, dtype=type_complex) O = np.zeros((ff_xy, ff_xy), dtype=type_complex) - kz_top = (n_I ** 2 - kx_vector ** 2 - ky_vector.reshape((-1, 1)) ** 2) ** 0.5 - kz_bot = (n_II ** 2 - kx_vector ** 2 - ky_vector.reshape((-1, 1)) ** 2) ** 0.5 + kz_top = (n_top ** 2 - kx ** 2 - ky.reshape((-1, 1)) ** 2) ** 0.5 + kz_bot = (n_bot ** 2 - kx ** 2 - ky.reshape((-1, 1)) ** 2) ** 0.5 kz_top = kz_top.flatten().conjugate() kz_bot = kz_bot.flatten().conjugate() - varphi = np.arctan(ky_vector.reshape((-1, 1)) / kx_vector).flatten() + varphi = np.arctan(ky.reshape((-1, 1)) / kx).flatten() Kz_bot = np.diag(kz_bot) - big_F = np.block([[I, O], [O, 1j * Kz_bot / (n_II ** 2)]]) + big_F = np.block([[I, O], [O, 1j * Kz_bot / (n_bot ** 2)]]) big_G = np.block([[1j * Kz_bot, O], [O, I]]) big_T = np.eye(2 * ff_xy, dtype=type_complex) @@ -337,8 +331,9 @@ def transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=np.comple ff_x = len(kx) ff_y = len(ky) + ff_xy = ff_x * ff_y - I = np.eye(ff_y * ff_x, dtype=type_complex) + I = np.eye(ff_xy, dtype=type_complex) Kx = np.diag(np.tile(kx, ff_y).flatten()) Ky = np.diag(np.tile(ky.reshape((-1, 1)), ff_x).flatten()) @@ -428,8 +423,7 @@ def transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=np.c return big_X, big_F, big_G, big_T, big_A_i, big_B -def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, n_II, - type_complex=np.complex128): +def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_top, n_bot, type_complex=np.complex128): ff_xy = len(big_F) // 2 @@ -455,7 +449,7 @@ def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, n_II, final_A = np.block( [ [I, O, -big_F_11, -big_F_12], - [O, -1j * Kz_top / (n_I ** 2), -big_F_21, -big_F_22], + [O, -1j * Kz_top / (n_top ** 2), -big_F_21, -big_F_22], [-1j * Kz_top, O, -big_G_11, -big_G_12], [O, I, -big_G_21, -big_G_22], ] @@ -465,8 +459,8 @@ def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, n_II, [ [-np.sin(psi) * delta_i0], [np.cos(psi) * np.cos(theta) * delta_i0], - [-1j * np.sin(psi) * n_I * np.cos(theta) * delta_i0], - [-1j * n_I * np.cos(psi) * delta_i0] + [-1j * np.sin(psi) * n_top * np.cos(theta) * delta_i0], + [-1j * n_top * np.cos(psi) * delta_i0] ] ) @@ -481,10 +475,10 @@ def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_I, n_II, T_s = big_T[:ff_xy, :].flatten() T_p = big_T[ff_xy:, :].flatten() - de_ri = R_s * np.conj(R_s) * np.real(kz_top / (n_I * np.cos(theta))) \ - + R_p * np.conj(R_p) * np.real(kz_top / n_I ** 2 / (n_I * np.cos(theta))) + de_ri = R_s * np.conj(R_s) * np.real(kz_top / (n_top * np.cos(theta))) \ + + R_p * np.conj(R_p) * np.real(kz_top / n_top ** 2 / (n_top * np.cos(theta))) - de_ti = T_s * np.conj(T_s) * np.real(kz_bot / (n_I * np.cos(theta))) \ - + T_p * np.conj(T_p) * np.real(kz_bot / n_II ** 2 / (n_I * np.cos(theta))) + de_ti = T_s * np.conj(T_s) * np.real(kz_bot / (n_top * np.cos(theta))) \ + + T_p * np.conj(T_p) * np.real(kz_bot / n_bot ** 2 / (n_top * np.cos(theta))) return de_ri.real, de_ti.real, big_T1 diff --git a/meent/on_torch/emsolver/_base.py b/meent/on_torch/emsolver/_base.py index 80c2b1a..e1a315f 100644 --- a/meent/on_torch/emsolver/_base.py +++ b/meent/on_torch/emsolver/_base.py @@ -5,14 +5,18 @@ from .primitives import Eig from .scattering_method import scattering_1d_1, scattering_1d_2, scattering_1d_3, scattering_2d_1, scattering_2d_wv, \ scattering_2d_2, scattering_2d_3 -from .transfer_method import transfer_1d_1, transfer_1d_2, transfer_1d_3, transfer_1d_conical_1, transfer_1d_conical_2, \ - transfer_1d_conical_3, transfer_2d_1, transfer_2d_wv, transfer_2d_2, transfer_2d_3 + +# from .transfer_method import transfer_1d_1, transfer_1d_2, transfer_1d_3, transfer_1d_conical_1, transfer_1d_conical_2, \ +# transfer_1d_conical_3, transfer_2d_1, transfer_2d_wv, transfer_2d_2, transfer_2d_3 + +from .transfer_method import (transfer_1d_1, transfer_1d_2, transfer_1d_3, transfer_1d_4, + transfer_2d_1, transfer_2d_2, transfer_2d_3, transfer_2d_4) class _BaseRCWA: - def __init__(self, grating_type, n_I=1., n_II=1., theta=0., phi=0., pol=0., fourier_order=(2, 2), - period=(100., 100.), wavelength=900., - thickness=(0., ), algo='TMM', perturbation=1E-20, + def __init__(self, n_top=1., n_bot=1., theta=0., phi=0., psi=None, pol=0., fto=(0, 0), + period=(100., 100.), wavelength=1., + thickness=(0.,), connecting_algo='TMM', perturbation=1E-20, device='cpu', type_complex=torch.complex128): # device @@ -37,27 +41,25 @@ def __init__(self, grating_type, n_I=1., n_II=1., theta=0., phi=0., pol=0., four self._type_int = torch.int64 if self._type_complex is not torch.complex64 else torch.int32 self.perturbation = perturbation - self.grating_type = grating_type # 1D=0, 1D_conical=1, 2D=2 - self.n_I = n_I - self.n_II = n_II + self.n_top = n_top + self.n_bot = n_bot - # degree to radian due to JAX JIT self.theta = theta self.phi = phi self.pol = pol - self._psi = torch.tensor((torch.pi / 2 * (1 - pol)), device=self.device, dtype=self.type_float) + # self._psi = torch.tensor((torch.pi / 2 * (1 - pol)), device=self.device, dtype=self.type_float) + self.psi = psi - self.fourier_order = fourier_order + self.fto = fto self.period = period self.wavelength = wavelength self.thickness = thickness - self.algo = algo - - self.rayleigh_r = None - self.rayleigh_t = None + self.connecting_algo = connecting_algo self.layer_info_list = [] self.T1 = None - self.kx_vector = None # only kx, not ky, because kx is always used while ky is 2D only. + + self.rayleigh_r = None # TODO + self.rayleigh_t = None @property def device(self): @@ -104,7 +106,7 @@ def type_complex(self, type_complex): # self._phi = self._phi.to(self.type_float) # self._psi = self._psi.to(self.type_float) - # self.fourier_order = self._fourier_order + # self.fto = self._fto # self.thickness = self._thickness @property @@ -155,44 +157,51 @@ def phi(self, phi): def psi(self): return self._psi + @psi.setter + def psi(self, psi): + if psi is not None: + self._psi = torch.tensor(psi, dtype=self.type_float) + pol = -(2 * psi / torch.pi - 1) + self._pol = pol + @property - def fourier_order(self): - return self._fourier_order + def fto(self): + return self._fto - @fourier_order.setter - def fourier_order(self, fourier_order): + @fto.setter + def fto(self, fto): - if type(fourier_order) in (list, tuple): - if len(fourier_order) == 1: - self._fourier_order = [int(fourier_order[0]), 0] - elif len(fourier_order) == 2: - self._fourier_order = [int(v) for v in fourier_order] + if type(fto) in (list, tuple): + if len(fto) == 1: + self._fto = [int(fto[0]), 0] + elif len(fto) == 2: + self._fto = [int(v) for v in fto] else: - raise ValueError('Torch fourier_order') - elif isinstance(fourier_order, np.ndarray) or isinstance(fourier_order, torch.Tensor): - self._fourier_order = fourier_order.tolist() - if type(self._fourier_order) is list: - if len(self._fourier_order) == 1: - self._fourier_order = [int(self._fourier_order[0]), 0] - elif len(self._fourier_order) == 2: - self._fourier_order = [int(v) for v in self._fourier_order] + raise ValueError('Torch fto') + elif isinstance(fto, np.ndarray) or isinstance(fto, torch.Tensor): + self._fto = fto.tolist() + if type(self._fto) is list: + if len(self._fto) == 1: + self._fto = [int(self._fto[0]), 0] + elif len(self._fto) == 2: + self._fto = [int(v) for v in self._fto] else: - raise ValueError('Torch fourier_order') - elif type(self._fourier_order) in (int, float): - self._fourier_order = [int(self._fourier_order), 0] + raise ValueError('Torch fto') + elif type(self._fto) in (int, float): + self._fto = [int(self._fto), 0] else: - raise ValueError('Torch fourier_order') - elif type(fourier_order) in (int, float): - self._fourier_order = [int(fourier_order), 0] + raise ValueError('Torch fto') + elif type(fto) in (int, float): + self._fto = [int(fto), 0] else: - raise ValueError('Torch fourier_order') + raise ValueError('Torch fto') - # if type(fourier_order) in (int, float): - # self._fourier_order = torch.tensor([int(fourier_order), 0], device=self.device) - # elif len(fourier_order) == 1: - # self._fourier_order = torch.tensor([int(fourier_order[0]), 0], device=self.device) + # if type(fto) in (int, float): + # self._fto = torch.tensor([int(fto), 0], device=self.device) + # elif len(fto) == 1: + # self._fto = torch.tensor([int(fto[0]), 0], device=self.device) # else: - # self._fourier_order = torch.tensor([int(v) for v in fourier_order], device=self.device) + # self._fto = torch.tensor([int(v) for v in fto], device=self.device) @property def period(self): @@ -201,10 +210,10 @@ def period(self): @period.setter def period(self, period): if type(period) in (int, float): - self._period = torch.tensor([period], device=self.device, dtype=self.type_float) - elif type(period) in (list, tuple, np.ndarray): - self._period = torch.tensor(period, device=self.device, dtype=self.type_float) - elif isinstance(period, torch.Tensor): + self._period = torch.tensor([period, period], device=self.device, dtype=self.type_float) + elif type(period) in (list, tuple, np.ndarray) or isinstance(period, torch.Tensor): + if len(period) == 1: + period = [period[0], period[0]] self._period = torch.tensor(period, device=self.device, dtype=self.type_float) else: raise ValueError @@ -224,130 +233,163 @@ def thickness(self, thickness): else: raise ValueError - def get_kx_vector(self, wavelength): + # def get_kx_vector(self, wavelength): + # + # k0 = 2 * torch.pi / wavelength + # fourier_indices_x = torch.arange(-self.fto[0], self.fto[0] + 1, device=self.device, + # dtype=self.type_float) + # if self.grating_type == 0: + # kx = k0 * (self.n_top * torch.sin(self.theta) + fourier_indices_x * (wavelength / self.period[0]) + # ).type(self.type_complex) + # else: + # kx = k0 * (self.n_top * torch.sin(self.theta) * torch.cos(self.phi) + fourier_indices_x * ( + # wavelength / self.period[0])).type(self.type_complex) + # + # # kx = torch.where(kx == 0, self.perturbation, kx) + # + # return kx - k0 = 2 * torch.pi / wavelength - fourier_indices_x = torch.arange(-self.fourier_order[0], self.fourier_order[0] + 1, device=self.device, - dtype=self.type_float) - if self.grating_type == 0: - kx_vector = k0 * (self.n_I * torch.sin(self.theta) + fourier_indices_x * (wavelength / self.period[0]) - ).type(self.type_complex) - else: - kx_vector = k0 * (self.n_I * torch.sin(self.theta) * torch.cos(self.phi) + fourier_indices_x * ( - wavelength / self.period[0])).type(self.type_complex) + def get_kx_ky_vector(self, wavelength): - # kx = torch.where(kx == 0, self.perturbation, kx) + fto_x_range = torch.arange(-self.fto[0], self.fto[0] + 1, device=self.device, + dtype=self.type_float) + fto_y_range = torch.arange(-self.fto[1], self.fto[1] + 1, device=self.device, + dtype=self.type_float) - return kx_vector + kx = (self.n_top * torch.sin(self.theta) * torch.cos(self.phi) + fto_x_range * ( + wavelength / self.period[0])).type(self.type_complex) - def solve_1d(self, wavelength, E_conv_all, o_E_conv_all): + ky = (self.n_top * torch.sin(self.theta) * torch.sin(self.phi) + fto_y_range * ( + wavelength / self.period[1])).type(self.type_complex) - self.layer_info_list = [] - self.T1 = None - self.rayleigh_r, self.rayleigh_t = [], [] + return kx, ky - # fourier_indices = torch.arange(-self.fourier_order, self.fourier_order + 1, device=self.device) + def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): - ff = self.fourier_order[0] * 2 + 1 + self.layer_info_list = [] + self.T1 = None + self.rayleigh_r, self.rayleigh_t = [], [] # tODO - delta_i0 = torch.zeros(ff, device=self.device, dtype=self.type_complex) - delta_i0[self.fourier_order[0]] = 1 + ff_x = self.fto[0] * 2 + 1 k0 = 2 * torch.pi / wavelength + kx, _ = self.get_kx_ky_vector(wavelength) - if self.algo == 'TMM': - kx_vector, Kx, k_I_z, k_II_z, f, YZ_I, g, inc_term, T \ - = transfer_1d_1(ff, self.pol, k0, self.n_I, self.n_II, self.kx_vector, - self.theta, delta_i0, self.fourier_order, - device=self.device, type_complex=self.type_complex) - elif self.algo == 'SMM': + if self.connecting_algo == 'TMM': + kz_top, kz_bot, F, G, T \ + = transfer_1d_1(self.pol, ff_x, kx, self.n_top, self.n_bot, device=self.device, type_complex=self.type_complex) + + # kx, Kx, k_I_z, k_II_z, f, YZ_I, g, inc_term, T \ + # = transfer_1d_1(ff_x, self.pol, k0, self.n_top, self.n_bot, self.kx, + # self.theta, delta_i0, self.fto, + # device=self.device, type_complex=self.type_complex) + elif self.connecting_algo == 'SMM': Kx, Wg, Vg, Kzg, Wr, Vr, Kzr, Wt, Vt, Kzt, Ar, Br, Sg \ - = scattering_1d_1(k0, self.n_I, self.n_II, self.theta, self.phi, fourier_indices, self.period, + = scattering_1d_1(k0, self.n_top, self.n_bot, self.theta, self.phi, fourier_indices, self.period, self.pol, wl=wavelength) else: raise ValueError - count = min(len(E_conv_all), len(o_E_conv_all), len(self.thickness)) - # From the last layer - # for layer_index in np.arange(count-1, -1, -1): - for layer_index in range(count)[::-1]: + for layer_index in range(len(self.thickness))[::-1]: - E_conv = E_conv_all[layer_index] - # o_E_conv = o_E_conv_all[layer_index] + epx_conv = epx_conv_all[layer_index] + epy_conv = epy_conv_all[layer_index] + epz_conv_i = epz_conv_i_all[layer_index] d = self.thickness[layer_index] - if self.pol == 0: - E_conv_i = None - A = Kx ** 2 - E_conv - Eig.perturbation = self.perturbation - eigenvalues, W = Eig.apply(A) - q = eigenvalues ** 0.5 - Q = torch.diag(q) - V = W @ Q - - elif self.pol == 1: - E_conv_i = torch.linalg.inv(E_conv) - B = Kx @ E_conv_i @ Kx - torch.eye(E_conv.shape[0], device=self.device, dtype=self.type_complex) - # o_E_conv_i = torch.linalg.inv(o_E_conv) - - Eig.perturbation = self.perturbation - eigenvalues, W = Eig.apply(E_conv @ B) - q = eigenvalues ** 0.5 - Q = torch.diag(q) - # V = o_E_conv @ W @ Q - V = E_conv_i @ W @ Q - - else: - raise ValueError - - if self.algo == 'TMM': - X, f, g, T, a_i, b = transfer_1d_2(k0, q, d, W, V, f, g, self.fourier_order, T, - device=self.device, type_complex=self.type_complex) - - layer_info = [E_conv_i, q, W, X, a_i, b, d] + # if self.pol == 0: + # E_conv_i = None + # A = Kx ** 2 - E_conv + # Eig.perturbation = self.perturbation + # eigenvalues, W = Eig.apply(A) + # q = eigenvalues ** 0.5 + # Q = torch.diag(q) + # V = W @ Q + # + # elif self.pol == 1: + # E_conv_i = torch.linalg.inv(E_conv) + # B = Kx @ E_conv_i @ Kx - torch.eye(E_conv.shape[0], device=self.device, dtype=self.type_complex) + # # o_E_conv_i = torch.linalg.inv(o_E_conv) + # + # Eig.perturbation = self.perturbation + # eigenvalues, W = Eig.apply(E_conv @ B) + # q = eigenvalues ** 0.5 + # Q = torch.diag(q) + # # V = o_E_conv @ W @ Q + # V = E_conv_i @ W @ Q + # + # else: + # raise ValueError + if self.connecting_algo == 'TMM': + W, V, q = transfer_1d_2(self.pol, kx, epx_conv, epy_conv, epz_conv_i, device=self.device, type_complex=self.type_complex) + + X, F, G, T, A_i, B = transfer_1d_3(k0, W, V, q, d, F, G, T, device=self.device, type_complex=self.type_complex) + + layer_info = [epz_conv_i, W, V, q, d, A_i, B] self.layer_info_list.append(layer_info) - elif self.algo == 'SMM': + elif self.connecting_algo == 'SMM': A, B, S_dict, Sg = scattering_1d_2(W, Wg, V, Vg, d, k0, Q, Sg) else: raise ValueError - if self.algo == 'TMM': - de_ri, de_ti, T1, self.rayleigh_r, self.rayleigh_t = transfer_1d_3(g, YZ_I, f, delta_i0, inc_term, T, k_I_z, k0, self.n_I, self.n_II, - self.theta, self.pol, k_II_z) + # if self.algo == 'TMM': + # X, f, g, T, a_i, b = transfer_1d_2(k0, q, d, W, V, f, g, self.fto, T, + # device=self.device, type_complex=self.type_complex) + # + # layer_info = [E_conv_i, q, W, X, a_i, b, d] + # self.layer_info_list.append(layer_info) + # + # elif self.algo == 'SMM': + # A, B, S_dict, Sg = scattering_1d_2(W, Wg, V, Vg, d, k0, Q, Sg) + # else: + # raise ValueError + + if self.connecting_algo == 'TMM': + de_ri, de_ti, T1 = transfer_1d_4(self.pol, F, G, T, kz_top, kz_bot, self.theta, self.n_top, self.n_bot, + device=self.device, type_complex=self.type_complex) self.T1 = T1 - elif self.algo == 'SMM': - de_ri, de_ti = scattering_1d_3(Wt, Wg, Vt, Vg, Sg, self.ff, Wr, self.fourier_order, Kzr, Kzt, - self.n_I, self.n_II, self.theta, self.pol) + elif self.connecting_algo == 'SMM': + de_ri, de_ti = scattering_1d_3(Wt, Wg, Vt, Vg, Sg, self.ff, Wr, self.fto, Kzr, Kzt, + self.n_top, self.n_bot, self.theta, self.pol) else: raise ValueError return de_ri, de_ti, self.rayleigh_r, self.rayleigh_t, self.layer_info_list, self.T1 def solve_1d_conical(self, wavelength, E_conv_all, o_E_conv_all): + """ + Deprecated. + Args: + wavelength: + E_conv_all: + o_E_conv_all: + + Returns: + """ self.layer_info_list = [] self.T1 = None self.rayleigh_r, self.rayleigh_t = [], [] - # fourier_indices = torch.arange(-self.fourier_order, self.fourier_order + 1, device=self.device) - ff = self.fourier_order[0] * 2 + 1 + # fourier_indices = torch.arange(-self.fto, self.fto + 1, device=self.device) + ff = self.fto[0] * 2 + 1 delta_i0 = torch.zeros(ff, device=self.device, dtype=self.type_complex) - delta_i0[self.fourier_order[0]] = 1 + delta_i0[self.fto[0]] = 1 - k0 = 2 * np.pi / wavelength + k0 = 2 * torch.pi / wavelength if self.algo == 'TMM': Kx, ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ - = transfer_1d_conical_1(ff, k0, self.n_I, self.n_II, self.kx_vector, self.theta, self.phi, + = transfer_1d_conical_1(ff, k0, self.n_top, self.n_bot, self.kx_vector, self.theta, self.phi, device=self.device, type_complex=self.type_complex) elif self.algo == 'SMM': print('SMM for 1D conical is not implemented') - return np.nan, np.nan + return torch.nan, torch.nan else: raise ValueError @@ -367,10 +409,10 @@ def solve_1d_conical(self, wavelength, E_conv_all, o_E_conv_all): o_E_conv_i = None if self.algo == 'TMM': - big_X, big_F, big_G, big_T, big_A_i, big_B, W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2\ + big_X, big_F, big_G, big_T, big_A_i, big_B, W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 \ = transfer_1d_conical_2(k0, Kx, ky, E_conv, E_conv_i, o_E_conv_i, ff, d, - varphi, big_F, big_G, big_T, - device=self.device, type_complex=self.type_complex) + varphi, big_F, big_G, big_T, + device=self.device, type_complex=self.type_complex) layer_info = [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] self.layer_info_list.append(layer_info) @@ -381,9 +423,14 @@ def solve_1d_conical(self, wavelength, E_conv_all, o_E_conv_all): raise ValueError if self.algo == 'TMM': - de_ri, de_ti, big_T1, self.rayleigh_r, self.rayleigh_t = transfer_1d_conical_3(big_F, big_G, big_T, Z_I, Y_I, self.psi, self.theta, ff, - delta_i0, k_I_z, k0, self.n_I, self.n_II, k_II_z, - device=self.device, type_complex=self.type_complex) + de_ri, de_ti, big_T1, self.rayleigh_r, self.rayleigh_t = transfer_1d_conical_3(big_F, big_G, big_T, Z_I, + Y_I, self.psi, self.theta, + ff, + delta_i0, k_I_z, k0, + self.n_top, self.n_bot, + k_II_z, + device=self.device, + type_complex=self.type_complex) self.T1 = big_T1 elif self.algo == 'SMM': @@ -393,83 +440,81 @@ def solve_1d_conical(self, wavelength, E_conv_all, o_E_conv_all): return de_ri, de_ti, self.rayleigh_r, self.rayleigh_t, self.layer_info_list, self.T1 - def solve_2d(self, wavelength, E_conv_all, o_E_conv_all): + def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): self.layer_info_list = [] self.T1 = None self.rayleigh_r, self.rayleigh_t = [], [] - fourier_indices_y = torch.arange(-self.fourier_order[1], self.fourier_order[1] + 1, device=self.device, - dtype=self.type_float) + ff_x = self.fto[0] * 2 + 1 + ff_y = self.fto[1] * 2 + 1 - ff_x = self.fourier_order[0] * 2 + 1 - ff_y = self.fourier_order[1] * 2 + 1 - ff_xy = ff_x * ff_y - - delta_i0 = torch.zeros((ff_xy, 1), device=self.device, dtype=self.type_complex) - delta_i0[ff_xy // 2, 0] = 1 - - I = torch.eye(ff_xy, device=self.device, dtype=self.type_complex) - O = torch.zeros((ff_xy, ff_xy), device=self.device, dtype=self.type_complex) - - center = ff_xy + k0 = 2 * torch.pi / wavelength + kx, ky = self.get_kx_ky_vector(wavelength) - k0 = 2 * np.pi / wavelength + if self.connecting_algo == 'TMM': + # kx, ky, Kx, Ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ + # = transfer_2d_1(ff_x, ff_y, ff_xy, k0, self.n_top, self.n_bot, self.kx, self.period, fourier_indices_y, + # self.theta, self.phi, wavelength, device=self.device, type_complex=self.type_complex) + kz_top, kz_bot, varphi, big_F, big_G, big_T \ + = transfer_2d_1(ff_x, ff_y, kx, ky, self.n_top, self.n_bot, device=self.device, + type_complex=self.type_complex) - if self.algo == 'TMM': - kx_vector, ky_vector, Kx, Ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ - = transfer_2d_1(ff_x, ff_y, ff_xy, k0, self.n_I, self.n_II, self.kx_vector, self.period, fourier_indices_y, - self.theta, self.phi, wavelength, device=self.device, type_complex=self.type_complex) - elif self.algo == 'SMM': + elif self.connecting_algo == 'SMM': Kx, Ky, kz_inc, Wg, Vg, Kzg, Wr, Vr, Kzr, Wt, Vt, Kzt, Ar, Br, Sg \ - = scattering_2d_1(self.n_I, self.n_II, self.theta, self.phi, k0, self.period, self.fourier_order) + = scattering_2d_1(self.n_top, self.n_bot, self.theta, self.phi, k0, self.period, self.fto) else: raise ValueError - # for E_conv, o_E_conv, d in zip(E_conv_all[::-1], o_E_conv_all[::-1], self.thickness[::-1]): - - count = min(len(E_conv_all), len(o_E_conv_all), len(self.thickness)) - # From the last layer - for layer_index in range(count)[::-1]: + for layer_index in range(len(self.thickness))[::-1]: - E_conv = E_conv_all[layer_index] - # o_E_conv = o_E_conv_all[layer_index] - o_E_conv = None + epx_conv = epx_conv_all[layer_index] + epy_conv = epy_conv_all[layer_index] + epz_conv_i = epz_conv_i_all[layer_index] d = self.thickness[layer_index] - E_conv_i = torch.linalg.inv(E_conv) - # o_E_conv_i = torch.linalg.inv(o_E_conv) - o_E_conv_i = None + if self.connecting_algo == 'TMM': + # W, V, q = transfer_2d_wv(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, + # device=self.device, type_complex=self.type_complex) - if self.algo == 'TMM': - W, V, q = transfer_2d_wv(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, - device=self.device, type_complex=self.type_complex) + W, V, q = transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, device=self.device, + type_complex=self.type_complex) + + # big_X, big_F, big_G, big_T, big_A_i, big_B, \ + # W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22 \ + # = transfer_2d_2(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, device=self.device, + # type_complex=self.type_complex) + # + # layer_info = [E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] + # self.layer_info_list.append(layer_info) big_X, big_F, big_G, big_T, big_A_i, big_B, \ - W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22 \ - = transfer_2d_2(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, device=self.device, + = transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, device=self.device, type_complex=self.type_complex) - layer_info = [E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] + layer_info = [epz_conv_i, W, V, q, d, big_A_i, big_B] self.layer_info_list.append(layer_info) - elif self.algo == 'SMM': + elif self.connecting_algo == 'SMM': W, V, LAMBDA = scattering_2d_wv(ff_xy, Kx, Ky, E_conv, o_E_conv, o_E_conv_i, E_conv_i) A, B, Sl_dict, Sg_matrix, Sg = scattering_2d_2(W, Wg, V, Vg, d, k0, Sg, LAMBDA) else: raise ValueError - if self.algo == 'TMM': - de_ri, de_ti, big_T1, self.rayleigh_r, self.rayleigh_t = transfer_2d_3(center, big_F, big_G, big_T, Z_I, Y_I, self.psi, self.theta, ff_xy, - delta_i0, k_I_z, k0, self.n_I, self.n_II, k_II_z, device=self.device, + if self.connecting_algo == 'TMM': # TODO: cleaning + # de_ri, de_ti, big_T1, self.rayleigh_r, self.rayleigh_t = transfer_2d_3(center, big_F, big_G, big_T, Z_I, Y_I, self.psi, self.theta, ff_xy, + # delta_i0, k_I_z, k0, self.n_top, self.n_bot, k_II_z, device=self.device, + # type_complex=self.type_complex) + de_ri, de_ti, big_T1 = transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, self.psi, self.theta, + self.n_top, self.n_bot, device=self.device, type_complex=self.type_complex) self.T1 = big_T1 - elif self.algo == 'SMM': - de_ri, de_ti = scattering_2d_3(Wt, Wg, Vt, Vg, Sg, Wr, Kx, Ky, Kzr, Kzt, kz_inc, self.n_I, - self.pol, self.theta, self.phi, self.fourier_order) + elif self.connecting_algo == 'SMM': + de_ri, de_ti = scattering_2d_3(Wt, Wg, Vt, Vg, Sg, Wr, Kx, Ky, Kzr, Kzt, kz_inc, self.n_top, + self.pol, self.theta, self.phi, self.fto) else: raise ValueError diff --git a/meent/on_torch/emsolver/convolution_matrix.py b/meent/on_torch/emsolver/convolution_matrix.py index dd6e573..be14dc5 100644 --- a/meent/on_torch/emsolver/convolution_matrix.py +++ b/meent/on_torch/emsolver/convolution_matrix.py @@ -1,8 +1,14 @@ import torch +from .fourier_analysis import dfs2d, cfs2d def cell_compression(cell, device=torch.device('cpu'), type_complex=torch.complex128): + cell = torch.flipud(cell) + # This is needed because the comp. connecting_algo begins from 0 to period (RC coord. system). + # On the other hand, the field data is from period to 0 (XY coord. system). + # Will be flipped again during field reconstruction. + if type_complex == torch.complex128: type_float = torch.float64 else: @@ -82,45 +88,66 @@ def fft_piecewise_constant(cell, x, y, fourier_order_x, fourier_order_y, device= return f_coeffs_xy.T -def to_conv_mat_vector(ucell_info_list, fourier_order_x, fourier_order_y, device=torch.device('cpu'), +def to_conv_mat_vector(ucell_info_list, fto_x, fto_y, device=torch.device('cpu'), type_complex=torch.complex128): - ff_x = 2 * fourier_order_x + 1 - ff_y = 2 * fourier_order_y + 1 - - e_conv_all = torch.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y), device=device).type(type_complex) - o_e_conv_all = torch.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y), device=device).type(type_complex) - - # 2D - for i, (cell, x_list, y_list) in enumerate(ucell_info_list): - - f_coeffs = fft_piecewise_constant(cell**2, x_list, y_list, - fourier_order_x, fourier_order_y, device=device, type_complex=type_complex) - o_f_coeffs = fft_piecewise_constant(1 / cell**2, x_list, y_list, - fourier_order_x, fourier_order_y, device=device, type_complex=type_complex) - - center = torch.tensor(f_coeffs.shape, device=device) // 2 - - conv_idx_y = torch.arange(-ff_y + 1, ff_y, 1, device=device) - conv_idx_y = circulant(conv_idx_y, device=device) - conv_i = conv_idx_y.repeat_interleave(ff_x, dim=1) - conv_i = conv_i.repeat_interleave(ff_x, dim=0) - - conv_idx_x = torch.arange(-ff_x + 1, ff_x, 1, device=device) - conv_idx_x = circulant(conv_idx_x, device=device) - conv_j = conv_idx_x.repeat(ff_y, ff_y) - - e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] - o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] - e_conv_all[i] = e_conv - o_e_conv_all[i] = o_e_conv - return e_conv_all, o_e_conv_all + ff_xy = (2 * fto_x + 1) * (2 * fto_y + 1) + + epx_conv_all = torch.zeros((len(ucell_info_list), ff_xy, ff_xy), device=device).type(type_complex) + epy_conv_all = torch.zeros((len(ucell_info_list), ff_xy, ff_xy), device=device).type(type_complex) + epz_conv_i_all = torch.zeros((len(ucell_info_list), ff_xy, ff_xy), device=device).type(type_complex) + + for i, ucell_info in enumerate(ucell_info_list): + ucell_layer, x_list, y_list = ucell_info + eps_matrix = ucell_layer ** 2 + + epz_conv = cfs2d(eps_matrix, x_list, y_list, 1, 1, fto_x, fto_y, device=device, type_complex=type_complex) + epy_conv = cfs2d(eps_matrix, x_list, y_list, 1, 0, fto_x, fto_y, device=device, type_complex=type_complex) + epx_conv = cfs2d(eps_matrix, x_list, y_list, 0, 1, fto_x, fto_y, device=device, type_complex=type_complex) + + epx_conv_all[i] = epx_conv + epy_conv_all[i] = epy_conv + epz_conv_i_all[i] = torch.linalg.inv(epz_conv) + + return epx_conv_all, epy_conv_all, epz_conv_i_all + + # ff_x = 2 * fto_x + 1 + # ff_y = 2 * fto_y + 1 + # + # e_conv_all = torch.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y), device=device).type(type_complex) + # o_e_conv_all = torch.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y), device=device).type(type_complex) + # + # # 2D + # for i, (cell, x_list, y_list) in enumerate(ucell_info_list): + # + # f_coeffs = fft_piecewise_constant(cell**2, x_list, y_list, + # fto_x, fto_y, device=device, type_complex=type_complex) + # o_f_coeffs = fft_piecewise_constant(1 / cell**2, x_list, y_list, + # fto_x, fto_y, device=device, type_complex=type_complex) + # + # center = torch.tensor(f_coeffs.shape, device=device) // 2 + # + # conv_idx_y = torch.arange(-ff_y + 1, ff_y, 1, device=device) + # conv_idx_y = circulant(conv_idx_y, device=device) + # conv_i = conv_idx_y.repeat_interleave(ff_x, dim=1) + # conv_i = conv_i.repeat_interleave(ff_x, dim=0) + # + # conv_idx_x = torch.arange(-ff_x + 1, ff_x, 1, device=device) + # conv_idx_x = circulant(conv_idx_x, device=device) + # conv_j = conv_idx_x.repeat(ff_y, ff_y) + # + # e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] + # o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] + # + # e_conv_all[i] = e_conv + # o_e_conv_all[i] = o_e_conv + # return e_conv_all, o_e_conv_all # TODO: Fourier analysis - Analytic -# def fs_rectangle(cx, cy, lx, ly, pmtvy, fourier_order, period): +# def fs_rectangle(cx, cy, lx, ly, pmtvy, fto, period): # Px, Py = period -# fourier_x, fourier_y = fourier_order +# fourier_x, fourier_y = fto # Nx_vector = torch.arange(-2 * fourier_x, 2 * fourier_x + 1, 1).type(torch.complex128) # Ny_vector = torch.arange(-2 * fourier_y, 2 * fourier_y + 1, 1).type(torch.complex128) # @@ -195,66 +222,122 @@ def to_conv_mat_vector(ucell_info_list, fourier_order_x, fourier_order_y, device # return e_conv_all, o_e_conv_all -def to_conv_mat_raster_continuous(ucell, fourier_order_x, fourier_order_y, device=torch.device('cpu'), +def to_conv_mat_raster_continuous(ucell, fto_x, fto_y, device=torch.device('cpu'), type_complex=torch.complex128): - ucell_pmt = ucell ** 2 - - if ucell_pmt.shape[1] == 1: # 1D - ff = 2 * fourier_order_x + 1 - - e_conv_all = torch.zeros((ucell_pmt.shape[0], ff, ff), device=device).type(type_complex) - o_e_conv_all = torch.zeros((ucell_pmt.shape[0], ff, ff), device=device).type(type_complex) - - for i, layer in enumerate(ucell_pmt): - - cell, x, y = cell_compression(layer, device=device, type_complex=type_complex) - - f_coeffs = fft_piecewise_constant(cell, x, y, fourier_order_x, fourier_order_y, device=device, type_complex=type_complex) - o_f_coeffs = fft_piecewise_constant(1 / cell, x, y, fourier_order_x, fourier_order_y, device=device, type_complex=type_complex) - - center = torch.tensor(f_coeffs.shape, device=device) // 2 - conv_idx = torch.arange(-ff + 1, ff, 1, device=device) - conv_idx = circulant(conv_idx, device=device) - e_conv = f_coeffs[center[0], center[1] + conv_idx] - o_e_conv = o_f_coeffs[center[0], center[1] + conv_idx] - e_conv_all[i] = e_conv - o_e_conv_all[i] = o_e_conv - - else: # 2D - ff_x = 2 * fourier_order_x + 1 - ff_y = 2 * fourier_order_y + 1 - - e_conv_all = torch.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y), device=device).type(type_complex) - o_e_conv_all = torch.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y), device=device).type(type_complex) - - for i, layer in enumerate(ucell_pmt): - - cell, x, y = cell_compression(layer, device=device, type_complex=type_complex) - - f_coeffs = fft_piecewise_constant(cell, x, y, fourier_order_x, fourier_order_y, device=device, - type_complex=type_complex) - o_f_coeffs = fft_piecewise_constant(1 / cell, x, y, fourier_order_x, fourier_order_y, device=device, - type_complex=type_complex) + ff_xy = (2 * fto_x + 1) * (2 * fto_y + 1) + + epx_conv_all = torch.zeros((ucell.shape[0], ff_xy, ff_xy), device=device, dtype=type_complex) + epy_conv_all = torch.zeros((ucell.shape[0], ff_xy, ff_xy), device=device, dtype=type_complex) + epz_conv_i_all = torch.zeros((ucell.shape[0], ff_xy, ff_xy), device=device, dtype=type_complex) + + for i, layer in enumerate(ucell): + n_compressed, x_list, y_list = cell_compression(layer, device=device, type_complex=type_complex) + eps_matrix = n_compressed ** 2 + + epz_conv = cfs2d(eps_matrix, x_list, y_list, 1, 1, fto_x, fto_y, device=device, type_complex=type_complex) + epy_conv = cfs2d(eps_matrix, x_list, y_list, 1, 0, fto_x, fto_y, device=device, type_complex=type_complex) + epx_conv = cfs2d(eps_matrix, x_list, y_list, 0, 1, fto_x, fto_y, device=device, type_complex=type_complex) + + epx_conv_all[i] = epx_conv + epy_conv_all[i] = epy_conv + epz_conv_i_all[i] = torch.linalg.inv(epz_conv) + + return epx_conv_all, epy_conv_all, epz_conv_i_all + + # if ucell_pmt.shape[1] == 1: # 1D + # ff = 2 * fto_x + 1 + # + # + # for i, layer in enumerate(ucell_pmt): + # + # cell, x, y = cell_compression(layer, device=device, type_complex=type_complex) + # + # f_coeffs = fft_piecewise_constant(cell, x, y, fto_x, fto_y, device=device, type_complex=type_complex) + # o_f_coeffs = fft_piecewise_constant(1 / cell, x, y, fto_x, fto_y, device=device, type_complex=type_complex) + # + # center = torch.tensor(f_coeffs.shape, device=device) // 2 + # conv_idx = torch.arange(-ff + 1, ff, 1, device=device) + # conv_idx = circulant(conv_idx, device=device) + # e_conv = f_coeffs[center[0], center[1] + conv_idx] + # o_e_conv = o_f_coeffs[center[0], center[1] + conv_idx] + # e_conv_all[i] = e_conv + # o_e_conv_all[i] = o_e_conv + # + # else: # 2D + # ff_x = 2 * fto_x + 1 + # ff_y = 2 * fto_y + 1 + # + # e_conv_all = torch.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y), device=device).type(type_complex) + # o_e_conv_all = torch.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y), device=device).type(type_complex) + # + # for i, layer in enumerate(ucell_pmt): + # + # cell, x, y = cell_compression(layer, device=device, type_complex=type_complex) + # + # f_coeffs = fft_piecewise_constant(cell, x, y, fto_x, fto_y, device=device, + # type_complex=type_complex) + # o_f_coeffs = fft_piecewise_constant(1 / cell, x, y, fto_x, fto_y, device=device, + # type_complex=type_complex) + # + # center = torch.tensor(f_coeffs.shape, device=device) // 2 + # + # conv_idx_y = torch.arange(-ff_y + 1, ff_y, 1, device=device) + # conv_idx_y = circulant(conv_idx_y, device=device) + # conv_i = conv_idx_y.repeat_interleave(ff_x, dim=1) + # conv_i = conv_i.repeat_interleave(ff_x, dim=0) + # + # conv_idx_x = torch.arange(-ff_x + 1, ff_x, 1, device=device) + # conv_idx_x = circulant(conv_idx_x, device=device) + # conv_j = conv_idx_x.repeat(ff_y, ff_y) + # + # e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] + # o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] + # e_conv_all[i] = e_conv + # o_e_conv_all[i] = o_e_conv + # return e_conv_all, o_e_conv_all + + +def to_conv_mat_raster_discrete(ucell, fto_x, fto_y, device=None, type_complex=torch.complex128, + enhanced_dfs=True): + + ff_xy = (2 * fto_x + 1) * (2 * fto_y + 1) + + epx_conv_all = torch.zeros((ucell.shape[0], ff_xy, ff_xy), device=device).type(type_complex) + epy_conv_all = torch.zeros((ucell.shape[0], ff_xy, ff_xy), device=device).type(type_complex) + epz_conv_i_all = torch.zeros((ucell.shape[0], ff_xy, ff_xy), device=device).type(type_complex) + + if enhanced_dfs: + minimum_pattern_size_y = (4 * fto_y + 1) * ucell.shape[1] + minimum_pattern_size_x = (4 * fto_x + 1) * ucell.shape[2] + else: + minimum_pattern_size_y = 4 * fto_y + 1 + minimum_pattern_size_x = 4 * fto_x + 1 + # e.g., 8 bytes * (40*500) * (40*500) / 1E6 = 3200 MB = 3.2 GB - center = torch.tensor(f_coeffs.shape, device=device) // 2 + for i, layer in enumerate(ucell): + if layer.shape[0] < minimum_pattern_size_y: + n = minimum_pattern_size_y // layer.shape[0] + n = torch.tensor(n, device=device) + layer = layer.repeat_interleave(n + 1, axis=0) + if layer.shape[1] < minimum_pattern_size_x: + n = minimum_pattern_size_x // layer.shape[1] + n = torch.tensor(n, device=device) + layer = layer.repeat_interleave(n + 1, axis=1) - conv_idx_y = torch.arange(-ff_y + 1, ff_y, 1, device=device) - conv_idx_y = circulant(conv_idx_y, device=device) - conv_i = conv_idx_y.repeat_interleave(ff_x, dim=1) - conv_i = conv_i.repeat_interleave(ff_x, dim=0) + eps_matrix = layer ** 2 - conv_idx_x = torch.arange(-ff_x + 1, ff_x, 1, device=device) - conv_idx_x = circulant(conv_idx_x, device=device) - conv_j = conv_idx_x.repeat(ff_y, ff_y) + epz_conv = dfs2d(eps_matrix, 1, 1, fto_x, fto_y, device=device, type_complex=type_complex) + epy_conv = dfs2d(eps_matrix, 1, 0, fto_x, fto_y, device=device, type_complex=type_complex) + epx_conv = dfs2d(eps_matrix, 0, 1, fto_x, fto_y, device=device, type_complex=type_complex) - e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] - o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] - e_conv_all[i] = e_conv - o_e_conv_all[i] = o_e_conv - return e_conv_all, o_e_conv_all + epx_conv_all[i] = epx_conv + epy_conv_all[i] = epy_conv + epz_conv_i_all[i] = torch.linalg.inv(epz_conv) + return epx_conv_all, epy_conv_all, epz_conv_i_all -def to_conv_mat_raster_discrete(ucell, fourier_order_x, fourier_order_y, device=torch.device('cpu'), type_complex=torch.complex128, +#TODO: cleaning +def to_conv_mat_raster_discrete_(ucell, fourier_order_x, fourier_order_y, device=torch.device('cpu'), type_complex=torch.complex128, improve_dft=True): ucell_pmt = ucell ** 2 @@ -330,15 +413,15 @@ def to_conv_mat_raster_discrete(ucell, fourier_order_x, fourier_order_y, device= return e_conv_all, o_e_conv_all -def circulant(c, device=torch.device('cpu')): - - center = c.shape[0] // 2 - circ = torch.zeros((center + 1, center + 1), device=device).type(torch.long) - - for r in range(center+1): - idx = torch.arange(r, r - center - 1, -1, device=device) - - assign_value = c[center - idx] - circ[r] = assign_value - - return circ +# def circulant(c, device=torch.device('cpu')): +# +# center = c.shape[0] // 2 +# circ = torch.zeros((center + 1, center + 1), device=device).type(torch.long) +# +# for r in range(center+1): +# idx = torch.arange(r, r - center - 1, -1, device=device) +# +# assign_value = c[center - idx] +# circ[r] = assign_value +# +# return circ diff --git a/meent/on_torch/emsolver/field_distribution.py b/meent/on_torch/emsolver/field_distribution.py index f118a6e..343e810 100644 --- a/meent/on_torch/emsolver/field_distribution.py +++ b/meent/on_torch/emsolver/field_distribution.py @@ -1,421 +1,174 @@ import torch -def field_dist_1d_vectorized_ji(wavelength, kx_vector, T1, layer_info_list, period, - pol, res_x=20, res_y=20, res_z=20, device='cpu', - type_complex=torch.complex128, type_float=torch.float64): +def field_dist_1d(wavelength, kx, T1, layer_info_list, period, + pol, res_x=20, res_y=20, res_z=20, device='cpu', + type_complex=torch.complex128, type_float=torch.float64): k0 = 2 * torch.pi / wavelength - Kx = torch.diag(kx_vector / k0) + Kx = torch.diag(kx) - field_cell = torch.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) + field_cell = torch.zeros((res_z * len(layer_info_list), res_y, res_x, 3), device=device, dtype=type_complex) T_layer = T1 # From the first layer - for idx_layer, (E_conv_i, q, W, X, a_i, b, d) in enumerate(layer_info_list[::-1]): - - c1 = T_layer[:, None] - c2 = b @ a_i @ X @ T_layer[:, None] - - Q = torch.diag(q) - - if pol == 0: - V = W @ Q - EKx = None - - else: - V = E_conv_i @ W @ Q - EKx = E_conv_i @ Kx - - for k in range(res_z): - z = k / res_z * d - - if pol == 0: - Sy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Ux = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - C = Kx @ Sy - - x_1d = torch.arange(res_x, dtype=type_float, device=device).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = torch.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - - exp_K = torch.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Ey = exp_K @ Sy - Hx = -1j * exp_K @ Ux - Hz = -1j * exp_K @ C - - val = torch.cat((Ey, Hx, Hz), -1) - - else: - Uy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Sx = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - - C = EKx @ Uy # there is a better option for convergence - - x_1d = torch.arange(res_x, dtype=type_float, device=device).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = torch.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - - exp_K = torch.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Hy = exp_K @ Uy - Ex = 1j * exp_K @ Sx - Ez = -1j * exp_K @ C - - val = torch.cat((Hy, Ex, Ez), -1) - - field_cell[res_z * idx_layer + k] = val - - T_layer = a_i @ X @ T_layer - - return field_cell - - -def field_dist_1d_conical_vectorized_ji(wavelength, kx_vector, n_I, theta, phi, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, device='cpu', - type_complex=torch.complex128, type_float=torch.float64): - - k0 = 2 * torch.pi / wavelength - ky = k0 * n_I * torch.sin(theta) * torch.sin(phi) - Kx = torch.diag(kx_vector / k0) - - field_cell = torch.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) - - T_layer = T1 - - big_I = torch.eye((len(T1)), device=device).type(type_complex) - - # From the first layer - for idx_layer, [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] \ - in enumerate(layer_info_list[::-1]): - - c = torch.cat([big_I, big_B @ big_A_i @ big_X]) @ T_layer - - for k in range(res_z): - Sx, Sy, Ux, Uy, Sz, Uz = z_loop_1d_conical(k, c, k0, Kx, ky, res_z, E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, d) - - x_1d = torch.arange(res_x, dtype=type_float, device=device).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = torch.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - - exp_K = torch.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Ex = exp_K @ Sx - Ey = exp_K @ Sy - Ez = exp_K @ Sz - - Hx = -1j * exp_K @ Ux - Hy = -1j * exp_K @ Uy - Hz = -1j * exp_K @ Uz - - val = torch.stack((Ex, Ey, Ez, Hx, Hy, Hz), -1) - - field_cell[res_z * idx_layer + k] = val - - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - - -def field_dist_2d_vectorized_ji(wavelength, kx_vector, n_I, theta, phi, fourier_order_x, fourier_order_y, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, device='cpu', type_complex=torch.complex128, type_float=torch.float64): - - k0 = 2 * torch.pi / wavelength - - fourier_indices_y = torch.arange(-fourier_order_y, fourier_order_y + 1, dtype=type_float, device=device) - ff_x = fourier_order_x * 2 + 1 - ff_y = fourier_order_y * 2 + 1 - ky_vector = k0 * (n_I * torch.sin(theta) * torch.sin(phi) + fourier_indices_y * ( - wavelength / period[1])).type(type_complex) - - Kx = torch.diag(torch.tile(kx_vector, (ff_y, )).flatten()) / k0 - Ky = torch.diag(torch.tile(ky_vector.reshape((-1, 1)), (ff_x, )).flatten()) / k0 - - field_cell = torch.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) - - T_layer = T1 - - big_I = torch.eye((len(T1)), device=device).type(type_complex) - - # From the first layer - for idx_layer, (E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d)\ - in enumerate(layer_info_list[::-1]): - - c = torch.cat([big_I, big_B @ big_A_i @ big_X]) @ T_layer - - for k in range(res_z): - Sx, Sy, Ux, Uy, Sz, Uz = z_loop_2d(k, c, k0, Kx, Ky, res_z, E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, d) - - x_1d = torch.arange(res_x, dtype=type_float, device=device).reshape((1, -1, 1)) - y_1d = torch.arange(res_y, dtype=type_float, device=device).reshape((-1, 1, 1)) - - x_1d = -1j * x_1d * period[0] / res_x - y_1d = -1j * y_1d * period[1] / res_y - - x_2d = torch.tile(x_1d, (res_y, 1, 1)) - y_2d = torch.tile(y_1d, (1, res_x, 1)) - - x_2d = x_2d * kx_vector - y_2d = y_2d * ky_vector + for idx_layer, (epz_conv_i, W, V, q, d, A_i, B) in enumerate(layer_info_list[::-1]): - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - y_2d = y_2d.reshape((res_y, res_x, len(ky_vector), 1)) - - exp_K = torch.exp(x_2d) * torch.exp(y_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Ex = exp_K @ Sx - Ey = exp_K @ Sy - Ez = exp_K @ Sz - - Hx = -1j * exp_K @ Ux - Hy = -1j * exp_K @ Uy - Hz = -1j * exp_K @ Uz - - val = torch.stack((Ex.squeeze(), Ey.squeeze(), Ez.squeeze(), Hx.squeeze(), Hy.squeeze(), Hz.squeeze()), -1) - - field_cell[res_z * idx_layer + k] = val - - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - - -def field_dist_1d_vectorized_kji(wavelength, kx_vector, T1, layer_info_list, period, - pol, res_x=20, res_y=20, res_z=20, device='cpu', - type_complex=torch.complex128, type_float=torch.float64): - - k0 = 2 * torch.pi / wavelength - Kx = torch.diag(kx_vector / k0) - - field_cell = torch.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) - - T_layer = T1 - - # From the first layer - for idx_layer, (E_conv_i, q, W, X, a_i, b, d) in enumerate(layer_info_list[::-1]): + # c1 = T_layer[:, None] + # c2 = b @ a_i @ X @ T_layer[:, None] + # + # Q = torch.diag(q) + X = torch.diag(torch.exp(-k0 * q * d)) c1 = T_layer[:, None] - c2 = b @ a_i @ X @ T_layer[:, None] - + c2 = B @ A_i @ X @ T_layer[:, None] Q = torch.diag(q) - if pol == 0: - V = W @ Q - EKx = None + z_1d = torch.linspace(0, res_z, res_z, device=device, dtype=type_complex).reshape((-1, 1, 1)) / res_z * d + My = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + Mx = -V @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + if pol == 0: + Mz = -1j * Kx @ My else: - V = E_conv_i @ W @ Q - EKx = E_conv_i @ Kx - - z_1d = torch.arange(res_z, dtype=type_float, device=device).reshape((-1, 1, 1)) / res_z * d + Mz = -1j * epz_conv_i @ Kx @ My if pol else -1j * Kx @ My - if pol == 0: - Sy = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - Ux = V @ (-diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - C = Kx @ Sy + # x_1d = np.arange(1, res_x+1).reshape((1, -1, 1)) + # x_1d = x_1d * period[0] / res_x - x_1d = torch.arange(res_x, dtype=type_float, device=device).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = torch.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) + x_1d = torch.linspace(0, period[0], res_x, device=device, dtype=type_complex).reshape((1, -1, 1)) - exp_K = torch.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) + x_2d = torch.tile(x_1d, (res_y, 1, 1)) + x_2d = x_2d * kx * k0 + x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) - Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] - Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] - Hz = -1j * exp_K[:, :, None, :] @ C[:, None, None, :, :] + inv_fourier = torch.exp(-1j * x_2d) + inv_fourier = inv_fourier.reshape((res_y, res_x, -1)) - val = torch.cat((Ey.squeeze(-1), Hx.squeeze(-1), Hz.squeeze(-1)), -1) + if pol == 0: + Fy = inv_fourier[:, :, None, :] @ My[:, None, None, :, :] + Fx = 1j * inv_fourier[:, :, None, :] @ Mx[:, None, None, :, :] + Fz = 1j * inv_fourier[:, :, None, :] @ Mz[:, None, None, :, :] else: - Uy = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - Sx = V @ (-diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - - C = EKx @ Uy # there is a better option for convergence - - x_1d = torch.arange(res_x, dtype=type_float, device=device).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = torch.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - - exp_K = torch.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Hy = exp_K[:, :, None, :] @ Uy[:, None, None, :, :] - Ex = 1j * exp_K[:, :, None, :] @ Sx[:, None, None, :, :] - Ez = -1j * exp_K[:, :, None, :] @ C[:, None, None, :, :] + Fy = inv_fourier[:, :, None, :] @ My[:, None, None, :, :] + Fx = -1j * inv_fourier[:, :, None, :] @ Mx[:, None, None, :, :] + Fz = -1j * inv_fourier[:, :, None, :] @ Mz[:, None, None, :, :] - val = torch.cat((Hy.squeeze(-1), Ex.squeeze(-1), Ez.squeeze(-1)), -1) + # val = torch.concatenate((Fy.squeeze(-1), Fx.squeeze(-1), Fz.squeeze(-1)), axis=-1) + val = torch.cat((Fy.squeeze(-1), Fx.squeeze(-1), Fz.squeeze(-1)), -1) field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val - T_layer = a_i @ X @ T_layer + T_layer = A_i @ X @ T_layer return field_cell -def field_dist_1d_conical_vectorized_kji(wavelength, kx_vector, n_I, theta, phi, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, device='cpu', type_complex=torch.complex128, type_float=torch.float64): +def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, + res_x=20, res_y=20, res_z=20, device='cpu', type_complex=torch.complex128, type_float=torch.float64): + + # k0 = 2 * torch.pi / wavelength + # + # fourier_indices_y = torch.arange(-fourier_order_y, fourier_order_y + 1, dtype=type_float, device=device) + # ff_x = fourier_order_x * 2 + 1 + # ff_y = fourier_order_y * 2 + 1 + # ky = k0 * (n_top * torch.sin(theta) * torch.sin(phi) + fourier_indices_y * ( + # wavelength / period[1])).type(type_complex) + # + # Kx = torch.diag(torch.tile(kx, (ff_y, )).flatten()) / k0 + # Ky = torch.diag(torch.tile(ky.reshape((-1, 1)), (ff_x, )).flatten()) / k0 + # + # field_cell = torch.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) + # + # T_layer = T1 + # + # big_I = torch.eye((len(T1)), device=device).type(type_complex) k0 = 2 * torch.pi / wavelength - ky = k0 * n_I * torch.sin(theta) * torch.sin(phi) - Kx = torch.diag(kx_vector / k0) - - field_cell = torch.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) - - T_layer = T1[:, None] - - big_I = torch.eye((len(T1)), device=device).type(type_complex) - # From the first layer - for idx_layer, [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] \ - in enumerate(layer_info_list[::-1]): - - c = torch.cat([big_I, big_B @ big_A_i @ big_X]) @ T_layer + ff_x = len(kx) + ff_y = len(ky) + ff_xy = ff_x * ff_y - z_1d = torch.arange(res_z, dtype=type_float, device=device).reshape((-1, 1, 1)) / res_z * d + Kx = torch.diag(torch.tile(kx, (ff_y, )).flatten()) + Ky = torch.diag(torch.tile(ky.reshape((-1, 1)), (ff_x, )).flatten()) - ff = len(c) // 4 + field_cell = torch.zeros((res_z * len(layer_info_list), res_y, res_x, 6), device=device, dtype=type_complex) - c1_plus = c[0 * ff:1 * ff] - c2_plus = c[1 * ff:2 * ff] - c1_minus = c[2 * ff:3 * ff] - c2_minus = c[3 * ff:4 * ff] - - big_Q1 = torch.diag(q_1) - big_Q2 = torch.diag(q_2) - - Sx = W_2 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - - Sy = V_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - - Ux = W_1 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) - - Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - - Sz = -1j * E_conv_i @ (Kx @ Uy - ky * Ux) - Uz = -1j * (Kx @ Sy - ky * Sx) - - x_1d = torch.arange(res_x, dtype=type_float, device=device).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - x_2d = torch.tile(x_1d, (res_y, 1, 1)) - x_2d = x_2d * kx_vector - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - - exp_K = torch.exp(x_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) - - Ex = exp_K[:, :, None, :] @ Sx[:, None, None, :, :] - Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] - Ez = exp_K[:, :, None, :] @ Sz[:, None, None, :, :] - - Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] - Hy = -1j * exp_K[:, :, None, :] @ Uy[:, None, None, :, :] - Hz = -1j * exp_K[:, :, None, :] @ Uz[:, None, None, :, :] - - val = torch.cat( - (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), -1) - field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - - -def field_dist_2d_vectorized_kji(wavelength, kx_vector, n_I, theta, phi, fourier_order_x, fourier_order_y, T1, layer_info_list, period, - res_x=20, res_y=20, res_z=20, device='cpu', type_complex=torch.complex128, type_float=torch.float64): - - k0 = 2 * torch.pi / wavelength + T_layer = T1 - fourier_indices_y = torch.arange(-fourier_order_y, fourier_order_y + 1, dtype=type_float, device=device) - ff_x = fourier_order_x * 2 + 1 - ff_y = fourier_order_y * 2 + 1 - ky_vector = k0 * (n_I * torch.sin(theta) * torch.sin(phi) + fourier_indices_y * ( - wavelength / period[1])).type(type_complex) + big_I = torch.eye((len(T1)), device=device, dtype=type_complex) - Kx = torch.diag(torch.tile(kx_vector, (ff_y, )).flatten()) / k0 - Ky = torch.diag(torch.tile(ky_vector.reshape((-1, 1)), (ff_x, )).flatten()) / k0 - field_cell = torch.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) + # From the first layer + for idx_layer, (epz_conv_i, W, V, q, d, big_A_i, big_B) in enumerate(layer_info_list[::-1]): - T_layer = T1 + W_11 = W[:ff_xy, :ff_xy] + W_12 = W[:ff_xy, ff_xy:] + W_21 = W[ff_xy:, :ff_xy] + W_22 = W[ff_xy:, ff_xy:] - big_I = torch.eye((len(T1)), device=device).type(type_complex) + V_11 = V[:ff_xy, :ff_xy] + V_12 = V[:ff_xy, ff_xy:] + V_21 = V[ff_xy:, :ff_xy] + V_22 = V[ff_xy:, ff_xy:] - # From the first layer - for idx_layer, (E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d)\ - in enumerate(layer_info_list[::-1]): + big_X = torch.diag(torch.exp(-k0 * q * d)) c = torch.cat([big_I, big_B @ big_A_i @ big_X]) @ T_layer - z_1d = torch.arange(res_z, dtype=type_float, device=device).reshape((-1, 1, 1)) / res_z * d - ff = len(c) // 4 + z_1d = torch.linspace(0, res_z, res_z, device=device, dtype=type_complex).reshape((-1, 1, 1)) / res_z * d + # z_1d = np.arange(0, res_z, res_z).reshape((-1, 1, 1)) / res_z * d - c1_plus = c[0 * ff:1 * ff] - c2_plus = c[1 * ff:2 * ff] - c1_minus = c[2 * ff:3 * ff] - c2_minus = c[3 * ff:4 * ff] + c1_plus = c[0 * ff_xy:1 * ff_xy] + c2_plus = c[1 * ff_xy:2 * ff_xy] + c1_minus = c[2 * ff_xy:3 * ff_xy] + c2_minus = c[3 * ff_xy:4 * ff_xy] q1 = q[:len(q) // 2] q2 = q[len(q) // 2:] big_Q1 = torch.diag(q1) big_Q2 = torch.diag(q2) + Sx = W_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + W_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Sy = W_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + W_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - - Ux = V_11 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_12 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - - Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - - Sz = -1j * E_conv_i @ (Kx @ Uy - Ky @ Ux) + Ux = -V_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + - V_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Uy = -V_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + - V_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Sz = -1j * epz_conv_i @ (Kx @ Uy - Ky @ Ux) Uz = -1j * (Kx @ Sy - Ky @ Sx) - x_1d = torch.arange(res_x, dtype=type_float, device=device).reshape((1, -1, 1)) - y_1d = torch.arange(res_y, dtype=type_float, device=device).reshape((-1, 1, 1)) + # x_1d = np.arange(res_x).reshape((1, -1, 1)) * period[0] / res_x + x_1d = torch.linspace(0, period[0], res_x, device=device, dtype=type_complex).reshape((1, -1, 1)) - x_1d = -1j * x_1d * period[0] / res_x - y_1d = -1j * y_1d * period[1] / res_y + # y_1d = np.arange(res_y-1, -1, -1).reshape((-1, 1, 1)) * period[1] / res_y + y_1d = torch.linspace(0, period[1], res_y, device=device, dtype=type_complex)[::-1].reshape((-1, 1, 1)) x_2d = torch.tile(x_1d, (res_y, 1, 1)) - y_2d = torch.tile(y_1d, (1, res_x, 1)) - - x_2d = x_2d * kx_vector - y_2d = y_2d * ky_vector + x_2d = x_2d * kx * k0 + x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) - x_2d = x_2d.reshape((res_y, res_x, 1, len(kx_vector))) - y_2d = y_2d.reshape((res_y, res_x, len(ky_vector), 1)) + y_2d = torch.tile(y_1d, (1, res_x, 1)) + y_2d = y_2d * ky * k0 + y_2d = y_2d.reshape((res_y, res_x, len(ky), 1)) - exp_K = torch.exp(x_2d) * torch.exp(y_2d) - exp_K = exp_K.reshape((res_y, res_x, -1)) + inv_fourier = torch.exp(-1j * x_2d) * torch.exp(-1j * y_2d) + inv_fourier = inv_fourier.reshape((res_y, res_x, -1)) - Ex = exp_K[:, :, None, :] @ Sx[:, None, None, :, :] - Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] - Ez = exp_K[:, :, None, :] @ Sz[:, None, None, :, :] + Ex = inv_fourier[:, :, None, :] @ Sx[:, None, None, :, :] + Ey = inv_fourier[:, :, None, :] @ Sy[:, None, None, :, :] + Ez = inv_fourier[:, :, None, :] @ Sz[:, None, None, :, :] + Hx = 1j * inv_fourier[:, :, None, :] @ Ux[:, None, None, :, :] + Hy = 1j * inv_fourier[:, :, None, :] @ Uy[:, None, None, :, :] + Hz = 1j * inv_fourier[:, :, None, :] @ Uz[:, None, None, :, :] - Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] - Hy = -1j * exp_K[:, :, None, :] @ Uy[:, None, None, :, :] - Hz = -1j * exp_K[:, :, None, :] @ Uz[:, None, None, :, :] + # val = np.concatenate( + # (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), -1) val = torch.cat( (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), -1) @@ -427,6 +180,76 @@ def field_dist_2d_vectorized_kji(wavelength, kx_vector, n_I, theta, phi, fourier return field_cell + # TODO: cleaning + # # From the first layer + # for idx_layer, (E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d)\ + # in enumerate(layer_info_list[::-1]): + # + # c = torch.cat([big_I, big_B @ big_A_i @ big_X]) @ T_layer + # z_1d = torch.arange(res_z, dtype=type_float, device=device).reshape((-1, 1, 1)) / res_z * d + # + # ff = len(c) // 4 + # + # c1_plus = c[0 * ff:1 * ff] + # c2_plus = c[1 * ff:2 * ff] + # c1_minus = c[2 * ff:3 * ff] + # c2_minus = c[3 * ff:4 * ff] + # + # q1 = q[:len(q) // 2] + # q2 = q[len(q) // 2:] + # big_Q1 = torch.diag(q1) + # big_Q2 = torch.diag(q2) + # Sx = W_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + # + W_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + # + # Sy = W_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + # + W_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + # + # Ux = V_11 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + # + V_12 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + # + # Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + # + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + # + # Sz = -1j * E_conv_i @ (Kx @ Uy - Ky @ Ux) + # Uz = -1j * (Kx @ Sy - Ky @ Sx) + # + # x_1d = torch.arange(res_x, dtype=type_float, device=device).reshape((1, -1, 1)) + # y_1d = torch.arange(res_y, dtype=type_float, device=device).reshape((-1, 1, 1)) + # + # x_1d = -1j * x_1d * period[0] / res_x + # y_1d = -1j * y_1d * period[1] / res_y + # + # x_2d = torch.tile(x_1d, (res_y, 1, 1)) + # y_2d = torch.tile(y_1d, (1, res_x, 1)) + # + # x_2d = x_2d * kx + # y_2d = y_2d * ky + # + # x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) + # y_2d = y_2d.reshape((res_y, res_x, len(ky), 1)) + # + # exp_K = torch.exp(x_2d) * torch.exp(y_2d) + # exp_K = exp_K.reshape((res_y, res_x, -1)) + # + # Ex = exp_K[:, :, None, :] @ Sx[:, None, None, :, :] + # Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] + # Ez = exp_K[:, :, None, :] @ Sz[:, None, None, :, :] + # + # Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] + # Hy = -1j * exp_K[:, :, None, :] @ Uy[:, None, None, :, :] + # Hz = -1j * exp_K[:, :, None, :] @ Uz[:, None, None, :, :] + # + # val = torch.cat( + # (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), -1) + # + # field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val + # + # T_layer = big_A_i @ big_X @ T_layer + # + # return field_cell + + def field_dist_1d_vanilla(wavelength, kx_vector, T1, layer_info_list, period, pol, res_x=20, res_y=20, res_z=20, device='cpu', type_complex=torch.complex128, *args, **kwargs): diff --git a/meent/on_torch/emsolver/fourier_analysis.py b/meent/on_torch/emsolver/fourier_analysis.py new file mode 100644 index 0000000..609f67e --- /dev/null +++ b/meent/on_torch/emsolver/fourier_analysis.py @@ -0,0 +1,538 @@ +import torch +# import numpy as np + + +def _cfs(x, cell, fto, period, device=torch.device('cpu'), type_complex=torch.complex128): + + cell_next = torch.roll(cell, -1, dims=1) + cell_diff = cell_next - cell + cell_diff = cell_diff.type(type_complex) + + modes = torch.arange(-2 * fto, 2 * fto + 1, 1, device=device).type(type_complex) + + center = 2 * fto + # nc = np.ones(len(modes), dtype=bool) + nc = torch.ones(len(modes), device=device).type(torch.bool) + + nc[center] = False + + # x_next = np.vstack((np.roll(x, -1, axis=0)[:-1], period)) - x + x_next = torch.vstack((torch.roll(x, -1, dims=0)[:-1], torch.tensor([period], device=device))) - x + + # f = cell_diff @ np.exp(-1j * 2 * np.pi * x @ modes[None, :] / period, dtype=type_complex) + f = cell_diff @ torch.exp(-1j * 2 * torch.pi * x @ modes[None, :] / period).type(type_complex) + + f[:, nc] /= (1j * 2 * torch.pi * modes[nc]) + f[:, center] = (cell @ torch.vstack((x[0], x_next[:-1]))).flatten() / period + + return f + + +def cfs2d(cell, x, y, conti_x, conti_y, fto_x, fto_y, device=torch.device('cpu'), type_complex=torch.complex128): + cell = cell.type(type_complex) + + ff_x = 2 * fto_x + 1 + ff_y = 2 * fto_y + 1 + + period_x, period_y = x[-1], y[-1] + + cell = cell.T + + if conti_y == 0: # discontinuous in Y (Row): inverse rule is applied. + cell = 1 / cell + + cfs1d = _cfs(y, cell, fto_y, period_y, device=device, type_complex=type_complex) + + conv_index_1 = circulant(fto_y, device=device) + (2 * fto_y) + conv_index_2 = circulant(fto_x, device=device) + (2 * fto_x) + + conv1d = cfs1d[:, conv_index_1] + + if conti_x ^ conti_y: + conv1d = torch.linalg.inv(conv1d) + + conv1d = conv1d.reshape((-1, ff_y ** 2)) + + cfs2d = _cfs(x, conv1d.T, fto_x, period_x, device=device, type_complex=type_complex) + + conv2d = cfs2d[:, conv_index_2] + conv2d = conv2d.reshape((ff_y, ff_y, ff_x, ff_x)) + conv2d = torch.moveaxis(conv2d, 1, 2) + conv2d = conv2d.reshape((ff_y*ff_x, ff_y*ff_x)) + + if conti_x == 0: # discontinuous in X (Column): inverse rule is applied. + conv2d = torch.linalg.inv(conv2d) + + return conv2d + + +def dfs2d(cell, conti_x, conti_y, fto_x, fto_y, device=torch.device('cpu'), type_complex=torch.complex128): + cell = cell.type(type_complex) + + ff_x = 2 * fto_x + 1 + ff_y = 2 * fto_y + 1 + + cell = cell.T + + if conti_y == 0: # discontinuous in Y (Row): inverse rule is applied. + cell = 1 / cell + + dfs1d = torch.fft.fft(cell / cell.shape[1]) + + conv_index_1 = circulant(fto_y, device=device) + conv_index_2 = circulant(fto_x, device=device) + + conv1d = dfs1d[:, conv_index_1] + + if conti_x ^ conti_y: + conv1d = torch.linalg.inv(conv1d) + + conv1d = conv1d.reshape((-1, ff_y ** 2)) + + dfs2d = torch.fft.fft(conv1d.T / conv1d.T.shape[1]) + + conv2d = dfs2d[:, conv_index_2] + conv2d = conv2d.reshape((ff_y, ff_y, ff_x, ff_x)) + conv2d = torch.moveaxis(conv2d, 1, 2) + conv2d = conv2d.reshape((ff_y*ff_x, ff_y*ff_x)) + + if conti_x == 0: # discontinuous in X (Column): inverse rule is applied. + conv2d = torch.linalg.inv(conv2d) + + return conv2d + + +# def dfs2d_debug(cell, conti_x, conti_y, fto_x, fto_y, type_complex=np.complex128, perturbation=1E-10): +# """ +# algorithm from reticolo. +# Args: +# cell: +# conti_x: +# conti_y: +# fto_x: +# fto_y: +# type_complex: +# +# Returns: +# +# """ +# cell = cell.astype(type_complex) +# +# ff_x = 2 * fto_x + 1 +# ff_y = 2 * fto_y + 1 +# # fto = max(ff_x, ff_y) +# +# # (cx, cy) +# # (1, 1): epz_conv; (0, 1): epx_conv; (1, 0): epy_conv +# +# if conti_x == conti_y == 1: +# +# # case 1 +# fxy = np.fft.fft2(cell/cell.size).astype(type_complex) +# Y, X = convolution_matrix(fxy, ff_x, ff_y) +# +# fxy_conv = fxy[Y, X] +# +# # case 2 +# rows, cols = cell.shape +# fft1d = np.fft.fft(cell/cell.shape[1]).astype(type_complex) +# solution = np.fft.fft(fft1d.T/fft1d.shape[0]).T +# +# conv_index = circulant(fto_y) * 1 +# +# a_conv1d = np.zeros((rows, ff_y, ff_y), dtype=np.complex128) +# +# for r in range(rows): +# aa = fft1d[r, conv_index] +# a_conv1d[r, :, :] = aa +# +# a_conv1d_reshaped = a_conv1d.reshape(-1, ff_y**2).T +# +# a_fft2d = np.fft.fft(a_conv1d_reshaped / a_conv1d_reshaped.shape[1]) +# +# a_fft2d_1 = a_fft2d.reshape((3, 3, 6)) +# +# a_conv2d = np.zeros((3, 3, ff_y, ff_y), dtype=np.complex128) +# +# for r in range(3): +# for c in range(3): +# a_conv2d[:, :, r, c] = a_fft2d_1[r, c, conv_index] +# a_conv2d_1 = np.moveaxis(a_conv2d, 2, 1) +# a_conv2d_2 = a_conv2d_1.reshape(ff_y**2, ff_x**2) +# +# # case 4: RETICOLO +# bb = np.arange(54).reshape((3,3,6)) +# b_conv2d = np.zeros((3, 3, ff_y, ff_y), dtype=int) +# +# for r in range(3): +# for c in range(3): +# b_conv2d[:, :, r, c] = bb[r, c, conv_index] +# b_conv2d_1 = np.moveaxis(b_conv2d, 2, 1) +# b_conv2d_2 = b_conv2d_1.reshape(ff_y**2, ff_x**2) +# +# # case 5 +# bb = np.arange(54).reshape((3,3,6)) +# bbb = bb.reshape((9, 6)) +# c_conv2d = np.zeros((6, 3, 3), dtype=int) +# +# for c in range(bbb.shape[1]): +# c_conv2d[c] = bbb[:, c].reshape((3, 3)) +# +# c_conv2d_1 = np.block([ +# [c_conv2d[0], c_conv2d[1], c_conv2d[2]], +# [c_conv2d[-1], c_conv2d[0], c_conv2d[1]], +# [c_conv2d[-2], c_conv2d[-1], c_conv2d[0]], +# ]) +# +# # case 5 +# fft1d = np.fft.fft(cell/cell.shape[1]).astype(type_complex) +# +# axis1_length = fft1d.shape[0] +# axis2_length = ff_x +# axis3_length = ff_x +# +# axis1_coord = np.arange(axis1_length) +# conv_index_1 = circulant(fto_x) +# conv_index_2 = circulant(fto_y) +# +# conv1d = fft1d[:, conv_index_1] +# +# conv1d_1 = conv1d.reshape((-1, ff_x**2)) +# +# conv1d_2 = conv1d_1[:, np.r_[np.arange(ff_x), np.arange(-ff_x, -1, 1)]] +# +# conv1d_3 = conv1d_2.T +# fft2d = np.fft.fft(conv1d_3/conv1d_3.shape[1]) +# +# +# +# +# conv2d = fft2d[:, conv_index_2] +# conv2d_1 = conv2d.reshape((-1, ff_y**2)) +# conv2d_2 = conv2d_1[:, np.r_[np.arange(ff_y), np.arange(-ff_y, -1, 1)]] +# +# Y, X = convolution_matrix(conv2d_2, ff_x, ff_y) +# res = conv2d_2.T[Y, X] +# +# +# +# fft2d_t = fft2d.T +# conv2d_t = fft2d_t[conv_index_2, :] +# conv2d_t_1 = conv2d_t.reshape((ff_y**2, -1)) +# conv2d_t_2 = conv2d_t_1[np.r_[np.arange(ff_y), np.arange(-ff_y, -1, 1)], :] +# +# conv2d_t_3 = conv2d_t_2 +# +# Y, X = convolution_matrix(conv2d_t_3, ff_x, ff_y) +# res_t = conv2d_t_3[Y, X] +# +# +# # case 5 +# bb = np.arange(45).reshape((3,3,5)) +# bbb = bb.reshape((9, 5)) +# bbb = conv2d_1 +# c_conv2da = np.zeros((5, 3, 3), dtype=np.complex128) +# +# for c in range(bbb.shape[1]): +# c_conv2da[c] = bbb[:, c].reshape((3, 3)) +# +# c_conv2d_1a = np.block([ +# [c_conv2da[0], c_conv2da[1], c_conv2da[2]], +# [c_conv2da[-1], c_conv2da[0], c_conv2da[1]], +# [c_conv2da[-2], c_conv2da[-1], c_conv2da[0]], +# ]) +# +# Y, X = convolution_matrix(conv2d_2, ff_x, ff_y) +# +# res = conv2d_2[Y, X] +# +# # conv2d_1 = conv2d[conv_index_2] +# +# # case 0 +# center = np.array(bb.shape) // 2 +# +# conv_y = np.arange(-ff_y + 1, ff_y, 1) +# conv_y = circulant1(conv_y) +# conv_y = np.repeat(conv_y, ff_x, axis=1) +# conv_y = np.repeat(conv_y, [ff_x] * ff_y, axis=0) +# +# conv_x = np.arange(-ff_x + 1, ff_x, 1) +# conv_x = circulant1(conv_x) +# conv_x = np.tile(conv_x, (ff_y, ff_y)) +# +# +# # Y, X = convolution_matrix(bb, ff_x, ff_y) +# +# c = bb[conv_y, conv_x] +# +# return fxy_conv +# +# elif conti_x == 1 and conti_y == 0: +# +# rows, cols = cell.shape +# +# # o_fy = np.zeros([rows, cols], dtype=type_complex) +# +# o_cell = 1 / cell # discontinuous in y: inverse rule is applied. +# +# # Row direction, Y direction +# # for c in range(cols): +# # # o_fy[:, c] = np.fft.fftshift(np.fft.fft(o_cell[:, c] / rows).astype(type_complex)) +# # o_fy[:, c] = np.fft.fft(o_cell[:, c] / rows).astype(type_complex) +# +# o_fy = np.fft.fft(o_cell.T / o_cell.shape[0]).T +# +# +# idx_conv_y = circulant1(np.arange(-ff_y + 1, ff_y, 1)) +# idx_conv_y1 = circulant(fto_y) +# +# fy_conv = np.zeros((cols, ff_y, ff_y), dtype=np.complex128) +# +# for c in range(cols): +# +# fy_conv[c, :, :] = o_fy[idx_conv_y, c] +# +# fy_conv = np.linalg.inv(fy_conv) +# +# fy_conv = fy_conv.reshape(-1, ff_y**2).T +# # fy_conv = fy_conv.reshape(ff_y**2, -1) +# +# +# # fxy = np.zeros(fy_conv.shape, dtype=type_complex) +# # +# # for r in range(fy_conv.shape[0]): +# # # fxy[r, :] = np.fft.fftshift(np.fft.fft(o_fy_conv_i[r, :] / (cols)).astype(type_complex)) +# # fxy[r, :] = np.fft.fft(fy_conv[r, :] / cols).astype(type_complex) +# +# fxy = np.fft.fft(fy_conv / fy_conv.shape[1]) +# +# Y, X = convolution_matrix(fxy, ff_x, ff_y) +# +# fxy_conv = fxy[Y, X] +# +# return fxy_conv +# +# elif conti_x == 0 and conti_y == 1: +# +# rows, cols = cell.shape +# +# # o_fy = np.zeros([rows, cols], dtype=type_complex) +# +# # Row direction, Y direction +# # for c in range(cols): +# # # o_fy[:, c] = np.fft.fftshift(np.fft.fft(o_cell[:, c] / rows).astype(type_complex)) +# # o_fy[:, c] = np.fft.fft(o_cell[:, c] / rows).astype(type_complex) +# +# o_fy = np.fft.fft(cell.T / cell.shape[0]).T +# +# idx_conv_y = circulant1(np.arange(-ff_y + 1, ff_y, 1)) +# idx_conv_y1 = circulant(fto_y) +# +# fy_conv = np.zeros((cols, ff_y, ff_y), dtype=np.complex128) +# +# for c in range(cols): +# +# fy_conv[c, :, :] = o_fy[idx_conv_y, c] +# +# # fy_conv = np.linalg.inv(fy_conv) +# +# fy_conv = fy_conv.reshape(-1, ff_y**2).T +# +# # fxy = np.zeros(fy_conv.shape, dtype=type_complex) +# # +# # for r in range(fy_conv.shape[0]): +# # # fxy[r, :] = np.fft.fftshift(np.fft.fft(o_fy_conv_i[r, :] / (cols)).astype(type_complex)) +# # fxy[r, :] = np.fft.fft(fy_conv[r, :] / cols).astype(type_complex) +# +# a = np.where(fy_conv == 0) +# fy_conv[a] += perturbation +# +# fxy = np.fft.fft(1/fy_conv / fy_conv.shape[1]) +# +# Y, X = convolution_matrix(fxy, ff_x, ff_y) +# +# fxy_conv = fxy[Y, X] +# fxy_conv = np.linalg.inv(fxy_conv) +# +# return fxy_conv +# +# # +# # xx = np.zeros((rows, ff_x, ff_x), dtype=np.complex128) +# # +# # for r in range(rows): +# # +# # xx[r, :, :] = fxy[r, a] +# # +# # # xxx = np.moveaxis(xx, -1, 0) +# # +# # xxx = xx.reshape(-1, ff_y**2) +# # +# # conv_x = np.arange(-ff_x + 1, ff_x, 1) + 2 +# # a = circulant(conv_x) +# # +# # ff = xxx[a] +# # +# # +# # +# # +# # # fff = np.moveaxis(ff, -1, 0) +# # ffff = ff.reshape(ff_y*ff_x, ff_y*ff_x) +# # +# # +# # fxy = np.fft.fftshift(ff) +# # +# # +# # cx, cy = fxy.shape[0] // 2, fxy.shape[1] // 2 +# # +# # fxy = fxy[cx - fto:cx + fto + 1, cy - fto:cy + fto + 1] +# # +# # +# # +# # circ = np.zeros((ff_y, cols//2 + 1), dtype=int) +# # +# # for r in range(center + 1): +# # idx = np.arange(r, r - center - 1, -1, dtype=int) +# # +# # assign_value = c[center - idx] +# # circ[r] = assign_value +# # +# # +# # +# # conv_y = circulant(conv_y) +# # +# # center = c.shape[0] // 2 +# # circ = np.zeros((center + 1, center + 1), dtype=int) +# # +# # for r in range(center + 1): +# # idx = np.arange(r, r - center - 1, -1, dtype=int) +# # +# # assign_value = c[center - idx] +# # circ[r] = assign_value +# # +# # return circ +# # +# # +# # +# # +# # conv_y = np.repeat(conv_y, ff_y, axis=1) +# # +# # conv_y = conv_y.reshape(ff_y, ff_y, 2*cols+1) +# # +# # conv_x = np.arange(-cols + 1, cols, 1) +# # conv_x = circulant(conv_x) +# # conv_x = np.tile(conv_x, (ff_y, ff_y)) +# # +# # conv_x = conv_x.reshape(ff_y, ff_y, ff_x) +# # +# # o_fy[center[0] + conv_y, center[1] + conv_x] +# # +# # o_fy_conv_sub = convolution_matrix(o_fy, ff_x, ff_y) +# # o_fy_conv_sub_i = np.linalg.inv(o_fy_conv_sub) +# # +# # +# # +# # +# # def merge(arr): +# # pass +# # return arr +# # +# # o_fy_conv_i = merge(o_fy_conv_sub_i) +# # +# # for r in range(rows): +# # fxy[r, :] = np.fft.fft(o_fy_conv_i[r, :] / rows).astype(type_complex) +# # +# # fxy = np.fft.fftshift(fxy) +# # cx, cy = fxy.shape[0] // 2, fxy.shape[1] // 2 +# # +# # fxy = fxy[cx - fto:cx + fto + 1, cy - fto:cy + fto + 1] +# +# +# else: +# rows, cols = cell.shape +# +# fxy = np.zeros([rows, cols], dtype=type_complex) +# +# if conti_x == 0: # discontinuous in x: inverse rule is applied. +# cell = 1 / cell +# +# for r in range(rows): +# fxy[r, :] = np.fft.fft(cell[r, :] / cols).astype(type_complex) +# +# # if conti_x == 0: +# # cx, cy = fxy.shape[0]//2, fxy.shape[1]//2 +# # fxy = fxy[cx-fto:cx+fto+1, cy-fto:cy+fto+1] +# +# fxy_conv = convolution_matrix(fxy, ff_x, ff_y) +# fxy_conv_i = np.linalg.inv(fxy_conv) +# +# # fxy = np.linalg.inv(fxy+np.eye(2*fto+1)*1E-16) +# +# if conti_y == 0: # discontinuous in y: inverse rule is applied. +# cx, cy = fxy.shape[0]//2, fxy.shape[1]//2 +# +# fxy = fxy[cx-fto:cx+fto+1, cy-fto:cy+fto+1] +# +# fxy = np.linalg.inv(fxy+np.eye(2*fto+1)*1E-16) +# +# for c in range(fxy.shape[1]): +# fxy[:, c] = np.fft.fft(fxy[:, c] / rows).astype(type_complex) +# +# if conti_y == 0: +# fxy = np.linalg.inv(fxy+np.eye(2*fto+1)*1E-16) +# +# fxy = np.fft.fftshift(fxy) +# cx, cy = fxy.shape[0] // 2, fxy.shape[1] // 2 +# +# fxy = fxy[cx - fto:cx + fto + 1, cy - fto:cy + fto + 1] +# +# return fxy + +# +# def convolution_matrix(arr, ff_x, ff_y): +# center = np.array(arr.shape) // 2 +# +# conv_y = np.arange(-ff_y + 1, ff_y, 1) +# conv_y = circulant1(conv_y) +# conv_y = np.repeat(conv_y, ff_x, axis=1) +# conv_y = np.repeat(conv_y, [ff_x] * ff_y, axis=0) +# +# conv_x = np.arange(-ff_x + 1, ff_x, 1) +# conv_x = circulant1(conv_x) +# conv_x = np.tile(conv_x, (ff_y, ff_y)) +# +# return conv_y, conv_x +# +# +# def circulant1(c): +# center = c.shape[0] // 2 +# circ = np.zeros((center + 1, center + 1), dtype=int) +# +# for r in range(center + 1): +# idx = np.arange(r, r - center - 1, -1, dtype=int) +# +# assign_value = c[center - idx] +# circ[r] = assign_value +# +# return circ +# + + +def circulant(fto, device=torch.device('cpu')): + """ + Return circular matrix of indices. + Args: + fto: Fourier order, or number of harmonics, in use. + device: + + Returns: circular matrix of indices. + + """ + ff = 2 * fto + 1 + stride = 2 * fto + # circ = torch.zeros((ff, ff), device=device, dtype=int) + circ = torch.zeros((ff, ff), device=device).type(torch.int) + for r in range(stride + 1): + idx = torch.arange(-r, -r + ff, 1, device=device) + circ[r] = idx + + return circ diff --git a/meent/on_torch/emsolver/rcwa.py b/meent/on_torch/emsolver/rcwa.py index 7015ea9..e0e8636 100644 --- a/meent/on_torch/emsolver/rcwa.py +++ b/meent/on_torch/emsolver/rcwa.py @@ -5,50 +5,78 @@ from ._base import _BaseRCWA from .convolution_matrix import to_conv_mat_raster_discrete, to_conv_mat_raster_continuous, to_conv_mat_vector -from .field_distribution import field_dist_1d_vanilla, field_dist_2d_vanilla, field_plot, field_dist_1d_conical_vanilla, \ - field_dist_1d_vectorized_ji, field_dist_1d_vectorized_kji, field_dist_1d_conical_vectorized_ji, \ - field_dist_1d_conical_vectorized_kji, field_dist_2d_vectorized_ji, field_dist_2d_vectorized_kji +from .field_distribution import field_dist_1d, field_dist_2d, field_plot class RCWATorch(_BaseRCWA): def __init__(self, - n_I=1., - n_II=1., + n_top=1., + n_bot=1., theta=0., phi=0., + psi=None, period=(100., 100.), wavelength=900., ucell=None, ucell_info_list=None, thickness=(0., ), backend=2, - grating_type=0, + grating_type=None, + modeling_type=None, pol=0., - fourier_order=(2, 0), + fto=(0, 0), ucell_materials=None, - algo='TMM', + connecting_algo='TMM', perturbation=1E-20, device='cpu', type_complex=torch.complex128, - fft_type=0, - improve_dft=True, + fourier_type=None, + enhanced_dfs=True, **kwargs, ): - super().__init__(grating_type=grating_type, n_I=n_I, n_II=n_II, theta=theta, phi=phi, pol=pol, - fourier_order=fourier_order, period=period, wavelength=wavelength, - thickness=thickness, algo=algo, perturbation=perturbation, + super().__init__(n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, psi=psi, pol=pol, + fto=fto, period=period, wavelength=wavelength, + thickness=thickness, connecting_algo=connecting_algo, perturbation=perturbation, device=device, type_complex=type_complex) self.ucell = ucell self.ucell_materials = ucell_materials self.ucell_info_list = ucell_info_list + # self.backend = backend + # self.fft_type = fourier_type + # self.improve_dft = enhanced_dfs + # + # self.layer_info_list = [] + self.backend = backend - self.fft_type = fft_type - self.improve_dft = improve_dft + self.modeling_type = modeling_type + self._modeling_type_assigned = None + self.grating_type = grating_type + self._grating_type_assigned = None + self.fourier_type = fourier_type + self.enhanced_dfs = enhanced_dfs + + # grating type setting + if self.grating_type is None: + if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2*np.pi) == 0): + self._grating_type_assigned = 0 + else: + self._grating_type_assigned = 2 + else: + self._grating_type_assigned = self.grating_type - self.layer_info_list = [] + # modeling type setting + if self.modeling_type is None: + if self.ucell_info_list is None: + self._modeling_type_assigned = 0 + elif self.ucell is None: + self._modeling_type_assigned = 1 + else: + raise ValueError('Define "modeling_type" in "call_mee" function.') + else: + self._modeling_type_assigned = self.modeling_type @property def ucell(self): @@ -77,151 +105,186 @@ def ucell(self, ucell): else: raise ValueError - def _solve(self, wavelength, e_conv_all, o_e_conv_all): - self.kx_vector = self.get_kx_vector(wavelength) + @property + def ucell_info_list(self): + return self._ucell_info_list + + @ucell_info_list.setter + def ucell_info_list(self, ucell_info_list): - if self.grating_type == 0: - de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1 = self.solve_1d(wavelength, e_conv_all, o_e_conv_all) - elif self.grating_type == 1: - de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1 = self.solve_1d_conical(wavelength, e_conv_all, o_e_conv_all) - elif self.grating_type == 2: - de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1 = self.solve_2d(wavelength, e_conv_all, o_e_conv_all) + self._modeling_type_assigned = 1 # Vector type + self._ucell_info_list = ucell_info_list + + def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): + + if self._grating_type_assigned == 0: + de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) else: - raise ValueError + de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) - return de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1, self.kx_vector + return de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1 - def solve(self, wavelength, e_conv_all, o_e_conv_all): - de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1, kx_vector = self._solve(wavelength, e_conv_all, o_e_conv_all) + def solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): + de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1 = self._solve(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + # TODO: rayleigh self.rayleigh_r = rayleigh_r self.rayleigh_t = rayleigh_t self.layer_info_list = layer_info_list self.T1 = T1 - self.kx_vector = kx_vector return de_ri, de_ti def conv_solve(self, **kwargs): [setattr(self, k, v) for k, v in kwargs.items()] # needed for optimization - if self.fft_type == 0: - E_conv_all, o_E_conv_all = to_conv_mat_raster_discrete(self.ucell, self.fourier_order[0], self.fourier_order[1], - device=self.device, type_complex=self.type_complex, - improve_dft=self.improve_dft) - elif self.fft_type == 1: - E_conv_all, o_E_conv_all = to_conv_mat_raster_continuous(self.ucell, self.fourier_order[0], self.fourier_order[1], - device=self.device, type_complex=self.type_complex) - elif self.fft_type == 2: - E_conv_all, o_E_conv_all = to_conv_mat_vector(self.ucell_info_list, self.fourier_order[0], - self.fourier_order[1], - type_complex=self.type_complex) + if self._modeling_type_assigned == 0: # Raster + + if self.fourier_type == 0: + epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( + self.ucell, self.fto[0], self.fto[1], device=self.device, type_complex=self.type_complex, + enhanced_dfs=self.enhanced_dfs) + + elif self.fourier_type == 1: + epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_continuous( + self.ucell, self.fto[0], self.fto[1], device=self.device, type_complex=self.type_complex) + else: + raise ValueError("Check 'modeling_type' and 'fourier_type' in 'conv_solve'.") + + elif self._modeling_type_assigned == 1: # Vector + epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_vector( + self.ucell_info_list, self.fto[0], self.fto[1], device=self.device, type_complex=self.type_complex) else: - raise ValueError + raise ValueError("Check 'modeling_type' and 'fourier_type' in 'conv_solve'.") - de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1, kx_vector = self._solve(self.wavelength, E_conv_all, o_E_conv_all) + de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1 = self._solve(self.wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) self.layer_info_list = layer_info_list self.T1 = T1 - self.kx_vector = kx_vector return de_ri, de_ti - def calculate_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): - if self.grating_type == 0: + # TODO: cleaning + + # if self.fourier_type == 0: + # E_conv_all, o_E_conv_all = to_conv_mat_raster_discrete(self.ucell, self.fourier_order[0], self.fourier_order[1], + # device=self.device, type_complex=self.type_complex, + # improve_dft=self.improve_dft) + # elif self.fourier_type == 1: + # E_conv_all, o_E_conv_all = to_conv_mat_raster_continuous(self.ucell, self.fourier_order[0], self.fourier_order[1], + # device=self.device, type_complex=self.type_complex) + # elif self.fourier_type == 2: + # E_conv_all, o_E_conv_all = to_conv_mat_vector(self.ucell_info_list, self.fourier_order[0], + # self.fourier_order[1], + # type_complex=self.type_complex) + # + # else: + # raise ValueError + # + # de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1 = self._solve(self.wavelength, E_conv_all, o_E_conv_all) + # + # self.layer_info_list = layer_info_list + # self.T1 = T1 + # self.kx = kx + # + # return de_ri, de_ti + + def calculate_field(self, res_x=20, res_y=20, res_z=20): + kx, ky = self.get_kx_ky_vector(wavelength=self.wavelength) + + if self._grating_type_assigned == 0: res_y = 1 - if field_algo == 0: - field_cell = field_dist_1d_vanilla(self.wavelength, self.kx_vector, - self.T1, self.layer_info_list, self.period, self.pol, - res_x=res_x, res_y=res_y, res_z=res_z, - device=self.device, type_complex=self.type_complex) - elif field_algo == 1: - field_cell = field_dist_1d_vectorized_ji(self.wavelength, self.kx_vector, self.T1, self.layer_info_list, - self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, - device=self.device, type_complex=self.type_complex, - type_float=self.type_float) - elif field_algo == 2: - field_cell = field_dist_1d_vectorized_kji(self.wavelength, self.kx_vector, self.T1, - self.layer_info_list, self.period, self.pol, - res_x=res_x, res_y=res_y, res_z=res_z, - device=self.device, type_complex=self.type_complex, - type_float=self.type_float) - else: - raise ValueError - elif self.grating_type == 1: + field_cell = field_dist_1d(self.wavelength, kx, self.T1, self.layer_info_list, self.period, self.pol, + res_x=res_x, res_y=res_y, res_z=res_z, device=self.device, type_complex=self.type_complex) + elif self._grating_type_assigned == 1: res_y = 1 - if field_algo == 0: - field_cell = field_dist_1d_conical_vanilla(self.wavelength, self.kx_vector, self.n_I, self.theta, - self.phi, self.T1, self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, device=self.device, - type_complex=self.type_complex) - elif field_algo == 1: - field_cell = field_dist_1d_conical_vectorized_ji(self.wavelength, self.kx_vector, self.n_I, self.theta, - self.phi, self.T1, self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, - device=self.device, - type_complex=self.type_complex, - type_float=self.type_float) - elif field_algo == 2: - field_cell = field_dist_1d_conical_vectorized_kji(self.wavelength, self.kx_vector, self.n_I, self.theta, - self.phi, self.T1, self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, - device=self.device, - type_complex=self.type_complex, - type_float=self.type_float) - else: - raise ValueError - - elif self.grating_type == 2: - if field_algo == 0: - field_cell = field_dist_2d_vanilla(self.wavelength, self.kx_vector, self.n_I, self.theta, self.phi, - self.fourier_order[0], self.fourier_order[1], self.T1, - self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, device=self.device, - type_complex=self.type_complex, type_float=self.type_float) - elif field_algo == 1: - field_cell = field_dist_2d_vectorized_ji(self.wavelength, self.kx_vector, self.n_I, self.theta, - self.phi, self.fourier_order[0], self.fourier_order[1], - self.T1, self.layer_info_list, - self.period, res_x=res_x, res_y=res_y, res_z=res_z, - device=self.device, - type_complex=self.type_complex, type_float=self.type_float) - elif field_algo == 2: - field_cell = field_dist_2d_vectorized_kji(self.wavelength, self.kx_vector, self.n_I, self.theta, - self.phi, self.fourier_order[0], self.fourier_order[1], - self.T1, self.layer_info_list, - self.period, res_x=res_x, res_y=res_y, res_z=res_z, - device=self.device, - type_complex=self.type_complex, type_float=self.type_float) - else: - raise ValueError + field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, + res_x=res_x, res_y=res_y, res_z=res_z, device=self.device, type_complex=self.type_complex) else: - raise ValueError + field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, + res_x=res_x, res_y=res_y, res_z=res_z, device=self.device, type_complex=self.type_complex) return field_cell - def conv_solve_field(self, res_x=20, res_y=20, res_z=20, field_algo=2): + # if self.grating_type == 0: + # res_y = 1 + # if field_algo == 0: + # field_cell = field_dist_1d_vanilla(self.wavelength, self.kx, + # self.T1, self.layer_info_list, self.period, self.pol, + # res_x=res_x, res_y=res_y, res_z=res_z, + # device=self.device, type_complex=self.type_complex) + # elif field_algo == 1: + # field_cell = field_dist_1d_vectorized_ji(self.wavelength, self.kx, self.T1, self.layer_info_list, + # self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, + # device=self.device, type_complex=self.type_complex, + # type_float=self.type_float) + # elif field_algo == 2: + # field_cell = field_dist_1d(self.wavelength, self.kx, self.T1, + # self.layer_info_list, self.period, self.pol, + # res_x=res_x, res_y=res_y, res_z=res_z, + # device=self.device, type_complex=self.type_complex, + # type_float=self.type_float) + # else: + # raise ValueError + # elif self.grating_type == 1: + # res_y = 1 + # if field_algo == 0: + # field_cell = field_dist_1d_conical_vanilla(self.wavelength, self.kx, self.n_top, self.theta, + # self.phi, self.T1, self.layer_info_list, self.period, + # res_x=res_x, res_y=res_y, res_z=res_z, device=self.device, + # type_complex=self.type_complex) + # elif field_algo == 1: + # field_cell = field_dist_1d_conical_vectorized_ji(self.wavelength, self.kx, self.n_top, self.theta, + # self.phi, self.T1, self.layer_info_list, self.period, + # res_x=res_x, res_y=res_y, res_z=res_z, + # device=self.device, + # type_complex=self.type_complex, + # type_float=self.type_float) + # elif field_algo == 2: + # field_cell = field_dist_1d_conical_vectorized_kji(self.wavelength, self.kx, self.n_top, self.theta, + # self.phi, self.T1, self.layer_info_list, self.period, + # res_x=res_x, res_y=res_y, res_z=res_z, + # device=self.device, + # type_complex=self.type_complex, + # type_float=self.type_float) + # else: + # raise ValueError + # + # elif self.grating_type == 2: + # if field_algo == 0: + # field_cell = field_dist_2d_vanilla(self.wavelength, self.kx, self.n_top, self.theta, self.phi, + # self.fourier_order[0], self.fourier_order[1], self.T1, + # self.layer_info_list, self.period, + # res_x=res_x, res_y=res_y, res_z=res_z, device=self.device, + # type_complex=self.type_complex, type_float=self.type_float) + # elif field_algo == 1: + # field_cell = field_dist_2d_vectorized_ji(self.wavelength, self.kx, self.n_top, self.theta, + # self.phi, self.fourier_order[0], self.fourier_order[1], + # self.T1, self.layer_info_list, + # self.period, res_x=res_x, res_y=res_y, res_z=res_z, + # device=self.device, + # type_complex=self.type_complex, type_float=self.type_float) + # elif field_algo == 2: + # field_cell = field_dist_2d(self.wavelength, self.kx, self.n_top, self.theta, + # self.phi, self.fourier_order[0], self.fourier_order[1], + # self.T1, self.layer_info_list, + # self.period, res_x=res_x, res_y=res_y, res_z=res_z, + # device=self.device, + # type_complex=self.type_complex, type_float=self.type_float) + # else: + # raise ValueError + # else: + # raise ValueError + # + # return field_cell + + def conv_solve_field(self, res_x=20, res_y=20, res_z=20, **kwargs): + [setattr(self, k, v) for k, v in kwargs.items()] # needed for optimization + de_ri, de_ti = self.conv_solve() - field_cell = self.calculate_field(res_x, res_y, res_z, field_algo=field_algo) + field_cell = self.calculate_field(res_x, res_y, res_z) return de_ri, de_ti, field_cell def field_plot(self, field_cell): field_plot(field_cell, self.pol) - - def calculate_field_all(self, res_x=20, res_y=20, res_z=20): - t0 = time.time() - field_cell0 = self.calculate_field(res_x=res_x, res_y=res_y, res_z=res_z, field_algo=0) - print('no vector', time.time() - t0) - t0 = time.time() - field_cell1 = self.calculate_field(res_x=res_x, res_y=res_y, res_z=res_z, field_algo=1) - print('ji vector', time.time() - t0) - t0 = time.time() - field_cell2 = self.calculate_field(res_x=res_x, res_y=res_y, res_z=res_z, field_algo=2) - print('kji vector', time.time() - t0) - - print('gap(1-0): ', torch.linalg.norm(field_cell1 - field_cell0)) - print('gap(2-1): ', torch.linalg.norm(field_cell2 - field_cell1)) - print('gap(0-2): ', torch.linalg.norm(field_cell0 - field_cell2)) - - return field_cell0, field_cell1, field_cell2 diff --git a/meent/on_torch/emsolver/smm_util.py b/meent/on_torch/emsolver/smm_util.py index fc41048..96d7584 100644 --- a/meent/on_torch/emsolver/smm_util.py +++ b/meent/on_torch/emsolver/smm_util.py @@ -250,10 +250,10 @@ def initial_conditions(K_inc_vector, theta, normal_vector, pte, ptm, P, Q): :param K_inc_vector: whether it's normalized or not is not important... :param theta: angle of incience :param normal_vector: pointing into z direction - :param pte: te polarization amplitude - :param ptm: tm polarization amplitude + :param pte: te pol amplitude + :param ptm: tm pol amplitude :return: - calculates the incident E field, cinc, and the polarization fro the initial condition vectors + calculates the incident E field, cinc, and the pol fro the initial condition vectors """ # ate -> unit vector holding the out of plane direction of TE # atm -> unit vector holding the out of plane direction of TM diff --git a/meent/on_torch/emsolver/transfer_method.py b/meent/on_torch/emsolver/transfer_method.py index 31e7437..464a58c 100644 --- a/meent/on_torch/emsolver/transfer_method.py +++ b/meent/on_torch/emsolver/transfer_method.py @@ -3,46 +3,88 @@ from .primitives import Eig -def transfer_1d_1(ff, polarization, k0, n_I, n_II, kx_vector, theta, delta_i0, fourier_order, - device='cpu', type_complex=torch.complex128): +def transfer_1d_1(pol, ff_x, kx, n_top, n_bot, device=torch.device('cpu'), type_complex=torch.complex128): - # kx = k0 * (n_top * torch.sin(theta) + fourier_indices * (wavelength / period[0])).type(type_complex) + ff_xy = ff_x * 1 - k_I_z = (k0 ** 2 * n_I ** 2 - kx_vector ** 2) ** 0.5 - k_II_z = (k0 ** 2 * n_II ** 2 - kx_vector ** 2) ** 0.5 + kz_top = (n_top ** 2 - kx ** 2) ** 0.5 + kz_bot = (n_bot ** 2 - kx ** 2) ** 0.5 + kz_top = torch.conj(kz_top) + kz_bot = torch.conj(kz_bot) - k_I_z = torch.conj(k_I_z) - k_II_z = torch.conj(k_II_z) + # Kx = torch.diag(kx) - Kx = torch.diag(kx_vector / k0) + # F = np.eye(ff_xy, dtype=type_complex) + F = torch.eye(ff_xy, device=device, dtype=type_complex) + + if pol == 0: # TE + # Y_I = torch.diag(k_I_z / k0) + # Y_II = torch.diag(k_II_z / k0) + # + # YZ_I = Y_I + # g = 1j * Y_II + # inc_term = 1j * n_top * torch.cos(theta) * delta_i0 - f = torch.eye(ff, device=device, dtype=type_complex) + Kz_bot = torch.diag(kz_bot) - if polarization == 0: # TE - Y_I = torch.diag(k_I_z / k0) - Y_II = torch.diag(k_II_z / k0) + G = 1j * Kz_bot - YZ_I = Y_I - g = 1j * Y_II - inc_term = 1j * n_I * torch.cos(theta) * delta_i0 + elif pol == 1: # TM + # Z_I = torch.diag(k_I_z / (k0 * n_top ** 2)) + # Z_II = torch.diag(k_II_z / (k0 * n_bot ** 2)) + # + # YZ_I = Z_I + # g = 1j * Z_II + # inc_term = 1j * delta_i0 * torch.cos(theta) / n_top - elif polarization == 1: # TM - Z_I = torch.diag(k_I_z / (k0 * n_I ** 2)) - Z_II = torch.diag(k_II_z / (k0 * n_II ** 2)) + Kz_bot = torch.diag(kz_bot / (n_bot ** 2)) - YZ_I = Z_I - g = 1j * Z_II - inc_term = 1j * delta_i0 * torch.cos(theta) / n_I + G = 1j * Kz_bot else: raise ValueError - T = torch.eye(2 * fourier_order[0] + 1, device=device, dtype=type_complex) + T = torch.eye(ff_xy, device=device, dtype=type_complex) + + # return kx, Kx, k_I_z, k_II_z, f, YZ_I, g, inc_term, T + return kz_top, kz_bot, F, G, T + + +def transfer_1d_2(pol, kx, epx_conv, epy_conv, epz_conv_i, device=torch.device('cpu'), type_complex=torch.complex128, perturbation=1E-10): + + Kx = torch.diag(kx) + + if pol == 0: + A = Kx ** 2 - epy_conv - return kx_vector, Kx, k_I_z, k_II_z, f, YZ_I, g, inc_term, T + Eig.perturbation = perturbation + eigenvalues, W = Eig.apply(A) + # eigenvalues += 0j # to get positive square root + q = eigenvalues ** 0.5 + Q = torch.diag(q) + V = W @ Q -def transfer_1d_2(k0, q, d, W, V, f, g, fourier_order, T, device='cpu', type_complex=torch.complex128): + elif pol == 1: + B = Kx @ epz_conv_i @ Kx - torch.eye(epy_conv.shape[0], device=device, dtype=type_complex) + + Eig.perturbation = perturbation + eigenvalues, W = Eig.apply(epx_conv @ B) + + # eigenvalues += 0j # to get positive square root + q = eigenvalues ** 0.5 + + Q = torch.diag(q) + V = torch.linalg.inv(epx_conv) @ W @ Q + + else: + raise ValueError + + return W, V, q + + + +def transfer_1d_2_(k0, q, d, W, V, f, g, fourier_order, T, device=torch.device('cpu'), type_complex=torch.complex128): X = torch.diag(torch.exp(-k0 * q * d)) @@ -61,7 +103,63 @@ def transfer_1d_2(k0, q, d, W, V, f, g, fourier_order, T, device='cpu', type_com return X, f, g, T, a_i, b -def transfer_1d_3(g1, YZ_I, f1, delta_i0, inc_term, T, k_I_z, k0, n_I, n_II, theta, polarization, k_II_z): +def transfer_1d_3(k0, W, V, q, d, F, G, T, device=torch.device('cpu'), type_complex=torch.complex128): + + ff_x = len(q) + + I = torch.eye(ff_x, device=device, dtype=type_complex) + + X = torch.diag(torch.exp(-k0 * q * d)) + + W_i = torch.linalg.inv(W) + V_i = torch.linalg.inv(V) + + A = 0.5 * (W_i @ F + V_i @ G) + B = 0.5 * (W_i @ F - V_i @ G) + + A_i = torch.linalg.inv(A) + + F = W @ (I + X @ B @ A_i @ X) + G = V @ (I - X @ B @ A_i @ X) + T = T @ A_i @ X + + return X, F, G, T, A_i, B + + +def transfer_1d_4(pol, F, G, T, kz_top, kz_bot, theta, n_top, n_bot, device=torch.device('cpu'), type_complex=torch.complex128): + + ff_xy = len(kz_top) + + Kz_top = torch.diag(kz_top) + + delta_i0 = torch.zeros(ff_xy, device=device, dtype=type_complex) + delta_i0[ff_xy // 2] = 1 + + if pol == 0: # TE + inc_term = 1j * n_top * torch.cos(theta) * delta_i0 + T1 = torch.linalg.inv(G + 1j * Kz_top @ F) @ (1j * Kz_top @ delta_i0 + inc_term) + + elif pol == 1: # TM + inc_term = 1j * delta_i0 * torch.cos(theta) / n_top + T1 = torch.linalg.inv(G + 1j * Kz_top / (n_top ** 2) @ F) @ (1j * Kz_top / (n_top ** 2) @ delta_i0 + inc_term) + + # T1 = np.linalg.inv(G + 1j * YZ_I @ F) @ (1j * YZ_I @ delta_i0 + inc_term) + R = F @ T1 - delta_i0 + T = T @ T1 + + de_ri = torch.real(R * torch.conj(R) * kz_top / (n_top * torch.cos(theta))) + + if pol == 0: + de_ti = T * torch.conj(T) * torch.real(kz_bot / (n_top * torch.cos(theta))) + elif pol == 1: + de_ti = T * torch.conj(T) * torch.real(kz_bot / n_bot ** 2) / (torch.cos(theta) / n_top) + else: + raise ValueError + + return de_ri.real, de_ti.real, T1 + + +def transfer_1d_3_(g1, YZ_I, f1, delta_i0, inc_term, T, k_I_z, k0, n_I, n_II, theta, polarization, k_II_z, device=torch.device('cpu'), type_complex=torch.complex128): T1 = torch.linalg.inv(g1 + 1j * YZ_I @ f1) @ (1j * YZ_I @ delta_i0 + inc_term) R = f1 @ T1 - delta_i0 T = T @ T1 @@ -77,7 +175,7 @@ def transfer_1d_3(g1, YZ_I, f1, delta_i0, inc_term, T, k_I_z, k0, n_I, n_II, the return de_ri.real, de_ti.real, T1, R, T -def transfer_1d_conical_1(ff, k0, n_I, n_II, kx_vector, theta, phi, device='cpu', type_complex=torch.complex128): +def transfer_1d_conical_1(ff, k0, n_I, n_II, kx_vector, theta, phi, device=torch.device('cpu'), type_complex=torch.complex128): I = torch.eye(ff, device=device, dtype=type_complex) O = torch.zeros((ff, ff), device=device, dtype=type_complex) @@ -249,8 +347,45 @@ def transfer_1d_conical_3(big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff, delta_i return de_ri.real, de_ti.real, big_T1, (R_s, R_p), (T_s, T_p) -def transfer_2d_1(ff_x, ff_y, ff_xy, k0, n_I, n_II, kx_vector, period, fourier_indices_y, theta, phi, wavelength, - device='cpu', type_complex=torch.complex128): +def transfer_2d_1(ff_x, ff_y, kx, ky, n_top, n_bot, device=torch.device('cpu'), type_complex=torch.complex128): + + ff_xy = ff_x * ff_y + + I = torch.eye(ff_xy, device=device, dtype=type_complex) + O = torch.zeros((ff_xy, ff_xy), device=device, dtype=type_complex) + + kz_top = (n_top ** 2 - kx ** 2 - ky.reshape((-1, 1)) ** 2) ** 0.5 + kz_bot = (n_bot ** 2 - kx ** 2 - ky.reshape((-1, 1)) ** 2) ** 0.5 + + kz_top = kz_top.flatten().conjugate() + kz_bot = kz_bot.flatten().conjugate() + + varphi = torch.arctan(ky.reshape((-1, 1)) / kx).flatten() + + Kz_bot = torch.diag(kz_bot) + + big_F = torch.cat( + [ + torch.cat([I, O], dim=1), + torch.cat([O, 1j * Kz_bot / (n_bot ** 2)], dim=1), + ] + ) + + big_G = torch.cat( + [ + torch.cat([1j * Kz_bot, O], dim=1), + torch.cat([O, I], dim=1), + ] + ) + + big_T = torch.eye(2 * ff_xy, device=device, dtype=type_complex) + + return kz_top, kz_bot, varphi, big_F, big_G, big_T + + + +def transfer_2d_1_(ff_x, ff_y, ff_xy, k0, n_I, n_II, kx_vector, period, fourier_indices_y, theta, phi, wavelength, + device=torch.device('cpu'), type_complex=torch.complex128): I = torch.eye(ff_xy, device=device, dtype=type_complex) O = torch.zeros((ff_xy, ff_xy), device=device, dtype=type_complex) @@ -296,7 +431,70 @@ def transfer_2d_1(ff_x, ff_y, ff_xy, k0, n_I, n_II, kx_vector, period, fourier_i return kx_vector, ky_vector, Kx, Ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T -def transfer_2d_wv(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, device='cpu', type_complex=torch.complex128, +def transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, device=torch.device('cpu'), type_complex=torch.complex128, + perturbation=1E-10): + + ff_x = len(kx) + ff_y = len(ky) + ff_xy = ff_x * ff_y + + # I = np.eye(ff_y * ff_x, dtype=type_complex) + I = torch.eye(ff_xy, device=device, dtype=type_complex) + + # Kx = torch.diag(torch.tile(kx, ff_y).flatten()) + # Ky = torch.diag(torch.tile(ky.reshape((-1, 1)), ff_x).flatten()) + + Kx = torch.diag(kx.tile(ff_y).flatten()) + Ky = torch.diag(ky.reshape((-1, 1)).tile(ff_x).flatten()) + + B = Kx @ epz_conv_i @ Kx - I + D = Ky @ epz_conv_i @ Ky - I + + # Omega2_LR = np.block( + # [ + # [Ky ** 2 + B @ epx_conv, Kx @ (epz_conv_i @ Ky @ epy_conv - Ky)], + # [Ky @ (epz_conv_i @ Kx @ epx_conv - Kx), Kx ** 2 + D @ epy_conv] + # ]) + + Omega2_LR = torch.cat( + [ + torch.cat([Ky ** 2 + B @ epx_conv, Kx @ (epz_conv_i @ Ky @ epy_conv - Ky)], dim=1), + torch.cat([Ky @ (epz_conv_i @ Kx @ epx_conv - Kx), Kx ** 2 + D @ epy_conv], dim=1) + ]) + + Eig.perturbation = perturbation + eigenvalues, W = Eig.apply(Omega2_LR) + q = eigenvalues ** 0.5 + Q = torch.diag(q) + Q_i = torch.linalg.inv(Q) + Omega_R = torch.cat( + [ + torch.cat([-Kx @ Ky, Kx ** 2 - epy_conv], dim=1), + torch.cat([epx_conv - Ky ** 2, Ky @ Kx], dim=1) + ] + ) + V = Omega_R @ W @ Q_i + + # eigenvalues, W = np.linalg.eig(Omega2_LR) + # eigenvalues += 0j # to get positive square root + # q = eigenvalues ** 0.5 + # + # Q = np.diag(q) + # Q_i = np.linalg.inv(Q) + # + # Omega_R = np.block( + # [ + # [-Kx @ Ky, Kx ** 2 - epy_conv], + # [epx_conv - Ky ** 2, Ky @ Kx] + # ] + # ) + # + # V = Omega_R @ W @ Q_i + + return W, V, q + + +def transfer_2d_wv_(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, device=torch.device('cpu'), type_complex=torch.complex128, perturbation=1E-10): I = torch.eye(ff_xy, device=device, dtype=type_complex) @@ -325,21 +523,25 @@ def transfer_2d_wv(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, device='cpu', ty return W, V, q -def transfer_2d_2(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, device='cpu', - type_complex=torch.complex128): +# def transfer_2d_2_(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, device=torch.device('cpu'), type_complex=torch.complex128): +def transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, device=torch.device('cpu'), type_complex=torch.complex128): + ff_xy = len(q)//2 + + I = torch.eye(ff_xy, device=device, dtype=type_complex) + O = torch.zeros((ff_xy, ff_xy), device=device, dtype=type_complex) - q1 = q[:center] - q2 = q[center:] + q1 = q[:ff_xy] + q2 = q[ff_xy:] - W_11 = W[:center, :center] - W_12 = W[:center, center:] - W_21 = W[center:, :center] - W_22 = W[center:, center:] + W_11 = W[:ff_xy, :ff_xy] + W_12 = W[:ff_xy, ff_xy:] + W_21 = W[ff_xy:, :ff_xy] + W_22 = W[ff_xy:, ff_xy:] - V_11 = V[:center, :center] - V_12 = V[:center, center:] - V_21 = V[center:, :center] - V_22 = V[center:, center:] + V_11 = V[:ff_xy, :ff_xy] + V_12 = V[:ff_xy, ff_xy:] + V_21 = V[ff_xy:, :ff_xy] + V_22 = V[ff_xy:, ff_xy:] X_1 = torch.diag(torch.exp(-k0 * q1 * d)) X_2 = torch.diag(torch.exp(-k0 * q2 * d)) @@ -384,30 +586,40 @@ def transfer_2d_2(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, dev big_T = big_T @ big_A_i @ big_X - return big_X, big_F, big_G, big_T, big_A_i, big_B, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22 + return big_X, big_F, big_G, big_T, big_A_i, big_B + + # return big_X, big_F, big_G, big_T, big_A_i, big_B, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22 + + +def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_top, n_bot, + device=torch.device('cpu'), type_complex=torch.complex128): + ff_xy = len(big_F) // 2 + + Kz_top = torch.diag(kz_top) -def transfer_2d_3(center, big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff_xy, delta_i0, k_I_z, k0, n_I, n_II, k_II_z, - device='cpu', type_complex=torch.complex128): I = torch.eye(ff_xy, device=device, dtype=type_complex) O = torch.zeros((ff_xy, ff_xy), device=device, dtype=type_complex) - big_F_11 = big_F[:center, :center] - big_F_12 = big_F[:center, center:] - big_F_21 = big_F[center:, :center] - big_F_22 = big_F[center:, center:] + big_F_11 = big_F[:ff_xy, :ff_xy] + big_F_12 = big_F[:ff_xy, ff_xy:] + big_F_21 = big_F[ff_xy:, :ff_xy] + big_F_22 = big_F[ff_xy:, ff_xy:] + + big_G_11 = big_G[:ff_xy, :ff_xy] + big_G_12 = big_G[:ff_xy, ff_xy:] + big_G_21 = big_G[ff_xy:, :ff_xy] + big_G_22 = big_G[ff_xy:, ff_xy:] - big_G_11 = big_G[:center, :center] - big_G_12 = big_G[:center, center:] - big_G_21 = big_G[center:, :center] - big_G_22 = big_G[center:, center:] + delta_i0 = torch.zeros((ff_xy, 1), device=device, dtype=type_complex) + delta_i0[ff_xy // 2, 0] = 1 # Final Equation in form of AX=B final_A = torch.cat( [ torch.cat([I, O, -big_F_11, -big_F_12], dim=1), - torch.cat([O, -1j * Z_I, -big_F_21, -big_F_22], dim=1), - torch.cat([-1j * Y_I, O, -big_G_11, -big_G_12], dim=1), + torch.cat([O, -1j * Kz_top / (n_top ** 2), -big_F_21, -big_F_22], dim=1), + torch.cat([-1j * Kz_top, O, -big_G_11, -big_G_12], dim=1), torch.cat([O, I, -big_G_21, -big_G_22], dim=1), ] ) @@ -416,8 +628,8 @@ def transfer_2d_3(center, big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff_xy, delt [ torch.cat([-torch.sin(psi) * delta_i0], dim=1), torch.cat([-torch.cos(psi) * torch.cos(theta) * delta_i0], dim=1), - torch.cat([-1j * torch.sin(psi) * n_I * torch.cos(theta) * delta_i0], dim=1), - torch.cat([1j * n_I * torch.cos(psi) * delta_i0], dim=1), + torch.cat([-1j * torch.sin(psi) * n_top * torch.cos(theta) * delta_i0], dim=1), + torch.cat([1j * n_top * torch.cos(psi) * delta_i0], dim=1), ] ) @@ -432,10 +644,10 @@ def transfer_2d_3(center, big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff_xy, delt T_s = big_T[:ff_xy, :].flatten() T_p = big_T[ff_xy:, :].flatten() - de_ri = R_s * torch.conj(R_s) * torch.real(k_I_z / (k0 * n_I * torch.cos(theta))) \ - + R_p * torch.conj(R_p) * torch.real((k_I_z / n_I ** 2) / (k0 * n_I * torch.cos(theta))) + de_ri = R_s * torch.conj(R_s) * torch.real(kz_top / (n_top * torch.cos(theta))) \ + + R_p * torch.conj(R_p) * torch.real((kz_top / n_top ** 2) / (n_top * torch.cos(theta))) - de_ti = T_s * torch.conj(T_s) * torch.real(k_II_z / (k0 * n_I * torch.cos(theta))) \ - + T_p * torch.conj(T_p) * torch.real((k_II_z / n_II ** 2) / (k0 * n_I * torch.cos(theta))) + de_ti = T_s * torch.conj(T_s) * torch.real(kz_bot / (n_top * torch.cos(theta))) \ + + T_p * torch.conj(T_p) * torch.real((kz_bot / n_bot ** 2) / (n_top * torch.cos(theta))) return de_ri.real, de_ti.real, big_T1, (R_s, R_p), (T_s, T_p) From 0a588dd2c107172c6665e6dd982f9dea7e0d3e80 Mon Sep 17 00:00:00 2001 From: yonghakim Date: Wed, 7 Aug 2024 13:13:13 +0900 Subject: [PATCH 10/15] Updated JAXMeent and TorchMeent. --- QA/rcwa_backend_consistency.py | 228 ++++--- benchmarks/reti_meent_2D.py | 39 +- meent/on_jax/emsolver/_base.py | 29 +- meent/on_jax/emsolver/field_distribution.py | 21 +- meent/on_jax/emsolver/rcwa.py | 156 +---- meent/on_jax/emsolver/transfer_method.py | 568 ++---------------- meent/on_jax/modeler/__init__.py | 14 +- meent/on_jax/modeler/modeling.py | 277 ++------- meent/on_jax/optimizer/optimizer.py | 39 +- meent/on_numpy/emsolver/field_distribution.py | 17 +- meent/on_numpy/emsolver/rcwa.py | 25 +- meent/on_numpy/modeler/modeling.py | 45 +- meent/on_torch/emsolver/_base.py | 7 +- meent/on_torch/emsolver/field_distribution.py | 28 +- meent/on_torch/emsolver/fourier_analysis.py | 6 +- meent/on_torch/emsolver/rcwa.py | 118 +--- meent/on_torch/emsolver/transfer_method.py | 8 +- meent/on_torch/modeler/modeling.py | 111 ++-- setup.py | 2 +- 19 files changed, 487 insertions(+), 1251 deletions(-) diff --git a/QA/rcwa_backend_consistency.py b/QA/rcwa_backend_consistency.py index c57707d..e819f3c 100644 --- a/QA/rcwa_backend_consistency.py +++ b/QA/rcwa_backend_consistency.py @@ -1,96 +1,136 @@ import numpy as np -from meent.main import call_mee - - -grating_type = 2 # 0: 1D, 1: 1D conical, 2:2D. -pol = 0 # 0: TE, 1: TM - -n_I = 1 # n_incidence -n_II = 1 # n_transmission - -theta = 20 * np.pi / 180 -phi = 30 * np.pi / 180 -psi = 0 * np.pi / 180 if pol else 90 * np.pi / 180 - -wavelength = 900 - -thickness = [500] - -mode_options = {0: 'numpy', 1: 'JAX', 2: 'Torch', } - -if grating_type in (0, 1): - period = [700] - fourier_order = 20 - - ucell = np.array( - [ - [ - [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, ], - ], - [ - [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, ], - ], - ] - ) * 3.5 + 1 -else: - period = [700, 700] - fourier_order = [9, 3] - - ucell = np.array( - [ - [ - [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, ], - [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, ], - ], - [ - [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, ], - [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, ], - ], - ] - ) * 3.5 + 1 - -type_complex = 0 -resolution = (50, 50, 50) - -# Numpy -mee = call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, - thickness=thickness, ) - -de_ri_numpy, de_ti_numpy = mee.conv_solve() -field_cell_numpy = mee.calculate_field(res_x=resolution[0], res_y=resolution[1], res_z=resolution[2]) - -# JAX -mee = call_mee(backend=1, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, - thickness=thickness, type_complex=type_complex) - -de_ri_jax, de_ti_jax = mee.conv_solve() -field_cell_jax = mee.calculate_field(res_x=resolution[0], res_y=resolution[1], res_z=resolution[2]) - -# Torch -mee = call_mee(backend=2, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, - thickness=thickness, type_complex=type_complex) - -de_ri_torch, de_ti_torch = mee.conv_solve() -de_ri_torch, de_ti_torch = de_ri_torch.numpy(), de_ti_torch.numpy() - -field_cell_torch = mee.calculate_field(res_x=resolution[0], res_y=resolution[1], res_z=resolution[2]) -field_cell_torch = field_cell_torch.numpy() - -print('diffraction efficiency, reflectance') -print('normalized norm(numpy - jax): ', np.linalg.norm(de_ri_numpy - de_ri_jax) / de_ri_numpy.size) -print('normalized norm(jax - torch): ', np.linalg.norm(de_ri_jax - de_ri_torch) / de_ri_numpy.size) -print('normalized norm(torch - numpy): ', np.linalg.norm(de_ri_torch - de_ri_numpy) / de_ri_numpy.size) - -print('diffraction efficiency, transmittance') -print('normalized norm(numpy - jax): ', np.linalg.norm(de_ti_numpy - de_ti_jax) / de_ti_numpy.size) -print('normalized norm(jax - torch): ', np.linalg.norm(de_ti_jax - de_ti_torch) / de_ti_numpy.size) -print('normalized norm(torch - numpy): ', np.linalg.norm(de_ti_torch - de_ti_numpy) / de_ti_numpy.size) - -print('field distribution') -print('normalized norm(numpy - jax): ', np.linalg.norm(field_cell_numpy - field_cell_jax) / field_cell_numpy.size) -print('normalized norm(jax - torch): ', np.linalg.norm(field_cell_jax - field_cell_torch) / field_cell_numpy.size) -print('normalized norm(torch - numpy): ', np.linalg.norm(field_cell_torch - field_cell_numpy) / field_cell_numpy.size) +import meent + + +def consistency_check(option): + + mee = meent.call_mee(backend=0, perturbation=1E-30, **option) # NumPy + de_ri_numpy, de_ti_numpy = mee.conv_solve() + field_cell_numpy = mee.calculate_field(res_z=50, res_x=50) + + mee = meent.call_mee(backend=1, perturbation=1E-30, **option) # JAX + de_ri_jax, de_ti_jax = mee.conv_solve() + field_cell_jax = mee.calculate_field(res_z=50, res_x=50) + + mee = meent.call_mee(backend=2, perturbation=1E-30, **option) # PyTorch + de_ri_torch, de_ti_torch = mee.conv_solve() + field_cell_torch = mee.calculate_field(res_z=50, res_x=50) + de_ri_torch, de_ti_torch = de_ri_torch.numpy(), de_ti_torch.numpy() + field_cell_torch = field_cell_torch.numpy() + + digit = 20 + + res1 = [(np.linalg.norm(de_ri_numpy - de_ri_jax) / de_ri_numpy.size).round(digit), + (np.linalg.norm(de_ri_jax - de_ri_torch) / de_ri_numpy.size).round(digit), + (np.linalg.norm(de_ri_torch - de_ri_numpy) / de_ri_numpy.size).round(digit),] + res2 = [(np.linalg.norm(de_ti_numpy - de_ti_jax) / de_ti_numpy.size).round(digit), + (np.linalg.norm(de_ti_jax - de_ti_torch) / de_ti_numpy.size).round(digit), + (np.linalg.norm(de_ti_torch - de_ti_numpy) / de_ti_numpy.size).round(digit),] + res3 = [(np.linalg.norm(field_cell_numpy - field_cell_jax) / field_cell_numpy.size).round(digit), + (np.linalg.norm(field_cell_jax - field_cell_torch) / field_cell_numpy.size).round(digit), + (np.linalg.norm(field_cell_torch - field_cell_numpy) / field_cell_numpy.size).round(digit),] + + print('Refle', res1) + print('Trans', res2) + print('Field', res3) + + +def consistency_check_vector(option, instructions): + + mee = meent.call_mee(backend=0, perturbation=1E-30, **option) # NumPy + mee.modeling_vector_instruction(instructions) + + de_ri_numpy, de_ti_numpy = mee.conv_solve() + field_cell_numpy = mee.calculate_field(res_z=50, res_x=50) + + mee = meent.call_mee(backend=1, perturbation=1E-30, **option) # JAX + mee.modeling_vector_instruction(instructions) + de_ri_jax, de_ti_jax = mee.conv_solve() + field_cell_jax = mee.calculate_field(res_z=50, res_x=50) + + mee = meent.call_mee(backend=2, perturbation=1E-30, **option) # PyTorch + mee.modeling_vector_instruction(instructions) + de_ri_torch, de_ti_torch = mee.conv_solve() + field_cell_torch = mee.calculate_field(res_z=50, res_x=50) + de_ri_torch, de_ti_torch = de_ri_torch.numpy(), de_ti_torch.numpy() + field_cell_torch = field_cell_torch.numpy() + + digit = 20 + + res1 = [(np.linalg.norm(de_ri_numpy - de_ri_jax) / de_ri_numpy.size).round(digit), + (np.linalg.norm(de_ri_jax - de_ri_torch) / de_ri_numpy.size).round(digit), + (np.linalg.norm(de_ri_torch - de_ri_numpy) / de_ri_numpy.size).round(digit),] + res2 = [(np.linalg.norm(de_ti_numpy - de_ti_jax) / de_ti_numpy.size).round(digit), + (np.linalg.norm(de_ti_jax - de_ti_torch) / de_ti_numpy.size).round(digit), + (np.linalg.norm(de_ti_torch - de_ti_numpy) / de_ti_numpy.size).round(digit),] + res3 = [(np.linalg.norm(field_cell_numpy - field_cell_jax) / field_cell_numpy.size).round(digit), + (np.linalg.norm(field_cell_jax - field_cell_torch) / field_cell_numpy.size).round(digit), + (np.linalg.norm(field_cell_torch - field_cell_numpy) / field_cell_numpy.size).round(digit),] + + print('Refle', res1) + print('Trans', res2) + print('Field', res3) + + +if __name__ == '__main__': + option1 = {'pol': 0, 'n_top': 2, 'n_bot': 1, 'theta': 12 * np.pi / 180, 'phi': 0 * np.pi / 180, 'fto': 0, + 'period': [770], 'wavelength': 777, 'thickness': [100], 'fourier_type': 0, + 'ucell': np.array([[[3, 3, 3, 3, 3, 1, 1, 1, 1, 1]], ])} + + option2 = {'pol': 1, 'n_top': 1, 'n_bot': 1.3, 'theta': 0 * np.pi / 180, 'phi': 0 * np.pi / 180, 'fto': 40, + 'period': [2000], 'wavelength': 400, 'thickness': [1000], 'fourier_type': 1, + 'ucell': np.array([[[3, 3, 3.3, 3, 3, 4, 1, 1, 1, 1.2, 1.1, 3, 2, 1.1]], ])} + + option3 = {'psi': 40/180*np.pi, 'n_top': 1, 'n_bot': 1, 'theta': 0 * np.pi / 180, 'phi': 12 * np.pi / 180, + 'fto': 1, + 'period': [200], 'wavelength': 1000, 'thickness': [100], 'fourier_type': 0, 'enhanced_dfs': False, + 'ucell': np.array([[[3, 3, 3.3, 3, 3, 4, 1, 1, 1, 1.2, 1.1, 3, 2, 1.1]], ])} + + option4 = {'psi': 10/180*np.pi, 'n_top': 1, 'n_bot': 1, 'theta': 0 * np.pi / 180, 'phi': 12 * np.pi / 180, + 'fto': [10, 10], + 'period': [200, 600], 'wavelength': 1000, 'thickness': [100, 111, 222, 102, 44], 'fourier_type': 0, + 'enhanced_dfs': True, + 'ucell': np.random.rand(5, 20, 20)*3+1, } + + option5 = {'pol': 0, 'n_top': 2, 'n_bot': 1, 'theta': 12 * np.pi / 180, 'phi': 0 * np.pi / 180, 'fto': 0, + 'period': [770], 'wavelength': 777, 'thickness': [100], 'fourier_type': 0, + 'ucell': np.array([[[3, 3, 3, 3, 3, 1, 1, 1, 1, 1]], ])} + + instructions5 = [ + # layer 1 + [1,[ + ['rectangle', 0+240, 120+240, 160, 80, 4, 0, 0, 0], # obj 1 + ['rectangle', 0+240, -120+240, 160, 80, 4, 0, 0, 0], # obj 2 + ['rectangle', 120+240, 0+240, 80, 160, 4, 0, 0, 0], # obj 3 + ['rectangle', -120+240, 0+240, 80, 160, 4, 0, 0, 0], # obj 4 + ], ], + ] + + option6 = {'pol': 0, 'n_top': 2, 'n_bot': 1, 'theta': 12 * np.pi / 180, 'phi': 0 * np.pi / 180, 'fto': [5,5], + 'period': [770], 'wavelength': 777, 'thickness': [100, 333], 'fourier_type': 0, + 'ucell': np.array([[[3, 3, 3, 3, 3, 1, 1, 1, 1, 1]], ])} + + instructions6 = [ + # layer 1 + [3 - 1j, [ + ['rectangle', 0+1000, 410+1000, 160, 80, 4, 0, 0, 0], # obj 1 + ['ellipse', 0+1000, -10+1000, 160, 80, 4, 1, 20, 20], # obj 2 + ['rectangle', 120+1000, 500+1000, 80, 160, 4+0.3j, 1.1, 5, 5], # obj 3 + ['ellipse', -400+1000, -700+1000, 80, 160, 4, 0.4, 20, 20], # obj 4 + ], ], + # layer 2 + [3.1, [ + ['rectangle', 0+240, 120+240, 160, 80, 4, 0.4, 5, 5], # obj 1 + ['ellipse', 0+240, -120+240, 160, 80, 4, 0.1, 20, 20], # obj 2 + ['ellipse', 120+240, 0+240, 80, 160, 4, 1, 20, 20], # obj 3 + ['rectangle', -120+240, 0+240, 80, 160, 4, 2, 5, 5], # obj 4 + ], ], + ] + consistency_check(option1) + consistency_check(option2) + consistency_check(option3) + consistency_check(option4) + + consistency_check_vector(option5, instructions5) + consistency_check_vector(option6, instructions6) diff --git a/benchmarks/reti_meent_2D.py b/benchmarks/reti_meent_2D.py index 3aeb075..32a3e4f 100644 --- a/benchmarks/reti_meent_2D.py +++ b/benchmarks/reti_meent_2D.py @@ -54,8 +54,8 @@ def test2d_1(plot_figure=False): option['ucell'] = ucell - print('reti de_ri', np.array(reti_de_ri)) - print('reti de_ti', np.array(reti_de_ti)) + print('reti de_ri', np.array(reti_de_ri).flatten()) + print('reti de_ti', np.array(reti_de_ti).flatten()) res_z = 11 @@ -271,10 +271,8 @@ def test2d_2(plot_figure=False): # reti = Reticolo() # reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, res3_npts=res3_npts) - print('reti de_ri', np.array(reti_de_ri)) - print('reti de_ti', np.array(reti_de_ti)) - # print('reti de_ri', np.array(reti_de_ri).flatten()) - # print('reti de_ti', np.array(reti_de_ti).flatten()) + print('reti de_ri', np.array(reti_de_ri).flatten()) + print('reti de_ti', np.array(reti_de_ti).flatten()) res_z = 11 @@ -431,10 +429,8 @@ def test2d_3(plot_figure=False): # reti = Reticolo() # reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, res3_npts=res3_npts) - print('reti de_ri', np.array(reti_de_ri)) - print('reti de_ti', np.array(reti_de_ti)) - # print('reti de_ri', np.array(reti_de_ri).flatten()) - # print('reti de_ti', np.array(reti_de_ti).flatten()) + print('reti de_ri', np.array(reti_de_ri).flatten()) + print('reti de_ti', np.array(reti_de_ti).flatten()) res_z = 11 @@ -577,10 +573,10 @@ def test2d_4(plot_figure=False): # reti = Reticolo() # reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, res3_npts=res3_npts) - print('reti de_ri', np.array(reti_de_ri)) - print('reti de_ti', np.array(reti_de_ti)) - # print('reti de_ri', np.array(reti_de_ri).flatten()) - # print('reti de_ti', np.array(reti_de_ti).flatten()) + # print('reti de_ri', np.array(reti_de_ri)) + # print('reti de_ti', np.array(reti_de_ti)) + print('reti de_ri', np.array(reti_de_ri).flatten()) + print('reti de_ti', np.array(reti_de_ti).flatten()) res_z = 11 @@ -724,10 +720,10 @@ def test2d_5(plot_figure=False): # reti = Reticolo() # reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, res3_npts=res3_npts) - print('reti de_ri', np.array(reti_de_ri)) - print('reti de_ti', np.array(reti_de_ti)) - # print('reti de_ri', np.array(reti_de_ri).flatten()) - # print('reti de_ti', np.array(reti_de_ti).flatten()) + # print('reti de_ri', np.array(reti_de_ri)) + # print('reti de_ti', np.array(reti_de_ti)) + print('reti de_ri', np.array(reti_de_ri).flatten()) + print('reti de_ti', np.array(reti_de_ti).flatten()) res_z = 11 @@ -828,8 +824,11 @@ def test2d_6(plot_figure=False): [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell] = reti.eng.reti_2d(6, nout=5) reti_de_ri, reti_de_ti, c, d, r_field_cell = top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, \ bottom_tran_info.efficiency, field_cell - print('reti de_ri', np.array(reti_de_ri)) - print('reti de_ti', np.array(reti_de_ti)) + # print('reti de_ri', np.array(reti_de_ri)) + # print('reti de_ti', np.array(reti_de_ti)) + print('reti de_ri', np.array(reti_de_ri).flatten()) + print('reti de_ti', np.array(reti_de_ti).flatten()) + r_field_cell = np.moveaxis(r_field_cell, 2, 1) r_field_cell = r_field_cell[res_z:-res_z] r_field_cell = np.flip(r_field_cell, 0) diff --git a/meent/on_jax/emsolver/_base.py b/meent/on_jax/emsolver/_base.py index 7dc0849..4f1c7cd 100644 --- a/meent/on_jax/emsolver/_base.py +++ b/meent/on_jax/emsolver/_base.py @@ -10,6 +10,17 @@ transfer_2d_1, transfer_2d_2, transfer_2d_3, transfer_2d_4) +def jax_device_set(func): + @functools.wraps(func) + def wrap(*args, **kwargs): + self, *_ = args + with jax.default_device(self.device[0]): + res = func(*args, **kwargs) + return res + + return wrap + + class _BaseRCWA: def __init__(self, n_top=1., n_bot=1., theta=0., phi=0., psi=None, pol=0., fto=(2, 0), @@ -214,15 +225,15 @@ def thickness(self, thickness): else: raise ValueError - @staticmethod - def jax_device_set(func): - @functools.wraps(func) - def wrap(*args, **kwargs): - self, *_ = args - with jax.default_device(self.device[0]): - res = func(*args, **kwargs) - return res - return wrap + # @staticmethod + # def jax_device_set(func): + # @functools.wraps(func) + # def wrap(*args, **kwargs): + # self, *_ = args + # with jax.default_device(self.device[0]): + # res = func(*args, **kwargs) + # return res + # return wrap @jax_device_set def get_kx_ky_vector(self, wavelength): diff --git a/meent/on_jax/emsolver/field_distribution.py b/meent/on_jax/emsolver/field_distribution.py index d2e949d..72f1ff6 100644 --- a/meent/on_jax/emsolver/field_distribution.py +++ b/meent/on_jax/emsolver/field_distribution.py @@ -8,7 +8,7 @@ def field_dist_1d(wavelength, kx, T1, layer_info_list, period, pol, res_x=20, re type_complex=jnp.complex128): k0 = 2 * jnp.pi / wavelength - Kx = jnp.diag(kx / k0) + Kx = jnp.diag(kx) field_cell = jnp.zeros((res_z * len(layer_info_list), res_y, res_x, 3), dtype=type_complex) @@ -26,7 +26,7 @@ def field_dist_1d(wavelength, kx, T1, layer_info_list, period, pol, res_x=20, re z_1d = jnp.linspace(0, res_z, res_z).reshape((-1, 1, 1)) / res_z * d My = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - Mx = V @ (diag_exp_batch(-k0 * Q * z_1d) @ -c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + Mx = V @ (-diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) if pol == 0: Mz = -1j * Kx @ My @@ -118,11 +118,20 @@ def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, Sy = W_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + W_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Ux = -V_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - - V_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + # Ux = -V_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + # - V_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + # Uy = -V_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + # - V_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + + Ux = V_11 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch( + k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + + V_12 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch( + k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch( + k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch( + k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Uy = -V_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - - V_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) Sz = -1j * epz_conv_i @ (Kx @ Uy - Ky @ Ux) Uz = -1j * (Kx @ Sy - Ky @ Sx) diff --git a/meent/on_jax/emsolver/rcwa.py b/meent/on_jax/emsolver/rcwa.py index 3ebd6ea..2937c80 100644 --- a/meent/on_jax/emsolver/rcwa.py +++ b/meent/on_jax/emsolver/rcwa.py @@ -6,7 +6,7 @@ import numpy as np import jax.numpy as jnp -from ._base import _BaseRCWA +from ._base import _BaseRCWA, jax_device_set from .convolution_matrix import to_conv_mat_raster_discrete, to_conv_mat_raster_continuous, to_conv_mat_vector from .field_distribution import field_dist_1d, field_dist_2d, field_plot @@ -57,10 +57,11 @@ def __init__(self, # grating type setting if self.grating_type is None: - if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0): + # TODO: JAX jit + if (isinstance(self._ucell, jnp.ndarray) and self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0): self._grating_type_assigned = 0 else: - self._grating_type_assigned = 2 + self._grating_type_assigned = 1 else: self._grating_type_assigned = self.grating_type @@ -70,6 +71,7 @@ def __init__(self, self._modeling_type_assigned = 0 elif self.ucell is None: self._modeling_type_assigned = 1 + self._grating_type_assigned = 1 else: raise ValueError('Define "modeling_type" in "call_mee" function.') else: @@ -130,6 +132,14 @@ def ucell(self, ucell): else: raise ValueError + if self._ucell is not None: + self._modeling_type_assigned = 0 # Raster type + + if self._ucell.shape[1] == 1: + self._grating_type_assigned = 0 + else: + self._grating_type_assigned = 1 + @property def ucell_info_list(self): return self._ucell_info_list @@ -137,8 +147,9 @@ def ucell_info_list(self): @ucell_info_list.setter def ucell_info_list(self, ucell_info_list): self._ucell_info_list = ucell_info_list - if ucell_info_list is not None: # TODO: apply for numpy + if ucell_info_list is not None: self._modeling_type_assigned = 1 # Vector type + self._grating_type_assigned = 1 def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): @@ -149,21 +160,8 @@ def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): return de_ri, de_ti, layer_info_list, T1 - def _solve_old(self, wavelength, e_conv_all, o_e_conv_all): - self.kx_vector = self.get_kx_vector(wavelength) - - if self.grating_type == 0: - de_ri, de_ti, layer_info_list, T1 = self.solve_1d(wavelength, e_conv_all, o_e_conv_all) - elif self.grating_type == 1: - de_ri, de_ti, layer_info_list, T1 = self.solve_1d_conical(wavelength, e_conv_all, o_e_conv_all) - elif self.grating_type == 2: - de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, e_conv_all, o_e_conv_all) - else: - raise ValueError - - return de_ri, de_ti, layer_info_list, T1, self.kx_vector - - @_BaseRCWA.jax_device_set + # @_BaseRCWA.jax_device_set + @jax_device_set def solve(self, wavelength, e_conv_all, o_e_conv_all): de_ri, de_ti, layer_info_list, T1, kx_vector = jax.jit(self._solve)(wavelength, e_conv_all, o_e_conv_all) @@ -173,24 +171,6 @@ def solve(self, wavelength, e_conv_all, o_e_conv_all): return de_ri, de_ti - def _conv_solve_old(self): - - if self.fft_type == 0: - E_conv_all, o_E_conv_all = to_conv_mat_raster_discrete(self.ucell, self.fourier_order[0], self.fourier_order[1], - type_complex=self.type_complex, enhanced_dfs=self.improve_dft) - elif self.fft_type == 1: - E_conv_all, o_E_conv_all = to_conv_mat_raster_continuous(self.ucell, self.fourier_order[0], self.fourier_order[1], - type_complex=self.type_complex) - elif self.fft_type == 2: - E_conv_all, o_E_conv_all = to_conv_mat_vector(self.ucell_info_list, - self.fourier_order[0], self.fourier_order[1], - type_complex=self.type_complex) - else: - raise ValueError - - de_ri, de_ti, layer_info_list, T1, kx_vector = self._solve(self.wavelength, E_conv_all, o_E_conv_all) - return de_ri, de_ti, layer_info_list, T1, kx_vector - def _conv_solve(self, **kwargs): if self._modeling_type_assigned == 0: # Raster @@ -236,7 +216,9 @@ def _conv_solve(self, **kwargs): def _conv_solve_jit(self): return self._conv_solve() - @_BaseRCWA.jax_device_set + # TODO + # @_BaseRCWA.jax_device_set + @jax_device_set def conv_solve(self, **kwargs): [setattr(self, k, v) for k, v in kwargs.items()] # needed for optimization if self.fourier_type == 1: @@ -252,7 +234,9 @@ def conv_solve(self, **kwargs): return de_ri, de_ti - @_BaseRCWA.jax_device_set + # TODO + # @_BaseRCWA.jax_device_set + @jax_device_set def calculate_field(self, res_x=20, res_y=20, res_z=20): kx, ky = self.get_kx_ky_vector(wavelength=self.wavelength) @@ -261,106 +245,17 @@ def calculate_field(self, res_x=20, res_y=20, res_z=20): res_y = 1 field_cell = field_dist_1d(self.wavelength, kx, self.T1, self.layer_info_list, self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) - - elif self._grating_type_assigned == 1: - res_y = 1 - field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) else: field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) return field_cell - @_BaseRCWA.jax_device_set - def calculate_field_old(self, res_x=20, res_y=20, res_z=20, field_algo=2): - - if self.grating_type == 0: - res_y = 1 - if field_algo == 0: - field_cell = field_dist_1d_vanilla(self.wavelength, self.kx_vector, - self.T1, self.layer_info_list, self.period, self.pol, - res_x=res_x, res_y=res_y, res_z=res_z, - type_complex=self.type_complex) - elif field_algo == 1: - field_cell = field_dist_1d_vectorized_ji(self.wavelength, self.kx_vector, self.T1, self.layer_info_list, - self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, - type_complex=self.type_complex, type_float=self.type_float) - elif field_algo == 2: - field_cell = field_dist_1d(self.wavelength, self.kx_vector, self.T1, - self.layer_info_list, self.period, self.pol, - res_x=res_x, res_y=res_y, res_z=res_z, - type_complex=self.type_complex, type_float=self.type_float) - else: - raise ValueError - - elif self.grating_type == 1: - res_y = 1 - if field_algo == 0: - field_cell = field_dist_1d_conical_vanilla(self.wavelength, self.kx_vector, self.n_top, self.theta, - self.phi, self.T1, self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, - type_complex=self.type_complex) - elif field_algo == 1: - field_cell = field_dist_1d_conical_vectorized_ji(self.wavelength, self.kx_vector, self.n_top, self.theta, - self.phi, self.T1, self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, - type_complex=self.type_complex, type_float=self.type_float) - elif field_algo == 2: - field_cell = field_dist_1d_conical_vectorized_kji(self.wavelength, self.kx_vector, self.n_top, self.theta, - self.phi, self.T1, self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, - type_complex=self.type_complex, type_float=self.type_float) - else: - raise ValueError - - elif self.grating_type == 2: - - if field_algo == 0: - field_cell = field_dist_2d_vanilla(self.wavelength, self.kx_vector, self.n_top, self.theta, self.phi, - *self.fourier_order, self.T1, self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, - type_complex=self.type_complex) - elif field_algo == 1: - field_cell = field_dist_2d_vectorized_ji(self.wavelength, self.kx_vector, self.n_top, self.theta, - self.phi, *self.fourier_order, self.T1, self.layer_info_list, - self.period, res_x=res_x, res_y=res_y, res_z=res_z, - type_complex=self.type_complex, type_float=self.type_float) - elif field_algo == 2: - field_cell = field_dist_2d(self.wavelength, self.kx_vector, self.n_top, self.theta, - self.phi, *self.fourier_order, self.T1, self.layer_info_list, - self.period, res_x=res_x, res_y=res_y, res_z=res_z, - type_complex=self.type_complex, type_float=self.type_float) - else: - raise ValueError - else: - raise ValueError - - return field_cell - def field_plot(self, field_cell): field_plot(field_cell, self.pol) - @_BaseRCWA.jax_device_set - def calculate_field_all(self, res_x=20, res_y=20, res_z=20): - t0 = time.time() - field_cell0 = self.calculate_field(res_x=res_x, res_y=res_y, res_z=res_z) - print('no vector', time.time() - t0) - t0 = time.time() - field_cell1 = self.calculate_field(res_x=res_x, res_y=res_y, res_z=res_z) - print('ji vector', time.time() - t0) - t0 = time.time() - field_cell2 = self.calculate_field(res_x=res_x, res_y=res_y, res_z=res_z) - print('kji vector', time.time() - t0) - - print('gap(1-0): ', jnp.linalg.norm(field_cell1 - field_cell0)) - print('gap(2-1): ', jnp.linalg.norm(field_cell2 - field_cell1)) - print('gap(0-2): ', jnp.linalg.norm(field_cell0 - field_cell2)) - - return field_cell0, field_cell1, field_cell2 - @partial(jax.jit, static_argnums=(1, 2, 3, 4)) - @_BaseRCWA.jax_device_set + @jax_device_set def conv_solve_field(self, res_x=20, res_y=20, res_z=20, **kwargs): [setattr(self, k, v) for k, v in kwargs.items()] # needed for optimization @@ -372,7 +267,8 @@ def conv_solve_field(self, res_x=20, res_y=20, res_z=20, **kwargs): field_cell = self.calculate_field(res_x, res_y, res_z) return de_ri, de_ti, field_cell - @_BaseRCWA.jax_device_set + # TODO + @jax_device_set def conv_solve_field_no_jit(self, res_x=20, res_y=20, res_z=20): de_ri, de_ti, _, _ = self._conv_solve() field_cell = self.calculate_field(res_x, res_y, res_z) diff --git a/meent/on_jax/emsolver/transfer_method.py b/meent/on_jax/emsolver/transfer_method.py index ead4cb8..900ffd2 100644 --- a/meent/on_jax/emsolver/transfer_method.py +++ b/meent/on_jax/emsolver/transfer_method.py @@ -16,27 +16,13 @@ def transfer_1d_1(pol, ff_x, kx, n_top, n_bot, type_complex=jnp.complex128): F = jnp.eye(ff_xy, dtype=type_complex) - # if pol == 0: # TE - # Kz_bot = jnp.diag(kz_bot) - # - # G = 1j * Kz_bot - # - # elif pol == 1: # TM - # Kz_bot = jnp.diag(kz_bot / (n_bot ** 2)) - # - # G = 1j * Kz_bot - # else: - # raise ValueError - def false_fun(kz_bot): Kz_bot = jnp.diag(kz_bot) - G = 1j * Kz_bot return Kz_bot, G def true_fun(kz_bot): Kz_bot = jnp.diag(kz_bot / (n_bot ** 2)) - G = 1j * Kz_bot return Kz_bot, G @@ -46,77 +32,31 @@ def true_fun(kz_bot): return kz_top, kz_bot, F, G, T -# TODO: delete old codes -def transfer_1d_1_old(ff, polarization, k0, n_I, n_II, kx_vector, theta, delta_i0, fourier_order, - type_complex=jnp.complex128): - - k_I_z = (k0 ** 2 * n_I ** 2 - kx_vector ** 2) ** 0.5 - k_II_z = (k0 ** 2 * n_II ** 2 - kx_vector ** 2) ** 0.5 - - # conj() is not allowed with grad x jit - # k_I_z = k_I_z.conjugate() - # k_II_z = k_II_z.conjugate() - - k_I_z = conj(k_I_z) # manual conjugate - k_II_z = conj(k_II_z) # manual conjugate - - Kx = jnp.diag(kx_vector / k0) - - f = jnp.eye(ff).astype(type_complex) - - if polarization == 0: # TE - Y_I = jnp.diag(k_I_z / k0) - Y_II = jnp.diag(k_II_z / k0) - - YZ_I = Y_I - g = 1j * Y_II - inc_term = 1j * n_I * jnp.cos(theta) * delta_i0 - - elif polarization == 1: # TM - Z_I = jnp.diag(k_I_z / (k0 * n_I ** 2)) - Z_II = jnp.diag(k_II_z / (k0 * n_II ** 2)) - - YZ_I = Z_I - g = 1j * Z_II - inc_term = 1j * delta_i0 * jnp.cos(theta) / n_I - - else: - raise ValueError - - T = jnp.eye(2 * fourier_order[0] + 1).astype(type_complex) - - return kx_vector, Kx, k_I_z, k_II_z, f, YZ_I, g, inc_term, T - - -def transfer_1d_2(pol, kx, epx_conv, epy_conv, epz_conv_i, type_complex=jnp.complex128): - - Kx = jnp.diag(kx) - - # if pol == 0: - # A = Kx ** 2 - epy_conv - # eigenvalues, W = jnp.linalg.eig(A) - # eigenvalues += 0j # to get positive square root - # q = eigenvalues ** 0.5 - # Q = jnp.diag(q) - # V = W @ Q - # - # elif pol == 1: - # B = Kx @ epz_conv_i @ Kx - jnp.eye(epy_conv.shape[0], dtype=type_complex) + # if pol == 0: # TE + # Kz_bot = jnp.diag(kz_bot) # - # eigenvalues, W = jnp.linalg.eig(epx_conv @ B) + # G = 1j * Kz_bot # - # eigenvalues += 0j # to get positive square root - # q = eigenvalues ** 0.5 + # elif pol == 1: # TM + # Kz_bot = jnp.diag(kz_bot / (n_bot ** 2)) # - # Q = jnp.diag(q) - # V = jnp.linalg.inv(epx_conv) @ W @ Q + # G = 1j * Kz_bot # # else: # raise ValueError + # + # T = jnp.eye(ff_xy, dtype=type_complex) + # + # return kz_top, kz_bot, F, G, T + + +def transfer_1d_2(pol, kx, epx_conv, epy_conv, epz_conv_i, type_complex=jnp.complex128): + + Kx = jnp.diag(kx) def false_fun(Kx, epy_conv): # TE A = Kx ** 2 - epy_conv - eigenvalues, W = jnp.linalg.eig(A) + eigenvalues, W = eig(A) eigenvalues += 0j # to get positive square root q = eigenvalues ** 0.5 Q = jnp.diag(q) @@ -126,7 +66,7 @@ def false_fun(Kx, epy_conv): # TE def true_fun(Kx, epy_conv): # TM B = Kx @ epz_conv_i @ Kx - jnp.eye(epy_conv.shape[0], dtype=type_complex) - eigenvalues, W = jnp.linalg.eig(epx_conv @ B) + eigenvalues, W = eig(epx_conv @ B) eigenvalues += 0j # to get positive square root q = eigenvalues ** 0.5 @@ -138,24 +78,29 @@ def true_fun(Kx, epy_conv): # TM W, V, q = jax.lax.cond(pol, true_fun, false_fun, Kx, epy_conv) return W, V, q - - -def transfer_1d_2_old(k0, q, d, W, V, f, g, fourier_order, T, type_complex=jnp.complex128): - X = jnp.diag(jnp.exp(-k0 * q * d)) - - W_i = jnp.linalg.inv(W) - V_i = jnp.linalg.inv(V) - - a = 0.5 * (W_i @ f + V_i @ g) - b = 0.5 * (W_i @ f - V_i @ g) - - a_i = jnp.linalg.inv(a) - - f = W @ (jnp.eye(2 * fourier_order[0] + 1).astype(type_complex) + X @ b @ a_i @ X) - g = V @ (jnp.eye(2 * fourier_order[0] + 1).astype(type_complex) - X @ b @ a_i @ X) - T = T @ a_i @ X - - return X, f, g, T, a_i, b + # if pol == 0: + # A = Kx ** 2 - epy_conv + # eigenvalues, W = eig(A) + # eigenvalues += 0j # to get positive square root + # q = eigenvalues ** 0.5 + # Q = jnp.diag(q) + # V = W @ Q + # + # elif pol == 1: + # B = Kx @ epz_conv_i @ Kx - jnp.eye(epy_conv.shape[0], dtype=type_complex) + # + # eigenvalues, W = eig(epx_conv @ B) + # + # eigenvalues += 0j # to get positive square root + # q = eigenvalues ** 0.5 + # + # Q = jnp.diag(q) + # V = jnp.linalg.inv(epx_conv) @ W @ Q + # + # else: + # raise ValueError + # + # return W, V, q def transfer_1d_3(k0, W, V, q, d, F, G, T, type_complex=jnp.complex128): @@ -181,31 +126,6 @@ def transfer_1d_3(k0, W, V, q, d, F, G, T, type_complex=jnp.complex128): return X, F, G, T, A_i, B -def transfer_1d_3_old(g, YZ_I, f, delta_i0, inc_term, T, k_I_z, k0, n_top, n_bot, theta, polarization, k_II_z): - T1 = jnp.linalg.inv(g + 1j * YZ_I @ f) @ (1j * YZ_I @ delta_i0 + inc_term) - R = f @ T1 - delta_i0 - T = T @ T1 - - # conj() is not allowed with grad x jit - # de_ri = jnp.real(R * jnp.conj(R) * k_I_z / (k0 * n_top * jnp.cos(theta))) - # if pol == 0: - # de_ti = T * jnp.conj(T) * jnp.real(k_II_z / (k0 * n_top * jnp.cos(theta))) - # elif pol == 1: - # de_ti = T * jnp.conj(T) * jnp.real(k_II_z / n_bot ** 2) / (k0 * jnp.cos(theta) / n_top) - # else: - # raise ValueError - - de_ri = jnp.real(R * conj(R) * k_I_z / (k0 * n_top * jnp.cos(theta))) # manual conjugate - if polarization == 0: - de_ti = T * conj(T) * jnp.real(k_II_z / (k0 * n_top * jnp.cos(theta))) # manual conjugate - elif polarization == 1: - de_ti = T * jnp.conj(T) * jnp.real(k_II_z / n_bot ** 2) / (k0 * jnp.cos(theta) / n_top) # manual conjugate - else: - raise ValueError - - return de_ri.real, de_ti.real, T1 - - def transfer_1d_4(pol, F, G, T, kz_top, kz_bot, theta, n_top, n_bot, type_complex=jnp.complex128): ff_xy = len(kz_top) @@ -213,7 +133,6 @@ def transfer_1d_4(pol, F, G, T, kz_top, kz_bot, theta, n_top, n_bot, type_comple Kz_top = jnp.diag(kz_top) delta_i0 = jnp.zeros(ff_xy, dtype=type_complex) - # delta_i0[ff_xy // 2] = 1 delta_i0 = delta_i0.at[ff_xy // 2].set(1) # if pol == 0: # TE @@ -264,227 +183,6 @@ def true_fun(n_top, theta, delta_i0, G, Kz_top, T): # TM return de_ri.real, de_ti.real, T1 -def transfer_1d_conical_1(ff, k0, n_I, n_II, kx_vector, theta, phi, type_complex=jnp.complex128): - """ - Deprecated. - Args: - ff: - k0: - n_I: - n_II: - kx_vector: - theta: - phi: - type_complex: - - Returns: - - """ - I = jnp.eye(ff).astype(type_complex) - O = jnp.zeros((ff, ff)).astype(type_complex) - - # kx = k0 * (n_top * jnp.sin(theta) * jnp.cos(phi) - fourier_indices * (wavelength / period[0]) - # ).astype(type_complex) - - ky = k0 * n_I * jnp.sin(theta) * jnp.sin(phi) - - k_I_z = (k0 ** 2 * n_I ** 2 - kx_vector ** 2 - ky ** 2) ** 0.5 - k_II_z = (k0 ** 2 * n_II ** 2 - kx_vector ** 2 - ky ** 2) ** 0.5 - - # conj() is not allowed with grad x jit - # k_I_z = k_I_z.conjugate() - # k_II_z = k_II_z.conjugate() - - k_I_z = conj(k_I_z) # manual conjugate - k_II_z = conj(k_II_z) # manual conjugate - - Kx = jnp.diag(kx_vector / k0) - varphi = jnp.arctan(ky / kx_vector) - - Y_I = jnp.diag(k_I_z / k0) - Y_II = jnp.diag(k_II_z / k0) - - Z_I = jnp.diag(k_I_z / (k0 * n_I ** 2)) - Z_II = jnp.diag(k_II_z / (k0 * n_II ** 2)) - - big_F = jnp.block([[I, O], [O, 1j * Z_II]]) - big_G = jnp.block([[1j * Y_II, O], [O, I]]) - - big_T = jnp.eye(2 * ff).astype(type_complex) - - return Kx, ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T - - -def transfer_1d_conical_2(k0, Kx, ky, E_conv, E_conv_i, o_E_conv_i, ff, d, varphi, big_F, big_G, big_T, - type_complex=jnp.complex128, perturbation=1E-10, device='cpu'): - """ - Deprecated. - Args: - k0: - Kx: - ky: - E_conv: - E_conv_i: - o_E_conv_i: - ff: - d: - varphi: - big_F: - big_G: - big_T: - type_complex: - perturbation: - device: - - Returns: - - """ - I = jnp.eye(ff).astype(type_complex) - O = jnp.zeros((ff, ff)).astype(type_complex) - - A = Kx ** 2 - E_conv - B = Kx @ E_conv_i @ Kx - I - A_i = jnp.linalg.inv(A) - B_i = jnp.linalg.inv(B) - - to_decompose_W_1 = (ky/k0) ** 2 * I + A - # to_decompose_W_2 = (ky/k0) ** 2 * I + B @ o_E_conv_i - to_decompose_W_2 = (ky/k0) ** 2 * I + B @ E_conv - - eigenvalues_1, W_1 = eig(to_decompose_W_1, type_complex=type_complex, perturbation=perturbation, device=device) - eigenvalues_2, W_2 = eig(to_decompose_W_2, type_complex=type_complex, perturbation=perturbation, device=device) - eigenvalues_1 += 0j # to get positive square root - eigenvalues_2 += 0j # to get positive square root - - q_1 = eigenvalues_1 ** 0.5 - q_2 = eigenvalues_2 ** 0.5 - - Q_1 = jnp.diag(q_1) - Q_2 = jnp.diag(q_2) - - V_11 = A_i @ W_1 @ Q_1 - V_12 = (ky / k0) * A_i @ Kx @ W_2 - V_21 = (ky / k0) * B_i @ Kx @ E_conv_i @ W_1 - V_22 = B_i @ W_2 @ Q_2 - - X_1 = jnp.diag(jnp.exp(-k0 * q_1 * d)) - X_2 = jnp.diag(jnp.exp(-k0 * q_2 * d)) - - F_c = jnp.diag(jnp.cos(varphi)) - F_s = jnp.diag(jnp.sin(varphi)) - - V_ss = F_c @ V_11 - V_sp = F_c @ V_12 - F_s @ W_2 - W_ss = F_c @ W_1 + F_s @ V_21 - W_sp = F_s @ V_22 - W_ps = F_s @ V_11 - W_pp = F_c @ W_2 + F_s @ V_12 - V_ps = F_c @ V_21 - F_s @ W_1 - V_pp = F_c @ V_22 - - big_I = jnp.eye(2 * (len(I))).astype(type_complex) - big_X = jnp.block([[X_1, O], [O, X_2]]) - big_W = jnp.block([[V_ss, V_sp], [W_ps, W_pp]]) - big_V = jnp.block([[W_ss, W_sp], [V_ps, V_pp]]) - - big_W_i = jnp.linalg.inv(big_W) - big_V_i = jnp.linalg.inv(big_V) - - big_A = 0.5 * (big_W_i @ big_F + big_V_i @ big_G) - big_B = 0.5 * (big_W_i @ big_F - big_V_i @ big_G) - - big_A_i = jnp.linalg.inv(big_A) - - big_F = big_W @ (big_I + big_X @ big_B @ big_A_i @ big_X) - big_G = big_V @ (big_I - big_X @ big_B @ big_A_i @ big_X) - - big_T = big_T @ big_A_i @ big_X - - return big_X, big_F, big_G, big_T, big_A_i, big_B, W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 - - -def transfer_1d_conical_3(big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff, delta_i0, k_I_z, k0, n_I, n_II, k_II_z, - type_complex=jnp.complex128): - """ - Deprecated. - Args: - big_F: - big_G: - big_T: - Z_I: - Y_I: - psi: - theta: - ff: - delta_i0: - k_I_z: - k0: - n_I: - n_II: - k_II_z: - type_complex: - - Returns: - - """ - I = jnp.eye(ff).astype(type_complex) - O = jnp.zeros((ff, ff), dtype=type_complex) - - big_F_11 = big_F[:ff, :ff] - big_F_12 = big_F[:ff, ff:] - big_F_21 = big_F[ff:, :ff] - big_F_22 = big_F[ff:, ff:] - - big_G_11 = big_G[:ff, :ff] - big_G_12 = big_G[:ff, ff:] - big_G_21 = big_G[ff:, :ff] - big_G_22 = big_G[ff:, ff:] - - # Final Equation in form of AX=B - final_A = jnp.block( - [ - [I, O, -big_F_11, -big_F_12], - [O, -1j * Z_I, -big_F_21, -big_F_22], - [-1j * Y_I, O, -big_G_11, -big_G_12], - [O, I, -big_G_21, -big_G_22], - ] - ) - - final_B = jnp.block( - [ - [ -jnp.sin(psi) * delta_i0, - -jnp.cos(psi) * jnp.cos(theta) * delta_i0, - -1j * jnp.sin(psi) * n_I * jnp.cos(theta) * delta_i0, - 1j * n_I * jnp.cos(psi) * delta_i0] - ]).T - - final_RT = jnp.linalg.inv(final_A) @ final_B - - R_s = final_RT[:ff, :].flatten() - R_p = final_RT[ff:2 * ff, :].flatten() - - big_T1 = final_RT[2 * ff:, :] - big_T = big_T @ big_T1 - - T_s = big_T[:ff, :].flatten() - T_p = big_T[ff:, :].flatten() - - # conj() is not allowed with grad x jit - # de_ri = R_s * jnp.conj(R_s) * jnp.real(k_I_z / (k0 * n_top * jnp.cos(theta))) \ - # + R_p * jnp.conj(R_p) * jnp.real((k_I_z / n_top ** 2) / (k0 * n_top * jnp.cos(theta))) - # - # de_ti = T_s * jnp.conj(T_s) * jnp.real(k_II_z / (k0 * n_top * jnp.cos(theta))) \ - # + T_p * jnp.conj(T_p) * jnp.real((k_II_z / n_bot ** 2) / (k0 * n_top * jnp.cos(theta))) - - de_ri = R_s * conj(R_s) * jnp.real(k_I_z / (k0 * n_I * jnp.cos(theta))) \ - + R_p * conj(R_p) * jnp.real((k_I_z / n_I ** 2) / (k0 * n_I * jnp.cos(theta))) # manual conjugate - - de_ti = T_s * conj(T_s) * jnp.real(k_II_z / (k0 * n_I * jnp.cos(theta))) \ - + T_p * conj(T_p) * jnp.real((k_II_z / n_II ** 2) / (k0 * n_I * jnp.cos(theta))) # manual conjugate - - return de_ri.real, de_ti.real, big_T1 - - def transfer_2d_1(ff_x, ff_y, kx, ky, n_top, n_bot, type_complex=jnp.complex128): ff_xy = ff_x * ff_y @@ -509,48 +207,6 @@ def transfer_2d_1(ff_x, ff_y, kx, ky, n_top, n_bot, type_complex=jnp.complex128) return kz_top, kz_bot, varphi, big_F, big_G, big_T -def transfer_2d_1_old(ff_x, ff_y, ff_xy, k0, n_I, n_II, kx_vector, period, fourier_indices_y, theta, phi, wavelength, - type_complex=jnp.complex128): - I = jnp.eye(ff_xy).astype(type_complex) - O = jnp.zeros((ff_xy, ff_xy), dtype=type_complex) - - # kx = k0 * (n_top * jnp.sin(theta) * jnp.cos(phi) + fourier_indices * ( - # wavelength / period[0])).astype(type_complex) - - ky_vector = k0 * (n_I * jnp.sin(theta) * jnp.sin(phi) + fourier_indices_y * ( - wavelength / period[1])).astype(type_complex) - - k_I_z = (k0 ** 2 * n_I ** 2 - kx_vector ** 2 - ky_vector.reshape((-1, 1)) ** 2) ** 0.5 - k_II_z = (k0 ** 2 * n_II ** 2 - kx_vector ** 2 - ky_vector.reshape((-1, 1)) ** 2) ** 0.5 - - # k_I_z = k_I_z.flatten().conjugate() - # k_II_z = k_II_z.flatten().conjugate() - - # conj() is not allowed with grad x jit - k_I_z = k_I_z.flatten() - k_II_z = k_II_z.flatten() - k_I_z = conj(k_I_z) # manual conjugate - k_II_z = conj(k_II_z) # manual conjugate - - Kx = jnp.diag(jnp.tile(kx_vector, ff_y).flatten()) / k0 - Ky = jnp.diag(jnp.tile(ky_vector.reshape((-1, 1)), ff_x).flatten()) / k0 - - varphi = jnp.arctan(ky_vector.reshape((-1, 1)) / kx_vector).flatten() - - Y_I = jnp.diag(k_I_z / k0) - Y_II = jnp.diag(k_II_z / k0) - - Z_I = jnp.diag(k_I_z / (k0 * n_I ** 2)) - Z_II = jnp.diag(k_II_z / (k0 * n_II ** 2)) - - big_F = jnp.block([[I, O], [O, 1j * Z_II]]) - big_G = jnp.block([[1j * Y_II, O], [O, I]]) - - big_T = jnp.eye(2 * ff_xy).astype(type_complex) - - return kx_vector, ky_vector, Kx, Ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T - - def transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=jnp.complex128): ff_x = len(kx) @@ -589,37 +245,6 @@ def transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=jnp.compl return W, V, q -def transfer_2d_wv_old(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, device='cpu', type_complex=jnp.complex128, perturbation=1E-10): - I = jnp.eye(ff_xy).astype(type_complex) - - B = Kx @ E_conv_i @ Kx - I - D = Ky @ E_conv_i @ Ky - I - - S2_from_S = jnp.block( - [ - [Ky ** 2 + B @ E_conv, Kx @ (E_conv_i @ Ky @ E_conv - Ky)], - [Ky @ (E_conv_i @ Kx @ E_conv - Kx), Kx ** 2 + D @ E_conv] - ]) - - eigenvalues, W = eig(S2_from_S, type_complex=type_complex, perturbation=perturbation, device=device) - eigenvalues += 0j # to get positive square root - - q = eigenvalues ** 0.5 - # q = q.conjugate() - - Q = jnp.diag(q) - Q_i = jnp.linalg.inv(Q) - U1_from_S = jnp.block( - [ - [-Kx @ Ky, Kx ** 2 - E_conv], - [E_conv - Ky ** 2, Ky @ Kx] - ] - ) - V = U1_from_S @ W @ Q_i - - return W, V, q - - def transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=jnp.complex128): ff_xy = len(q)//2 @@ -677,57 +302,6 @@ def transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, type_complex=jnp. return big_X, big_F, big_G, big_T, big_A_i, big_B -def transfer_2d_2_old(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, type_complex=jnp.complex128): - q1 = q[:center] - q2 = q[center:] - - W_11 = W[:center, :center] - W_12 = W[:center, center:] - W_21 = W[center:, :center] - W_22 = W[center:, center:] - - V_11 = V[:center, :center] - V_12 = V[:center, center:] - V_21 = V[center:, :center] - V_22 = V[center:, center:] - - X_1 = jnp.diag(jnp.exp(-k0 * q1 * d)) - X_2 = jnp.diag(jnp.exp(-k0 * q2 * d)) - - F_c = jnp.diag(jnp.cos(varphi)) - F_s = jnp.diag(jnp.sin(varphi)) - - W_ss = F_c @ W_21 - F_s @ W_11 - W_sp = F_c @ W_22 - F_s @ W_12 - W_ps = F_c @ W_11 + F_s @ W_21 - W_pp = F_c @ W_12 + F_s @ W_22 - - V_ss = F_c @ V_11 + F_s @ V_21 - V_sp = F_c @ V_12 + F_s @ V_22 - V_ps = F_c @ V_21 - F_s @ V_11 - V_pp = F_c @ V_22 - F_s @ V_12 - - big_I = jnp.eye(2 * (len(I))).astype(type_complex) - big_X = jnp.block([[X_1, O], [O, X_2]]) - big_W = jnp.block([[W_ss, W_sp], [W_ps, W_pp]]) - big_V = jnp.block([[V_ss, V_sp], [V_ps, V_pp]]) - - big_W_i = jnp.linalg.inv(big_W) - big_V_i = jnp.linalg.inv(big_V) - - big_A = 0.5 * (big_W_i @ big_F + big_V_i @ big_G) - big_B = 0.5 * (big_W_i @ big_F - big_V_i @ big_G) - - big_A_i = jnp.linalg.inv(big_A) - - big_F = big_W @ (big_I + big_X @ big_B @ big_A_i @ big_X) - big_G = big_V @ (big_I - big_X @ big_B @ big_A_i @ big_X) - - big_T = big_T @ big_A_i @ big_X - - return big_X, big_F, big_G, big_T, big_A_i, big_B, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22 - - def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_top, n_bot, type_complex=jnp.complex128): ff_xy = len(big_F) // 2 @@ -748,7 +322,7 @@ def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_top, n_bot, big_G_22 = big_G[ff_xy:, ff_xy:] delta_i0 = jnp.zeros((ff_xy, 1), dtype=type_complex) - delta_i0[ff_xy // 2, 0] = 1 + delta_i0 = delta_i0.at[ff_xy // 2, 0].set(1) # Final Equation in form of AX=B final_A = jnp.block( @@ -788,63 +362,3 @@ def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_top, n_bot, return de_ri.real, de_ti.real, big_T1 - -def transfer_2d_3_old(center, big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff_xy, delta_i0, k_I_z, k0, n_I, n_II, k_II_z, - type_complex=jnp.complex128): - I = jnp.eye(ff_xy).astype(type_complex) - O = jnp.zeros((ff_xy, ff_xy), dtype=type_complex) - - big_F_11 = big_F[:center, :center] - big_F_12 = big_F[:center, center:] - big_F_21 = big_F[center:, :center] - big_F_22 = big_F[center:, center:] - - big_G_11 = big_G[:center, :center] - big_G_12 = big_G[:center, center:] - big_G_21 = big_G[center:, :center] - big_G_22 = big_G[center:, center:] - - # Final Equation in form of AX=B - final_A = jnp.block( - [ - [I, O, -big_F_11, -big_F_12], - [O, -1j * Z_I, -big_F_21, -big_F_22], - [-1j * Y_I, O, -big_G_11, -big_G_12], - [O, I, -big_G_21, -big_G_22], - ] - ) - - final_B = jnp.block( - [ - [-jnp.sin(psi) * delta_i0], - [-jnp.cos(psi) * jnp.cos(theta) * delta_i0], - [-1j * jnp.sin(psi) * n_I * jnp.cos(theta) * delta_i0], - [1j * n_I * jnp.cos(psi) * delta_i0] - ] - ) - - final_RT = jnp.linalg.inv(final_A) @ final_B - - R_s = final_RT[:ff_xy, :].flatten() - R_p = final_RT[ff_xy:2 * ff_xy, :].flatten() - - big_T1 = final_RT[2 * ff_xy:, :] - big_T = big_T @ big_T1 - - T_s = big_T[:ff_xy, :].flatten() - T_p = big_T[ff_xy:, :].flatten() - - # conj() is not allowed with grad x jit - # de_ri = R_s * jnp.conj(R_s) * jnp.real(k_I_z / (k0 * n_top * jnp.cos(theta))) \ - # + R_p * jnp.conj(R_p) * jnp.real((k_I_z / n_top ** 2) / (k0 * n_top * jnp.cos(theta))) - # - # de_ti = T_s * jnp.conj(T_s) * jnp.real(k_II_z / (k0 * n_top * jnp.cos(theta))) \ - # + T_p * jnp.conj(T_p) * jnp.real((k_II_z / n_bot ** 2) / (k0 * n_top * jnp.cos(theta))) - - de_ri = R_s * conj(R_s) * jnp.real(k_I_z / (k0 * n_I * jnp.cos(theta))) \ - + R_p * conj(R_p) * jnp.real((k_I_z / n_I ** 2) / (k0 * n_I * jnp.cos(theta))) # manual conjugate - - de_ti = T_s * conj(T_s) * jnp.real(k_II_z / (k0 * n_I * jnp.cos(theta))) \ - + T_p * conj(T_p) * jnp.real((k_II_z / n_II ** 2) / (k0 * n_I * jnp.cos(theta))) # manual conjugate - - return de_ri.real, de_ti.real, big_T1 diff --git a/meent/on_jax/modeler/__init__.py b/meent/on_jax/modeler/__init__.py index dd0e3a9..13af6f9 100644 --- a/meent/on_jax/modeler/__init__.py +++ b/meent/on_jax/modeler/__init__.py @@ -5,10 +5,10 @@ pass -from jax import tree_util - -from .modeling import ModelingJax - -tree_util.register_pytree_node(ModelingJax, - ModelingJax._tree_flatten, - ModelingJax._tree_unflatten) +# from jax import tree_util +# +# from .modeling import ModelingJax +# +# tree_util.register_pytree_node(ModelingJax, +# ModelingJax._tree_flatten, +# ModelingJax._tree_unflatten) diff --git a/meent/on_jax/modeler/modeling.py b/meent/on_jax/modeler/modeling.py index ccbd5e8..7c587c5 100644 --- a/meent/on_jax/modeler/modeling.py +++ b/meent/on_jax/modeler/modeling.py @@ -16,27 +16,27 @@ def __init__(self, *args, **kwargs): # self.y_list = None # self.mat_table = None - def _tree_flatten(self): # TODO - children = (self.n_I, self.n_II, self.theta, self.phi, self.psi, - self.period, self.wavelength, self.ucell, self.ucell_info_list, self.thickness) - aux_data = { - 'backend': self.backend, - 'grating_type': self.grating_type, - 'pol': self.pol, - 'fto': self.fourier_order, - 'ucell_materials': self.ucell_materials, - 'connecting_algo': self.algo, - 'perturbation': self.perturbation, - 'device': self.device, - 'type_complex': self.type_complex, - 'fourier_type': self.fft_type, - } - - return children, aux_data - - @classmethod - def _tree_unflatten(cls, aux_data, children): - return cls(*children, **aux_data) + # def _tree_flatten(self): # TODO + # children = (self.n_I, self.n_II, self.theta, self.phi, self.psi, + # self.period, self.wavelength, self.ucell, self.ucell_info_list, self.thickness) + # aux_data = { + # 'backend': self.backend, + # 'grating_type': self.grating_type, + # 'pol': self.pol, + # 'fto': self.fourier_order, + # 'ucell_materials': self.ucell_materials, + # 'connecting_algo': self.algo, + # 'perturbation': self.perturbation, + # 'device': self.device, + # 'type_complex': self.type_complex, + # 'fourier_type': self.fft_type, + # } + # + # return children, aux_data + # + # @classmethod + # def _tree_unflatten(cls, aux_data, children): + # return cls(*children, **aux_data) @staticmethod def rectangle_no_approximation(cx, cy, lx, ly, base): @@ -67,10 +67,16 @@ def rectangle(self, cx, cy, lx, ly, n_index, angle=0, n_split_triangle=2, n_spli angle = angle.reshape(1) if lx.dtype not in (jnp.complex64, jnp.complex128): - lx = lx.astype(self.type_complex) # TODO - if ly.dtype not in (jnp.complex64, jnp.complex128): - ly = ly.astype(self.type_complex) + if self.type_complex is jnp.complex128: + lx = lx.astype(jnp.float64) + else: + lx = lx.astype(jnp.float32) + if ly.dtype not in (jnp.complex64, jnp.complex128): + if self.type_complex is jnp.complex128: + ly = ly.astype(jnp.float64) + else: + ly = ly.astype(jnp.float32) # n_split_triangle, n_split_parallelogram = n_split_triangle + 2, n_split_parallelogram + 2 # if angle is None: @@ -109,7 +115,6 @@ def rectangle(self, cx, cy, lx, ly, n_index, angle=0, n_split_triangle=2, n_spli DL = DL.at[:].add([[cx], [cy]]) LU = LU.at[:].add([[cx], [cy]]) - if 0 <= angle < jnp.pi / 2: angle_inside = (jnp.pi / 2) - angle @@ -353,82 +358,8 @@ def rectangle(self, cx, cy, lx, ly, n_index, angle=0, n_split_triangle=2, n_spli obj_list1 = [[[y_cp_next_arr[i], x_cp_mean_arr[i]], [yyy[i], x_mean_arr[i]], n_index] for i in range(len(xxx) - 1)] - # obj_list1 = [] - # - # for i in range(len(xxx)): - # if i == len(xxx) - 1: - # break - # x, y = xxx[i], yyy[i] - # x_cp, y_cp = xxx_cp[i], yyy_cp[i] - # - # x_next, y_next = xxx[i + 1], yyy[i + 1] - # x_cp_next, y_cp_next = xxx_cp[i + 1], yyy_cp[i + 1] - # - # x_mean = (x + x_next) / 2 - # x_cp_mean = (x_cp + x_cp_next) / 2 - # obj_list1.append([[y_cp_next, x_cp_mean], [y, x_mean], n_index]) - return obj_list1 - # def vector(self, layer_info): - # period, pmtvy_base, obj_list = layer_info - # - # # Griding - # row_list = [] - # col_list = [] - # - # for obj in obj_list: - # top_left, bottom_right, pmty = obj - # row_list.extend([top_left[0], bottom_right[0]]) - # col_list.extend([top_left[1], bottom_right[1]]) - # - # row_list = list(set(row_list)) - # col_list = list(set(col_list)) - # - # row_list.sort() - # col_list.sort() - # - # if not row_list or row_list[-1] != period[0]: - # row_list.append(period[0]) - # if not col_list or col_list[-1] != period[1]: - # col_list.append(period[1]) - # - # if row_list and row_list[0] == 0: - # row_list = row_list[1:] - # if col_list and col_list[0] == 0: - # col_list = col_list[1:] - # - # ucell_layer = jnp.ones((len(row_list), len(col_list))) * pmtvy_base - # - # for obj in obj_list: - # top_left, bottom_right, pmty = obj - # if top_left[0] == 0: - # row_begin = 0 - # else: - # row_begin = row_list.index(top_left[0]) + 1 - # row_end = row_list.index(bottom_right[0]) + 1 - # - # if top_left[1] == 0: - # col_begin = 0 - # else: - # col_begin = col_list.index(top_left[1]) + 1 - # col_end = col_list.index(bottom_right[1]) + 1 - # - # ucell_layer[row_begin:row_end, col_begin:col_end] = pmty - # - # x_list = jnp.array(col_list).reshape((-1, 1)) / period[0] - # y_list = jnp.array(row_list).reshape((-1, 1)) / period[1] - # - # return ucell_layer, x_list, y_list - - # def draw_old(self, layer_info_list): - # ucell_info_list = [] - # - # for layer_info in layer_info_list: - # ucell_layer, x_list, y_list = self.vector(layer_info) - # ucell_info_list.append([ucell_layer, x_list, y_list]) - # - # return ucell_info_list def ellipse(self, cx, cy, lx, ly, n_index, angle=0, n_split_w=2, n_split_h=2, angle_margin=1E-5, debug=False): if type(lx) in (int, float): @@ -447,10 +378,16 @@ def ellipse(self, cx, cy, lx, ly, n_index, angle=0, n_split_w=2, n_split_h=2, an angle = angle.reshape(1) if lx.dtype not in (jnp.complex64, jnp.complex128): - lx = lx.astype(self.type_complex) # TODO - if ly.dtype not in (jnp.complex64, jnp.complex128): - ly = ly.astype(self.type_complex) + if self.type_complex is jnp.complex128: + lx = lx.astype(jnp.float64) + else: + lx = lx.astype(jnp.float32) + if ly.dtype not in (jnp.complex64, jnp.complex128): + if self.type_complex is jnp.complex128: + ly = ly.astype(jnp.float64) + else: + ly = ly.astype(jnp.float32) angle = angle % (2 * jnp.pi) points_x_origin = lx / 2 * jnp.cos(jnp.linspace(jnp.pi / 2, 0, n_split_w)) @@ -585,16 +522,14 @@ def vector_per_layer_numeric(self, layer_info, x64=True): # top_left[0] for _ in range(100): - index = bisect_left(row_list, top_left[0].real, key=lambda x: x.real) + # index = bisect_left(row_list, top_left[0].real, key=lambda x: x.real) + index = bisect_left(row_list, top_left[0].real) if len(row_list) > index and top_left[0] == row_list[index]: perturbation += perturbation_unit if top_left[0] == 0: top_left[0] = top_left[0] + perturbation - # top_left = top_left.at[0].add(perturbation) - else: - # top_left[0] = top_left[0] - (top_left[0] * perturbation) # TODO: plus or minus? top_left[0] = top_left[0] + (top_left[0] * perturbation) # top_left = top_left.add[0].add(top_left[0] * perturbation) # TODO: change; save how many perturbations were applied in a variable @@ -606,22 +541,18 @@ def vector_per_layer_numeric(self, layer_info, x64=True): break else: print('WARNING: Vector modeling has unexpected case. Backprop may not work as expected.') - index = bisect_left(row_list, top_left[0].real, key=lambda x: x.real) + # index = bisect_left(row_list, top_left[0].real, key=lambda x: x.real) + index = bisect_left(row_list, top_left[0].real) row_list.insert(index, top_left[0]) # bottom_right[0] for _ in range(100): - index = bisect_left(row_list, bottom_right[0].real, key=lambda x: x.real) + # index = bisect_left(row_list, bottom_right[0].real, key=lambda x: x.real) + index = bisect_left(row_list, bottom_right[0].real) if len(row_list) > index and bottom_right[0] == row_list[index]: perturbation += perturbation_unit - # if bottom_right[0] == 0: - # bottom_right[0] = bottom_right[0] + perturbation - # else: - # # bottom_right[0] = bottom_right[0] + (bottom_right[0] * perturbation) - # bottom_right[0] = bottom_right[0] - (bottom_right[0] * perturbation) - - # bottom_right[0] = bottom_right[0] + (bottom_right[0] * perturbation) + # TODO: confirm assign makes right value bottom_right[0] = bottom_right[0] - (bottom_right[0] * perturbation) # bottom_right = bottom_right.at[0].add(-bottom_right[0] * perturbation) row_list.insert(index, bottom_right[0]) @@ -632,20 +563,21 @@ def vector_per_layer_numeric(self, layer_info, x64=True): break else: print('WARNING: Vector modeling has unexpected case. Backprop may not work as expected.') - index = bisect_left(row_list, bottom_right[0].real, key=lambda x: x.real) + # index = bisect_left(row_list, bottom_right[0].real, key=lambda x: x.real) + index = bisect_left(row_list, bottom_right[0].real) row_list.insert(index, bottom_right[0]) # top_left[1] for _ in range(100): - index = bisect_left(col_list, top_left[1].real, key=lambda x: x.real) + # index = bisect_left(col_list, top_left[1].real, key=lambda x: x.real) + index = bisect_left(col_list, top_left[1].real) if len(col_list) > index and top_left[1] == col_list[index]: perturbation += perturbation_unit if top_left[1] == 0: - # top_left[1] = top_left[1] + perturbation - top_left = top_left.at[1].add(perturbation) + # top_left = top_left.at[1].add(perturbation) + top_left[1] = top_left[1] + perturbation # tODO else: - # top_left[1] = top_left[1] - (top_left[1] * perturbation) top_left[1] = top_left[1] + (top_left[1] * perturbation) # top_left = top_left.at[1].add(top_left[1] * perturbation) col_list.insert(index, top_left[1]) @@ -655,12 +587,14 @@ def vector_per_layer_numeric(self, layer_info, x64=True): break else: print('WARNING: Vector modeling has unexpected case. Backprop may not work as expected.') - index = bisect_left(col_list, top_left[1].real, key=lambda x: x.real) + # index = bisect_left(col_list, top_left[1].real, key=lambda x: x.real) + index = bisect_left(col_list, top_left[1].real) col_list.insert(index, top_left[1]) # bottom_right[1] for _ in range(100): - index = bisect_left(col_list, bottom_right[1].real, key=lambda x: x.real) + # index = bisect_left(col_list, bottom_right[1].real, key=lambda x: x.real) + index = bisect_left(col_list, bottom_right[1].real) if len(col_list) > index and bottom_right[1] == col_list[index]: perturbation += perturbation_unit # if bottom_right[1] == 0: @@ -671,6 +605,7 @@ def vector_per_layer_numeric(self, layer_info, x64=True): # bottom_right[1] = bottom_right[1] + (bottom_right[1] * perturbation) + # TODO: confirm assign makes right value bottom_right[1] = bottom_right[1] - (bottom_right[1] * perturbation) # bottom_right = bottom_right.at[1].add(-bottom_right[1] * perturbation) col_list.insert(index, bottom_right[1]) @@ -680,7 +615,8 @@ def vector_per_layer_numeric(self, layer_info, x64=True): break else: print('WARNING: Vector modeling has unexpected case. Backprop may not work as expected.') - index = bisect_left(col_list, bottom_right[1].real, key=lambda x: x.real) + # index = bisect_left(col_list, bottom_right[1].real, key=lambda x: x.real) + index = bisect_left(col_list, bottom_right[1].real) col_list.insert(index, bottom_right[1]) if not row_list or row_list[-1] != self.period[1]: @@ -710,7 +646,6 @@ def vector_per_layer_numeric(self, layer_info, x64=True): col_begin = col_list.index(top_left[1]) + 1 col_end = col_list.index(bottom_right[1]) + 1 - # ucell_layer[row_begin:row_end, col_begin:col_end] = pmty ucell_layer = ucell_layer.at[row_begin:row_end, col_begin:col_end].set(pmty) x_list = jnp.concatenate(col_list).reshape((-1, 1)) @@ -731,7 +666,7 @@ def draw(self, layer_info_list): self.ucell_info_list = ucell_info_list return ucell_info_list - def modeling_vector_instruction(self, rcwa_options, instructions): + def modeling_vector_instruction(self, instructions): # wavelength = rcwa_options['wavelength'] @@ -761,98 +696,6 @@ def modeling_vector_instruction(self, rcwa_options, instructions): return ucell_info_list - # def vector(self, layer_info): - # period, pmtvy_base, obj_list = layer_info - # - # # Griding - # row_list = [] - # col_list = [] - # - # for obj in obj_list: - # top_left, bottom_right, pmty = obj - # row_list.extend([top_left[0], bottom_right[0]]) - # col_list.extend([top_left[1], bottom_right[1]]) - # - # row_list = list(set(row_list)) - # col_list = list(set(col_list)) - # - # row_list.sort() - # col_list.sort() - # - # if not row_list or row_list[-1] != period[0]: - # row_list.append(period[0]) - # if not col_list or col_list[-1] != period[1]: - # col_list.append(period[1]) - # - # if row_list and row_list[0] == 0: - # row_list = row_list[1:] - # if col_list and col_list[0] == 0: - # col_list = col_list[1:] - # - # ucell_layer = jnp.ones((len(row_list), len(col_list))) * pmtvy_base - # - # for obj in obj_list: - # top_left, bottom_right, pmty = obj - # if top_left[0] == 0: - # row_begin = 0 - # else: - # row_begin = row_list.index(top_left[0]) + 1 - # row_end = row_list.index(bottom_right[0]) + 1 - # - # if top_left[1] == 0: - # col_begin = 0 - # else: - # col_begin = col_list.index(top_left[1]) + 1 - # col_end = col_list.index(bottom_right[1]) + 1 - # - # ucell_layer = ucell_layer.at[row_begin:row_end, col_begin:col_end].set(pmty) - # - # x_list = jnp.array(col_list).reshape((-1, 1)) / period[0] - # y_list = jnp.array(row_list).reshape((-1, 1)) / period[1] - # - # return ucell_layer, x_list, y_list - # - # def draw(self, layer_info_list): - # ucell_info_list = [] - # - # for layer_info in layer_info_list: - # ucell_layer, x_list, y_list = self.vector(layer_info) - # ucell_info_list.append([ucell_layer, x_list, y_list]) - # - # return ucell_info_list - # - # def put_refractive_index_in_ucell(self, ucell, mat_list, wl, type_complex=jnp.complex128): - # res = jnp.zeros(ucell.shape, dtype=type_complex) - # ucell_mask = jnp.array(ucell, dtype=type_complex) - # for i_mat, material in enumerate(mat_list): - # mask = jnp.nonzero(ucell_mask == i_mat) - # - # if type(material) == str: - # if not self.mat_table: - # self.mat_table = read_material_table() - # assign_value = find_nk_index(material, self.mat_table, wl) - # else: - # assign_value = type_complex(material) - # res = res.at[mask].set(assign_value) - # - # return res - - -# def put_permittivity_in_ucell_object(ucell_size, mat_list, obj_list, mat_table, wl, -# type_complex=jnp.complex128): -# """ -# under development -# """ -# res = jnp.zeros(ucell_size, dtype=type_complex) -# -# for material, obj_index in zip(mat_list, obj_list): -# if type(material) == str: -# res[obj_index] = find_nk_index(material, mat_table, wl, type_complex=type_complex) ** 2 -# else: -# res[obj_index] = material ** 2 -# -# return res - def find_nk_index(material, mat_table, wl): if material[-6:] == '__real': diff --git a/meent/on_jax/optimizer/optimizer.py b/meent/on_jax/optimizer/optimizer.py index 2e173f3..f561223 100644 --- a/meent/on_jax/optimizer/optimizer.py +++ b/meent/on_jax/optimizer/optimizer.py @@ -1,5 +1,12 @@ import jax -import optax + +try: + import optax +except TypeError as e: + import warnings + + warnings.warn('Importing optax failed. You can run RCWA but not optimization in JaxMeent. ' + 'One possible reason is python version: optax support python>=3.9.') from tqdm import tqdm @@ -9,37 +16,8 @@ class OptimizerJax: def __init__(self, *args, **kwargs): super().__init__() - # def _tree_flatten(self): - # children = (self.n_top, self.n_bot, self.theta, self.phi, self.psi, - # self.period, self.wavelength, self.ucell, self.ucell_info_list, self.thickness) - # aux_data = { - # 'backend': self.backend, - # 'grating_type': self.grating_type, - # 'pol': self.pol, - # 'fto': self.fto, - # 'ucell_materials': self.ucell_materials, - # 'connecting_algo': self.connecting_algo, - # 'perturbation': self.perturbation, - # 'device': self.device, - # 'type_complex': self.type_complex, - # 'fourier_type': self.fourier_type, - # } - # - # return children, aux_data - - # def _tree_flatten(self): - # children = () - # aux_data = {} - # - # return children, aux_data - # - # @classmethod - # def _tree_unflatten(cls, aux_data, children): - # return cls(*children, **aux_data) - @staticmethod def _grad(params, forward, loss_fn): - def forward_pass(params, forward, loss): result = forward(**params) loss_value = loss(result) @@ -73,4 +51,3 @@ def step(params, opt_state): [setattr(self, poi, params[poi]) for poi in pois] return params - diff --git a/meent/on_numpy/emsolver/field_distribution.py b/meent/on_numpy/emsolver/field_distribution.py index 8752f2a..a0ad4c7 100644 --- a/meent/on_numpy/emsolver/field_distribution.py +++ b/meent/on_numpy/emsolver/field_distribution.py @@ -22,7 +22,7 @@ def field_dist_1d(wavelength, kx, T1, layer_info_list, period, z_1d = np.linspace(0, res_z, res_z).reshape((-1, 1, 1)) / res_z * d My = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - Mx = V @ (diag_exp_batch(-k0 * Q * z_1d) @ -c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + Mx = V @ (-diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) if pol == 0: Mz = -1j * Kx @ My @@ -110,10 +110,17 @@ def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, + W_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) Sy = W_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + W_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Ux = -V_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - - V_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Uy = -V_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - - V_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + + # Ux = -V_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + # - V_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + # Uy = -V_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + # - V_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + + Ux = V_11 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + + V_12 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Sz = -1j * epz_conv_i @ (Kx @ Uy - Ky @ Ux) Uz = -1j * (Kx @ Sy - Ky @ Sx) diff --git a/meent/on_numpy/emsolver/rcwa.py b/meent/on_numpy/emsolver/rcwa.py index ec79044..33d905d 100644 --- a/meent/on_numpy/emsolver/rcwa.py +++ b/meent/on_numpy/emsolver/rcwa.py @@ -19,7 +19,7 @@ def __init__(self, ucell_info_list=None, thickness=(0., ), backend=0, - grating_type=None, + grating_type=None, # TODO: remove modeling_type=None, pol=0., fto=(0, 0), @@ -52,10 +52,10 @@ def __init__(self, # grating type setting if self.grating_type is None: - if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2*np.pi) == 0): + if (type(self.ucell) is np.ndarray and self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2*np.pi) == 0): self._grating_type_assigned = 0 else: - self._grating_type_assigned = 2 + self._grating_type_assigned = 1 # TODO else: self._grating_type_assigned = self.grating_type @@ -65,6 +65,7 @@ def __init__(self, self._modeling_type_assigned = 0 elif self.ucell is None: self._modeling_type_assigned = 1 + self._grating_type_assigned = 1 else: raise ValueError('Define "modeling_type" in "call_mee" function.') else: @@ -76,7 +77,6 @@ def ucell(self): @ucell.setter def ucell(self, ucell): - self._modeling_type_assigned = 0 # Raster type if isinstance(ucell, np.ndarray): if ucell.dtype in (np.int64, np.float64, np.int32, np.float32): @@ -91,15 +91,24 @@ def ucell(self, ucell): else: raise ValueError + if self._ucell is not None: + self._modeling_type_assigned = 0 # Raster type + + if self._ucell.shape[1] == 1: # TODO + self._grating_type_assigned = 0 + else: + self._grating_type_assigned = 1 + @property def ucell_info_list(self): return self._ucell_info_list @ucell_info_list.setter def ucell_info_list(self, ucell_info_list): - - self._modeling_type_assigned = 1 # Vector type self._ucell_info_list = ucell_info_list + if ucell_info_list is not None: + self._modeling_type_assigned = 1 # Vector type + self._grating_type_assigned = 1 def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): @@ -169,10 +178,6 @@ def calculate_field(self, res_x=20, res_y=20, res_z=20): res_y = 1 field_cell = field_dist_1d(self.wavelength, kx, self.T1, self.layer_info_list, self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) - elif self._grating_type_assigned == 1: - res_y = 1 - field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) else: field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, type_complex=self.type_complex) diff --git a/meent/on_numpy/modeler/modeling.py b/meent/on_numpy/modeler/modeling.py index 9ff9820..ecd2a7f 100644 --- a/meent/on_numpy/modeler/modeling.py +++ b/meent/on_numpy/modeler/modeling.py @@ -44,10 +44,16 @@ def rectangle(self, cx, cy, lx, ly, n_index, angle=0, n_split_triangle=2, n_spli angle = angle.reshape(1) if lx.dtype not in (np.complex64, np.complex128): - lx = lx.astype(self.type_complex) # TODO - if ly.dtype not in (np.complex64, np.complex128): - ly = ly.astype(self.type_complex) + if self.type_complex is np.complex128: + lx = lx.astype(np.float64) + else: + lx = lx.astype(np.float32) + if ly.dtype not in (np.complex64, np.complex128): + if self.type_complex is np.complex128: + ly = ly.astype(np.float64) + else: + ly = ly.astype(np.float32) # n_split_triangle, n_split_parallelogram = n_split_triangle + 2, n_split_parallelogram + 2 # if angle is None: @@ -529,7 +535,10 @@ def vector_per_layer_numeric(self, layer_info, x64=True): # top_left[0] for _ in range(100): - index = bisect_left(row_list, top_left[0].real, key=lambda x: x.real) + + # tODO: confirm bisect change + # index = bisect_left(row_list, top_left[0].real, key=lambda x: x.real) # python >=3.10 + index = bisect_left(row_list, top_left[0].real) if len(row_list) > index and top_left[0] == row_list[index]: perturbation += perturbation_unit if top_left[0] == 0: @@ -544,21 +553,16 @@ def vector_per_layer_numeric(self, layer_info, x64=True): break else: print('WARNING: Vector modeling has unexpected case. Backprop may not work as expected.') - index = bisect_left(row_list, top_left[0].real, key=lambda x: x.real) + # index = bisect_left(row_list, top_left[0].real, key=lambda x: x.real) + index = bisect_left(row_list, top_left[0].real) row_list.insert(index, top_left[0]) # bottom_right[0] for _ in range(100): - index = bisect_left(row_list, bottom_right[0].real, key=lambda x: x.real) + # index = bisect_left(row_list, bottom_right[0].real, key=lambda x: x.real) # python >=3.10 + index = bisect_left(row_list, bottom_right[0].real) if len(row_list) > index and bottom_right[0] == row_list[index]: perturbation += perturbation_unit - # if bottom_right[0] == 0: - # bottom_right[0] = bottom_right[0] + perturbation - # else: - # # bottom_right[0] = bottom_right[0] + (bottom_right[0] * perturbation) - # bottom_right[0] = bottom_right[0] - (bottom_right[0] * perturbation) - - # bottom_right[0] = bottom_right[0] + (bottom_right[0] * perturbation) bottom_right[0] = bottom_right[0] - (bottom_right[0] * perturbation) row_list.insert(index, bottom_right[0]) break @@ -568,12 +572,14 @@ def vector_per_layer_numeric(self, layer_info, x64=True): break else: print('WARNING: Vector modeling has unexpected case. Backprop may not work as expected.') - index = bisect_left(row_list, bottom_right[0].real, key=lambda x: x.real) + # index = bisect_left(row_list, bottom_right[0].real, key=lambda x: x.real) + index = bisect_left(row_list, bottom_right[0].real) row_list.insert(index, bottom_right[0]) # top_left[1] for _ in range(100): - index = bisect_left(col_list, top_left[1].real, key=lambda x: x.real) + # index = bisect_left(col_list, top_left[1].real, key=lambda x: x.real) # python >=3.10 + index = bisect_left(col_list, top_left[1].real) if len(col_list) > index and top_left[1] == col_list[index]: perturbation += perturbation_unit @@ -589,12 +595,14 @@ def vector_per_layer_numeric(self, layer_info, x64=True): break else: print('WARNING: Vector modeling has unexpected case. Backprop may not work as expected.') - index = bisect_left(col_list, top_left[1].real, key=lambda x: x.real) + # index = bisect_left(col_list, top_left[1].real, key=lambda x: x.real) + index = bisect_left(col_list, top_left[1].real) col_list.insert(index, top_left[1]) # bottom_right[1] for _ in range(100): - index = bisect_left(col_list, bottom_right[1].real, key=lambda x: x.real) + # index = bisect_left(col_list, bottom_right[1].real, key=lambda x: x.real) # python >=3.10 + index = bisect_left(col_list, bottom_right[1].real) if len(col_list) > index and bottom_right[1] == col_list[index]: perturbation += perturbation_unit # if bottom_right[1] == 0: @@ -612,7 +620,8 @@ def vector_per_layer_numeric(self, layer_info, x64=True): break else: print('WARNING: Vector modeling has unexpected case. Backprop may not work as expected.') - index = bisect_left(col_list, bottom_right[1].real, key=lambda x: x.real) + # index = bisect_left(col_list, bottom_right[1].real, key=lambda x: x.real) # python >=3.10 + index = bisect_left(col_list, bottom_right[1].real) col_list.insert(index, bottom_right[1]) if not row_list or row_list[-1] != self.period[1]: diff --git a/meent/on_torch/emsolver/_base.py b/meent/on_torch/emsolver/_base.py index e1a315f..1779a73 100644 --- a/meent/on_torch/emsolver/_base.py +++ b/meent/on_torch/emsolver/_base.py @@ -2,13 +2,9 @@ import numpy as np -from .primitives import Eig from .scattering_method import scattering_1d_1, scattering_1d_2, scattering_1d_3, scattering_2d_1, scattering_2d_wv, \ scattering_2d_2, scattering_2d_3 -# from .transfer_method import transfer_1d_1, transfer_1d_2, transfer_1d_3, transfer_1d_conical_1, transfer_1d_conical_2, \ -# transfer_1d_conical_3, transfer_2d_1, transfer_2d_wv, transfer_2d_2, transfer_2d_3 - from .transfer_method import (transfer_1d_1, transfer_1d_2, transfer_1d_3, transfer_1d_4, transfer_2d_1, transfer_2d_2, transfer_2d_3, transfer_2d_4) @@ -507,7 +503,8 @@ def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): # de_ri, de_ti, big_T1, self.rayleigh_r, self.rayleigh_t = transfer_2d_3(center, big_F, big_G, big_T, Z_I, Y_I, self.psi, self.theta, ff_xy, # delta_i0, k_I_z, k0, self.n_top, self.n_bot, k_II_z, device=self.device, # type_complex=self.type_complex) - de_ri, de_ti, big_T1 = transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, self.psi, self.theta, + # TODO: AA and BB + de_ri, de_ti, big_T1, AA, BB = transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, self.psi, self.theta, self.n_top, self.n_bot, device=self.device, type_complex=self.type_complex) self.T1 = big_T1 diff --git a/meent/on_torch/emsolver/field_distribution.py b/meent/on_torch/emsolver/field_distribution.py index 343e810..603fef0 100644 --- a/meent/on_torch/emsolver/field_distribution.py +++ b/meent/on_torch/emsolver/field_distribution.py @@ -28,7 +28,7 @@ def field_dist_1d(wavelength, kx, T1, layer_info_list, period, z_1d = torch.linspace(0, res_z, res_z, device=device, dtype=type_complex).reshape((-1, 1, 1)) / res_z * d My = W @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) - Mx = -V @ (diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) + Mx = V @ (-diag_exp_batch(-k0 * Q * z_1d) @ c1 + diag_exp_batch(k0 * Q * (z_1d - d)) @ c2) if pol == 0: Mz = -1j * Kx @ My else: @@ -101,7 +101,6 @@ def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, big_I = torch.eye((len(T1)), device=device, dtype=type_complex) - # From the first layer for idx_layer, (epz_conv_i, W, V, q, d, big_A_i, big_B) in enumerate(layer_info_list[::-1]): @@ -136,10 +135,21 @@ def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, + W_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) Sy = W_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + W_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Ux = -V_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - - V_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Uy = -V_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - - V_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + + # Ux = -V_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + # - V_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + # Uy = -V_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + # - V_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + + Ux = V_11 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch( + k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + + V_12 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch( + k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch( + k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch( + k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Sz = -1j * epz_conv_i @ (Kx @ Uy - Ky @ Ux) Uz = -1j * (Kx @ Sy - Ky @ Sx) @@ -147,7 +157,8 @@ def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, x_1d = torch.linspace(0, period[0], res_x, device=device, dtype=type_complex).reshape((1, -1, 1)) # y_1d = np.arange(res_y-1, -1, -1).reshape((-1, 1, 1)) * period[1] / res_y - y_1d = torch.linspace(0, period[1], res_y, device=device, dtype=type_complex)[::-1].reshape((-1, 1, 1)) + # y_1d = torch.linspace(0, period[1], res_y, device=device, dtype=type_complex)[::-1].reshape((-1, 1, 1)) + y_1d = torch.flip(torch.linspace(0, period[1], res_y, device=device, dtype=type_complex), dims=(0,)).reshape((-1, 1, 1)) x_2d = torch.tile(x_1d, (res_y, 1, 1)) x_2d = x_2d * kx * k0 @@ -167,9 +178,6 @@ def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, Hy = 1j * inv_fourier[:, :, None, :] @ Uy[:, None, None, :, :] Hz = 1j * inv_fourier[:, :, None, :] @ Uz[:, None, None, :, :] - # val = np.concatenate( - # (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), -1) - val = torch.cat( (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), -1) diff --git a/meent/on_torch/emsolver/fourier_analysis.py b/meent/on_torch/emsolver/fourier_analysis.py index 609f67e..bf6e7db 100644 --- a/meent/on_torch/emsolver/fourier_analysis.py +++ b/meent/on_torch/emsolver/fourier_analysis.py @@ -82,10 +82,12 @@ def dfs2d(cell, conti_x, conti_y, fto_x, fto_y, device=torch.device('cpu'), type conv_index_1 = circulant(fto_y, device=device) conv_index_2 = circulant(fto_x, device=device) - conv1d = dfs1d[:, conv_index_1] + conv1d_pre = dfs1d[:, conv_index_1] if conti_x ^ conti_y: - conv1d = torch.linalg.inv(conv1d) + conv1d = torch.linalg.inv(conv1d_pre) + else: + conv1d = conv1d_pre conv1d = conv1d.reshape((-1, ff_y ** 2)) diff --git a/meent/on_torch/emsolver/rcwa.py b/meent/on_torch/emsolver/rcwa.py index e0e8636..ccfe1ad 100644 --- a/meent/on_torch/emsolver/rcwa.py +++ b/meent/on_torch/emsolver/rcwa.py @@ -60,10 +60,10 @@ def __init__(self, # grating type setting if self.grating_type is None: - if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2*np.pi) == 0): + if (type(self.ucell) is torch.Tensor and self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2*np.pi) == 0): self._grating_type_assigned = 0 else: - self._grating_type_assigned = 2 + self._grating_type_assigned = 1 else: self._grating_type_assigned = self.grating_type @@ -73,6 +73,7 @@ def __init__(self, self._modeling_type_assigned = 0 elif self.ucell is None: self._modeling_type_assigned = 1 + self._grating_type_assigned = 1 else: raise ValueError('Define "modeling_type" in "call_mee" function.') else: @@ -105,15 +106,23 @@ def ucell(self, ucell): else: raise ValueError + if self._ucell is not None: + self._modeling_type_assigned = 0 # Raster type + + if self._ucell.shape[1] == 1: + self._grating_type_assigned = 0 + else: + self._grating_type_assigned = 1 @property def ucell_info_list(self): return self._ucell_info_list @ucell_info_list.setter def ucell_info_list(self, ucell_info_list): - - self._modeling_type_assigned = 1 # Vector type self._ucell_info_list = ucell_info_list + if ucell_info_list is not None: + self._modeling_type_assigned = 1 # Vector type + self._grating_type_assigned = 1 def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): @@ -165,31 +174,6 @@ def conv_solve(self, **kwargs): return de_ri, de_ti - # TODO: cleaning - - # if self.fourier_type == 0: - # E_conv_all, o_E_conv_all = to_conv_mat_raster_discrete(self.ucell, self.fourier_order[0], self.fourier_order[1], - # device=self.device, type_complex=self.type_complex, - # improve_dft=self.improve_dft) - # elif self.fourier_type == 1: - # E_conv_all, o_E_conv_all = to_conv_mat_raster_continuous(self.ucell, self.fourier_order[0], self.fourier_order[1], - # device=self.device, type_complex=self.type_complex) - # elif self.fourier_type == 2: - # E_conv_all, o_E_conv_all = to_conv_mat_vector(self.ucell_info_list, self.fourier_order[0], - # self.fourier_order[1], - # type_complex=self.type_complex) - # - # else: - # raise ValueError - # - # de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1 = self._solve(self.wavelength, E_conv_all, o_E_conv_all) - # - # self.layer_info_list = layer_info_list - # self.T1 = T1 - # self.kx = kx - # - # return de_ri, de_ti - def calculate_field(self, res_x=20, res_y=20, res_z=20): kx, ky = self.get_kx_ky_vector(wavelength=self.wavelength) @@ -197,88 +181,12 @@ def calculate_field(self, res_x=20, res_y=20, res_z=20): res_y = 1 field_cell = field_dist_1d(self.wavelength, kx, self.T1, self.layer_info_list, self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, device=self.device, type_complex=self.type_complex) - elif self._grating_type_assigned == 1: - res_y = 1 - field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, - res_x=res_x, res_y=res_y, res_z=res_z, device=self.device, type_complex=self.type_complex) else: field_cell = field_dist_2d(self.wavelength, kx, ky, self.T1, self.layer_info_list, self.period, res_x=res_x, res_y=res_y, res_z=res_z, device=self.device, type_complex=self.type_complex) return field_cell - # if self.grating_type == 0: - # res_y = 1 - # if field_algo == 0: - # field_cell = field_dist_1d_vanilla(self.wavelength, self.kx, - # self.T1, self.layer_info_list, self.period, self.pol, - # res_x=res_x, res_y=res_y, res_z=res_z, - # device=self.device, type_complex=self.type_complex) - # elif field_algo == 1: - # field_cell = field_dist_1d_vectorized_ji(self.wavelength, self.kx, self.T1, self.layer_info_list, - # self.period, self.pol, res_x=res_x, res_y=res_y, res_z=res_z, - # device=self.device, type_complex=self.type_complex, - # type_float=self.type_float) - # elif field_algo == 2: - # field_cell = field_dist_1d(self.wavelength, self.kx, self.T1, - # self.layer_info_list, self.period, self.pol, - # res_x=res_x, res_y=res_y, res_z=res_z, - # device=self.device, type_complex=self.type_complex, - # type_float=self.type_float) - # else: - # raise ValueError - # elif self.grating_type == 1: - # res_y = 1 - # if field_algo == 0: - # field_cell = field_dist_1d_conical_vanilla(self.wavelength, self.kx, self.n_top, self.theta, - # self.phi, self.T1, self.layer_info_list, self.period, - # res_x=res_x, res_y=res_y, res_z=res_z, device=self.device, - # type_complex=self.type_complex) - # elif field_algo == 1: - # field_cell = field_dist_1d_conical_vectorized_ji(self.wavelength, self.kx, self.n_top, self.theta, - # self.phi, self.T1, self.layer_info_list, self.period, - # res_x=res_x, res_y=res_y, res_z=res_z, - # device=self.device, - # type_complex=self.type_complex, - # type_float=self.type_float) - # elif field_algo == 2: - # field_cell = field_dist_1d_conical_vectorized_kji(self.wavelength, self.kx, self.n_top, self.theta, - # self.phi, self.T1, self.layer_info_list, self.period, - # res_x=res_x, res_y=res_y, res_z=res_z, - # device=self.device, - # type_complex=self.type_complex, - # type_float=self.type_float) - # else: - # raise ValueError - # - # elif self.grating_type == 2: - # if field_algo == 0: - # field_cell = field_dist_2d_vanilla(self.wavelength, self.kx, self.n_top, self.theta, self.phi, - # self.fourier_order[0], self.fourier_order[1], self.T1, - # self.layer_info_list, self.period, - # res_x=res_x, res_y=res_y, res_z=res_z, device=self.device, - # type_complex=self.type_complex, type_float=self.type_float) - # elif field_algo == 1: - # field_cell = field_dist_2d_vectorized_ji(self.wavelength, self.kx, self.n_top, self.theta, - # self.phi, self.fourier_order[0], self.fourier_order[1], - # self.T1, self.layer_info_list, - # self.period, res_x=res_x, res_y=res_y, res_z=res_z, - # device=self.device, - # type_complex=self.type_complex, type_float=self.type_float) - # elif field_algo == 2: - # field_cell = field_dist_2d(self.wavelength, self.kx, self.n_top, self.theta, - # self.phi, self.fourier_order[0], self.fourier_order[1], - # self.T1, self.layer_info_list, - # self.period, res_x=res_x, res_y=res_y, res_z=res_z, - # device=self.device, - # type_complex=self.type_complex, type_float=self.type_float) - # else: - # raise ValueError - # else: - # raise ValueError - # - # return field_cell - def conv_solve_field(self, res_x=20, res_y=20, res_z=20, **kwargs): [setattr(self, k, v) for k, v in kwargs.items()] # needed for optimization diff --git a/meent/on_torch/emsolver/transfer_method.py b/meent/on_torch/emsolver/transfer_method.py index 464a58c..12b1df3 100644 --- a/meent/on_torch/emsolver/transfer_method.py +++ b/meent/on_torch/emsolver/transfer_method.py @@ -357,8 +357,8 @@ def transfer_2d_1(ff_x, ff_y, kx, ky, n_top, n_bot, device=torch.device('cpu'), kz_top = (n_top ** 2 - kx ** 2 - ky.reshape((-1, 1)) ** 2) ** 0.5 kz_bot = (n_bot ** 2 - kx ** 2 - ky.reshape((-1, 1)) ** 2) ** 0.5 - kz_top = kz_top.flatten().conjugate() - kz_bot = kz_bot.flatten().conjugate() + kz_top = torch.conj(kz_top).flatten() + kz_bot = torch.conj(kz_bot).flatten() varphi = torch.arctan(ky.reshape((-1, 1)) / kx).flatten() @@ -627,9 +627,9 @@ def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_top, n_bot, final_B = torch.cat( [ torch.cat([-torch.sin(psi) * delta_i0], dim=1), - torch.cat([-torch.cos(psi) * torch.cos(theta) * delta_i0], dim=1), + torch.cat([torch.cos(psi) * torch.cos(theta) * delta_i0], dim=1), torch.cat([-1j * torch.sin(psi) * n_top * torch.cos(theta) * delta_i0], dim=1), - torch.cat([1j * n_top * torch.cos(psi) * delta_i0], dim=1), + torch.cat([-1j * n_top * torch.cos(psi) * delta_i0], dim=1), ] ) diff --git a/meent/on_torch/modeler/modeling.py b/meent/on_torch/modeler/modeling.py index 48cce7a..295d28c 100644 --- a/meent/on_torch/modeler/modeling.py +++ b/meent/on_torch/modeler/modeling.py @@ -38,6 +38,8 @@ def __init__(self, period=None, *args, **kwargs): self.mat_table = None self.ucell_info_list = None self.period = period + self.type_complex = torch.complex128 + # self.type_float = torch.float64 self.film_layer = None @@ -56,6 +58,11 @@ def rectangle_no_approximation(cx, cy, lx, ly, base): def rectangle(self, cx, cy, lx, ly, n_index, angle=0, n_split_triangle=2, n_split_parallelogram=2, angle_margin=1E-5): + # if self.type_complex == torch.complex128: + # self.type_float = torch.float64 + # else: + # self.type_float = torch.float32 + if type(lx) in (int, float): lx = torch.tensor(lx).reshape(1) elif type(lx) is torch.Tensor: @@ -71,10 +78,21 @@ def rectangle(self, cx, cy, lx, ly, n_index, angle=0, n_split_triangle=2, n_spli elif type(angle) is torch.Tensor: angle = angle.reshape(1) - if lx.type not in (torch.complex64, torch.complex128): - lx = lx.type(self.type_complex) # TODO - if ly.type not in (torch.complex64, torch.complex128): - ly = ly.type(self.type_complex) + lx = lx.type(self.type_float) + ly = ly.type(self.type_float) + angle = angle.type(self.type_float) + + # if lx.dtype not in (torch.complex64, torch.complex128): + # if self.type_complex is torch.complex128: + # lx = lx.type(torch.float64) + # else: + # lx = lx.type(torch.float32) + # + # if ly.dtype not in (torch.complex64, torch.complex128): + # if self.type_complex is torch.complex128: + # ly = ly.type(torch.float64) + # else: + # ly = ly.type(torch.float32) # n_split_triangle, n_split_parallelogram = n_split_triangle + 2, n_split_parallelogram + 2 @@ -96,7 +114,7 @@ def rectangle(self, cx, cy, lx, ly, n_index, angle=0, n_split_triangle=2, n_spli pass # Yes rotation - rotate = torch.ones((2, 2), dtype=self.type_complex) + rotate = torch.ones((2, 2), dtype=self.type_float) rotate[0, 0] = torch.cos(angle) rotate[0, 1] = -torch.sin(angle) rotate[1, 0] = torch.sin(angle) @@ -182,34 +200,6 @@ def rectangle(self, cx, cy, lx, ly, n_index, angle=0, n_split_triangle=2, n_spli length = length_top12 / torch.sin(angle_inside) top3_cp = [top3[0] - length, top3[1]] - # for i in range(n_split_triangle + 1): - # x = top1[0] - (top1[0] - top2[0]) / n_split_triangle * i - # y = top1[1] - (top1[1] - top2[1]) / n_split_parallelogram * i - # xxx.append(x) - # yyy.append(y) - # - # xxx_cp.append(x + length / n_split_triangle * i) - # yyy_cp.append(y) - # - # for i in range(n_split_parallelogram + 1): - # - # x = top2[0] + (top3_cp[0] - top2[0]) / n_split_triangle * i - # y = top2[1] - (top2[1] - top3_cp[1]) / n_split_parallelogram * i - # xxx.append(x) - # yyy.append(y) - # - # xxx_cp.append(x + length) - # yyy_cp.append(y) - # - # for i in range(n_split_triangle + 1): - # x = top3_cp[0] + (top4[0] - top3_cp[0]) / n_split_triangle * i - # y = top3_cp[1] - (top3_cp[1] - top4[1]) / n_split_parallelogram * i - # xxx.append(x) - # yyy.append(y) - # - # xxx_cp.append(x + length / n_split_triangle * (n_split_triangle - i)) - # yyy_cp.append(y) - # 1: Upper triangle xxx1 = top1[0] - (top1[0] - top2[0]) / n_split_triangle * torch.arange(n_split_triangle+1).reshape((-1, 1)) yyy1 = top1[1] - (top1[1] - top2[1]) / n_split_parallelogram * torch.arange(n_split_triangle+1).reshape((-1, 1)) @@ -492,10 +482,22 @@ def ellipse(self, cx, cy, lx, ly, n_index, angle=0, n_split_w=2, n_split_h=2, an elif type(angle) is torch.Tensor: angle = angle.reshape(1) - if lx.type not in (torch.complex64, torch.complex128): - lx = lx.type(self.type_complex) # TODO - if ly.type not in (torch.complex64, torch.complex128): - ly = ly.type(self.type_complex) + # if lx.dtype not in (torch.complex64, torch.complex128): + # if self.type_complex is torch.complex128: + # lx = lx.type(torch.float64) + # else: + # lx = lx.type(torch.float32) + # + # if ly.dtype not in (torch.complex64, torch.complex128): + # if self.type_complex is torch.complex128: + # ly = ly.type(torch.float64) + # else: + # ly = ly.type(torch.float32) + + + lx = lx.type(self.type_float) + ly = ly.type(self.type_float) + angle = angle.type(self.type_float) angle = angle % (2 * torch.pi) @@ -571,8 +573,11 @@ def ellipse(self, cx, cy, lx, ly, n_index, angle=0, n_split_w=2, n_split_h=2, an ax, ay = arr[:, i] bx, by = arr_roll[:, i] - LL = [min(ay.real, by.real)+0j, min(ax.real, bx.real)+0j] - UR = [max(ay.real, by.real)+0j, max(ax.real, bx.real)+0j] + # LL = [min(ay.real, by.real)+0j, min(ax.real, bx.real)+0j] + # UR = [max(ay.real, by.real)+0j, max(ax.real, bx.real)+0j] + + LL = [min(ay.real, by.real), min(ax.real, bx.real)] + UR = [max(ay.real, by.real), max(ax.real, bx.real)] res.append([LL, UR, n_index]) @@ -605,7 +610,8 @@ def vector_per_layer_numeric(self, layer_info, x64=True): # top_left[0] for _ in range(100): - index = bisect_left(row_list, top_left[0].real, key=lambda x: x.real) + # index = bisect_left(row_list, top_left[0].real, key=lambda x: x.real) + index = bisect_left(row_list, top_left[0].real) if len(row_list) > index and top_left[0] == row_list[index]: perturbation += perturbation_unit if top_left[0] == 0: @@ -621,12 +627,14 @@ def vector_per_layer_numeric(self, layer_info, x64=True): break else: print('WARNING: Vector modeling has unexpected case. Backprop may not work as expected.') - index = bisect_left(row_list, top_left[0].real, key=lambda x: x.real) + # index = bisect_left(row_list, top_left[0].real, key=lambda x: x.real) + index = bisect_left(row_list, top_left[0].real) row_list.insert(index, top_left[0]) # bottom_right[0] for _ in range(100): - index = bisect_left(row_list, bottom_right[0].real, key=lambda x: x.real) + # index = bisect_left(row_list, bottom_right[0].real, key=lambda x: x.real) + index = bisect_left(row_list, bottom_right[0].real) if len(row_list) > index and bottom_right[0] == row_list[index]: perturbation += perturbation_unit # if bottom_right[0] == 0: @@ -645,12 +653,14 @@ def vector_per_layer_numeric(self, layer_info, x64=True): break else: print('WARNING: Vector modeling has unexpected case. Backprop may not work as expected.') - index = bisect_left(row_list, bottom_right[0].real, key=lambda x: x.real) + # index = bisect_left(row_list, bottom_right[0].real, key=lambda x: x.real) + index = bisect_left(row_list, bottom_right[0].real) row_list.insert(index, bottom_right[0]) # top_left[1] for _ in range(100): - index = bisect_left(col_list, top_left[1].real, key=lambda x: x.real) + # index = bisect_left(col_list, top_left[1].real, key=lambda x: x.real) + index = bisect_left(col_list, top_left[1].real) if len(col_list) > index and top_left[1] == col_list[index]: perturbation += perturbation_unit @@ -666,12 +676,14 @@ def vector_per_layer_numeric(self, layer_info, x64=True): break else: print('WARNING: Vector modeling has unexpected case. Backprop may not work as expected.') - index = bisect_left(col_list, top_left[1].real, key=lambda x: x.real) + # index = bisect_left(col_list, top_left[1].real, key=lambda x: x.real) + index = bisect_left(col_list, top_left[1].real) col_list.insert(index, top_left[1]) # bottom_right[1] for _ in range(100): - index = bisect_left(col_list, bottom_right[1].real, key=lambda x: x.real) + # index = bisect_left(col_list, bottom_right[1].real, key=lambda x: x.real) + index = bisect_left(col_list, bottom_right[1].real) if len(col_list) > index and bottom_right[1] == col_list[index]: perturbation += perturbation_unit # if bottom_right[1] == 0: @@ -689,7 +701,8 @@ def vector_per_layer_numeric(self, layer_info, x64=True): break else: print('WARNING: Vector modeling has unexpected case. Backprop may not work as expected.') - index = bisect_left(col_list, bottom_right[1].real, key=lambda x: x.real) + # index = bisect_left(col_list, bottom_right[1].real, key=lambda x: x.real) + index = bisect_left(col_list, bottom_right[1].real) col_list.insert(index, bottom_right[1]) if not row_list or row_list[-1] != self.period[1]: @@ -757,7 +770,7 @@ def put_refractive_index_in_ucell(self, ucell, mat_list, wl, device=torch.device return res # Optimization + Material table - def modeling_vector_instruction(self, rcwa_options, instructions): + def modeling_vector_instruction(self, instructions): # wavelength = rcwa_options['wavelength'] @@ -770,8 +783,6 @@ def modeling_vector_instruction(self, rcwa_options, instructions): # mat_table = read_material_table() - # TODO: refractive index support string for nI and nII - # Modeling layer_info_list = [] for i, layer in enumerate(instructions): diff --git a/setup.py b/setup.py index 1ef6a50..35ca149 100644 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ 'scipy>=1.9.1', ], extras_require=extras, - python_requires='>=3.10', + python_requires='>=3.8', long_description_content_type="text/markdown", package_data={ 'meent': ['nk_data/filmetrics/*.txt', 'nk_data/matlab/*.mat'], From 2689c62cbc2ff1c5158ff122f0d37b1f4b1d7f0b Mon Sep 17 00:00:00 2001 From: yonghakim Date: Wed, 7 Aug 2024 19:47:00 +0900 Subject: [PATCH 11/15] Updated JAXMeent and TorchMeent. --- QA/rcwa_backend_consistency.py | 22 +- QA/test_case.py | 207 --------------- benchmarks/benchmark_against_reticolo.py | 159 ----------- benchmarks/fft_method_comparison.py | 68 ----- benchmarks/fourier_analysis_methods.py | 60 +++++ benchmarks/reti_meent_1D.py | 9 +- benchmarks/reti_meent_1Dc.py | 5 +- benchmarks/reti_meent_2D.py | 42 +-- meent/on_jax/emsolver/rcwa.py | 160 +++--------- meent/on_jax/mee.py | 4 +- meent/on_jax/modeler/modeling.py | 4 +- meent/on_numpy/emsolver/convolution_matrix.py | 2 +- meent/on_numpy/emsolver/rcwa.py | 96 +++---- meent/on_numpy/modeler/modeling.py | 14 +- meent/on_torch/emsolver/rcwa.py | 99 +++---- meent/on_torch/modeler/modeling.py | 247 +----------------- 16 files changed, 210 insertions(+), 988 deletions(-) delete mode 100644 QA/test_case.py delete mode 100644 benchmarks/benchmark_against_reticolo.py delete mode 100644 benchmarks/fft_method_comparison.py create mode 100644 benchmarks/fourier_analysis_methods.py diff --git a/QA/rcwa_backend_consistency.py b/QA/rcwa_backend_consistency.py index e819f3c..d7279cd 100644 --- a/QA/rcwa_backend_consistency.py +++ b/QA/rcwa_backend_consistency.py @@ -93,11 +93,7 @@ def consistency_check_vector(option, instructions): 'enhanced_dfs': True, 'ucell': np.random.rand(5, 20, 20)*3+1, } - option5 = {'pol': 0, 'n_top': 2, 'n_bot': 1, 'theta': 12 * np.pi / 180, 'phi': 0 * np.pi / 180, 'fto': 0, - 'period': [770], 'wavelength': 777, 'thickness': [100], 'fourier_type': 0, - 'ucell': np.array([[[3, 3, 3, 3, 3, 1, 1, 1, 1, 1]], ])} - - instructions5 = [ + ucell5 = [ # layer 1 [1,[ ['rectangle', 0+240, 120+240, 160, 80, 4, 0, 0, 0], # obj 1 @@ -107,11 +103,11 @@ def consistency_check_vector(option, instructions): ], ], ] - option6 = {'pol': 0, 'n_top': 2, 'n_bot': 1, 'theta': 12 * np.pi / 180, 'phi': 0 * np.pi / 180, 'fto': [5,5], - 'period': [770], 'wavelength': 777, 'thickness': [100, 333], 'fourier_type': 0, - 'ucell': np.array([[[3, 3, 3, 3, 3, 1, 1, 1, 1, 1]], ])} + option5 = {'pol': 0, 'n_top': 2, 'n_bot': 1, 'theta': 12 * np.pi / 180, 'phi': 0 * np.pi / 180, 'fto': 0, + 'period': [770], 'wavelength': 777, 'thickness': [100], 'fourier_type': 0, + 'ucell': ucell5} - instructions6 = [ + ucell6 = [ # layer 1 [3 - 1j, [ ['rectangle', 0+1000, 410+1000, 160, 80, 4, 0, 0, 0], # obj 1 @@ -127,10 +123,14 @@ def consistency_check_vector(option, instructions): ['rectangle', -120+240, 0+240, 80, 160, 4, 2, 5, 5], # obj 4 ], ], ] + option6 = {'pol': 0, 'n_top': 2, 'n_bot': 1, 'theta': 12 * np.pi / 180, 'phi': 0 * np.pi / 180, 'fto': [5,5], + 'period': [770], 'wavelength': 777, 'thickness': [100, 333], 'fourier_type': 0, + 'ucell': ucell6} + consistency_check(option1) consistency_check(option2) consistency_check(option3) consistency_check(option4) - consistency_check_vector(option5, instructions5) - consistency_check_vector(option6, instructions6) + consistency_check(option5) + consistency_check(option6) diff --git a/QA/test_case.py b/QA/test_case.py deleted file mode 100644 index 8cb690c..0000000 --- a/QA/test_case.py +++ /dev/null @@ -1,207 +0,0 @@ -import numpy as np - -from meent.main import call_mee - - -def test(): - pol = 1 # 0: TE, 1: TM - - n_I = 1 # n_incidence - n_II = 1 # n_transmission - - theta = 1E-10 # in degree, notation from Moharam paper - phi = 40 # in degree, notation from Moharam paper - psi = 0 if pol else 90 # in degree, notation from Moharam paper - - wls = np.linspace(900, 900, 1) # wavelength - - fourier_order = 3 - - # 1D case - period = [700] - grating_type = 0 # 0: 1D, 1: 1D conical, 2:2D. - thickness = [460, 660] - - ucell = np.array([ - [ - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - ], - [ - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - ], - ]) - - AA = call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wls=wls, period=period, ucell=ucell, thickness=thickness) - de_ri, de_ti = AA.conv_solve() - print(de_ri, de_ti) - - # wavelength = np.linspace(500, 1000, 100) - # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, - # fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) - # de_ri, de_ti = AA.loop_wavelength_ucell() - # AA.plot() - - - ucell = np.array([ - [ - [n_I, n_I, n_I, n_I, n_I, n_I, n_I, n_I, n_I, n_I], - ], - [ - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - ], - [ - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - ], - [ - [n_II, n_II, n_II, n_II, n_II, n_II, n_II, n_II, n_II, n_II], - ], - ]) - - thickness = [200, 460, 660, 200] - - wls = np.linspace(900, 900, 1) # wavelength - - AA = call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wls=wls, period=period, ucell=ucell, thickness=thickness) - de_ri, de_ti = AA.conv_solve() - print(de_ri, de_ti) - - # wavelength = np.linspace(500, 1000, 100) - # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, - # fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) - # de_ri, de_ti = AA.loop_wavelength_ucell() - # AA.plot() - - # 1D conical case - period = [700] - grating_type = 1 # 0: 1D, 1: 1D conical, 2:2D. - thickness = [460, 660] - - ucell = np.array([ - [ - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - ], - [ - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - ], - ]) - - wls = np.linspace(900, 900, 1) # wavelength - AA = call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wls=wls, period=period, ucell=ucell, thickness=thickness) - de_ri, de_ti = AA.conv_solve() - print(de_ri, de_ti) - - # wavelength = np.linspace(500, 1000, 100) - # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, - # fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) - # de_ri, de_ti = AA.loop_wavelength_ucell() - # AA.plot() - - - ucell = np.array([ - [ - [n_I, n_I, n_I, n_I, n_I, n_I, n_I, n_I, n_I, n_I], - ], - [ - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - ], - [ - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - ], - [ - [n_II, n_II, n_II, n_II, n_II, n_II, n_II, n_II, n_II, n_II], - ], - ]) - - thickness = [200, 460, 660, 200] - - wls = np.linspace(900, 900, 1) # wavelength - - AA = call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wls=wls, period=period, ucell=ucell, thickness=thickness) - de_ri, de_ti = AA.conv_solve() - print(de_ri, de_ti) - - # wavelength = np.linspace(500, 1000, 100) - # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, - # fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) - # de_ri, de_ti = AA.loop_wavelength_ucell() - # AA.plot() - - - # 2D case - period = [700, 700] - grating_type = 2 # 0: 1D, 1: 1D conical, 2:2D. - thickness = [460, 660] - - ucell = np.array([ - [ - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - ], - [ - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - ], - ]) - - wls = np.linspace(900, 900, 1) # wavelength - AA = call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wls=wls, period=period, ucell=ucell, thickness=thickness) - de_ri, de_ti = AA.conv_solve() - print(de_ri, de_ti) - - # wavelength = np.linspace(500, 1000, 100) - # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, - # fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) - # de_ri, de_ti = AA.loop_wavelength_ucell() - # AA.plot() - - - ucell = np.array([ - [ - [n_I, n_I, n_I, n_I, n_I, n_I, n_I, n_I, n_I, n_I], - [n_I, n_I, n_I, n_I, n_I, n_I, n_I, n_I, n_I, n_I], - [n_I, n_I, n_I, n_I, n_I, n_I, n_I, n_I, n_I, n_I], - ], - [ - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - ], - [ - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - [1, 1, 1, 3.48**2, 3.48**2, 3.48**2, 1, 1, 1, 1], - ], - [ - [n_II, n_II, n_II, n_II, n_II, n_II, n_II, n_II, n_II, n_II], - [n_II, n_II, n_II, n_II, n_II, n_II, n_II, n_II, n_II, n_II], - [n_II, n_II, n_II, n_II, n_II, n_II, n_II, n_II, n_II, n_II], - ], - ]) - - thickness = [200, 460, 660, 200] - - - wls = np.linspace(900, 900, 1) # wavelength - - AA = call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wls=wls, period=period, ucell=ucell, thickness=thickness) - de_ri, de_ti = AA.conv_solve() - print(de_ri, de_ti) - - # wavelength = np.linspace(500, 1000, 100) - # AA = call_solver(backend=0, grating_type=grating_type, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, - # fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) - # de_ri, de_ti = AA.loop_wavelength_ucell() - # AA.plot() - # assert True - - -if __name__ == '__main__': - test() diff --git a/benchmarks/benchmark_against_reticolo.py b/benchmarks/benchmark_against_reticolo.py deleted file mode 100644 index bf016fa..0000000 --- a/benchmarks/benchmark_against_reticolo.py +++ /dev/null @@ -1,159 +0,0 @@ -import matplotlib.pyplot as plt -import numpy as np - -from meent import call_mee -from benchmarks.interface.Reticolo import Reticolo - - -def consistency(backend): - option = {} - option['grating_type'] = 0 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating - option['pol'] = 0 # 0: TE, 1: TM - option['n_top'] = 1 # n_incidence - option['n_bot'] = 1.5 # n_transmission - option['theta'] = 0 * np.pi / 180 - option['phi'] = 0 * np.pi / 180 - option['psi'] = 0 if option['pol'] else 90 * np.pi / 180 - option['fto'] = 40 - option['period'] = [1000] - option['wavelength'] = 650 - option['thickness'] = [500, 200, 100, 60, 432, 500] # final term is for h_substrate - - n_1 = 1 - n_2 = 3 - - ucell = np.array( - [ - [[1, 1, 1, 1, 1, 0, 0, 1, 1, 1,]], - [[1, 0, 0, 1, 0, 0, 0, 1, 1, 1,]], - [[1, 1, 0, 1, 1, 1, 1, 1, 0, 1,]], - [[1, 1, 1, 0, 1, 0, 0, 1, 1, 1,]], - [[0, 0, 1, 0, 1, 0, 0, 1, 1, 1,]], - [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0,]], - ]) * (n_2 - n_1) + n_1 - - option['ucell'] = ucell - - mee = call_mee(backend=backend, **option) - - # Reticolo - reti = Reticolo() - top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell_reti = reti.run_res3(**option) - - # top_refl_info = np.array([top_refl_info]) - # top_tran_info = np.array([top_tran_info]) - - center = top_tran_info.shape[0] // 2 - plot_length = min(center, 2) - - # print('reti de_ri', top_refl_info) - print('reticolo ; de_ri.sum(), de_ti.sum():', top_refl_info.sum(), top_tran_info.sum()) - plt.plot(top_tran_info[center - plot_length:center + plot_length + 1], label='reticolo', marker=4) - - # Meent with CFT - mee.fourier_type = 1 - de_ri, de_ti = mee.conv_solve() - # print('meent_cont de_ri', de_ri) - print('meent_cont; de_ri.sum(), de_ti.sum():', de_ri.sum(), de_ti.sum()) - center = de_ri.shape[0] // 2 - plt.plot(de_ti[center - plot_length:center + plot_length + 1], label='continuous', marker=6) - - # Meent with DFT - mee.fourier_type = 0 - de_ri, de_ti = mee.conv_solve() - # print('meent_disc de_ri', de_ri) - print('meent_disc; de_ri.sum(), de_ti.sum():', de_ri.sum(), de_ti.sum()) - center = de_ri.shape[0] // 2 - plt.plot(de_ti[center - plot_length:center + plot_length + 1], label='discrete', marker=5) - - plt.legend() - plt.show() - - field_cell_meent = mee.calculate_field() - mee.field_plot(field_cell_meent) - - -def consistency_jax(backend): - option = {} - option['grating_type'] = 0 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating - option['pol'] = 0 # 0: TE, 1: TM - option['n_top'] = 1 # n_incidence - option['n_bot'] = 1.5 # n_transmission - option['theta'] = 0 * np.pi / 180 - option['phi'] = 0 * np.pi / 180 - option['psi'] = 0 if option['pol'] else 90 * np.pi / 180 - option['fto'] = 0 - option['period'] = [1000] - option['wavelength'] = 650 - option['thickness'] = [500, 200, 100, 60, 432, 500] # final term is for h_substrate - - n_1 = 1 - n_2 = 3 - - ucell = np.array( - [ - [[1, 1, 1, 1, 1, 0, 0, 1, 1, 1,]], - [[1, 0, 0, 1, 0, 0, 0, 1, 1, 1,]], - [[1, 1, 0, 1, 1, 1, 1, 1, 0, 1,]], - [[1, 1, 1, 0, 1, 0, 0, 1, 1, 1,]], - [[0, 0, 1, 0, 1, 0, 0, 1, 1, 1,]], - [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0,]], - ]) * (n_2 - n_1) + n_1 - - option['ucell'] = ucell - - mee = call_mee(backend=backend, **option) - - # # Reticolo - # reti = Reticolo() - # top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell_reti = reti.run_res3(**option) - # - # top_refl_info = np.array([top_refl_info]) - # top_tran_info = np.array([top_tran_info]) - # - # center = top_tran_info.shape[0] // 2 - # plot_length = min(center, 2) - # - # # print('reti de_ri', top_refl_info) - # print('reticolo ; de_ri.sum(), de_ti.sum():', top_refl_info.sum(), top_tran_info.sum()) - # plt.plot(top_tran_info[center - plot_length:center + plot_length + 1], label='reticolo', marker=4) - - # Meent with CFT - mee.fourier_type = 1 - de_ri, de_ti = mee.conv_solve() - # print('meent_cont de_ri', de_ri) - print('meent_cont; de_ri.sum(), de_ti.sum():', de_ri.sum(), de_ti.sum()) - - # Meent with DFT - mee.enhanced_dfs = False - mee.fourier_type = 0 - de_ri, de_ti = mee.conv_solve() - # print('meent_disc de_ri', de_ri) - print('meent_disc; de_ri.sum(), de_ti.sum():', de_ri.sum(), de_ti.sum()) - - field_cell_meent = mee.calculate_field() - mee.field_plot(field_cell_meent) - - -if __name__ == '__main__': - - try: - print('NumpyMeent') - consistency(0) - except Exception as e: - print('NumpyMeent has problem.') - print(e) - - try: - print('JaxMeent') - consistency(1) - except Exception as e: - print('JaxMeent has problem. Do you have JAX?') - print(e) - - try: - print('TorchMeent') - consistency(2) - except Exception as e: - print('TorchMeent has problem. Do you have PyTorch?') - print(e) diff --git a/benchmarks/fft_method_comparison.py b/benchmarks/fft_method_comparison.py deleted file mode 100644 index 30ae372..0000000 --- a/benchmarks/fft_method_comparison.py +++ /dev/null @@ -1,68 +0,0 @@ -import numpy as np -import time - -from meent import call_mee -import torch - - -def compare_conv_mat_method(backend, type_complex, device): - - grating_type = 2 - - pol = 0 # 0: TE, 1: TM - n_I = 1 # n_incidence - n_II = 1.5 # n_transmission - - theta = 0 - phi = 0 - - wavelength = 900 - fourier_order = [5, 5] - - ucell = np.array([ - - [ - [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, ], - [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, ], - [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, ], - [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, ], - [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, ], - [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, ], - [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, ], - [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, ], - [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, ], - [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, ], - ], - ]) * 4 + 1 - - for thickness, period in zip([[1120], [500], [500], [1120]], [[100, 100], [100, 100], [1000, 1000], [1000, 1000]]): - - mee = call_mee(backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, - ucell_thickness=thickness, device=device, - type_complex=type_complex, ) - - mee.fourier_type = 0 - de_ri, de_ti = mee.conv_solve() - mee.fourier_type = 1 - de_ri1, de_ti1 = mee.conv_solve() - - try: - print('de_ri, de_ti norm: ', np.linalg.norm(de_ri - de_ri1), np.linalg.norm(de_ti - de_ti1)) - except: - print('de_ri, de_ti norm: ', torch.linalg.norm(de_ri - de_ri1), torch.linalg.norm(de_ti - de_ti1)) - - return - - -if __name__ == '__main__': - - dtype = 0 - device = 0 - - print('NumpyMeent') - compare_conv_mat_method(0, type_complex=dtype, device=device) - print('JaxMeent') - compare_conv_mat_method(1, type_complex=dtype, device=device) - print('TorchMeent') - compare_conv_mat_method(2, type_complex=dtype, device=device) diff --git a/benchmarks/fourier_analysis_methods.py b/benchmarks/fourier_analysis_methods.py new file mode 100644 index 0000000..850289d --- /dev/null +++ b/benchmarks/fourier_analysis_methods.py @@ -0,0 +1,60 @@ +import numpy as np + +from meent import call_mee + + +def compare_conv_mat_method(backend, type_complex, device): + + pol = 1 # 0: TE, 1: TM + n_top = 1.45 # n_incidence + n_bot = 1 # n_transmission + + theta = 0 + phi = 0 + + wavelength = 900 + fto = 80 + + ucell = [1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, 1, + 1, 1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, 1] + ucell = np.array(ucell).reshape((1, 1, -1)) + ucell = (ucell + 1) * 1.5 + 1 + + thickness = [325] + period = [abs(wavelength / np.sin(60 / 180 * np.pi))] + mee = call_mee(backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, + fto=fto, wavelength=wavelength, period=period, ucell=ucell, + thickness=thickness, device=device, type_complex=type_complex, ) + + mee.fourier_type = 0 + mee.enhanced_dfs = False + de_ri_dfs, de_ti_dfs = mee.conv_solve() + + mee.enhanced_dfs = True + de_ri_efs, de_ti_efs = mee.conv_solve() + + mee.fourier_type = 1 + de_ri_cfs, de_ti_cfs = mee.conv_solve() + + a = np.linalg.norm(de_ri_dfs - de_ri_efs) + b = np.linalg.norm(de_ti_dfs - de_ti_efs) + c = np.linalg.norm(de_ri_dfs - de_ri_cfs) + d = np.linalg.norm(de_ti_dfs - de_ti_cfs) + e = np.linalg.norm(de_ri_efs - de_ri_cfs) + f = np.linalg.norm(de_ti_efs - de_ti_cfs) + + print('DFS-EFS ', a, b) + print('DFS-CFS ', c, d) + print('EFS-CFS ', e, f) + + +if __name__ == '__main__': + dtype = 0 + device = 0 + + print('NumpyMeent') + compare_conv_mat_method(0, type_complex=dtype, device=device) + print('JaxMeent') + compare_conv_mat_method(1, type_complex=dtype, device=device) + print('TorchMeent') + compare_conv_mat_method(2, type_complex=dtype, device=device) diff --git a/benchmarks/reti_meent_1D.py b/benchmarks/reti_meent_1D.py index 2dfb73b..0e1f734 100644 --- a/benchmarks/reti_meent_1D.py +++ b/benchmarks/reti_meent_1D.py @@ -18,7 +18,6 @@ def test1d_1(plot_figure=False): factor = 1000 option = {} - option['grating_type'] = 0 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating option['pol'] = 0 # 0: TE, 1: TM option['n_top'] = 2 # n_incidence option['n_bot'] = 1 # n_transmission @@ -27,8 +26,7 @@ def test1d_1(plot_figure=False): option['fto'] = 1 option['period'] = [770/factor] option['wavelength'] = 777/factor - option['thickness'] = [100/factor, 100/factor, 100/factor, 100/factor, 100/factor, 100/factor] # final term is for h_substrate - # option['thickness'] = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1] # final term is for h_substrate + option['thickness'] = [100/factor,] option['fourier_type'] = 1 ucell = np.array( @@ -37,7 +35,6 @@ def test1d_1(plot_figure=False): ]) option['ucell'] = ucell - option['thickness'] = [100/factor,] # final term is for h_substrate res_z = 11 reti = Reticolo() @@ -107,7 +104,6 @@ def test1d_2(plot_figure=False): factor = 1 option = {} - option['grating_type'] = 0 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating option['pol'] = 1 # 0: TE, 1: TM option['n_top'] = 1 # n_incidence option['n_bot'] = 2.2 # n_transmission @@ -116,8 +112,7 @@ def test1d_2(plot_figure=False): option['fto'] = 80 option['period'] = [770/factor] option['wavelength'] = 777/factor - # option['thickness'] = [100/factor, 100/factor, 100/factor, 100/factor, 100/factor, 100/factor] # final term is for h_substrate - option['thickness'] = [100/factor,] # final term is for h_substrate + option['thickness'] = [100/factor,] option['fourier_type'] = 1 ucell = np.array( diff --git a/benchmarks/reti_meent_1Dc.py b/benchmarks/reti_meent_1Dc.py index 9acef6f..e7e8552 100644 --- a/benchmarks/reti_meent_1Dc.py +++ b/benchmarks/reti_meent_1Dc.py @@ -17,7 +17,6 @@ def test1dc_1(plot_figure=False): factor = 100 option = {} - option['grating_type'] = 1 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating option['pol'] = 0 # 0: TE, 1: TM option['n_top'] = 2.2 # n_incidence option['n_bot'] = 2 # n_transmission @@ -26,8 +25,7 @@ def test1dc_1(plot_figure=False): option['fto'] = [40, 1] option['period'] = [770 / factor] option['wavelength'] = 777 / factor - # option['thickness'] = [100/factor, 100/factor, 100/factor, 100/factor, 100/factor, 100/factor] # final term is for h_substrate - option['thickness'] = [100 / factor, ] # final term is for h_substrate + option['thickness'] = [100 / factor, ] option['fourier_type'] = 1 ucell = np.array( @@ -100,7 +98,6 @@ def test1dc_1(plot_figure=False): def test1dc_2(plot_figure=False): factor = 10 option = {} - option['grating_type'] = 1 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating option['pol'] = 1 # 0: TE, 1: TM option['n_top'] = 1 # n_incidence option['n_bot'] = 2 # n_transmission diff --git a/benchmarks/reti_meent_2D.py b/benchmarks/reti_meent_2D.py index 32a3e4f..8c1fccc 100644 --- a/benchmarks/reti_meent_2D.py +++ b/benchmarks/reti_meent_2D.py @@ -26,7 +26,6 @@ def test2d_1(plot_figure=False): factor = 1 option = {} - option['grating_type'] = 2 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating option['pol'] = 1 # 0: TE, 1: TM option['n_top'] = 1 # n_incidence option['n_bot'] = 1 # n_transmission @@ -161,7 +160,6 @@ def test2d_2(plot_figure=False): factor = 1 option = {} - option['grating_type'] = 2 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating option['pol'] = 1 # 0: TE, 1: TM option['n_top'] = 1 # n_incidence option['n_bot'] = 1 # n_transmission @@ -377,7 +375,6 @@ def test2d_3(plot_figure=False): factor = 1 option = {} - option['grating_type'] = 2 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating option['pol'] = 1 # 0: TE, 1: TM option['n_top'] = 1 # n_incidence option['n_bot'] = 1 # n_transmission @@ -535,7 +532,6 @@ def test2d_4(plot_figure=False): factor = 1 option = {} - option['grating_type'] = 2 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating option['pol'] = 0 # 0: TE, 1: TM option['n_top'] = 1 # n_incidence option['n_bot'] = 1 # n_transmission @@ -682,7 +678,6 @@ def test2d_5(plot_figure=False): factor = 1 option = {} - option['grating_type'] = 2 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating option['pol'] = 0 # 0: TE, 1: TM option['n_top'] = 1 # n_incidence option['n_bot'] = 1 # n_transmission @@ -836,7 +831,6 @@ def test2d_6(plot_figure=False): factor = 1 option = {} - option['grating_type'] = 2 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating option['pol'] = 0 # 0: TE, 1: TM option['n_top'] = 1 # n_incidence option['n_bot'] = 1 # n_transmission @@ -848,11 +842,7 @@ def test2d_6(plot_figure=False): option['thickness'] = [220 / factor, ] # final term is for h_substrate option['fourier_type'] = 1 - # Numpy - backend = 0 - mee = meent.call_mee(backend=backend, **option) - - instructions = [ + ucell = [ # layer 1 [1, [ @@ -868,33 +858,11 @@ def test2d_6(plot_figure=False): ], ] - # instructions = [ - # # layer 1 - # [1, - # [ - # # obj 1 - # ['ellipse', 75, 225, 101.5, 81.5, si, 20 * np.pi / 180, 40, 40], - # # obj 2 - # ['rectangle', 225, 75, 98.5, 81.5, si, 0, 0, 0], - # ], - # ], - # # layer 2 - # [si3n4, - # [ - # # obj 1 - # ['rectangle', 50, 150, 31, 300, si, 0, 0, 0], - # # obj 2 - # ['rectangle', 200, 150, 49.5, 300, si, 0, 0, 0], - # ], - # ], - # # layer 3 - # [si, - # [] - # ], - # ] - - mee.modeling_vector_instruction(instructions) + option['ucell'] = ucell + # Numpy + backend = 0 + mee = meent.call_mee(backend=backend, **option) n_de_ri, n_de_ti = mee.conv_solve() n_field_cell = mee.calculate_field(res_z=res_z, res_y=50, res_x=50) # print('nmeent de_ri', n_de_ri) diff --git a/meent/on_jax/emsolver/rcwa.py b/meent/on_jax/emsolver/rcwa.py index 2937c80..55c1f7a 100644 --- a/meent/on_jax/emsolver/rcwa.py +++ b/meent/on_jax/emsolver/rcwa.py @@ -1,11 +1,10 @@ -import time -from functools import partial - import jax import numpy as np import jax.numpy as jnp +from functools import partial + from ._base import _BaseRCWA, jax_device_set from .convolution_matrix import to_conv_mat_raster_discrete, to_conv_mat_raster_continuous, to_conv_mat_vector from .field_distribution import field_dist_1d, field_dist_2d, field_plot @@ -21,11 +20,8 @@ def __init__(self, period=(100., 100.), wavelength=900., ucell=None, - ucell_info_list=None, thickness=(0., ), backend=0, - grating_type=None, - modeling_type=None, pol=0., fto=(0, 0), ucell_materials=None, @@ -33,9 +29,9 @@ def __init__(self, perturbation=1E-20, device='cpu', type_complex=np.complex128, - fourier_type=None, # 0 DFS, 1 EFS, 2 CFS + fourier_type=0, # 0 DFS, 1 CFS enhanced_dfs=True, - **kwargs, + # **kwargs, ): super().__init__(n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, psi=psi, pol=pol, @@ -45,61 +41,12 @@ def __init__(self, self.ucell = ucell self.ucell_materials = ucell_materials - self.ucell_info_list = ucell_info_list self.backend = backend - self.modeling_type = modeling_type - self._modeling_type_assigned = None - self.grating_type = grating_type - self._grating_type_assigned = None self.fourier_type = fourier_type self.enhanced_dfs = enhanced_dfs - - # grating type setting - if self.grating_type is None: - # TODO: JAX jit - if (isinstance(self._ucell, jnp.ndarray) and self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0): - self._grating_type_assigned = 0 - else: - self._grating_type_assigned = 1 - else: - self._grating_type_assigned = self.grating_type - - # modeling type setting - if self.modeling_type is None: - if self.ucell_info_list is None: - self._modeling_type_assigned = 0 - elif self.ucell is None: - self._modeling_type_assigned = 1 - self._grating_type_assigned = 1 - else: - raise ValueError('Define "modeling_type" in "call_mee" function.') - else: - self._modeling_type_assigned = self.modeling_type - - # def _tree_flatten(self): - # children = (self.n_top, self.n_bot, self.theta, self.phi, self.psi, - # self.period, self.wavelength, self.ucell, self.ucell_info_list, self.thickness) - # aux_data = { - # 'backend': self.backend, - # 'grating_type': self.grating_type, - # 'modeling_type': self.modeling_type, - # 'pol': self.pol, - # 'fto': self.fto, - # 'ucell_materials': self.ucell_materials, - # 'connecting_algo': self.connecting_algo, - # 'perturbation': self.perturbation, - # 'device': self.device, - # 'type_complex': self.type_complex, - # 'fourier_type': self.fourier_type, - # 'enhanced_dfs': self.enhanced_dfs, - # } - # - # return children, aux_data - # - # @classmethod - # def _tree_unflatten(cls, aux_data, children): - # return cls(*children, **aux_data) + self._modeling_type_assigned = None + self._grating_type_assigned = None @property def ucell(self): @@ -108,48 +55,56 @@ def ucell(self): @ucell.setter def ucell(self, ucell): - if ucell is not None: - self._modeling_type_assigned = 0 # Raster type - - if isinstance(ucell, jnp.ndarray): + if isinstance(ucell, (jnp.ndarray, np.ndarray)): # Raster if ucell.dtype in (jnp.float64, jnp.float32, jnp.int64, jnp.int32): dtype = self.type_float + self._ucell = ucell.astype(dtype) elif ucell.dtype in (jnp.complex128, jnp.complex64): dtype = self.type_complex - else: - raise ValueError - self._ucell = ucell.astype(dtype) - elif isinstance(ucell, np.ndarray): - if ucell.dtype in (np.int64, np.float64, np.int32, np.float32): + self._ucell = ucell.astype(dtype) + elif ucell.dtype in (np.int64, np.float64, np.int32, np.float32): dtype = self.type_float + self._ucell = jnp.array(ucell, dtype=dtype) elif ucell.dtype in (np.complex128, np.complex64): dtype = self.type_complex + self._ucell = jnp.array(ucell, dtype=dtype) else: raise ValueError - self._ucell = jnp.array(ucell, dtype=dtype) + elif type(ucell) is list: # Vector + self._ucell = ucell elif ucell is None: self._ucell = ucell else: raise ValueError - if self._ucell is not None: - self._modeling_type_assigned = 0 # Raster type + @property + def modeling_type_assigned(self): + return self._modeling_type_assigned + + @modeling_type_assigned.setter + def modeling_type_assigned(self, modeling_type_assigned): + self._modeling_type_assigned = modeling_type_assigned - if self._ucell.shape[1] == 1: - self._grating_type_assigned = 0 + def _assign_modeling_type(self): + + if isinstance(self.ucell, np.ndarray): # Raster + self.modeling_type_assigned = 0 + if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0): + self._grating_type_assigned = 0 # 1D TE and TM only else: - self._grating_type_assigned = 1 + self._grating_type_assigned = 1 # else + + elif isinstance(self.ucell, list): # Vector + self.modeling_type_assigned = 1 + self.grating_type_assigned = 1 @property - def ucell_info_list(self): - return self._ucell_info_list + def grating_type_assigned(self): + return self._grating_type_assigned - @ucell_info_list.setter - def ucell_info_list(self, ucell_info_list): - self._ucell_info_list = ucell_info_list - if ucell_info_list is not None: - self._modeling_type_assigned = 1 # Vector type - self._grating_type_assigned = 1 + @grating_type_assigned.setter + def grating_type_assigned(self, grating_type_assigned): + self._grating_type_assigned = grating_type_assigned def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): @@ -160,18 +115,17 @@ def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): return de_ri, de_ti, layer_info_list, T1 - # @_BaseRCWA.jax_device_set @jax_device_set def solve(self, wavelength, e_conv_all, o_e_conv_all): de_ri, de_ti, layer_info_list, T1, kx_vector = jax.jit(self._solve)(wavelength, e_conv_all, o_e_conv_all) self.layer_info_list = layer_info_list self.T1 = T1 - # self.kx = kx return de_ri, de_ti def _conv_solve(self, **kwargs): + self._assign_modeling_type() if self._modeling_type_assigned == 0: # Raster @@ -180,18 +134,6 @@ def _conv_solve(self, **kwargs): self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, enhanced_dfs=self.enhanced_dfs) - # if self.fourier_type == 0: - # enhance = False - # epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( - # self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, - # enhanced_dfs=enhance) - # - # elif (self.fourier_type == 1) or (self.fourier_type is None): - # enhance = True - # epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( - # self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, - # enhanced_dfs=enhance) - elif self.fourier_type == 1: epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_continuous( self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex) @@ -199,8 +141,9 @@ def _conv_solve(self, **kwargs): raise ValueError("Check 'modeling_type' and 'fourier_type' in 'conv_solve'.") elif self._modeling_type_assigned == 1: # Vector + ucell_vector = self.modeling_vector_instruction(self.ucell) epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_vector( - self.ucell_info_list, self.fto[0], self.fto[1], type_complex=self.type_complex) + ucell_vector, self.fto[0], self.fto[1], type_complex=self.type_complex) else: raise ValueError("Check 'modeling_type' and 'fourier_type' in 'conv_solve'.") @@ -216,8 +159,6 @@ def _conv_solve(self, **kwargs): def _conv_solve_jit(self): return self._conv_solve() - # TODO - # @_BaseRCWA.jax_device_set @jax_device_set def conv_solve(self, **kwargs): [setattr(self, k, v) for k, v in kwargs.items()] # needed for optimization @@ -229,13 +170,8 @@ def conv_solve(self, **kwargs): de_ri, de_ti, layer_info_list, T1 = self._conv_solve() # de_ri, de_ti, layer_info_list, T1 = self._conv_solve_jit() - # self.layer_info_list = layer_info_list - # self.T1 = T1 - return de_ri, de_ti - # TODO - # @_BaseRCWA.jax_device_set @jax_device_set def calculate_field(self, res_x=20, res_y=20, res_z=20): @@ -267,7 +203,6 @@ def conv_solve_field(self, res_x=20, res_y=20, res_z=20, **kwargs): field_cell = self.calculate_field(res_x, res_y, res_z) return de_ri, de_ti, field_cell - # TODO @jax_device_set def conv_solve_field_no_jit(self, res_x=20, res_y=20, res_z=20): de_ri, de_ti, _, _ = self._conv_solve() @@ -295,18 +230,3 @@ def run_ucell_pmap(self, ucell_list): de_ri = jnp.array(de_ri) de_ti = jnp.array(de_ti) return de_ri, de_ti - - - # def generate_spectrum(self, wl_list): - # ucell = deepcopy(self.ucell) - # spectrum_ri_pmap = jnp.zeros(wl_list.shape) - # spectrum_ti_pmap = jnp.zeros(wl_list.shape) - # for i, wavelength in enumerate(range(counter)): - # b = i * num_device - # de_ri_pmap, de_ti_pmap = jax.pmap(loop_wavelength)(wavelength_list[b:b + num_device], - # mat_pmtvy_interp[b:b + num_device]) - # - # spectrum_ri_pmap[b:b + num_device] = de_ri_pmap.sum(axis=(1, 2)) - # spectrum_ti_pmap[b:b + num_device] = de_ti_pmap.sum(axis=(1, 2)) - # - # return spectrum_ri_pmap, spectrum_ti_pmap diff --git a/meent/on_jax/mee.py b/meent/on_jax/mee.py index 77712e9..ec147a6 100644 --- a/meent/on_jax/mee.py +++ b/meent/on_jax/mee.py @@ -13,11 +13,9 @@ def __init__(self, *args, **kwargs): def _tree_flatten(self): # TODO: check again and find all tree flatten children = (self.n_top, self.n_bot, self.theta, self.phi, self.psi, - self.period, self.wavelength, self.ucell, self.ucell_info_list, self.thickness) + self.period, self.wavelength, self.ucell, self.thickness) aux_data = { 'backend': self.backend, - 'grating_type': self.grating_type, - 'modeling_type': self.modeling_type, 'pol': self.pol, 'fto': self.fto, 'ucell_materials': self.ucell_materials, diff --git a/meent/on_jax/modeler/modeling.py b/meent/on_jax/modeler/modeling.py index 7c587c5..5de06cf 100644 --- a/meent/on_jax/modeler/modeling.py +++ b/meent/on_jax/modeler/modeling.py @@ -17,13 +17,13 @@ def __init__(self, *args, **kwargs): # self.mat_table = None # def _tree_flatten(self): # TODO - # children = (self.n_I, self.n_II, self.theta, self.phi, self.psi, + # children = (self.n_top, self.n_bot, self.theta, self.phi, self.psi, # self.period, self.wavelength, self.ucell, self.ucell_info_list, self.thickness) # aux_data = { # 'backend': self.backend, # 'grating_type': self.grating_type, # 'pol': self.pol, - # 'fto': self.fourier_order, + # 'fto': self.fto, # 'ucell_materials': self.ucell_materials, # 'connecting_algo': self.algo, # 'perturbation': self.perturbation, diff --git a/meent/on_numpy/emsolver/convolution_matrix.py b/meent/on_numpy/emsolver/convolution_matrix.py index 24a5eed..ba44100 100644 --- a/meent/on_numpy/emsolver/convolution_matrix.py +++ b/meent/on_numpy/emsolver/convolution_matrix.py @@ -102,7 +102,7 @@ def to_conv_mat_raster_discrete(ucell, fto_x, fto_y, device=None, type_complex=n minimum_pattern_size_y = (4 * fto_y + 1) * ucell.shape[1] minimum_pattern_size_x = (4 * fto_x + 1) * ucell.shape[2] else: - minimum_pattern_size_y = 4 * fto_y + 1 # TODO: align with other bds + minimum_pattern_size_y = 4 * fto_y + 1 minimum_pattern_size_x = 4 * fto_x + 1 # e.g., 8 bytes * (40*500) * (40*500) / 1E6 = 3200 MB = 3.2 GB diff --git a/meent/on_numpy/emsolver/rcwa.py b/meent/on_numpy/emsolver/rcwa.py index 33d905d..d1eaa8d 100644 --- a/meent/on_numpy/emsolver/rcwa.py +++ b/meent/on_numpy/emsolver/rcwa.py @@ -1,4 +1,3 @@ -import time import numpy as np from ._base import _BaseRCWA @@ -16,11 +15,8 @@ def __init__(self, period=(100., 100.), wavelength=900., ucell=None, - ucell_info_list=None, thickness=(0., ), backend=0, - grating_type=None, # TODO: remove - modeling_type=None, pol=0., fto=(0, 0), ucell_materials=None, @@ -28,9 +24,9 @@ def __init__(self, perturbation=1E-20, device='cpu', type_complex=np.complex128, - fourier_type=None, # 0 DFS, 1 EFS, 2 CFS + fourier_type=0, # 0 DFS, 1 CFS enhanced_dfs=True, - **kwargs, + # **kwargs, ): super().__init__(n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, psi=psi, pol=pol, @@ -40,36 +36,12 @@ def __init__(self, self.ucell = ucell self.ucell_materials = ucell_materials - self.ucell_info_list = ucell_info_list self.backend = backend - self.modeling_type = modeling_type - self._modeling_type_assigned = None - self.grating_type = grating_type - self._grating_type_assigned = None self.fourier_type = fourier_type self.enhanced_dfs = enhanced_dfs - - # grating type setting - if self.grating_type is None: - if (type(self.ucell) is np.ndarray and self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2*np.pi) == 0): - self._grating_type_assigned = 0 - else: - self._grating_type_assigned = 1 # TODO - else: - self._grating_type_assigned = self.grating_type - - # modeling type setting - if self.modeling_type is None: - if self.ucell_info_list is None: - self._modeling_type_assigned = 0 - elif self.ucell is None: - self._modeling_type_assigned = 1 - self._grating_type_assigned = 1 - else: - raise ValueError('Define "modeling_type" in "call_mee" function.') - else: - self._modeling_type_assigned = self.modeling_type + self.modeling_type_assigned = None + self.grating_type_assigned = None @property def ucell(self): @@ -78,7 +50,7 @@ def ucell(self): @ucell.setter def ucell(self, ucell): - if isinstance(ucell, np.ndarray): + if isinstance(ucell, np.ndarray): # Raster if ucell.dtype in (np.int64, np.float64, np.int32, np.float32): dtype = self.type_float elif ucell.dtype in (np.complex128, np.complex64): @@ -86,29 +58,43 @@ def ucell(self, ucell): else: raise ValueError self._ucell = np.array(ucell, dtype=dtype) + self._ucell = ucell.astype(dtype) + + elif type(ucell) is list: # Vector + self._ucell = ucell elif ucell is None: self._ucell = ucell else: raise ValueError - if self._ucell is not None: - self._modeling_type_assigned = 0 # Raster type + @property + def modeling_type_assigned(self): + return self._modeling_type_assigned + + @modeling_type_assigned.setter + def modeling_type_assigned(self, modeling_type_assigned): + self._modeling_type_assigned = modeling_type_assigned + + def _assign_modeling_type(self): - if self._ucell.shape[1] == 1: # TODO - self._grating_type_assigned = 0 + if isinstance(self.ucell, np.ndarray): # Raster + self.modeling_type_assigned = 0 + if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0) and (self.fto[1] == 0): # TODO: other bds + self._grating_type_assigned = 0 # 1D TE and TM only else: - self._grating_type_assigned = 1 + self._grating_type_assigned = 1 # else + + elif isinstance(self.ucell, list): # Vector + self.modeling_type_assigned = 1 + self.grating_type_assigned = 1 @property - def ucell_info_list(self): - return self._ucell_info_list + def grating_type_assigned(self): + return self._grating_type_assigned - @ucell_info_list.setter - def ucell_info_list(self, ucell_info_list): - self._ucell_info_list = ucell_info_list - if ucell_info_list is not None: - self._modeling_type_assigned = 1 # Vector type - self._grating_type_assigned = 1 + @grating_type_assigned.setter + def grating_type_assigned(self, grating_type_assigned): + self._grating_type_assigned = grating_type_assigned def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): @@ -130,6 +116,7 @@ def solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): def conv_solve(self, **kwargs): # [setattr(self, k, v) for k, v in kwargs.items()] # no need in npmeent + self._assign_modeling_type() if self._modeling_type_assigned == 0: # Raster @@ -138,18 +125,6 @@ def conv_solve(self, **kwargs): self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, enhanced_dfs=self.enhanced_dfs) - # if self.fourier_type == 0: - # enhance = False - # epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( - # self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, - # enhanced_dfs=enhance) - # - # elif (self.fourier_type == 1) or (self.fourier_type is None): - # enhance = True - # epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_discrete( - # self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex, - # enhanced_dfs=enhance) - elif self.fourier_type == 1: epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_raster_continuous( self.ucell, self.fto[0], self.fto[1], type_complex=self.type_complex) @@ -157,12 +132,13 @@ def conv_solve(self, **kwargs): raise ValueError("Check 'modeling_type' and 'fourier_type' in 'conv_solve'.") elif self._modeling_type_assigned == 1: # Vector + ucell_vector = self.modeling_vector_instruction(self.ucell) epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_vector( - self.ucell_info_list, self.fto[0], self.fto[1], type_complex=self.type_complex) + ucell_vector, self.fto[0], self.fto[1], type_complex=self.type_complex) else: raise ValueError("Check 'modeling_type' and 'fourier_type' in 'conv_solve'.") - + # print(epz_conv_i_all) de_ri, de_ti, layer_info_list, T1 = self._solve(self.wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) self.layer_info_list = layer_info_list diff --git a/meent/on_numpy/modeler/modeling.py b/meent/on_numpy/modeler/modeling.py index ecd2a7f..f768448 100644 --- a/meent/on_numpy/modeler/modeling.py +++ b/meent/on_numpy/modeler/modeling.py @@ -659,16 +659,16 @@ def vector_per_layer_numeric(self, layer_info, x64=True): return ucell_layer, x_list, y_list def draw(self, layer_info_list): - ucell_info_list = [] - self.film_layer = np.zeros(len(layer_info_list)) + ucell_vector = [] + self.film_layer = np.zeros(len(layer_info_list)) # TODO: eig for homo layer for i, layer_info in enumerate(layer_info_list): ucell_layer, x_list, y_list = self.vector_per_layer_numeric(layer_info) - ucell_info_list.append([ucell_layer, x_list, y_list]) + ucell_vector.append([ucell_layer, x_list, y_list]) if len(x_list) == len(y_list) == 1: self.film_layer[i] = 1 - self.ucell_info_list = ucell_info_list - return ucell_info_list + # self.ucell_info_list = ucell_vector + return ucell_vector def put_refractive_index_in_ucell(self, ucell, mat_list, wl, type_complex=np.complex128): res = np.zeros(ucell.shape, dtype=type_complex) @@ -699,9 +699,9 @@ def modeling_vector_instruction(self, instructions): layer_info_list.append([base_refractive_index, obj_list_per_layer]) - ucell_info_list = self.draw(layer_info_list) + ucell_vector = self.draw(layer_info_list) - return ucell_info_list + return ucell_vector def find_nk_index(material, mat_table, wl): diff --git a/meent/on_torch/emsolver/rcwa.py b/meent/on_torch/emsolver/rcwa.py index ccfe1ad..599a346 100644 --- a/meent/on_torch/emsolver/rcwa.py +++ b/meent/on_torch/emsolver/rcwa.py @@ -18,11 +18,8 @@ def __init__(self, period=(100., 100.), wavelength=900., ucell=None, - ucell_info_list=None, thickness=(0., ), backend=2, - grating_type=None, - modeling_type=None, pol=0., fto=(0, 0), ucell_materials=None, @@ -30,9 +27,9 @@ def __init__(self, perturbation=1E-20, device='cpu', type_complex=torch.complex128, - fourier_type=None, + fourier_type=0, enhanced_dfs=True, - **kwargs, + # **kwargs, ): super().__init__(n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, psi=psi, pol=pol, @@ -42,42 +39,12 @@ def __init__(self, self.ucell = ucell self.ucell_materials = ucell_materials - self.ucell_info_list = ucell_info_list - - # self.backend = backend - # self.fft_type = fourier_type - # self.improve_dft = enhanced_dfs - # - # self.layer_info_list = [] self.backend = backend - self.modeling_type = modeling_type - self._modeling_type_assigned = None - self.grating_type = grating_type - self._grating_type_assigned = None self.fourier_type = fourier_type self.enhanced_dfs = enhanced_dfs - - # grating type setting - if self.grating_type is None: - if (type(self.ucell) is torch.Tensor and self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2*np.pi) == 0): - self._grating_type_assigned = 0 - else: - self._grating_type_assigned = 1 - else: - self._grating_type_assigned = self.grating_type - - # modeling type setting - if self.modeling_type is None: - if self.ucell_info_list is None: - self._modeling_type_assigned = 0 - elif self.ucell is None: - self._modeling_type_assigned = 1 - self._grating_type_assigned = 1 - else: - raise ValueError('Define "modeling_type" in "call_mee" function.') - else: - self._modeling_type_assigned = self.modeling_type + self._modeling_type_assigned = None + self._grating_type_assigned = None @property def ucell(self): @@ -85,44 +52,58 @@ def ucell(self): @ucell.setter def ucell(self, ucell): - if type(ucell) is torch.Tensor: + + if isinstance(ucell, (torch.Tensor, np.ndarray)): # Raster if ucell.dtype in (torch.complex128, torch.complex64): dtype = self.type_complex + self._ucell = ucell.to(device=self.device, dtype=dtype) elif ucell.dtype in (torch.float64, torch.float32, torch.int64, torch.int32): dtype = self.type_float - else: - raise ValueError - self._ucell = ucell.to(device=self.device, dtype=dtype) - elif isinstance(ucell, np.ndarray): - if ucell.dtype in (np.int64, np.float64, np.int32, np.float32): + self._ucell = ucell.to(device=self.device, dtype=dtype) + elif ucell.dtype in (np.int64, np.float64, np.int32, np.float32): dtype = self.type_float + self._ucell = torch.tensor(ucell, device=self.device, dtype=dtype) elif ucell.dtype in (np.complex128, np.complex64): dtype = self.type_complex + self._ucell = torch.tensor(ucell, device=self.device, dtype=dtype) else: raise ValueError - self._ucell = torch.tensor(ucell, device=self.device, dtype=dtype) + + elif type(ucell) is list: # Vector + self._ucell = ucell elif ucell is None: self._ucell = ucell else: raise ValueError - if self._ucell is not None: - self._modeling_type_assigned = 0 # Raster type + @property + def modeling_type_assigned(self): + return self._modeling_type_assigned + + @modeling_type_assigned.setter + def modeling_type_assigned(self, modeling_type_assigned): + self._modeling_type_assigned = modeling_type_assigned + + def _assign_modeling_type(self): - if self._ucell.shape[1] == 1: - self._grating_type_assigned = 0 + if isinstance(self.ucell, torch.Tensor): # Raster + self.modeling_type_assigned = 0 + if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0): + self._grating_type_assigned = 0 # 1D TE and TM only else: - self._grating_type_assigned = 1 + self._grating_type_assigned = 1 # else + + elif isinstance(self.ucell, list): # Vector + self.modeling_type_assigned = 1 + self.grating_type_assigned = 1 + @property - def ucell_info_list(self): - return self._ucell_info_list + def grating_type_assigned(self): + return self._grating_type_assigned - @ucell_info_list.setter - def ucell_info_list(self, ucell_info_list): - self._ucell_info_list = ucell_info_list - if ucell_info_list is not None: - self._modeling_type_assigned = 1 # Vector type - self._grating_type_assigned = 1 + @grating_type_assigned.setter + def grating_type_assigned(self, grating_type_assigned): + self._grating_type_assigned = grating_type_assigned def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): @@ -146,6 +127,7 @@ def solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): def conv_solve(self, **kwargs): [setattr(self, k, v) for k, v in kwargs.items()] # needed for optimization + self._assign_modeling_type() if self._modeling_type_assigned == 0: # Raster @@ -161,8 +143,9 @@ def conv_solve(self, **kwargs): raise ValueError("Check 'modeling_type' and 'fourier_type' in 'conv_solve'.") elif self._modeling_type_assigned == 1: # Vector + ucell_vector = self.modeling_vector_instruction(self.ucell) epx_conv_all, epy_conv_all, epz_conv_i_all = to_conv_mat_vector( - self.ucell_info_list, self.fto[0], self.fto[1], device=self.device, type_complex=self.type_complex) + ucell_vector, self.fto[0], self.fto[1], device=self.device, type_complex=self.type_complex) else: raise ValueError("Check 'modeling_type' and 'fourier_type' in 'conv_solve'.") diff --git a/meent/on_torch/modeler/modeling.py b/meent/on_torch/modeler/modeling.py index 295d28c..59ba1ef 100644 --- a/meent/on_torch/modeler/modeling.py +++ b/meent/on_torch/modeler/modeling.py @@ -58,11 +58,6 @@ def rectangle_no_approximation(cx, cy, lx, ly, base): def rectangle(self, cx, cy, lx, ly, n_index, angle=0, n_split_triangle=2, n_split_parallelogram=2, angle_margin=1E-5): - # if self.type_complex == torch.complex128: - # self.type_float = torch.float64 - # else: - # self.type_float = torch.float32 - if type(lx) in (int, float): lx = torch.tensor(lx).reshape(1) elif type(lx) is torch.Tensor: @@ -82,23 +77,6 @@ def rectangle(self, cx, cy, lx, ly, n_index, angle=0, n_split_triangle=2, n_spli ly = ly.type(self.type_float) angle = angle.type(self.type_float) - # if lx.dtype not in (torch.complex64, torch.complex128): - # if self.type_complex is torch.complex128: - # lx = lx.type(torch.float64) - # else: - # lx = lx.type(torch.float32) - # - # if ly.dtype not in (torch.complex64, torch.complex128): - # if self.type_complex is torch.complex128: - # ly = ly.type(torch.float64) - # else: - # ly = ly.type(torch.float32) - - # n_split_triangle, n_split_parallelogram = n_split_triangle + 2, n_split_parallelogram + 2 - - # if angle is None: - # angle = torch.tensor(0 * torch.pi / 180) - angle = angle % (2 * torch.pi) # No rotation @@ -192,9 +170,6 @@ def rectangle(self, cx, cy, lx, ly, n_index, angle=0, n_split_triangle=2, n_spli raise ValueError # point in region 1(top1~top2), 2(top2~top3) and 3(top3~top4) - - # xxx, yyy = [], [] - # xxx_cp, yyy_cp = [], [] if top2_left: length = length_top12 / torch.sin(angle_inside) @@ -227,47 +202,11 @@ def rectangle(self, cx, cy, lx, ly, n_index, angle=0, n_split_triangle=2, n_spli xxx_cp = torch.concat((xxx_cp1, xxx_cp2, xxx_cp3)) yyy_cp = torch.concat((yyy_cp1, yyy_cp2, yyy_cp3)) - # # ##### - # - # t00 = time.time() - # obj_list1 = [] - # - # for i in range(len(xxx)): - # if i == len(xxx) - 1: - # break - # x, y = xxx[i], yyy[i] - # x_cp, y_cp = xxx_cp[i], yyy_cp[i] - # - # x_next, y_next = xxx[i + 1], yyy[i + 1] - # x_cp_next, y_cp_next = xxx_cp[i + 1], yyy_cp[i + 1] - # - # x_mean = (x + x_next) / 2 - # x_cp_mean = (x_cp + x_cp_next) / 2 - # obj_list1.append([[y_cp_next, x_mean], [y, x_cp_mean], n_index]) - # t01 = time.time() - # - # - # t0=time.time() - # obj_list1 = [] - # x_mean_arr = (xxx + torch.roll(xxx, -1)) / 2 - # x_cp_mean_arr = (xxx_cp + torch.roll(xxx_cp, -1)) / 2 - # y_cp_next_arr = torch.roll(yyy_cp, -1) - # - # for i in range(len(xxx)-1): - # obj_list1.append([[y_cp_next_arr[i], x_mean_arr[i]], [yyy[i], x_cp_mean_arr[i]], n_index]) - # - # t1 =time.time() - x_mean_arr = (xxx + torch.roll(xxx, -1)) / 2 x_cp_mean_arr = (xxx_cp + torch.roll(xxx_cp, -1)) / 2 y_cp_next_arr = torch.roll(yyy_cp, -1) - obj_list1 = [[[y_cp_next_arr[i], x_mean_arr[i]], [yyy[i], x_cp_mean_arr[i]], n_index] for i in range(len(xxx)-1)] - - # t2 =time.time() - # print(t01-t00, t1-t0, t2-t1) - - # return obj_list1 + obj_list = [[[y_cp_next_arr[i], x_mean_arr[i]], [yyy[i], x_cp_mean_arr[i]], n_index] for i in range(len(xxx)-1)] else: length = length_top12 / torch.cos(angle_inside) @@ -281,15 +220,6 @@ def rectangle(self, cx, cy, lx, ly, n_index, angle=0, n_split_triangle=2, n_spli xxx_cp1 = xxx1 - length / n_split_triangle * torch.arange(n_split_triangle + 1).reshape((-1, 1)) yyy_cp1 = yyy1 * torch.ones(n_split_triangle + 1).reshape((-1, 1)) - # for i in range(n_split_triangle + 1): - # x = top1[0] + (top2[0] - top1[0]) / n_split_triangle * i - # y = top1[1] - (top1[1] - top2[1]) / n_split_parallelogram * i - # xxx.append(x) - # yyy.append(y) - # - # xxx_cp.append(x - length / n_split_triangle * i) - # yyy_cp.append(y) - # 2: Mid parallelogram xxx2 = top2[0] - (top2[0] - top3_cp[0]) / n_split_triangle * torch.arange( n_split_parallelogram + 1).reshape((-1, 1)) @@ -298,16 +228,6 @@ def rectangle(self, cx, cy, lx, ly, n_index, angle=0, n_split_triangle=2, n_spli xxx_cp2 = xxx2 - length * torch.ones(n_split_parallelogram + 1).reshape((-1, 1)) yyy_cp2 = yyy2 * torch.ones(n_split_parallelogram + 1).reshape((-1, 1)) - # for i in range(n_split_parallelogram + 1): - # - # x = top2[0] - (top2[0] - top3_cp[0]) / n_split_triangle * i - # y = top2[1] - (top2[1] - top3_cp[1]) / n_split_parallelogram * i - # xxx.append(x) - # yyy.append(y) - # - # xxx_cp.append(x - length) - # yyy_cp.append(y) - # 3: Lower triangle xxx3 = top3_cp[0] - (top3_cp[0] - top4[0]) / n_split_triangle * torch.arange(n_split_triangle + 1).reshape( (-1, 1)) @@ -324,146 +244,14 @@ def rectangle(self, cx, cy, lx, ly, n_index, angle=0, n_split_triangle=2, n_spli xxx_cp = torch.concat((xxx_cp1, xxx_cp2, xxx_cp3)) yyy_cp = torch.concat((yyy_cp1, yyy_cp2, yyy_cp3)) - # for i in range(n_split_triangle + 1): - # x = top3_cp[0] - (top3_cp[0] - top4[0]) / n_split_triangle * i - # y = top3_cp[1] - (top3_cp[1] - top4[1]) / n_split_parallelogram * i - # xxx.append(x) - # yyy.append(y) - # - # xxx_cp.append(x - length / n_split_triangle * (n_split_triangle - i)) - # yyy_cp.append(y) - x_mean_arr = (xxx + torch.roll(xxx, -1)) / 2 x_cp_mean_arr = (xxx_cp + torch.roll(xxx_cp, -1)) / 2 y_cp_next_arr = torch.roll(yyy_cp, -1) - obj_list1 = [[[y_cp_next_arr[i], x_cp_mean_arr[i]], [yyy[i], x_mean_arr[i]], n_index] for i in + obj_list = [[[y_cp_next_arr[i], x_cp_mean_arr[i]], [yyy[i], x_mean_arr[i]], n_index] for i in range(len(xxx) - 1)] - # obj_list1 = [] - # - # for i in range(len(xxx)): - # if i == len(xxx) - 1: - # break - # x, y = xxx[i], yyy[i] - # x_cp, y_cp = xxx_cp[i], yyy_cp[i] - # - # x_next, y_next = xxx[i + 1], yyy[i + 1] - # x_cp_next, y_cp_next = xxx_cp[i + 1], yyy_cp[i + 1] - # - # x_mean = (x + x_next) / 2 - # x_cp_mean = (x_cp + x_cp_next) / 2 - # obj_list1.append([[y_cp_next, x_cp_mean], [y, x_mean], n_index]) - - return obj_list1 - - # def ellipse(self, cx, cy, lx, ly, n_index, angle=0, n_split_w=2, n_split_h=2, angle_margin=1E-5): - # - # if type(lx) in (int, float): - # lx = torch.tensor(lx).reshape(1) - # elif type(lx) is torch.Tensor: - # lx = lx.reshape(1) - # - # if type(ly) in (int, float): - # ly = torch.tensor(ly).reshape(1) - # elif type(ly) is torch.Tensor: - # ly = ly.reshape(1) - # - # if type(angle) in (int, float): - # angle = torch.tensor(angle).reshape(1) - # elif type(angle) is torch.Tensor: - # angle = angle.reshape(1) - # - # if lx.type not in (torch.complex64, torch.complex128): - # lx = lx.type(self.type_complex) # TODO - # if ly.type not in (torch.complex64, torch.complex128): - # ly = ly.type(self.type_complex) - # - # angle = angle % (2 * torch.pi) - # - # - # points_x_origin = lx/2 * torch.cos(torch.linspace(torch.pi/2, 0, n_split_w)) - # points_y_origin = ly/2 * torch.sin(torch.linspace(-torch.pi/2, torch.pi/2, n_split_h)) - # - # vv = torch.sin(torch.linspace(torch.pi/2, 0, n_split_w)) - # # hh = torch.cos(torch.linspace(torch.pi, 0, n_split_w)) - # - # # horizontal_length = cx + lx/2 * hh - # vertical_length = ly/2 * vv - # - # axis_x_origin = torch.vstack([points_x_origin, torch.ones(len(points_x_origin))]) - # axis_y_origin = torch.vstack([torch.ones(len(points_y_origin)), points_y_origin]) - # - # rotate = torch.ones((2, 2), dtype=points_x_origin.dtype) - # rotate[0, 0] = torch.cos(angle) - # rotate[0, 1] = -torch.sin(angle) - # rotate[1, 0] = torch.sin(angle) - # rotate[1, 1] = torch.cos(angle) - # - # axis_x_origin_rot = rotate @ axis_x_origin - # axis_y_origin_rot = rotate @ axis_y_origin - # - # - # axis_x_rot = axis_x_origin_rot[:,:,None] - # axis_x_rot[0] += cx - # axis_x_rot[1] += cy - # - # axis_y_rot = axis_y_origin_rot[:,:,None] - # axis_y_rot[0] += cx - # axis_y_rot[1] += cy - # - # # points_origin_contour_rot = rotate @ points_origin_contour - # # points_contour_rot = points_origin_contour_rot[:, :, None] - # # points_contour_rot[0] += cx - # # points_contour_rot[1] += cy - # - # points = rotate @ torch.vstack((points_x_origin, points_y_origin)) - # points[0] += cx - # points[1] += cy - # - # # import matplotlib.pyplot as plt - # # - # # plt.scatter(*axis_x_rot.detach().numpy()) - # # plt.scatter(*axis_y_rot.detach().numpy()) - # - # # plt.scatter(*points_contour_rot.detach().numpy()) - # - # points = points[:, :, None] - # - # # res = [[[points[1][i], points[0][i]], [points[1][i+1], points[0][i+1]], n_index] for i in range(len(points[0])-1)] - # - # res = [[[axis_x_rot[1][i] - vertical_length[i]/torch.cos(angle), - # axis_x_rot[0][i]], - # [axis_x_rot[1][i] + vertical_length[i]/torch.cos(angle), - # axis_x_rot[0][i+1]], - # n_index] for i in range(len(points[0])-1)] - # - # res = [[[axis_x_rot[1][i] - vertical_length[i]/torch.cos(angle), - # axis_x_rot[0][i]], - # [axis_x_rot[1][i] + vertical_length[i]/torch.cos(angle), - # axis_x_rot[0][i+1]], - # n_index] for i in range(len(points[0])-1)] - # - # ress = [] - # for i in range(len(axis_x_rot[0])-1): - # LL = [axis_x_rot[1][i] - vertical_length[i], axis_x_rot[0][i]] - # UR = [axis_x_rot[1][i] + vertical_length[i], axis_x_rot[0][i+1]] - # - # center_x = (LL[1] + UR[1])/2 - # center_y = (LL[0] + UR[0])/2 - # - # alpha = center_x - cx - # beta = center_y - cy - # - # # reflection over the origin - # LL_pair = [LL[0] - 2*beta, LL[1] - 2*alpha] - # UR_pair = [UR[0] - 2*beta, UR[1] - 2*alpha] - # - # ress.append([LL, UR, n_index]) - # ress.append([LL_pair, UR_pair, n_index]) - # - # - # return ress, (axis_x_rot, axis_y_rot) + return obj_list def ellipse(self, cx, cy, lx, ly, n_index, angle=0, n_split_w=2, n_split_h=2, angle_margin=1E-5, debug=False): @@ -482,19 +270,6 @@ def ellipse(self, cx, cy, lx, ly, n_index, angle=0, n_split_w=2, n_split_h=2, an elif type(angle) is torch.Tensor: angle = angle.reshape(1) - # if lx.dtype not in (torch.complex64, torch.complex128): - # if self.type_complex is torch.complex128: - # lx = lx.type(torch.float64) - # else: - # lx = lx.type(torch.float32) - # - # if ly.dtype not in (torch.complex64, torch.complex128): - # if self.type_complex is torch.complex128: - # ly = ly.type(torch.float64) - # else: - # ly = ly.type(torch.float32) - - lx = lx.type(self.type_float) ly = ly.type(self.type_float) angle = angle.type(self.type_float) @@ -618,7 +393,6 @@ def vector_per_layer_numeric(self, layer_info, x64=True): top_left[0] = top_left[0] + perturbation else: - # top_left[0] = top_left[0] - (top_left[0] * perturbation) # TODO: plus or minus? top_left[0] = top_left[0] + (top_left[0] * perturbation) # TODO: change; save how many perturbations were applied in a variable row_list.insert(index, top_left[0]) break @@ -637,13 +411,6 @@ def vector_per_layer_numeric(self, layer_info, x64=True): index = bisect_left(row_list, bottom_right[0].real) if len(row_list) > index and bottom_right[0] == row_list[index]: perturbation += perturbation_unit - # if bottom_right[0] == 0: - # bottom_right[0] = bottom_right[0] + perturbation - # else: - # # bottom_right[0] = bottom_right[0] + (bottom_right[0] * perturbation) - # bottom_right[0] = bottom_right[0] - (bottom_right[0] * perturbation) - - # bottom_right[0] = bottom_right[0] + (bottom_right[0] * perturbation) bottom_right[0] = bottom_right[0] - (bottom_right[0] * perturbation) row_list.insert(index, bottom_right[0]) break @@ -667,7 +434,6 @@ def vector_per_layer_numeric(self, layer_info, x64=True): if top_left[1] == 0: top_left[1] = top_left[1] + perturbation else: - # top_left[1] = top_left[1] - (top_left[1] * perturbation) top_left[1] = top_left[1] + (top_left[1] * perturbation) col_list.insert(index, top_left[1]) break @@ -686,13 +452,6 @@ def vector_per_layer_numeric(self, layer_info, x64=True): index = bisect_left(col_list, bottom_right[1].real) if len(col_list) > index and bottom_right[1] == col_list[index]: perturbation += perturbation_unit - # if bottom_right[1] == 0: - # bottom_right[1] = bottom_right[1] + perturbation - # else: - # # bottom_right[1] = bottom_right[1] + (bottom_right[1] * perturbation) - # bottom_right[1] = bottom_right[1] - (bottom_right[1] * perturbation) - - # bottom_right[1] = bottom_right[1] + (bottom_right[1] * perturbation) bottom_right[1] = bottom_right[1] - (bottom_right[1] * perturbation) col_list.insert(index, bottom_right[1]) break From cf8decef351a0843df2fcc5a6adeccb7d90a92d3 Mon Sep 17 00:00:00 2001 From: yonghakim Date: Thu, 8 Aug 2024 23:30:20 +0900 Subject: [PATCH 12/15] Refactoring done. Scripts updated. --- QA/1D_grating_in_2D_pattern.py | 58 ++ QA/autograd_complex_ucell.py | 107 +++ ...d_numerical-grad.py => autograd_raster.py} | 126 ++- QA/autograd_vector.py | 84 ++ .../fourier_analysis_methods.py | 0 QA/fourier_expansion.py | 155 ---- QA/grad-vector-rectangle-rotate.py | 124 --- QA/grad-vector.py | 102 --- QA/grad_complex.py | 106 --- QA/grad_lost_in_pytorch.py | 29 - QA/rcwa_backend_consistency.py | 8 +- QA/run_debug.py | 84 -- QA/run_test.py | 93 --- QA/run_test2.py | 211 ----- QA/test.ipynb | 306 ------- benchmarks/interface/Reticolo.py | 123 ++- benchmarks/interface/reticolo_res2.m | 2 +- benchmarks/reti_meent_1D.py | 4 +- benchmarks/reti_meent_1Dc.py | 24 +- benchmarks/reti_meent_2D.py | 214 +---- benchmarks/reticolo.ipynb | 758 ------------------ examples/FourierTransform.ipynb | 323 -------- examples/electric-field-fno/data.py | 47 +- examples/electric-field-fno/main.py | 16 +- examples/electric-field-fno/models.py | 7 +- examples/electric-field-fno/utils.py | 9 +- examples/ocd/arxiv_ocd_optimize.py | 71 +- examples/rcwa/lalanne_2D.py | 259 ------ meent/on_jax/emsolver/rcwa.py | 12 +- meent/on_jax/emsolver/transfer_method.py | 3 +- meent/on_torch/emsolver/fourier_analysis.py | 2 + meent/on_torch/emsolver/transfer_method.py | 312 +------ 32 files changed, 514 insertions(+), 3265 deletions(-) create mode 100644 QA/1D_grating_in_2D_pattern.py create mode 100644 QA/autograd_complex_ucell.py rename QA/{auto-grad_numerical-grad.py => autograd_raster.py} (60%) create mode 100644 QA/autograd_vector.py rename {benchmarks => QA}/fourier_analysis_methods.py (100%) delete mode 100644 QA/fourier_expansion.py delete mode 100644 QA/grad-vector-rectangle-rotate.py delete mode 100644 QA/grad-vector.py delete mode 100644 QA/grad_complex.py delete mode 100644 QA/grad_lost_in_pytorch.py delete mode 100644 QA/run_debug.py delete mode 100644 QA/run_test.py delete mode 100644 QA/run_test2.py delete mode 100644 QA/test.ipynb delete mode 100644 benchmarks/reticolo.ipynb delete mode 100644 examples/FourierTransform.ipynb delete mode 100644 examples/rcwa/lalanne_2D.py diff --git a/QA/1D_grating_in_2D_pattern.py b/QA/1D_grating_in_2D_pattern.py new file mode 100644 index 0000000..4df7d8b --- /dev/null +++ b/QA/1D_grating_in_2D_pattern.py @@ -0,0 +1,58 @@ +import numpy as np + +from meent.main import call_mee + + +def test(): + backend = 0 + pol = 1 # 0: TE, 1: TM + + n_top = 1 # n_incidence + n_bot = 1 # n_transmission + + theta = 1E-10 # angle of incidence in radian + phi = 0 # azimuth angle in radian + + wavelength = 300 # wavelength + thickness = [460, 22] + period = [700, 700] + fto = [10, 0] + + # 1D + ucell = np.array([ + [ + [1, 1, 1, 3.48, 3.48, 3.48, 1, 1, 1, 1], + ], + [ + [1, 1, 1, 3.48, 3.48, 3.48, 1, 1, 1, 1], + ], + ]) + + AA = call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, + fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) + de_ri, de_ti = AA.conv_solve() + print('1D', de_ri.sum(), de_ti.sum()) + + # 2D case + + ucell = np.array([ + [ + [1, 1, 1, 3.48, 3.48, 3.48, 1, 1, 1, 1], + [1, 1, 1, 3.48, 3.48, 3.48, 1, 1, 1, 1], + [1, 1, 1, 3.48, 3.48, 3.48, 1, 1, 1, 1], + ], + [ + [1, 1, 1, 3.48, 3.48, 3.48, 1, 1, 1, 1], + [1, 1, 1, 3.48, 3.48, 3.48, 1, 1, 1, 1], + [1, 1, 1, 3.48, 3.48, 3.48, 1, 1, 1, 1], + ], + ]) + + AA = call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, + fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness) + de_ri, de_ti = AA.conv_solve() + print('2D', de_ri.sum(), de_ti.sum()) + + +if __name__ == '__main__': + test() diff --git a/QA/autograd_complex_ucell.py b/QA/autograd_complex_ucell.py new file mode 100644 index 0000000..e7b97ed --- /dev/null +++ b/QA/autograd_complex_ucell.py @@ -0,0 +1,107 @@ +import time + +import jax +import optax +import numpy as np +import jax.numpy as jnp + +import torch + +import meent +from meent.on_torch.optimizer.loss import LossDeflector + +type_complex = 0 +device = 0 +n_top = 1 # n_incidence +n_bot = 1 # n_transmission +theta = 0/180 * np.pi # angle of incidence +phi = 0/180 * np.pi # angle of rotation +wavelength = 900 + +pol = 0 # 0: TE, 1: TM +iteration = 20 + +fto = [5, 5] +period = [1000, 1000] # length of the unit cell. Here it's 1D. +thickness = [500] # thickness of each layer, from top to bottom. + +ucell = np.array([[[2.58941352 + 0.47745679j, 4.17771602 + 0.88991205j, + 2.04255624 + 2.23670125j, 2.50478974 + 2.05242759j, + 3.32747593 + 2.3854387j], + [2.80118605 + 0.53053715j, 4.46498861 + 0.10812571j, + 3.99377545 + 1.0441131j, 3.10728537 + 0.6637353j, + 4.74697849 + 0.62841253j], + [3.80944424 + 2.25899274j, 3.70371553 + 1.32586402j, + 3.8011133 + 1.49939415j, 3.14797238 + 2.91158289j, + 4.3085404 + 2.44344691j], + [2.22510179 + 2.86017146j, 2.36613053 + 2.82270351j, + 4.5087168 + 0.2035904j, 3.15559949 + 2.55311298j, + 4.29394604 + 0.98362617j], + [3.31324163 + 2.77590131j, 2.11744834 + 1.65894674j, + 3.59347907 + 1.28895345j, 3.85713467 + 1.90714056j, + 2.93805426 + 2.63385392j]]]) + +# JAX Meent +jmee = meent.call_mee(backend=1, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, + fto=fto, wavelength=wavelength, period=period, ucell=ucell, + thickness=thickness, type_complex=type_complex, device=device) + +pois = ['ucell', 'thickness'] # Parameter Of Interests +forward = jmee.conv_solve +loss_fn = LossDeflector(x_order=0, y_order=0) + +# case 1: Gradient +grad_j = jmee.grad(pois, forward, loss_fn) + +print('ucell gradient:') +print(grad_j['ucell']) +print('thickness gradient:') +print(grad_j['thickness']) + +optimizer = optax.sgd(learning_rate=1e-2) +t0 = time.time() +res_j = jmee.fit(pois, forward, loss_fn, optimizer, iteration=iteration) +print('Time JAX', time.time() - t0) + +print('ucell final:') +print(res_j['ucell']) +print('thickness final:') +print(res_j['thickness']) + +# Torch Meent +tmee = meent.call_mee(backend=2, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, + fto=fto, wavelength=wavelength, period=period, ucell=ucell, + thickness=thickness, type_complex=type_complex, device=device) + +forward = tmee.conv_solve +loss_fn = LossDeflector(x_order=0) # predefined in meent + +grad_t = tmee.grad(pois, forward, loss_fn) +print('ucell gradient:') +print(grad_t['ucell']) +print('thickness gradient:') +print(grad_t['thickness']) + +opt_torch = torch.optim.SGD +opt_options = {'lr': 1E-2} + +t0 = time.time() +res_t = tmee.fit(pois, forward, loss_fn, opt_torch, opt_options, iteration=iteration) +print('Time Torch: ', time.time() - t0) +print('ucell final:') +print(res_t[0]) +print('thickness final:') +print(res_t[1]) + +print('\n=============Difference between JaxMeent and TorchMeent==============================\n') +print('initial ucell gradient difference', np.linalg.norm(grad_j['ucell'].conj() - grad_t['ucell'].detach().numpy())) +print('initial thickness gradient difference', np.linalg.norm(grad_j['thickness'].conj() - grad_t['thickness'].detach().numpy())) + +print('final ucell difference', np.linalg.norm(res_j['ucell'] - res_t[0].detach().numpy())) +print('final thickness difference', np.linalg.norm(res_j['thickness'] - res_t[1].detach().numpy())) + +print('End') + +# Note that the gradient in JAX is conjugated. +# https://github.com/google/jax/issues/4891 +# https://pytorch.org/docs/stable/notes/autograd.html#autograd-for-complex-numbers diff --git a/QA/auto-grad_numerical-grad.py b/QA/autograd_raster.py similarity index 60% rename from QA/auto-grad_numerical-grad.py rename to QA/autograd_raster.py index bda1581..1794911 100644 --- a/QA/auto-grad_numerical-grad.py +++ b/QA/autograd_raster.py @@ -1,3 +1,8 @@ +import warnings +import jax +import jax.numpy as jnp +import torch + import numpy as np from copy import deepcopy @@ -8,8 +13,8 @@ def load_setting(): pol = 1 # 0: TE, 1: TM - n_I = 1 # n_incidence - n_II = 1 # n_transmission + n_top = 1 # n_incidence + n_bot = 1 # n_transmission theta = 0 * np.pi / 180 phi = 0 * np.pi / 180 @@ -17,10 +22,9 @@ def load_setting(): wavelength = 900 - fourier_order = [2, 2] + fto = [2, 2] # case 1 - grating_type = 2 period = [1000, 1000] thickness = [1120., 400, 300] @@ -41,69 +45,46 @@ def load_setting(): ] ) - # # case 2 - # grating_type = 2 - # period = [100, 100] - # thickness = [1120.] - # ucell = np.array([ - # [ - # [0, 0, 0, 1, 0, 1, 1, 1, 1, 1, ], - # [0, 0, 0, 1, 0, 1, 1, 1, 1, 1, ], - # [0, 0, 0, 1, 0, 1, 1, 1, 1, 1, ], - # [0, 0, 0, 1, 0, 1, 1, 1, 1, 1, ], - # [0, 0, 0, 1, 0, 1, 1, 1, 1, 1, ], - # [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ], - # [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ], - # [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ], - # [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ], - # [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ], - # ], - # ]) * 8 + 1. - # - # # case 3 - # grating_type = 0 # grating type: 0 for 1D grating without rotation (phi == 0) - # thickness = [500, 1000] # thickness of each layer, from top to bottom. - # ucell = np.array([ - # [[0, 0, 0, 1, 1, 1, 1, 0, 0, 0, ]], - # [[1, 1, 1, 1, 0, 1, 1, 1, 1, 1, ]], - # ]) * 4 + 1 # refractive index - # - # # case 4 - # grating_type = 2 - # - # thickness, period = [1120.], [1000, 1000] - # ucell = np.array( - # [ - # [ - # [3.5, 1.2, 1.5, 1.2, 3.3], - # [3.1, 1.5, 1.5, 1.4, 3.1], - # ], - # ] - # ) + # Case 4 + thickness = [1120] + + ucell = np.array([[[2.58941352 + 0.47745679j, 4.17771602 + 0.88991205j, + 2.04255624 + 2.23670125j, 2.50478974 + 2.05242759j, + 3.32747593 + 2.3854387j], + [2.80118605 + 0.53053715j, 4.46498861 + 0.10812571j, + 3.99377545 + 1.0441131j, 3.10728537 + 0.6637353j, + 4.74697849 + 0.62841253j], + [3.80944424 + 2.25899274j, 3.70371553 + 1.32586402j, + 3.8011133 + 1.49939415j, 3.14797238 + 2.91158289j, + 4.3085404 + 2.44344691j], + [2.22510179 + 2.86017146j, 2.36613053 + 2.82270351j, + 4.5087168 + 0.2035904j, 3.15559949 + 2.55311298j, + 4.29394604 + 0.98362617j], + [3.31324163 + 2.77590131j, 2.11744834 + 1.65894674j, + 3.59347907 + 1.28895345j, 3.85713467 + 1.90714056j, + 2.93805426 + 2.63385392j]]]) + ucell = ucell.real type_complex = 0 device = 0 - return grating_type, pol, n_I, n_II, theta, phi, psi, wavelength, thickness, period, fourier_order, \ - type_complex, device, ucell - + return pol, n_top, n_bot, theta, phi, psi, wavelength, thickness, period, fto, type_complex, device, ucell -def optimize_jax(): - import jax - import jax.numpy as jnp - grating_type, pol, n_I, n_II, theta, phi, psi, wavelength, thickness, period, fourier_order, \ - type_complex, device, ucell = load_setting() +def optimize_jax(setting): + pol, n_top, n_bot, theta, phi, psi, wavelength, thickness, period, fto, \ + type_complex, device, ucell = setting - mee = call_mee(backend=1, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, + mee = call_mee(backend=1, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, + fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness, device=device, - type_complex=type_complex, perturbation=1E-10) + type_complex=type_complex) ucell = mee.ucell @jax.grad def grad_loss(ucell): mee.ucell = ucell - de_ri, de_ti, _, _, _ = mee._conv_solve() + # de_ri, de_ti, _, _, _ = mee._conv_solve() + de_ri, de_ti = mee.conv_solve() try: loss = de_ti[de_ti.shape[0] // 2, de_ti.shape[1] // 2] except: @@ -117,10 +98,12 @@ def grad_numerical(ucell, delta): for c in range(ucell.shape[2]): ucell_delta_m = ucell.at[layer, r, c].set(ucell[layer, r, c] - delta) mee.ucell = ucell_delta_m - de_ri_delta_m, de_ti_delta_m, _, _, _ = mee._conv_solve() + # de_ri_delta_m, de_ti_delta_m, _, _, _ = mee._conv_solve() + de_ri_delta_m, de_ti_delta_m = mee.conv_solve() ucell_delta_p = ucell.at[layer, r, c].set(ucell[layer, r, c] + delta) mee.ucell = ucell_delta_p - de_ri_delta_p, de_ti_delta_p, _, _, _ = mee._conv_solve() + # de_ri_delta_p, de_ti_delta_p, _, _, _ = mee._conv_solve() + de_ri_delta_p, de_ti_delta_p = mee.conv_solve() try: grad_numeric = \ (de_ti_delta_p[de_ti_delta_p.shape[0] // 2, de_ti_delta_p.shape[1] // 2] @@ -140,18 +123,17 @@ def grad_numerical(ucell, delta): print('JAX norm: ', jnp.linalg.norm(grad_nume - grad_ad) / grad_nume.size) -def optimize_torch(): +def optimize_torch(setting): """ out of date. Will be updated. """ - import torch - grating_type, pol, n_I, n_II, theta, phi, psi, wavelength, thickness, period, fourier_order, \ - type_complex, device, ucell = load_setting() + pol, n_top, n_bot, theta, phi, psi, wavelength, thickness, period, fto, \ + type_complex, device, ucell = setting - tmee = call_mee(backend=2, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, + tmee = call_mee(backend=2, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, + fto=fto, wavelength=wavelength, period=period, ucell=ucell, thickness=thickness, device=device, type_complex=type_complex, ) tmee.ucell.requires_grad = True @@ -200,16 +182,10 @@ def grad_numerical(ucell, delta): if __name__ == '__main__': - try: - print('JaxMeent') - optimize_jax() - except Exception as e: - print('JaxMeent has problem. Do you have JAX?') - print(e) + setting = load_setting() - try: - print('TorchMeent') - optimize_torch() - except Exception as e: - print('TorchMeent has problem. Do you have PyTorch?') - print(e) + print('JaxMeent') + optimize_jax(setting) + + print('TorchMeent') + optimize_torch(setting) diff --git a/QA/autograd_vector.py b/QA/autograd_vector.py new file mode 100644 index 0000000..285ea27 --- /dev/null +++ b/QA/autograd_vector.py @@ -0,0 +1,84 @@ +import torch + +import meent + + +backend = 2 + +period = [1000., 1000.] +thickness = torch.tensor([300.]) +wavelength = 900 + +input_length1 = 160 +input_length2 = 100 +input_length3 = 30 +input_length4 = 20 + +fto = [5, 5] + +# layer_base = torch.tensor(n_index_base) +input_length1 = torch.tensor([input_length1], dtype=torch.float64, requires_grad=True) +input_length2 = torch.tensor([input_length2], dtype=torch.float64, requires_grad=True) +input_length3 = torch.tensor([input_length3], dtype=torch.float64, requires_grad=True) +input_length4 = torch.tensor([input_length4], dtype=torch.float64, requires_grad=True) + +mee = meent.call_mee(backend=backend, fto=fto, wavelength=wavelength, thickness=thickness, period=period, + device=0, type_complex=0) + +opt = torch.optim.SGD([input_length1, input_length2, input_length3, input_length4], lr=1E6, momentum=0.9) + + +def forward(length1, length2, length3, length4): + + ucell = [ + [3 - 1j, [ + ['rectangle', 0+1000, 410+1000, length1, 80, 4, 0, 0, 0], # obj 1 + ['ellipse', 0+1000, -10+1000, length2, 80, 4, 1, 20, 20], # obj 2 + ['rectangle', 120+1000, 500+1000, length3, 160, 4+0.3j, 1.1, 5, 5], # obj 3 + ['ellipse', -400+1000, -700+1000, length4, 160, 4, 0.4, 20, 20], # obj 4 + ], ], + ] + mee.ucell = ucell + + de_ri, de_ti = mee.conv_solve() + + center = de_ti.shape[0] // 2 + loss = -de_ti[center + 0, center + 0] + + return loss + + +for i in range(50): + print('Parameters: ', input_length1.detach().numpy(), input_length2.detach().numpy(), + input_length3.detach().numpy(), input_length4.detach().numpy()) + dx = 1E-5 + loss_a = forward(input_length1 + dx, input_length2, input_length3, input_length4) + loss_b = forward(input_length1 - dx, input_length2, input_length3, input_length4) + grad1 = (loss_a - loss_b) / (2 * dx) + + loss_a = forward(input_length1, input_length2 + dx, input_length3, input_length4) + loss_b = forward(input_length1, input_length2 - dx, input_length3, input_length4) + grad2 = (loss_a - loss_b) / (2 * dx) + + loss_a = forward(input_length1, input_length2, input_length3 + dx, input_length4) + loss_b = forward(input_length1, input_length2, input_length3 - dx, input_length4) + grad3 = (loss_a - loss_b) / (2 * dx) + + loss_a = forward(input_length1, input_length2, input_length3, input_length4 + dx) + loss_b = forward(input_length1, input_length2, input_length3, input_length4 - dx) + grad4 = (loss_a - loss_b) / (2 * dx) + + print('grad_nume: ', grad1.item(), grad2.item(), grad3.item(), grad4.item()) + + loss = forward(input_length1, input_length2, input_length3, input_length4) + loss.backward() + print('grad_auto: ', input_length1.grad.numpy()[0], input_length2.grad.numpy()[0], input_length3.grad.numpy()[0], + input_length4.grad.numpy()[0]) + + opt.step() + opt.zero_grad() + print('Loss:', loss) + + print() + +print(input_length1, input_length2, input_length3, input_length4) diff --git a/benchmarks/fourier_analysis_methods.py b/QA/fourier_analysis_methods.py similarity index 100% rename from benchmarks/fourier_analysis_methods.py rename to QA/fourier_analysis_methods.py diff --git a/QA/fourier_expansion.py b/QA/fourier_expansion.py deleted file mode 100644 index 93ac531..0000000 --- a/QA/fourier_expansion.py +++ /dev/null @@ -1,155 +0,0 @@ -import numpy as np - - -def cfs(x, cell, fto, period, type_complex=np.complex128): - - cell_next = np.roll(cell, -1, axis=1) - cell_diff = cell_next - cell - - modes = np.arange(-2 * fto, 2 * fto + 1, 1) - - center = 2 * fto - nc = np.ones(len(modes), dtype=bool) - nc[center] = False - - x_next = np.vstack((np.roll(x, -1, axis=0)[:-1], period)) - x - - f = cell_diff @ np.exp(-1j * 2 * np.pi * x @ modes[None, :] / period, dtype=type_complex) - - f[:, nc] /= (1j * 2 * np.pi * modes[nc]) - f[:, center] = (cell @ np.vstack((x[0], x_next[:-1]))).flatten() / period - - return f - - -def fft_piecewise_constant(cell, x, y, fourier_order_x, fourier_order_y, type_complex=np.complex128): - - period_x, period_y = x[-1], y[-1] - - # X axis - cell_next_x = np.roll(cell, -1, axis=1) - cell_diff_x = cell_next_x - cell - cell_diff_x = cell_diff_x.astype(type_complex) - - cell = cell.astype(type_complex) - - modes_x = np.arange(-2 * fourier_order_x, 2 * fourier_order_x + 1, 1) - - f_coeffs_x = cell_diff_x @ np.exp(-1j * 2 * np.pi * x @ modes_x[None, :] / period_x, dtype=type_complex) - c = f_coeffs_x.shape[1] // 2 - - x_next = np.vstack((np.roll(x, -1, axis=0)[:-1], period_x)) - x - - f_coeffs_x[:, c] = (cell @ np.vstack((x[0], x_next[:-1]))).flatten() / period_x - mask = np.ones(f_coeffs_x.shape[1], dtype=bool) - mask[c] = False - f_coeffs_x[:, mask] /= (1j * 2 * np.pi * modes_x[mask]) - - # Y axis - f_coeffs_x_next_y = np.roll(f_coeffs_x, -1, axis=0) - f_coeffs_x_diff_y = f_coeffs_x_next_y - f_coeffs_x - - modes_y = np.arange(-2 * fourier_order_y, 2 * fourier_order_y + 1, 1) - - f_coeffs_xy = f_coeffs_x_diff_y.T @ np.exp(-1j * 2 * np.pi * y @ modes_y[None, :] / period_y, dtype=type_complex) - c = f_coeffs_xy.shape[1] // 2 - - y_next = np.vstack((np.roll(y, -1, axis=0)[:-1], period_y)) - y - - f_coeffs_xy[:, c] = f_coeffs_x.T @ np.vstack((y[0], y_next[:-1])).flatten() / period_y - - if c: - mask = np.ones(f_coeffs_xy.shape[1], dtype=bool) - mask[c] = False - f_coeffs_xy[:, mask] /= (1j * 2 * np.pi * modes_y[mask]) - - return f_coeffs_xy.T - - -def cfs2d(cell, x, y, fto_x, fto_y, cx, cy, type_complex=np.complex128): - cell = cell.astype(type_complex) - - # (cx, cy) - # (1, 1): epz_conv; (0, 1): epx_conv; (1, 0): epy_conv - - period_x, period_y = x[-1], y[-1] - - # X axis - if cx == 0: # discontinuous in x: inverse rule is applied. - cell = 1 / cell - - fx = cfs(x, cell, fto_x, period_x) - - if cx == 0: # discontinuous in x: inverse rule is applied. - fx = np.linalg.inv(fx) - - # Y axis - if cy == 0: - fx = np.linalg.inv(fx) - - fxy = cfs(y, fx.T, fto_y, period_y).T - - if cy == 0: - fxy = np.linalg.inv(fxy) - - return fxy - - -def dfs2d(cell, cx, cy, type_complex=np.complex128): - cell = cell.astype(type_complex) - - # (cx, cy) - # (1, 1): epz_conv; (0, 1): epx_conv; (1, 0): epy_conv - - if cx == cy == 1: - res = np.fft.fft2(ucell/ucell.size).astype(type_complex) - - else: - rows, cols = cell.shape - - res = np.zeros([rows, cols], dtype=type_complex) - - if cx == 0: # discontinuous in x: inverse rule is applied. - cell = 1 / cell - - for r in range(rows): - res[r, :] = np.fft.fft(cell[r, :] / cols).astype(type_complex) - - if cx == 0: - res = np.linalg.inv(res) - - if cy == 0: # discontinuous in y: inverse rule is applied. - res = np.linalg.inv(res) - - for c in range(cols): - res[:, c] = np.fft.fft(res[:, c] / rows).astype(type_complex) - - if cy == 0: - res = np.linalg.inv(res) - - res = np.fft.fftshift(res) - - return res - - -if __name__ == '__main__': - - ucell = np.array([ - [1, 2, 3, 3, 2], - [5, 3, 2, 9, 4], - [1, 3, 6, 4, 1], - [5, 3, 5, 4, 2], - [3, 6, 6, 7, 1], - ]) - - f = np.fft.fftshift(np.fft.fft2(ucell/ucell.size)) - - a = dfs2d(ucell, 1, 1) - b = dfs2d(ucell, 1, 0) - c = dfs2d(ucell, 0, 1) - - x = np.array([1/5, 2/5, 3/5, 4/5, 1]).reshape((-1, 1)) - aa = cfs2d(ucell, x, x, 1, 1, 1, 1) - - aaa = fft_piecewise_constant(ucell, x, x, 1, 1) - diff --git a/QA/grad-vector-rectangle-rotate.py b/QA/grad-vector-rectangle-rotate.py deleted file mode 100644 index 9447064..0000000 --- a/QA/grad-vector-rectangle-rotate.py +++ /dev/null @@ -1,124 +0,0 @@ -import torch -import matplotlib.pyplot as plt - -import meent - - -torch.set_default_tensor_type(torch.DoubleTensor) -torch.set_default_dtype(torch.float64) - -backend = 2 - -period = [1000., 1000.] -thickness = torch.tensor([300.]) -wavelength = 900 - -length_x = 100 -length_y = 300 -c1 = [300, 500] - -n_index = 4 -n_index_base = 2 - -fourier_order = [5, 5] - -layer_base = torch.tensor(n_index_base) - -length_x = torch.tensor(length_x, dtype=torch.float64, requires_grad=True) -length_y = torch.tensor(length_y, dtype=torch.float64, requires_grad=True) - - -angle = torch.tensor((180 + 45)*torch.pi/180, requires_grad=True) - -mee = meent.call_mee(backend=backend, grating_type=2, fft_type=2, fourier_order=fourier_order, - wavelength=wavelength, thickness=thickness, period=period, device=0, type_complex=0) - -opt = torch.optim.SGD([length_x, length_y, angle], lr=1E2, momentum=1) - - -def forward(length1, length2, angle, c1): - - length1 = length1.type(torch.complex128) - length2 = length2.type(torch.complex128) - - obj_list = mee.rectangle(*c1, length1, length2, 5, 5, n_index, angle) - - layer_info_list = [[layer_base, obj_list]] - - mee.draw(layer_info_list) - - de_ri, de_ti = mee.conv_solve() - - center = de_ti.shape[0] // 2 - loss = -de_ti[center + 0, center + 0] - - return loss, obj_list - - -def plot(c, leng1, leng2, obj_list_out): - cx, cy = c - import matplotlib as mpl - fig, ax = plt.subplots() - rec = mpl.patches.Rectangle(xy=(cx - leng1.detach()/2, cy - leng2.detach()/2), - width=leng1.detach(), height=leng2.detach(), - angle=angle*180/torch.pi, rotation_point='center', alpha=0.2) - - ax.add_artist(rec) - - for obj in obj_list_out: - xy = (obj[0][1][0].detach(), obj[0][0][0].detach()) - width = abs(obj[1][1][0].detach() - obj[0][1][0].detach()) - height = abs(obj[1][0][0].detach() - obj[0][0][0].detach()) - rec = mpl.patches.Rectangle(xy=xy, width=width, height=height, - angle=0, rotation_point='center', alpha=0.2, facecolor='r') - ax.add_artist(rec) - - plt.xlim(0, period[0]) - plt.ylim(0, period[1]) - - plt.show() - - -for i in range(50): - - loss, obj_list_out = forward(length_x, length_y, angle, c1) - loss.backward() - print('loss', loss.detach().numpy()) - - print('grad_anal', - length_x.grad.detach().numpy(), - length_y.grad.detach().numpy(), - angle.grad.detach().numpy(), - ) - - - dx = 1E-6 - loss_a, _ = forward(length_x + dx, length_y, angle, c1) - loss_b, _ = forward(length_x - dx, length_y, angle, c1) - grad1 = (loss_a - loss_b) / (2 * dx) - - loss_a, _ = forward(length_x, length_y + dx, angle, c1) - loss_b, _ = forward(length_x, length_y - dx, angle, c1) - grad2 = (loss_a - loss_b) / (2 * dx) - - loss_a, _ = forward(length_x, length_y, angle + dx, c1) - loss_b, _ = forward(length_x, length_y, angle - dx, c1) - grad5 = (loss_a - loss_b) / (2 * dx) - - print('grad_nume', - grad1.detach().numpy(), - grad2.detach().numpy(), - grad5.detach().numpy(), - ) - - if i % 1 == 0: - plot(c1, length_x, length_y, obj_list_out) - - angle.grad.data.clamp_(-0.001, 0.001) - - opt.step() - opt.zero_grad() - - print() - -print(length_x, length_y, angle) diff --git a/QA/grad-vector.py b/QA/grad-vector.py deleted file mode 100644 index f36bb45..0000000 --- a/QA/grad-vector.py +++ /dev/null @@ -1,102 +0,0 @@ -import torch - -import meent - -from meent.on_torch.modeler.modeling import ModelingTorch - -backend = 2 - -period = [1000., 1000.] -thickness = torch.tensor([300.]) -wavelength = 900 - -input_length1 = 100 -input_length2 = 100 -input_length3 = 100 -input_length4 = 100 -c1 = [500, 500] -c2 = [700, 550] - - -n_index = 4 -n_index_base = 2 - -fourier_order = [5, 5] - -layer_base = torch.tensor(n_index_base) -input_length1 = torch.tensor(input_length1, dtype=torch.float64, requires_grad=True) -input_length2 = torch.tensor(input_length2, dtype=torch.float64, requires_grad=True) -input_length3 = torch.tensor(input_length3, dtype=torch.float64, requires_grad=True) -input_length4 = torch.tensor(input_length4, dtype=torch.float64, requires_grad=True) - -mee = meent.call_mee(backend=backend, grating_type=2, fft_type=2, fourier_order=fourier_order, - wavelength=wavelength, thickness=thickness, period=period, device=0, type_complex=0) - -opt = torch.optim.SGD([input_length1, input_length2, input_length3, input_length4], lr=1E0, momentum=1) - - -def forward(input_length1, input_length2, input_length3, input_length4, period, thickness, wavelength, c1, c2): - - length1 = input_length1.type(torch.complex128) - length2 = input_length2.type(torch.complex128) - length3 = input_length3.type(torch.complex128) - length4 = input_length4.type(torch.complex128) - - obj1_list = ModelingTorch.rectangle_no_approximation(*c1, length1, length2, n_index) - obj2_list = ModelingTorch.rectangle_no_approximation(*c2, length3, length4, n_index + 2) - - obj_list = obj1_list + obj2_list - - layer_info_list = [[layer_base, obj_list]] - ucell_info_list = mee.draw(layer_info_list) - - mee.ucell_info_list = ucell_info_list - - de_ri, de_ti = mee.conv_solve() - - center = de_ti.shape[0] // 2 - loss = -de_ti[center + 0, center + 0] - - return loss, obj_list - - -for i in range(50): - - loss, obj2_list = forward(input_length1, input_length2, input_length3, input_length4, period, thickness, wavelength, c1, c2) - print(loss) - loss.backward() - try: - print('grad_reti', input_length1.grad.numpy(), input_length2.grad.numpy(), input_length3.grad.numpy(), input_length4.grad.numpy()) - except: - print('grad_reti', input_length1.grad, input_length2.grad, input_length3.grad, input_length4.grad) - - dx = 1E-5 - loss_a, _ = forward(input_length1 + dx, input_length2, input_length3, input_length4, period, thickness, wavelength, c1, c2) - loss_b, _ = forward(input_length1 - dx, input_length2, input_length3, input_length4, period, thickness, wavelength, c1, c2) - grad1 = (loss_a - loss_b) / (2 * dx) - - loss_a, _ = forward(input_length1, input_length2 + dx, input_length3, input_length4, period, thickness, wavelength, c1, c2) - loss_b, _ = forward(input_length1, input_length2 - dx, input_length3, input_length4, period, thickness, wavelength, c1, c2) - grad2 = (loss_a - loss_b) / (2 * dx) - - loss_a, _ = forward(input_length1, input_length2, input_length3 + dx, input_length4, period, thickness, wavelength, c1, c2) - loss_b, _ = forward(input_length1, input_length2, input_length3 - dx, input_length4, period, thickness, wavelength, c1, c2) - grad3 = (loss_a - loss_b) / (2 * dx) - - loss_a, _ = forward(input_length1, input_length2, input_length3, input_length4 + dx, period, thickness, wavelength, c1, c2) - loss_b, _ = forward(input_length1, input_length2, input_length3, input_length4 - dx, period, thickness, wavelength, c1, c2) - grad4 = (loss_a - loss_b) / (2 * dx) - - print('grad_nume', grad1.detach().numpy(), grad2.detach().numpy(), grad3.detach().numpy(), grad4.detach().numpy()) - - input_length1.grad.data.clamp_(-0.1, 0.1) - input_length2.grad.data.clamp_(-0.1, 0.1) - input_length3.grad.data.clamp_(-0.1, 0.1) - input_length4.grad.data.clamp_(-0.1, 0.1) - - opt.step() - opt.zero_grad() - - print() - -print(input_length1, input_length2, input_length3, input_length4) diff --git a/QA/grad_complex.py b/QA/grad_complex.py deleted file mode 100644 index 77a52a5..0000000 --- a/QA/grad_complex.py +++ /dev/null @@ -1,106 +0,0 @@ -import time - -import jax -import optax -import numpy as np -import jax.numpy as jnp - -import torch - -import meent -from meent.on_torch.optimizer.loss import LossDeflector - -type_complex = 0 -device = 0 -n_I = 1 # n_incidence -n_II = 1 # n_transmission -theta = 0 * np.pi / 180 # angle of incidence -phi = 0 * np.pi / 180 # angle of rotation -wavelength = 900 - -pol = 0 # 0: TE, 1: TM - -# case 1 -iteration = 10000 -grating_type = 0 # grating type: 0 for 1D grating without rotation (phi == 0) -fourier_order = [10] -period = [1000] # length of the unit cell. Here it's 1D. -thickness = [500, 1000] # thickness of each layer, from top to bottom. -ucell = np.array([ - [[0, 0, 0, 1, 1, 1, 1, 0, 0, 0, ]], - [[1, 1, 1, 1, 0, 1, 1, 1, 1, 1, ]], -]) * 4 + 2 # refractive index - -# case 2 -iteration = 500 -grating_type = 2 # grating type: 0 for 1D grating without rotation (phi == 0) -fourier_order = [5, 5] -period = [1000, 1000] # length of the unit cell. Here it's 1D. -thickness = [500] # thickness of each layer, from top to bottom. -ucell = np.array([ - [ - [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, ], - [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, ], - [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, ], - [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, ], - [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, ], - [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, ], - [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, ], - [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, ], - [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, ], - [0, 0, 0, 1, 1, 0, 0, 0, 0, 0, ], - ], -]) * 4 + 1 - -# JAX Meent -jmee = meent.call_mee(backend=1, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, - thickness=thickness, type_complex=type_complex, device=device, fft_type=0, improve_dft=True) - -pois = ['ucell',] # Parameter Of Interests -forward = jmee.conv_solve -loss_fn = LossDeflector(x_order=0, y_order=0) -# TODO: LossDeflector cross-platform? - -# case 1: Gradient -grad = jmee.grad(pois, forward, loss_fn) - -print('ucell gradient:') -print(grad['ucell']) -# print('thickness gradient:') -# print(grad['thickness']) - -optimizer = optax.sgd(learning_rate=1e-2) -t0 = time.time() -res = jmee.fit(pois, forward, loss_fn, optimizer, iteration=iteration) -print('Time JAX', time.time() - t0) - -print('ucell final:') -print(res['ucell']) -# print('thickness final:') -# print(res['thickness']) - -# Torch Meent -tmee = meent.call_mee(backend=2, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell, - thickness=thickness, type_complex=type_complex, device=device, fft_type=0, improve_dft=True) - -forward = tmee.conv_solve -loss_fn = LossDeflector(x_order=0) # predefined in meent - -grad = tmee.grad(pois, forward, loss_fn) -print('ucell gradient:') -print(grad['ucell']) -# print('thickness gradient:') -# print(grad['thickness']) - -opt_torch = torch.optim.SGD -opt_options = {'lr': 1E-2} - -t0 = time.time() -res = tmee.fit(pois, forward, loss_fn, opt_torch, opt_options, iteration=iteration) -print('Time Torch: ', time.time() - t0) -print('ucell final:') -print(res[0]) -# print('thickness final:') -# print(res[1]) diff --git a/QA/grad_lost_in_pytorch.py b/QA/grad_lost_in_pytorch.py deleted file mode 100644 index e3431f8..0000000 --- a/QA/grad_lost_in_pytorch.py +++ /dev/null @@ -1,29 +0,0 @@ -import torch - - -class Compress(torch.autograd.Function): - - @staticmethod - def setup_context(ctx, inputs, output): - # layer_info, datatype = inputs - pass - - @staticmethod - def forward(col_list): - - x_list = torch.ones((len(col_list), 1)) - for i in range(len(col_list)): - x_list[i] = col_list[i] - return x_list - -# inside Autograd -col_list = [1, torch.tensor(2., requires_grad=True)] -x_list = Compress.apply(col_list) -print(x_list) - -# outside -x_list = torch.ones((len(col_list), 1)) -for i in range(len(col_list)): - x_list[i] = col_list[i] - -print(x_list) \ No newline at end of file diff --git a/QA/rcwa_backend_consistency.py b/QA/rcwa_backend_consistency.py index d7279cd..fd9db4b 100644 --- a/QA/rcwa_backend_consistency.py +++ b/QA/rcwa_backend_consistency.py @@ -127,10 +127,10 @@ def consistency_check_vector(option, instructions): 'period': [770], 'wavelength': 777, 'thickness': [100, 333], 'fourier_type': 0, 'ucell': ucell6} - consistency_check(option1) - consistency_check(option2) - consistency_check(option3) - consistency_check(option4) + # consistency_check(option1) + # consistency_check(option2) + # consistency_check(option3) + # consistency_check(option4) consistency_check(option5) consistency_check(option6) diff --git a/QA/run_debug.py b/QA/run_debug.py deleted file mode 100644 index 12aceea..0000000 --- a/QA/run_debug.py +++ /dev/null @@ -1,84 +0,0 @@ -import time -import numpy as np - -from meent.main import RCWA - - -def run_debug_cases(n_I, n_II, theta, phi, grating_type, pol): - - if grating_type == 0: - wls = np.linspace(500, 2300, 100) - fourier_order = 40 - period = [700] - patterns = [[3.48, 1, 0.3], [3.48, 1, 0.3]] # n_ridge, n_groove, fill_factor - phi = 0 - - - elif grating_type == 1: - wls = np.linspace(500, 2300, 100) - fourier_order = 10 - period = [700] - patterns = [[3.48, 1, 0.3], [3.48, 1, 0.3]] # n_ridge, n_groove, fill_factor - - elif grating_type == 2: - wls = np.linspace(500, 2300, 100) - fourier_order = 2 - period = [700, 700] - patterns = [[3.48, 1, [0.3, 1]], [3.48, 1, [0.3, 1]]] # n_ridge, n_groove, fill_factor - - if pol == 0: - psi = 90 - elif pol == 1: - psi = 0 - - # refractive index in grating layer - thickness = [460, 660] - - t0 = time.time() - res = RCWA(grating_type, n_I, n_II, theta, phi, psi, fourier_order, period, wls, - pol, patterns, thickness, algo='TMM') - res.loop_wavelength_fill_factor() - print(time.time() - t0) - res.plot() - - # t0 = time.time() - # res = RCWA(grating_type, n_top, n_bot, theta, phi, psi, fto, period, wavelength, - # pol, patterns, thickness, connecting_algo='SMM') - # - # res.loop_wavelength_fill_factor() - # print(time.time() - t0) - # res.plot() - -# run_debug_cases(2, 2, 31, 10, 2, 0) # PASSED -# run_debug_cases(2, 2, theta=30, phi=10, grating_type=2, pol=0) # SMM fail -# run_debug_cases(2, 2, theta=30, phi=0, grating_type=2, pol=0) # SMM Singular but PASSED -# run_debug_cases(2, 2, theta=30, phi=0, grating_type=2, pol=1) # SMM Singular but PASSED -# run_debug_cases(2, 2, theta=30, phi=10, grating_type=0, pol=1) # PASS -# run_debug_cases(2, 2, theta=30, phi=0, grating_type=0, pol=1) # SMM singular but PASS -# run_debug_cases(2, 2, theta=32, phi=10, grating_type=2, pol=1) # PASS - - -# run_debug_cases(2, 2, theta=30, phi=0, grating_type=2, pol=1) # SMM singular but PASS -# run_debug_cases(2, 2, theta=30, phi=10, grating_type=2, pol=1) # SMM FAIL -# run_debug_cases(2, 2, theta=20, phi=20, grating_type=2, pol=1) # PASS -# run_debug_cases(2, 2, theta=20, phi=10, grating_type=2, pol=1) # PASS -# run_debug_cases(3, 2, theta=np.arcsin(1/3), phi=10, grating_type=2, pol=1) # PASS - -# run_debug_cases(2, 2, theta=30, phi=10, grating_type=2, pol=1) # SMM FAIL -# run_debug_cases(2, 2, theta=31, phi=10, grating_type=2, pol=1) # PASS - -# run_debug_cases(2, 2, theta=30, phi=10, grating_type=0, pol=1) # SMM FAIL -# run_debug_cases(2, 2, theta=31, phi=10, grating_type=0, pol=1) # singular but pass - -run_debug_cases(2, 2, theta=30 + 1E-10, phi=10, grating_type=2, pol=0) # SMM weak FAIL -# run_debug_cases(2, 2, theta=31+1E-10, phi=10, grating_type=2, pol=0) # pass - -run_debug_cases(2, 2, theta=30, phi=10, grating_type=2, pol=0) # SMM FAIL -# run_debug_cases(2, 2, theta=31, phi=10, grating_type=2, pol=0) # singular but pass - -run_debug_cases(2, 2, theta=30 + 1E-10, phi=10, grating_type=2, pol=1) # SMM weak FAIL -# run_debug_cases(2, 2, theta=31+1E-10, phi=10, grating_type=2, pol=1) # PASS - -run_debug_cases(2, 2, theta=30, phi=10, grating_type=2, pol=1) # SMM FAIL -# run_debug_cases(2, 2, theta=31, phi=10, grating_type=2, pol=1) # PASS - diff --git a/QA/run_test.py b/QA/run_test.py deleted file mode 100644 index cad0e81..0000000 --- a/QA/run_test.py +++ /dev/null @@ -1,93 +0,0 @@ -import time -import numpy as np - -from meent.main import call_mee - - -def run_test(n_I, n_II, theta, phi, grating_type, pol): - - patterns = [[3.48, 1, 0.3], [3.48, 1, 0.3]] # n_ridge, n_groove, fill_factor - - if grating_type == 0: - wls = np.linspace(500, 1300, 100) - fourier_order = 40 - period = [700] - phi = 0 - - elif grating_type == 1: - wls = np.linspace(500, 1300, 100) - fourier_order = 10 - period = [700] - - elif grating_type == 2: - wls = np.linspace(500, 1300, 100) - fourier_order = 2 - period = [700, 700] - patterns = [[3.48, 1, [1, 0.3]], [3.48, 1, [1, 0.3]]] # n_ridge, n_groove, fill_factor - - if pol == 0: - psi = 90 - elif pol == 1: - psi = 0 - - thickness = [460, 660] - - t0 = time.time() - res = call_mee(0, grating_type, n_I, n_II, theta, phi, psi, fourier_order, period, wls, - pol, patterns, thickness, algo='TMM') - res.loop_wavelength_fill_factor() - print(time.time() - t0) - res.plot(title='TMM') - - # t0 = time.time() - # res = RCWA(grating_type, n_top, n_bot, theta, phi, psi, fto, period, wavelength, - # pol, patterns, thickness, connecting_algo='SMM') - # - # res.loop_wavelength_fill_factor() - # print(time.time() - t0) - # res.plot(title='SMM') - -# run_test(2, 2, theta=31, phi=10, grating_type=2, pol=0) # PASSED -# run_test(2, 2, theta=30, phi=10, grating_type=2, pol=0) # SMM fail -# run_test(2, 2, theta=30, phi=0, grating_type=2, pol=0) # SMM Singular but PASSED -# run_test(2, 2, theta=30, phi=0, grating_type=2, pol=1) # SMM Singular but PASSED -# run_test(2, 2, theta=30, phi=10, grating_type=0, pol=1) # PASS -# run_test(2, 2, theta=30, phi=0, grating_type=0, pol=1) # SMM singular but PASS -# run_test(2, 2, theta=32, phi=10, grating_type=2, pol=1) # PASS -# -# -# run_test(2, 2, theta=30, phi=0, grating_type=2, pol=1) # SMM singular but PASS -# run_test(2, 2, theta=30, phi=10, grating_type=2, pol=1) # SMM FAIL -# run_test(2, 2, theta=20, phi=20, grating_type=2, pol=1) # PASS -# run_test(2, 2, theta=20, phi=10, grating_type=2, pol=1) # PASS -# run_test(3, 2, theta=np.arcsin(1/3), phi=10, grating_type=2, pol=1) # PASS -# -# run_test(2, 2, theta=30, phi=10, grating_type=2, pol=1) # SMM FAIL -# run_test(2, 2, theta=31, phi=10, grating_type=2, pol=1) # PASS -# -# run_test(2, 2, theta=30, phi=10, grating_type=0, pol=1) # SMM FAIL -# run_test(2, 2, theta=31, phi=10, grating_type=0, pol=1) # singular but pass -# -# run_test(2, 2, theta=30+1E-10, phi=10, grating_type=2, pol=0) # SMM weak FAIL -# run_test(2, 2, theta=31+1E-10, phi=10, grating_type=2, pol=0) # pass -# -# run_test(2, 2, theta=30, phi=10, grating_type=2, pol=0) # SMM FAIL -# run_test(2, 2, theta=31, phi=10, grating_type=2, pol=0) # singular but pass -# -# run_test(2, 2, theta=30+1E-10, phi=10, grating_type=2, pol=1) # SMM weak FAIL -# run_test(2, 2, theta=31+1E-10, phi=10, grating_type=2, pol=1) # PASS -# -# run_test(2, 2, theta=30, phi=10, grating_type=2, pol=1) # SMM FAIL -# run_test(2, 2, theta=31, phi=10, grating_type=2, pol=1) # PASS -# -# run_test(1, 1, theta=1E-10, phi=1E-10, grating_type=0, pol=0) -# run_test(1, 1, theta=1E-10, phi=1E-10, grating_type=0, pol=1) - -# run_test(1, 1, theta=1E-10, phi=1E-10, grating_type=0, pol=0) -# run_test(1, 1, theta=1E-10, phi=1E-10, grating_type=0, pol=1) -# -# run_test(1, 1, theta=1E-10, phi=20, grating_type=1, pol=0) -# run_test(1, 1, theta=1E-10, phi=20, grating_type=1, pol=1) -# -# run_test(1, 1, theta=1E-10, phi=20, grating_type=2, pol=0) -# run_test(1, 1, theta=1E-10, phi=20, grating_type=2, pol=1) diff --git a/QA/run_test2.py b/QA/run_test2.py deleted file mode 100644 index a4ac0b8..0000000 --- a/QA/run_test2.py +++ /dev/null @@ -1,211 +0,0 @@ -import numpy as np - -from meent.main import call_mee, sweep_wavelength - - -pol = 1 # 0: TE, 1: TM - -n_I = 1 # n_incidence -n_II = 1 # n_transmission - -theta = 1E-10 # in degree, notation from Moharam paper -phi = 40 # in degree, notation from Moharam paper -psi = 0 if pol else 90 # in degree, notation from Moharam paper - -wls = np.linspace(900, 900, 1) # wavelength - -fourier_order = 3 - -# 1D case -period = [700] -grating_type = 0 # 0: 1D, 1: 1D conical, 2:2D. -thickness = [460, 660] - -ucell = np.array([ - [ - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - ], - [ - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - ], -]) - -ucell_materials = ['p_si', 1] - -AA = call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wls=wls, period=period, ucell=ucell, ucell_materials=ucell_materials, - thickness=thickness) -de_ri, de_ti = AA.conv_solve() -print(de_ri, de_ti) - -wls = np.linspace(500, 1000, 100) -AA = sweep_wavelength(wls, mode=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, period=period, ucell=ucell, ucell_materials=ucell_materials, - thickness=thickness) -# de_ri, de_ti = AA.loop_wavelength_ucell() -# AA.plot() - - -ucell = np.array([ - [ - [2, 2, 2, 2, 2, 2, 2, 2, 2, 2], - ], - [ - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - ], - [ - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - ], - [ - [3, 3, 3, 3, 3, 3, 3, 3, 3, 3], - ], -]) -ucell_materials = ['p_si', 1, n_I, n_II] - -thickness = [200, 460, 660, 200] - -wls = np.linspace(900, 900, 1) # wavelength - -AA = call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wls=wls, period=period, ucell=ucell, ucell_materials=ucell_materials, - thickness=thickness) -de_ri, de_ti = AA.conv_solve() -print(de_ri, de_ti) - -wls = np.linspace(500, 1000, 100) -AA = sweep_wavelength(wls, mode=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, period=period, ucell=ucell, ucell_materials=ucell_materials, - thickness=thickness) -# de_ri, de_ti = AA.loop_wavelength_ucell() -# AA.plot() - -# 1D conical case -period = [700] -grating_type = 1 # 0: 1D, 1: 1D conical, 2:2D. -thickness = [460, 660] - -ucell = np.array([ - [ - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - ], - [ - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - ], -]) -ucell_materials = ['p_si', 1] - -wls = np.linspace(900, 900, 1) # wavelength -AA = call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wls=wls, period=period, ucell=ucell, ucell_materials=ucell_materials, - thickness=thickness) -de_ri, de_ti = AA.conv_solve() -print(de_ri, de_ti) - -wls = np.linspace(500, 1000, 100) -AA = sweep_wavelength(wls, mode=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, period=period, ucell=ucell, ucell_materials=ucell_materials, - thickness=thickness) - - -ucell = np.array([ - [ - [2, 2, 2, 2, 2, 2, 2, 2, 2, 2], - ], - [ - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - ], - [ - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - ], - [ - [3, 3, 3, 3, 3, 3, 3, 3, 3, 3], - ], -]) -ucell_materials = ['p_si', 1, n_I, n_II] - -thickness = [200, 460, 660, 200] - -wls = np.linspace(900, 900, 1) # wavelength - -AA = call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wls=wls, period=period, ucell=ucell, ucell_materials=ucell_materials, - thickness=thickness) -de_ri, de_ti = AA.conv_solve() -print(de_ri, de_ti) - -wls = np.linspace(500, 1000, 100) -AA = sweep_wavelength(wls, mode=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, period=period, ucell=ucell, ucell_materials=ucell_materials, - thickness=thickness) - - -# 2D case -period = [700, 700] -grating_type = 2 # 0: 1D, 1: 1D conical, 2:2D. -thickness = [460, 660] - -ucell = np.array([ - [ - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - ], - [ - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - ], -]) -ucell_materials = ['p_si', 1] - -wls = np.linspace(900, 900, 1) # wavelength -AA = call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wls=wls, period=period, ucell=ucell, ucell_materials=ucell_materials, - thickness=thickness) -de_ri, de_ti = AA.conv_solve() -print(de_ri, de_ti) - -wls = np.linspace(500, 1000, 100) -AA = sweep_wavelength(wls, mode=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, period=period, ucell=ucell, ucell_materials=ucell_materials, - thickness=thickness) - - -ucell = np.array([ - [ - [2, 2, 2, 2, 2, 2, 2, 2, 2, 2], - [2, 2, 2, 2, 2, 2, 2, 2, 2, 2], - [2, 2, 2, 2, 2, 2, 2, 2, 2, 2], - ], - [ - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - ], - [ - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - [1, 1, 1, 0, 0, 0, 1, 1, 1, 1], - ], - [ - [3, 3, 3, 3, 3, 3, 3, 3, 3, 3], - [3, 3, 3, 3, 3, 3, 3, 3, 3, 3], - [3, 3, 3, 3, 3, 3, 3, 3, 3, 3], - ], -]) -ucell_materials = ['p_si', 1, n_I, n_II] - -thickness = [200, 460, 660, 200] - - -wls = np.linspace(900, 900, 1) # wavelength - -AA = call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, wls=wls, period=period, ucell=ucell, ucell_materials=ucell_materials, - thickness=thickness) -de_ri, de_ti = AA.conv_solve() -print(de_ri, de_ti) - -AA = sweep_wavelength(wls, mode=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, - fourier_order=fourier_order, period=period, ucell=ucell, ucell_materials=ucell_materials, - thickness=thickness) \ No newline at end of file diff --git a/QA/test.ipynb b/QA/test.ipynb deleted file mode 100644 index a30dcf2..0000000 --- a/QA/test.ipynb +++ /dev/null @@ -1,306 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import jax\n", - "import jax.numpy as jnp\n", - "jax.config.update('jax_enable_x64', True)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "outputs": [], - "source": [ - "a = jnp.array([\n", - " [[0, 0, 0, 1, 1, 1, 1, 0, 0, 0, ]],\n", - " [[1, 1, 1, 1, 0, 1, 1, 1, 1, 1, ]],\n", - "]) * 4 + 1 + 0j # refractive index\n" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": 4, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.93 µs ± 129 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)\n" - ] - } - ], - "source": [ - "%timeit aa=a.conj()" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": 3, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "9.54 µs ± 24.1 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n" - ] - } - ], - "source": [ - "%timeit aa = a.real + a.imag * -1j" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": 4, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1.91 µs ± 93.4 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)\n" - ] - } - ], - "source": [ - "%timeit aa=a.conj()" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": 5, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "9.61 µs ± 17 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)\n" - ] - } - ], - "source": [ - "%timeit aa = a.real + a.imag * -1j" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": 2, - "outputs": [], - "source": [ - "import jax\n", - "import optax\n", - "import jax.numpy as jnp\n", - "\n", - "from tqdm import tqdm" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": 8, - "outputs": [], - "source": [ - "def _grad(params, forward, loss_fn):\n", - "\n", - " def forward_pass(params, forward, loss):\n", - " result = forward(**params)\n", - " loss_value = loss(result)\n", - " return loss_value\n", - "\n", - " loss_value, grads = jax.value_and_grad(forward_pass)(params, forward, loss_fn)\n", - " return loss_value, grads\n", - "\n", - "def grad(self, pois, forward, loss_fn):\n", - " params = {poi: (getattr(self, poi)) for poi in pois}\n", - " _, grads = self._grad(params, forward, loss_fn)\n", - " [setattr(self, poi, params[poi]) for poi in pois]\n", - "\n", - " return grads\n", - "\n", - "def fit(self, pois, forward, loss_fn, optimizer, iteration=1):\n", - " params = {poi: (getattr(self, poi)) for poi in pois}\n", - " opt_state = optimizer.init(params)\n", - "\n", - " @jax.jit\n", - " def step(params, opt_state):\n", - " loss_value, grads = self._grad(params, forward, loss_fn)\n", - " grads = {k: v.conj() for k, v in grads.items()}\n", - " updates, opt_state = optimizer.update(grads, opt_state, params)\n", - " params = optax.apply_updates(params, updates)\n", - " return params, opt_state, loss_value\n", - "\n", - " for _ in tqdm(range(iteration)):\n", - " params, opt_state, loss_value = step(params, opt_state)\n", - "\n", - " [setattr(self, poi, params[poi]) for poi in pois]\n", - "\n", - " return params" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": 3, - "outputs": [], - "source": [ - "\n", - "@jax.grad\n", - "def grad_loss(ucell):\n", - " loss = ucell.conj()[0,0]\n", - " return loss.real\n", - "\n", - "ucell = jnp.array([\n", - " [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, ],\n", - " [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, ],\n", - "]) * 4 + 1 + 3j # refractive index\n", - "\n", - "grad_ad = grad_loss(ucell)\n" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": 4, - "outputs": [ - { - "data": { - "text/plain": "Array([[1.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j,\n 0.-0.j, 0.-0.j],\n [0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j,\n 0.-0.j, 0.-0.j]], dtype=complex128)" - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "grad_ad" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": 30, - "outputs": [], - "source": [ - "@jax.jit\n", - "def ff(arr):\n", - " res = arr.conj()\n", - " return res" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": 31, - "outputs": [], - "source": [ - "def grad(ucell, forward):\n", - "\n", - " def forward_pass(ucell, forward):\n", - " res = forward(ucell)\n", - " res = res.real[0,0]\n", - " return res\n", - "\n", - " loss_value, grads = jax.value_and_grad(forward_pass)(ucell, forward)\n", - " return loss_value, grads\n" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": 38, - "outputs": [], - "source": [ - "ucell = jnp.array([\n", - " [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, ],\n", - " [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, ],\n", - "]) * 4 + 1 + 3j # refractive index\n" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": 39, - "outputs": [ - { - "data": { - "text/plain": "(Array(1., dtype=float64, weak_type=True),\n Array([[1.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j,\n 0.-0.j, 0.-0.j],\n [0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j, 0.-0.j,\n 0.-0.j, 0.-0.j]], dtype=complex128))" - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "grad(ucell, ff)" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [], - "metadata": { - "collapsed": false - } - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/benchmarks/interface/Reticolo.py b/benchmarks/interface/Reticolo.py index c965d1d..19ecee1 100644 --- a/benchmarks/interface/Reticolo.py +++ b/benchmarks/interface/Reticolo.py @@ -33,29 +33,9 @@ def __init__(self, engine_type='octave', *args, **kwargs): m_path = os.path.dirname(__file__) self.eng.addpath(self.eng.genpath(m_path)) - def run_res2(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, wavelength, n_I, n_II, + def run_res2(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, wavelength, n_top, n_bot, *args, **kwargs): - """ - Deprecated. Use run_res3. - Args: - grating_type: - period: - fto: - ucell: - thickness: - theta: - phi: - pol: - wavelength: - n_I: - n_II: - *args: - **kwargs: - - Returns: - - """ - theta *= (180 / np.pi) + phi *= (180 / np.pi) if grating_type in (0, 1): @@ -67,6 +47,7 @@ def run_res2(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, # grid_x = np.linspace(0, period, Nx + 1)[1:] # grid_x -= period_x / 2 grid_x = np.linspace(0, period, Nx + 1)[1:] + grid_x = np.arange(1, Nx+1) * (period/Nx) # grid = np.linspace(0, period, Nx) @@ -75,38 +56,39 @@ def run_res2(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, ucell_layer = [grid_x, ucell[z, 0]] ucell_new.append(ucell_layer) - textures = [n_I, *ucell_new, n_II] + textures = [n_top, *ucell_new, n_bot] else: + raise ValueError - Nx = ucell.shape[2] - Ny = ucell.shape[1] - period_x = period[0] - period_y = period[1] - - unit_x = period_x / Nx - unit_y = period_y / Ny - - grid_x = np.linspace(0, period[0], Nx + 1)[1:] - grid_y = np.linspace(0, period[1], Ny + 1)[1:] - - grid_x -= period_x / 2 - grid_y -= period_y / 2 - - ucell_new = [] - for z in range(ucell.shape[0]): - ucell_layer = [10] - for y, yval in enumerate(grid_y): - for x, xval in enumerate(grid_x): - obj = [xval, yval, unit_x, unit_y, ucell[z, y, x], 1] - ucell_layer.append(obj) - ucell_new.append(ucell_layer) - textures = [n_I, *ucell_new, n_II] + # Nx = ucell.shape[2] + # Ny = ucell.shape[1] + # period_x = period[0] + # period_y = period[1] + # + # unit_x = period_x / Nx + # unit_y = period_y / Ny + # + # grid_x = np.linspace(0, period[0], Nx + 1)[1:] + # grid_y = np.linspace(0, period[1], Ny + 1)[1:] + # + # grid_x -= period_x / 2 + # grid_y -= period_y / 2 + # + # ucell_new = [] + # for z in range(ucell.shape[0]): + # ucell_layer = [10] + # for y, yval in enumerate(grid_y): + # for x, xval in enumerate(grid_x): + # obj = [xval, yval, unit_x, unit_y, ucell[z, y, x], 1] + # ucell_layer.append(obj) + # ucell_new.append(ucell_layer) + # textures = [n_top, *ucell_new, n_bot] profile = np.array([[0, *thickness, 0], range(1, len(thickness) + 3)]) top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info = \ - self._run(pol, theta, phi, period, n_I, fto, textures, profile, wavelength, grating_type, + self._run(pol, theta, phi, period, n_top, fto, textures, profile, wavelength, grating_type, cal_field=False) return top_refl_info.efficiency, top_tran_info.efficiency, bottom_refl_info.efficiency, bottom_tran_info.efficiency @@ -138,30 +120,31 @@ def run_res3(self, grating_type, period, fto, ucell, thickness, theta, phi, pol, textures = [n_top, *ucell_new, n_bot] else: + raise ValueError - Nx = ucell.shape[2] - Ny = ucell.shape[1] - period_x = period[0] - period_y = period[1] - - unit_x = period_x / Nx - unit_y = period_y / Ny - - grid_x = np.linspace(0, period[0], Nx + 1)[1:] - grid_y = np.linspace(0, period[1], Ny + 1)[1:] - - grid_x -= period_x / 2 - grid_y -= period_y / 2 - - ucell_new = [] - for z in range(ucell.shape[0]): - ucell_layer = [10] - for y, yval in enumerate(grid_y): - for x, xval in enumerate(grid_x): - obj = [xval, yval, unit_x, unit_y, ucell[z, y, x], 1] - ucell_layer.append(obj) - ucell_new.append(ucell_layer) - textures = [n_top, *ucell_new, n_bot] + # Nx = ucell.shape[2] + # Ny = ucell.shape[1] + # period_x = period[0] + # period_y = period[1] + # + # unit_x = period_x / Nx + # unit_y = period_y / Ny + # + # grid_x = np.linspace(0, period[0], Nx + 1)[1:] + # grid_y = np.linspace(0, period[1], Ny + 1)[1:] + # + # grid_x -= period_x / 2 + # grid_y -= period_y / 2 + # + # ucell_new = [] + # for z in range(ucell.shape[0]): + # ucell_layer = [10] + # for y, yval in enumerate(grid_y): + # for x, xval in enumerate(grid_x): + # obj = [xval, yval, unit_x, unit_y, ucell[z, y, x], 1] + # ucell_layer.append(obj) + # ucell_new.append(ucell_layer) + # textures = [n_top, *ucell_new, n_bot] profile = np.array([[0, *thickness, 0], range(1, len(thickness) + 3)]) diff --git a/benchmarks/interface/reticolo_res2.m b/benchmarks/interface/reticolo_res2.m index b10b25b..e947e2c 100644 --- a/benchmarks/interface/reticolo_res2.m +++ b/benchmarks/interface/reticolo_res2.m @@ -1,4 +1,4 @@ -function [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info] = reticolo_res2(_pol, theta, phi, period, n_inc, nn, _textures, _profile, wavelength, grating_type, field); +function [top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info] = reticolo_res2(_pol, theta, phi, period, n_inc, nn, _textures, _profile, wavelength, grating_type); %UNTITLED4 Summary of this function goes here % Detailed explanation goes here diff --git a/benchmarks/reti_meent_1D.py b/benchmarks/reti_meent_1D.py index 0e1f734..6ee0c7f 100644 --- a/benchmarks/reti_meent_1D.py +++ b/benchmarks/reti_meent_1D.py @@ -38,7 +38,7 @@ def test1d_1(plot_figure=False): res_z = 11 reti = Reticolo() - reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, matlab_plot_field=0, res3_npts=res_z) + reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, grating_type=0, matlab_plot_field=0, res3_npts=res_z) print('reti de_ri', np.array(reti_de_ri).flatten()) print('reti de_ti', np.array(reti_de_ti).flatten()) @@ -124,7 +124,7 @@ def test1d_2(plot_figure=False): res_z = 11 reti = Reticolo() - reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, matlab_plot_field=0, res3_npts=res_z) + reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, grating_type=0, matlab_plot_field=0, res3_npts=res_z) print('reti de_ri', np.array(reti_de_ri).flatten()) print('reti de_ti', np.array(reti_de_ti).flatten()) diff --git a/benchmarks/reti_meent_1Dc.py b/benchmarks/reti_meent_1Dc.py index e7e8552..11acdf9 100644 --- a/benchmarks/reti_meent_1Dc.py +++ b/benchmarks/reti_meent_1Dc.py @@ -37,18 +37,18 @@ def test1dc_1(plot_figure=False): res_z = 11 reti = Reticolo() - reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, matlab_plot_field=0, res3_npts=res_z) + reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, grating_type=1, matlab_plot_field=0, res3_npts=res_z) print('reti de_ri', np.array(reti_de_ri).flatten()) print('reti de_ti', np.array(reti_de_ti).flatten()) # Numpy backend = 0 - nmee = meent.call_mee(backend=backend, perturbation=1E-30, **option) - n_de_ri, n_de_ti = nmee.conv_solve() - n_field_cell = nmee.calculate_field(res_z=res_z, res_y=1, res_x=50) + mee = meent.call_mee(backend=backend, perturbation=1E-30, **option) + n_de_ri, n_de_ti = mee.conv_solve() + n_field_cell = mee.calculate_field(res_z=res_z, res_y=1, res_x=50) - print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) - print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + print('meent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('meent de_ti', n_de_ti[n_de_ti > 1E-5]) r_field_cell = np.moveaxis(r_field_cell, 2, 1) r_field_cell = r_field_cell[res_z:-res_z] @@ -118,18 +118,18 @@ def test1dc_2(plot_figure=False): res_z = 11 reti = Reticolo() - reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, matlab_plot_field=0, res3_npts=res_z) + reti_de_ri, reti_de_ti, c, d, r_field_cell = reti.run_res3(**option, grating_type=1, matlab_plot_field=0, res3_npts=res_z) print('reti de_ri', np.array(reti_de_ri).flatten()) print('reti de_ti', np.array(reti_de_ti).flatten()) # Numpy backend = 0 - nmee = meent.call_mee(backend=backend, perturbation=1E-30, **option) - n_de_ri, n_de_ti = nmee.conv_solve() - n_field_cell = nmee.calculate_field(res_z=res_z, res_y=1, res_x=50) + mee = meent.call_mee(backend=backend, perturbation=1E-30, **option) + n_de_ri, n_de_ti = mee.conv_solve() + n_field_cell = mee.calculate_field(res_z=res_z, res_y=1, res_x=50) - print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) - print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + print('meent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('meent de_ti', n_de_ti[n_de_ti > 1E-5]) r_field_cell = np.moveaxis(r_field_cell, 2, 1) r_field_cell = r_field_cell[res_z:-res_z] diff --git a/benchmarks/reti_meent_2D.py b/benchmarks/reti_meent_2D.py index 8c1fccc..c83069b 100644 --- a/benchmarks/reti_meent_2D.py +++ b/benchmarks/reti_meent_2D.py @@ -60,25 +60,22 @@ def test2d_1(plot_figure=False): # Numpy backend = 0 - nmee = meent.call_mee(backend=backend, **option) - n_de_ri, n_de_ti = nmee.conv_solve() - n_field_cell = nmee.calculate_field(res_z=res_z, res_y=50, res_x=50) - # print('nmeent de_ri', n_de_ri) - # print('nmeent de_ti', n_de_ti) - print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) - print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + mee = meent.call_mee(backend=backend, **option) + n_de_ri, n_de_ti = mee.conv_solve() + n_field_cell = mee.calculate_field(res_z=res_z, res_y=50, res_x=50) + # print('meent de_ri', n_de_ri) + # print('meent de_ti', n_de_ti) + print('meent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('meent de_ti', n_de_ti[n_de_ti > 1E-5]) r_field_cell = np.moveaxis(r_field_cell, 2, 1) r_field_cell = r_field_cell[res_z:-res_z] r_field_cell = np.flip(r_field_cell, 0) r_field_cell = r_field_cell.conj() - title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] - for i in range(6): print(i, np.linalg.norm(r_field_cell[:, :, :, i] - n_field_cell[:, :, :, i])) - if plot_figure: title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] fig, axes = plt.subplots(6, 6, figsize=(10, 5)) @@ -171,56 +168,6 @@ def test2d_2(plot_figure=False): option['thickness'] = [100 / factor, ] # final term is for h_substrate option['fourier_type'] = 1 - ucell = np.array( - [ - [ - [0, 1, 0, 0, 1, 0], - [1, 0, 0, 0, 0, 1], - [0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0], - [1, 0, 0, 0, 0, 1], - [0, 1, 0, 0, 1, 0], - ]] - ) * (3) + 1 - - ucell = np.array( - [ - [[0, 0, 0, 0, 0, 0, ], - [0, 0, 1, 1, 0, 0], - [0, 1, 0, 0, 1, 0], - [0, 1, 0, 0, 1, 0], - [0, 0, 1, 1, 0, 0], - [0, 0, 0, 0, 0, 0]]] - ) * (3) + 1 - ucell = np.array( - [[ - [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - ]]) - - # ucell = np.array( - # [[ - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - # ]]) - - ucell = np.array( [[ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], @@ -235,36 +182,6 @@ def test2d_2(plot_figure=False): [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], ]]) - # ucell = np.array( - # [[ - # [4, 4, 6, 6, 1, 1, 1, 1, 1, 1], - # [4, 4, 6, 6, 1, 1, 1, 1, 1, 1], - # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # ]]) - - # ucell = np.array( - # [[ - # [1, 1, 3, 1, 1, 1, 1, 1, 3, 1], - # [4, 1, 3, 1, 1, 1, 1, 1, 1, 1], - # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - # [8, 1, 1, 1, 1, 1, 1, 1, 5, 1], - # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # [3, 3, 3, 3, 3, 1, 1, 1, 1, 1], - # ]]) - - - # ucell = np.repeat(ucell, 10, axis=2) option['ucell'] = ucell # reti = Reticolo() @@ -276,21 +193,19 @@ def test2d_2(plot_figure=False): # Numpy backend = 0 - nmee = meent.call_mee(backend=backend, **option) - n_de_ri, n_de_ti = nmee.conv_solve() - n_field_cell = nmee.calculate_field(res_z=res_z, res_y=50, res_x=50) - # print('nmeent de_ri', n_de_ri) - # print('nmeent de_ti', n_de_ti) - print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) - print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + mee = meent.call_mee(backend=backend, **option) + n_de_ri, n_de_ti = mee.conv_solve() + n_field_cell = mee.calculate_field(res_z=res_z, res_y=50, res_x=50) + # print('meent de_ri', n_de_ri) + # print('meent de_ti', n_de_ti) + print('meent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('meent de_ti', n_de_ti[n_de_ti > 1E-5]) r_field_cell = np.moveaxis(r_field_cell, 2, 1) r_field_cell = r_field_cell[res_z:-res_z] r_field_cell = np.flip(r_field_cell, 0) r_field_cell = r_field_cell.conj() - title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] - for i in range(6): print(i, np.linalg.norm(r_field_cell[:, :, :, i] - n_field_cell[:, :, :, i])) @@ -386,28 +301,6 @@ def test2d_3(plot_figure=False): option['thickness'] = [100 / factor, ] # final term is for h_substrate option['fourier_type'] = 1 - ucell = np.array( - [ - [ - [0, 1, 0, 0, 1, 0], - [1, 0, 0, 0, 0, 1], - [0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0], - [1, 0, 0, 0, 0, 1], - [0, 1, 0, 0, 1, 0], - ]] - ) * (3) + 1 - - ucell = np.array( - [ - [[0, 0, 0, 0, 0, 0, ], - [0, 0, 1, 1, 0, 0], - [0, 1, 0, 0, 1, 0], - [0, 1, 0, 0, 1, 0], - [0, 0, 1, 1, 0, 0], - [0, 0, 0, 0, 0, 0]]] - ) * (3) + 1 - ucell = np.array( [[ [4, 4, 4, 4, 4, 1, 1, 1, 1, 1], @@ -433,21 +326,19 @@ def test2d_3(plot_figure=False): # Numpy backend = 0 - nmee = meent.call_mee(backend=backend, **option) - n_de_ri, n_de_ti = nmee.conv_solve() - n_field_cell = nmee.calculate_field(res_z=res_z, res_y=50, res_x=50) - # print('nmeent de_ri', n_de_ri) - # print('nmeent de_ti', n_de_ti) - print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) - print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + mee = meent.call_mee(backend=backend, **option) + n_de_ri, n_de_ti = mee.conv_solve() + n_field_cell = mee.calculate_field(res_z=res_z, res_y=50, res_x=50) + # print('meent de_ri', n_de_ri) + # print('meent de_ti', n_de_ti) + print('meent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('meent de_ti', n_de_ti[n_de_ti > 1E-5]) r_field_cell = np.moveaxis(r_field_cell, 2, 1) r_field_cell = r_field_cell[res_z:-res_z] r_field_cell = np.flip(r_field_cell, 0) r_field_cell = r_field_cell.conj() - title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] - for i in range(6): print(i, np.linalg.norm(r_field_cell[:, :, :, i] - n_field_cell[:, :, :, i])) @@ -543,18 +434,6 @@ def test2d_4(plot_figure=False): option['thickness'] = [220 / factor, ] # final term is for h_substrate option['fourier_type'] = 1 - ucell = np.array( - [ - [ - [0, 1, 0, 0, 1, 0], - [1, 0, 0, 0, 0, 1], - [0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0], - [1, 0, 0, 0, 0, 1], - [0, 1, 0, 0, 1, 0], - ]] - ) * (3) + 1 - ucell = np.array( [ [[0, 0, 0, 0, 0, 0, ], @@ -578,25 +457,22 @@ def test2d_4(plot_figure=False): # Numpy backend = 0 - nmee = meent.call_mee(backend=backend, **option) - n_de_ri, n_de_ti = nmee.conv_solve() - n_field_cell = nmee.calculate_field(res_z=res_z, res_y=50, res_x=50) - # print('nmeent de_ri', n_de_ri) - # print('nmeent de_ti', n_de_ti) - print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) - print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + mee = meent.call_mee(backend=backend, **option) + n_de_ri, n_de_ti = mee.conv_solve() + n_field_cell = mee.calculate_field(res_z=res_z, res_y=50, res_x=50) + # print('meent de_ri', n_de_ri) + # print('meent de_ti', n_de_ti) + print('meent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('meent de_ti', n_de_ti[n_de_ti > 1E-5]) r_field_cell = np.moveaxis(r_field_cell, 2, 1) r_field_cell = r_field_cell[res_z:-res_z] r_field_cell = np.flip(r_field_cell, 0) r_field_cell = r_field_cell.conj() - title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] - for i in range(6): print(i, np.linalg.norm(r_field_cell[:, :, :, i] - n_field_cell[:, :, :, i])) - if plot_figure: title = ['Ex', 'Ey', 'Ez', 'Hx', 'Hy', 'Hz'] fig, axes = plt.subplots(6, 6, figsize=(10, 5)) @@ -689,18 +565,6 @@ def test2d_5(plot_figure=False): option['thickness'] = [220 / factor, ] # final term is for h_substrate option['fourier_type'] = 1 - ucell = np.array( - [ - [ - [0, 1, 0, 0, 1, 0], - [1, 0, 0, 0, 0, 1], - [0, 0, 0, 0, 0, 0], - [0, 0, 0, 0, 0, 0], - [1, 0, 0, 0, 0, 1], - [0, 1, 0, 0, 1, 0], - ]] - ) * (3) + 1 - ucell = np.array( [ [[0, 0, 0, 0, 0, 0, ], @@ -724,13 +588,13 @@ def test2d_5(plot_figure=False): # Numpy backend = 0 - nmee = meent.call_mee(backend=backend, **option) - n_de_ri, n_de_ti = nmee.conv_solve() - n_field_cell = nmee.calculate_field(res_z=res_z, res_y=50, res_x=50) - # print('nmeent de_ri', n_de_ri) - # print('nmeent de_ti', n_de_ti) - print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) - print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + mee = meent.call_mee(backend=backend, **option) + n_de_ri, n_de_ti = mee.conv_solve() + n_field_cell = mee.calculate_field(res_z=res_z, res_y=50, res_x=50) + # print('meent de_ri', n_de_ri) + # print('meent de_ti', n_de_ti) + print('meent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('meent de_ti', n_de_ti[n_de_ti > 1E-5]) r_field_cell = np.moveaxis(r_field_cell, 2, 1) r_field_cell = r_field_cell[res_z:-res_z] @@ -865,10 +729,10 @@ def test2d_6(plot_figure=False): mee = meent.call_mee(backend=backend, **option) n_de_ri, n_de_ti = mee.conv_solve() n_field_cell = mee.calculate_field(res_z=res_z, res_y=50, res_x=50) - # print('nmeent de_ri', n_de_ri) - # print('nmeent de_ti', n_de_ti) - print('nmeent de_ri', n_de_ri[n_de_ri > 1E-5]) - print('nmeent de_ti', n_de_ti[n_de_ti > 1E-5]) + # print('meent de_ri', n_de_ri) + # print('meent de_ti', n_de_ti) + print('meent de_ri', n_de_ri[n_de_ri > 1E-5]) + print('meent de_ti', n_de_ti[n_de_ti > 1E-5]) for i in range(6): print(i, np.linalg.norm(r_field_cell[:, :, :, i] - n_field_cell[:, :, :, i])) diff --git a/benchmarks/reticolo.ipynb b/benchmarks/reticolo.ipynb deleted file mode 100644 index e43d9b5..0000000 --- a/benchmarks/reticolo.ipynb +++ /dev/null @@ -1,758 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# benchmark Reticolo" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We will compare diffraction efficiency and field distribution in terms of accuracy and time.\n", - "Here, I define accuracy as how close the results of meent and reticolo" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "from meent import call_mee\n", - "from benchmarks.interface.Reticolo import Reticolo" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "option = {}\n", - "option['grating_type'] = 0 # 0 : just 1D grating, 1 : 1D rotating grating, 2 : 2D grating\n", - "option['pol'] = 0 # 0: TE, 1: TM\n", - "option['n_I'] = 1 # n_incidence\n", - "option['n_II'] = 1.5 # n_transmission\n", - "option['theta'] = 0 * np.pi / 180\n", - "option['phi'] = 0 * np.pi / 180\n", - "option['fourier_order'] = 40\n", - "option['period'] = [1000]\n", - "option['wavelength'] = 650\n", - "option['thickness'] = [100, 100, 100, 100, 100, 100] # final term is for h_substrate\n", - "\n", - "n_1 = 1\n", - "n_2 = 3\n", - "\n", - "ucell = np.array(\n", - " [\n", - " [[1, 1, 1, 1, 1, 0, 0, 1, 1, 1,]],\n", - " [[1, 0, 0, 1, 0, 0, 0, 1, 1, 1,]],\n", - " [[1, 1, 0, 1, 1, 1, 1, 1, 0, 1,]],\n", - " [[1, 1, 1, 0, 1, 0, 0, 1, 1, 1,]],\n", - " [[0, 0, 1, 0, 1, 0, 0, 1, 1, 1,]],\n", - " [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0,]],\n", - " ]) * (n_2 - n_1) + n_1\n", - "ucell = np.repeat(ucell, 10, axis=2)\n", - "option['ucell'] = ucell\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. Description" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - " Incidence Backward Diffraction \n", - " (Reflected)\n", - " \n", - " || -1th 0th +1th\n", - " || order order order\n", - " || \\ | /\n", - " || \\ | /\n", - " || \\ | /\n", - " ____________________________________\n", - " | Layer 1 |\n", - " |____________________________________|\n", - " | Layer 2 | \n", - " |____________________________________|\n", - " | Layer 3 |\n", - " |____________________________________|\n", - " | Layer 4 |\n", - " |____________________________________|\n", - " | Layer 5 | z-axis\n", - " |____________________________________| |\n", - " | Layer 6 | |\n", - " |____________________________________| |____ x-axis\n", - " \n", - " / | \\\n", - " ... / | \\ ...\n", - " / | \\\n", - " -2nd -1th 0th +1th +2th\n", - " order order order order order\n", - " \n", - " Forward Diffraction \n", - " (Transmitted) " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. Diffraction Efficiency\n", - "de_ri: diffraction efficiency of reflectance \n", - "de_ti: diffraction efficiency of transmittance" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reticolo\n", - "de_ri, de_ti: [0.20497338 0.27200576 0.0137935 ], [0.03165255 0.30019717 0.04936923 0.07997455 0.04803385]\n", - "NumpyMeent CFT\n", - "de_ri, de_ti: [0.20497338 0.27200576 0.0137935 ], [0.03165255 0.30019717 0.04936923 0.07997455 0.04803385]\n", - "JaxMeent CFT\n", - "de_ri, de_ti: [0.20497338 0.27200576 0.0137935 ], [0.03165255 0.30019717 0.04936923 0.07997455 0.04803385]\n", - "TorchMeent CFT\n", - "de_ri, de_ti: [0.20497338 0.27200576 0.0137935 ], [0.03165255 0.30019717 0.04936923 0.07997455 0.04803385]\n", - "NumpyMeent DFT\n", - "de_ri, de_ti: [0.20497337 0.272006 0.01379351], [0.03165257 0.30019695 0.0493693 0.07997446 0.04803384]\n", - "JaxMeent DFT\n", - "de_ri, de_ti: [0.20497337 0.272006 0.01379351], [0.03165257 0.30019695 0.0493693 0.07997446 0.04803384]\n", - "TorchMeent DFT\n", - "de_ri, de_ti: [0.20497337 0.272006 0.01379351], [0.03165257 0.30019695 0.0493693 0.07997446 0.04803384]\n" - ] - } - ], - "source": [ - "# Reticolo\n", - "reti = Reticolo()\n", - "print('Reticolo')\n", - "top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info = reti.run_res2(**option)\n", - "print(f'de_ri, de_ti: {top_refl_info.flatten()}, {top_tran_info.flatten()}')\n", - "\n", - "# NumpyMeent\n", - "nmee = call_mee(backend=0, **option)\n", - "# JaxMeent\n", - "jmee = call_mee(backend=1, **option)\n", - "# TorchMeent\n", - "tmee = call_mee(backend=2, **option)\n", - "\n", - "# NumpyMeent with CFT\n", - "print('NumpyMeent CFT')\n", - "nmee.fft_type = 1\n", - "n_cft_de_ri, n_cft_de_ti = nmee.conv_solve()\n", - "ix_de_ri = n_cft_de_ri.nonzero()\n", - "ix_de_ti = n_cft_de_ti.nonzero()\n", - "print(f'de_ri, de_ti: {n_cft_de_ri[ix_de_ri].flatten()}, {n_cft_de_ti[ix_de_ti].flatten()}')\n", - "\n", - "# JaxMeent with CFT\n", - "print('JaxMeent CFT')\n", - "jmee.fft_type = 1\n", - "j_cft_de_ri, j_cft_de_ti = jmee.conv_solve()\n", - "print(f'de_ri, de_ti: {j_cft_de_ri[ix_de_ri].flatten()}, {j_cft_de_ti[ix_de_ti].flatten()}')\n", - "\n", - "# TorchMeent with CFT\n", - "print('TorchMeent CFT')\n", - "tmee.fft_type = 1\n", - "t_cft_de_ri, t_cft_de_ti = tmee.conv_solve()\n", - "print(f'de_ri, de_ti: {t_cft_de_ri[ix_de_ri].flatten().numpy()}, {t_cft_de_ti[ix_de_ti].flatten().numpy()}')\n", - "\n", - "# NumpyMeent with DFT\n", - "print('NumpyMeent DFT')\n", - "nmee.fft_type = 0\n", - "n_dft_de_ri, n_dft_de_ti = nmee.conv_solve()\n", - "print(f'de_ri, de_ti: {n_dft_de_ri[ix_de_ri].flatten()}, {n_dft_de_ti[ix_de_ti].flatten()}')\n", - "\n", - "# JaxMeent with DFT\n", - "print('JaxMeent DFT')\n", - "jmee.fft_type = 0\n", - "j_dft_de_ri, j_dft_de_ti = jmee.conv_solve()\n", - "print(f'de_ri, de_ti: {j_dft_de_ri[ix_de_ri].flatten()}, {j_dft_de_ti[ix_de_ti].flatten()}')\n", - "\n", - "# TorchMeent with DFT\n", - "print('TorchMeent DFT')\n", - "tmee.fft_type = 0\n", - "t_dft_de_ri, t_dft_de_ti = tmee.conv_solve()\n", - "print(f'de_ri, de_ti: {t_dft_de_ri[ix_de_ri].flatten().numpy()}, {t_dft_de_ti[ix_de_ti].flatten().numpy()}')\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2.1. Accuracy" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Difference between Meent and Reticolo\n", - "\n", - "Meent CFT\n", - "\n", - "NumpyMeent CFT to Reticolo\n", - "de_ri: [ 1.02973186e-14 -1.80244708e-13 -3.49668211e-14]\n", - "de_ti: [-1.91305305e-14 -3.38951089e-13 8.05952527e-14 1.60982339e-15\n", - " -6.90419943e-15]\n", - "JaxMeent CFT to Reticolo\n", - "de_ri: [ 2.17326157e-14 -1.59205982e-13 -2.94451963e-14]\n", - "de_ti: [-1.78676518e-14 -3.69815290e-13 7.27889971e-14 -1.27259314e-14\n", - " -1.10120246e-14]\n", - "TorchMeent CFT to Reticolo\n", - "de_ri: [ 1.92346139e-14 -1.95732319e-13 -2.35141767e-14]\n", - "de_ti: [-1.28369537e-14 -3.96238597e-13 5.94455041e-14 -5.80091530e-15\n", - " 7.99360578e-15]\n", - "\n", - "Meent DFT\n", - "\n", - "NumpyMeent DFT to Reticolo\n", - "de_ri: [-5.27688321e-09 2.36482468e-07 1.51571352e-09]\n", - "de_ti: [ 1.86363213e-08 -2.23263926e-07 6.84809520e-08 -8.88492938e-08\n", - " -7.72590036e-09]\n", - "JaxMeent DFT to Reticolo\n", - "de_ri: [-5.27687383e-09 2.36482430e-07 1.51571948e-09]\n", - "de_ti: [ 1.86363151e-08 -2.23263863e-07 6.84809338e-08 -8.88492910e-08\n", - " -7.72589726e-09]\n", - "TorchMeent DFT to Reticolo\n", - "de_ri: [-5.27681582e-09 2.36482398e-07 1.51572197e-09]\n", - "de_ti: [ 1.86363178e-08 -2.23263885e-07 6.84809282e-08 -8.88493067e-08\n", - " -7.72588508e-09]\n" - ] - } - ], - "source": [ - "# Difference between Meent and Reticolo\n", - "print('Difference between Meent and Reticolo\\n')\n", - "\n", - "print('Meent CFT\\n')\n", - "print('NumpyMeent CFT to Reticolo')\n", - "print(f'de_ri: {n_cft_de_ri[ix_de_ri].flatten() - top_refl_info.flatten()}')\n", - "print(f'de_ti: {n_cft_de_ti[ix_de_ti].flatten() - top_tran_info.flatten()}')\n", - "\n", - "print('JaxMeent CFT to Reticolo')\n", - "print(f'de_ri: {j_cft_de_ri[ix_de_ri].flatten() - top_refl_info.flatten()}')\n", - "print(f'de_ti: {j_cft_de_ti[ix_de_ti].flatten() - top_tran_info.flatten()}')\n", - "\n", - "print('TorchMeent CFT to Reticolo')\n", - "print(f'de_ri: {t_cft_de_ri[ix_de_ri].flatten().numpy() - top_refl_info.flatten()}')\n", - "print(f'de_ti: {t_cft_de_ti[ix_de_ti].flatten().numpy() - top_tran_info.flatten()}')\n", - "\n", - "print('\\nMeent DFT\\n')\n", - "print('NumpyMeent DFT to Reticolo')\n", - "print(f'de_ri: {n_dft_de_ri[ix_de_ri].flatten() - top_refl_info.flatten()}')\n", - "print(f'de_ti: {n_dft_de_ti[ix_de_ti].flatten() - top_tran_info.flatten()}')\n", - "\n", - "print('JaxMeent DFT to Reticolo')\n", - "print(f'de_ri: {j_dft_de_ri[ix_de_ri].flatten() - top_refl_info.flatten()}')\n", - "print(f'de_ti: {j_dft_de_ti[ix_de_ti].flatten() - top_tran_info.flatten()}')\n", - "\n", - "print('TorchMeent DFT to Reticolo')\n", - "print(f'de_ri: {t_dft_de_ri[ix_de_ri].flatten().numpy() - top_refl_info.flatten()}')\n", - "print(f'de_ti: {t_dft_de_ti[ix_de_ti].flatten().numpy() - top_tran_info.flatten()}')\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "CFT shows 1E-13 difference while DFT does 1E-7. \n", - "This is because Reticolo uses CFT which is more accurate than DFT." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2.2 Calculation Time" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reticolo:\n", - "268 ms ± 50.2 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", - "NumpyMeent CFT:\n", - "63.4 ms ± 1.61 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", - "NumpyMeent DFT:\n", - "73 ms ± 1.29 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", - "JaxMeent CFT:\n", - "1.24 s ± 18.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n", - "JaxMeent DFT:\n", - "148 ms ± 33.5 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", - "TorchMeent CFT:\n", - "82.6 ms ± 433 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", - "TorchMeent DFT:\n", - "82 ms ± 324 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" - ] - } - ], - "source": [ - "# Reticolo\n", - "reti = Reticolo()\n", - "print('Reticolo:')\n", - "%timeit top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info = reti.run_res2(**option)\n", - "\n", - "# Meent\n", - "mee = call_mee(backend=0, **option)\n", - "\n", - "# Meent with CFT\n", - "mee.fft_type = 1\n", - "print('NumpyMeent CFT:')\n", - "%timeit de_ri, de_ti = mee.conv_solve()\n", - "\n", - "# Meent with DFT\n", - "mee.fft_type = 0\n", - "print('NumpyMeent DFT:')\n", - "%timeit de_ri, de_ti = mee.conv_solve()\n", - "\n", - "# Meent\n", - "mee = call_mee(backend=1, **option)\n", - "\n", - "# Meent with CFT\n", - "mee.fft_type = 1\n", - "print('JaxMeent CFT:')\n", - "%timeit de_ri, de_ti = mee.conv_solve()\n", - "\n", - "# Meent with DFT\n", - "mee.fft_type = 0\n", - "print('JaxMeent DFT:')\n", - "%timeit de_ri, de_ti = mee.conv_solve()\n", - "\n", - "# Meent\n", - "mee = call_mee(backend=2, **option)\n", - "\n", - "# Meent with CFT\n", - "mee.fft_type = 1\n", - "print('TorchMeent CFT:')\n", - "%timeit de_ri, de_ti = mee.conv_solve()\n", - "\n", - "# Meent with DFT\n", - "mee.fft_type = 0\n", - "print('TorchMeent DFT:')\n", - "%timeit de_ri, de_ti = mee.conv_solve()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Meent is 3x faster.\n", - "\n", - "This is because of overhead that Python calling Octave(which is constant-time consuming), not an algorithmic thing. We will see that the gap decreases as the amount of calculation increases.\n", - "\n", - "Note that JaxMeent with CFT took much time, and this is due to that jit-compilation is not available." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. Field Calculation" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reticolo\n" - ] - }, - { - "data": { - "image/png": "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t8hzxhlnBPvr9Tp27tyJ9evXY2RkBJdddhkOHDiwavISTjrppBa5BwYGsHPnTgC9954tegdWh3QeVo9YHGuweqTz6Ec9YnVIf6Evyc/3v/99XH311di9ezd+/vOf45xzzsHFF1+Ml156abVFAwA8+OCD2LlzJx555BHcc889aDQauOiii3DkyJHIcVdccQVefPHFYPnSl760ShJ7eNWrXhWR58c//nGw71Of+hT+4z/+A7fddhsefPBB/O53v8O73vWuVZTWw89+9rOIzPfccw8A4PLLLw+O6bX3bLH6sDqke7B6xOJYgdUj3UO/6RGrQ/oMzT7E61//+ubOnTuD/5eWlpqbN29u7tmzZxWlMuOll15qAmg++OCDwbY3v/nNzU9+8pOrJ5TA7t27m+ecc466z3GcZqlUat52223Btl/96ldNAM2HH354hSRMh09+8pPNU045pbm8vNxsNnvvPVv0BqwO6Q6sHrE4lmD1SHdwNOgRq0N6G30X+VlcXMTjjz+OCy+8MNi2Zs0aXHjhhXj44YdXUTIzDh8+DAAYHx+PbP/e976HDRs24KyzzsI111yDubm51RAvwK9//Wts3rwZL3/5y/H+978fzz33HADg8ccfR6PRiLzzM844A1u3bu2pd764uIjvfve7+PCHP4yBgYFge6+9Z4vVhdUh3YXVIxbHAqwe6S76WY9YHdL7KK62AFkxPT2NpaUlTExMRLZPTEzg6aefXiWpzFheXsZVV12F8847D2eddVaw/X3vex9OPPFEbN68Gb/4xS/wuc99Dvv27cPtt9++KnJu27YNe/fuxemnn44XX3wRN9xwA970pjfhySefxNTUFAYHB1GtViPnTExMYGpqalXk1XDnnXfCcRx86EMfCrb12nu2WH1YHdI9WD1icazA6pHuod/1iNUhvY++Iz/9hp07d+LJJ5+M5KsCwJVXXhn8fvWrX41NmzbhrW99K5555hmccsopKy0mduzYEfw+++yzsW3bNpx44on4wQ9+gOHh4RWXJw++/e1vY8eOHdi8eXOwrdfes4VFVvSLDgGsHrGw6FVYPbJysDqk99F3aW8bNmxAoVBoGdnjwIEDmJycXCWpdOzatQt33XUXfvSjH2HLli2xx27btg0AsH///pUQLRHVahWveMUrsH//fkxOTmJxcRGO40SO6aV3/tvf/hb33nsvPvrRj8Ye12vv2WLlYXXIysHqEYujFVaPrBz6SY9YHdIf6DvyMzg4iNe+9rW47777gm3Ly8u47777sH379lWULESz2cSuXbtwxx134P7778fJJ5+ceM4TTzwBANi0aVOXpUuHWq2GZ555Bps2bcJrX/talEqlyDvft28fnnvuuZ555zfffDM2btyIt7/97bHH9dp7tlh5WB2ycrB6xOJohdUjK4d+0iNWh/QJVnnAhVy49dZbm0NDQ829e/c2n3rqqeaVV17ZrFarzampqdUWrdlsNpsf//jHm+vWrWs+8MADzRdffDFY5ubmms1ms7l///7mjTfe2Hzssceazz77bPOHP/xh8+Uvf3nz/PPPXzWZP/3pTzcfeOCB5rPPPtv8yU9+0rzwwgubGzZsaL700kvNZrPZ/NjHPtbcunVr8/77728+9thjze3btze3b9++avJyLC0tNbdu3dr83Oc+F9nei+/ZojdgdUh3YPWIxbEEq0e6g37VI1aH9A/6kvw0m83mN77xjebWrVubg4ODzde//vXNRx55ZLVFCgBAXW6++eZms9lsPvfcc83zzz+/OT4+3hwaGmqeeuqpzc985jPNw4cPr5rM7373u5ubNm1qDg4ONo8//vjmu9/97ub+/fuD/fPz882//Mu/bB533HHNSqXS/LM/+7Pmiy++uGrycvz3f/93E0Bz3759ke29+J4tegdWh3QeVo9YHGuweqTz6Fc9YnVI/2Cg2Ww2VzTUZGFhYWFhYWFhYWFhsQrouz4/FhYWFhYWFhYWFhYWeWDJj4WFhYWFhYWFhYXFMQFLfiwsLCwsLCwsLCwsjglY8mNhYWFhYWFhYWFhcUzAkh8LCwsLCwsLCwsLi2MClvxYWFhYWFhYWFhYWBwTsOTHwsLCwsLCwsLCwuKYgCU/FhYWFhYWFhYWFhbHBCz5sbCwsLCwsLCwsLA4JmDJj4WFhYWFhYWFhYXFMQFLfiwsLCwsLCwsLCwsjglY8mNhYWFhYWFhYWFhcUzg/wcRg/RSpLXRVwAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "NumpyMeent\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "JaxMeent\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "TorchMeent\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# Reticolo\n", - "reti = Reticolo()\n", - "top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell_reti = reti.run_res3(matlab_plot_field=0, res3_npts=20, **option)\n", - "\n", - "print('Reticolo')\n", - "fig, axes = plt.subplots(1, 3, figsize=(10,2))\n", - "if option['pol'] == 0: # TE\n", - " title = ['1D Ey', '1D Hx', '1D Hz', ]\n", - "else: # TM\n", - " title = ['1D Hy', '1D Ex', '1D Ez', ]\n", - "\n", - "for ix in range(len(title)):\n", - " val = abs(field_cell_reti[20:-20, :, ix]) ** 2\n", - " im = axes[ix].imshow(np.flipud(val), cmap='jet', aspect='auto')\n", - " fig.colorbar(im, ax=axes[ix], shrink=1)\n", - " axes[ix].title.set_text(title[ix])\n", - "\n", - "plt.show()\n", - "\n", - "# NumpyMeent\n", - "mee = call_mee(backend=0, **option)\n", - "mee.fft_type = 1\n", - "print('NumpyMeent')\n", - "de_ri, de_ti = mee.conv_solve()\n", - "field_cell_nmeent = mee.calculate_field(res_z=20, res_x=100)\n", - "\n", - "fig, axes = plt.subplots(1, 3, figsize=(10,2))\n", - "if option['pol'] == 0: # TE\n", - " title = ['1D Ey', '1D Hx', '1D Hz', ]\n", - "else: # TM\n", - " title = ['1D Hy', '1D Ex', '1D Ez', ]\n", - "\n", - "for ix in range(len(title)):\n", - " val = abs(field_cell_nmeent[:, 0, :, ix]) ** 2\n", - " im = axes[ix].imshow(val, cmap='jet', aspect='auto')\n", - " fig.colorbar(im, ax=axes[ix], shrink=1)\n", - " axes[ix].title.set_text(title[ix])\n", - "plt.show()\n", - "\n", - "# JaxMeent\n", - "mee = call_mee(backend=1, **option)\n", - "mee.fft_type = 1\n", - "print('JaxMeent')\n", - "de_ri, de_ti = mee.conv_solve()\n", - "field_cell_jmeent = mee.calculate_field(res_z=20, res_x=100)\n", - "\n", - "fig, axes = plt.subplots(1, 3, figsize=(10,2))\n", - "if option['pol'] == 0: # TE\n", - " title = ['1D Ey', '1D Hx', '1D Hz', ]\n", - "else: # TM\n", - " title = ['1D Hy', '1D Ex', '1D Ez', ]\n", - "\n", - "for ix in range(len(title)):\n", - " val = abs(field_cell_jmeent[:, 0, :, ix]) ** 2\n", - " im = axes[ix].imshow(val, cmap='jet', aspect='auto')\n", - " fig.colorbar(im, ax=axes[ix], shrink=1)\n", - " axes[ix].title.set_text(title[ix])\n", - "plt.show()\n", - "\n", - "# TorchMeent\n", - "mee = call_mee(backend=2, **option)\n", - "mee.fft_type = 1\n", - "print('TorchMeent')\n", - "de_ri, de_ti = mee.conv_solve()\n", - "field_cell_tmeent = mee.calculate_field(res_z=20, res_x=100)\n", - "\n", - "fig, axes = plt.subplots(1, 3, figsize=(10,2))\n", - "if option['pol'] == 0: # TE\n", - " title = ['1D Ey', '1D Hx', '1D Hz', ]\n", - "else: # TM\n", - " title = ['1D Hy', '1D Ex', '1D Ez', ]\n", - "\n", - "for ix in range(len(title)):\n", - " val = abs(field_cell_tmeent[:, 0, :, ix]) ** 2\n", - " im = axes[ix].imshow(val, cmap='jet', aspect='auto')\n", - " fig.colorbar(im, ax=axes[ix], shrink=1)\n", - " axes[ix].title.set_text(title[ix])\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3.1. Accuracy" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0IAAADcCAYAAABd2hHaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9e3xkdX3//8zONZOZZDbJJiG7YXe5yEURWhAUUfCKiLZW6pXKxVatglWpWrXfCmq/5Su0lmopWL8V2i/Qei/WC/0pKtSiVqkISFlYYGGXJdlNwmRnMpmZzGR+f3zO+5z3+cznTC6bXXZhXnmcx5mc6+dzLu/zfr1vn65ms9mkgw466KCDDjrooIMOOujgGYQ1T3UDOuiggw466KCDDjrooIMO9jc6RKiDDjrooIMOOuiggw46eMahQ4Q66KCDDjrooIMOOuigg2ccOkSogw466KCDDjrooIMOOnjGoUOEOuiggw466KCDDjrooINnHDpEqIMOOuiggw466KCDDjp4xqFDhDrooIMOOuiggw466KCDZxw6RKiDDjrooIMOOuiggw46eMahQ4Q66KCDDjrooIMOOuigg2ccOkSog1XHpk2buOCCC/bZ8bu6urjsssv22fE76KCDDjrooIMOOnj6o0OE9hOuv/56urq6Iqef/vSn++zcl112WehciUSCTZs28Ud/9EcUCoUVHfOOO+7gsssuW/H+HXTwdMWB8K4PDw9TLpdb1m/atInXvOY1++z8+xubNm2iq6uLl7/85c71X/jCF/zr/otf/GI/t86N73znOx1DTgcHLZ5K+Sa4++67ufDCC9m8eTPpdJpsNssJJ5zAhz/8YR5++OF9fv4Onl6IP9UNeKbhk5/8JJs3b25ZfsQRR+zzc19zzTVks1lmZ2e59dZb+dznPsd///d/8+Mf/3jZx7rjjjv4xCc+wQUXXEA+nw+t27JlC2vWdDh2B89sPJXv+q5du7jmmmv44z/+431+rqca6XSaH/7wh4yPjzMyMhJad+ONN5JOp6lUKk9R61rxne98h6uvvrpDhjo4qPFUybcvfOELvPvd72ZwcJBzzz2Xo48+mnq9zr333ss//dM/cdVVVzE3N0csFtun7ejg6YMOEdrPOOusszjppJOeknP/7u/+LoODgwC8613v4s1vfjNf+tKX+K//+i9OPvnkVTtPKpVatWN10MHBiqfyXT/hhBO48sorec973kN3d/dT0ob9hRe+8IX8/Oc/50tf+hLve9/7/OU7duzgP/7jP/id3/kdvva1rz2FLeygg6cfngr5dscdd/Dud7+bF77whXzrW98il8uF1v/VX/0V//t//+/92qYODn50zPYHEJrNJps2beK3f/u3W9ZVKhX6+vp417vetWrne9GLXgTAQw89FFr+s5/9jFe96lX09fWRyWQ4/fTT+c///E9//WWXXcaHPvQhADZv3uy7xLdt2wa4c4QKhQIf+MAH2LRpE6lUig0bNnDeeecxOTnpb7Nr1y5+//d/n+HhYdLpNMcffzz/+I//uKS+/PKXv+Sss86it7eXbDbLy172sv3iou+gg5VgX7/rH//4x5mYmOCaa65pu92PfvQjurq6+NGPfhRavm3bNrq6urj++uv9ZRdccAHZbJbHHnuM17zmNWSzWdavX8/VV18NwD333MNLX/pSenp62LhxIzfddFPomBJSc/vtt/Oud72LgYEBent7Oe+883jyySf97c4//3wGBweZn59vae8rX/lKjjrqqNCydDrN61//+pbz/fM//zNr167lzDPPdPb9/vvv53d/93fp7+8nnU5z0kkn8c1vfrNlu0KhwPvf/37GxsZIpVIcccQRfPrTn2ZhYaHlev3lX/4lf//3f8/hhx9OKpXiec97Hj//+c9D11Culw4n6qCDpxP2lXz7xCc+QVdXFzfeeGMLCQIjCz71qU+FvEH/8R//wRve8AYOPfRQUqkUY2NjfOADH2Bubi60r8i3hx9+mDPPPJOenh5GR0f55Cc/SbPZXHZbOzh40PEI7WfMzMyElH8wH8SBgQG6urr4vd/7Pa644gqmp6fp7+/3t/m3f/s39uzZw+/93u+tWluEuKxdu9Zf9oMf/ICzzjqLE088kUsvvZQ1a9Zw3XXX8dKXvpT/+I//4OSTT+b1r389DzzwAP/8z//MX//1X/tepnXr1jnPUyqVeNGLXsT//M//8Pa3v53f/M3fZHJykm9+85vs2LGDwcFB5ubmOOOMM9i6dSsXX3wxmzdv5itf+QoXXHABhUIhZOm18etf/5oXvehF9Pb28uEPf5hEIsHnP/95zjjjDG677TZOOeWUVbtmHXSwVDyV7/qLXvQiXvrSl3LFFVfw7ne/e9W8Qo1Gg7POOosXv/jFXHHFFdx4441cfPHF9PT08Kd/+qece+65vP71r+faa6/lvPPO4wUveEFL+MzFF19MPp/nsssuY8uWLVxzzTU8+uijPil729vexj/90z/x7//+76F8pvHxcX7wgx9w6aWXtrTrrW99K6985St56KGHOPzwwwG46aab+N3f/V0SiUTL9r/+9a954QtfyPr16/nIRz5CT08PX/7yl3nd617H1772NX7nd34HgHK5zOmnn87jjz/Ou971Lg499FDuuOMOPvrRj/LEE09w1VVXhY570003USwWede73kVXVxdXXHEFr3/963n44YdJJBK8613vYufOnXzve9/j//2//7e3t6ODDp4y7G/5Vi6X+cEPfsAZZ5zBhg0blrzfV77yFcrlMu9+97sZGBjgv/7rv/jc5z7Hjh07+MpXvhLattFo8KpXvYrnP//5XHHFFdxyyy1ceuml1Ot1PvnJTy6rvR0cRGh2sF9w3XXXNQHnlEql/O22bNnSBJrXXHNNaP/f+q3fam7atKm5sLCw7HNfeumlTaC5ZcuW5u7du5vbtm1rfvGLX2x2d3c3161b15ydnW02m83mwsJC88gjj2yeeeaZofOUy+Xm5s2bm694xSv8ZVdeeWUTaD7yyCMt59u4cWPz/PPP9///+Mc/3gSaX//611u2lfNcddVVTaB5ww03+OtqtVrzBS94QTObzTb37NnjLweal156qf//6173umYymWw+9NBD/rKdO3c2c7lc88UvfvHSL1QHHawCDoR3fffu3c3bbrutCTQ/85nP+Os3btzYPPvss/3/f/jDHzaB5g9/+MPQcR555JEm0Lzuuuv8Zeeff34TaP7FX/yFv+zJJ59sdnd3N7u6upr/8i//4i+///77W95TuS4nnnhis1ar+cuvuOKKJtC8+eabm81ms9loNJobNmxovulNbwq16TOf+Uyzq6ur+fDDD7f0p16vN0dGRpqf+tSnms1ms3nfffc1geZtt93mn/fnP/+5v9/LXvay5nHHHdesVCr+soWFheapp57aPPLII/1ln/rUp5o9PT3NBx54INSWj3zkI81YLNZ87LHHQtdrYGCgOT097W938803N4Hmv/3bv/nLLrroombn09vBwYqnSr796le/agLN97///S3rpqammrt37/anarXqryuXyy3bX3755c2urq7mo48+6i8T+fbe977XX7awsNA8++yzm8lksrl79+5ltbeDgwed0Lj9jKuvvprvfe97oem73/2uv/5Zz3oWp5xyCjfeeKO/bHp6mu9+97uce+65exVGcdRRR7Fu3To2bdrE29/+do444gi++93vkslkALjrrrt48MEHeetb38rU1BSTk5NMTk4yOzvLy172Mm6//fZQOMhS8bWvfY3jjz/et7JqSH++853vMDIywlve8hZ/XSKR4I/+6I8olUrcdtttzmM3Gg3+v//v/+N1r3sdhx12mL/8kEMO4a1vfSs//vGP2bNnz7Lb3EEHe4un8l0HePGLX8xLXvISrrjiipYwkL3BH/zBH/i/8/k8Rx11FD09PbzxjW/0lx911FHk83lnBad3vvOdIS/Nu9/9buLxON/5zncAWLNmDeeeey7f/OY3KRaL/nY33ngjp556qjNBOxaL8cY3vpF//ud/9rcdGxvzw381pqen+cEPfsAb3/hGisWiL+empqY488wzefDBB3n88ccBY01+0YtexNq1a/3tJicnefnLX06j0eD2228PHftNb3pTyMMu5+9Usurg6Yb9Ld/kO57NZlvWHXbYYaxbt86fdIir9obPzs4yOTnJqaeeSrPZ5Je//GXLsS6++GL/d1dXFxdffDG1Wo3vf//7y2pvBwcPOqFx+xknn3zyogmG5513HhdffDGPPvooGzdu5Ctf+Qrz8/O87W1v26tzf+1rX6O3t5fdu3fz2c9+lkceeSQkJB588EHAxOhHYWZmJvShXwoeeughzjnnnLbbPProoxx55JEt1eaOOeYYf70Lu3fvplwut+QNyL4LCwts376dZz/72ctqcwcd7C2eynddcNlll3H66adz7bXX8oEPfGCvj5dOp1tCYPv6+tiwYUOLYtPX1xfK/REceeSRof+z2SyHHHKIH6oL5rp8+tOf5hvf+AbnnXceW7Zs4c477+Taa6+NbNtb3/pWPvvZz/KrX/2Km266iTe/+c1OZWvr1q00m03+7M/+jD/7sz9zHmvXrl2sX7+eBx98kLvvvjsy7HfXrl2h/w899NDQ/yIrXdehgw4OZuxv+SY5QaVSqWXdzTffzPz8PL/61a/44Ac/GFr32GOP8fGPf5xvfvObLe/hzMxM6P81a9aEDKpgCB0Qkk8dPL3QIUIHIN785jfzgQ98gBtvvJGPfexj3HDDDZx00klOZX85ePGLX+zn87z2ta/luOOO49xzz+XOO+9kzZo1vrfnyiuv5IQTTnAew2WN6aCDDlaGffWuC1784hdzxhlncMUVV/CHf/iHLeujrLKNRsO5PKokbdTy5gqTjI899lhOPPFEbrjhBs477zxuuOEGkslkyOtk45RTTuHwww/n/e9/P4888ghvfetbnduJnPvgBz8YWUhBSgAvLCzwile8gg9/+MPO7URJEqz2deigg4MZqynfjjjiCOLxOPfee2/LutNPPx2AeDys0jYaDV7xilcwPT3Nn/zJn3D00UfT09PD448/zgUXXLCiCJcOnn7oEKEDEP39/Zx99tnceOONnHvuufznf/5nS1Lu3iKbzXLppZdy4YUX8uUvf5k3v/nNfpJxb29v5ACFguW4tQ8//HCn8NLYuHEjd999NwsLCyGv0P333++vd2HdunVkMhm2bNnSsu7+++9nzZo1jI2NLbmtHXSwP7E/3vXLLruMM844g89//vMt68RjYQ+MHOWBXQ08+OCDvOQlL/H/L5VKPPHEE7z61a8ObXfeeedxySWX8MQTT3DTTTdx9tlnL+qNfstb3sKf//mfc8wxx0Qac8Tim0gkFpVzhx9+OKVSadHtloNOlbgOnilYTfnW09PjF0B6/PHHWb9+/aL73HPPPTzwwAP84z/+I+edd56//Hvf+55z+4WFBR5++OGQgeOBBx4ATDXcDp6e6OQIHaB429vexn333ceHPvQhYrEYb37zm1f9HOeeey4bNmzg05/+NAAnnngihx9+OH/5l3/pdD/v3r3b/93T0wO0KlAunHPOOfzqV7/iG9/4Rss6sZS++tWvZnx8nC996Uv+unq9zuc+9zmy2axv8bERi8V45Stfyc033xxyXU9MTHDTTTdx2mmn0dvbu2gbO+jgqcK+ftdPP/10zjjjDD796U+3DCy6ceNGYrFYS67L3/3d361qGzT+/u//PlQa+5prrqFer3PWWWeFtnvLW95CV1cX73vf+3j44YeXVGXqD/7gD7j00kv5q7/6q8hthoaGfGL4xBNPtKzXcu6Nb3wjP/nJT/j3f//3lu0KhQL1en3RNtlYjuzsoIODHasp3z7+8Y/TaDT4vd/7PaeOYntexUOrlzebTf7mb/4m8hx/+7d/G9r2b//2b0kkErzsZS9bcbs7OLDR8QjtZ3z3u9/1vRwap556aig29eyzz2ZgYICvfOUrnHXWWQwNDbXsI9aRlYZdJBIJ3ve+9/GhD32IW265hVe96lX83//7fznrrLN49rOfzYUXXsj69et5/PHH+eEPf0hvby//9m//BhjSBPCnf/qnvPnNbyaRSPDa177W/8hrfOhDH+KrX/0qb3jDG3j729/OiSeeyPT0NN/85je59tprOf7443nnO9/J5z//eS644ALuvPNONm3axFe/+lXfguQaM0Dw53/+53zve9/jtNNO4z3veQ/xeJzPf/7zVKtVrrjiihVdmw462FscSO/6pZdeGvLCCPr6+njDG97A5z73Obq6ujj88MP51re+1ZL7spqo1Wq87GUv441vfCNbtmzh7/7u7zjttNP4rd/6rdB269at41WvehVf+cpXyOfznH322Ysee+PGjVx22WWLbnf11Vdz2mmncdxxx/GOd7yDww47jImJCX7yk5+wY8cOfvWrXwFGdn3zm9/kNa95DRdccAEnnngis7Oz3HPPPXz1q19l27ZtfrjxUiGy84/+6I8488wz95mhq4MO9iWeCvn2ohe9iL/927/lve99L0ceeSTnnnsuRx99NLVajQceeIAbb7yRZDLJyMgIAEcffTSHH344H/zgB3n88cfp7e3la1/7WmTOXjqd5pZbbuH888/nlFNO4bvf/S7f/va3+djHPhaZJ9jB0wBPTbG6Zx7alZzEKlMreM973tMEmjfddJPzmCeeeGJzZGRk0XPrkro2ZmZmmn19fc3TTz/dX/bLX/6y+frXv745MDDQTKVSzY0bNzbf+MY3Nm+99dbQvp/61Kea69evb65ZsyZUStsun91smvKWF198cXP9+vXNZDLZ3LBhQ/P8889vTk5O+ttMTEw0L7zwwubg4GAzmUw2jzvuOOd1wSrL22w2m//93//dPPPMM5vZbLaZyWSaL3nJS5p33HHHotemgw5WGwfqu3766ac3gVD57Gaz2dy9e3fznHPOaWYymebatWub73rXu5r33nuvs3x2T0+P87jPfvazW5bbpbrlutx2223Nd77znc21a9c2s9ls89xzz21OTU05+/PlL3+5CTTf+c53Otfb53DBVT672Ww2H3rooeZ5553XHBkZaSYSieb69eubr3nNa5pf/epXQ9sVi8XmRz/60eYRRxzRTCaTzcHBweapp57a/Mu//Eu/DLiUz77yyitbzm/Lq3q93nzve9/bXLduXbOrq6tTSruDgwpPpXwT/PKXv2yed955zUMPPbSZTCabPT09zec+97nNP/7jP25u3bo1tO19993XfPnLX97MZrPNwcHB5jve8Q6/FLdLvj300EPNV77ylc1MJtMcHh5uXnrppc1Go7HktnVw8KGr2exkcR6o+MAHPsA//MM/MD4+7pe4FhSLRfr7+7nqqqu46KKLnqIWdtBBB6uBZ8K7fv3113PhhRfy85//fNFqU4Kbb76Z173uddx+++3OUtgddNDBgY+DQb5dcMEFfPWrX3WG3HXw9EYnR+gARaVS4YYbbuCcc85pERwAt99+O+vXr+cd73jHU9C6DjroYLXQedej8YUvfIHDDjuM00477aluSgcddLACdORbBwc6OjlCBxh27drF97//fb761a8yNTXF+973Pud2Z5999pJi5jvooIMDE513PRr/8i//wt133823v/1t/uZv/qZTaa2DDg4ydORbBwcLOkToAMN9993Hueeey9DQEJ/97GcjS8B20EEHBzc673o03vKWt5DNZvn93/993vOe9zzVzemggw6WiY586+BgwVOaI3T11Vdz5ZVXMj4+zvHHH8/nPvc5Tj755KeqOR100MFBho4M6aCDDvYWHTnSQQfPXDxlOUJf+tKXuOSSS7j00kv57//+b44//njOPPPMfVq2tYMOOnj6oCNDOuigg71FR4500MEzG0+ZR+iUU07hec97nj941cLCAmNjY7z3ve/lIx/5yFPRpA466OAgQkeGdNBBB3uLjhzpoINnNp6SHKFarcadd97JRz/6UX/ZmjVrePnLX85PfvKTRfdfWFhg586d5HK5ThJtB08bNJtNisUio6OjrFmzNGdtpVKhVqtFrk8mk6TT6dVq4gGDvZUh0JEjHTw9sVw58kyVIdDRRTroIArPJDnylBChyclJGo0Gw8PDoeXDw8POkYqr1SrVatX///HHH+fYY4/d5+3soIOnAtu3b2fDhg2LblepVFjX3U27UQ9GRkZ45JFHDlgBtFIsV4ZAR4508MzCUuTIM1mGQEcX6aCDxfBMkCMHRdW4yy+/nE984hMty39n+6c5qfcB1rGbQ3mUPDP0MUOMBjEaFOmhQoYdrGeaAR7kCMYZ4X6OZmvjSJ58YBR+DjwG/BKYAO4DGk3gYWAP8CRQAea8OcC8N6+red1aLuvAXOZuIA2s9aYhYBToNz/7gGd5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0Rg/+OCD43/4h38Y33HHHeN2uz0+ceLEdndtPB6Px//yX/7L8Z49e8Zf//rXxy+++GL0WVtbG4/H4/GxY8fG99133/jb3/72+Jlnnhl/6UtfGl911VXjN77xjdvW5w996EPjr3/96+Nnnnlm/L//9/8e33jjjeP9+/ePT506NR6Px+P3v//948suu2z81a9+dfztb397fPTo0fHRo0e3rb8co9FofNlll40//OEPO8t34jiX2BkoZcjmoJQjJS4klHJkczCrcqSUIbOJmSRC4/F4/KlPfWp82WWXjev1+vj1r3/9+Bvf+MZ2dykCAPXzwAMPjMfj8fi5554bv/GNbxzv3bt33Gg0xtdcc834d37nd8ZnzpzZtj6/613vGh86dGhcr9fHl1xyyfhd73rX+NixY9H69fX18b/6V/9qfNFFF41brdb4V3/1V8cvvvjitvWX43/9r/81BjB+6qmnnOU7cZxL7ByUMmT6KOVIiQsNpRyZPmZVjpQyZDYxNx6Px1vqgipRokSJEiVKlChRokSJbcbM5QiVKFGiRIkSJUqUKFGixKQoiVCJEiVKlChRokSJEiUuOJREqESJEiVKlChRokSJEhccSiJUokSJEiVKlChRokSJCw4lESpRokSJEiVKlChRosQFh5IIlShRokSJEiVKlChR4oJDSYRKlChRokSJEiVKlChxwaEkQiVKlChRokSJEiVKlLjgUBKhEiVKlChRokSJEiVKXHAoiVCJEiVKlChRokSJEiUuOJREqESJEiVKlChRokSJEhccSiJUokSJEiVKlChRokSJCw7/P4c5IVmy3xBIAAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0sAAADcCAYAAAChzzoQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9eXgkV3nv/9FUb2ptbUmWxjMje+wZLxgbm2vHJqx2cELMFgIGDCHs8Euw2ZwQMAFsc5MYhwAmLAFzL5CwBMIaLiQE8IVwEwgQE7PE2HiMB2Y8Hs1IM61pqdXdqlb//jj1Vr11+lQvkmbGkvurp54qVVedOrW99X7f7fQ1Go0GPfTQQw899NBDDz300EMPPcSw6Xh3oIceeuihhx566KGHHnro4YGIHlnqoYceeuihhx566KGHHnpwoEeWeuihhx566KGHHnrooYceHOiRpR566KGHHnrooYceeuihBwd6ZKmHHnrooYceeuihhx566MGBHlnqoYceeuihhx566KGHHnpwoEeWeuihhx566KGHHnrooYceHOiRpR566KGHHnrooYceeuihBwd6ZKmHHnrooYceeuihhx566MGBHlnq4ajgkksu4ZJLLjlq7W/fvp0XvvCFR639HnrooYceeuihhx566JGlY4CPfvSj9PX18Z//+Z/O3y+55BLOOeecY9IHmVKpFFu3buWFL3wh991334ravOOOO7j++uvZvXv32na2hx7WKR5I73oul3O+28eiD8cSl1xyCX19fZx++unO37/+9a+Hcu+zn/3sMe6dG9/5zne4/vrrKRaLx7srPfTQMR4I8k1w7733cvXVV3PGGWeQz+fJ5/OcffbZXHXVVfz4xz8+Jn3o4cGDHll6kOGtb30rH/vYx/jABz7A5Zdfzsc//nEe97jHUalUum7rjjvu4IYbbnCSpa997Wt87WtfW4Me99BDDytBtVrlbW972/HuxjFBLpdj165dfP/732/67ROf+AS5XO449CoZ3/nOd7jhhht6ZKmHHlaAL3/5y5xzzjl87GMf47LLLuNd73oX7373u7n88sv5p3/6J84//3x++ctfHu9u9rCBkDreHejh2OLyyy/nwgsvBOClL30p4+Pj3HTTTXzpS1/iWc961podJ5PJrFlbPfTQQ/c4//zz+dCHPsS1117Lli1bjnd3jip27NiB7/v8/d//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27ZtABw6dIj/+3//L8961rMolUqhxWh2dpYnPOEJ3H333Suqnve5z32O8fFxXvnKVzb91tfXB8A//dM/4Xle6LES/NEf/RGNRoN//ud/Tmz/n/7pn7jooot49KMfHa4bHBzk5S9/Obt37+aOO+7ous899LBSPBDedYDTTjuN3//93+eWW27h/vvvX3V7gpe+9KXhsud5XHjhhTQaDV7ykpeE6wuFAmeeeSa/+MUvmvZ//vOfz9DQUPj/FVdcwUknnRQLy3n+85/P9773vViY7ic+8QmmpqZ43OMe5+zXc5/7XD7/+c+HHijP8/jd3/3dpu0ajQaf+9zneMpTnkKj0YhZx5/whCcwNzfHD3/4QwA+85nP8JCHPISzzjortt1v/MZvAPDNb34z1vZll13Gjh07wv8f9rCHMTw87LwOPfSwHnG85NuRI0cA8223cckll3DiiSeG0/ve977wt/7+/nC5UqkwMzPDIx7xCIDwPde46qqrYv+L3rKWKRA9rC/0CjwcQ1x00UVhcQWNE044gZmZmab1V155JR//+Mf5yle+wstf/nIe//jHr7oP73vf+zjjjDOYm5vjwx/+MN/+9rfJZrPh77t27aLRaPDmN7+ZN7/5zc42Dhw4wNatW7s67j333MOZZ55JKpX8yP3yl79ky5YtMSUKCEP7WlW3+eUvf+l0y+t9N1K55B4e2HggvOuCN73pTXzsYx/jbW97G+9+97vXpM2TTz459v/IyAi5XI7x8fGm9XZeANBU5ruvr4+dO3fG8nae/exn85rXvIZPfOITvOUtb2Fubo4vf/nLvPa1rw0NLDauvPJK/viP/5h//ud/5hOf+ARPfvKTm+QJwMGDBykWi9xyyy3ccsstzrYOHDgAwN13383PfvazxDA52U5gXxsw9/3w4cPO/XvoYb3heMk3eZfn5+ebfvvgBz9IqVRienqa5z3vebHfDh06xA033MCnPvWppvd1bm6uqS1bPu3YsYNNmzb18gofxOiRpQcwZmdnw/EM7rjjDpaXl1dd4UULuac97Wk8+tGP5rnPfS533XUXg4ODYXL0H//xH/OEJzzB2cbOnTtX1YceeughjqPxrgtOO+00nve853HLLbfwhje8oen3JOJRr9cT2/Q8r6N1QEfFWVw44YQTePKTnxySpc9+9rNUq9UmRUjjpJNO4pJLLuEd73gH//7v/55YAU/k3POe9zxe8IIXOLcRK/ny8jLnnnsu73znO53b6URyWPvr0EMP6x1rJd9GRkY46aSTwjxnDTGWugjNs571LL7zne/wute9jvPPPz/UdX77t387VhAmCUkysocHD3pk6QGMq666ilKpxI033si1117LzTff3LbQQTfwPI8bb7yRSy+9lPe+97284Q1v4LTTTgMgnU5z2WWXtdy/GwGyY8cOvve977G0tEQ6nXZuc8opp/CNb3yDUqkUswbfeeed4e9JOOWUU7jrrrua1neybw89HG8c7Xf9TW96Ex//+Me56aabmn6T4i72mD9Hc5ySu+++O/Z/o9Fg165dTWE8z3/+8/md3/kdfvCDH/CJT3yChz/84Tz0oQ9t2fZzn/tcXvrSl1IoFBITyE888USGhoao1+tt5dyOHTv40Y9+xOMf//g1U5p6ylcPDyaspXx70pOexP/6X/+L73//+7FhApJw+PBhbr31Vm644Qbe8pa3hOttGaRx9913c+qpp4b/79q1i+XlZbZv376iPvew/tHLWXqA4rOf/Syf/vSnedvb3sYb3vAGrrzySt70pjfx85//fE2Pc8kll3DRRRdx8803U6lUmJiY4JJLLuGDH/ygM8dBl/IdGBgAmpUsF57xjGcwMzPDe9/73qbfxOL6xCc+kXq93rTNu971Lvr6+rj88ssT23/iE5/I97//fb773e+G6xYWFrjlllvYvn07Z599dts+9tDD8cCxeNd37NjB8573PD74wQ+yf//+2G/Dw8OMj483Va17//vfv2bHt/F3f/d3lEql8P/Pfvaz3H///U3v+OWXXx6OBfev//qvLb1KgiuuuILrrruO97///YnjvXmexzOe8Qw+97nPOa3UWs4961nP4r777uNDH/pQ03aLi4ssLCy07ZONbmRnDz2sZ6y1fPuTP/kT8vk8L37xi5menm763fbgiqfXXq8rXtrQ+U4A73nPewBa6iA9bGz0PEsPQBw4cIA//MM/5NJLL+Xqq68G4L3vfS/f/OY3eeELX8i//du/hS7sF77whfzt3/4t995774qtHq973et45jOfyUc/+lH+4A/+gPe97308+tGP5txzz+VlL3sZp512GtPT03z3u99l7969/OhHPwLMoJee53HTTTcxNzdHNpvlN37jN5xlep///Ofzd3/3d1xzzTV8//vf5zGPeQwL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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0IAAADcCAYAAABd2hHaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9e3xkV3Xn+1WfUw/VQ6qW1JJa/VK72/iBDU5scACDHSAQAtwPgYTwmDEmDDCJTQIMyYTMDTZh7uUDZGaYIYRkMvfCTMAQHuEDQxJygYBJgBBweNgYP7rttrutltSSXOoqlapKp1T3j73XOevsOqVXt+2Wu36fz1GVTp2z9z6Pvfb6rbX22n3tdrtNDz300EMPPfTQQw899NDDeYQdj3cDeuihhx566KGHHnrooYceHmv0iFAPPfTQQw899NBDDz30cN6hR4R66KGHHnrooYceeuihh/MOPSLUQw899NBDDz300EMPPZx36BGhHnrooYceeuihhx566OG8Q48I9dBDDz300EMPPfTQQw/nHXpEqIceeuihhx566KGHHno479AjQj300EMPPfTQQw899NDDeYceEeqhhx566KGHHnrooYcezjv0iFAPZx2Tk5PccMMNj1r5fX193HLLLY9a+T300EMPPfTQQw89PPHRI0KPAT72sY/R19fH97///cTfr7vuOi677LJHrf5bbrmFvr6+cEulUkxOTvJbv/VblMvlLZX57W9/m1tuuWXL5/fQwxMR50pfHxsbo1ardfw+OTnJS17ykket/scak5OT9PX18fznPz/x9z//8z8P5V63Z/JY42/+5m96hpweti0ebxkn+PGPf8zrX/96Dh48SDabpVAocMUVV/C7v/u73H///Y96/T08cdAjQucRPvKRj/AXf/EX/PEf/zFPf/rT+dCHPrRlpejb3/427373uxOJ0D333MOf//mfn2Fre+ihh61idnaWj3zkI493Mx4TZLNZvv71rzM9Pd3x2yc+8Qmy2ezj0Kru+Ju/+Rve/e53P97N6KGHbYs///M/52d/9mf527/9W17+8pfzoQ99iA984AM861nP4n/9r//FxRdfTKvVeryb2cM2gf94N6CHxw6/8iu/wsjICABvfvObedWrXsVf/uVf8s///M88/elPP2v1ZDKZs1ZWDz30sHlcccUVfOADH+A3f/M36e/vf7yb86jiWc96Ft/73vf4y7/8S377t3873H/ixAn+4R/+gV/+5V/mc5/73OPYwh566OFs4dvf/ja/8Ru/wbOe9Sy+9KUvUSwWY7//p//0n/i//q//63FqXQ/bET2P0DmIG264IRbKprezGVLx7Gc/G4CjR4/G9n/3u9/lF3/xFxkcHCSXy3HttdfyrW99K/z9lltu4Xd+53cAOHjwYNi2Y8eOAclzhMrlMm9729uYnJwkk8mwd+9err/+eubm5sJjZmdnecMb3sDY2BjZbJanPvWp/M//+T83dC0/+MEPeNGLXsTAwACFQoHnPe95/NM//dNmb0kPPTymeLT6+rve9S5mZmbW9Qp94xvfoK+vj2984xux/ceOHaOvr4+PfexjsbYWCgUeeughXvKSl1AoFNizZw8f/vCHAbjjjjt47nOfSz6f58CBA9x6662xMiWk5pvf/CZvfvObGR4eZmBggOuvv55HHnkkPO51r3sdIyMjrKysdLT3BS94ARdddFFsXzab5eUvf3lHfZ/85CfZuXMnL3zhCxOv/e677+ZXfuVXGBoaIpvNctVVV/HFL36x47hyucxb3/pW9u3bRyaT4fDhw7zvfe9jdXW143790R/9Ef/9v/93Dh06RCaT4WlPexrf+973YvdQ7pd+1j308ETF2ZZx7373u+nr6+MTn/hEBwkCIw/e85734HleuO8f/uEf+NVf/VX2799PJpNh3759vO1tb2N5ebmjrYVCgfvvv58XvvCF5PN5JiYm+MM//EPa7fam29rD9kDPI/QYYnFxMab4C9wB/81vfnNHzPuXv/xlPvGJTzA6OnrW2iPEZefOneG+v//7v+dFL3oRV155JTfffDM7duzgox/9KM997nP5h3/4B57+9Kfz8pe/nHvvvZdPfvKT/Jf/8l9CL9OuXbsS66lWqzz72c/mpz/9Kb/+67/Oz/7szzI3N8cXv/hFTpw4wcjICMvLy1x33XUcOXKEm266iYMHD/KZz3yGG264gXK5HLP0uvjJT37Cs5/9bAYGBvjd3/1dUqkUf/Znf8Z1113HbbfdxtVXX33W7lkPPWwEj3dff/azn81zn/tc3v/+9/Mbv/EbZ80r1Gq1eNGLXsRznvMc3v/+9/OJT3yCm266iXw+z3/4D/+B1772tbz85S/nT//0T7n++ut5xjOewcGDB2Nl3HTTTZRKJW655RbuuecePvKRj/Dggw+GpOxf/+t/zf/6X/+Lv/u7v4uF7k5PT/P3f//33HzzzR3tes1rXsMLXvACjh49yqFDhwC49dZb+ZVf+RVSqVTH8T/5yU941rOexZ49e/i93/s98vk8n/70p3nZy17G5z73OX75l38ZgFqtxrXXXsvDDz/Mm9/8Zvbv38+3v/1t3vnOd3Ly5Ek++MEPxsq99dZbqVQqvPnNb6avr4/3v//9vPzlL+f+++8nlUrx5je/mampKb7yla/wF3/xF2f6OHro4XHD4yHjarUaf//3f891113H3r17N3zeZz7zGWq1Gr/xG7/B8PAw//zP/8yHPvQhTpw4wWc+85nYsa1Wi1/8xV/k537u53j/+9/Pl7/8ZW6++WaCIOAP//APN9XeHrYJ2j086vjoRz/aBtbcnvzkJ3c9/7777msPDg62f+EXfqEdBMGm67/55pvbQPuee+5pnzp1qn3s2LH2//v//r/t/v7+9q5du9pLS0vtdrvdXl1dbV944YXtF77whe3V1dXw/Fqt1j548GD7F37hF8J9H/jAB9pA+4EHHuio78CBA+3Xve514f/vete72kD7r/7qrzqOlXo++MEPtoH2xz/+8fC3ZrPZfsYzntEuFArt06dPh/uB9s033xz+/7KXvaydTqfbR48eDfdNTU21i8Vi+znPec7Gb1QPPZwhzpW+furUqfZtt93WBtr/+T//5/D3AwcOtF/84heH/3/9619vA+2vf/3rsXIeeOCBNtD+6Ec/Gu573ete1wba//f//X+H+x555JF2f39/u6+vr/2pT30q3H/33Xd39FO5N1deeWW72WyG+9///ve3gfYXvvCFdrvdbrdarfbevXvbv/ZrvxZr03/+z/+53dfX177//vs7ricIgvb4+Hj7Pe95T7vdbrfvuuuuNtC+7bbbwnq/973vhec973nPa19++eXter0e7ltdXW0/85nPbF944YXhvve85z3tfD7fvvfee2Nt+b3f+72253nthx56KHa/hoeH2wsLC+FxX/jCF9pA+3//7/8d7rvxxhvbvaG3h+2Kx1PG/ehHP2oD7be+9a0dv83Pz7dPnToVbo1GI/ytVqt1HP/e97633dfX137wwQfDfSLj3vKWt4T7VldX2y9+8Yvb6XS6ferUqU21t4ftgV5o3GOID3/4w3zlK1/p2J7ylKd0PWdpaYlf/uVfZufOnXzyk5+MuXs3i4suuohdu3YxOTnJr//6r3P48GH+9m//llwuB8APf/hD7rvvPl7zmtcwPz/P3Nwcc3NzLC0t8bznPY9vfvObsXCQjeJzn/scT33qU0Mrq4aEhfzN3/wN4+PjvPrVrw5/S6VS/NZv/RbVapXbbrstsexWq8X/9//9f7zsZS/jggsuCPfv3r2b17zmNfzjP/4jp0+f3nSbe+jhTPB493WA5zznOfz8z/8873//+ztCQM4E/+bf/Jvwe6lU4qKLLiKfz/PKV74y3H/RRRdRKpUSsze96U1vinlpfuM3fgPf9/mbv/kbAHbs2MFrX/tavvjFL1KpVMLjPvGJT/DMZz6zw8ME4Hker3zlK/nkJz8ZHrtv374w/FdjYWGBv//7v+eVr3wllUollHPz8/O88IUv5L777uPhhx8GjCX52c9+Njt37gyPm5ub4/nPfz6tVotvfvObsbJ/7dd+LeZhl/p7Wax6eKLh8ZBxMpYXCoWO3y644AJ27doVbjrMVXvEl5aWmJub45nPfCbtdpsf/OAHHWXddNNN4fe+vj5uuukmms0mX/3qVzfV3h62B3qhcY8hnv70p3PVVVd17JdBNglvfOMbOXr0KN/+9rcZHh4+o/o/97nPMTAwwKlTp/hv/+2/8cADD8QExH333QeYGP1uWFxcjA30G8HRo0d5xSteseYxDz74IBdeeCE7dsS5+SWXXBL+noRTp05Rq9U65g3Iuaurqxw/fpwnP/nJm2pzDz2cCR7vvi645ZZbuPbaa/nTP/1T3va2t51xedlstiMEdnBwkL1793bMdRkcHIzN/RFceOGFsf8LhQK7d+8OQ3UBrr/+et73vvfx+c9/nuuvv5577rmH22+/nT/90z/t2rbXvOY1/Lf/9t/40Y9+xK233sqrXvWqxPk3R44cod1u8wd/8Af8wR/8QWJZs7Oz7Nmzh/vuu48f//jHXcN+Z2dnY//v378/9r/IyqT70EMP2xmPh4yTOUHVarXjty984QusrKzwox/9iHe84x2x3x566CHe9a538cUvfrGjLy4uLsb+37FjR8yoCvCkJz0JICajenjioEeEzmH81//6X/nkJz/Jxz/+ca644oozLu85z3lOOJ/npS99KZdffjmvfe1ruf3229mxY0fo7fnABz7Qtb4kS0wPPfRwZjjbfV3wnOc8h+uuu473v//9/Nt/+287fu82Ub9b6tluFtxu+9tbnGB86aWXcuWVV/Lxj3+c66+/no9//OOk0+mY18nF1VdfzaFDh3jrW9/KAw88wGte85rE40TOveMd7+iaSOHw4cPhsb/wC7/A7/7u7yYeJwqS4Gzfhx56eKLgbMi4w4cP4/s+d955Z8dv1157LQC+H1drW60Wv/ALv8DCwgL//t//ey6++GLy+TwPP/wwN9xww5aiXHp4YqFHhM5R/MM//APveMc7eOtb38prX/vas15+oVDg5ptv5vWvfz2f/vSnedWrXhVOMh4YGOi6QKFgM5mODh06lCi4NA4cOMCPf/xjVldXY16hu+++O/w9Cbt27SKXy3HPPfd0/Hb33XezY8cO9u3bt+G29tDDY41Hu6/fcsstXHfddfzZn/1Zx2/isXDXA+vmgT0buO+++/j5n//58P9qtcrJkyf5pV/6pdhx119/PW9/+9s5efIkt956Ky9+8YvX9Ua/+tWv5j/+x//IJZdc0lXZEmtvKpVaV84dOnSIarW67nGbQS9LXA/nG86WjMvn82ESpIcffpg9e/ase84dd9zBvffey//8n/+T66+/Ptz/la98JfH41dVV7r///piR49577wVMRtwennjozRE6B3Hy5Ele+cpXcs011/CBD3zgUavnta99LXv37uV973sfAFdeeSWHDh3ij/7ojxJdz6dOnQq/5/N5oFOBSsIrXvEKfvSjH/H5z3++4zexlP7SL/0S09PT/OVf/mX4WxAEfOhDH6JQKITWHhee5/GCF7yAL3zhCzG39czMDLfeeivXXHMNAwMD67axhx4eDzwWff3aa6/luuuu433vex/1ej3224EDB/A8r2Ouy5/8yZ88Km0B+O///b/HMkt95CMfIQgCXvSiF8WOe/WrX01fXx+//du/zf3338+/+lf/at2y/82/+TfcfPPN/Kf/9J+6HjM6OhoSw5MnT3b8ruXcK1/5Sr7zne/wd3/3dx3HlctlgiBYt00uNiM7e+hhu+Nsy7h3vetdtFot/tW/+leJeorrfRUvrd7fbrf5r//1v3at44//+I9jx/7xH/8xqVSK5z3veWfa/B7OQfQ8Qucgfuu3fotTp07xu7/7u3zqU5+K/faUpzwlnIwolpGthl2kUil++7d/m9/5nd/hy1/+Mr/4i7/I//gf/4MXvehFPPnJT+b1r389e/bs4eGHH+brX/86AwMD/O///b8BQ5oA/sN/+A+86lWvIpVK8dKXvjQc5DV+53d+h89+9rP86q/+Kr/+67/OlVdeycLCAl/84hf50z/9U5761Kfypje9iT/7sz/jhhtu4Pbbb2dycpLPfvazfOtb3+KDH/xg4noBgv/4H/8jX/nKV7jmmmv4zd/8TXzf58/+7M9oNBq8//3v39K96aGHxwKPVV+/+eabY14YweDgIL/6q7/Khz70Ifr6+jh06BBf+tKXOua+nE00m02e97zn8cpXvpJ77rmHP/mTP+Gaa67h//g//o/Ycbt27eIXf/EX+cxnPkOpVOLFL37xumUfOHBgQ2uTfPjDH+aaa67h8ssv541vfCMXXHABMzMzfOc73+HEiRP86Ec/Aozs+uIXv8hLXvISbrjhBq688kqWlpa44447+OxnP8uxY8fCcOONQmTnb/3Wb/HCF74Qz/N41atetakyeuhhu+Bsy7hnP/vZ/PEf/zFvectbuPDCC3nta1/LxRdfTLPZ5N577+UTn/gE6XSa8fFxAC6++GIOHTrEO97xDh5++GEGBgb43Oc+13XeXjab5ctf/jKve93ruPrqq/nbv/1b/vqv/5rf//3f7zpXsIdtjscnWd35haT0rRrXXnttLN3ktdde2zUtpU5He+WVV7bHx8fXrV+n1HWxuLjYHhwcbF977bXhvh/84Aftl7/85e3h4eF2JpNpHzhwoP3KV76y/bWvfS127nve8572nj172jt27Iil0nbTZ7fbJrXlTTfd1N6zZ087nU639+7d237d617XnpubC4+ZmZlpv/71r2+PjIy00+l0+/LLL4+l7xW496Hdbrf/5V/+pf3CF76wXSgU2rlcrv3zP//z7W9/+9vr3pseejibOJf7utSl02e32+32qVOn2q94xSvauVyuvXPnzvab3/zm9p133pmYPjufz697TQI3Vbfcm9tuu639pje9qb1z5852oVBov/a1r23Pz88nXs+nP/3pNtB+05velPi7W0cSuj2To0ePtq+//vr2+Ph4O5VKtffs2dN+yUte0v7sZz8bO65SqbTf+c53tg8fPtxOp9PtkZGR9jOf+cz2H/3RH4VpwCV99gc+8IGO+t1nGQRB+y1veUt7165d7b6+vl4q7R62FR5vGSf4wQ9+0L7++uvb+/fvb6fT6XY+n28/5SlP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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, axes = plt.subplots(1, 3, figsize=(10,2))\n", - "\n", - "val_reti = abs(np.flip(field_cell_reti[20:-20, :, 0], 0)) ** 2\n", - "val_nmeent = abs(field_cell_nmeent[:, 0, :, 0]) ** 2\n", - "gap = abs(np.flip(field_cell_reti[20:-20, :, 0], 0))**2 - abs(field_cell_nmeent[:,0,:,0])**2\n", - "\n", - "im = axes[0].imshow(val_reti, cmap='jet', aspect='auto')\n", - "fig.colorbar(im, ax=axes[0], shrink=1)\n", - "axes[0].title.set_text('Ey, Reticolo')\n", - "\n", - "im = axes[1].imshow(val_nmeent, cmap='jet', aspect='auto')\n", - "fig.colorbar(im, ax=axes[1], shrink=1)\n", - "axes[1].title.set_text('Ey, NumpyMeent')\n", - "\n", - "im = axes[2].imshow(gap, cmap='jet', aspect='auto')\n", - "fig.colorbar(im, ax=axes[2], shrink=1)\n", - "axes[2].title.set_text('Ey, Gap')\n", - "\n", - "plt.show()\n", - "\n", - "fig, axes = plt.subplots(1, 3, figsize=(10,2))\n", - "\n", - "val_reti = abs(np.flip(field_cell_reti[20:-20, :, 1], 0)) ** 2\n", - "val_nmeent = abs(field_cell_nmeent[:, 0, :, 1]) ** 2\n", - "gap = abs(np.flip(field_cell_reti[20:-20, :, 1], 0))**2 - abs(field_cell_nmeent[:,0,:,1])**2\n", - "\n", - "im = axes[0].imshow(val_reti, cmap='jet', aspect='auto')\n", - "fig.colorbar(im, ax=axes[0], shrink=1)\n", - "axes[0].title.set_text('Hx, Reticolo')\n", - "\n", - "im = axes[1].imshow(val_nmeent, cmap='jet', aspect='auto')\n", - "fig.colorbar(im, ax=axes[1], shrink=1)\n", - "axes[1].title.set_text('Hx, NumpyMeent')\n", - "\n", - "im = axes[2].imshow(gap, cmap='jet', aspect='auto')\n", - "fig.colorbar(im, ax=axes[2], shrink=1)\n", - "axes[2].title.set_text('Hx, Gap')\n", - "\n", - "plt.show()\n", - "\n", - "fig, axes = plt.subplots(1, 3, figsize=(10,2))\n", - "\n", - "val_reti = abs(np.flip(field_cell_reti[20:-20, :, 2], 0)) ** 2\n", - "val_nmeent = abs(field_cell_nmeent[:, 0, :, 2]) ** 2\n", - "gap = abs(np.flip(field_cell_reti[20:-20, :, 2], 0))**2 - abs(field_cell_nmeent[:,0,:,2])**2\n", - "\n", - "im = axes[0].imshow(val_reti, cmap='jet', aspect='auto')\n", - "fig.colorbar(im, ax=axes[0], shrink=1)\n", - "axes[0].title.set_text('Hz, Reticolo')\n", - "\n", - "im = axes[1].imshow(val_nmeent, cmap='jet', aspect='auto')\n", - "fig.colorbar(im, ax=axes[1], shrink=1)\n", - "axes[1].title.set_text('Hz, NumpyMeent')\n", - "\n", - "im = axes[2].imshow(gap, cmap='jet', aspect='auto')\n", - "fig.colorbar(im, ax=axes[2], shrink=1)\n", - "axes[2].title.set_text('Hz, Gap')\n", - "\n", - "plt.show()\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Gap plots (3rd column) show the difference between Meent and Reticolo. \n", - "It seems quite big(~20% of maximum value), but we can see the pattern here that shifting one in x-direction will compensate and neutralize the gap." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3.2. Time" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reticolo\n", - "1.3 s ± 595 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n", - "NumpyMeent CFT\n", - "111 ms ± 12.2 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", - "JaxMeent CFT\n", - "148 ms ± 14.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n", - "TorchMeent CFT\n", - "115 ms ± 1.47 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", - "NumpyMeent DFT\n", - "103 ms ± 5.89 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n", - "JaxMeent DFT\n", - "130 ms ± 14 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n", - "TorchMeent DFT\n", - "116 ms ± 6.47 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n" - ] - } - ], - "source": [ - "# Reticolo\n", - "print('Reticolo')\n", - "reti = Reticolo()\n", - "%timeit top_refl_info, top_tran_info, bottom_refl_info, bottom_tran_info, field_cell_reti = reti.run_res3(matlab_plot_field=0, res3_npts=20, **option)\n", - "\n", - "# NumpyMeent CFT\n", - "print('NumpyMeent CFT')\n", - "nmee = call_mee(backend=0, **option)\n", - "mee.fft_type = 1\n", - "%timeit de_ri, de_ti, field_cell_nmeent = nmee.conv_solve_field()\n", - "\n", - "# JaxMeent CFT\n", - "print('JaxMeent CFT')\n", - "nmee = call_mee(backend=1, **option)\n", - "mee.fft_type = 1\n", - "%timeit de_ri, de_ti, field_cell_nmeent = nmee.conv_solve_field()\n", - "\n", - "# TorchMeent CFT\n", - "print('TorchMeent CFT')\n", - "nmee = call_mee(backend=2, **option)\n", - "mee.fft_type = 1\n", - "%timeit de_ri, de_ti, field_cell_nmeent = nmee.conv_solve_field()\n", - "\n", - "\n", - "# NumpyMeent DFT\n", - "print('NumpyMeent DFT')\n", - "nmee = call_mee(backend=0, **option)\n", - "mee.fft_type = 0\n", - "%timeit de_ri, de_ti, field_cell_nmeent = nmee.conv_solve_field()\n", - "\n", - "# JaxMeent DFT\n", - "print('JaxMeent DFT')\n", - "nmee = call_mee(backend=1, **option)\n", - "mee.fft_type = 0\n", - "%timeit de_ri, de_ti, field_cell_nmeent = nmee.conv_solve_field()\n", - "\n", - "# TorchMeent DFT\n", - "print('TorchMeent DFT')\n", - "nmee = call_mee(backend=2, **option)\n", - "mee.fft_type = 0\n", - "%timeit de_ri, de_ti, field_cell_nmeent = nmee.conv_solve_field()\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Meent is 10 times faster than Reticolo. Again, this is due to overhead (Python <--> Octave)." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.10" - } - }, - "nbformat": 4, - "nbformat_minor": 1 -} diff --git a/examples/FourierTransform.ipynb b/examples/FourierTransform.ipynb deleted file mode 100644 index 63f4192..0000000 --- a/examples/FourierTransform.ipynb +++ /dev/null @@ -1,323 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true, - "ExecuteTime": { - "start_time": "2023-05-08T23:19:00.093938Z", - "end_time": "2023-05-08T23:19:00.444169Z" - } - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "outputs": [], - "source": [ - "x = np.arange(10)\n", - "y = np.array([12,12,12,1,1,1,3,3,3,3,3])\n", - "x_disc = [3, 6]" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "start_time": "2023-05-08T23:19:00.438803Z", - "end_time": "2023-05-08T23:19:00.450890Z" - } - } - }, - { - "cell_type": "code", - "execution_count": 3, - "outputs": [], - "source": [ - "coeffs = np.fft.fft(y)" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "start_time": "2023-05-08T23:19:00.450043Z", - "end_time": "2023-05-08T23:19:00.451171Z" - } - } - }, - { - "cell_type": "code", - "execution_count": 4, - "outputs": [ - { - "data": { - "text/plain": "
", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGdCAYAAACyzRGfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAYYElEQVR4nO3dbYxU9dnA4XsAGZZldypYFjYsujUkKCDVIkYxrUaiIUglTTU22BL90KZdC0jTAm3RNoorthqjEhQ/KE3Flw8FrYk2BBFiFORFjKaVl0iUSICY6A67xJXsnudD4z5uRSt15j+7w3UlJ9k5c3bOnZMJ8+OcmZ1clmVZAAAkMqDSAwAApxbxAQAkJT4AgKTEBwCQlPgAAJISHwBAUuIDAEhKfAAASQ2q9AD/qbu7Ow4ePBh1dXWRy+UqPQ4A8BVkWRZHjx6NxsbGGDDgy89t9Ln4OHjwYDQ1NVV6DADgf3DgwIEYM2bMl27T5+Kjrq4uIv49fH19fYWnAQC+imKxGE1NTT2v41+mz8XHp5da6uvrxQcA9DNf5S0T3nAKACQlPgCApMQHAJCU+AAAkhIfAEBS4gMASEp8AABJiQ8AICnxAQAkddLxsXnz5pg1a1Y0NjZGLpeLdevW9dx3/PjxWLRoUUyaNClqa2ujsbExfvKTn8TBgwdLOTMA0I+ddHx0dHTE5MmTY8WKFZ+779ixY7Fz585YunRp7Ny5M/72t7/F7t274/vf/35JhgUA+r9clmXZ//zLuVysXbs2Zs+e/YXbbNu2LaZOnRrvvvtujB079r8+ZrFYjEKhEG1tbSX9bpcsy+LY8WMlezyqx2efG2cMPeO/fhU0AJ93Mq/fZf9iuba2tsjlcvGNb3zjhPd3dnZGZ2dnz+1isViWOY4dPxbDWoeV5bGpHod/dThGDhtZ6TEAqlpZ/4v38ccfx6JFi+JHP/rRF1ZQa2trFAqFnqWpqamcIwEAFVa2Mx/Hjx+P6667LrIsi5UrV37hdkuWLImFCxf23C4Wi2UJkKGnDY32Je0lf1z6v45POqLhnoaI+PfzBIDyKkt8fBoe7777brz44otfeu0nn89HPp8vxxi95HK5qB1cW/b90L/lcrlKjwBQ9UoeH5+Gx969e2Pjxo0xYsSIUu8CAOjHTjo+2tvbY9++fT239+/fH7t27Yrhw4fH6NGj44c//GHs3Lkznnvuuejq6opDhw5FRMTw4cNj8ODBpZscAOiXTjo+tm/fHpdffnnP7U/frzF37tz4wx/+EM8++2xERHz729/u9XsbN26Myy677H+fFACoCicdH5dddll82Z8G+Rp/NgQAOAX4a0oAQFLiAwBISnwAAEmJDwAgKfEBACQlPgCApMQHAJCU+AAAkhIfAEBS4gMASEp8AABJiQ8AICnxAQAkJT4AgKTEBwCQlPgAAJISHwBAUuIDAEhKfAAASYkPACAp8QEAJCU+AICkxAcAkJT4AACSEh8AQFLiAwBISnwAAEmJDwAgKfEBACQlPgCApMQHAJCU+AAAkhIfAEBS4gMASEp8AABJiQ8AICnxAQAkJT4AgKTEBwCQlPgAAJISHwBAUuIDAEhKfAAASYkPACAp8QEAJCU+AICkxAcAkJT4AACSEh8AQFLiAwBI6qTjY/PmzTFr1qxobGyMXC4X69at63V/lmVx6623xujRo6OmpiamT58ee/fuLdW8AEA/d9Lx0dHREZMnT44VK1ac8P6777477r///njooYdi69atUVtbG1dddVV8/PHHX3tYAKD/G3SyvzBjxoyYMWPGCe/Lsizuu++++P3vfx/XXHNNRET85S9/iYaGhli3bl1cf/31X29aAKDfK+l7Pvbv3x+HDh2K6dOn96wrFApx0UUXxauvvlrKXQEA/dRJn/n4MocOHYqIiIaGhl7rGxoaeu77T52dndHZ2dlzu1gslnIkAKCPqfinXVpbW6NQKPQsTU1NlR4JACijksbHqFGjIiLi8OHDvdYfPny4577/tGTJkmhra+tZDhw4UMqRAIA+pqTx0dzcHKNGjYoNGzb0rCsWi7F169a4+OKLT/g7+Xw+6uvrey0AQPU66fd8tLe3x759+3pu79+/P3bt2hXDhw+PsWPHxoIFC+KOO+6IcePGRXNzcyxdujQaGxtj9uzZpZwbAOinTjo+tm/fHpdffnnP7YULF0ZExNy5c+Oxxx6L3/zmN9HR0RE//elP46OPPopLL700XnjhhRgyZEjppgYA+q1clmVZpYf4rGKxGIVCIdra2lyCIYmOTzpiWOuwiIhoX9IetYNrKzwRQP9zMq/fFf+0CwBwahEfAEBS4gMASEp8AABJiQ8AICnxAQAkJT4AgKTEBwCQlPgAAJISHwBAUuIDAEhKfAAASYkPACAp8QEAJCU+AICkxAcAkJT4AACSEh8AQFLiAwBISnwAAEmJDwAgKfEBACQlPgCApMQHAJCU+AAAkhIfAEBS4gMASEp8AABJiQ8AICnxAQAkJT4AgKTEBwCQlPgAAJISHwBAUuIDAEhKfAAASYkPACAp8QEAJCU+AICkxAcAkJT4AACSEh8AQFLiAwBISnwAAEmJDwAgKfEBACQlPgCApMQHAJCU+AAAkhIfAEBSJY+Prq6uWLp0aTQ3N0dNTU2cffbZcfvtt0eWZaXeFQDQDw0q9QMuX748Vq5cGatXr44JEybE9u3b48Ybb4xCoRDz5s0r9e4AgH6m5PHxyiuvxDXXXBMzZ86MiIizzjornnjiiXjttddKvSsAoB8q+WWXSy65JDZs2BB79uyJiIg33ngjXn755ZgxY0apdwUA9EMlP/OxePHiKBaLMX78+Bg4cGB0dXXFsmXLYs6cOSfcvrOzMzo7O3tuF4vFUo8EAPQhJT/z8fTTT8fjjz8ea9asiZ07d8bq1avjz3/+c6xevfqE27e2tkahUOhZmpqaSj0SANCH5LISfwylqakpFi9eHC0tLT3r7rjjjvjrX/8ab7/99ue2P9GZj6ampmhra4v6+vpSjgYn1PFJRwxrHRYREe1L2qN2cG2FJwLof4rFYhQKha/0+l3yyy7Hjh2LAQN6n1AZOHBgdHd3n3D7fD4f+Xy+1GMAAH1UyeNj1qxZsWzZshg7dmxMmDAhXn/99bj33nvjpptuKvWuAIB+qOTx8cADD8TSpUvjF7/4RRw5ciQaGxvjZz/7Wdx6662l3hUA0A+V/D0fX9fJXDOCUvCeD4Cv72Rev323CwCQlPgAAJISHwBAUuIDAEhKfAAASYkPACAp8QEAJCU+AICkxAcAkJT4AACSEh8AQFLiAwBISnwAAEmJDwAgKfEBACQlPgCApMQHAJCU+AAAkhIfAEBS4gMASEp8AABJiQ8AICnxAQAkJT4AgKTEBwCQlPgAAJISHwBAUuIDAEhKfAAASYkPACAp8QEAJCU+AICkxAcAkJT4AACSEh8AQFLiAwBISnwAAEmJDwAgKfEBACQlPgCApMQHAJCU+AAAkhIfAEBS4gMASEp8AABJiQ8AICnxAQAkJT4AgKTEBwCQlPgAAJISHwBAUmWJj/fffz9uuOGGGDFiRNTU1MSkSZNi+/bt5dgVANDPDCr1A3744Ycxbdq0uPzyy+P555+Pb37zm7F37944/fTTS70rAKAfKnl8LF++PJqamuLRRx/tWdfc3Fzq3QAA/VTJL7s8++yzMWXKlLj22mtj5MiRcf7558cjjzzyhdt3dnZGsVjstQAA1avk8fHOO+/EypUrY9y4cfGPf/wjfv7zn8e8efNi9erVJ9y+tbU1CoVCz9LU1FTqkQCAPiSXZVlWygccPHhwTJkyJV555ZWedfPmzYtt27bFq6+++rntOzs7o7Ozs+d2sViMpqamaGtri/r6+lKOBifU8UlHDGsdFhER7Uvao3ZwbYUnAuh/isViFAqFr/T6XfIzH6NHj45zzz2317pzzjkn3nvvvRNun8/no76+vtcCAFSvksfHtGnTYvfu3b3W7dmzJ84888xS7woA6IdKHh+33HJLbNmyJe68887Yt29frFmzJlatWhUtLS2l3hUA0A+VPD4uvPDCWLt2bTzxxBMxceLEuP322+O+++6LOXPmlHpXAEA/VPK/8xERcfXVV8fVV19djocGAPo53+0CACQlPgCApMQHAJCU+AAAkhIfAEBS4gMASEp8AABJiQ8AICnxAQAkJT4AgKTEBwCQlPgAAJISHwBAUuIDAEhKfAAASYkPACAp8QEAJCU+AICkxAcAkJT4AACSEh8AQFLiAwBISnwAAEmJDwAgKfEBACQlPgCApMQHAJCU+AAAkhIfAEBS4gMASEp8AABJiQ8AICnxAQAkJT4AgKTEBwCQlPgAAJISHwBAUuIDAEhKfAAASYkPACAp8QEAJCU+AICkxAcAkJT4AACSEh8AQFLiAwBISnwAAEmJDwAgKfEBACQlPgCApMoeH3fddVfkcrlYsGBBuXcFAPQDZY2Pbdu2xcMPPxznnXdeOXcDAPQjZYuP9vb2mDNnTjzyyCNx+umnl2s3AEA/U7b4aGlpiZkzZ8b06dO/dLvOzs4oFou9FgCgeg0qx4M++eSTsXPnzti2bdt/3ba1tTX++Mc/lmMMAKAPKvmZjwMHDsT8+fPj8ccfjyFDhvzX7ZcsWRJtbW09y4EDB0o9EgDQh5T8zMeOHTviyJEjccEFF/Ss6+rqis2bN8eDDz4YnZ2dMXDgwJ778vl85PP5Uo8BAPRRJY+PK664It58881e62688cYYP358LFq0qFd4AACnnpLHR11dXUycOLHXutra2hgxYsTn1gMApx5/4RQASKosn3b5Ty+99FKK3QAA/YAzHwBAUuIDAEhKfAAASYkPACAp8QEAJCU+AICkxAcAkJT4AACSEh8AQFLiAwBISnwAAEmJDwAgKfEBACQlPgCApMQHAJCU+AAAkhIfAEBS4gMASEp8AABJiQ8AICnxAQAkNajSAwD0Vd3d3fHBsQ8iImLoaUMjl8tVeCIonUo+p8UHwBf44NgH0XBPQ6XHgLJoX9IetYNrK7Jvl10AgKSc+QD4AkNPG9rz8+FfHa7Y/xKhHD77/E5NfAB8gc9eD68dXCs+oERcdgEAkhIfAEBS4gMASEp8AABJiQ8AICnxAQAkJT4AgKTEBwCQlPgAAJISHwBAUuIDAEhKfAAASYkPACAp8QEAJCU+AICkxAcAkJT4AACSEh8AQFLiAwBISnwAAEmJDwAgKfEBACQlPgCApMQHAJBUyeOjtbU1Lrzwwqirq4uRI0fG7NmzY/fu3aXeDQDQT5U8PjZt2hQtLS2xZcuWWL9+fRw/fjyuvPLK6OjoKPWuAIB+aFCpH/CFF17odfuxxx6LkSNHxo4dO+K73/1uqXcHAPQzJY+P/9TW1hYREcOHDz/h/Z2dndHZ2dlzu1gslnskAKCCyvqG0+7u7liwYEFMmzYtJk6ceMJtWltbo1Ao9CxNTU3lHAkAqLCyxkdLS0u89dZb8eSTT37hNkuWLIm2trae5cCBA+UcCQCosLJddrn55pvjueeei82bN8eYMWO+cLt8Ph/5fL5cYwAAfUzJ4yPLsvjlL38Za9eujZdeeimam5tLvQsAoB8reXy0tLTEmjVr4plnnom6uro4dOhQREQUCoWoqakp9e4AgH6m5O/5WLlyZbS1tcVll10Wo0eP7lmeeuqpUu8KAOiHynLZBQDgi/huFwAgKfEBACQlPgCApMQHAJCU+AAAkhIfAEBS4gMASEp8AABJiQ8AICnxAQAkJT4AgKTEBwCQlPgAAJISHwBAUuIDAEhKfAAASYkPACAp8QEAJCU+AICkxAcAkJT4AACSGlTpAaDSsizr+bnjk44KTkJf89nnw2efJ8DXIz445R07fqzn54Z7Gio4CX3ZsePHYlh+WKXHgKrgsgsAkJQzH5zyzhh6Rhz+1eGIiBh62tDI5XIVnoi+IsuynjNjZww9o8LTQPUQH5zyBgwYECOHjaz0GPRRLrVA6bnsAgAkJT4AgKTEBwCQlPgAAJISHwBAUuIDAEhKfAAASYkPACAp8QEAJCU+AICkxAcAkJT4AACSEh8AQFJ97lttsyyLiIhisVjhSQCAr+rT1+1PX8e/TJ+Lj6NHj0ZERFNTU4UnAQBO1tGjR6NQKHzpNrnsqyRKQt3d3XHw4MGoq6uLXC5X0scuFovR1NQUBw4ciPr6+pI+Nv/PcU7DcU7DcU7HsU6jXMc5y7I4evRoNDY2xoABX/6ujj535mPAgAExZsyYsu6jvr7eEzsBxzkNxzkNxzkdxzqNchzn/3bG41PecAoAJCU+AICkTqn4yOfzcdttt0U+n6/0KFXNcU7DcU7DcU7HsU6jLxznPveGUwCgup1SZz4AgMoTHwBAUuIDAEhKfAAASZ0y8bFixYo466yzYsiQIXHRRRfFa6+9VumRqk5ra2tceOGFUVdXFyNHjozZs2fH7t27Kz1W1bvrrrsil8vFggULKj1K1Xn//ffjhhtuiBEjRkRNTU1MmjQptm/fXumxqkpXV1csXbo0mpubo6amJs4+++y4/fbbv9L3g/DlNm/eHLNmzYrGxsbI5XKxbt26XvdnWRa33nprjB49OmpqamL69Omxd+/eJLOdEvHx1FNPxcKFC+O2226LnTt3xuTJk+Oqq66KI0eOVHq0qrJp06ZoaWmJLVu2xPr16+P48eNx5ZVXRkdHR6VHq1rbtm2Lhx9+OM4777xKj1J1Pvzww5g2bVqcdtpp8fzzz8c///nPuOeee+L000+v9GhVZfny5bFy5cp48MEH41//+lcsX7487r777njggQcqPVq/19HREZMnT44VK1ac8P6777477r///njooYdi69atUVtbG1dddVV8/PHH5R8uOwVMnTo1a2lp6bnd1dWVNTY2Zq2trRWcqvodOXIki4hs06ZNlR6lKh09ejQbN25ctn79+ux73/teNn/+/EqPVFUWLVqUXXrppZUeo+rNnDkzu+mmm3qt+8EPfpDNmTOnQhNVp4jI1q5d23O7u7s7GzVqVPanP/2pZ91HH32U5fP57Iknnij7PFV/5uOTTz6JHTt2xPTp03vWDRgwIKZPnx6vvvpqBSerfm1tbRERMXz48ApPUp1aWlpi5syZvZ7blM6zzz4bU6ZMiWuvvTZGjhwZ559/fjzyyCOVHqvqXHLJJbFhw4bYs2dPRES88cYb8fLLL8eMGTMqPFl1279/fxw6dKjXvx+FQiEuuuiiJK+Nfe6L5Urtgw8+iK6urmhoaOi1vqGhId5+++0KTVX9uru7Y8GCBTFt2rSYOHFipcepOk8++WTs3Lkztm3bVulRqtY777wTK1eujIULF8Zvf/vb2LZtW8ybNy8GDx4cc+fOrfR4VWPx4sVRLBZj/PjxMXDgwOjq6oply5bFnDlzKj1aVTt06FBExAlfGz+9r5yqPj6ojJaWlnjrrbfi5ZdfrvQoVefAgQMxf/78WL9+fQwZMqTS41St7u7umDJlStx5550REXH++efHW2+9FQ899JD4KKGnn346Hn/88VizZk1MmDAhdu3aFQsWLIjGxkbHuYpV/WWXM844IwYOHBiHDx/utf7w4cMxatSoCk1V3W6++eZ47rnnYuPGjTFmzJhKj1N1duzYEUeOHIkLLrggBg0aFIMGDYpNmzbF/fffH4MGDYqurq5Kj1gVRo8eHeeee26vdeecc0689957FZqoOv3617+OxYsXx/XXXx+TJk2KH//4x3HLLbdEa2trpUerap++/lXqtbHq42Pw4MHxne98JzZs2NCzrru7OzZs2BAXX3xxBSerPlmWxc033xxr166NF198MZqbmys9UlW64oor4s0334xdu3b1LFOmTIk5c+bErl27YuDAgZUesSpMmzbtcx8V37NnT5x55pkVmqg6HTt2LAYM6P1SNHDgwOju7q7QRKeG5ubmGDVqVK/XxmKxGFu3bk3y2nhKXHZZuHBhzJ07N6ZMmRJTp06N++67Lzo6OuLGG2+s9GhVpaWlJdasWRPPPPNM1NXV9Vw3LBQKUVNTU+HpqkddXd3n3kdTW1sbI0aM8P6aErrlllvikksuiTvvvDOuu+66eO2112LVqlWxatWqSo9WVWbNmhXLli2LsWPHxoQJE+L111+Pe++9N2666aZKj9bvtbe3x759+3pu79+/P3bt2hXDhw+PsWPHxoIFC+KOO+6IcePGRXNzcyxdujQaGxtj9uzZ5R+u7J+n6SMeeOCBbOzYsdngwYOzqVOnZlu2bKn0SFUnIk64PProo5Uerer5qG15/P3vf88mTpyY5fP5bPz48dmqVasqPVLVKRaL2fz587OxY8dmQ4YMyb71rW9lv/vd77LOzs5Kj9bvbdy48YT/Js+dOzfLsn9/3Hbp0qVZQ0NDls/nsyuuuCLbvXt3ktlyWebPyAEA6VT9ez4AgL5FfAAASYkPACAp8QEAJCU+AICkxAcAkJT4AACSEh8AQFLiAwBISnwAAEmJDwAgKfEBACT1f/Qrv/yOobf/AAAAAElFTkSuQmCC" - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(range(4), [12,12,12,12], 'g')\n", - "plt.plot(range(3,7), [1,1,1,1], 'g')\n", - "plt.plot(range(6,11), [3,3,3,3,3], 'g')\n", - "plt.plot((x_disc,x_disc), ([y[0], y[3]], [y[3], y[6]]), 'g')\n", - "plt.show()" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "start_time": "2023-05-08T23:19:00.450415Z", - "end_time": "2023-05-08T23:19:00.526379Z" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "# Fourier series" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "markdown", - "source": [ - "\\begin{align}\n", - " f(x) = \\sum_{n=-N}^{N} c_n \\exp{\\bigg(\\frac{j \\cdot 2\\pi n x}{L}}\\bigg) dx,\n", - "\\end{align}" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "markdown", - "source": [ - "We are interested in $c_n$.\n", - "\n", - "And we can calculate it with one of these methods:\n", - "1. Discrete Fourier series (DFT)\n", - "2. (Continuous) Fourier series (CFT)\n", - "3. Improved DFT" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "markdown", - "source": [ - "## 1. Discrete Fourier series\n", - "\\begin{equation}\n", - " c_n = \\frac{1}{P}\\sum_{i=0}^{P-1}f_i \\exp{(-j\\cdot nx_i)},\n", - "\\end{equation}\n", - "\n", - "Just put permittivity array into `np.fft.fft` function" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": 5, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 8.69936615 -4.00205239j 1.23106871 -1.93212957j\n", - " -2.11988593 +5.59928317j 7.36609707+18.61282376j\n", - " 23.823354 +8.99784817j 54. +0.j\n", - " 23.823354 -8.99784817j 7.36609707-18.61282376j\n", - " -2.11988593 -5.59928317j 1.23106871 +1.93212957j\n", - " 8.69936615 +4.00205239j]\n" - ] - } - ], - "source": [ - "dft_coeff = np.fft.fftshift(np.fft.fft(y))\n", - "print(dft_coeff)" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "start_time": "2023-05-08T23:19:00.525813Z", - "end_time": "2023-05-08T23:19:00.529005Z" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "Here, the result array has 11 elements, which is the size of input array." - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "markdown", - "source": [ - "## 2. Continuous Fourier series (L is normalized to 1)\n", - "\\begin{align}\n", - " c_n = \\int_{0}^{1}f(x)\\exp{\\big({-j \\cdot 2\\pi nx}}\\big) dx,\n", - "\\end{align}" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "markdown", - "source": [ - "Here, $f(x)$ is $\\varepsilon$ and we know it is piecewise constant. Then formula becomes" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "markdown", - "source": [ - "\\begin{align}\n", - " c_n =& \\sum_{i=0}^{P-1}\\int_{x_i}^{x_{i+1}}\\varepsilon_p\\cdot \\exp{(-j \\cdot 2\\pi n x)}dx \\\\\n", - " =& \\int_{x_0}^{x_1}\\varepsilon_1\\cdot \\exp{(-j \\cdot 2\\pi n x)}dx + \\int_{x_1}^{x_2}\\varepsilon_2\\cdot \\exp{(-j \\cdot 2\\pi n x)}dx + \\cdots + \\int_{x_{P-1}}^{x_P}\\varepsilon_P\\cdot \\exp{(-j \\cdot 2\\pi n x)}dx,\n", - "\\end{align}\n", - "which is free from discretization resolution." - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "markdown", - "source": [ - "## 3. Improved DFT" - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "markdown", - "source": [ - "Now we extended the input array of DFT (from 11 elements to 33 elements) so we have 33 fourier coefficients as an output." - ], - "metadata": { - "collapsed": false - } - }, - { - "cell_type": "code", - "execution_count": 6, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[ 8.20457455e+00-4.76729023e+00j 5.85263525e-01-2.02240950e+00j\n", - " 5.29990719e-01+4.62576484e+00j 9.89505006e+00+5.76525631e+00j\n", - " 6.93810127e+00-3.75139356e+00j -1.77635684e-15-2.66453526e-15j\n", - " 2.45950173e-01+8.80431478e+00j 1.24296074e+01+7.11078232e+00j\n", - " 6.01471955e+00-2.61077140e+00j -2.33593223e+00+2.43077627e+00j\n", - " -4.86041353e-02+1.75315421e+01j 1.79421280e+01+1.02926752e+01j\n", - " 5.44387482e+00-1.34320293e+00j -1.29043681e+01+9.56131328e+00j\n", - " -2.26366249e-01+5.71839973e+01j 6.42860106e+01+3.95492528e+01j\n", - " 1.62000000e+02+0.00000000e+00j 6.42860106e+01-3.95492528e+01j\n", - " -2.26366249e-01-5.71839973e+01j -1.29043681e+01-9.56131328e+00j\n", - " 5.44387482e+00+1.34320293e+00j 1.79421280e+01-1.02926752e+01j\n", - " -4.86041353e-02-1.75315421e+01j -2.33593223e+00-2.43077627e+00j\n", - " 6.01471955e+00+2.61077140e+00j 1.24296074e+01-7.11078232e+00j\n", - " 2.45950173e-01-8.80431478e+00j 0.00000000e+00-8.88178420e-16j\n", - " 6.93810127e+00+3.75139356e+00j 9.89505006e+00-5.76525631e+00j\n", - " 5.29990719e-01-4.62576484e+00j 5.85263525e-01+2.02240950e+00j\n", - " 8.20457455e+00+4.76729023e+00j]\n" - ] - } - ], - "source": [ - "yy = y.repeat(3)\n", - "dft_coeff2 = np.fft.fftshift(np.fft.fft(yy))\n", - "print(dft_coeff2)" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "start_time": "2023-05-08T23:19:00.530451Z", - "end_time": "2023-05-08T23:19:00.537538Z" - } - } - }, - { - "cell_type": "code", - "execution_count": 7, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/yongha/miniconda3/envs/rcwa/lib/python3.10/site-packages/matplotlib/cbook/__init__.py:1335: ComplexWarning: Casting complex values to real discards the imaginary part\n", - " return np.asarray(x, float)\n" - ] - }, - { - "data": { - "text/plain": "
", - "image/png": "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pNat8XxGH+C2lcDB7zm8Q6QSBihEzYHBAPSZoHUrvEtYOyDhXq1bQeS12C9JREREusMAhYiIiHSHAQoRERHpDgMUIiIi0h0GKERERKQ7DFCIiIhIdxigEBERke4wQCEiIiLdYYBCREREusMAhYiIiHSHAQoRERHpDgMUIiIi0h0GKERERKQ7HrmasSRJAID8/HyNW0JERESNJX9vy9/j9fHIAKWgoAAAEBcXp3FLiIiIyFkFBQUICwur9xiD1JgwRmdsNhsyMzMREhICg8GgdXMAiKgwLi4OGRkZCA0N1bo5usHXpW58bWrH16VufG1qx9eldnp8XSRJQkFBAWJjY2E01p9l4pE9KEajEe3atdO6GbUKDQ3VzRtBT/i61I2vTe34utSNr03t+LrUTm+vS0M9JzImyRIREZHuMEAhIiIi3WGAohCTyYS5c+fCZDJp3RRd4etSN742tePrUje+NrXj61I7T39dPDJJloiIiLwbe1CIiIhIdxigEBERke4wQCEiIiLdYYBCREREusMARQEvvvgiLrvsMgQFBSE8PLzWYwwGQ43bypUr3dtQN2vM65Keno6xY8ciKCgIUVFR+Oc//4mKigr3NlQHOnbsWOP98fLLL2vdLE0sWrQIHTt2REBAABISErBz506tm6Sp5557rsZ7o1u3blo3SxNbt27FuHHjEBsbC4PBgDVr1lTbL0kSnn32WcTExCAwMBAjRozA4cOHtWmsGzX0utxxxx013kOjR4/WprFOYICigLKyMtxyyy24//776z1uyZIlyMrKctxuvPFG9zRQIw29LlarFWPHjkVZWRm2b9+Ojz/+GEuXLsWzzz7r5pbqw/z586u9Px588EGtm+R2q1atwuzZszF37lzs2bMHffr0wahRo3D69Gmtm6apSy65pNp7Y9u2bVo3SRNFRUXo06cPFi1aVOv+V199FW+99RYWL16M5ORkBAcHY9SoUSgtLXVzS92rodcFAEaPHl3tPfTZZ5+5sYUukkgxS5YskcLCwmrdB0D6+uuv3doevajrdfnhhx8ko9EoZWdnO+577733pNDQUMlisbixhdrr0KGD9MYbb2jdDM0NHjxYmjlzpuNnq9UqxcbGSgsWLNCwVdqaO3eu1KdPH62boTsXfqbabDYpOjpaWrhwoeO+vLw8yWQySZ999pkGLdRGbd8106ZNk2644QZN2tMU7EFxo5kzZyIyMhKDBw/G//73v0YtN+3NkpKS0KtXL7Rp08Zx36hRo5Cfn4/9+/dr2DJtvPzyy2jVqhX69euHhQsXNruhrrKyMqSkpGDEiBGO+4xGI0aMGIGkpCQNW6a9w4cPIzY2Fp06dcLkyZORnp6udZN059ixY8jOzq72/gkLC0NCQkKzf/8AwObNmxEVFYWuXbvi/vvvx7lz57RuUoM8crFATzR//nxcc801CAoKws8//4wHHngAhYWFeOihh7Rummays7OrBScAHD9nZ2dr0STNPPTQQ+jfvz8iIiKwfft2zJkzB1lZWXj99de1bprbnD17Flartdb3xMGDBzVqlfYSEhKwdOlSdO3aFVlZWZg3bx6uvPJK7Nu3DyEhIVo3Tzfkz4za3j/N7fPkQqNHj8ZNN92E+Ph4pKWl4amnnkJiYiKSkpLg4+OjdfPqxAClDk8++SReeeWVeo85cOBAo5PVnnnmGcd2v379UFRUhIULF3pcgKL06+LNnHmtZs+e7bivd+/e8Pf3x7333osFCxZ4bJlqUkZiYqJju3fv3khISECHDh3w+eefY/r06Rq2jDzFxIkTHdu9evVC79690blzZ2zevBnDhw/XsGX1Y4BSh0cffRR33HFHvcd06tTJ5fMnJCTg+eefh8Vi8agvICVfl+jo6BozNHJychz7PF1TXquEhARUVFTg+PHj6Nq1qwqt05/IyEj4+Pg43gOynJwcr3g/KCU8PBxdunTBkSNHtG6KrsjvkZycHMTExDjuz8nJQd++fTVqlT516tQJkZGROHLkCAMUT9S6dWu0bt1atfOnpqaiZcuWHhWcAMq+LkOGDMGLL76I06dPIyoqCgCwfv16hIaGokePHoo8h5aa8lqlpqbCaDQ6XpfmwN/fHwMGDMDGjRsdM9xsNhs2btyIWbNmads4HSksLERaWhpuv/12rZuiK/Hx8YiOjsbGjRsdAUl+fj6Sk5MbnGHZ3Jw8eRLnzp2rFsjpEQMUBaSnpyM3Nxfp6emwWq1ITU0FAFx00UVo0aIFvvvuO+Tk5ODSSy9FQEAA1q9fj5deegmPPfaYtg1XWUOvy8iRI9GjRw/cfvvtePXVV5GdnY2nn34aM2fO9LjArSmSkpKQnJyMq6++GiEhIUhKSsIjjzyCKVOmoGXLllo3z61mz56NadOmYeDAgRg8eDDefPNNFBUV4c4779S6aZp57LHHMG7cOHTo0AGZmZmYO3cufHx8MGnSJK2b5naFhYXVeo6OHTuG1NRUREREoH379nj44Yfxwgsv4OKLL0Z8fDyeeeYZxMbGen1Jh/pel4iICMybNw/jx49HdHQ00tLS8Pjjj+Oiiy7CqFGjNGx1I2g9jcgbTJs2TQJQ47Zp0yZJkiTpxx9/lPr27Su1aNFCCg4Olvr06SMtXrxYslqt2jZcZQ29LpIkScePH5cSExOlwMBAKTIyUnr00Uel8vJy7RqtgZSUFCkhIUEKCwuTAgICpO7du0svvfSSVFpaqnXTNPH2229L7du3l/z9/aXBgwdLO3bs0LpJmpowYYIUExMj+fv7S23btpUmTJggHTlyROtmaWLTpk21fqZMmzZNkiQx1fiZZ56R2rRpI5lMJmn48OHSoUOHtG20G9T3uhQXF0sjR46UWrduLfn5+UkdOnSQ7rnnnmrlHfTKIEnNfK4rERER6Q7roBAREZHuMEAhIiIi3WGAQkRERLrDAIWIiIh0hwEKERER6Q4DFCIiItIdBihERESkOwxQiIiISHcYoBAREZHuMEAhIiIi3WGAQkRERLrDAIWIiIh05/8BviZP00N7p6sAAAAASUVORK5CYII=" - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(np.arange(-len(dft_coeff)//2+1, len(dft_coeff)//2+1), dft_coeff)\n", - "plt.plot(np.arange(-len(dft_coeff2)//2+1, len(dft_coeff2)//2+1), dft_coeff2)\n", - "plt.show()" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "start_time": "2023-05-08T23:19:00.537026Z", - "end_time": "2023-05-08T23:19:00.711626Z" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "Extended input array (same pattern but with more resolution) makes more Fourier coefficients" - ], - "metadata": { - "collapsed": false - } - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/electric-field-fno/data.py b/examples/electric-field-fno/data.py index 0cb294d..ca9d614 100644 --- a/examples/electric-field-fno/data.py +++ b/examples/electric-field-fno/data.py @@ -1,35 +1,24 @@ -from typing import Tuple import random -from glob import glob -from collections import defaultdict -from datetime import datetime -import multiprocessing as mp -from functools import cache -from pathlib import Path - -import h5py -import numpy as np -from tqdm import tqdm +import torch import matplotlib.pyplot as plt +import numpy as np -import torch -from torch.utils.data import DataLoader, random_split +from datetime import datetime +from glob import glob +from neuralop.datasets.tensor_dataset import TensorDataset +from threadpoolctl import ThreadpoolController from torch.utils.data.dataset import Dataset - - -import pytorch_lightning as pl +from tqdm import tqdm import meent -# from meent.on_numpy.emsolver.convolution_matrix import to_conv_mat_continuous from meent.on_numpy.modeler.modeling import find_nk_index, read_material_table -from neuralop.datasets.tensor_dataset import TensorDataset +import constants +import utils + -from threadpoolctl import ThreadpoolController controller = ThreadpoolController() -import constants -import utils class LazyDataset(Dataset): def __init__(self, path): @@ -50,22 +39,20 @@ def __getitem__(self, idx): @controller.wrap(limits=4) def get_field( pattern_input, - wavelength=1100, #900 - deflected_angle=60, #50 - fourier_order=40, + wavelength=1100, # 900 + deflected_angle=60, # 50 + fto=40, field_res=(256, 1, 32) ): period = [abs(wavelength / np.sin(deflected_angle / 180 * np.pi))] n_ridge = 'p_si__real' n_groove = 1 - wavelength = np.array([wavelength]) - grating_type = 0 thickness = [325] * 8 if type(n_ridge) == str: mat_table = read_material_table() n_ridge = find_nk_index(n_ridge, mat_table, wavelength) - ucell = np.array([[pattern_input]]) + ucell = pattern_input.numpy().reshape((1, 1, -1)) ucell = (ucell + 1) / 2 ucell = ucell * (n_ridge - n_groove) + n_groove ucell_new = np.ones((len(thickness), 1, ucell.shape[-1])) @@ -73,8 +60,8 @@ def get_field( ucell_new[2] = ucell mee = meent.call_mee( - mode=0, wavelength=wavelength, period=period, grating_type=0, n_I=1.45, n_II=1., - theta=0, phi=0, psi=0, fourier_order=fourier_order, pol=1, + backend=0, wavelength=wavelength, period=period, n_top=1.45, n_bot=1., + theta=0, phi=0, psi=0, fto=fto, pol=1, thickness=thickness, ucell=ucell_new ) @@ -83,7 +70,7 @@ def get_field( res_x=field_res[0], res_y=field_res[1], res_z=field_res[2], ) - field_ex= np.flipud(field_cell[:, 0, :, 1]) + field_ex = np.flipud(field_cell[:, 0, :, 1]) return field_ex diff --git a/examples/electric-field-fno/main.py b/examples/electric-field-fno/main.py index 0caebf9..9bd9f1d 100644 --- a/examples/electric-field-fno/main.py +++ b/examples/electric-field-fno/main.py @@ -1,24 +1,14 @@ -import sys -from pathlib import Path -from glob import glob -import numpy as np - +import hydra import torch + from torch.utils.data import DataLoader -from torch.utils.data.dataset import Dataset -from torch.utils.tensorboard import SummaryWriter from neuralop import Trainer -from neuralop.training.callbacks import BasicLoggerCallback, CheckpointCallback, Callback from neuralop import LpLoss, H1Loss from neuralop.utils import count_model_params -from neuralop.datasets.tensor_dataset import TensorDataset - -import hydra import models from utils import seed_all -from data import FieldData, LazyDataset from callbacks import TensorboardCallback, CustomCheckpointCallback from losses import ( StructuralSimilarityIndexMeasure, @@ -38,7 +28,7 @@ def load_data(data_dir): test_ds = torch.load(data_dir) train_loader = DataLoader(train_ds, batch_size=32, shuffle=True) - test_loader = DataLoader(test_ds, batch_size=32)#, shuffle=True) + test_loader = DataLoader(test_ds, batch_size=32) # , shuffle=True) return train_loader, test_loader diff --git a/examples/electric-field-fno/models.py b/examples/electric-field-fno/models.py index b275401..7cd3caa 100644 --- a/examples/electric-field-fno/models.py +++ b/examples/electric-field-fno/models.py @@ -4,6 +4,7 @@ from neuralop.models import TFNO, FNO + class Deconv1(nn.Module): def __init__(self): super().__init__() @@ -32,6 +33,7 @@ def forward(self, x, **kwargs): x = F.gelu(self.deconv3(x)) return x + class NO1(nn.Module): def __init__(self): @@ -78,6 +80,7 @@ def forward(self, x, **kwargs): return x + class NO3(nn.Module): def __init__(self, **config): super().__init__() @@ -104,6 +107,7 @@ def forward(self, x, **kwargs): x = self.fno(empty) return x + class CarstenNO(nn.Module): def __init__(self, **config): @@ -191,6 +195,7 @@ def __init__(self, in_channels, out_channels): def forward(self, x): return self.conv(x) + class UNet(nn.Module): def __init__(self, n_channels=1, bilinear=False): super(UNet, self).__init__() @@ -303,4 +308,4 @@ def forward(self, x, **kwargs): x = self.outc(x) - return x \ No newline at end of file + return x diff --git a/examples/electric-field-fno/utils.py b/examples/electric-field-fno/utils.py index 41974de..521e564 100644 --- a/examples/electric-field-fno/utils.py +++ b/examples/electric-field-fno/utils.py @@ -1,10 +1,10 @@ import random -import os import numpy as np import torch import constants + # 160, 192 # 40, 48 def carve_pattern( @@ -21,7 +21,7 @@ def carve_pattern( if isinstance(pattern, np.ndarray): canvas = np.full((B, C, width, width), fill_value) elif isinstance(pattern, torch.Tensor): - canvas = torch.full((B, C, width, width), fill_value) + canvas = torch.full((B, C, width, width), fill_value) if isinstance(pattern, np.ndarray): pattern = pattern.repeat(height, 2) @@ -30,14 +30,15 @@ def carve_pattern( canvas[:, :, upper_idx:lower_idx, :] = pattern - return canvas # (1, 1, n, n) + return canvas # (1, 1, n, n) -def to_blob(n_times, patterns): # expects Tensor input +def to_blob(n_times, patterns): # expects Tensor input return torch.stack( [np.repeat(i, n_times) for i in patterns] ) + def seed_all(seed): random.seed(seed) np.random.seed(seed) diff --git a/examples/ocd/arxiv_ocd_optimize.py b/examples/ocd/arxiv_ocd_optimize.py index 3740758..63db6a3 100644 --- a/examples/ocd/arxiv_ocd_optimize.py +++ b/examples/ocd/arxiv_ocd_optimize.py @@ -75,9 +75,58 @@ def plot_topview(plot_option, layer_info_list, period, save_path='', fig_file='' raise ValueError +def forward(): + pass + + def modelling_ref_index(wavelength, rcwa_options, modeling_options, params_name, params_value, instructions): - mee = meent.call_mee(fft_type=2, wavelength=wavelength, **rcwa_options) + mee = meent.call_mee(wavelength=wavelength, **rcwa_options) + + t = mee.thickness + + for i in range(len(t)): + if f'l{i+1}_thickness' in params_name: + t[i] = params_value[params_name[f'l{i+1}_thickness']].reshape((1, 1)) + mee.thickness = t + + mat_table = read_material_table() + + ucell = [] + for i, layer in enumerate(instructions): + obj_list_per_layer = [] + for j, _ in enumerate(layer): + instructions_new = [] + instructions_target = instructions[i][j] + for k, inst in enumerate(instructions_target): + if k == 0: + instructions_new.append(inst) + elif inst in params_name: + instructions_new.append(params_value[params_name[inst]]) + elif inst in modeling_options: + if inst[-7:] == 'n_index' and type(modeling_options[inst]) is str: + a = find_nk_index(modeling_options[inst], mat_table, wavelength).conj() # TODO: confirm conj. + else: + a = modeling_options[inst] + instructions_new.append(a) + else: + raise ValueError + obj_list_per_layer.append(instructions_new) + + a = modeling_options[f'l{i+1}_n_base'] + if type(a) is str: + a = find_nk_index(a, mat_table, wavelength).conj() + + ucell.append([a, obj_list_per_layer]) + mee.ucell = ucell + # mee.draw(layer_info_list) + + return mee, ucell + + +def modelling_ref_index_old(wavelength, rcwa_options, modeling_options, params_name, params_value, instructions): + + mee = meent.call_mee(wavelength=wavelength, **rcwa_options) t = mee.thickness @@ -131,8 +180,8 @@ def reflectance_mode_00(mee, wavelength): return reflectance -def generate_spectrum(rcwa_options, modeling_options, params_name, params_value, instructions): - wavelength_list = rcwa_options['wavelength_list'] +def generate_spectrum(rcwa_options, modeling_options, params_name, params_value, instructions, wavelength_list): + # wavelength_list = rcwa_options['wavelength_list'] spectrum = torch.zeros(len(wavelength_list)) for i, wl in enumerate(wavelength_list): @@ -142,7 +191,7 @@ def generate_spectrum(rcwa_options, modeling_options, params_name, params_value, return spectrum, layer_info_list -def gradient_descent(rcwa_options, modeling_options, params_interest, params_gt, instructions, optimizer_option, +def gradient_descent(rcwa_options, modeling_options, params_interest, params_gt, instructions, optimizer_option, wavelength_list, n_iters=3, n_steps=3, show_spectrum=0, show_topview=0, algo_name=''): gt_name = {k: i for i, (k, v) in enumerate(params_gt.items())} @@ -162,7 +211,7 @@ def gradient_descent(rcwa_options, modeling_options, params_interest, params_gt, os.mkdir(temp_path_loss) - spectrum_gt, layer_info_list_gt = generate_spectrum(rcwa_options, modeling_options, gt_name, gt_value, instructions) + spectrum_gt, layer_info_list_gt = generate_spectrum(rcwa_options, modeling_options, gt_name, gt_value, instructions, wavelength_list) for ix_iter in range(n_iters): pois_name_index, pois_sampled = sampling(params_interest) @@ -174,7 +223,7 @@ def gradient_descent(rcwa_options, modeling_options, params_interest, params_gt, for ix_step in range(n_steps): opt.zero_grad() - spectrum, layer_info_list = generate_spectrum(rcwa_options, modeling_options, pois_name_index, pois_sampled, instructions) + spectrum, layer_info_list = generate_spectrum(rcwa_options, modeling_options, pois_name_index, pois_sampled, instructions, wavelength_list) fig_file = str(time.time()) if show_spectrum: @@ -220,8 +269,10 @@ def sampling(pois_dist): def run(optimizer, n_iters=10, n_steps=50, show_spectrum=0, show_topview=0, algo_name=''): - rcwa_options = dict(backend=2, grating_type=2, thickness=[0, 0, 100000], period=[300, 300], fourier_order=[3, 3], - n_I=1, n_II=1, wavelength_list=range(200, 1001, 10)) + rcwa_options = dict(backend=2, thickness=[0, 0, 100000], period=[300, 300], fto=[3, 3], + n_top=1, n_bot=1) + + wavelength_list = range(200, 1001, 10) modeling_options = dict( l1_n_base='sio2', @@ -284,7 +335,7 @@ def run(optimizer, n_iters=10, n_steps=50, show_spectrum=0, show_topview=0, algo l1_thickness=torch.tensor([205]), l2_thickness=torch.tensor([305]), ) - gradient_descent(rcwa_options, modeling_options, params_interest, params_gt, instructions, optimizer, + gradient_descent(rcwa_options, modeling_options, params_interest, params_gt, instructions, optimizer, wavelength_list, n_iters=n_iters, n_steps=n_steps, show_spectrum=show_spectrum, show_topview=show_topview, algo_name=algo_name) return @@ -318,7 +369,7 @@ def run(optimizer, n_iters=10, n_steps=50, show_spectrum=0, show_topview=0, algo for i, optimizer in enumerate(optimizers[algo:algo+1]): file_name = f'{optimizer}_{n_iters}_{n_steps}' t0 = time.time() - res = run(optimizer, n_iters=n_iters, n_steps=n_steps, show_spectrum=0, show_topview=0, algo_name=algo) + run(optimizer, n_iters=n_iters, n_steps=n_steps, show_spectrum=0, show_topview=0, algo_name=algo) t1 = time.time() print(i, ' run, time: ', t1-t0) diff --git a/examples/rcwa/lalanne_2D.py b/examples/rcwa/lalanne_2D.py deleted file mode 100644 index fef76c7..0000000 --- a/examples/rcwa/lalanne_2D.py +++ /dev/null @@ -1,259 +0,0 @@ -import matplotlib.pyplot as plt -import numpy as np - -from scipy.linalg import circulant - - -def to_conv_mat(permittivities, fourier_order): - # FFT scaling - # https://kr.mathworks.com/matlabcentral/answers/15770-scaling-the-fft-and-the-ifft#:~:text=the%20matlab%20fft%20outputs%202,point%20is%20the%20parseval%20equation. - ff = 2 * fourier_order + 1 - - if len(permittivities[0].shape) == 1: # 1D - res = np.ndarray((len(permittivities), 2*fourier_order+1, 2*fourier_order+1)).astype('complex') - - # extend array - if permittivities.shape[1] < 2 * ff + 1: - n = (2 * ff + 1) // permittivities.shape[1] - permittivities = np.repeat(permittivities, n+1, axis=1) - - for i, pmtvy in enumerate(permittivities): - pmtvy_fft = np.fft.fftn(pmtvy / pmtvy.size) - pmtvy_fft = np.fft.fftshift(pmtvy_fft) - - center = len(pmtvy_fft) // 2 - pmtvy_fft_cut = (pmtvy_fft[-ff + center: center+ff+1]) - A = np.roll(circulant(pmtvy_fft_cut.flatten()), (pmtvy_fft_cut.size + 1) // 2, 0) - res[i] = A[:2*fourier_order+1, :2*fourier_order+1] - # res[i] = circulant(pmtvy_fft_cut) - - else: # 2D - res = np.ndarray((len(permittivities), ff ** 2, ff ** 2)).astype('complex') - - # extend array - if permittivities.shape[0] < 2 * ff + 1: - n = (2 * ff + 1) // permittivities.shape[1] - permittivities = np.repeat(permittivities, n+1, axis=0) - if permittivities.shape[1] < 2 * ff + 1: - n = (2 * ff + 1) // permittivities.shape[1] - permittivities = np.repeat(permittivities, n+1, axis=1) - - for i, pmtvy in enumerate(permittivities): - - pmtvy_fft = np.fft.fftn(pmtvy / pmtvy.size) - pmtvy_fft = np.fft.fftshift(pmtvy_fft) - - center = np.array(pmtvy_fft.shape) // 2 - - conv_idx = np.arange(ff-1, -ff, -1) - conv_idx = circulant(conv_idx)[ff-1:, :ff] - - conv_i = np.repeat(conv_idx, ff, axis=1) - conv_i = np.repeat(conv_i, [ff] * ff, axis=0) - - conv_j = np.tile(conv_idx, (ff, ff)) - res[i] = pmtvy_fft[center[0] + conv_i, center[1] + conv_j] - - # import matplotlib.pyplot as plt - # - # plt.figure() - # plt.imshow(abs(res[0]), cmap='jet') - # plt.colorbar() - # plt.show() - # - return res - -pi = np.pi - -n_I = 1 -n_II = 1 - -theta = 0.001 * pi / 180 -phi = 0 * pi / 180 -psi = 0 * pi / 180 - -fourier_order = 3 -ff = 2 * fourier_order + 1 -center = ff * ff - -period = (0.7, 0.7) - -wls = np.linspace(0.5, 2.3, 10) - -I = np.eye(ff ** 2) -O = np.zeros((ff**2, ff**2)) - -spectrum_r, spectrum_t = [], [] - -# permittivity in grating layer -thickness = [0.46, 0.66] - -permt = np.ones((1024, 1024)) -permt[:, :307] = 3.48**2 -permt = np.array([permt, permt]) - -E_conv_all = to_conv_mat(permt, fourier_order) - -oneover_permt = 1 / permt -oneover_E_conv_all = to_conv_mat(oneover_permt, fourier_order) - -fourier_indices = np.arange(-fourier_order, fourier_order + 1) - -delta_i0 = np.zeros(ff**2).reshape((-1, 1)) -delta_i0[ff**2//2, 0] = 1 - -for wl in wls: - k0 = 2 * np.pi / wl - - kx_vector = k0 * (n_I*np.sin(theta)*np.cos(phi) - fourier_indices * (wl/period[0])).astype('complex') - ky_vector = k0 * (n_I*np.sin(theta)*np.sin(phi) - fourier_indices * (wl/period[1])).astype('complex') - - Kx = np.diag(np.tile(kx_vector, ff).flatten()) / k0 - Ky = np.diag(np.tile(ky_vector.reshape((-1, 1)), ff).flatten()) / k0 - - k_I_z = (k0**2 * n_I ** 2 - kx_vector**2 - ky_vector.reshape((-1, 1))**2)**0.5 - k_II_z = (k0**2 * n_II ** 2 - kx_vector**2 - ky_vector.reshape((-1, 1))**2)**0.5 - - k_I_z = k_I_z.flatten().conjugate() - k_II_z = k_II_z.flatten().conjugate() - - varphi = np.arctan(ky_vector.reshape((-1, 1))/kx_vector).flatten() - - Y_I = np.diag(k_I_z / k0) - Y_II = np.diag(k_II_z / k0) - - Z_I = np.diag(k_I_z / (k0 * n_I ** 2)) - Z_II = np.diag(k_II_z / (k0 * n_II ** 2)) - - big_F = np.block([[I, O], [O, 1j * Z_II]]) - big_G = np.block([[1j * Y_II, O], [O, I]]) - - big_T = np.eye(ff**2*2) - - for E_conv, oneover_E_conv, d in zip(E_conv_all[::-1], oneover_E_conv_all[::-1], thickness[::-1]): - - E_i = np.linalg.inv(E_conv) - - B = Kx @ E_i @ Kx - I - D = Ky @ E_i @ Ky - I - oneover_E_conv_i = np.linalg.inv(oneover_E_conv) - - S2_from_S = np.block( - [ - [Ky ** 2 + B @ oneover_E_conv_i, Kx @ (E_i @ Ky @ E_conv - Ky)], - [Ky @ (E_i @ Kx @ oneover_E_conv_i - Kx), Kx ** 2 + D @ E_conv] - ]) - - eigenvalues, W = np.linalg.eig(S2_from_S) - eigenvalues += 0j # to get positive square root - - q = eigenvalues ** 0.5 - - q_1 = q[:center] - q_2 = q[center:] - - Q = np.diag(q) - Q_i = np.linalg.inv(Q) - U1_from_S = np.block( - [ - [-Kx @ Ky, Kx ** 2 - E_conv], - [oneover_E_conv_i - Ky ** 2, Ky @ Kx] - ] - ) - V = U1_from_S @ W @ Q_i - - W_11 = W[:center, :center] - W_12 = W[:center, center:] - W_21 = W[center:, :center] - W_22 = W[center:, center:] - - V_11 = V[:center, :center] - V_12 = V[:center, center:] - V_21 = V[center:, :center] - V_22 = V[center:, center:] - - X_1 = np.diag(np.exp(-k0*q_1*d)) - X_2 = np.diag(np.exp(-k0*q_2*d)) - - F_c = np.diag(np.cos(varphi)) - F_s = np.diag(np.sin(varphi)) - - W_ss = F_c @ W_21 - F_s @ W_11 - W_sp = F_c @ W_22 - F_s @ W_12 - W_ps = F_c @ W_11 + F_s @ W_21 - W_pp = F_c @ W_12 + F_s @ W_22 - - V_ss = F_c @ V_11 + F_s @ V_21 - V_sp = F_c @ V_12 + F_s @ V_22 - V_ps = F_c @ V_21 - F_s @ V_11 - V_pp = F_c @ V_22 - F_s @ V_12 - - big_I = np.eye(2*(len(I))) - big_X = np.block([[X_1, O], [O, X_2]]) - big_W = np.block([[W_ss, W_sp], [W_ps, W_pp]]) - big_V = np.block([[V_ss, V_sp], [V_ps, V_pp]]) - - big_W_i = np.linalg.inv(big_W) - big_V_i = np.linalg.inv(big_V) - - big_A = 0.5 * (big_W_i @ big_F + big_V_i @ big_G) - big_B = 0.5 * (big_W_i @ big_F - big_V_i @ big_G) - - big_A_i = np.linalg.inv(big_A) - - big_F = big_W @ (big_I + big_X @ big_B @ big_A_i @ big_X) - big_G = big_V @ (big_I - big_X @ big_B @ big_A_i @ big_X) - - big_T = big_T @ big_A_i @ big_X - - big_F_11 = big_F[:center, :center] - big_F_12 = big_F[:center, center:] - big_F_21 = big_F[center:, :center] - big_F_22 = big_F[center:, center:] - - big_G_11 = big_G[:center, :center] - big_G_12 = big_G[:center, center:] - big_G_21 = big_G[center:, :center] - big_G_22 = big_G[center:, center:] - - # Final Equation in form of AX=B - final_A = np.block( - [ - [I, O, -big_F_11, -big_F_12], - [O, -1j*Z_I, -big_F_21, -big_F_22], - [-1j*Y_I, O, -big_G_11, -big_G_12], - [O, I, -big_G_21, -big_G_22], - ] - ) - - final_B = np.block([ - [-np.sin(psi)*delta_i0], - [-np.cos(psi) * np.cos(theta) * delta_i0], - [-1j*np.sin(psi) * n_I * np.cos(theta) * delta_i0], - [1j*n_I*np.cos(psi) * delta_i0] - ] - ) - - final_X = np.linalg.inv(final_A) @ final_B - - R_s = final_X[:ff**2, :].flatten() - R_p = final_X[ff**2:2*ff**2, :].flatten() - - big_T = big_T @ final_X[2*ff**2:, :] - T_s = big_T[:ff**2, :].flatten() - T_p = big_T[ff**2:, :].flatten() - - DEri = R_s*np.conj(R_s) * np.real(k_I_z/(k0*n_I*np.cos(theta))) \ - + R_p*np.conj(R_p) * np.real((k_I_z/n_I**2)/(k0*n_I*np.cos(theta))) - - DEti = T_s*np.conj(T_s) * np.real(k_II_z/(k0*n_I*np.cos(theta))) \ - + T_p*np.conj(T_p) * np.real((k_II_z/n_II**2)/(k0*n_I*np.cos(theta))) - - spectrum_r.append(DEri.reshape((ff, ff)).real) - spectrum_t.append(DEti.reshape((ff, ff)).real) - -plt.plot(wls, np.array(spectrum_r).sum(axis=(1, 2))) -plt.plot(wls, np.array(spectrum_t).sum(axis=(1, 2))) -plt.title(f'Lalanne 2D, f order of {fourier_order}') - -plt.show() diff --git a/meent/on_jax/emsolver/rcwa.py b/meent/on_jax/emsolver/rcwa.py index 55c1f7a..3ed0c22 100644 --- a/meent/on_jax/emsolver/rcwa.py +++ b/meent/on_jax/emsolver/rcwa.py @@ -55,21 +55,22 @@ def ucell(self): @ucell.setter def ucell(self, ucell): - if isinstance(ucell, (jnp.ndarray, np.ndarray)): # Raster + if isinstance(ucell, jnp.ndarray): # Raster if ucell.dtype in (jnp.float64, jnp.float32, jnp.int64, jnp.int32): dtype = self.type_float self._ucell = ucell.astype(dtype) elif ucell.dtype in (jnp.complex128, jnp.complex64): dtype = self.type_complex self._ucell = ucell.astype(dtype) - elif ucell.dtype in (np.int64, np.float64, np.int32, np.float32): + + elif isinstance(ucell, np.ndarray): # Raster + if ucell.dtype in (np.int64, np.float64, np.int32, np.float32): dtype = self.type_float self._ucell = jnp.array(ucell, dtype=dtype) elif ucell.dtype in (np.complex128, np.complex64): dtype = self.type_complex self._ucell = jnp.array(ucell, dtype=dtype) - else: - raise ValueError + elif type(ucell) is list: # Vector self._ucell = ucell elif ucell is None: @@ -86,8 +87,7 @@ def modeling_type_assigned(self, modeling_type_assigned): self._modeling_type_assigned = modeling_type_assigned def _assign_modeling_type(self): - - if isinstance(self.ucell, np.ndarray): # Raster + if isinstance(self.ucell, (np.ndarray, jnp.ndarray)): # Raster self.modeling_type_assigned = 0 if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0): self._grating_type_assigned = 0 # 1D TE and TM only diff --git a/meent/on_jax/emsolver/transfer_method.py b/meent/on_jax/emsolver/transfer_method.py index 900ffd2..41710ef 100644 --- a/meent/on_jax/emsolver/transfer_method.py +++ b/meent/on_jax/emsolver/transfer_method.py @@ -226,7 +226,8 @@ def transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, type_complex=jnp.compl [Ky @ (epz_conv_i @ Kx @ epx_conv - Kx), Kx ** 2 + D @ epy_conv] ]) - eigenvalues, W = jnp.linalg.eig(Omega2_LR) + # eigenvalues, W = jnp.linalg.eig(Omega2_LR) + eigenvalues, W = eig(Omega2_LR) eigenvalues += 0j # to get positive square root q = eigenvalues ** 0.5 diff --git a/meent/on_torch/emsolver/fourier_analysis.py b/meent/on_torch/emsolver/fourier_analysis.py index bf6e7db..28757f7 100644 --- a/meent/on_torch/emsolver/fourier_analysis.py +++ b/meent/on_torch/emsolver/fourier_analysis.py @@ -30,6 +30,8 @@ def _cfs(x, cell, fto, period, device=torch.device('cpu'), type_complex=torch.co def cfs2d(cell, x, y, conti_x, conti_y, fto_x, fto_y, device=torch.device('cpu'), type_complex=torch.complex128): cell = cell.type(type_complex) + x = x.type(type_complex) + y = y.type(type_complex) ff_x = 2 * fto_x + 1 ff_y = 2 * fto_y + 1 diff --git a/meent/on_torch/emsolver/transfer_method.py b/meent/on_torch/emsolver/transfer_method.py index 12b1df3..4f85d99 100644 --- a/meent/on_torch/emsolver/transfer_method.py +++ b/meent/on_torch/emsolver/transfer_method.py @@ -12,41 +12,19 @@ def transfer_1d_1(pol, ff_x, kx, n_top, n_bot, device=torch.device('cpu'), type_ kz_top = torch.conj(kz_top) kz_bot = torch.conj(kz_bot) - # Kx = torch.diag(kx) - - # F = np.eye(ff_xy, dtype=type_complex) F = torch.eye(ff_xy, device=device, dtype=type_complex) if pol == 0: # TE - # Y_I = torch.diag(k_I_z / k0) - # Y_II = torch.diag(k_II_z / k0) - # - # YZ_I = Y_I - # g = 1j * Y_II - # inc_term = 1j * n_top * torch.cos(theta) * delta_i0 - Kz_bot = torch.diag(kz_bot) - G = 1j * Kz_bot - elif pol == 1: # TM - # Z_I = torch.diag(k_I_z / (k0 * n_top ** 2)) - # Z_II = torch.diag(k_II_z / (k0 * n_bot ** 2)) - # - # YZ_I = Z_I - # g = 1j * Z_II - # inc_term = 1j * delta_i0 * torch.cos(theta) / n_top - Kz_bot = torch.diag(kz_bot / (n_bot ** 2)) - G = 1j * Kz_bot - else: raise ValueError T = torch.eye(ff_xy, device=device, dtype=type_complex) - # return kx, Kx, k_I_z, k_II_z, f, YZ_I, g, inc_term, T return kz_top, kz_bot, F, G, T @@ -83,7 +61,6 @@ def transfer_1d_2(pol, kx, epx_conv, epy_conv, epz_conv_i, device=torch.device(' return W, V, q - def transfer_1d_2_(k0, q, d, W, V, f, g, fourier_order, T, device=torch.device('cpu'), type_complex=torch.complex128): X = torch.diag(torch.exp(-k0 * q * d)) @@ -159,194 +136,6 @@ def transfer_1d_4(pol, F, G, T, kz_top, kz_bot, theta, n_top, n_bot, device=torc return de_ri.real, de_ti.real, T1 -def transfer_1d_3_(g1, YZ_I, f1, delta_i0, inc_term, T, k_I_z, k0, n_I, n_II, theta, polarization, k_II_z, device=torch.device('cpu'), type_complex=torch.complex128): - T1 = torch.linalg.inv(g1 + 1j * YZ_I @ f1) @ (1j * YZ_I @ delta_i0 + inc_term) - R = f1 @ T1 - delta_i0 - T = T @ T1 - - de_ri = torch.real(R * torch.conj(R) * k_I_z / (k0 * n_I * torch.cos(theta))) - if polarization == 0: - de_ti = T * torch.conj(T) * torch.real(k_II_z / (k0 * n_I * torch.cos(theta))) - elif polarization == 1: - de_ti = T * torch.conj(T) * torch.real(k_II_z / n_II ** 2) / (k0 * torch.cos(theta) / n_I) - else: - raise ValueError - - return de_ri.real, de_ti.real, T1, R, T - - -def transfer_1d_conical_1(ff, k0, n_I, n_II, kx_vector, theta, phi, device=torch.device('cpu'), type_complex=torch.complex128): - - I = torch.eye(ff, device=device, dtype=type_complex) - O = torch.zeros((ff, ff), device=device, dtype=type_complex) - - # kx = k0 * (n_top * torch.sin(theta) * torch.cos(phi) + fourier_indices * ( - # wavelength / period[0])).type(type_complex) - - ky = k0 * n_I * torch.sin(theta) * torch.sin(phi) - - k_I_z = (k0 ** 2 * n_I ** 2 - kx_vector ** 2 - ky ** 2) ** 0.5 - k_II_z = (k0 ** 2 * n_II ** 2 - kx_vector ** 2 - ky ** 2) ** 0.5 - - k_I_z = torch.conj(k_I_z.flatten()) - k_II_z = torch.conj(k_II_z.flatten()) - - Kx = torch.diag(kx_vector / k0) - - varphi = torch.arctan(ky / kx_vector) - - Y_I = torch.diag(k_I_z / k0) - Y_II = torch.diag(k_II_z / k0) - - Z_I = torch.diag(k_I_z / (k0 * n_I ** 2)) - Z_II = torch.diag(k_II_z / (k0 * n_II ** 2)) - - big_F = torch.cat( - [ - torch.cat([I, O], dim=1), - torch.cat([O, 1j * Z_II], dim=1), - ] - ) - - big_G = torch.cat( - [ - torch.cat([1j * Y_II, O], dim=1), - torch.cat([O, I], dim=1), - ] - ) - - big_T = torch.eye(ff * 2, device=device, dtype=type_complex) - - return Kx, ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T - - -def transfer_1d_conical_2(k0, Kx, ky, E_conv, E_i, o_E_conv_i, ff, d, varphi, big_F, big_G, big_T, - device='cpu', type_complex=torch.complex128, perturbation=1E-10): - - I = torch.eye(ff, device=device, dtype=type_complex) - O = torch.zeros((ff, ff), device=device, dtype=type_complex) - - A = Kx ** 2 - E_conv - B = Kx @ E_i @ Kx - I - A_i = torch.linalg.inv(A) - B_i = torch.linalg.inv(B) - - to_decompose_W_1 = (ky/k0) ** 2 * I + A - # to_decompose_W_2 = (ky/k0) ** 2 * I + B @ o_E_conv_i - to_decompose_W_2 = (ky/k0) ** 2 * I + B @ E_conv - - Eig.perturbation = perturbation - eigenvalues_1, W_1 = Eig.apply(to_decompose_W_1) - eigenvalues_2, W_2 = Eig.apply(to_decompose_W_2) - - q_1 = eigenvalues_1 ** 0.5 - q_2 = eigenvalues_2 ** 0.5 - - Q_1 = torch.diag(q_1) - Q_2 = torch.diag(q_2) - - V_11 = A_i @ W_1 @ Q_1 - V_12 = (ky / k0) * A_i @ Kx @ W_2 - V_21 = (ky / k0) * B_i @ Kx @ E_i @ W_1 - V_22 = B_i @ W_2 @ Q_2 - - X_1 = torch.diag(torch.exp(-k0 * q_1 * d)) - X_2 = torch.diag(torch.exp(-k0 * q_2 * d)) - - F_c = torch.diag(torch.cos(varphi)) - F_s = torch.diag(torch.sin(varphi)) - - V_ss = F_c @ V_11 - V_sp = F_c @ V_12 - F_s @ W_2 - W_ss = F_c @ W_1 + F_s @ V_21 - W_sp = F_s @ V_22 - W_ps = F_s @ V_11 - W_pp = F_c @ W_2 + F_s @ V_12 - V_ps = F_c @ V_21 - F_s @ W_1 - V_pp = F_c @ V_22 - - big_I = torch.eye(2 * (len(I)), device=device, dtype=type_complex) - - big_X = torch.cat([ - torch.cat([X_1, O], dim=1), - torch.cat([O, X_2], dim=1)]) - - big_W = torch.cat([ - torch.cat([V_ss, V_sp], dim=1), - torch.cat([W_ps, W_pp], dim=1)]) - - big_V = torch.cat([ - torch.cat([W_ss, W_sp], dim=1), - torch.cat([V_ps, V_pp], dim=1)]) - - big_W_i = torch.linalg.inv(big_W) - big_V_i = torch.linalg.inv(big_V) - - - big_A = 0.5 * (big_W_i @ big_F + big_V_i @ big_G) - big_B = 0.5 * (big_W_i @ big_F - big_V_i @ big_G) - - big_A_i = torch.linalg.inv(big_A) - - big_F = big_W @ (big_I + big_X @ big_B @ big_A_i @ big_X) - big_G = big_V @ (big_I - big_X @ big_B @ big_A_i @ big_X) - - big_T = big_T @ big_A_i @ big_X - - return big_X, big_F, big_G, big_T, big_A_i, big_B, W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 - - -def transfer_1d_conical_3(big_F, big_G, big_T, Z_I, Y_I, psi, theta, ff, delta_i0, k_I_z, k0, n_I, n_II, k_II_z, - device='cpu', type_complex=torch.complex128): - I = torch.eye(ff, device=device, dtype=type_complex) - O = torch.zeros((ff, ff), device=device, dtype=type_complex) - - big_F_11 = big_F[:ff, :ff] - big_F_12 = big_F[:ff, ff:] - big_F_21 = big_F[ff:, :ff] - big_F_22 = big_F[ff:, ff:] - - big_G_11 = big_G[:ff, :ff] - big_G_12 = big_G[:ff, ff:] - big_G_21 = big_G[ff:, :ff] - big_G_22 = big_G[ff:, ff:] - - final_A = torch.cat( - [ - torch.cat([I, O, -big_F_11, -big_F_12], dim=1), - torch.cat([O, -1j * Z_I, -big_F_21, -big_F_22], dim=1), - torch.cat([-1j * Y_I, O, -big_G_11, -big_G_12], dim=1), - torch.cat([O, I, -big_G_21, -big_G_22], dim=1), - ] - ) - - final_B = torch.cat([ - -torch.sin(psi) * delta_i0, - -torch.cos(psi) * torch.cos(theta) * delta_i0, - -1j * torch.sin(psi) * n_I * torch.cos(theta) * delta_i0, - 1j * n_I * torch.cos(psi) * delta_i0 - ]) - - final_RT = torch.linalg.inv(final_A) @ final_B - - R_s = final_RT[:ff].flatten() - R_p = final_RT[ff:2 * ff].flatten() - - big_T1 = final_RT[2 * ff:] - big_T = big_T @ big_T1 - - T_s = big_T[:ff].flatten() - T_p = big_T[ff:].flatten() - - de_ri = R_s * torch.conj(R_s) * torch.real(k_I_z / (k0 * n_I * torch.cos(theta))) \ - + R_p * torch.conj(R_p) * torch.real((k_I_z / n_I ** 2) / (k0 * n_I * torch.cos(theta))) - - de_ti = T_s * torch.conj(T_s) * torch.real(k_II_z / (k0 * n_I * torch.cos(theta))) \ - + T_p * torch.conj(T_p) * torch.real((k_II_z / n_II ** 2) / (k0 * n_I * torch.cos(theta))) - - return de_ri.real, de_ti.real, big_T1, (R_s, R_p), (T_s, T_p) - - def transfer_2d_1(ff_x, ff_y, kx, ky, n_top, n_bot, device=torch.device('cpu'), type_complex=torch.complex128): ff_xy = ff_x * ff_y @@ -383,54 +172,6 @@ def transfer_2d_1(ff_x, ff_y, kx, ky, n_top, n_bot, device=torch.device('cpu'), return kz_top, kz_bot, varphi, big_F, big_G, big_T - -def transfer_2d_1_(ff_x, ff_y, ff_xy, k0, n_I, n_II, kx_vector, period, fourier_indices_y, theta, phi, wavelength, - device=torch.device('cpu'), type_complex=torch.complex128): - I = torch.eye(ff_xy, device=device, dtype=type_complex) - O = torch.zeros((ff_xy, ff_xy), device=device, dtype=type_complex) - - # kx = k0 * (n_top * torch.sin(theta) * torch.cos(phi) + fourier_indices * ( - # wavelength / period[0])).type(type_complex) - - ky_vector = k0 * (n_I * torch.sin(theta) * torch.sin(phi) + fourier_indices_y * ( - wavelength / period[1])).type(type_complex) - - k_I_z = (k0 ** 2 * n_I ** 2 - kx_vector ** 2 - ky_vector.reshape((-1, 1)) ** 2) ** 0.5 - k_II_z = (k0 ** 2 * n_II ** 2 - kx_vector ** 2 - ky_vector.reshape((-1, 1)) ** 2) ** 0.5 - - k_I_z = torch.conj(k_I_z.flatten()) - k_II_z = torch.conj(k_II_z.flatten()) - - Kx = torch.diag(kx_vector.tile(ff_y).flatten() / k0) - Ky = torch.diag(ky_vector.reshape((-1, 1)).tile(ff_x).flatten() / k0) - - varphi = torch.arctan(ky_vector.reshape((-1, 1)) / kx_vector).flatten() - - Y_I = torch.diag(k_I_z / k0) - Y_II = torch.diag(k_II_z / k0) - - Z_I = torch.diag(k_I_z / (k0 * n_I ** 2)) - Z_II = torch.diag(k_II_z / (k0 * n_II ** 2)) - - big_F = torch.cat( - [ - torch.cat([I, O], dim=1), - torch.cat([O, 1j * Z_II], dim=1), - ] - ) - - big_G = torch.cat( - [ - torch.cat([1j * Y_II, O], dim=1), - torch.cat([O, I], dim=1), - ] - ) - - big_T = torch.eye(2 * ff_xy, device=device, dtype=type_complex) - - return kx_vector, ky_vector, Kx, Ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T - - def transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, device=torch.device('cpu'), type_complex=torch.complex128, perturbation=1E-10): @@ -450,12 +191,6 @@ def transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, device=torch.device('c B = Kx @ epz_conv_i @ Kx - I D = Ky @ epz_conv_i @ Ky - I - # Omega2_LR = np.block( - # [ - # [Ky ** 2 + B @ epx_conv, Kx @ (epz_conv_i @ Ky @ epy_conv - Ky)], - # [Ky @ (epz_conv_i @ Kx @ epx_conv - Kx), Kx ** 2 + D @ epy_conv] - # ]) - Omega2_LR = torch.cat( [ torch.cat([Ky ** 2 + B @ epx_conv, Kx @ (epz_conv_i @ Ky @ epy_conv - Ky)], dim=1), @@ -465,6 +200,7 @@ def transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, device=torch.device('c Eig.perturbation = perturbation eigenvalues, W = Eig.apply(Omega2_LR) q = eigenvalues ** 0.5 + Q = torch.diag(q) Q_i = torch.linalg.inv(Q) Omega_R = torch.cat( @@ -475,55 +211,9 @@ def transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, device=torch.device('c ) V = Omega_R @ W @ Q_i - # eigenvalues, W = np.linalg.eig(Omega2_LR) - # eigenvalues += 0j # to get positive square root - # q = eigenvalues ** 0.5 - # - # Q = np.diag(q) - # Q_i = np.linalg.inv(Q) - # - # Omega_R = np.block( - # [ - # [-Kx @ Ky, Kx ** 2 - epy_conv], - # [epx_conv - Ky ** 2, Ky @ Kx] - # ] - # ) - # - # V = Omega_R @ W @ Q_i - - return W, V, q - - -def transfer_2d_wv_(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, device=torch.device('cpu'), type_complex=torch.complex128, - perturbation=1E-10): - I = torch.eye(ff_xy, device=device, dtype=type_complex) - - B = Kx @ E_conv_i @ Kx - I - D = Ky @ E_conv_i @ Ky - I - - S2_from_S = torch.cat( - [ - torch.cat([Ky ** 2 + B @ E_conv, Kx @ (E_conv_i @ Ky @ E_conv - Ky)], dim=1), - torch.cat([Ky @ (E_conv_i @ Kx @ E_conv - Kx), Kx ** 2 + D @ E_conv], dim=1) - ]) - - Eig.perturbation = perturbation - eigenvalues, W = Eig.apply(S2_from_S) - q = eigenvalues ** 0.5 - Q = torch.diag(q) - Q_i = torch.linalg.inv(Q) - U1_from_S = torch.cat( - [ - torch.cat([-Kx @ Ky, Kx ** 2 - E_conv], dim=1), - torch.cat([E_conv - Ky ** 2, Ky @ Kx], dim=1) - ] - ) - V = U1_from_S @ W @ Q_i - return W, V, q -# def transfer_2d_2_(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, device=torch.device('cpu'), type_complex=torch.complex128): def transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, device=torch.device('cpu'), type_complex=torch.complex128): ff_xy = len(q)//2 From ae851cc19707678c4ab246e52f2c1ae364742bc1 Mon Sep 17 00:00:00 2001 From: yonghakim Date: Fri, 9 Aug 2024 00:30:20 +0900 Subject: [PATCH 13/15] Refactoring done. Scripts updated. --- meent/on_jax/emsolver/rcwa.py | 36 ++- meent/on_jax/optimizer/loss.py | 1 - tutorials/01-modeling-and-emsolver.ipynb | 94 ++++---- .../02-autograd-and-optimization-jax.ipynb | 57 +++-- ...02-autograd-and-optimization-pytorch.ipynb | 224 +++++++++--------- tutorials/03-device-and-datatype-jax.ipynb | 79 +++--- tutorials/03-device-and-datatype-torch.ipynb | 115 +++++---- 7 files changed, 316 insertions(+), 290 deletions(-) diff --git a/meent/on_jax/emsolver/rcwa.py b/meent/on_jax/emsolver/rcwa.py index 3ed0c22..69f352d 100644 --- a/meent/on_jax/emsolver/rcwa.py +++ b/meent/on_jax/emsolver/rcwa.py @@ -89,8 +89,17 @@ def modeling_type_assigned(self, modeling_type_assigned): def _assign_modeling_type(self): if isinstance(self.ucell, (np.ndarray, jnp.ndarray)): # Raster self.modeling_type_assigned = 0 - if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0): - self._grating_type_assigned = 0 # 1D TE and TM only + if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)): + + def false_fun(): return 0 # 1D TE and TM only + def true_fun(): return 1 + + gear = jax.lax.cond(self.phi % (2 * np.pi), true_fun, false_fun) + + self._grating_type_assigned = gear + + # if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0): + # self._grating_type_assigned = 0 # 1D TE and TM only else: self._grating_type_assigned = 1 # else @@ -108,10 +117,23 @@ def grating_type_assigned(self, grating_type_assigned): def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): - if self._grating_type_assigned == 0: - de_ri, de_ti, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) - else: - de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + # def false_fun(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): + # de_ri, de_ti, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + # return de_ri, de_ti, layer_info_list, T1 + # + # def true_fun(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): + # de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + # return de_ri, de_ti, layer_info_list, T1 + # + # de_ri, de_ti, layer_info_list, T1 = jax.lax.cond(self._grating_type_assigned, true_fun, false_fun, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + + # if self._grating_type_assigned == 0: + # de_ri, de_ti, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + # else: + # de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + + # In JAXMeent, 1D TE TM are turned off for jit compilation. + de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) return de_ri, de_ti, layer_info_list, T1 @@ -190,7 +212,7 @@ def calculate_field(self, res_x=20, res_y=20, res_z=20): def field_plot(self, field_cell): field_plot(field_cell, self.pol) - @partial(jax.jit, static_argnums=(1, 2, 3, 4)) + @partial(jax.jit, static_argnums=(1, 2, 3)) @jax_device_set def conv_solve_field(self, res_x=20, res_y=20, res_z=20, **kwargs): [setattr(self, k, v) for k, v in kwargs.items()] # needed for optimization diff --git a/meent/on_jax/optimizer/loss.py b/meent/on_jax/optimizer/loss.py index 1fc695f..e24d125 100644 --- a/meent/on_jax/optimizer/loss.py +++ b/meent/on_jax/optimizer/loss.py @@ -1,4 +1,3 @@ -import jax import jax.numpy as jnp diff --git a/tutorials/01-modeling-and-emsolver.ipynb b/tutorials/01-modeling-and-emsolver.ipynb index d5b9ccd..043b7f6 100644 --- a/tutorials/01-modeling-and-emsolver.ipynb +++ b/tutorials/01-modeling-and-emsolver.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -24,14 +24,14 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "pol = 0 # 0: TE, 1: TM\n", "\n", - "n_I = 1 # n_superstrate\n", - "n_II = 1 # n_substrate\n", + "n_top = 1 # n_superstrate\n", + "n_bot = 1 # n_substrate\n", "\n", "theta = 20 * np.pi / 180\n", "phi = 50 * np.pi / 180\n", @@ -41,11 +41,9 @@ "thickness = [500]\n", "period = [1000]\n", "\n", - "fourier_order = [30]\n", + "fto = [30]\n", "\n", - "type_complex = np.complex128\n", - "\n", - "grating_type = 0" + "type_complex = np.complex128\n" ] }, { @@ -104,7 +102,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -124,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -150,7 +148,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -171,7 +169,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -298,11 +296,11 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ - "mee = meent.call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_s, thickness=thickness, type_complex=type_complex, fft_type=0, improve_dft=True)" + "mee = meent.call_mee(backend=0, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_s, thickness=thickness, type_complex=type_complex)" ] }, { @@ -346,7 +344,7 @@ " || \\ | /\n", " || ... \\ | / ...\n", " || \\ | / \n", - " || \\ | / n_I:refractive index of superstrate\n", + " || \\ | / n_top:refractive index of superstrate\n", " ____________________________________\n", " | Layer 1 |\n", " |____________________________________|\n", @@ -356,7 +354,7 @@ " ____________________________________ |_____ x-axis \n", " | Layer N |\n", " |____________________________________|\n", - " n_II:refractive index of substrate\n", + " n_bot:refractive index of substrate\n", " / | \\ \n", " / | \\\n", " ... / | \\ ...\n", @@ -370,14 +368,14 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "time: 0.2368483543395996\n" + "time: 0.11336421966552734\n" ] } ], @@ -389,15 +387,19 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Diffraction Efficiency of Reflection: [0. 0.803 0. ]\n", - "Diffraction Efficiency of Transmission: [0. 0.197 0. ]\n" + "Diffraction Efficiency of Reflection: [[0. ]\n", + " [0.287]\n", + " [0. ]]\n", + "Diffraction Efficiency of Transmission: [[0. ]\n", + " [0.713]\n", + " [0. ]]\n" ] } ], @@ -417,14 +419,14 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "time: 0.024094820022583008\n" + "time: 0.04631304740905762\n" ] } ], @@ -443,12 +445,12 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAy4AAADcCAYAAACWAfUkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9fXRc13XfjX/AmcEMBhhgiAExIAiQoAiaFC3atCRXkp02jqNEyZPkSWKtJnWd2HG9urJWLce13LUcpWnsuGnsZLXLTmrZdVIvp22suHWad/8Sx1H9UtmSI8liTD6UKIISLEAQAA6gATAEBpgB+fvj3H3vvmfOnTeSEijPd63BDO7ce+65e87ZZ3/33uecrsuXL1+mgw466KCDDjrooIMOOuhgB2PXy12BDjrooIMOOuiggw466KCDRugQlw466KCDDjrooIMOOuhgx6NDXDrooIMOOuiggw466KCDHY8Ocemggw466KCDDjrooIMOdjw6xKWDDjrooIMOOuiggw462PHoEJcOOuiggw466KCDDjroYMejQ1w66KCDDjrooIMOOuiggx2PDnHpoIMOOuiggw466KCDDnY8OsSlgw466KCDDjrooIMOOtjx6BCXDjrooIMOOuiggw466GDHo0NcrgOUSiU++MEP8iM/8iMMDg7S1dXFH/zBHzjPfdOb3kRXVxddXV3s2rWL/v5+jhw5ws///M/z5S9/uel7/sIv/IJfjv1KpVJX6ck66KCDa42XS3/09fVFft/V1cU999zT6qN00EEHLyM6uqSDnYD4y12BDhqjUCjw4Q9/mP379/Pa176Wr371q3XPHxsb4yMf+QgAFy9eZGpqij/5kz/hD//wD/mZn/kZ/vAP/5BEItHwvslkkv/6X/9rzfFYLNbWc3TQQQcvPV4u/dFBBx28stDRJR3sBHSIy3WAvXv38sILLzAyMsJjjz3G61//+rrnDwwM8HM/93OhYx/96Ef5pV/6JT75yU8yMTHBb/3WbzW8bzwerymngw46uL7wcumPDjro4JWFji7pYCegkyp2HSCZTDIyMnJFZcRiMX73d3+XY8eO8YlPfIKVlZUrrtczzzxDV1cXH/vYx2q+++Y3v0lXVxd/9Ed/dMX36aCDDtrHTtUfGu94xztIpVI8+eSToeN33XUXu3fvZm5u7qrer4MOOmgd14MumZiYiExzbxQh6uD6QIe4fA8hFovx1re+lfX1dR566KGmrikUCjWv1dVVAG644Qbe+MY38rnPfa7mus997nNkMhl+8id/8qo+QwcddPDy4Grpj0KhUHPe7/zO77Bnzx7e8Y53sL29DcCnP/1p/vZv/5b//J//M6Ojo1f1WTrooIOXD9dSl3z84x/nf/yP/xF63XzzzezatYtcLne1H6WDlwGdVLHvMdx0000AnD9/vuG5Fy9eZM+ePTXH77rrLv7mb/4GgLe//e384i/+Ik899RRHjx4FoFKp8L/+1//iLW95C+l0+irWvoMOOng5cTX0hwvZbJbPfOYz3HXXXXz0ox/ln//zf86/+Tf/hp/6qZ/qpKt20MErENdKl/zUT/1U6P8vfOELfPvb3+bDH/4wx48fb7meHew8dIjL9xhkdY61tbWG56ZSKf7yL/+y5vjQ0JD/+Wd+5md473vfy+c+9zn+/b//9wB86UtfolAodAyODjp4heFq6A+AH/qhH6o59sM//MP84i/+Ih/+8If54z/+Y1KpFJ/+9KevrMIddNDBjsS11CWCM2fO8C/+xb/gJ3/yJ/nVX/3V9irawY5Dh7h8j6FUKgGQyWQanhuLxbjzzjvrnpPNZvmJn/gJHnjgAZ+4fO5zn2Pfvn28+c1vvvIKd9BBBzsGV1t/2PiP//E/8ud//uecPHmSBx54gOHh4bbq2UEHHexsXGtdsrq6ylve8hb27dvHf//v/52urq626tnBzkNnjsv3GE6fPg3A5OTkVSvz7W9/O8888wzf/OY3WVtb4y/+4i9461vfyq5dnebVQQevJFwL/aHxxBNPsLi4CMCpU6euyT066KCDlx/XWpf8wi/8AnNzc/zZn/0Z/f391+QeHbw86ERcvoewvb3NAw88QDqd5vu+7/uuWrk/8iM/wp49e/jc5z7Hbbfdxvr6Oj//8z9/1crvoIMOXn5cK/0huHjxIu985zs5duwYb3jDG/jt3/5tfvqnf7rhkqsddNDB9YVrrUs++tGP8md/9mf8yZ/8iT/3toNXDjrE5XsE29vb/NIv/RJPPvkkv/zLv3xVPRDxeJy3vvWtPPDAAzz55JMcP36c17zmNVet/A466ODlxbXUH4IPfOADPPfcczzyyCMcOXKEBx98kHe84x088cQTJJPJq36/Djro4KXHtdYlf/d3f8ev/uqv8m//7b+tmajfwSsDHeJyneATn/gExWLR38/gL//yL5mdnQXgPe95DwMDA/65Kysr/OEf/iEA6+vr/m6158+f55/9s3/mz0VphGq16pdj46d/+qfp7e31/3/729/O7/7u7/KVr3yls6FUBx3sMLwc+qMV/J//83/45Cc/yQc/+EFuvvlmAD772c/ypje9iX/37/4dv/3bv33V79lBBx20jp2uS9761reyZ88eDh8+XGO//NAP/RD5fP6q37ODlxiXO7gucODAgcuA8/Xss8/6533/939/6Lu+vr7Lhw8fvvxzP/dzl//2b/+26fu94x3viLyffU/Bq1/96su7du26PDs7exWeuIMOOrhaeDn0R29vb+T3wOV3v/vdly9fvnx5dXX18oEDBy7ffPPNlyuVSui8973vfZd37dp1+eGHH27tgTvooINrgp2sS+T/qNdXvvKVdh65gx2GrsuXL1++Rpyog+8xvO51r2NwcJAHH3zw5a5KBx100EEHHXTQQQevMHSWfergquCxxx7j5MmTvP3tb3+5q9JBBx100EEHHXTQwSsQnYhLB1eE06dP8/jjj/Of/tN/olAo8Mwzz5BKpV7uanXQQQcddNBBBx108ApDJ+LSwRXhj//4j3nnO99JpVLhj/7ojzqkpYMOOuiggw466KCDa4JOxKWDDjrooIMOOuiggw462PG4ZhGX+++/n4mJCVKpFLfddht///d/f61u1UEHHbwC0dEhHXTQwZWio0c66OCVhWtCXP7n//yf3HvvvXzwgx/k29/+Nq997Wu56667WFxcvBa366CDDl5h6OiQDjro4ErR0SMddPDKwzVJFbvtttt4/etfzyc+8QkALl26xPj4OO95z3v45V/+5brXXrp0ibm5OTKZDF1dXVe7ah108LLh8uXLrK2tMTo6yq5djX0G5XKZra2tyO+7u7tfsXOKrkSHyPkdPdLBKw2t6hCor0deyToEOrZIBx24cL3bIvGrXeDW1haPP/449913n39s165d3HnnnTz88MM1529ubrK5uen///zzz3Ps2LGrXa0OOtgxmJmZYWxsrO455XKZPT09lOqcMzIywrPPPvuKMzxa1SHQ0SMdfG+hGR0CjfXIK1WHQMcW6aCDRrhebZGrTlwKhQLb29vk8/nQ8Xw+z1NPPVVz/kc+8hF+/dd/3VHS08CLQMl7XwfKwAZQVa+KuqYaUSt5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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAy4AAADcCAYAAACWAfUkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9e3hkV3XnjX/UVaUqlaqkakmWZHW3LeM2vmODjY2B3xtCTJwbDwQmIYSAgYTkCZib38kEJ4DBJBgCAw53yHBJBpwhZAhJhoQkOCF5E8zN4Bl7fIG2LbvbsiRL7ZJUXapSVUm/P/Ze56yza5+6tdqWTX2f5zxVdeqcffZZZ++113ettfcZ2N7e3qaPPvroo48++uijjz766GMXY89jXYE++uijjz766KOPPvroo4926BOXPvroo48++uijjz766GPXo09c+uijjz766KOPPvroo49djz5x6aOPPvroo48++uijjz52PfrEpY8++uijjz766KOPPvrY9egTlz766KOPPvroo48++uhj16NPXProo48++uijjz766KOPXY8+cemjjz766KOPPvroo48+dj36xKWPPvroo48++uijjz762PXoE5c++uijjz766KOPPvroY9ejT1weByiVSlx77bX8zM/8DGNjYwwMDPC5z33Oe+xznvMcBgYGGBgYYM+ePYyMjHDmmWfy8pe/nH/6p3/q+JqvfOUrg3LcLZPJ7NCd9dFHHycaj5X+yOVysf8PDAxw1VVXdXsrffTRx2OIvi7pYzcg+VhXoI/2WF5e5rrrruOUU07hggsu4Bvf+EbL4/fv38/1118PwLFjxzh06BBf/vKX+fznP88v//Iv8/nPf55UKtX2uul0mv/23/5b0/5EItHTffTRRx+PPh4r/dFHH308sdDXJX3sBvSJy+MAJ598Mg899BDT09N873vf4+lPf3rL40dHR/m1X/u1yL73vOc9vOENb+BjH/sYs7OzvPe972173WQy2VROH3308fjCY6U/+uijjycW+rqkj92AfqrY4wDpdJrp6enjKiORSPChD32Ic845h4985COsrq4ed73uvfdeBgYG+OAHP9j03ze/+U0GBgb48z//8+O+Th999NE7dqv+0LjyyivJZDLceeedkf1XXHEFe/fuZX5+fkev10cffXSPx4MumZ2djU1zbxch6uPxgT5x+TFCIpHgpS99KeVymX//93/v6Jzl5eWmbW1tDYAnPelJPOtZz+ILX/hC03lf+MIXyOfzvOAFL9jRe+ijjz4eG+yU/lheXm467o//+I856aSTuPLKK2k0GgB88pOf5B//8R/58Ic/zMzMzI7eSx999PHY4UTqkhtuuIH//t//e2R72tOexp49exgfH9/pW+njMUA/VezHDOeddx4A99xzT9tjjx07xkknndS0/4orruBrX/saAK94xSv4rd/6Le666y7OOussAGq1Gn/xF3/Bi170IrLZ7A7Wvo8++ngssRP6w4dCocCnP/1prrjiCt7znvfwq7/6q/zn//yfeeELX9hPV+2jjycgTpQueeELXxj5/aUvfYnvf//7XHfddZx//vld17OP3Yc+cfkxg6zOsb6+3vbYTCbD3/7t3zbtn5iYCL7/8i//Mm984xv5whe+wLve9S4A/uEf/oHl5eW+wdFHH08w7IT+AHje857XtO+nf/qn+a3f+i2uu+46/vIv/5JMJsMnP/nJ46twH330sStxInWJ4I477uDVr341L3jBC3jrW9/aW0X72HXoE5cfM5RKJQDy+XzbYxOJBJdffnnLYwqFAs9//vO58cYbA+LyhS98gX379vHc5z73+CvcRx997BrstP5w8f73v5+//uu/5tZbb+XGG29kcnKyp3r20UcfuxsnWpesra3xohe9iH379vFnf/ZnDAwM9FTPPnYf+nNcfsxw++23A3Dw4MEdK/MVr3gF9957L9/85jdZX1/nb/7mb3jpS1/Knj395tVHH08knAj9ofGDH/yApaUlAG677bYTco0++ujjsceJ1iWvfOUrmZ+f5ytf+QojIyMn5Bp9PDboR1x+jNBoNLjxxhvJZrM8+9nP3rFyf+ZnfoaTTjqJL3zhC1x66aWUy2Ve/vKX71j5ffTRx2OPE6U/BMeOHeNVr3oV55xzDs985jP5oz/6I37xF3+x7ZKrffTRx+MLJ1qXvOc97+ErX/kKX/7yl4O5t308cdAnLj8maDQavOENb+DOO+/kLW95y456IJLJJC996Uu58cYbufPOOzn//PN5ylOesmPl99FHH48tTqT+EPzu7/4uDzzwAN/61rc488wzuemmm7jyyiv5wQ9+QDqd3vHr9dFHH48+TrQu+frXv85b3/pWfv/3f79pon4fTwz0icvjBB/5yEcoFovB+wz+9m//liNHjgDw+te/ntHR0eDY1dVVPv/5zwNQLpeDt9Xec889/Mqv/EowF6Ud6vV6UI6LX/zFX2R4eDj4/YpXvIIPfehD/Mu//Ev/hVJ99LHL8Fjoj27wz//8z3zsYx/j2muv5WlPexoAn/3sZ3nOc57D2972Nv7oj/5ox6/ZRx99dI/drkte+tKXctJJJ3HGGWc02S/Pe97zmJqa2vFr9vEoY7uPxwVOPfXUbcC73XfffcFxP/ETPxH5L5fLbZ9xxhnbv/Zrv7b9j//4jx1f78orr4y9nntNwbnnnru9Z8+e7SNHjuzAHffRRx87hcdCfwwPD8f+D2y/7nWv297e3t5eW1vbPvXUU7ef9rSnbddqtchxb37zm7f37NmzffPNN3d3w3300ccJwW7WJfI7bvuXf/mXXm65j12Gge3t7e0TxIn6+DHDU5/6VMbGxrjpppse66r00UcfffTRRx999PEEQ3/Zpz52BN/73ve49dZbecUrXvFYV6WPPvroo48++uijjycg+hGXPo4Lt99+O7fccgv/9b/+V5aXl7n33nvJZDKPdbX66KOPPvroo48++niCoR9x6eO48Jd/+Ze86lWvolar8ed//ud90tJHH3300UcfffTRxwlBP+LSRx999NFHH3300Ucffex6nLCIy0c/+lFmZ2fJZDJceumlfOc73zlRl+qjjz6egOjrkD766ON40dcjffTxxMIJIS5f/OIXufrqq7n22mv5/ve/zwUXXMAVV1zB0tLSibhcH3308QRDX4f00Ucfx4u+HumjjyceTkiq2KWXXsrTn/50PvKRjwCwtbXFgQMHeP3rX89b3vKWludubW0xPz9PPp9nYGBgp6vWRx+PGba3t1lfX2dmZoY9e9r7DCqVCpubm7H/Dw4OPmHnFB2PDpHj+3qkjycautUh0FqPPJF1CPRtkT768OHxboskd7rAzc1NbrnlFq655ppg3549e7j88su5+eabm46vVqtUq9Xg94MPPsg555yz09Xqo49dg8OHD7N///6Wx1QqFU4aGqLU4pjp6Wnuu+++J5zh0a0Ogb4e6ePHC53oEGivR56oOgT6tkgffbTD49UW2XHisry8TKPRYGpqKrJ/amqKu+66q+n466+/nne+851N+598+G/57trzuWX/2byf/5e/e+CF8MUUnAPMwMg5iwCs3TwFGRh40jGeP/m/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", "text/plain": [ "
" ] @@ -483,12 +485,12 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0sAAADcCAYAAAChzzoQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABDZElEQVR4nO3dfXxT9f3//0eSXlFKuBBoKRYL6EAEAal04FT82FkvPn50OocOBaviNum8qNuEzYGTbUWHWHVMFEWcgqL7qHO6L4rF6pjdELD7iEI3EUcFWuDnILSlV+n5/ZELGnraJiVpcsLzfrudG+TkXLxySJ683zkn72MzDMNAREREREREAtijXYCIiIiIiEgsUmdJRERERETEhDpLIiIiIiIiJtRZEhERERERMaHOkoiIiIiIiAl1lkREREREREyosyQiIiIiImJCnSURERERERET6iyJiIiIiIiYUGdJRERERETEhDpLJ4Da2loWLFjAxRdfzIABA7DZbKxcudJ02WnTpmGz2bDZbNjtdpxOJ6NGjeKGG25g3bp1Qe/zxhtv9G/n2CklJSVMr0xEIi1a+ZGWltbh8zabjcLCwlBfiohEiXJErCwh2gVI5B04cID777+fYcOGMX78eMrKyjpd/uSTT6a4uBiAuro6PvvsM1555RWef/55vvOd7/D888+TmJjY5X6Tk5N56qmn2s13OBzdeh0i0vOilR8iEj+UI2Jl6iydAIYMGcLevXvJyMhg06ZNnH322Z0u37dvX66//vqAeYsWLeL222/nd7/7HdnZ2TzwwANd7jchIaHddkTEWqKVHyISP5QjYmW6DO8EkJycTEZGxnFtw+Fw8OijjzJmzBh++9vfcujQoeOu6/PPP8dms/Hwww+3e+6DDz7AZrPxwgsvHPd+RKT7YjU/2po1axYpKSls27YtYH5+fj79+/dnz549Yd2fiITGCjmSnZ3d4c8HujoTJvFNnSUJmsPh4LrrrqO+vp4NGzYEtc6BAwfaTS6XC4ARI0ZwzjnnsGrVqnbrrVq1ij59+nDFFVeE9TWISHSEKz8OHDjQbrlHHnmEQYMGMWvWLNxuNwBPPPEEb7/9No899hiZmZlhfS0iEh2RzJGSkhKee+65gOmss87Cbrdz0kknhfuliIXoMjwJydixYwHYsWNHl8vW1dUxaNCgdvPz8/NZu3YtADNnzuR73/se27dvZ/To0QA0Nzfz0ksvcdVVV5GamhrG6kUkmsKRH2b69evH008/TX5+PosWLeK73/0uP/rRj7jyyit1KbBInIlUjlx55ZUBj19++WW2bNnC/fffz7hx40KuU+KHOksSEt/IMocPH+5y2ZSUFP70pz+1mz9w4ED/37/zne9wxx13sGrVKhYuXAjAW2+9xYEDB9TIEYkz4cgPgG9+85vt5l100UV873vf4/777+cPf/gDKSkpPPHEE8dXsIjEnEjmiM+nn37KTTfdxBVXXMG9997bvUIlbqizJCGpra0FoE+fPl0u63A4yMvL63SZfv36cfnll7N69Wp/Z2nVqlUMHTqU//qv/zr+gkUkZoQ7P461ePFi/vjHP1JRUcHq1asZPHhwt+oUkdgV6RxxuVxcddVVDB06lN///vfYbLZu1SnxQ79ZkpBs3boVgFNPPTVs25w5cyaff/45H3zwAYcPH+b111/nuuuuw27X21MknkQiP9r66KOP2LdvHwAff/xxRPYhItEV6Ry58cYb2bNnD6+99hpOpzMi+xBr0ZklCZrb7Wb16tWkpqbyjW98I2zbvfjiixk0aBCrVq0iNzeX+vp6brjhhrBtX0SiL1L54VNXV0dBQQFjxoxh6tSpPPjgg3zrW9/qcohiEbGOSOfIokWLeO2113jllVf8v6MWUWdJguJ2u7n99tvZtm0bc+fODeu3LQkJCVx33XWsXr2abdu2MW7cOM4888ywbV9EoiuS+eFzzz33sGvXLv72t78xatQoSktLmTVrFh999BHJyclh35+I9KxI58g777zDvffey89+9rN2gz3IiU2dpRPEb3/7Ww4ePOi/38if/vQnvvzySwB++MMf0rdvX/+yhw4d4vnnnwegvr7ef+fsHTt2cO211/p/W9SVlpYW/3aO9a1vfYvevXv7H8+cOZNHH32Ud999VzeaE4kx0ciPUKxfv57f/e53LFiwgLPOOguAZ555hmnTpvHzn/+cBx98MOz7FJHQxHqOXHfddQwaNIjTTjutXdvlm9/8Junp6WHfp1iEISeEU045xQBMp507d/qXO//88wOeS0tLM0477TTj+uuvN95+++2g9zdr1qwO93fsPn3OOOMMw263G19++WUYXrGIhEs08qN3794dPg8Yc+bMMQzDMFwul3HKKacYZ511ltHc3Byw3F133WXY7Xaj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z/HU6c1bN7hdtTTRQC1u6nBTTwtHvJ9TADtu6mghETcut0Gdw00z9XDEhedT7wvKnuRLn7b5522/tnYnR6zdFrEZoadmTPvyyy/JysqKdhkiEVNVVcXJJ5/c6TINDQ0MHz6c6urqDpfJyMhg586dpKSkhLtEy1OOSDwLJkOg6xxRhnRMGSLx7kRqi8RdZ6m1tZXKykrGjBlDVVUVTqcz2iUFzeVykZWVZam6rVgzWLNuwzA4fPgwmZmZ2O1mN3cL1NDQQFNTU4fPJyUlxXQ4RZNVc8SK72uwZt1WrDnUDIHOc0QZ0jGrZghY871txZrBmnWfiG2RuLsMz263M3ToUACcTqdl3nxtWbFuK9YM1qu7b9++QS+bkpIS8wEUq6yeI1asGaxZt9VqDiVDQDnSXVbPELBm3VasGaxX94nWFgnuqyUREREREZETjDpLIiIiIiIiJuKys5ScnMyCBQtITk6OdikhsWLdVqwZrFu39BwrvkesWDNYs24r1iw9y6rvESvWbcWawbp1n2jiboAHERERERGRcIjLM0siIiIiIiLHS50lERERERERE+osiYiIiIiImFBnSURERERExERcdpaWLl1KdnY2KSkp5ObmsnHjxmiX5FdcXMzZZ59Nnz59GDx4MFdeeSWVlZUBy0ybNg2bzRYwff/7349SxR733Xdfu5pGjx7tf76hoYE5c+Zw0kknkZaWxtVXX01NTU0UK4bs7Ox2NdtsNubMmQPE5nGW2BDLGQLWzBErZggoR6T7YjlHrJghYM0cUYZYX9x1ltasWUNRURELFixgy5YtjB8/nvz8fPbt2xft0gB47733mDNnDn/7299Yt24dzc3NXHTRRdTV1QUsN3v2bPbu3eufHnzwwShVfNQZZ5wRUNOGDRv8z91111386U9/4uWXX+a9995jz549XHXVVVGsFj788MOAetetWwfANddc418mFo+zRFesZwhYN0esliGgHJHuifUcsWqGgPVyRBkSB4w4M3nyZGPOnDn+x26328jMzDSKi4ujWFXH9u3bZwDGe++95593/vnnG3fccUf0ijKxYMECY/z48abPHTx40EhMTDRefvll/7xt27YZgFFeXt5DFXbtjjvuMEaOHGm0trYahhGbx1miz2oZYhjWyJF4yBDDUI5IcKyWI1bIEMOIjxxRhlhPXJ1ZampqYvPmzeTl5fnn2e128vLyKC8vj2JlHTt06BAAAwYMCJi/atUqBg4cyNixY5k3bx719fXRKC/Av/71LzIzMxkxYgQzZsxg165dAGzevJnm5uaA4z569GiGDRsWM8e9qamJ559/nptuugmbzeafH4vHWaLHihkC1skRK2cIKEckOFbMEatkCFg7R5Qh1pQQ7QLC6cCBA7jdbtLT0wPmp6ens3379ihV1bHW1lbuvPNOzjnnHMaOHeuf/93vfpdTTjmFzMxM/u///o977rmHyspKXnnllajVmpuby8qVKxk1ahR79+7lF7/4Beeeey5bt26lurqapKQk+vXrF7BOeno61dXV0Sn4GK+99hoHDx7kxhtv9M+LxeMs0WW1DAHr5IjVMwSUIxIcq+WIVTIErJ8jyhBriqvOktXMmTOHrVu3BlxvC3Drrbf6/z5u3DiGDBnChRdeyI4dOxg5cmRPlwnAJZdc4v/7mWeeSW5uLqeccgovvfQSvXr1ikpNoXj66ae55JJLyMzM9M+LxeMsEiqr5IjVMwSUIxKfrJIhYP0cUYZYU1xdhjdw4EAcDke7kU9qamrIyMiIUlXmCgsLeeONN3j33Xc5+eSTO102NzcXgM8++6wnSgtKv379+NrXvsZnn31GRkYGTU1NHDx4MGCZWDnu//73v3nnnXe45ZZbOl0uFo+z9CwrZQhYO0eslCGgHJHgWSlHrJwhYK0cUYZYV1x1lpKSkpg0aRKlpaX+ea2trZSWljJlypQoVnaUYRgUFhby6quvsn79eoYPH97lOhUVFQAMGTIkwtUFr7a2lh07djBkyBAmTZpEYmJiwHGvrKxk165dMXHcn3nmGQYPHsxll13W6XKxeJylZ1khQyA+csRKGQLKEQmeFXIkHjIErJUjyhALi/IAE2H34osvGsnJycbKlSuNTz/91Lj11luNfv36GdXV1dEuzTAMw/jBD35g9O3b1ygrKzP27t3rn+rr6w3DMIzPPvvMuP/++41NmzYZO3fuNP74xz8aI0aMMM4777yo1n333XcbZWVlxs6dO42//vWvRl5enjFw4EBj3759hmEYxve//31j2LBhxvr1641NmzYZU6ZMMaZMmRLVmg3DMwLRsGHDjHvuuSdgfqweZ4m+WM8Qw7Bmjlg1QwxDOSKhi/UcsWKGGIZ1c0QZYm1x11kyDMN47LHHjGHDhhlJSUnG5MmTjb/97W/RLskPMJ2eeeYZwzAMY9euXcZ5551nDBgwwEhOTjZOPfVU48c//rFx6NChqNY9ffp0Y8iQIUZSUpIxdOhQY/r06cZnn33mf/7IkSPGbbfdZvTv399ITU01vvWtbxl79+6NYsUeb731lgEYlZWVAfNj9ThLbIjlDDEMa+aIVTPEMJQj0j2xnCNWzBDDsG6OKEOszWYYhtGjp7JEREREREQsIK5+syQiIiIiIhIu6iyJiIiIiIiYUGdJRERERETEhDpLIiIiIiIiJtRZEhERERERMaHOkoiIiIiIiAl1lkREREREREyosyQiIiIiImJCnSURERERERET6iyJiIiIiIiYUGdJRERERETEhDpLIiIiIiIiJv5/wlj5W+jLsu8AAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -523,12 +525,12 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "grating_type = 2\n", - "fourier_order = [10, 9]\n", + "fto = [10, 9]\n", "thickness = [100, 200, 400, 245]\n", "period = [1000, 2000]\n", "\n", @@ -554,23 +556,23 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ - "mee = meent.call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_2d_m, thickness=thickness, type_complex=type_complex, fft_type=0, improve_dft=True)" + "mee = meent.call_mee(backend=0, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_2d_m, thickness=thickness, type_complex=type_complex)" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "time: 10.467445135116577\n" + "time: 10.542928695678711\n" ] } ], @@ -582,7 +584,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -590,12 +592,12 @@ "output_type": "stream", "text": [ "Diffraction Efficiency of Reflection:\n", - " [[0.066 0.016 0. ]\n", - " [0.453 0.04 0. ]\n", + " [[0.028 0.056 0. ]\n", + " [0.183 0.036 0. ]\n", " [0. 0. 0. ]]\n", "Diffraction Efficiency of Transmission:\n", - " [[0.055 0.002 0. ]\n", - " [0.005 0.008 0. ]\n", + " [[0.063 0.004 0. ]\n", + " [0.025 0.052 0. ]\n", " [0. 0. 0. ]]\n" ] } @@ -609,14 +611,14 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "time: 5.318186044692993\n" + "time: 3.1625919342041016\n" ] } ], @@ -635,12 +637,12 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAz8AAADcCAYAAABebR/yAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9f5hlV1Xnj7+q69761VXVRVWlq+l0hw50JiGBgAKGCIOIkcDMh0dNHIGvCCgfdcYkitHHR3hmDKgzGYZxcFDMzKNMwCHRET8gDnwnjEYhHzBxJE6UDAmkIQ3d6VQ11e3trttVt6pudX3+OGed8z7r7nPuvVXVnbrd593P7Xvq3HP2r7P32uu91tr79K2vr69TokSJEiVKlChRokSJEhc4djzTBShRokSJEiVKlChRokSJ84GS/JQoUaJEiRIlSpQoUeKiQEl+SpQoUaJEiRIlSpQocVGgJD8lSpQoUaJEiRIlSpS4KFCSnxIlSpQoUaJEiRIlSlwUKMlPiRIlSpQoUaJEiRIlLgqU5KdEiRIlSpQoUaJEiRIXBUryU6JEiRIlSpQoUaJEiYsCJfkpUaJEiRIlSpQoUaLERYGS/JQoUaJEiRIlSpQoUeKiQEl+LhD8zd/8DbfeeivXXHMNO3fu5LLLLuNHfuRH+NrXvtZy7atf/Wr6+vro6+tjx44djI+Pc+WVV/JjP/Zj/Nmf/VnHeb797W9P0vGfoaGhraxeiRIlzjFKGVKiRInNopQjJXoBlWe6ACW2Bu973/v44he/yD/7Z/+Ma6+9ltnZWX77t3+b7/zO7+Shhx7iBS94Qeb6ffv2ceeddwJw5swZDh06xCc+8Qk+9rGP8SM/8iN87GMfo1qtts13cHCQ3/u932s539/fvzUVK1GixHlBKUNKlCixWZRypERPYL3EBYEvfvGL68vLy5lzX/va19YHBwfXf/RHfzRz/nu+53vWr7nmmpY0ms3m+s/8zM+sA+u/9Eu/1DbPt73tbes7d+7cXMFLlCixLVDKkBIlSmwWpRwp0Qsow94uEHz3d383AwMDmXNXXHEF11xzDY899lhHafT39/PBD36Qq6++mt/+7d/m1KlTmy7X+vo63/u938sll1zC8ePHk/MrKyu88IUv5HnPex5nzpzZdD4lSpTYHLarDPnGN75BX18fH/jAB1p++6u/+iv6+vr4gz/4g03nU6JEic1ju8oRIDc0rq+vj8OHD29JHiV6AyX5uYCxvr7O3Nwc09PTHd/T39/Pm9/8ZhYXF/nCF77Q0T3z8/Mtn9OnTwORsPkv/+W/0Gg0+Of//J8n99xxxx38n//zf7j77rvZuXNndxUrUaLEecF2kCHPfe5zecUrXsE999zTct8999zD2NgYP/ADP9Bx+UqUKHF+sR3kCMB//a//teXznOc8h+HhYUZHR7uuV4neRbnm5wLGPffcw1NPPcWv/uqvdnWfxeR+/etfb3vtmTNnuOSSS1rO33jjjdx3330AXH755fzGb/wGP/3TP80999zDwYMHef/738/P/dzP8apXvaqrspUoUeL8YbvIkLe+9a389E//NI8//jhXXXUVAKurq/zRH/0RN910EyMjI12Vr0SJEucP20WOvOUtb8n89v73v59vfvOb/P7v/35XxKxE76MkPxcoHn/8cW655Rauv/563va2t3V1r1lAFhYW2l47NDTEf//v/73lvBckP/VTP8UnPvEJbrvtNqanp3ne857Hv/k3/6arcpUoUeL8YTvJkB/5kR/h537u57jnnnv4tV/7NQA++9nPMj8/36LQlChRYvtgO8kRxV/+5V/yrne9i9tuu40f+7Ef66pcJXofJfm5ADE7O8s//af/lF27dvHHf/zHXe92Uq/XARgbG2t7bX9/PzfccENH6X74wx/mec97Hk888QR/9Vd/xfDwcFflKlGixPnBdpMhExMTvOENb+Dee+9NyM8999zDpZdeymte85quylaiRInzg+0mRwxHjx7ljW98I694xSv4D//hP3RVphIXBso1PxcYTp06xetf/3pqtRr33Xcfe/fu7TqNRx99FICDBw9uadk+97nPsby8DMCXv/zlLU27RIkSW4PtKkPe+ta38o1vfIO/+qu/YmFhgT/90z/lzW9+Mzt2lNNYiRLbDdtVjqysrPDDP/zDDA4O8kd/9EdUKqUP4GJE+dQvIDQaDd7whjfwta99jT//8z/n6quv7jqNtbU17r33XkZGRnjlK1+5ZWV7+umnue2223jta1/LwMAAv/iLv8iNN97Ic57znC3Lo0SJEpvDdpYhr3vd67jkkku45557uO6661hcXCzDVUqU2IbYznLkZ3/2Z3nkkUd44IEHmJmZ2bJ0S/QWSvJzgWBtbY03vvGNPPjgg3zqU5/i+uuv31Aa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EREREREREXFJIBo/ERERERERERERERGXBKLxExERERERERERERFxSSAaPxERERERERERERERlwSi8RMRERERERERERERcUkgGj8REREREREREREREZcEovETEREREREREREREXFJIBo/ERERERERERERERGXBKLxExERERERERERERFxSSAaPxERERERERERERERlwSi8RMRERERERERERERcUng/wKyAv9AmY8xMAAAAABJRU5ErkJggg==", + "image/png": "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", "text/plain": [ "
" ] @@ -650,7 +652,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAADcCAYAAABK+IETAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9fZhcVZXv/+l0Vb93p+hu0k1eIBmTAcKLvE4IMOpoNCp6fWF0cBAzjlfn4QeOinN1mIuK6Ihyvc8w+K7XB/UK17l6FceXQQEFBwwIaGaIASRKJCF0x06opCvd1d3V6d8f56w666za59Sp6uok3Zzv85yn6rzts88+e6+9vmutvXfTzMzMDClSpEiRIkWKFClSpEiRgkVHOgMpUqRIkSJFihQpUqRIcbQgJUgpUqRIkSJFihQpUqRI4SMlSClSpEiRIkWKFClSpEjhIyVIKVKkSJEiRYoUKVKkSOEjJUgpUqRIkSJFihQpUqRI4SMlSClSpEiRIkWKFClSpEjhIyVIKVKkSJEiRYoUKVKkSOEjJUgpUqRIkSJFihQpUqRI4SMlSClSpEiRIkWKFClSpEjhIyVIKVKkSJEiRYoUKVKkSOEjJUgLAA8++CBXXnklp5xyCp2dnRx//PG88Y1v5De/+U3FtS960YtoamqiqamJRYsW0dPTw4knnshll13GHXfckfiZf/VXf0VXV1fk+aamJq688sq63idFihSHF6kMSZEixWyRypEUCwmZI52BFLPHJz7xCe677z7e8IY3cPrppzM0NMSnP/1pzjrrLO6//35OPfXU0PXLly/n+uuvB+DgwYNs376db3/723z961/njW98I1//+tfJZrNH4lVSpEhxBJDKkBQpUswWqRxJsaAwk2Le47777puZmJgIHfvNb34z09raOnPppZeGjr/whS+cOeWUUyrSKJVKM//f//f/zQAz73vf+6o+c9OmTTOdnZ2R54GZK664IuEbpEiR4kgilSEpUqSYLVI5kmIhIQ2xWwA4//zzaWlpCR1bs2YNp5xyCo8++miiNJqbm7nppptYu3Ytn/70p9m/f39D87hp0yba2toq8rNx40aOOeYYdu/e3dDnpUiRIjmOdhlSKBTo7OzkXe96V8W5Xbt20dzcXLZEp0iR4sjgaJcjACtXriyH9tnt7rvvbuizUsxvpARpgWJmZobh4WH6+/sT39Pc3Myb3vQmxsbGuPfeexPdMzIy4tws/vmf/5ljjz2WTZs2MT09DcAXvvAFfvzjH/OpT32KpUuXJs5nihQp5h5Hkwzp6urida97Hf/yL/9Slh+C//N//g8zMzNceumlifOZIkWKw4OjSY4A3Hjjjfzv//2/Q9tZZ53FokWL6OvrS5zHFAsf6RikBYpbbrmFp59+muuuu66m+yRG+Le//W3Vaw8ePMixxx6bKN1cLseXv/xlNm7cyMc//nH+8i//kr/7u7/jta99LW9+85trymOKFCnmHkebDHnLW97CLbfcwh133MHLX/7y8vGvf/3rvOAFL+D444+vKZ8pUqSYexxtcuS1r31taP+b3/wmv/zlL7nuuus47bTTaspjioWNlCAtQDz22GNcccUVrF+/nk2bNtV0r8wGMzo6WvXatrY2vve97znPvfSlL6049rKXvYy/+Zu/4brrruNb3/oWbW1tfOELX6gpfylSpJh7HI0yZMOGDSxdupRbbrmlTJC2bt3Kf/7nf/KlL32ppjymSJFi7nE0yhGNbdu28dd//de85jWv4ZprrqkpfykWPlKCtMAwNDTERRddxOLFi/nWt75Fc3NzTfcXCgUAuru7q17b3NzMhg0bakr/k5/8JN/97nfZsmULt956K0uWLKnp/hQpUswtjlYZsmjRIi699FI+97nPMTY2RkdHB7fccgttbW284Q1vqCmPKVKkmFscrXJEcODAAV7/+tezbNkyvva1r9HU1FTT/SkWPtIxSAsI+/fv5xWveAX5fJ7bb7+9rnE9W7duBWD16tWNzh4Av/rVr9izZw8AjzzyyJw8I0WKFPXhaJchb3nLWygUCtx2223MzMxw66238qpXvYrFixc3/FkpUqSoD0e7HAFv/aTdu3dz22230dPTMyfPSDG/kXqQFgiKxSKvfvWr+c1vfsOdd97J2rVra05jenqaW2+9lY6ODi688MKG5/HgwYO89a1vZe3atZx//vnccMMNvO51r+Pcc89t+LNSpEhRG+aDDDn11FM588wzueWWW1i+fDlPPfUUn/rUpxr+nBQpUtSH+SBHPv7xj3Pbbbfx7W9/m5NOOqnh6adYGEgJ0gLA9PQ0f/EXf8HmzZv57ne/y/r16+tK42//9m959NFH+fu///s5sai8//3v56mnnuL+++/nxBNP5K677mLTpk386le/orW1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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAADcCAYAAABK+IETAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9fZwdVZXvj787fU6nu9PdadMh3YSEhAGGEB6MgN8kPjIaiYj+fGAeUAaiw1fnchNHwRkZZhhBHMXhzm90VHyYuVwcR7jMMFeZuehFHhS9QkBAMxKeJEgMAbpjJ550d9Kn06fT3z+q1qlV6+xdp87p00m6qc/rVa9zqmrXrl1Ve6+9PmutvXfT5OTkJBkyZMiQIUOGDBkyZMiQgTmHuwAZMmTIkCFDhgwZMmTIcKQgI0gZMmTIkCFDhgwZMmTIECIjSBkyZMiQIUOGDBkyZMgQIiNIGTJkyJAhQ4YMGTJkyBAiI0gZMmTIkCFDhgwZMmTIECIjSBkyZMiQIUOGDBkyZMgQIiNIGTJkyJAhQ4YMGTJkyBAiI0gZMmTIkCFDhgwZMmTIECIjSBkyZMiQIUOGDBkyZMgQIiNIGTJkyJAhQ4YMGTJkyBAiI0izAA8//DCbNm3ilFNOYd68eRx77LH8/u//Pr/4xS8q0p599tk0NTXR1NTEnDlz6Orq4qSTTuKiiy7i7rvvTn3P97///XR0dHjPNzU1sWnTprqeJ0OGDIcWmQzJkCHDVJHJkQyzCbnDXYAMU8ff/M3fcP/99/N7v/d7nH766fT39/OlL32JM844gwcffJBTTz01ln7JkiVcd911AOzbt49t27bxrW99i29+85v8/u//Pt/85jfJ5/OH41EyZMhwGJDJkAwZMkwVmRzJMKswmWHG4/77758cGxuLHfvFL34xOXfu3MkLL7wwdvyNb3zj5CmnnFKRR6lUmvyv//W/TgKTH//4x6vec8OGDZPz5s3zngcmN27cmPIJMmTIcDiRyZAMGTJMFZkcyTCbkIXYzQK85jWvoaWlJXbsxBNP5JRTTuHJJ59MlUdzczNf+MIXWLlyJV/60pfYu3dvQ8u4YcMGWltbK8qzfv16XvGKV/Diiy829H4ZMmRIjyNdhoyMjDBv3jw+8pGPVJzbuXMnzc3NZUt0hgwZDg+OdDkCsHz58nJon93uu+++ht4rw8xGRpBmKSYnJxkYGGDhwoWpr2lubua9730v+/fv58c//nGqawYHB52bxd///d9z1FFHsWHDBiYmJgD42te+xl133cUXv/hFFi9enLqcGTJkmH4cSTKko6ODd7/73fzLv/xLWX4I/uf//J9MTk5y4YUXpi5nhgwZDg2OJDkC8PnPf55//ud/jm1nnHEGc+bMoaenJ3UZM8x+ZGOQZiluvvlmXnjhBa699tqarpMY4WeffbZq2n379nHUUUelyre7u5sbb7yR9evX89nPfpb3ve99/Omf/invete7+MM//MOaypghQ4bpx5EmQy6++GJuvvlm7r77bt761reWj3/zm9/kDW94A8cee2xN5cyQIcP040iTI+9617ti+7fddhs//elPufbaaznttNNqKmOG2Y2MIM1CPPXUU2zcuJG1a9eyYcOGmq6V2WCGh4erpm1tbeV//+//7Tz3lre8peLYOeecwx//8R9z7bXX8m//9m+0trbyta99rabyZciQYfpxJMqQdevWsXjxYm6++eYyQdq6dSs///nP+cd//MeaypghQ4bpx5EoRzSeeOIJ/uiP/oh3vvOdXHXVVTWVL8PsR0aQZhn6+/s577zzmD9/Pv/2b/9Gc3NzTdePjIwA0NnZWTVtc3Mz69atqyn/v/3bv+Xf//3f2bJlC7fccguLFi2q6foMGTJML45UGTJnzhwuvPBCvvKVr7B//37a29u5+eabaW1t5fd+7/dqKmOGDBmmF0eqHBEMDQ3xnve8h2OOOYZvfOMbNDU11XR9htmPbAzSLMLevXs599xzKRQK3HnnnXWN69m6dSsAJ5xwQqOLB8DPfvYzdu3aBcBjjz02LffIkCFDfTjSZcjFF1/MyMgIt99+O5OTk9xyyy28/e1vZ/78+Q2/V4YMGerDkS5HIFg/6cUXX+T222+nq6trWu6RYWYj8yDNEhSLRd7xjnfwi1/8gnvuuYeVK1fWnMfExAS33HIL7e3tvO51r2t4Gfft28cHPvABVq5cyWte8xquv/563v3ud/PqV7+64ffKkCFDbZgJMuTUU0/lVa96FTfffDNLlixhx44dfPGLX2z4fTJkyFAfZoIc+exnP8vtt9/Ot771LVasWNHw/DPMDmQEaRZgYmKCP/iDP2Dz5s38+7//O2vXrq0rjz/5kz/hySef5M///M+nxaJyxRVXsGPHDh588EFOOukk7r33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IkWKFClOJlIDKUWKFClSpEiRIkWKFCkCpAZSihQpUqRIkSJFihQpUgRIDaQUKVKkSJEiRYoUKVKkCNDWBtI999zDxo0b6enp4corr+THP/7xcmcphieeeIJ3vOMdjI2N0dHRwYMPPhg7X6lU+PM//3POPvtsent72bFjBy+99NLyZDbAXXfdxe/8zu/Q39/P2rVrede73sWLL74Yu6ZUKnHbbbcxNDREX18fN954I5OTk8uUY7j33nu59NJLww3Ytm3bxr/8y7+s2PymWDlIZcjJRzvKEEjlSIrWkcqRk49UjqRYbrStgfQP//AP3HHHHdx55538x3/8B5dddhnXXHMNhw4dWu6shTh27BiXXXYZ99xzj/f85z73Oe6++27uu+8+nnrqKVavXs0111xDqVQ6zTmN8Pjjj3Pbbbfx5JNP8vDDD7O4uMjb3/52jh07Fl7z0Y9+lO9+97t8+9vf5vHHH+fgwYPccMMNy5bndevW8dnPfpbdu3eza9cu3va2t/HOd76Tn/3sZysyvylWBlIZcmrQjjIEUjmSojWkcuTUIJUjKZYdlTbFG97whsptt90W/l9aWqqMjY1V7rrrrmXMVTKAygMPPBD+P378eGV0dLTy+c9/PjxWKBQq3d3dlb//+79fhhz6cejQoQpQefzxxyuVistjNputfPvb3w6vef755ytAZefOncuVzSqcddZZla985Sttk98Upx+pDDk9aFcZUqmkciRFfaRy5PQglSMpTjfa0oO0sLDA7t272bFjR3hs1apV7Nixg507dy5jzhrH3r17mZiYiJVhzZo1XHnllSuqDEeOHAFgcHAQgN27d7O4uBjL95YtW9iwYcOKyPfS0hLf+ta3OHbsGNu2bVvx+U2xPEhlyOlDu8kQSOVIisaQypHTh1SOpDjdyCx3BlrB1NQUS0tLjIyMxI6PjIzwwgsvLFOumsPExASAtwxybrlx/PhxPvKRj/DGN76Riy++GHD57urqIp/Px65d7nw/88wzbNu2jVKpRF9fHw888AAXXXQRe/bsWZH5TbG8SGXI6UE7yRBI5UiK5pDKkdODVI6kWA60pYGU4vTgtttu49lnn+VHP/rRcmelLi644AL27NnDkSNH+Md//EduvvlmHn/88eXOVooUr2q0kwyBVI6kSLESkcqRFMuBtgyxGx4eprOzs2rlj8nJSUZHR5cpV81B8rlSy3D77bfzve99jx/+8IesW7cuPD46OsrCwgKFQiF2/XLnu6uri82bN7N161buuusuLrvsMr70pS+t2PymWF6kMuTUo91kCKRyJEVzSOXIqUcqR1IsF9rSQOrq6mLr1q088sgj4bHjx4/zyCOPsG3btmXMWePYtGkTo6OjsTIcPXqUp556alnLUKlUuP3223nggQd49NFH2bRpU+z81q1byWazsXy/+OKL/PKXv1xRdX/8+HHm5+fbJr8pTi9SGXLqcKbIEEjlSIraSOXIqUMqR1IsO5Z5kYiW8a1vfavS3d1d+drXvlZ57rnnKrfccksln89XJiYmljtrIWZmZio//elPKz/96U8rQOWv//qvKz/96U8rv/jFLyqVSqXy2c9+tpLP5yvf+c53Kk8//XTlne98Z2XTpk2Vubm5ZcvzrbfeWlmzZk3lscceq7zyyivhZ3Z2Nrzmj/7ojyobNmyoPProo5Vdu3ZVtm3bVtm2bduy5fnjH/945fHHH6/s3bu38vTTT1c+/vGPVzo6Oir/+q//uiLzm2JlIJUhpwbtKEMqlVSOpGgNqRw5NUjlSIrlRtsaSJVKpfLlL3+5smHDhkpXV1flDW94Q+XJJ59c7izF8MMf/rACVH1uvvnmSqXiltf85Cc/WRkZGal0d3dXtm/fXnnxxReXNc++/AKVr371q+E1c3NzlT/+4z+unHXWWZVcLld597vfXXnllVeWLc8f+MAHKueee26lq6ur8prXvKayffv2UBitxPymWDlIZcjJRzvKkEollSMpWkcqR04+UjmSYrnRUalUKqfWR5UiRYoUKVKkSJEiRYoU7YG2nIOUIkWKFClSpEiRIkWKFKcCqYGUIkWKFClSpEiRIkWKFAFSAylFihQpUqRIkSJFihQpAqQGUooUKVKkSJEiRYoUKVIESA2kFClSpEiRIkWKFClSpAiQGkgpUqRIkSJFihQpUqRIESA1kFKkSJEiRYoUKVKkSJEiQGogpUiRIkWKFClSpEiRIkWA1EBKkSJFihQpUqRIkSJFigCpgZQiRYoUKVKkSJEiRYoUAVIDKUWKFClSpEiRIkWKFCkCpAZSihQpUqRIkSJFihQpUgT4/wG4JDMuCeXO1wAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -692,12 +694,12 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -707,7 +709,7 @@ }, { "data": { - "image/png": "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BAgNHQklDQFUR8IFzz38KK1DVlYWdu3aha1bt7Z1U6w4//zzUVBQgJKSErz66quYMWMGcnNz27pZitKuCSUdUQ1RFO8RShoCqI6EC54ze+vevTuioqKMFTKOHj2KpKSkNmqVfzS006vHkJ2djXXr1uG9995Dnz59GvOTkpJQVVWF4uJiV3kvtDsmJgbnnnsuRowYgZycHAwZMgRPP/20p9ustB2hriNe1xAg9HRENUTxh1DXEMD7OhJqGgKojoQLnnv4iYmJwYgRI7Bp06bGvLq6OmzatAnp6elt2DJ70tLSkJSU5DqG0tJSbN++vU2PwXEcZGdnY82aNXj33XeRlpbm+vuIESPQoUMHV7v37NmDgwcPeu7c19XVobKyMqTarLQeoa4jXtUQIHx0RDVEaYlQ1xDAuzoSLhoCqI6ELG284AJl1apVTmxsrLN8+XLn888/d2bNmuUkJiY6RUVFbd20Rk6ePOl88sknzieffOIAcJ588knnk08+cb766ivHcRxn4cKFTmJiovP66687O3fudCZNmuSkpaU53333XZu1+c4773QSEhKczZs3O19//XXj79tvv20s88tf/tLp27ev8+677zo7duxw0tPTnfT09DZrs+M4zgMPPODk5uY6Bw4ccHbu3Ok88MADTkREhPPXv/7Vs21W2h6v60goaojjhKaOqIYogeB1DXGc0NSRUNQQx1EdCSc8+fDjOI7z7LPPOn379nViYmKcSy+91MnLy2vrJrl47733HADGb8aMGY7j1C8x+eCDDzq9evVyYmNjnTFjxjh79uxp0zaz9gJwli1b1ljmu+++c+666y7n7LPPds466yzn2muvdb7++uu2a7TjOLfeeqvTr18/JyYmxunRo4czZsyYRrFxHG+2WfEGXtaRUNQQxwlNHVENUQLFyxriOKGpI6GoIY6jOhJORDiO45zZb0uKoiiKoiiKoihtj+d8fhRFURRFURRFUc4E+vCjKIqiKIqiKEq7QB9+FEVRFEVRFEVpF+jDj6IoiqIoiqIo7QJ9+FEURVEURVEUpV2gDz+KoiiKoiiKorQL9OFHURRFURRFUZR2gT78KIqiKIqiKIrSLtCHH0VRFEVRFEVR2gX68KMoiqIoiqIoSrtAH34URVEURVEURWkX6MOPoiiKoiiKoijtgv8fAA4AfUufvq0AAAAASUVORK5CYII=", + "image/png": "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", "text/plain": [ "
" ] diff --git a/tutorials/02-autograd-and-optimization-jax.ipynb b/tutorials/02-autograd-and-optimization-jax.ipynb index 6384561..9d92bc1 100644 --- a/tutorials/02-autograd-and-optimization-jax.ipynb +++ b/tutorials/02-autograd-and-optimization-jax.ipynb @@ -10,9 +10,18 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/yongha/miniconda3/envs/meent/lib/python3.10/site-packages/jax/_src/api_util.py:190: SyntaxWarning: Jitted function has static_argnums=(1, 2, 3, 4), but only accepts 4 positional arguments. This warning will be replaced by an error after 2022-08-20 at the earliest.\n", + " warnings.warn(f\"Jitted function has {argnums_name}={argnums}, \"\n" + ] + } + ], "source": [ "import jax\n", "import optax\n", @@ -25,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -34,8 +43,8 @@ "# common\n", "pol = 0 # 0: TE, 1: TM\n", "\n", - "n_I = 1 # n_incidence\n", - "n_II = 1 # n_transmission\n", + "n_top = 1 # n_topncidence\n", + "n_bot = 1 # n_transmission\n", "\n", "theta = 0 * jnp.pi / 180 # angle of incidence\n", "phi = 0 * jnp.pi / 180 # angle of rotation\n", @@ -45,16 +54,14 @@ "thickness = [500., 1000.] # thickness of each layer, from top to bottom.\n", "period = [1000.] # length of the unit cell. Here it's 1D.\n", "\n", - "fourier_order = [10]\n", + "fto = [10]\n", "\n", - "type_complex = jnp.complex128\n", - "\n", - "grating_type = 0 # grating type: 0 for 1D grating without rotation (phi == 0)" + "type_complex = jnp.complex128" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -88,7 +95,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -96,18 +103,18 @@ "output_type": "stream", "text": [ "ucell gradient:\n", - "[[[-0.05115948 -0.02534053 -0.00729983 0.07873275 -0.01842706\n", - " 0.09449833 0.08780079 -0.001232 -0.03641673 -0.04781187]]\n", + "[[[-0.05114874 -0.02533636 -0.00729883 0.07873582 -0.01841166\n", + " 0.09447967 0.08779338 -0.0012304 -0.03640632 -0.04779842]]\n", "\n", - " [[-0.1795402 -0.08599972 -0.2222932 -0.19380002 0.08989283\n", - " 0.05578499 -0.04559217 -0.13589897 -0.29833958 0.12877706]]]\n", + " [[-0.17959986 -0.08614187 -0.22233491 -0.19389416 0.08978906\n", + " 0.05564021 -0.04575985 -0.13595162 -0.29835993 0.12867445]]]\n", "thickness gradient:\n", - "[Array(0.00222085, dtype=float64, weak_type=True), Array(-0.00671622, dtype=float64, weak_type=True)]\n" + "[ 0.00222043 -0.00671415]\n" ] } ], "source": [ - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, fft_type=0, improve_dft=True)\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex)\n", "\n", "pois = ['ucell', 'thickness']\n", "forward = mee.conv_solve\n", @@ -145,14 +152,14 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 3/3 [00:04<00:00, 1.59s/it]" + "100%|██████████| 3/3 [00:05<00:00, 1.90s/it]" ] }, { @@ -160,13 +167,13 @@ "output_type": "stream", "text": [ "ucell final:\n", - "[[[1.00286486 1.00145571 1.00050162 4.9966673 5.00175321 4.99580683\n", - " 4.99617408 1.00015106 1.00214675 1.00275149]]\n", + "[[[1.00286423 1.00145549 1.00050169 4.99666797 5.00175318 4.99580863\n", + " 4.99617526 1.00015109 1.00214635 1.00275083]]\n", "\n", - " [[5.00542326 4.99990074 5.00824614 5.00650358 0.99324857 4.99253641\n", - " 4.99834413 5.00367486 5.01333385 4.98859416]]]\n", + " [[5.0054235 4.99990456 5.00824621 5.0065062 0.99325253 4.99254125\n", + " 4.99835018 5.00367578 5.01333396 4.9885967 ]]]\n", "thickness final:\n", - "[Array(499.9998925, dtype=float64), Array(1000.00039494, dtype=float64)]\n" + "[ 499.99989253 1000.00039487]\n" ] }, { @@ -178,7 +185,7 @@ } ], "source": [ - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, fft_type=0, improve_dft=True)\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex)\n", "\n", "pois = ['ucell', 'thickness']\n", "forward = mee.conv_solve\n", diff --git a/tutorials/02-autograd-and-optimization-pytorch.ipynb b/tutorials/02-autograd-and-optimization-pytorch.ipynb index 891ac94..fdf789c 100644 --- a/tutorials/02-autograd-and-optimization-pytorch.ipynb +++ b/tutorials/02-autograd-and-optimization-pytorch.ipynb @@ -2,17 +2,20 @@ "cells": [ { "cell_type": "markdown", + "metadata": { + "collapsed": false + }, "source": [ "# Meent Tutorial 2\n", "## Gradient and Optimization with [PyTorch](https://pytorch.org/)" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "import torch\n", @@ -20,22 +23,22 @@ "import meent\n", "from meent.on_torch.optimizer.loss import LossDeflector\n", "from meent.on_torch.optimizer.optimizer import OptimizerTorch" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "backend = 2 # Torch\n", "\n", "pol = 0 # 0: TE, 1: TM\n", "\n", - "n_I = 1 # n_incidence\n", - "n_II = 1 # n_transmission\n", + "n_top = 1 # n_topncidence\n", + "n_bot = 1 # n_transmission\n", "\n", "theta = 0 * torch.pi / 180 # angle of incidence\n", "phi = 0 * torch.pi / 180 # angle of rotation\n", @@ -45,83 +48,81 @@ "thickness = torch.tensor([500., 1000.]) # thickness of each layer, from top to bottom.\n", "period = torch.tensor([1000.]) # length of the unit cell. Here it's 1D.\n", "\n", - "fourier_order = [10]\n", + "fto = [10]\n", "\n", "type_complex = torch.complex128\n", - "device = torch.device('cpu')\n", - "\n", - "grating_type = 0 # grating type: 0 for 1D grating without rotation (phi == 0)" - ], - "metadata": { - "collapsed": false - } + "device = torch.device('cpu')" + ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "ucell_1d_m = torch.tensor([\n", " [[0, 0, 0, 1, 1, 1, 1, 0, 0, 0, ]],\n", " [[1, 1, 1, 1, 0, 1, 1, 1, 1, 1, ]],\n", " ]) * 4 + 1. # refractive index" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", + "metadata": { + "collapsed": false + }, "source": [ "## 2.1 Gradient\n", "Gradient can be calculated with the help of `torch.autograd` function.\n", "Read this for further information: [A GENTLE INTRODUCTION TO TORCH.AUTOGRAD](https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html)\n", "\n", "Gradient can be utilized to solve optimization problems. Here are examples that show couple of ways to get gradient or optimized values with or without predefined functions of meent." - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "### 2.1.1 Examples" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### 2.1.1 Examples" + ] }, { "cell_type": "markdown", - "source": [ - "Example 1: manually get gradient\n" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "Example 1: manually get gradient\n" + ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ucell gradient:\n", - "tensor([[[-0.0512, -0.0253, -0.0073, 0.0787, -0.0184, 0.0945, 0.0878,\n", + "tensor([[[-0.0511, -0.0253, -0.0073, 0.0787, -0.0184, 0.0945, 0.0878,\n", " -0.0012, -0.0364, -0.0478]],\n", "\n", - " [[-0.1795, -0.0860, -0.2223, -0.1938, 0.0899, 0.0558, -0.0456,\n", - " -0.1359, -0.2983, 0.1288]]])\n", + " [[-0.1796, -0.0861, -0.2223, -0.1939, 0.0898, 0.0556, -0.0458,\n", + " -0.1360, -0.2984, 0.1287]]], dtype=torch.float64)\n", "thickness gradient:\n", - "tensor([ 0.0022, -0.0067])\n" + "tensor([ 0.0022, -0.0067], dtype=torch.float64)\n" ] } ], "source": [ - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device, fft_type=0, improve_dft=True)\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device)\n", "\n", "mee.ucell.requires_grad = True\n", "mee.thickness.requires_grad = True\n", @@ -134,41 +135,41 @@ "print(mee.ucell.grad)\n", "print('thickness gradient:')\n", "print(mee.thickness.grad)" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "Example 2: using predefined 'grad' function in meent" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "Example 2: using predefined 'grad' function in meent" + ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ucell gradient:\n", - "tensor([[[-0.0512, -0.0253, -0.0073, 0.0787, -0.0184, 0.0945, 0.0878,\n", + "tensor([[[-0.0511, -0.0253, -0.0073, 0.0787, -0.0184, 0.0945, 0.0878,\n", " -0.0012, -0.0364, -0.0478]],\n", "\n", - " [[-0.1795, -0.0860, -0.2223, -0.1938, 0.0899, 0.0558, -0.0456,\n", - " -0.1359, -0.2983, 0.1288]]])\n", + " [[-0.1796, -0.0861, -0.2223, -0.1939, 0.0898, 0.0556, -0.0458,\n", + " -0.1360, -0.2984, 0.1287]]], dtype=torch.float64)\n", "thickness gradient:\n", - "tensor([ 0.0022, -0.0067])\n" + "tensor([ 0.0022, -0.0067], dtype=torch.float64)\n" ] } ], "source": [ - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device, fft_type=0, improve_dft=True)\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device)\n", "\n", "pois = ['ucell', 'thickness'] # Parameter Of Interests\n", "\n", @@ -183,41 +184,41 @@ "print(grad['ucell'])\n", "print('thickness gradient:')\n", "print(grad['thickness'])" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "## 2.2 Optimization" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "## 2.2 Optimization" + ] }, { "cell_type": "markdown", - "source": [ - "### 2.2.1 Examples" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### 2.2.1 Examples" + ] }, { "cell_type": "markdown", - "source": [ - "Example 1" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "Example 1" + ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -227,15 +228,15 @@ "tensor([[[1.0029, 1.0015, 1.0005, 4.9967, 5.0018, 4.9958, 4.9962, 1.0002,\n", " 1.0021, 1.0028]],\n", "\n", - " [[5.0054, 4.9999, 5.0082, 5.0065, 0.9932, 4.9925, 4.9983, 5.0037,\n", - " 5.0133, 4.9886]]], requires_grad=True)\n", + " [[5.0054, 4.9999, 5.0082, 5.0065, 0.9933, 4.9925, 4.9984, 5.0037,\n", + " 5.0133, 4.9886]]], dtype=torch.float64, requires_grad=True)\n", "thickness final:\n", - "tensor([ 499.9999, 1000.0004], requires_grad=True)\n" + "tensor([ 499.9999, 1000.0004], dtype=torch.float64, requires_grad=True)\n" ] } ], "source": [ - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device, fft_type=0, improve_dft=True)\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device)\n", "\n", "mee.ucell.requires_grad = True\n", "mee.thickness.requires_grad = True\n", @@ -256,29 +257,29 @@ "print(mee.ucell)\n", "print('thickness final:')\n", "print(mee.thickness)" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "Example 2" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "Example 2" + ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 3/3 [00:00<00:00, 183.91it/s]" + "100%|██████████| 3/3 [00:00<00:00, 145.39it/s]" ] }, { @@ -289,10 +290,10 @@ "tensor([[[1.0029, 1.0015, 1.0005, 4.9967, 5.0018, 4.9958, 4.9962, 1.0002,\n", " 1.0021, 1.0028]],\n", "\n", - " [[5.0054, 4.9999, 5.0082, 5.0065, 0.9932, 4.9925, 4.9983, 5.0037,\n", - " 5.0133, 4.9886]]], requires_grad=True)\n", + " [[5.0054, 4.9999, 5.0082, 5.0065, 0.9933, 4.9925, 4.9984, 5.0037,\n", + " 5.0133, 4.9886]]], dtype=torch.float64, requires_grad=True)\n", "thickness final:\n", - "tensor([ 499.9999, 1000.0004], requires_grad=True)\n" + "tensor([ 499.9999, 1000.0004], dtype=torch.float64, requires_grad=True)\n" ] }, { @@ -304,7 +305,7 @@ } ], "source": [ - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device, fft_type=0, improve_dft=True)\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device)\n", "\n", "\n", "def forward_fn():\n", @@ -329,29 +330,29 @@ "print(res[0])\n", "print('thickness final:')\n", "print(res[1])" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "Example 3" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "Example 3" + ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 3/3 [00:00<00:00, 219.78it/s]" + "100%|██████████| 3/3 [00:00<00:00, 196.12it/s]" ] }, { @@ -362,10 +363,10 @@ "tensor([[[1.0029, 1.0015, 1.0005, 4.9967, 5.0018, 4.9958, 4.9962, 1.0002,\n", " 1.0021, 1.0028]],\n", "\n", - " [[5.0054, 4.9999, 5.0082, 5.0065, 0.9932, 4.9925, 4.9983, 5.0037,\n", - " 5.0133, 4.9886]]], requires_grad=True)\n", + " [[5.0054, 4.9999, 5.0082, 5.0065, 0.9933, 4.9925, 4.9984, 5.0037,\n", + " 5.0133, 4.9886]]], dtype=torch.float64, requires_grad=True)\n", "thickness final:\n", - "tensor([ 499.9999, 1000.0004], requires_grad=True)\n" + "tensor([ 499.9999, 1000.0004], dtype=torch.float64, requires_grad=True)\n" ] }, { @@ -377,7 +378,7 @@ } ], "source": [ - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device, fft_type=0, improve_dft=True)\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device)\n", "\n", "pois = ['ucell', 'thickness']\n", "\n", @@ -395,10 +396,7 @@ "print(res[0])\n", "print('thickness final:')\n", "print(res[1])" - ], - "metadata": { - "collapsed": false - } + ] } ], "metadata": { @@ -410,14 +408,14 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" + "pygments_lexer": "ipython3", + "version": "3.10.10" } }, "nbformat": 4, diff --git a/tutorials/03-device-and-datatype-jax.ipynb b/tutorials/03-device-and-datatype-jax.ipynb index a0e6aef..cfb89c1 100644 --- a/tutorials/03-device-and-datatype-jax.ipynb +++ b/tutorials/03-device-and-datatype-jax.ipynb @@ -15,8 +15,8 @@ "execution_count": 1, "metadata": { "ExecuteTime": { - "start_time": "2023-04-17T20:56:52.161568Z", - "end_time": "2023-04-17T20:56:52.649404Z" + "end_time": "2023-04-17T20:56:52.649404Z", + "start_time": "2023-04-17T20:56:52.161568Z" } }, "outputs": [], @@ -24,7 +24,7 @@ "import os\n", "\n", "os.environ[\"CUDA_DEVICE_ORDER\"] = \"PCI_BUS_ID\"\n", - "os.environ[\"CUDA_VISIBLE_DEVICES\"] = '1'\n", + "os.environ[\"CUDA_VISIBLE_DEVICES\"] = '0'\n", "\n", "import time\n", "import numpy as np\n", @@ -39,11 +39,10 @@ "outputs": [], "source": [ "# experiment options\n", - "grating_type = 2\n", "pol = 0 # 0: TE, 1: TM\n", "\n", - "n_I = 1 # n_incidence\n", - "n_II = 1 # n_transmission\n", + "n_top = 1 # n_topncidence\n", + "n_bot = 1 # n_transmission\n", "\n", "theta = 20 * np.pi / 180\n", "phi = 50 * np.pi / 180\n", @@ -53,8 +52,8 @@ "thickness = [500]\n", "period = [1000, 1000]\n", "\n", - "fourier_order = [15, 15]\n", - "# fourier_order = [3, 3]\n", + "fto = [15, 15]\n", + "# fto = [3, 3]\n", "res_x, res_y, res_z = 20, 20, 20\n", "\n", "ucell = np.array([\n", @@ -96,8 +95,8 @@ "backend = 1 # JaxMeent\n", "device = 0 # CPU;\n", "dtype = 0\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", " " @@ -118,8 +117,8 @@ "source": [ "backend = 1 # JaxMeent\n", "\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, type_complex=dtype)\n", "mee.device = 0" ] @@ -133,12 +132,12 @@ }, { "cell_type": "markdown", - "source": [ - "## JAX" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "## JAX" + ] }, { "cell_type": "markdown", @@ -179,8 +178,8 @@ "backend = 1 # JaxMeent\n", "device = 0 # CPU;\n", "dtype = 0\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -237,8 +236,8 @@ "backend = 1 # JaxMeent\n", "device = 1 # GPU;\n", "dtype = 0\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -268,16 +267,19 @@ }, { "cell_type": "markdown", - "source": [ - "### CPU, 32 bit" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### CPU, 32 bit" + ] }, { "cell_type": "code", "execution_count": 7, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stderr", @@ -306,8 +308,8 @@ "backend = 1 # JaxMeent\n", "device = 0 # CPU;\n", "dtype = 1 # 32bit\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -333,23 +335,23 @@ "t0 = time.time()\n", "de_ri, de_ti, field_cell = mee.conv_solve_field(res_x=res_x, res_y=res_y, res_z=res_z)\n", "print(f'time for efficiency and field in one step, 2nd: ', time.time() - t0)\n" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "### GPU, 32 bit" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### GPU, 32 bit" + ] }, { "cell_type": "code", "execution_count": 8, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -368,8 +370,8 @@ "backend = 1 # JaxMeent\n", "device = 1 # CPU;\n", "dtype = 1 # 32bit\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -395,10 +397,7 @@ "t0 = time.time()\n", "de_ri, de_ti, field_cell = mee.conv_solve_field(res_x=res_x, res_y=res_y, res_z=res_z)\n", "print(f'time for efficiency and field in one step, 2nd: ', time.time() - t0)\n" - ], - "metadata": { - "collapsed": false - } + ] } ], "metadata": { diff --git a/tutorials/03-device-and-datatype-torch.ipynb b/tutorials/03-device-and-datatype-torch.ipynb index 36ae969..ef2b106 100644 --- a/tutorials/03-device-and-datatype-torch.ipynb +++ b/tutorials/03-device-and-datatype-torch.ipynb @@ -15,8 +15,8 @@ "execution_count": 1, "metadata": { "ExecuteTime": { - "start_time": "2023-04-17T20:56:52.161568Z", - "end_time": "2023-04-17T20:56:52.649404Z" + "end_time": "2023-04-17T20:56:52.649404Z", + "start_time": "2023-04-17T20:56:52.161568Z" } }, "outputs": [], @@ -24,7 +24,7 @@ "import os\n", "\n", "os.environ[\"CUDA_DEVICE_ORDER\"] = \"PCI_BUS_ID\"\n", - "os.environ[\"CUDA_VISIBLE_DEVICES\"] = '2'\n", + "os.environ[\"CUDA_VISIBLE_DEVICES\"] = '0'\n", "\n", "import time\n", "import numpy as np\n", @@ -39,11 +39,10 @@ "outputs": [], "source": [ "# experiment options\n", - "grating_type = 2\n", "pol = 0 # 0: TE, 1: TM\n", "\n", - "n_I = 1 # n_incidence\n", - "n_II = 1 # n_transmission\n", + "n_top = 1 # n_topncidence\n", + "n_bot = 1 # n_transmission\n", "\n", "theta = 20 * np.pi / 180\n", "phi = 50 * np.pi / 180\n", @@ -53,7 +52,7 @@ "thickness = [500]\n", "period = [1000, 1000]\n", "\n", - "fourier_order = [15, 15]\n", + "fto = [15, 15]\n", "res_x, res_y, res_z = 20, 20, 20\n", "\n", "ucell = np.array([\n", @@ -95,8 +94,8 @@ "backend = 2 # TorchMeent\n", "device = 0 # CPU;\n", "dtype = 0\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", " " @@ -117,8 +116,8 @@ "source": [ "backend = 2 # TorchMeent\n", "\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, type_complex=dtype)\n", "mee.device = 0" ] @@ -132,25 +131,28 @@ }, { "cell_type": "markdown", - "source": [ - "## PyTorch" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "## PyTorch" + ] }, { "cell_type": "markdown", - "source": [ - "### CPU, 64 bit" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### CPU, 64 bit" + ] }, { "cell_type": "code", "execution_count": 5, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stderr", @@ -181,8 +183,8 @@ "backend = 2 # TorchMeent\n", "device = 0 # CPU;\n", "dtype = 0\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -208,23 +210,23 @@ "t0 = time.time()\n", "de_ri, de_ti, field_cell = mee.conv_solve_field(res_x=res_x, res_y=res_y, res_z=res_z)\n", "print(f'time for efficiency and field in one step, 2nd: ', time.time() - t0)\n" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "### GPU, 64 bit" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### GPU, 64 bit" + ] }, { "cell_type": "code", "execution_count": 6, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -243,8 +245,8 @@ "backend = 2 # TorchMeent\n", "device = 1 # GPU;\n", "dtype = 0\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -270,23 +272,23 @@ "t0 = time.time()\n", "de_ri, de_ti, field_cell = mee.conv_solve_field(res_x=res_x, res_y=res_y, res_z=res_z)\n", "print(f'time for efficiency and field in one step, 2nd: ', time.time() - t0)\n" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "### CPU, 32 bit" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### CPU, 32 bit" + ] }, { "cell_type": "code", "execution_count": 7, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -305,8 +307,8 @@ "backend = 2 # TorchMeent\n", "device = 0 # CPU;\n", "dtype = 1 # 32bit\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -332,23 +334,23 @@ "t0 = time.time()\n", "de_ri, de_ti, field_cell = mee.conv_solve_field(res_x=res_x, res_y=res_y, res_z=res_z)\n", "print(f'time for efficiency and field in one step, 2nd: ', time.time() - t0)\n" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "### GPU, 32 bit" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### GPU, 32 bit" + ] }, { "cell_type": "code", "execution_count": 8, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -367,8 +369,8 @@ "backend = 2 # TorchMeent\n", "device = 1 # CPU;\n", "dtype = 1 # 32bit\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -394,19 +396,16 @@ "t0 = time.time()\n", "de_ri, de_ti, field_cell = mee.conv_solve_field(res_x=res_x, res_y=res_y, res_z=res_z)\n", "print(f'time for efficiency and field in one step, 2nd: ', time.time() - t0)\n" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 8, - "outputs": [], - "source": [], "metadata": { "collapsed": false - } + }, + "outputs": [], + "source": [] } ], "metadata": { From b20325e3de143c077ea26f1feaae75d255947f5c Mon Sep 17 00:00:00 2001 From: yonghakim Date: Fri, 9 Aug 2024 00:30:20 +0900 Subject: [PATCH 14/15] Refactoring done. Scripts updated. --- meent/on_jax/emsolver/rcwa.py | 36 ++- meent/on_jax/mee.py | 1 - meent/on_jax/modeler/modeling.py | 33 +-- meent/on_jax/optimizer/loss.py | 1 - meent/on_numpy/emsolver/rcwa.py | 2 +- meent/on_numpy/modeler/modeling.py | 1 - meent/on_torch/emsolver/rcwa.py | 2 +- tutorials/01-modeling-and-emsolver.ipynb | 94 ++++---- .../02-autograd-and-optimization-jax.ipynb | 57 +++-- ...02-autograd-and-optimization-pytorch.ipynb | 224 +++++++++--------- tutorials/03-device-and-datatype-jax.ipynb | 79 +++--- tutorials/03-device-and-datatype-torch.ipynb | 115 +++++---- 12 files changed, 319 insertions(+), 326 deletions(-) diff --git a/meent/on_jax/emsolver/rcwa.py b/meent/on_jax/emsolver/rcwa.py index 3ed0c22..d3d2711 100644 --- a/meent/on_jax/emsolver/rcwa.py +++ b/meent/on_jax/emsolver/rcwa.py @@ -89,8 +89,17 @@ def modeling_type_assigned(self, modeling_type_assigned): def _assign_modeling_type(self): if isinstance(self.ucell, (np.ndarray, jnp.ndarray)): # Raster self.modeling_type_assigned = 0 - if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0): - self._grating_type_assigned = 0 # 1D TE and TM only + if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)): + + def false_fun(): return 0 # 1D TE and TM only + def true_fun(): return 1 + + gear = jax.lax.cond(self.phi % (2 * np.pi) + self.fto[1], true_fun, false_fun) + + self._grating_type_assigned = gear + + # if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0): + # self._grating_type_assigned = 0 # 1D TE and TM only else: self._grating_type_assigned = 1 # else @@ -108,10 +117,23 @@ def grating_type_assigned(self, grating_type_assigned): def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): - if self._grating_type_assigned == 0: - de_ri, de_ti, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) - else: - de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + # def false_fun(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): + # de_ri, de_ti, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + # return de_ri, de_ti, layer_info_list, T1 + # + # def true_fun(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): + # de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + # return de_ri, de_ti, layer_info_list, T1 + # + # de_ri, de_ti, layer_info_list, T1 = jax.lax.cond(self._grating_type_assigned, true_fun, false_fun, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + + # if self._grating_type_assigned == 0: + # de_ri, de_ti, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + # else: + # de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + + # In JAXMeent, 1D TE TM are turned off for jit compilation. + de_ri, de_ti, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) return de_ri, de_ti, layer_info_list, T1 @@ -190,7 +212,7 @@ def calculate_field(self, res_x=20, res_y=20, res_z=20): def field_plot(self, field_cell): field_plot(field_cell, self.pol) - @partial(jax.jit, static_argnums=(1, 2, 3, 4)) + @partial(jax.jit, static_argnums=(1, 2, 3)) @jax_device_set def conv_solve_field(self, res_x=20, res_y=20, res_z=20, **kwargs): [setattr(self, k, v) for k, v in kwargs.items()] # needed for optimization diff --git a/meent/on_jax/mee.py b/meent/on_jax/mee.py index ec147a6..ec7edaa 100644 --- a/meent/on_jax/mee.py +++ b/meent/on_jax/mee.py @@ -11,7 +11,6 @@ def __init__(self, *args, **kwargs): OptimizerJax.__init__(self, *args, **kwargs) def _tree_flatten(self): - # TODO: check again and find all tree flatten children = (self.n_top, self.n_bot, self.theta, self.phi, self.psi, self.period, self.wavelength, self.ucell, self.thickness) aux_data = { diff --git a/meent/on_jax/modeler/modeling.py b/meent/on_jax/modeler/modeling.py index 5de06cf..adec6d3 100644 --- a/meent/on_jax/modeler/modeling.py +++ b/meent/on_jax/modeler/modeling.py @@ -10,33 +10,6 @@ class ModelingJax: def __init__(self, *args, **kwargs): pass - # self.ucell = None - # self.ucell_vector = None - # self.x_list = None - # self.y_list = None - # self.mat_table = None - - # def _tree_flatten(self): # TODO - # children = (self.n_top, self.n_bot, self.theta, self.phi, self.psi, - # self.period, self.wavelength, self.ucell, self.ucell_info_list, self.thickness) - # aux_data = { - # 'backend': self.backend, - # 'grating_type': self.grating_type, - # 'pol': self.pol, - # 'fto': self.fto, - # 'ucell_materials': self.ucell_materials, - # 'connecting_algo': self.algo, - # 'perturbation': self.perturbation, - # 'device': self.device, - # 'type_complex': self.type_complex, - # 'fourier_type': self.fft_type, - # } - # - # return children, aux_data - # - # @classmethod - # def _tree_unflatten(cls, aux_data, children): - # return cls(*children, **aux_data) @staticmethod def rectangle_no_approximation(cx, cy, lx, ly, base): @@ -499,8 +472,6 @@ def ellipse(self, cx, cy, lx, ly, n_index, angle=0, n_split_w=2, n_split_h=2, an def vector_per_layer_numeric(self, layer_info, x64=True): - # TODO: activate and apply 'x64' option thru this function and connect to meent class. - # TODO: make it clear: perturbation algorithm. For all backends. if x64: datatype = jnp.complex128 perturbation = 0 @@ -532,7 +503,6 @@ def vector_per_layer_numeric(self, layer_info, x64=True): else: top_left[0] = top_left[0] + (top_left[0] * perturbation) # top_left = top_left.add[0].add(top_left[0] * perturbation) - # TODO: change; save how many perturbations were applied in a variable row_list.insert(index, top_left[0]) break @@ -552,7 +522,6 @@ def vector_per_layer_numeric(self, layer_info, x64=True): if len(row_list) > index and bottom_right[0] == row_list[index]: perturbation += perturbation_unit - # TODO: confirm assign makes right value bottom_right[0] = bottom_right[0] - (bottom_right[0] * perturbation) # bottom_right = bottom_right.at[0].add(-bottom_right[0] * perturbation) row_list.insert(index, bottom_right[0]) @@ -576,7 +545,7 @@ def vector_per_layer_numeric(self, layer_info, x64=True): if top_left[1] == 0: # top_left = top_left.at[1].add(perturbation) - top_left[1] = top_left[1] + perturbation # tODO + top_left[1] = top_left[1] + perturbation # TODO: no jit at all? else: top_left[1] = top_left[1] + (top_left[1] * perturbation) # top_left = top_left.at[1].add(top_left[1] * perturbation) diff --git a/meent/on_jax/optimizer/loss.py b/meent/on_jax/optimizer/loss.py index 1fc695f..e24d125 100644 --- a/meent/on_jax/optimizer/loss.py +++ b/meent/on_jax/optimizer/loss.py @@ -1,4 +1,3 @@ -import jax import jax.numpy as jnp diff --git a/meent/on_numpy/emsolver/rcwa.py b/meent/on_numpy/emsolver/rcwa.py index d1eaa8d..8cf6c27 100644 --- a/meent/on_numpy/emsolver/rcwa.py +++ b/meent/on_numpy/emsolver/rcwa.py @@ -79,7 +79,7 @@ def _assign_modeling_type(self): if isinstance(self.ucell, np.ndarray): # Raster self.modeling_type_assigned = 0 - if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0) and (self.fto[1] == 0): # TODO: other bds + if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0) and (self.fto[1] == 0): self._grating_type_assigned = 0 # 1D TE and TM only else: self._grating_type_assigned = 1 # else diff --git a/meent/on_numpy/modeler/modeling.py b/meent/on_numpy/modeler/modeling.py index f768448..97c536d 100644 --- a/meent/on_numpy/modeler/modeling.py +++ b/meent/on_numpy/modeler/modeling.py @@ -536,7 +536,6 @@ def vector_per_layer_numeric(self, layer_info, x64=True): # top_left[0] for _ in range(100): - # tODO: confirm bisect change # index = bisect_left(row_list, top_left[0].real, key=lambda x: x.real) # python >=3.10 index = bisect_left(row_list, top_left[0].real) if len(row_list) > index and top_left[0] == row_list[index]: diff --git a/meent/on_torch/emsolver/rcwa.py b/meent/on_torch/emsolver/rcwa.py index 599a346..eda9294 100644 --- a/meent/on_torch/emsolver/rcwa.py +++ b/meent/on_torch/emsolver/rcwa.py @@ -88,7 +88,7 @@ def _assign_modeling_type(self): if isinstance(self.ucell, torch.Tensor): # Raster self.modeling_type_assigned = 0 - if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0): + if (self.ucell.shape[1] == 1) and (self.pol in (0, 1)) and (self.phi % (2 * np.pi) == 0) and (self.fto[1] == 0): self._grating_type_assigned = 0 # 1D TE and TM only else: self._grating_type_assigned = 1 # else diff --git a/tutorials/01-modeling-and-emsolver.ipynb b/tutorials/01-modeling-and-emsolver.ipynb index d5b9ccd..043b7f6 100644 --- a/tutorials/01-modeling-and-emsolver.ipynb +++ b/tutorials/01-modeling-and-emsolver.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -24,14 +24,14 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "pol = 0 # 0: TE, 1: TM\n", "\n", - "n_I = 1 # n_superstrate\n", - "n_II = 1 # n_substrate\n", + "n_top = 1 # n_superstrate\n", + "n_bot = 1 # n_substrate\n", "\n", "theta = 20 * np.pi / 180\n", "phi = 50 * np.pi / 180\n", @@ -41,11 +41,9 @@ "thickness = [500]\n", "period = [1000]\n", "\n", - "fourier_order = [30]\n", + "fto = [30]\n", "\n", - "type_complex = np.complex128\n", - "\n", - "grating_type = 0" + "type_complex = np.complex128\n" ] }, { @@ -104,7 +102,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -124,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -150,7 +148,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -171,7 +169,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -298,11 +296,11 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ - "mee = meent.call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_s, thickness=thickness, type_complex=type_complex, fft_type=0, improve_dft=True)" + "mee = meent.call_mee(backend=0, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_s, thickness=thickness, type_complex=type_complex)" ] }, { @@ -346,7 +344,7 @@ " || \\ | /\n", " || ... \\ | / ...\n", " || \\ | / \n", - " || \\ | / n_I:refractive index of superstrate\n", + " || \\ | / n_top:refractive index of superstrate\n", " ____________________________________\n", " | Layer 1 |\n", " |____________________________________|\n", @@ -356,7 +354,7 @@ " ____________________________________ |_____ x-axis \n", " | Layer N |\n", " |____________________________________|\n", - " n_II:refractive index of substrate\n", + " n_bot:refractive index of substrate\n", " / | \\ \n", " / | \\\n", " ... / | \\ ...\n", @@ -370,14 +368,14 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "time: 0.2368483543395996\n" + "time: 0.11336421966552734\n" ] } ], @@ -389,15 +387,19 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Diffraction Efficiency of Reflection: [0. 0.803 0. ]\n", - "Diffraction Efficiency of Transmission: [0. 0.197 0. ]\n" + "Diffraction Efficiency of Reflection: [[0. ]\n", + " [0.287]\n", + " [0. ]]\n", + "Diffraction Efficiency of Transmission: [[0. ]\n", + " [0.713]\n", + " [0. ]]\n" ] } ], @@ -417,14 +419,14 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "time: 0.024094820022583008\n" + "time: 0.04631304740905762\n" ] } ], @@ -443,12 +445,12 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAy4AAADcCAYAAACWAfUkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9fXRc13XfjX/AmcEMBhhgiAExIAiQoAiaFC3atCRXkp02jqNEyZPkSWKtJnWd2HG9urJWLce13LUcpWnsuGnsZLXLTmrZdVIvp22suHWad/8Sx1H9UtmSI8liTD6UKIISLEAQAA6gATAEBpgB+fvj3H3vvmfOnTeSEijPd63BDO7ce+65e87ZZ3/33uecrsuXL1+mgw466KCDDjrooIMOOuhgB2PXy12BDjrooIMOOuiggw466KCDRugQlw466KCDDjrooIMOOuhgx6NDXDrooIMOOuiggw466KCDHY8Ocemggw466KCDDjrooIMOdjw6xKWDDjrooIMOOuiggw462PHoEJcOOuiggw466KCDDjroYMejQ1w66KCDDjrooIMOOuiggx2PDnHpoIMOOuiggw466KCDDnY8OsSlgw466KCDDjrooIMOOtjx6BCXDjrooIMOOuiggw466GDHo0NcrgOUSiU++MEP8iM/8iMMDg7S1dXFH/zBHzjPfdOb3kRXVxddXV3s2rWL/v5+jhw5ws///M/z5S9/uel7/sIv/IJfjv1KpVJX6ck66KCDa42XS3/09fVFft/V1cU999zT6qN00EEHLyM6uqSDnYD4y12BDhqjUCjw4Q9/mP379/Pa176Wr371q3XPHxsb4yMf+QgAFy9eZGpqij/5kz/hD//wD/mZn/kZ/vAP/5BEItHwvslkkv/6X/9rzfFYLNbWc3TQQQcvPV4u/dFBBx28stDRJR3sBHSIy3WAvXv38sILLzAyMsJjjz3G61//+rrnDwwM8HM/93OhYx/96Ef5pV/6JT75yU8yMTHBb/3WbzW8bzwerymngw46uL7wcumPDjro4JWFji7pYCegkyp2HSCZTDIyMnJFZcRiMX73d3+XY8eO8YlPfIKVlZUrrtczzzxDV1cXH/vYx2q+++Y3v0lXVxd/9Ed/dMX36aCDDtrHTtUfGu94xztIpVI8+eSToeN33XUXu3fvZm5u7qrer4MOOmgd14MumZiYiExzbxQh6uD6QIe4fA8hFovx1re+lfX1dR566KGmrikUCjWv1dVVAG644Qbe+MY38rnPfa7mus997nNkMhl+8id/8qo+QwcddPDy4Grpj0KhUHPe7/zO77Bnzx7e8Y53sL29DcCnP/1p/vZv/5b//J//M6Ojo1f1WTrooIOXD9dSl3z84x/nf/yP/xF63XzzzezatYtcLne1H6WDlwGdVLHvMdx0000AnD9/vuG5Fy9eZM+ePTXH77rrLv7mb/4GgLe//e384i/+Ik899RRHjx4FoFKp8L/+1//iLW95C+l0+irWvoMOOng5cTX0hwvZbJbPfOYz3HXXXXz0ox/ln//zf86/+Tf/hp/6qZ/qpKt20MErENdKl/zUT/1U6P8vfOELfPvb3+bDH/4wx48fb7meHew8dIjL9xhkdY61tbWG56ZSKf7yL/+y5vjQ0JD/+Wd+5md473vfy+c+9zn+/b//9wB86UtfolAodAyODjp4heFq6A+AH/qhH6o59sM//MP84i/+Ih/+8If54z/+Y1KpFJ/+9KevrMIddNDBjsS11CWCM2fO8C/+xb/gJ3/yJ/nVX/3V9irawY5Dh7h8j6FUKgGQyWQanhuLxbjzzjvrnpPNZvmJn/gJHnjgAZ+4fO5zn2Pfvn28+c1vvvIKd9BBBzsGV1t/2PiP//E/8ud//uecPHmSBx54gOHh4bbq2UEHHexsXGtdsrq6ylve8hb27dvHf//v/52urq626tnBzkNnjsv3GE6fPg3A5OTkVSvz7W9/O8888wzf/OY3WVtb4y/+4i9461vfyq5dnebVQQevJFwL/aHxxBNPsLi4CMCpU6euyT066KCDlx/XWpf8wi/8AnNzc/zZn/0Z/f391+QeHbw86ERcvoewvb3NAw88QDqd5vu+7/uuWrk/8iM/wp49e/jc5z7Hbbfdxvr6Oj//8z9/1crvoIMOXn5cK/0huHjxIu985zs5duwYb3jDG/jt3/5tfvqnf7rhkqsddNDB9YVrrUs++tGP8md/9mf8yZ/8iT/3toNXDjrE5XsE29vb/NIv/RJPPvkkv/zLv3xVPRDxeJy3vvWtPPDAAzz55JMcP36c17zmNVet/A466ODlxbXUH4IPfOADPPfcczzyyCMcOXKEBx98kHe84x088cQTJJPJq36/Djro4KXHtdYlf/d3f8ev/uqv8m//7b+tmajfwSsDHeJyneATn/gExWLR38/gL//yL5mdnQXgPe95DwMDA/65Kysr/OEf/iEA6+vr/m6158+f55/9s3/mz0VphGq16pdj46d/+qfp7e31/3/729/O7/7u7/KVr3yls6FUBx3sMLwc+qMV/J//83/45Cc/yQc/+EFuvvlmAD772c/ypje9iX/37/4dv/3bv33V79lBBx20jp2uS9761reyZ88eDh8+XGO//NAP/RD5fP6q37ODlxiXO7gucODAgcuA8/Xss8/6533/939/6Lu+vr7Lhw8fvvxzP/dzl//2b/+26fu94x3viLyffU/Bq1/96su7du26PDs7exWeuIMOOrhaeDn0R29vb+T3wOV3v/vdly9fvnx5dXX18oEDBy7ffPPNlyuVSui8973vfZd37dp1+eGHH27tgTvooINrgp2sS+T/qNdXvvKVdh65gx2GrsuXL1++Rpyog+8xvO51r2NwcJAHH3zw5a5KBx100EEHHXTQQQevMHSWfergquCxxx7j5MmTvP3tb3+5q9JBBx100EEHHXTQwSsQnYhLB1eE06dP8/jjj/Of/tN/olAo8Mwzz5BKpV7uanXQQQcddNBBBx108ApDJ+LSwRXhj//4j3nnO99JpVLhj/7ojzqkpYMOOuiggw466KCDa4JOxKWDDjrooIMOOuiggw462PG4ZhGX+++/n4mJCVKpFLfddht///d/f61u1UEHHbwC0dEhHXTQwZWio0c66OCVhWtCXP7n//yf3HvvvXzwgx/k29/+Nq997Wu56667WFxcvBa366CDDl5h6OiQDjro4ErR0SMddPDKwzVJFbvtttt4/etfzyc+8QkALl26xPj4OO95z3v45V/+5brXXrp0ibm5OTKZDF1dXVe7ah108LLh8uXLrK2tMTo6yq5djX0G5XKZra2tyO+7u7tfsXOKrkSHyPkdPdLBKw2t6hCor0deyToEOrZIBx24cL3bIvGrXeDW1haPP/449913n39s165d3HnnnTz88MM1529ubrK5uen///zzz3Ps2LGrXa0OOtgxmJmZYWxsrO455XKZPT09lOqcMzIywrPPPvuKMzxa1SHQ0SMdfG+hGR0CjfXIK1WHQMcW6aCDRrhebZGrTlwKhQLb29vk8/nQ8Xw+z1NPPVVz/kc+8hF+/dd/3VHS08CLQMl7XwfKwAZQVa+KuqYaUSt5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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAy4AAADcCAYAAACWAfUkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9e3hkV3XnjX/UVaUqlaqkakmWZHW3LeM2vmODjY2B3xtCTJwbDwQmIYSAgYTkCZib38kEJ4DBJBgCAw53yHBJBpwhZAhJhoQkOCF5E8zN4Bl7fIG2LbvbsiRL7ZJUXapSVUm/P/Ze56yza5+6tdqWTX2f5zxVdeqcffZZZ++113ettfcZ2N7e3qaPPvroo48++uijjz766GMXY89jXYE++uijjz766KOPPvroo4926BOXPvroo48++uijjz766GPXo09c+uijjz766KOPPvroo49djz5x6aOPPvroo48++uijjz52PfrEpY8++uijjz766KOPPvrY9egTlz766KOPPvroo48++uhj16NPXProo48++uijjz766KOPXY8+cemjjz766KOPPvroo48+dj36xKWPPvroo48++uijjz762PXoE5c++uijjz766KOPPvroY9ejT1weByiVSlx77bX8zM/8DGNjYwwMDPC5z33Oe+xznvMcBgYGGBgYYM+ePYyMjHDmmWfy8pe/nH/6p3/q+JqvfOUrg3LcLZPJ7NCd9dFHHycaj5X+yOVysf8PDAxw1VVXdXsrffTRx2OIvi7pYzcg+VhXoI/2WF5e5rrrruOUU07hggsu4Bvf+EbL4/fv38/1118PwLFjxzh06BBf/vKX+fznP88v//Iv8/nPf55UKtX2uul0mv/23/5b0/5EItHTffTRRx+PPh4r/dFHH308sdDXJX3sBvSJy+MAJ598Mg899BDT09N873vf4+lPf3rL40dHR/m1X/u1yL73vOc9vOENb+BjH/sYs7OzvPe972173WQy2VROH3308fjCY6U/+uijjycW+rqkj92AfqrY4wDpdJrp6enjKiORSPChD32Ic845h4985COsrq4ed73uvfdeBgYG+OAHP9j03ze/+U0GBgb48z//8+O+Th999NE7dqv+0LjyyivJZDLceeedkf1XXHEFe/fuZX5+fkev10cffXSPx4MumZ2djU1zbxch6uPxgT5x+TFCIpHgpS99KeVymX//93/v6Jzl5eWmbW1tDYAnPelJPOtZz+ILX/hC03lf+MIXyOfzvOAFL9jRe+ijjz4eG+yU/lheXm467o//+I856aSTuPLKK2k0GgB88pOf5B//8R/58Ic/zMzMzI7eSx999PHY4UTqkhtuuIH//t//e2R72tOexp49exgfH9/pW+njMUA/VezHDOeddx4A99xzT9tjjx07xkknndS0/4orruBrX/saAK94xSv4rd/6Le666y7OOussAGq1Gn/xF3/Bi170IrLZ7A7Wvo8++ngssRP6w4dCocCnP/1prrjiCt7znvfwq7/6q/zn//yfeeELX9hPV+2jjycgTpQueeELXxj5/aUvfYnvf//7XHfddZx//vld17OP3Yc+cfkxg6zOsb6+3vbYTCbD3/7t3zbtn5iYCL7/8i//Mm984xv5whe+wLve9S4A/uEf/oHl5eW+wdFHH08w7IT+AHje857XtO+nf/qn+a3f+i2uu+46/vIv/5JMJsMnP/nJ46twH330sStxInWJ4I477uDVr341L3jBC3jrW9/aW0X72HXoE5cfM5RKJQDy+XzbYxOJBJdffnnLYwqFAs9//vO58cYbA+LyhS98gX379vHc5z73+CvcRx997BrstP5w8f73v5+//uu/5tZbb+XGG29kcnKyp3r20UcfuxsnWpesra3xohe9iH379vFnf/ZnDAwM9FTPPnYf+nNcfsxw++23A3Dw4MEdK/MVr3gF9957L9/85jdZX1/nb/7mb3jpS1/Knj395tVHH08knAj9ofGDH/yApaUlAG677bYTco0++ujjsceJ1iWvfOUrmZ+f5ytf+QojIyMn5Bp9PDboR1x+jNBoNLjxxhvJZrM8+9nP3rFyf+ZnfoaTTjqJL3zhC1x66aWUy2Ve/vKX71j5ffTRx2OPE6U/BMeOHeNVr3oV55xzDs985jP5oz/6I37xF3+x7ZKrffTRx+MLJ1qXvOc97+ErX/kKX/7yl4O5t308cdAnLj8maDQavOENb+DOO+/kLW95y456IJLJJC996Uu58cYbufPOOzn//PN5ylOesmPl99FHH48tTqT+EPzu7/4uDzzwAN/61rc488wzuemmm7jyyiv5wQ9+QDqd3vHr9dFHH48+TrQu+frXv85b3/pWfv/3f79pon4fTwz0icvjBB/5yEcoFovB+wz+9m//liNHjgDw+te/ntHR0eDY1dVVPv/5zwNQLpeDt9Xec889/Mqv/EowF6Ud6vV6UI6LX/zFX2R4eDj4/YpXvIIPfehD/Mu//Ev/hVJ99LHL8Fjoj27wz//8z3zsYx/j2muv5WlPexoAn/3sZ3nOc57D2972Nv7oj/5ox6/ZRx99dI/drkte+tKXctJJJ3HGGWc02S/Pe97zmJqa2vFr9vEoY7uPxwVOPfXUbcC73XfffcFxP/ETPxH5L5fLbZ9xxhnbv/Zrv7b9j//4jx1f78orr4y9nntNwbnnnru9Z8+e7SNHjuzAHffRRx87hcdCfwwPD8f+D2y/7nWv297e3t5eW1vbPvXUU7ef9rSnbddqtchxb37zm7f37NmzffPNN3d3w3300ccJwW7WJfI7bvuXf/mXXm65j12Gge3t7e0TxIn6+DHDU5/6VMbGxrjpppse66r00UcfffTRRx999PEEQ3/Zpz52BN/73ve49dZbecUrXvFYV6WPPvroo48++uijjycg+hGXPo4Lt99+O7fccgv/9b/+V5aXl7n33nvJZDKPdbX66KOPPvroo48++niCoR9x6eO48Jd/+Ze86lWvolar8ed//ud90tJHH3300UcfffTRxwlBP+LSRx999NFHH3300Ucffex6nLCIy0c/+lFmZ2fJZDJceumlfOc73zlRl+qjjz6egOjrkD766ON40dcjffTxxMIJIS5f/OIXufrqq7n22mv5/ve/zwUXXMAVV1zB0tLSibhcH3308QRDX4f00Ucfx4u+HumjjyceTkiq2KWXXsrTn/50PvKRjwCwtbXFgQMHeP3rX89b3vKWludubW0xPz9PPp9nYGBgp6vWRx+PGba3t1lfX2dmZoY9e9r7DCqVCpubm7H/Dw4OPmHnFB2PDpHj+3qkjycautUh0FqPPJF1CPRtkT768OHxboskd7rAzc1NbrnlFq655ppg3549e7j88su5+eabm46vVqtUq9Xg94MPPsg555yz09Xqo49dg8OHD7N///6Wx1QqFU4aGqLU4pjp6Wnuu+++J5zh0a0Ogb4e6ePHC53oEGivR56oOgT6tkgffbTD49UW2XHisry8TKPRYGpqKrJ/amqKu+66q+n466+/nne+851N+598+G/57trzuWX/2byf/5e/e+CF8MUUnAPMwMg5iwCs3TwFGRh40jGeP/m/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", "text/plain": [ "
" ] @@ -483,12 +485,12 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAz4AAADcCAYAAACxr3TMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABCC0lEQVR4nO3de3wU9b3/8dfmtkkgG4hAQiAQUAsiCAKSg1csKYFaf9Ja6wXLpYqtJd5oq9JjocI5DXq84IWKVRA9glhb7/agiEZ/1igC8lNa4QiiRCHBVGFJQm6b+f2xl2STSbILu9nZ4f18POYBmZ2d+c5k953Pd2f2Ow7DMAxERERERERsLCHWDRAREREREYk2dXxERERERMT21PERERERERHbU8dHRERERERsTx0fERERERGxPXV8RERERETE9tTxERERERER21PHR0REREREbE8dHxERERERsT11fERERERExPbU8TkOVFdXs2jRIqZOnUpWVhYOh4PVq1ebLjtp0iQcDgcOh4OEhARcLhfDhg3jpz/9KRs2bAh5m7Nnzw6sp+2UmpoaoT0TkWiLVX707Nmzw8cdDgfFxcXh7oqIxIhyRKwiKdYNkOirqqpi8eLFDBo0iNGjR1NaWtrp8gMHDqSkpASAmpoadu3axbPPPsuTTz7JT37yE5588kmSk5O73K7T6eTRRx9tNz8xMfGo9kNEul+s8kNE7EM5Ilahjs9xoH///uzfv5+cnBw2b97MGWec0enymZmZXHnllUHzli5dyvXXX88f//hH8vPzueOOO7rcblJSUrv1iEh8iVV+iIh9KEfEKnSp23HA6XSSk5NzTOtITEzk/vvvZ8SIETz44IMcOnTomNv12Wef4XA4uPfee9s99u677+JwOHjqqaeOeTsicvSsmh+tzZo1i9TUVD755JOg+UVFRfTu3Zt9+/ZFdHsiEp54yJH8/PwOL9Hv6gyVxA91fCRkiYmJXH755dTW1vLOO++E9Jyqqqp2k9vtBmDo0KGcddZZrFmzpt3z1qxZQ0ZGBhdddFFE90FEYiNS+VFVVdVuufvuu4++ffsya9YsPB4PAA8//DCvvfYaDzzwALm5uRHdFxGJjWjmyLJly/jv//7voGns2LEkJCRwwgknRHpXJEZ0qZuEZeTIkQDs3r27y2Vramro27dvu/lFRUWsX78egJkzZ/Lzn/+cHTt2MHz4cAAaGxv585//zI9+9CPS09Mj2HoRiaVI5IeZXr16sXLlSoqKili6dClXXHEFv/71r5k+fboutxWxmWjlyPTp04N+fuaZZ9i6dSuLFy9m1KhRYbdTrEkdHwmLf4SUw4cPd7lsamoqL730Urv5ffr0Cfz/Jz/5CTfccANr1qxhyZIlALz66qtUVVWpYBGxmUjkB8D3vve9dvOmTJnCz3/+cxYvXsxf/vIXUlNTefjhh4+twSJiOdHMEb9//vOf/OxnP+Oiiy7itttuO7qGiiWp4yNhqa6uBiAjI6PLZRMTEyksLOx0mV69enHhhReydu3aQMdnzZo1DBgwgO9+97vH3mARsYxI50dbd911Fy+88ALbtm1j7dq19OvX76jaKSLWFe0ccbvd/OhHP2LAgAE88cQTOByOo2qnWJO+4yNh2b59OwAnnXRSxNY5c+ZMPvvsM959910OHz7Miy++yOWXX05Cgl6eInYSjfxo7cMPP+TAgQMAfPzxx1HZhojEVrRzZPbs2ezbt4/nn38el8sVlW1I7OiMj4TM4/Gwdu1a0tPTOfvssyO23qlTp9K3b1/WrFlDQUEBtbW1/PSnP43Y+kUk9qKVH341NTXMmTOHESNGcOaZZ3LnnXfywx/+sMthc0UkfkQ7R5YuXcrzzz/Ps88+G/jesdiLOj4SEo/Hw/XXX88nn3zCrbfeGtFPQZKSkrj88stZu3Ytn3zyCaNGjeK0006L2PpFJLaimR9+t9xyC3v37uW9995j2LBhbNy4kVmzZvHhhx/idDojvj0R6V7RzpHXX3+d2267jX//939vN9CB2Ic6PseJBx98kIMHDwbuZ/HSSy/x5ZdfAnDdddeRmZkZWPbQoUM8+eSTANTW1gbumLx7924uu+yywHdxutLU1BRYT1s//OEP6dGjR+DnmTNncv/99/Pmm2/qpmQiFhOL/AjHG2+8wR//+EcWLVrE2LFjAXjssceYNGkSv/vd77jzzjsjvk0RCY/Vc+Tyyy+nb9++nHzyye1ql+9973tkZ2dHfJsSA4YcFwYPHmwAptOePXsCy5133nlBj/Xs2dM4+eSTjSuvvNJ47bXXQt7erFmzOtxe2236nXrqqUZCQoLx5ZdfRmCPRSRSYpEfPXr06PBxwJg3b55hGIbhdruNwYMHG2PHjjUaGxuDlrvpppuMhIQEo6ysLLwdFpGIs3KO+H/uaHrzzTePZpfFghyGYRhR6lOJhOX0008nKyuLjRs3xropIiIiImIzGjZLLGHz5s1s27aNmTNnxropIiIiImJDOuMjMbV9+3a2bNnC3XffTVVVFZ999hmpqamxbpaIiIiI2IzO+EhM/eUvf2HOnDk0Njby1FNPqdMjIiIiIlGhMz4iIiIiImJ7OuMjIiIiIiK2p46PiIiIiIjYnu1uYNrc3My+ffvIyMjA4XDEujkiEWMYBocPHyY3N5eEhK4/s6irq6OhoaHDx1NSUvSdqg4oR8SOws0Q6DxHlCEdU4aIXcV7LWK7js++ffvIy8uLdTNEoqa8vJyBAwd2ukxdXR1909Ko7mSZnJwc9uzZo8LFhHJE7CyUDIGuc0QZ0jFliNhdvNYituv4ZGRkeP9zSTn83QWVgOcb4FvgAFANuIE6oNH3b5Pv/02+qa0k35TW6t/UNv8mA4mtnuPxrfOI7/+1vm0dCXE7Gb515wJZkNgPBgCTgBHABY2cMugjCthEAe8zjB2M+/wT2A28BXwFbIXGKtjp9u75fuCwb2pqs8XevmkAMAjol+PbzkDgXGAI7B6fy2cMYSOT2clw3v7mHJrKXFCGd9oLHGj0Heu9vn39ps1++497R8fA3yr/sfYf3wzfMU5tNb81j28bja32sLNt+V/6/t+hC+gJ9AcGQ6YDTge+A1wESSPcXJj1MkPYw2Q2cjKfkv2eG/4JfIT33y/h86+gCvjC14pv22w9iZbf7Im+Y35qb3D0wbu9E4EzwDgd/l/WdyjjTHYwnNeYQuUXqXhOG9HyGu9EQ0MD1cACkyOF78iUVFTQ0NCgosVE4BhPKYfXmvD+Rj/D+1ttmxnQ8nr1/3ZdeF9L/SCzn/dNdQEwFJxTv6F/ZiWn8RE57Gcwe+nL12TxL1Lwfip2iEyOkM6nnMSXDOAdzqV883fgL0Ap8Al43+wHfFMd8DUtmebXNlNGAyPhWuBSKD79TqaxnrM/2gJ/x/s6LoPGSvh/bm9SenxrSmzz/9a+9W31W9q/4/zv4AJgcAJkTQaGARfD/47NYwW/4PFvZtJ0jwueAA595WvIN7S8l48Q/C5KbrXm3r7/DwNy4WSHN7vOBs4A14hKRjk/oj8VDGMHmRxiMF+QiIcUGmgghWp6UkF/9pPDu5zJLs/JfPvHXO97+6+Ap9bXpm9btauuTbv8e+tv22DgZBifD1PhrN9sYDIbmf/NQzg+BP4H+Bz4EL6q8r66Gn3H2H98zY53HS05bpZwGUCe7zedf7LvP1OBsXBv3yv4fd7akDIEOs8RZUjn/Mf4r0DhUqi6tgc3cS+vHvoe9X/NgteB/wU+bcT7Ht5LS67436+DABcMBbKAbLwv/zqgHm99cwjYB9536z7f5H9HQnAe+dd7wLfMbrw10eFWy2bg3eAwSBwA5wOnQ7/b9nAu77Dyo2J4Hv56t7cpI4ETrwBugafz/w+vM5lnv/kRTR+44HG8L+xPGvEWJeV43z/f+rZrlldpeP8W9yPw93hQFpwCXAWO02uY1e8JCnifK957DtbA357w7vXXwILvAlfA3Zdcy0Ym8/cXvgcfA+t9banxZ6Y/rcCbIS7gROiB9+9+JnACLXH/L9+x3us79uz2HfO9tGSB/+/AYN8+ZPi2sd+3vc9oyQz/vub59nWit9y7CDgfzirawPXcz9Sn34aF8GgFjAFGpEP6Oqg6rwd3cDMfcjofvHce/F+8fxs+AOrdvvZ969v2EVqy1Cyv+vv2f7S3Lb7s5FIYfUoZkyjleh6gz0s1fDMTXmuGn0Pc1iK26/gETiknuyDBBQ7wvvAagRqgGe8v3kHL7jfh/dPiD522kmkptpPxvljbTv5l/PzrSqDlheZo81hH20kD0mkJgAxwuLyrSvE1I6ORRFdPUkgljWR6kogrA++b1kmgH9bo8K6hxre2xlaT2RZ7eLeGK8H3QErLAz1dCfQgCSepJJGOo9EF6S7v9pJ8uxr4M9zDN6OuzX7TxbH2t8rfwfEf3/RWx94/v7Um3/b8pUPr37HZtpJ9/7Zef2DvweFo2f8e4MiAZFcaTpz0IJEMHLh6+J6a0rL/GXgjJp3gcq318faXaz3w/m5cDnAk0vK77QGGC3q6EkklhRRSSaAnjgzvPodz2URPzMPGdm/8CAvKERrxHkn/bxWCMwPMX6+t3ruJvkXSweFqIsFVQzJppJBKKimkkUwPkkihGYBGkoFknDhJIY0EekIP33stUAX739npeF/rqb4HWw/U2Tq7/HniW09PcLpS6UEiLv8LJYVAbvSg5Z0ELe8k//9bq/e14Ajt392pvqknkOEAVzKB7fd0JZBCqjdLnP68dvv2qfW7x6B9x6f1sfYXdC5IdLQ83BMcrlqSnD1IJo1UnKSRQjpJJOEghWaSSaKZZFJJ8WVbDxyeDEh1eY+Hw7/NHr49bd3ZMQjOltZ/I9K9bUpyQSokuXqQihNXEzh6+I51MpDg3eMetKRn679MbY+3/y9KR2ma2rJlXIm+bfhejqmuFCC8DAHzHFGGdM5/jHsArlSodzlIJg2H4YI0V6vPSv0fkPYguOPje6/i+9vvf9kn4X1j+nvIQVca+V9J/nckBOeR/31SCzT4fm7y/R+C/zr5sisJcEKCK4Nk0rxZ4fSuMcnfyhTv4mmuZFJIa6kNgvbR37Y6WnoTZnnlb0OrDE1wBV7HjoxEUlzeusflex/5E8AJuJK8y6W6nCTRo6VGSfQfkiOt9t//runZcrwdvmX9x9tDSykRWIf/Oc205K//WCfT8tfd3/Fx+34nqbRkhn9f/bWH7/fs9M5KcvUgnSRcad7fsf+34nJAeg/v6ynFl1f0cLX8CQpqn/937P8dtK2F/HmVTqvUCPzO6QmJrh44SfXWPOnevw3+NcZrLaLsErEx/58QEZGjpRwRkWNhpQxRx0fExvyfiYuIHC3liIgcCytliDo+IjbmP1vfVkcXGYqItGWWI8oQEQmVlWoRdXxEbKyjT1kMk3kiImbMckQZIiKhslItoo6PiI1ZKWxEJD6p4yMix8JKtUhodzATkbjkP73cdgr3E4+3336bCy+8kNzcXBwOB88//3yXzyktLWXs2LE4nU5OOukkVq9e3W6Z5cuXk5+fT2pqKgUFBWzatCnMlolItJnliD41FZFQRaoWiQR1fERszGzg9aP5kmFNTQ2jR49m+fLlIS2/Z88eLrjgAs4//3y2bdvGjTfeyNVXX82rr74aWObpp59m/vz5LFq0iK1btzJ69GiKioo4cOBAmK0TkWiKRIaIyPErUrVIJOhDGxEb89++0mx+OKZNm8a0adNCXn7FihUMGTKEu+++G4BTTjmFd955h3vvvZeioiIA7rnnHubOncucOXMCz3nllVdYtWoVt956a5gtFJFoMcsRFQ8iEqpI1SKRELUzPt988w0zZszA5XLRq1cvrrrqKqqrq0N6rmEYTJs2LeRLakTEnH/s/LaT/0Zibrc7aKqvr4/IdsvKyigsLAyaV1RURFlZGeC9m/OWLVuClklISKCwsDCwDChHRKzALEe65x7rkaEcEYmtrmqR7hS1js+MGTP4xz/+wYYNG3j55Zd5++23ueaaa0J67rJly8K+s7SItNfV6eW8vDwyMzMDU0lJSUS2W1FRQXZ2dtC87Oxs3G43R44coaqqCo/HY7pMRUVF4GfliEjsWeUSlaOlHBGJLdtf6vbJJ5+wfv16PvjgA8aPHw/AAw88wPe//33uuusucnNzO3zutm3buPvuu9m8eTP9+/ePRvNEjhsdjZ3vf+OXl5fjcrkC851OZ3c0KyTKERFrMMuReLnUTTkiEntd1SLdKSpnfMrKyujVq1cgZAAKCwtJSEjg/fff7/B5tbW1XHHFFSxfvpycnJxoNE3kuNLVpywulytoilTHJycnh8rKyqB5lZWVuFwu0tLS6NOnD4mJiabL+N/7yhERa7DKJ7VHQzkiEnu2P+NTUVFBv379gjeUlERWVlbQZSxt3XTTTZx55plcdNFFIW+rvr4+6HsJbrc7/AaL2FSqE9JMrtJoNIDIfJ3H1MSJE/nb3/4WNG/Dhg1MnDgRgJSUFMaNG8fGjRuZPn06AM3NzWzcuJHi4mJAOSJiFWY5Eu0MiZTuyhFliEjHYlWLmAnrjM+tt96Kw+HodNqxY8dRNeTFF1/kjTfeYNmyZWE9r6SkJOg7Cnl5eUe1fRE7Sk7seApHdXU127ZtY9u2bYB3uOpt27axd+9eABYsWMDMmTMDy//iF7/gs88+4+abb2bHjh388Y9/5M9//jM33XRTIEc2bdrEgw8+GMiOxMREvvrqKxYsWKAcEbGQSGRIpFmtHlGGiHQsUrVIJIR1xudXv/oVs2fP7nSZoUOHkpOT0+5eHE1NTXzzzTcdnjJ+44032L17N7169Qqaf/HFF3POOedQWlpq+rwFCxYwf/78wM9ut1uBI+KT5oQ0k483GpuB2tDXs3nzZs4///zAz/733KxZs1i9ejX79+8PdIIAhgwZwiuvvMJNN93Efffdx8CBA3n00UcpKipi7NixgRxZs2YNK1eupKqqilNOOYXf/va3jB49WjkiYiFmORJuhkSa1eoRZYhIxyJVi0RCWB2fvn370rdv3y6XmzhxIgcPHmTLli2MGzcO8AZJc3MzBQUFps+59dZbufrqq4PmjRo1invvvZcLL7yww205nU5LfSFbxFKcmJ/XbQ5vNZMmTcIwjA4fX716telzPvzww3bzW+fIkiVLWLJkiek6lSMiFmGWI2FmSKRZrR5Rhoh0IkK1SCRE5Ts+p5xyClOnTmXu3LmsWLGCxsZGiouLueyyywIjqHz11VdMnjyZJ554ggkTJpCTk2P66cugQYMYMmRINJopYn9JWCZswqUcEbEIsxyJgwwB5YiIJVioFonafXzWrFnD8OHDmTx5Mt///vc5++yz+dOf/hR4vLGxkZ07d1JbG8Nz5SJ2l4L3k5a2U0osGxU65YiIBZjlyFFkyFdffcWVV17JCSecQFpaGqNGjWLz5s0RbaoZ5YhIjFmoFonaENpZWVmsXbu2w8fz8/M7vXQG6PJxEelCKmD25UFPdzfk6ChHRCzALEfCzJBvv/2Ws846i/PPP5//+Z//oW/fvnz66af07t07Uq3skHJEJMYsVIvEyz3IRORoJGIeNiIioYpAjtxxxx3k5eXx2GOPBebpsjGR44SFapGoXeomIhbgxPtJS9tJ38EVkVCZ5UiYGfLiiy8yfvx4LrnkEvr168fpp5/OI488EvGmiogFWagWUcdHxM7Mrqn1TyIioegkQ9xud9DU+iaerX322Wc89NBDnHzyybz66qtce+21XH/99Tz++OPdsw8iEjsWqkXU8RGxs6ROJhGRUHSSIXl5eUE37iwpKTFdRXNzM2PHjuUPf/gDp59+Otdcc01gpDURsTkL1SIqf0TsLAVINpmvjzxEJFRmOeLLkPLyclwuV2B2R/ey6d+/PyNGjAiad8opp/DXv/41gg0VEUuyUC2ijo+InaViHjYW+ZKhiMQBsxzxZYjL5Qrq+HTkrLPOYufOnUHz/vd//5fBgwdHpo0iYl0WqkXU8RGxs45GUomTmw+KiAWY5UiYGXLTTTdx5pln8oc//IGf/OQnbNq0iT/96U9B99MREZuyUC2ijo+InXV0gzBd6iYioTLLkTAz5IwzzuC5555jwYIFLF68mCFDhrBs2TJmzJgRqVaKiFVZqBZRx0fEzjoKG0d3N0RE4pZZjhxFhvzgBz/gBz/4QSRaJCLxxEK1iDo+InbW0agputRNREJlliPKEBEJlYVqEV3wImJnKZiPm2/2yYuIiBmzHFGGiEioIlCLlJSUcMYZZ5CRkUG/fv2YPn16uwFTQqGOj4idmd0p2T+JiIRCGSIixyICtchbb73FvHnzeO+999iwYQONjY1MmTKFmpqasJqiS91E7KyjkVQ0nLWIhMosR5QhIhKqCNQi69evD/p59erV9OvXjy1btnDuueeGvB51fETszIk+mRWRY6McEZFj0UWGuN3u4MWdzg5vhux36NAhALKyssJqii51E7Ezs2tq/ZOISCiUISJyLLqoRfLy8sjMzAxMJSUlna6uubmZG2+8kbPOOouRI0eG1RSd8RGxs45GUtE7X0RCZZYjyhARCVUXtUh5eTkulyswu6uzPfPmzWP79u288847R9UUEbEr/0gqbWkoWhEJlVmOKENEJFRd1CIulyuo49OZ4uJiXn75Zd5++20GDhwYdlPU8RGxs45GTTG6uyEiErfMckQZIiKhikAtYhgG1113Hc899xylpaUMGTLkqJqijo+InWlUNxE5VhrVTUSORQRqkXnz5rF27VpeeOEFMjIyqKioACAzM5O0tLSQ16OOj4iddTSSii5TEZFQmeWIMkREQhWBWuShhx4CYNKkSUHzH3vsMWbPnh3yeqI2qts333zDjBkzcLlc9OrVi6uuuorq6upOl7/uuusYNmwYaWlpDBo0iOuvvz4wXJ2IHIU4H9VNOSJiAXGcIaAcEYm5CNQihmGYTuF0eiCKHZ8ZM2bwj3/8gw0bNgS+hHTNNdd0uPy+ffvYt28fd911F9u3b2f16tWsX7+eq666KlpNFLG/pE6mOKAcEbGAOM4QUI6IxJyFapGodHw++eQT1q9fz6OPPkpBQQFnn302DzzwAOvWrWPfvn2mzxk5ciR//etfufDCCznxxBP57ne/y3/+53/y0ksv0dTUFI1mitiffySVtlNK+Ktavnw5+fn5pKamUlBQwKZNmzpcdtKkSTgcjnbTBRdcEFhm9uzZ7R6fOnVq4HHliIhFmOXIUWRILChHRCwggrXIsYpKx6esrIxevXoxfvz4wLzCwkISEhJ4//33Q17PoUOHcLlcJCV13CWsr6/H7XYHTSLik9rJFIann36a+fPns2jRIrZu3cro0aMpKiriwIEDpss/++yz7N+/PzBt376dxMRELrnkkqDlpk6dGrTcU089FXhMOSJiERHIkFjprhxRhoh0IkK1SCREpeNTUVFBv379guYlJSWRlZUVGIWhK1VVVSxZsqTT09EAJSUlQXd7zcvLO+p2i9hOYidTGO655x7mzp3LnDlzGDFiBCtWrCA9PZ1Vq1aZLp+VlUVOTk5g2rBhA+np6e06Pk6nM2i53r17Bx5TjohYRAQyJFa6K0eUISKdiFAtEglhdXxuvfVW08tXWk87duw45ka53W4uuOACRowYwe9///tOl12wYAGHDh0KTOXl5ce8fRHb8I+k0nbyfaGw7SeU9fX17VbR0NDAli1bKCwsDMxLSEigsLCQsrKykJqxcuVKLrvsMnr06BHIkccff5wXXnhBOSJidWY5EuPBDaxWjyhDRDrRRS3SncL6WtGvfvWrLkdPGDp0KDk5Oe0ugWlqauKbb74hJyen0+cfPnyYqVOnkpGRwXPPPUdycnKnyzudTpzOOBpeRqQ7dTRqSqP3n7afSi5atKjdH/eqqio8Hg/Z2dlB87Ozs0MqLDZt2sT27dtZuXIl0JIjr7zyCmlpaQwcOJC9e/eybNky0tPTeeqpp5QjIlZiliONsWhIC6vVI8oQkU50UYt0p7A6Pn379qVv375dLjdx4kQOHjzIli1bGDduHABvvPEGzc3NFBQUdPg8t9tNUVERTqeTF198kdTUOLmIWMSqOho1xTevvLwcl8sVmB2NP9wrV65k1KhRTJgwAWjJkeHDhwct9/3vf58TTzyRiooKTj31VOWIiFWY5UiMR3VTPSISR7qoRbpTVL7jc8oppzB16lTmzp3Lpk2b+Pvf/05xcTGXXXYZubm5AHz11VcMHz48MDKU2+1mypQp1NTUsHLlStxuNxUVFVRUVODxeKLRTBH762IkFZfLFTSZdXz69OlDYmIilZWVQfMrKyu7/MS0pqaGdevWhTQM7NChQ+nTpw+7du0ClCMilhHHo7opR0QswEKjukWtr7VmzRqKi4uZPHkyCQkJXHzxxdx///2BxxsbG9m5cye1tbUAbN26NTDCykknnRS0rj179pCfnx+tporYV0ejpoRxejklJYVx48axceNGpk+fDkBzczMbN26kuLi40+c+88wz1NfXc+WVV3a5nS+//JJ//etf9O/fPzBPOSJiAWY5EuNL3cKhHBGJsQjUIpEStY5PVlYWa9eu7fDx/Px8DMMI/Dxp0qSgn0UkAiJ0enn+/PnMmjWL8ePHM2HCBJYtW0ZNTQ1z5swBYObMmQwYMICSkpKg561cuZLp06dzwgknBM2vrq7m9ttv5+KLLyYnJ4fdu3dz8803c9JJJ1FUVBRYTjkiYgEWvNQtHMoRkRiz0KVucRRdIhKuphRoMvnaTlP7wds6demll/L111+zcOFCKioqGDNmDOvXrw8MeLB3714SEoKvnN25cyfvvPMOr732Wrv1JSYm8tFHH/H4449z8OBBcnNzmTJlCkuWLNEXhEUsxixHws0QETl+RaoWiQR1fERsrN7poN7pMJlvAOF9ollcXNzhpW2lpaXt5g0bNqzDT03T0tJ49dVXw9q+iMSGWY4cTYaIyPEpkrXIsVLHR8TGPElJeJLah40nySCuLtIXkZgxyxFliIiEykq1iDo+IjbWmJhCQ2L7sGlMVNEiIqExyxFliIiEykq1iDo+IjZWTwopJqPW19MM1HR/g0Qk7pjliDJEREJlpVpEHR8RG/OQiMckbDy0/+RFRMSMWY4oQ0QkVFaqRdTxEbGxBlJoMAmbBppj0BoRiUdmOaIMEZFQWakWUcdHxMYacFJvkbARkfhkliPKEBEJlZVqEXV8RGzMQwIeEk3mi4iExixHlCEiEior1SLq+IjYWD0pJJuETb3KFhEJkVmOKENEJFRWqkXU8RGxsUacNJiETaOKFhEJkVmOKENEJFRWqkXU8RGxMe9IKtY4vSwi8cksR5QhIhIqK9Ui6viI2Fg9ySSZvM3raYpBa0QkHpnliDJEREJlpVpEHR8RG/OeXm7/Nm80+eRFRMSMWY4oQ0QkVFaqRdTxEbGxjk8vGzFojYjEI/NL3ZQhIhIaK9Ui6viI2Fg9KSSSbDK//Xj6IiJmzHJEGSIiobJSLaLkErEx792SzScRkVBEI0OWLl2Kw+HgxhtvjEwjRcSyrFSL6IyPiI15SKTJ9PSy7rouIqExy5FjyZAPPviAhx9+mNNOO+1YmyYiccBKtYjO+IjYmPcTFafJpDM+IhIa8xw5ugyprq5mxowZPPLII/Tu3TvCLRURK7JSLaKOj4iNWen0sojEp84yxO12B0319fWdrmvevHlccMEFFBYWdkfTRcQCrFSLdEvHZ/ny5eTn55OamkpBQQGbNm3qdPlnnnmG4cOHk5qayqhRo/jb3/7WHc0UsR3/6eW2k9noKlamDBGJHbMc8WdIXl4emZmZgamkpKTD9axbt46tW7d2ukw0KUdEYsNKtUjUOz5PP/008+fPZ9GiRWzdupXRo0dTVFTEgQMHTJd/9913ufzyy7nqqqv48MMPmT59OtOnT2f79u3RbqqI7ZifWvZO8UIZIhJbnWVIeXk5hw4dCkwLFiwwXUd5eTk33HADa9asITU1tTubDyhHRGLJSrVI1Ds+99xzD3PnzmXOnDmMGDGCFStWkJ6ezqpVq0yXv++++5g6dSq/+c1vOOWUU1iyZAljx47lwQcfjHZTRWynnmTqSTGZ2g8raVXKEJHYMs8Rb4a4XK6gyek0L2S2bNnCgQMHGDt2LElJSSQlJfHWW29x//33k5SUhMfjieo+KEdEYsdKtUhUOz4NDQ1s2bIl6FrehIQECgsLKSsrM31OWVlZu2t/i4qKOly+vr6+3TXGIuLlIanDKR50R4aAckSkM5HIkMmTJ/Pxxx+zbdu2wDR+/HhmzJjBtm3bSEyM3iUvqkVEYstKtUhUOz5VVVV4PB6ys7OD5mdnZ1NRUWH6nIqKirCWLykpCbq+OC8vLzKNF7GBxg6+TNgYJ4MbdEeGgHJEpDNmORJuhmRkZDBy5MigqUePHpxwwgmMHDkySi33Ui0iEltWqkXiflS3BQsWBF1fXF5eHusmiViGlU4vW5lyRKRjnV3qJl7KEJGOWakWiWrHp0+fPiQmJlJZWRk0v7KykpycHNPn5OTkhLW80+lsd42xiHhF8vRyOCMirV69GofDETS1/UKzYRgsXLiQ/v37k5aWRmFhIZ9++mnQMt2RIaAcEelMtC5RKS0tZdmyZcfewC6oFhGJrePmUreUlBTGjRvHxo0bA/Oam5vZuHEjEydONH3OxIkTg5YH2LBhQ4fLi0jHInV6OdwRkcD7pef9+/cHpi+++CLo8TvvvJP777+fFStW8P7779OjRw+Kioqoq6sLLKMMEYm9SFzqFkvKEZHYstKlblHvas2fP59Zs2Yxfvx4JkyYwLJly6ipqWHOnDkAzJw5kwEDBgTG9b/hhhs477zzuPvuu7ngggtYt24dmzdv5k9/+lO0mypiO/WkYJgMF9lAc1jraT0iEsCKFSt45ZVXWLVqFbfeeqvpcxwOR4efjhqGwbJly7jtttu46KKLAHjiiSfIzs7m+eef57LLLgssqwwRiS2zHAk3Q2JNOSISO5GqRSIh6h2fSy+9lK+//pqFCxdSUVHBmDFjWL9+feBLg3v37iUhoeXE05lnnsnatWu57bbb+O1vf8vJJ5/M888/H/UvP4rYkaeDG4SFc9Mw/4hIre/P0dWISADV1dUMHjyY5uZmxo4dyx/+8AdOPfVUAPbs2UNFRUXQqEmZmZkUFBRQVlYW1PFRhojEllmOxNtNkJUjIrETiVokUrrl4rri4mKKi4tNHystLW0375JLLuGSSy6JcqtE7M97Grn9qeRGvPfMaDvkqtPpbHcfjs5GRNqxY4fpdocNG8aqVas47bTTOHToEHfddRdnnnkm//jHPxg4cGBgZKRQR01ShojEjlmO+DMknihHRGKjq1qkO8X9qG4i0jHvqClOk8kbQHl5eUFDsPov8zhWEydOZObMmYwZM4bzzjuPZ599lr59+/Lwww9HZP0i0n3McyR+vuMjIrHVVS3SneLjLoYiclQ8JJLQyenl8vLyoNGHzO66fjQjIrWVnJzM6aefzq5duwACz6usrKR///5B6xwzZkxI6xSR7mGWI/F2qZuIxE5XtUh30hkfERszHzc/JfApS9vhV806PkczIlJbHo+Hjz/+ONDJGTJkCDk5OUHrdLvdvP/++xo1ScRiOssQEZGudFWLdCed8RGxseYOxslvDvOtH+6ISIsXL+bf/u3fOOmkkzh48CD/9V//xRdffMHVV18NeEd8u/HGG/mP//gPTj75ZIYMGcLvfvc7cnNzmT59+rHttIhElFmOhJshInL8ilQtEglKLhEbayCZZpNPVJpoDGs94Y6I9O233zJ37lwqKiro3bs348aN491332XEiBGBZW6++WZqamq45pprOHjwIGeffTbr169vd6NTEYktsxwJN0NE5PgVqVokEtTxEbGxepx4TMbOb6Ip7HWFMyLSvffey7333tvp+hwOB4sXL2bx4sVht0VEuo9ZjhxNhojI8SmStcixUsdHxMaaOxg7v1lfTBaREJnliDJEREJlpVpEgxuI2FgDKR1OIiKhUIaIyLGIVC3y9ttvc+GFF5Kbm4vD4eD5558Puy3q+IjYmJXGzheR+KT7+IjIsYhULVJTU8Po0aNZvnz5UbdFl7qJ2Jj31LI1xs4XkfhkliPKEBEJVaRqkWnTpjFt2rRjaos6PiI21kAKCSafqJiNriIiYsYsR5QhIhIqK9Ui6viI2Jg3bNqPpNJMQwxaIyLxyCxHlCEiEqquahG32x003+l0mt5QPRL0HR8RG/P4RlIxm0REQqEMEZFj0VUtkpeXR2ZmZmDy3ww9GnTGR8TGGhpScDS0P5VsmMwTETFjliPKEBEJVVe1SHl5OS6XKzA/Wmd7QB0fEVtrqEvBkdI+QIy6+hi0RkTikVmOKENEJFRd1SIulyuo4xNN6viI2JinKRFHU/tLUgyTeSIiZsxyRBkiIqGKVC1SXV3Nrl27Aj/v2bOHbdu2kZWVxaBBg0Jahzo+IjbWWO+EOpNTxvXRO40sIvZimiPKEBEJUaRqkc2bN3P++ecHfp4/fz4As2bNYvXq1SGtQx0fETurS4Fkk2vx63R9voiEyCxHlCEiEqoI1SKTJk3CMIxjaoo6PiJ25nFAk8N8vohIKMxyRBkiIqGyUC2ijo+IndVh/i6v6+6GiEjcMssRZYiIhMpCtUi33Mdn+fLl5Ofnk5qaSkFBAZs2bepw2UceeYRzzjmH3r1707t3bwoLCztdXkQ6UQccMZnirGhRhojEkFmOxFmGgHJEJGYsVItEvePz9NNPM3/+fBYtWsTWrVsZPXo0RUVFHDhwwHT50tJSLr/8ct58803KysrIy8tjypQpfPXVV9Fuqoj9eDqZ4oQyRCTG4jxDQDkiElMWqkWi3vG55557mDt3LnPmzGHEiBGsWLGC9PR0Vq1aZbr8mjVr+OUvf8mYMWMYPnw4jz76KM3NzWzcuDHaTRWxn7pOpjihDBGJsTjPEFCOiMSUhWqRqHZ8Ghoa2LJlC4WFhS0bTEigsLCQsrKykNZRW1tLY2MjWVlZpo/X19fjdruDJhHxqcc8aOLk3oPdkSGgHBHplFmOxEmGgGoRkZizUC0S1Y5PVVUVHo+H7OzsoPnZ2dlUVFSEtI5bbrmF3NzcoMBqraSkhMzMzMCUl5d3zO0WsY2mTqY40B0ZAsoRkU7FcYaAahGRmLNQLdItgxscraVLl7Ju3Tqee+45UlNTTZdZsGABhw4dCkzl5eXd3EoRCzP7MqF/Og6EkiGgHBHp1HGcIaBaROSYWagWiepw1n369CExMZHKysqg+ZWVleTk5HT63LvuuoulS5fy+uuvc9ppp3W4nNPpxOnUHaRFTDUAiR3MjwPdkSGgHBHplFmOxEmGgGoRkZizUC0S1TM+KSkpjBs3LujLgP4vB06cOLHD5915550sWbKE9evXM378+Gg2UcTeLHR6+WgoQ0QsII4zBJQjIjFnoVok6jcwnT9/PrNmzWL8+PFMmDCBZcuWUVNTw5w5cwCYOXMmAwYMoKSkBIA77riDhQsXsnbtWvLz8wPX3/bs2ZOePXtGu7ki9lIHmN0YOY5GZFKGiMSYWY7EUYaAckQkpixUi0S943PppZfy9ddfs3DhQioqKhgzZgzr168PfMlw7969JCS0nHh66KGHaGho4Mc//nHQehYtWsTvf//7aDdXxF7qMQ+bOBqRSRkiEmNmORJHGQLKEZGYslAtEvWOD0BxcTHFxcWmj5WWlgb9/Pnnn0e/QSLHi0bMr6tt7O6GHBtliEgMmeVInGUIKEdEYsZCtYilR3UTkWNU38kUpuXLl5Ofn09qaioFBQVs2rSpw2UfeeQRzjnnHHr37k3v3r0pLCxst/zs2bNxOBxB09SpU8NvmIhEV4QyRESOUxGsRY6VOj4idhahm4Y9/fTTzJ8/n0WLFrF161ZGjx5NUVERBw4cMF2+tLSUyy+/nDfffJOysjLy8vKYMmUKX331VdByU6dOZf/+/YHpqaeeCn8fRSS64vwGpiISY8fLDUxFJMYaO5nCcM899zB37lzmzJnDiBEjWLFiBenp6axatcp0+TVr1vDLX/6SMWPGMHz4cB599NHAKEqtOZ1OcnJyAlPv3r3D30cRia4IZIiIHMciVItEgjo+InbWgPmp5TDGzm9oaGDLli1BdyxPSEigsLCQsrKykNZRW1tLY2MjWVlZQfNLS0vp168fw4YN49prr+Vf//pX6A0Tke5hliNh3n+jpKSEM844g4yMDPr168f06dPZuXNnxJsqIhYUgVokUtTxEbGzLu6W7Ha7g6b6+vbnnauqqvB4PIHRj/yys7MDQ7x25ZZbbiE3Nzeo8zR16lSeeOIJNm7cyB133MFbb73FtGnT8Hg8R7OnIhItEbjj+ltvvcW8efN477332LBhA42NjUyZMoWampqIN1dELKaLWqQ7dcuobiISIx7fZDYfyMvLC5odjaFaly5dyrp16ygtLSU1NTUw/7LLLgv8f9SoUZx22mmceOKJlJaWMnny5Ii2QUSOgVmOhPn5xPr164N+Xr16Nf369WPLli2ce+65x9Q8EbG4LmqR7qSOj4id1QPNJvN919WWl5fjcrkCs51OZ7tF+/TpQ2JiIpWVlUHzKysrycnJ6XTzd911F0uXLuX111/ntNNO63TZoUOH0qdPH3bt2qWOj4iVmOWIL0PcbnfQbKfTaZojbR06dAig3eWvImJDXdQi3UmXuonYmdkoKv4JcLlcQZNZwZKSksK4ceOCBibwD1QwceLEDjd95513smTJEtavX8/48eO7bOqXX37Jv/71L/r37x/OHopItHWSIXl5eWRmZgamkpKSLlfX3NzMjTfeyFlnncXIkSOj124RsYYuapHupDM+InbWhPndkpvCW838+fOZNWsW48ePZ8KECSxbtoyamhrmzJkDwMyZMxkwYECg6LnjjjtYuHAha9euJT8/P/BdoJ49e9KzZ0+qq6u5/fbbufjii8nJyWH37t3cfPPNnHTSSRQVFR3DDotIxJnliC9DQjlr3Na8efPYvn0777zzTuTaKCLWFaFaJBLU8RGxszrMgyXMsLn00kv5+uuvWbhwIRUVFYwZM4b169cHBjzYu3cvCQktJ5AfeughGhoa+PGPfxy0Hv93iBITE/noo494/PHHOXjwILm5uUyZMoUlS5aEVDiJSDcyyxHfz/6zxaEqLi7m5Zdf5u2332bgwIERa6KIWFiEapFIUMdHxM7qMf/y4FGETXFxMcXFxaaPlZaWBv38+eefd7qutLQ0Xn311fAbISLdzyxHwswQwzC47rrreO655ygtLWXIkCGRap2IWF0Ea5FjpY6PiJ11FCoxCBsRiVMR+KR23rx5rF27lhdeeIGMjIzA5a+ZmZmkpaUdextFxLosVIuo4yNiZ/WYB4tulSMioTLLkTAz5KGHHgJg0qRJQfMfe+wxZs+efbQtE5F4YKFaRB0fETurAxJN5qvjIyKhMsuRMDPEMIxItUZE4o2FahF1fETsrAnzsfPN5omImDHLEWWIiITKQrWIOj4idlaP+d26VLSISKjMckQZIiKhslAtoo6PiJ0dwTJhIyJxyixHlCEiEioL1SLq+IjYWTNgdmm9LrcXkVCZ5YgyRERCZaFaRB0fETurw/xuySpaRCRUZjmiDBGRUFmoFjE78RRxy5cvJz8/n9TUVAoKCti0aVNIz1u3bh0Oh4Pp06dHt4EidlXXyRRHlCEiMWSDDAHliEjMWKgWiXrH5+mnn2b+/PksWrSIrVu3Mnr0aIqKijhw4ECnz/v888/59a9/zTnnnBPtJorYm2EyxRFliIgFxHGGgHJEJOYsUotEveNzzz33MHfuXObMmcOIESNYsWIF6enprFq1qsPneDweZsyYwe23387QoUOj3UQRsTBliIgcK+WIiECUOz4NDQ1s2bKFwsLClg0mJFBYWEhZWVmHz1u8eDH9+vXjqquuimbzRI4DjZ1M1qcMEbGC+M0QUI6IxJ51apGoDm5QVVWFx+MhOzs7aH52djY7duwwfc4777zDypUr2bZtW0jbqK+vp76+PvCz2+0+6vaK2E+TbzKbb33dkSGgHBHpnFmOxEeGgGoRkdizTi3SLYMbhOrw4cP89Kc/5ZFHHqFPnz4hPaekpITMzMzAlJeXF+VWisSTI51M9nM0GQLKEZHOHT8ZAqpFRCLPOrVIVM/49OnTh8TERCorK4PmV1ZWkpOT02753bt38/nnn3PhhRcG5jU3e+9ulJSUxM6dOznxxBODnrNgwQLmz58f+NntditwRAKOYP42j4+ipTsyBJQjIp0zy5H4yBBQLSISe9apRaLa8UlJSWHcuHFs3LgxMAxkc3MzGzdupLi4uN3yw4cP5+OPPw6ad9ttt3H48GHuu+8+0xBxOp04nc6otF8k/lnn9PLR6I4MAeWISOfi+1I31SIisWadWiTqNzCdP38+s2bNYvz48UyYMIFly5ZRU1PDnDlzAJg5cyYDBgygpKSE1NRURo4cGfT8Xr16AbSbLyKhqMP8bR4/N+FQhojEmlmOxE+GgHJEJLasU4tEveNz6aWX8vXXX7Nw4UIqKioYM2YM69evD3zJcO/evSQkWOqrRiI2cgRI7GB+fFCGiMSaWY7ET4aAckQktqxTi0S94wNQXFxsejoZoLS0tNPnrl69OvINEjluNGE+XGT8XKYCyhCR2DLLkfjKEFCOiMSOdWqRbun4iEisHMF88Mb4+rRWRGLJLEeUISISKuvUIur4iNhaHeZhE1/X54tILJnliDJEREJlnVpEHR8RW7POSCoiEq/ie1Q3EYk169Qi6viI2FptmPNFRNoyywtliIiEyjq1iDo+IrZWBzg6mC8iEgqzHFGGiEiorFOLqOMjYmvWOb0sIvFKl7qJyLGwTi2ijo+IrXU0YopGZBKRUJnlhTJEREJlnVpEHR8RW+voNLIuUxGRUJnlhTJEREJlnVrEdh0fwzC8/2l0QzNgABwGqoEavF+kqsV7sBt9//pvrNTRqTgP3kPlaPW44ZuafVMywXel9fjWecT3f/82j3SynSZafiVJvvVWAylgpHl/bPCt5nAjHnc1DdRxhEaq8eA+7NvFet+mPdBotOz5Ed9T/Xvces+O+FpY4ztaac2+hRpaHqh2N1NDE/XU0UQtxmG397F637LN+DZ8uNUW2+63/7h3dAz8rXIQ/PJM8h3jZt//PSbPOeJbd20I22r9s+FbZ4Kv7W4wHC37XwPGYTeNyUeop54aPBzGIN2/iw0t++/f89pWx7v11j2+vcC3XArgNsDhoeV3WwOGG6qTPNTRQAN1NFONcdi7lsBrPCTVmN80rD6MdRx/gnKEJrzHse1v1f/agpbXazItr6dqIN373vX4nlYLhttNs6OaRo7QQB11NHCERmpootG3vloaOUIj9dTTwBGaqYYat/fXFnjpt840/zu7keDfbevsSvY9x7eeaqh311GDB3e17+kNBHKjxrd2/+YS2/y/tbYtaP2ad/imauCwAcn+JlZ7M6WBOm+W1NMqr/3HunVu+NfY9v1fizcXfO9dj6MleqvBcB+myVlDI0eoo54jNFBLE4l4aKSJBhKopZE6GnzZVoPhOQx1bu/xMPzbqGnTrrZp6t9bT6t2HYYmN9RBk7uGOupxu8FR4zvWjQTlhi+2A8fX7Hj709TfgrbHu65ly7j9f4ZqvceiLq0BCDdDwDxHlCGd8R/jGsBdB4fdBo0cwXC74UhSyy876G+mP1ea8f49cntX1tzqIYOWX7rH9xj4lm2bCRCcR/6/rW2rAv/v0p8TvkrAcHu3Uw/N7sM0csSbFfXeLfjX6m7wLn7E3UgDR1pqA9N9bJ2jZnnlz1Lfi5bD0JwceB0bh2toSPPWPW7f+8i/xnrA3eRdrs5dTxM1UNsqN9vVg/7XdErL8TZ8y/qPd+s3WGAd+Nbh/7vgf1f697WGluTz/9w6Jf0rc9CSLb6atd47q8ldQy1NuI94f8dH/EsZ0HTI+3pq8OUVNe6W1RptXwut06JtLeTPK/9v8zCQFvidUw0edw311HEYA2etN8P9exqvtYjDCD8BLe3LL78kLy8v1s0QiZry8nIGDhzY6TJ1dXUMGTKEioqKDpfJyclhz549pKamRrqJcU85InYWSoZA1zmiDOmYMkTsLl5rEdt1fJqbm9m5cycjRoygvLwcl8sV6yaFzO12k5eXF1ftjsc2Q3y22zAMDh8+TG5uLgkJZjcCC1ZXV0dDQ0OHj6ekpKhg6UC85kg8vq4hPtsdj20ON0Og8xxRhnQsXjME4vO1HY9thvhsd7zXIra71C0hIYEBAwYA4HK54uaF1Fo8tjse2wzx1+7MzMyQl01NTVVRcpTiPUfisc0Qn+2OtzaHkyGgHDla8Z4hEJ/tjsc2Q/y1O55rkdA+8hEREREREYlj6viIiIiIiIjt2bLj43Q6WbRoEU6nM9ZNCUs8tjse2wzx227pPvH4GonHNkN8tjse2yzdK15fI/HY7nhsM8Rvu+OZ7QY3EBERERERacuWZ3xERERERERaU8dHRERERERsTx0fERERERGxPXV8RERERETE9mzZ8Vm+fDn5+fmkpqZSUFDApk2bYt2kgJKSEs444wwyMjLo168f06dPZ+fOnUHLTJo0CYfDETT94he/iFGLvX7/+9+3a9Pw4cMDj9fV1TFv3jxOOOEEevbsycUXX0xlZWUMWwz5+fnt2uxwOJg3bx5gzeMs1mDlDIH4zJF4zBBQjsjRs3KOxGOGQHzmiDLEWmzX8Xn66aeZP38+ixYtYuvWrYwePZqioiIOHDgQ66YB8NZbbzFv3jzee+89NmzYQGNjI1OmTKGmpiZoublz57J///7AdOedd8aoxS1OPfXUoDa98847gcduuukmXnrpJZ555hneeust9u3bx49+9KMYthY++OCDoPZu2LABgEsuuSSwjBWPs8SW1TME4jdH4i1DQDkiR8fqORKvGQLxlyPKEIsxbGbChAnGvHnzAj97PB4jNzfXKCkpiWGrOnbgwAEDMN56663AvPPOO8+44YYbYtcoE4sWLTJGjx5t+tjBgweN5ORk45lnngnM++STTwzAKCsr66YWdu2GG24wTjzxRKO5udkwDGseZ4m9eMsQw4iPHLFDhhiGckRCE285Eg8ZYhj2yBFlSGzZ6oxPQ0MDW7ZsobCwMDAvISGBwsJCysrKYtiyjh06dAiArKysoPlr1qyhT58+jBw5kgULFlBbWxuL5gX59NNPyc3NZejQocyYMYO9e/cCsGXLFhobG4OO+/Dhwxk0aJBljntDQwNPPvkkP/vZz3A4HIH5VjzOEjvxmCEQPzkSzxkCyhEJTTzmSLxkCMR3jihDYi8p1g2IpKqqKjweD9nZ2UHzs7Oz2bFjR4xa1bHm5mZuvPFGzjrrLEaOHBmYf8UVVzB48GByc3P56KOPuOWWW9i5cyfPPvtszNpaUFDA6tWrGTZsGPv37+f222/nnHPOYfv27VRUVJCSkkKvXr2CnpOdnU1FRUVsGtzG888/z8GDB5k9e3ZgnhWPs8RWvGUIxE+OxHuGgHJEQhNvORIvGQLxnyPKkNizVccn3sybN4/t27cHXZ8KcM011wT+P2rUKPr378/kyZPZvXs3J554Ync3E4Bp06YF/n/aaadRUFDA4MGD+fOf/0xaWlpM2hSOlStXMm3aNHJzcwPzrHicRcIVLzkS7xkCyhGxp3jJEIj/HFGGxJ6tLnXr06cPiYmJ7UbwqKysJCcnJ0atMldcXMzLL7/Mm2++ycCBAztdtqCgAIBdu3Z1R9NC0qtXL77zne+wa9cucnJyaGho4ODBg0HLWOW4f/HFF7z++utcffXVnS5nxeMs3SueMgTiO0fiKUNAOSKhi6cciecMgfjKEWWINdiq45OSksK4cePYuHFjYF5zczMbN25k4sSJMWxZC8MwKC4u5rnnnuONN95gyJAhXT5n27ZtAPTv3z/KrQtddXU1u3fvpn///owbN47k5OSg475z50727t1rieP+2GOP0a9fPy644IJOl7PicZbuFQ8ZAvbIkXjKEFCOSOjiIUfskCEQXzmiDLGIGA+uEHHr1q0znE6nsXr1auOf//yncc011xi9evUyKioqYt00wzAM49prrzUyMzON0tJSY//+/YGptrbWMAzD2LVrl7F48WJj8+bNxp49e4wXXnjBGDp0qHHuuefGtN2/+tWvjNLSUmPPnj3G3//+d6OwsNDo06ePceDAAcMwDOMXv/iFMWjQIOONN94wNm/ebEycONGYOHFiTNtsGN6RdAYNGmTccsstQfOtepwl9qyeIYYRnzkSrxliGMoRCZ/VcyQeM8Qw4jdHlCHWYbuOj2EYxgMPPGAMGjTISElJMSZMmGC89957sW5SAGA6PfbYY4ZhGMbevXuNc88918jKyjKcTqdx0kknGb/5zW+MQ4cOxbTdl156qdG/f38jJSXFGDBggHHppZcau3btCjx+5MgR45e//KXRu3dvIz093fjhD39o7N+/P4Yt9nr11VcNwNi5c2fQfKseZ7EGK2eIYcRnjsRrhhiGckSOjpVzJB4zxDDiN0eUIdbhMAzD6NZTTCIiIiIiIt3MVt/xERERERERMaOOj4iIiIiI2J46PiIiIiIiYnvq+IiIiIiIiO2p4yMiIiIiIranjo+IiIiIiNieOj4iIiIiImJ76viIiIiIiIjtqeMjIiIiIiK2p46PiIiIiIjYnjo+IiIiIiJie+r4iIiIiIiI7f1/+jlsZVQPfjAAAAAASUVORK5CYII=", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0sAAADcCAYAAAChzzoQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABDZElEQVR4nO3dfXxT9f3//0eSXlFKuBBoKRYL6EAEAal04FT82FkvPn50OocOBaviNum8qNuEzYGTbUWHWHVMFEWcgqL7qHO6L4rF6pjdELD7iEI3EUcFWuDnILSlV+n5/ZELGnraJiVpcsLzfrudG+TkXLxySJ683zkn72MzDMNAREREREREAtijXYCIiIiIiEgsUmdJRERERETEhDpLIiIiIiIiJtRZEhERERERMaHOkoiIiIiIiAl1lkREREREREyosyQiIiIiImJCnSURERERERET6iyJiIiIiIiYUGdJRERERETEhDpLJ4Da2loWLFjAxRdfzIABA7DZbKxcudJ02WnTpmGz2bDZbNjtdpxOJ6NGjeKGG25g3bp1Qe/zxhtv9G/n2CklJSVMr0xEIi1a+ZGWltbh8zabjcLCwlBfiohEiXJErCwh2gVI5B04cID777+fYcOGMX78eMrKyjpd/uSTT6a4uBiAuro6PvvsM1555RWef/55vvOd7/D888+TmJjY5X6Tk5N56qmn2s13OBzdeh0i0vOilR8iEj+UI2Jl6iydAIYMGcLevXvJyMhg06ZNnH322Z0u37dvX66//vqAeYsWLeL222/nd7/7HdnZ2TzwwANd7jchIaHddkTEWqKVHyISP5QjYmW6DO8EkJycTEZGxnFtw+Fw8OijjzJmzBh++9vfcujQoeOu6/PPP8dms/Hwww+3e+6DDz7AZrPxwgsvHPd+RKT7YjU/2po1axYpKSls27YtYH5+fj79+/dnz549Yd2fiITGCjmSnZ3d4c8HujoTJvFNnSUJmsPh4LrrrqO+vp4NGzYEtc6BAwfaTS6XC4ARI0ZwzjnnsGrVqnbrrVq1ij59+nDFFVeE9TWISHSEKz8OHDjQbrlHHnmEQYMGMWvWLNxuNwBPPPEEb7/9No899hiZmZlhfS0iEh2RzJGSkhKee+65gOmss87Cbrdz0kknhfuliIXoMjwJydixYwHYsWNHl8vW1dUxaNCgdvPz8/NZu3YtADNnzuR73/se27dvZ/To0QA0Nzfz0ksvcdVVV5GamhrG6kUkmsKRH2b69evH008/TX5+PosWLeK73/0uP/rRj7jyyit1KbBInIlUjlx55ZUBj19++WW2bNnC/fffz7hx40KuU+KHOksSEt/IMocPH+5y2ZSUFP70pz+1mz9w4ED/37/zne9wxx13sGrVKhYuXAjAW2+9xYEDB9TIEYkz4cgPgG9+85vt5l100UV873vf4/777+cPf/gDKSkpPPHEE8dXsIjEnEjmiM+nn37KTTfdxBVXXMG9997bvUIlbqizJCGpra0FoE+fPl0u63A4yMvL63SZfv36cfnll7N69Wp/Z2nVqlUMHTqU//qv/zr+gkUkZoQ7P461ePFi/vjHP1JRUcHq1asZPHhwt+oUkdgV6RxxuVxcddVVDB06lN///vfYbLZu1SnxQ79ZkpBs3boVgFNPPTVs25w5cyaff/45H3zwAYcPH+b111/nuuuuw27X21MknkQiP9r66KOP2LdvHwAff/xxRPYhItEV6Ry58cYb2bNnD6+99hpOpzMi+xBr0ZklCZrb7Wb16tWkpqbyjW98I2zbvfjiixk0aBCrVq0iNzeX+vp6brjhhrBtX0SiL1L54VNXV0dBQQFjxoxh6tSpPPjgg3zrW9/qcohiEbGOSOfIokWLeO2113jllVf8v6MWUWdJguJ2u7n99tvZtm0bc+fODeu3LQkJCVx33XWsXr2abdu2MW7cOM4888ywbV9EoiuS+eFzzz33sGvXLv72t78xatQoSktLmTVrFh999BHJyclh35+I9KxI58g777zDvffey89+9rN2gz3IiU2dpRPEb3/7Ww4ePOi/38if/vQnvvzySwB++MMf0rdvX/+yhw4d4vnnnwegvr7ef+fsHTt2cO211/p/W9SVlpYW/3aO9a1vfYvevXv7H8+cOZNHH32Ud999VzeaE4kx0ciPUKxfv57f/e53LFiwgLPOOguAZ555hmnTpvHzn/+cBx98MOz7FJHQxHqOXHfddQwaNIjTTjutXdvlm9/8Junp6WHfp1iEISeEU045xQBMp507d/qXO//88wOeS0tLM0477TTj+uuvN95+++2g9zdr1qwO93fsPn3OOOMMw263G19++WUYXrGIhEs08qN3794dPg8Yc+bMMQzDMFwul3HKKacYZ511ltHc3Byw3F133WXY7Xaj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z/HU6c1bN7hdtTTRQC1u6nBTTwtHvJ9TADtu6mghETcut0Gdw00z9XDEhedT7wvKnuRLn7b5522/tnYnR6zdFrEZoadmTPvyyy/JysqKdhkiEVNVVcXJJ5/c6TINDQ0MHz6c6urqDpfJyMhg586dpKSkhLtEy1OOSDwLJkOg6xxRhnRMGSLx7kRqi8RdZ6m1tZXKykrGjBlDVVUVTqcz2iUFzeVykZWVZam6rVgzWLNuwzA4fPgwmZmZ2O1mN3cL1NDQQFNTU4fPJyUlxXQ4RZNVc8SK72uwZt1WrDnUDIHOc0QZ0jGrZghY871txZrBmnWfiG2RuLsMz263M3ToUACcTqdl3nxtWbFuK9YM1qu7b9++QS+bkpIS8wEUq6yeI1asGaxZt9VqDiVDQDnSXVbPELBm3VasGaxX94nWFgnuqyUREREREZETjDpLIiIiIiIiJuKys5ScnMyCBQtITk6OdikhsWLdVqwZrFu39BwrvkesWDNYs24r1iw9y6rvESvWbcWawbp1n2jiboAHERERERGRcIjLM0siIiIiIiLHS50lERERERERE+osiYiIiIiImFBnSURERERExERcdpaWLl1KdnY2KSkp5ObmsnHjxmiX5FdcXMzZZ59Nnz59GDx4MFdeeSWVlZUBy0ybNg2bzRYwff/7349SxR733Xdfu5pGjx7tf76hoYE5c+Zw0kknkZaWxtVXX01NTU0UK4bs7Ox2NdtsNubMmQPE5nGW2BDLGQLWzBErZggoR6T7YjlHrJghYM0cUYZYX9x1ltasWUNRURELFixgy5YtjB8/nvz8fPbt2xft0gB47733mDNnDn/7299Yt24dzc3NXHTRRdTV1QUsN3v2bPbu3eufHnzwwShVfNQZZ5wRUNOGDRv8z91111386U9/4uWXX+a9995jz549XHXVVVGsFj788MOAetetWwfANddc418mFo+zRFesZwhYN0esliGgHJHuifUcsWqGgPVyRBkSB4w4M3nyZGPOnDn+x26328jMzDSKi4ujWFXH9u3bZwDGe++95593/vnnG3fccUf0ijKxYMECY/z48abPHTx40EhMTDRefvll/7xt27YZgFFeXt5DFXbtjjvuMEaOHGm0trYahhGbx1miz2oZYhjWyJF4yBDDUI5IcKyWI1bIEMOIjxxRhlhPXJ1ZampqYvPmzeTl5fnn2e128vLyKC8vj2JlHTt06BAAAwYMCJi/atUqBg4cyNixY5k3bx719fXRKC/Av/71LzIzMxkxYgQzZsxg165dAGzevJnm5uaA4z569GiGDRsWM8e9qamJ559/nptuugmbzeafH4vHWaLHihkC1skRK2cIKEckOFbMEatkCFg7R5Qh1pQQ7QLC6cCBA7jdbtLT0wPmp6ens3379ihV1bHW1lbuvPNOzjnnHMaOHeuf/93vfpdTTjmFzMxM/u///o977rmHyspKXnnllajVmpuby8qVKxk1ahR79+7lF7/4Beeeey5bt26lurqapKQk+vXrF7BOeno61dXV0Sn4GK+99hoHDx7kxhtv9M+LxeMs0WW1DAHr5IjVMwSUIxIcq+WIVTIErJ8jyhBriqvOktXMmTOHrVu3BlxvC3Drrbf6/z5u3DiGDBnChRdeyI4dOxg5cmRPlwnAJZdc4v/7mWeeSW5uLqeccgovvfQSvXr1ikpNoXj66ae55JJLyMzM9M+LxeMsEiqr5IjVMwSUIxKfrJIhYP0cUYZYU1xdhjdw4EAcDke7kU9qamrIyMiIUlXmCgsLeeONN3j33Xc5+eSTO102NzcXgM8++6wnSgtKv379+NrXvsZnn31GRkYGTU1NHDx4MGCZWDnu//73v3nnnXe45ZZbOl0uFo+z9CwrZQhYO0eslCGgHJHgWSlHrJwhYK0cUYZYV1x1lpKSkpg0aRKlpaX+ea2trZSWljJlypQoVnaUYRgUFhby6quvsn79eoYPH97lOhUVFQAMGTIkwtUFr7a2lh07djBkyBAmTZpEYmJiwHGvrKxk165dMXHcn3nmGQYPHsxll13W6XKxeJylZ1khQyA+csRKGQLKEQmeFXIkHjIErJUjyhALi/IAE2H34osvGsnJycbKlSuNTz/91Lj11luNfv36GdXV1dEuzTAMw/jBD35g9O3b1ygrKzP27t3rn+rr6w3DMIzPPvvMuP/++41NmzYZO3fuNP74xz8aI0aMMM4777yo1n333XcbZWVlxs6dO42//vWvRl5enjFw4EBj3759hmEYxve//31j2LBhxvr1641NmzYZU6ZMMaZMmRLVmg3DMwLRsGHDjHvuuSdgfqweZ4m+WM8Qw7Bmjlg1QwxDOSKhi/UcsWKGGIZ1c0QZYm1x11kyDMN47LHHjGHDhhlJSUnG5MmTjb/97W/RLskPMJ2eeeYZwzAMY9euXcZ5551nDBgwwEhOTjZOPfVU48c//rFx6NChqNY9ffp0Y8iQIUZSUpIxdOhQY/r06cZnn33mf/7IkSPGbbfdZvTv399ITU01vvWtbxl79+6NYsUeb731lgEYlZWVAfNj9ThLbIjlDDEMa+aIVTPEMJQj0j2xnCNWzBDDsG6OKEOszWYYhtGjp7JEREREREQsIK5+syQiIiIiIhIu6iyJiIiIiIiYUGdJRERERETEhDpLIiIiIiIiJtRZEhERERERMaHOkoiIiIiIiAl1lkREREREREyosyQiIiIiImJCnSURERERERET6iyJiIiIiIiYUGdJRERERETEhDpLIiIiIiIiJv5/wlj5W+jLsu8AAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -523,12 +525,12 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "grating_type = 2\n", - "fourier_order = [10, 9]\n", + "fto = [10, 9]\n", "thickness = [100, 200, 400, 245]\n", "period = [1000, 2000]\n", "\n", @@ -554,23 +556,23 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ - "mee = meent.call_mee(backend=0, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_2d_m, thickness=thickness, type_complex=type_complex, fft_type=0, improve_dft=True)" + "mee = meent.call_mee(backend=0, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_2d_m, thickness=thickness, type_complex=type_complex)" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "time: 10.467445135116577\n" + "time: 10.542928695678711\n" ] } ], @@ -582,7 +584,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -590,12 +592,12 @@ "output_type": "stream", "text": [ "Diffraction Efficiency of Reflection:\n", - " [[0.066 0.016 0. ]\n", - " [0.453 0.04 0. ]\n", + " [[0.028 0.056 0. ]\n", + " [0.183 0.036 0. ]\n", " [0. 0. 0. ]]\n", "Diffraction Efficiency of Transmission:\n", - " [[0.055 0.002 0. ]\n", - " [0.005 0.008 0. ]\n", + " [[0.063 0.004 0. ]\n", + " [0.025 0.052 0. ]\n", " [0. 0. 0. ]]\n" ] } @@ -609,14 +611,14 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "time: 5.318186044692993\n" + "time: 3.1625919342041016\n" ] } ], @@ -635,12 +637,12 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAz8AAADcCAYAAABebR/yAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9f5hlV1Xnj7+q69761VXVRVWlq+l0hw50JiGBgAKGCIOIkcDMh0dNHIGvCCgfdcYkitHHR3hmDKgzGYZxcFDMzKNMwCHRET8gDnwnjEYhHzBxJE6UDAmkIQ3d6VQ11e3trttVt6pudX3+OGed8z7r7nPuvVXVnbrd593P7Xvq3HP2r7P32uu91tr79K2vr69TokSJEiVKlChRokSJEhc4djzTBShRokSJEiVKlChRokSJ84GS/JQoUaJEiRIlSpQoUeKiQEl+SpQoUaJEiRIlSpQocVGgJD8lSpQoUaJEiRIlSpS4KFCSnxIlSpQoUaJEiRIlSlwUKMlPiRIlSpQoUaJEiRIlLgqU5KdEiRIlSpQoUaJEiRIXBUryU6JEiRIlSpQoUaJEiYsCJfkpUaJEiRIlSpQoUaLERYGS/JQoUaJEiRIlSpQoUeKiQEl+LhD8zd/8DbfeeivXXHMNO3fu5LLLLuNHfuRH+NrXvtZy7atf/Wr6+vro6+tjx44djI+Pc+WVV/JjP/Zj/Nmf/VnHeb797W9P0vGfoaGhraxeiRIlzjFKGVKiRInNopQjJXoBlWe6ACW2Bu973/v44he/yD/7Z/+Ma6+9ltnZWX77t3+b7/zO7+Shhx7iBS94Qeb6ffv2ceeddwJw5swZDh06xCc+8Qk+9rGP8SM/8iN87GMfo1qtts13cHCQ3/u932s539/fvzUVK1GixHlBKUNKlCixWZRypERPYL3EBYEvfvGL68vLy5lzX/va19YHBwfXf/RHfzRz/nu+53vWr7nmmpY0ms3m+s/8zM+sA+u/9Eu/1DbPt73tbes7d+7cXMFLlCixLVDKkBIlSmwWpRwp0Qsow94uEHz3d383AwMDmXNXXHEF11xzDY899lhHafT39/PBD36Qq6++mt/+7d/m1KlTmy7X+vo63/u938sll1zC8ePHk/MrKyu88IUv5HnPex5nzpzZdD4lSpTYHLarDPnGN75BX18fH/jAB1p++6u/+iv6+vr4gz/4g03nU6JEic1ju8oRIDc0rq+vj8OHD29JHiV6AyX5uYCxvr7O3Nwc09PTHd/T39/Pm9/8ZhYXF/nCF77Q0T3z8/Mtn9OnTwORsPkv/+W/0Gg0+Of//J8n99xxxx38n//zf7j77rvZuXNndxUrUaLEecF2kCHPfe5zecUrXsE999zTct8999zD2NgYP/ADP9Bx+UqUKHF+sR3kCMB//a//teXznOc8h+HhYUZHR7uuV4neRbnm5wLGPffcw1NPPcWv/uqvdnWfxeR+/etfb3vtmTNnuOSSS1rO33jjjdx3330AXH755fzGb/wGP/3TP80999zDwYMHef/738/P/dzP8apXvaqrspUoUeL8YbvIkLe+9a389E//NI8//jhXXXUVAKurq/zRH/0RN910EyMjI12Vr0SJEucP20WOvOUtb8n89v73v59vfvOb/P7v/35XxKxE76MkPxcoHn/8cW655Rauv/563va2t3V1r1lAFhYW2l47NDTEf//v/73lvBckP/VTP8UnPvEJbrvtNqanp3ne857Hv/k3/6arcpUoUeL8YTvJkB/5kR/h537u57jnnnv4tV/7NQA++9nPMj8/36LQlChRYvtgO8kRxV/+5V/yrne9i9tuu40f+7Ef66pcJXofJfm5ADE7O8s//af/lF27dvHHf/zHXe92Uq/XARgbG2t7bX9/PzfccENH6X74wx/mec97Hk888QR/9Vd/xfDwcFflKlGixPnBdpMhExMTvOENb+Dee+9NyM8999zDpZdeymte85quylaiRInzg+0mRwxHjx7ljW98I694xSv4D//hP3RVphIXBso1PxcYTp06xetf/3pqtRr33Xcfe/fu7TqNRx99FICDBw9uadk+97nPsby8DMCXv/zlLU27RIkSW4PtKkPe+ta38o1vfIO/+qu/YmFhgT/90z/lzW9+Mzt2lNNYiRLbDdtVjqysrPDDP/zDDA4O8kd/9EdUKqUP4GJE+dQvIDQaDd7whjfwta99jT//8z/n6quv7jqNtbU17r33XkZGRnjlK1+5ZWV7+umnue2223jta1/LwMAAv/iLv8iNN97Ic57znC3Lo0SJEpvDdpYhr3vd67jkkku45557uO6661hcXCzDVUqU2IbYznLkZ3/2Z3nkkUd44IEHmJmZ2bJ0S/QWSvJzgWBtbY03vvGNPPjgg3zqU5/i+uuv31Aa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EREREREREXFJIBo/ERERERERERERERGXBKLxExERERERERERERFxSSAaPxERERERERERERERlwSi8RMRERERERERERERcUkgGj8REREREREREREREZcEovETEREREREREREREXFJIBo/ERERERERERERERGXBKLxExERERERERERERFxSSAaPxERERERERERERERlwSi8RMRERERERERERERcUng/wKyAv9AmY8xMAAAAABJRU5ErkJggg==", + "image/png": "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", "text/plain": [ "
" ] @@ -650,7 +652,7 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAADcCAYAAABK+IETAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOy9fZhcVZXv/+l0Vb93p+hu0k1eIBmTAcKLvE4IMOpoNCp6fWF0cBAzjlfn4QeOinN1mIuK6Ihyvc8w+K7XB/UK17l6FceXQQEFBwwIaGaIASRKJCF0x06opCvd1d3V6d8f56w666za59Sp6uok3Zzv85yn6rzts88+e6+9vmutvXfTzMzMDClSpEiRIkWKFClSpEiRgkVHOgMpUqRIkSJFihQpUqRIcbQgJUgpUqRIkSJFihQpUqRI4SMlSClSpEiRIkWKFClSpEjhIyVIKVKkSJEiRYoUKVKkSOEjJUgpUqRIkSJFihQpUqRI4SMlSClSpEiRIkWKFClSpEjhIyVIKVKkSJEiRYoUKVKkSOEjJUgpUqRIkSJFihQpUqRI4SMlSClSpEiRIkWKFClSpEjhIyVIKVKkSJEiRYoUKVKkSOEjJUgLAA8++CBXXnklp5xyCp2dnRx//PG88Y1v5De/+U3FtS960YtoamqiqamJRYsW0dPTw4knnshll13GHXfckfiZf/VXf0VXV1fk+aamJq688sq63idFihSHF6kMSZEixWyRypEUCwmZI52BFLPHJz7xCe677z7e8IY3cPrppzM0NMSnP/1pzjrrLO6//35OPfXU0PXLly/n+uuvB+DgwYNs376db3/723z961/njW98I1//+tfJZrNH4lVSpEhxBJDKkBQpUswWqRxJsaAwk2Le47777puZmJgIHfvNb34z09raOnPppZeGjr/whS+cOeWUUyrSKJVKM//f//f/zQAz73vf+6o+c9OmTTOdnZ2R54GZK664IuEbpEiR4kgilSEpUqSYLVI5kmIhIQ2xWwA4//zzaWlpCR1bs2YNp5xyCo8++miiNJqbm7nppptYu3Ytn/70p9m/f39D87hp0yba2toq8rNx40aOOeYYdu/e3dDnpUiRIjmOdhlSKBTo7OzkXe96V8W5Xbt20dzcXLZEp0iR4sjgaJcjACtXriyH9tnt7rvvbuizUsxvpARpgWJmZobh4WH6+/sT39Pc3Myb3vQmxsbGuPfeexPdMzIy4tws/vmf/5ljjz2WTZs2MT09DcAXvvAFfvzjH/OpT32KpUuXJs5nihQp5h5Hkwzp6urida97Hf/yL/9Slh+C//N//g8zMzNceumlifOZIkWKw4OjSY4A3Hjjjfzv//2/Q9tZZ53FokWL6OvrS5zHFAsf6RikBYpbbrmFp59+muuuu66m+yRG+Le//W3Vaw8ePMixxx6bKN1cLseXv/xlNm7cyMc//nH+8i//kr/7u7/jta99LW9+85trymOKFCnmHkebDHnLW97CLbfcwh133MHLX/7y8vGvf/3rvOAFL+D444+vKZ8pUqSYexxtcuS1r31taP+b3/wmv/zlL7nuuus47bTTaspjioWNlCAtQDz22GNcccUVrF+/nk2bNtV0r8wGMzo6WvXatrY2vve97znPvfSlL6049rKXvYy/+Zu/4brrruNb3/oWbW1tfOELX6gpfylSpJh7HI0yZMOGDSxdupRbbrmlTJC2bt3Kf/7nf/KlL32ppjymSJFi7nE0yhGNbdu28dd//de85jWv4ZprrqkpfykWPlKCtMAwNDTERRddxOLFi/nWt75Fc3NzTfcXCgUAuru7q17b3NzMhg0bakr/k5/8JN/97nfZsmULt956K0uWLKnp/hQpUswtjlYZsmjRIi699FI+97nPMTY2RkdHB7fccgttbW284Q1vqCmPKVKkmFscrXJEcODAAV7/+tezbNkyvva1r9HU1FTT/SkWPtIxSAsI+/fv5xWveAX5fJ7bb7+9rnE9W7duBWD16tWNzh4Av/rVr9izZw8AjzzyyJw8I0WKFPXhaJchb3nLWygUCtx2223MzMxw66238qpXvYrFixc3/FkpUqSoD0e7HAFv/aTdu3dz22230dPTMyfPSDG/kXqQFgiKxSKvfvWr+c1vfsOdd97J2rVra05jenqaW2+9lY6ODi688MKG5/HgwYO89a1vZe3atZx//vnccMMNvO51r+Pcc89t+LNSpEhRG+aDDDn11FM588wzueWWW1i+fDlPPfUUn/rUpxr+nBQpUtSH+SBHPv7xj3Pbbbfx7W9/m5NOOqnh6adYGEgJ0gLA9PQ0f/EXf8HmzZv57ne/y/r16+tK42//9m959NFH+fu///s5sai8//3v56mnnuL+++/nxBNP5K677mLTpk386le/orW1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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAADcCAYAAABK+IETAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9fZwdVZXvj787fU6nu9PdadMh3YSEhAGGEB6MgN8kPjIaiYj+fGAeUAaiw1fnchNHwRkZZhhBHMXhzm90VHyYuVwcR7jMMFeZuehFHhS9QkBAMxKeJEgMAbpjJ550d9Kn06fT3z+q1qlV6+xdp87p00m6qc/rVa9zqmrXrl1Ve6+9PmutvXfT5OTkJBkyZMiQIUOGDBkyZMiQgTmHuwAZMmTIkCFDhgwZMmTIcKQgI0gZMmTIkCFDhgwZMmTIECIjSBkyZMiQIUOGDBkyZMgQIiNIGTJkyJAhQ4YMGTJkyBAiI0gZMmTIkCFDhgwZMmTIECIjSBkyZMiQIUOGDBkyZMgQIiNIGTJkyJAhQ4YMGTJkyBAiI0gZMmTIkCFDhgwZMmTIECIjSBkyZMiQIUOGDBkyZMgQIiNIGTJkyJAhQ4YMGTJkyBAiI0izAA8//DCbNm3ilFNOYd68eRx77LH8/u//Pr/4xS8q0p599tk0NTXR1NTEnDlz6Orq4qSTTuKiiy7i7rvvTn3P97///XR0dHjPNzU1sWnTprqeJ0OGDIcWmQzJkCHDVJHJkQyzCbnDXYAMU8ff/M3fcP/99/N7v/d7nH766fT39/OlL32JM844gwcffJBTTz01ln7JkiVcd911AOzbt49t27bxrW99i29+85v8/u//Pt/85jfJ5/OH41EyZMhwGJDJkAwZMkwVmRzJMKswmWHG4/77758cGxuLHfvFL34xOXfu3MkLL7wwdvyNb3zj5CmnnFKRR6lUmvyv//W/TgKTH//4x6vec8OGDZPz5s3zngcmN27cmPIJMmTIcDiRyZAMGTJMFZkcyTCbkIXYzQK85jWvoaWlJXbsxBNP5JRTTuHJJ59MlUdzczNf+MIXWLlyJV/60pfYu3dvQ8u4YcMGWltbK8qzfv16XvGKV/Diiy829H4ZMmRIjyNdhoyMjDBv3jw+8pGPVJzbuXMnzc3NZUt0hgwZDg+OdDkCsHz58nJon93uu+++ht4rw8xGRpBmKSYnJxkYGGDhwoWpr2lubua9730v+/fv58c//nGqawYHB52bxd///d9z1FFHsWHDBiYmJgD42te+xl133cUXv/hFFi9enLqcGTJkmH4cSTKko6ODd7/73fzLv/xLWX4I/uf//J9MTk5y4YUXpi5nhgwZDg2OJDkC8PnPf55//ud/jm1nnHEGc+bMoaenJ3UZM8x+ZGOQZiluvvlmXnjhBa699tqarpMY4WeffbZq2n379nHUUUelyre7u5sbb7yR9evX89nPfpb3ve99/Omf/invete7+MM//MOaypghQ4bpx5EmQy6++GJuvvlm7r77bt761reWj3/zm9/kDW94A8cee2xN5cyQIcP040iTI+9617ti+7fddhs//elPufbaaznttNNqKmOG2Y2MIM1CPPXUU2zcuJG1a9eyYcOGmq6V2WCGh4erpm1tbeV//+//7Tz3lre8peLYOeecwx//8R9z7bXX8m//9m+0trbyta99rabyZciQYfpxJMqQdevWsXjxYm6++eYyQdq6dSs///nP+cd//MeaypghQ4bpx5EoRzSeeOIJ/uiP/oh3vvOdXHXVVTWVL8PsR0aQZhn6+/s577zzmD9/Pv/2b/9Gc3NzTdePjIwA0NnZWTVtc3Mz69atqyn/v/3bv+Xf//3f2bJlC7fccguLFi2q6foMGTJML45UGTJnzhwuvPBCvvKVr7B//37a29u5+eabaW1t5fd+7/dqKmOGDBmmF0eqHBEMDQ3xnve8h2OOOYZvfOMbNDU11XR9htmPbAzSLMLevXs599xzKRQK3HnnnXWN69m6dSsAJ5xwQqOLB8DPfvYzdu3aBcBjjz02LffIkCFDfTjSZcjFF1/MyMgIt99+O5OTk9xyyy28/e1vZ/78+Q2/V4YMGerDkS5HIFg/6cUXX+T222+nq6trWu6RYWYj8yDNEhSLRd7xjnfwi1/8gnvuuYeVK1fWnMfExAS33HIL7e3tvO51r2t4Gfft28cHPvABVq5cyWte8xquv/563v3ud/PqV7+64ffKkCFDbZgJMuTUU0/lVa96FTfffDNLlixhx44dfPGLX2z4fTJkyFAfZoIc+exnP8vtt9/Ot771LVasWNHw/DPMDmQEaRZgYmKCP/iDP2Dz5s38+7//O2vXrq0rjz/5kz/hySef5M///M+nxaJyxRVXsGPHDh588EFOOukk7r33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IkWKFClOJlIDKUWKFClSpEiRIkWKFCkCpAZSihQpUqRIkSJFihQpUgRIDaQUKVKkSJEiRYoUKVKkCNDWBtI999zDxo0b6enp4corr+THP/7xcmcphieeeIJ3vOMdjI2N0dHRwYMPPhg7X6lU+PM//3POPvtsent72bFjBy+99NLyZDbAXXfdxe/8zu/Q39/P2rVrede73sWLL74Yu6ZUKnHbbbcxNDREX18fN954I5OTk8uUY7j33nu59NJLww3Ytm3bxr/8y7+s2PymWDlIZcjJRzvKEEjlSIrWkcqRk49UjqRYbrStgfQP//AP3HHHHdx55538x3/8B5dddhnXXHMNhw4dWu6shTh27BiXXXYZ99xzj/f85z73Oe6++27uu+8+nnrqKVavXs0111xDqVQ6zTmN8Pjjj3Pbbbfx5JNP8vDDD7O4uMjb3/52jh07Fl7z0Y9+lO9+97t8+9vf5vHHH+fgwYPccMMNy5bndevW8dnPfpbdu3eza9cu3va2t/HOd76Tn/3sZysyvylWBlIZcmrQjjIEUjmSojWkcuTUIJUjKZYdlTbFG97whsptt90W/l9aWqqMjY1V7rrrrmXMVTKAygMPPBD+P378eGV0dLTy+c9/PjxWKBQq3d3dlb//+79fhhz6cejQoQpQefzxxyuVistjNputfPvb3w6vef755ytAZefOncuVzSqcddZZla985Sttk98Upx+pDDk9aFcZUqmkciRFfaRy5PQglSMpTjfa0oO0sLDA7t272bFjR3hs1apV7Nixg507dy5jzhrH3r17mZiYiJVhzZo1XHnllSuqDEeOHAFgcHAQgN27d7O4uBjL95YtW9iwYcOKyPfS0hLf+ta3OHbsGNu2bVvx+U2xPEhlyOlDu8kQSOVIisaQypHTh1SOpDjdyCx3BlrB1NQUS0tLjIyMxI6PjIzwwgsvLFOumsPExASAtwxybrlx/PhxPvKRj/DGN76Riy++GHD57urqIp/Px65d7nw/88wzbNu2jVKpRF9fHw888AAXXXQRe/bsWZH5TbG8SGXI6UE7yRBI5UiK5pDKkdODVI6kWA60pYGU4vTgtttu49lnn+VHP/rRcmelLi644AL27NnDkSNH+Md//EduvvlmHn/88eXOVooUr2q0kwyBVI6kSLESkcqRFMuBtgyxGx4eprOzs2rlj8nJSUZHR5cpV81B8rlSy3D77bfzve99jx/+8IesW7cuPD46OsrCwgKFQiF2/XLnu6uri82bN7N161buuusuLrvsMr70pS+t2PymWF6kMuTUo91kCKRyJEVzSOXIqUcqR1IsF9rSQOrq6mLr1q088sgj4bHjx4/zyCOPsG3btmXMWePYtGkTo6OjsTIcPXqUp556alnLUKlUuP3223nggQd49NFH2bRpU+z81q1byWazsXy/+OKL/PKXv1xRdX/8+HHm5+fbJr8pTi9SGXLqcKbIEEjlSIraSOXIqUMqR1IsO5Z5kYiW8a1vfavS3d1d+drXvlZ57rnnKrfccksln89XJiYmljtrIWZmZio//elPKz/96U8rQOWv//qvKz/96U8rv/jFLyqVSqXy2c9+tpLP5yvf+c53Kk8//XTlne98Z2XTpk2Vubm5ZcvzrbfeWlmzZk3lscceq7zyyivhZ3Z2Nrzmj/7ojyobNmyoPProo5Vdu3ZVtm3bVtm2bduy5fnjH/945fHHH6/s3bu38vTTT1c+/vGPVzo6Oir/+q//uiLzm2JlIJUhpwbtKEMqlVSOpGgNqRw5NUjlSIrlRtsaSJVKpfLlL3+5smHDhkpXV1flDW94Q+XJJ59c7izF8MMf/rACVH1uvvnmSqXiltf85Cc/WRkZGal0d3dXtm/fXnnxxReXNc++/AKVr371q+E1c3NzlT/+4z+unHXWWZVcLld597vfXXnllVeWLc8f+MAHKueee26lq6ur8prXvKayffv2UBitxPymWDlIZcjJRzvKkEollSMpWkcqR04+UjmSYrnRUalUKqfWR5UiRYoUKVKkSJEiRYoU7YG2nIOUIkWKFClSpEiRIkWKFKcCqYGUIkWKFClSpEiRIkWKFAFSAylFihQpUqRIkSJFihQpAqQGUooUKVKkSJEiRYoUKVIESA2kFClSpEiRIkWKFClSpAiQGkgpUqRIkSJFihQpUqRIESA1kFKkSJEiRYoUKVKkSJEiQGogpUiRIkWKFClSpEiRIkWA1EBKkSJFihQpUqRIkSJFigCpgZQiRYoUKVKkSJEiRYoUAVIDKUWKFClSpEiRIkWKFCkCpAZSihQpUqRIkSJFihQpUgT4/wG4JDMuCeXO1wAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -692,12 +694,12 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -707,7 +709,7 @@ }, { "data": { - "image/png": "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BAgNHQklDQFUR8IFzz38KK1DVlYWdu3aha1bt7Z1U6w4//zzUVBQgJKSErz66quYMWMGcnNz27pZitKuCSUdUQ1RFO8RShoCqI6EC54ze+vevTuioqKMFTKOHj2KpKSkNmqVfzS006vHkJ2djXXr1uG9995Dnz59GvOTkpJQVVWF4uJiV3kvtDsmJgbnnnsuRowYgZycHAwZMgRPP/20p9ustB2hriNe1xAg9HRENUTxh1DXEMD7OhJqGgKojoQLnnv4iYmJwYgRI7Bp06bGvLq6OmzatAnp6elt2DJ70tLSkJSU5DqG0tJSbN++vU2PwXEcZGdnY82aNXj33XeRlpbm+vuIESPQoUMHV7v37NmDgwcPeu7c19XVobKyMqTarLQeoa4jXtUQIHx0RDVEaYlQ1xDAuzoSLhoCqI6ELG284AJl1apVTmxsrLN8+XLn888/d2bNmuUkJiY6RUVFbd20Rk6ePOl88sknzieffOIAcJ588knnk08+cb766ivHcRxn4cKFTmJiovP66687O3fudCZNmuSkpaU53333XZu1+c4773QSEhKczZs3O19//XXj79tvv20s88tf/tLp27ev8+677zo7duxw0tPTnfT09DZrs+M4zgMPPODk5uY6Bw4ccHbu3Ok88MADTkREhPPXv/7Vs21W2h6v60goaojjhKaOqIYogeB1DXGc0NSRUNQQx1EdCSc8+fDjOI7z7LPPOn379nViYmKcSy+91MnLy2vrJrl47733HADGb8aMGY7j1C8x+eCDDzq9evVyYmNjnTFjxjh79uxp0zaz9gJwli1b1ljmu+++c+666y7n7LPPds466yzn2muvdb7++uu2a7TjOLfeeqvTr18/JyYmxunRo4czZsyYRrFxHG+2WfEGXtaRUNQQxwlNHVENUQLFyxriOKGpI6GoIY6jOhJORDiO45zZb0uKoiiKoiiKoihtj+d8fhRFURRFURRFUc4E+vCjKIqiKIqiKEq7QB9+FEVRFEVRFEVpF+jDj6IoiqIoiqIo7QJ9+FEURVEURVEUpV2gDz+KoiiKoiiKorQL9OFHURRFURRFUZR2gT78KIqiKIqiKIrSLtCHH0VRFEVRFEVR2gX68KMoiqIoiqIoSrtAH34URVEURVEURWkX6MOPoiiKoiiKoijtgv8fAA4AfUufvq0AAAAASUVORK5CYII=", + "image/png": "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", "text/plain": [ "
" ] diff --git a/tutorials/02-autograd-and-optimization-jax.ipynb b/tutorials/02-autograd-and-optimization-jax.ipynb index 6384561..9d92bc1 100644 --- a/tutorials/02-autograd-and-optimization-jax.ipynb +++ b/tutorials/02-autograd-and-optimization-jax.ipynb @@ -10,9 +10,18 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/yongha/miniconda3/envs/meent/lib/python3.10/site-packages/jax/_src/api_util.py:190: SyntaxWarning: Jitted function has static_argnums=(1, 2, 3, 4), but only accepts 4 positional arguments. This warning will be replaced by an error after 2022-08-20 at the earliest.\n", + " warnings.warn(f\"Jitted function has {argnums_name}={argnums}, \"\n" + ] + } + ], "source": [ "import jax\n", "import optax\n", @@ -25,7 +34,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -34,8 +43,8 @@ "# common\n", "pol = 0 # 0: TE, 1: TM\n", "\n", - "n_I = 1 # n_incidence\n", - "n_II = 1 # n_transmission\n", + "n_top = 1 # n_topncidence\n", + "n_bot = 1 # n_transmission\n", "\n", "theta = 0 * jnp.pi / 180 # angle of incidence\n", "phi = 0 * jnp.pi / 180 # angle of rotation\n", @@ -45,16 +54,14 @@ "thickness = [500., 1000.] # thickness of each layer, from top to bottom.\n", "period = [1000.] # length of the unit cell. Here it's 1D.\n", "\n", - "fourier_order = [10]\n", + "fto = [10]\n", "\n", - "type_complex = jnp.complex128\n", - "\n", - "grating_type = 0 # grating type: 0 for 1D grating without rotation (phi == 0)" + "type_complex = jnp.complex128" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -88,7 +95,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -96,18 +103,18 @@ "output_type": "stream", "text": [ "ucell gradient:\n", - "[[[-0.05115948 -0.02534053 -0.00729983 0.07873275 -0.01842706\n", - " 0.09449833 0.08780079 -0.001232 -0.03641673 -0.04781187]]\n", + "[[[-0.05114874 -0.02533636 -0.00729883 0.07873582 -0.01841166\n", + " 0.09447967 0.08779338 -0.0012304 -0.03640632 -0.04779842]]\n", "\n", - " [[-0.1795402 -0.08599972 -0.2222932 -0.19380002 0.08989283\n", - " 0.05578499 -0.04559217 -0.13589897 -0.29833958 0.12877706]]]\n", + " [[-0.17959986 -0.08614187 -0.22233491 -0.19389416 0.08978906\n", + " 0.05564021 -0.04575985 -0.13595162 -0.29835993 0.12867445]]]\n", "thickness gradient:\n", - "[Array(0.00222085, dtype=float64, weak_type=True), Array(-0.00671622, dtype=float64, weak_type=True)]\n" + "[ 0.00222043 -0.00671415]\n" ] } ], "source": [ - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, fft_type=0, improve_dft=True)\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex)\n", "\n", "pois = ['ucell', 'thickness']\n", "forward = mee.conv_solve\n", @@ -145,14 +152,14 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 3/3 [00:04<00:00, 1.59s/it]" + "100%|██████████| 3/3 [00:05<00:00, 1.90s/it]" ] }, { @@ -160,13 +167,13 @@ "output_type": "stream", "text": [ "ucell final:\n", - "[[[1.00286486 1.00145571 1.00050162 4.9966673 5.00175321 4.99580683\n", - " 4.99617408 1.00015106 1.00214675 1.00275149]]\n", + "[[[1.00286423 1.00145549 1.00050169 4.99666797 5.00175318 4.99580863\n", + " 4.99617526 1.00015109 1.00214635 1.00275083]]\n", "\n", - " [[5.00542326 4.99990074 5.00824614 5.00650358 0.99324857 4.99253641\n", - " 4.99834413 5.00367486 5.01333385 4.98859416]]]\n", + " [[5.0054235 4.99990456 5.00824621 5.0065062 0.99325253 4.99254125\n", + " 4.99835018 5.00367578 5.01333396 4.9885967 ]]]\n", "thickness final:\n", - "[Array(499.9998925, dtype=float64), Array(1000.00039494, dtype=float64)]\n" + "[ 499.99989253 1000.00039487]\n" ] }, { @@ -178,7 +185,7 @@ } ], "source": [ - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, fft_type=0, improve_dft=True)\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex)\n", "\n", "pois = ['ucell', 'thickness']\n", "forward = mee.conv_solve\n", diff --git a/tutorials/02-autograd-and-optimization-pytorch.ipynb b/tutorials/02-autograd-and-optimization-pytorch.ipynb index 891ac94..fdf789c 100644 --- a/tutorials/02-autograd-and-optimization-pytorch.ipynb +++ b/tutorials/02-autograd-and-optimization-pytorch.ipynb @@ -2,17 +2,20 @@ "cells": [ { "cell_type": "markdown", + "metadata": { + "collapsed": false + }, "source": [ "# Meent Tutorial 2\n", "## Gradient and Optimization with [PyTorch](https://pytorch.org/)" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "import torch\n", @@ -20,22 +23,22 @@ "import meent\n", "from meent.on_torch.optimizer.loss import LossDeflector\n", "from meent.on_torch.optimizer.optimizer import OptimizerTorch" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "backend = 2 # Torch\n", "\n", "pol = 0 # 0: TE, 1: TM\n", "\n", - "n_I = 1 # n_incidence\n", - "n_II = 1 # n_transmission\n", + "n_top = 1 # n_topncidence\n", + "n_bot = 1 # n_transmission\n", "\n", "theta = 0 * torch.pi / 180 # angle of incidence\n", "phi = 0 * torch.pi / 180 # angle of rotation\n", @@ -45,83 +48,81 @@ "thickness = torch.tensor([500., 1000.]) # thickness of each layer, from top to bottom.\n", "period = torch.tensor([1000.]) # length of the unit cell. Here it's 1D.\n", "\n", - "fourier_order = [10]\n", + "fto = [10]\n", "\n", "type_complex = torch.complex128\n", - "device = torch.device('cpu')\n", - "\n", - "grating_type = 0 # grating type: 0 for 1D grating without rotation (phi == 0)" - ], - "metadata": { - "collapsed": false - } + "device = torch.device('cpu')" + ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, + "metadata": { + "collapsed": false + }, "outputs": [], "source": [ "ucell_1d_m = torch.tensor([\n", " [[0, 0, 0, 1, 1, 1, 1, 0, 0, 0, ]],\n", " [[1, 1, 1, 1, 0, 1, 1, 1, 1, 1, ]],\n", " ]) * 4 + 1. # refractive index" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", + "metadata": { + "collapsed": false + }, "source": [ "## 2.1 Gradient\n", "Gradient can be calculated with the help of `torch.autograd` function.\n", "Read this for further information: [A GENTLE INTRODUCTION TO TORCH.AUTOGRAD](https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html)\n", "\n", "Gradient can be utilized to solve optimization problems. Here are examples that show couple of ways to get gradient or optimized values with or without predefined functions of meent." - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "### 2.1.1 Examples" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### 2.1.1 Examples" + ] }, { "cell_type": "markdown", - "source": [ - "Example 1: manually get gradient\n" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "Example 1: manually get gradient\n" + ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ucell gradient:\n", - "tensor([[[-0.0512, -0.0253, -0.0073, 0.0787, -0.0184, 0.0945, 0.0878,\n", + "tensor([[[-0.0511, -0.0253, -0.0073, 0.0787, -0.0184, 0.0945, 0.0878,\n", " -0.0012, -0.0364, -0.0478]],\n", "\n", - " [[-0.1795, -0.0860, -0.2223, -0.1938, 0.0899, 0.0558, -0.0456,\n", - " -0.1359, -0.2983, 0.1288]]])\n", + " [[-0.1796, -0.0861, -0.2223, -0.1939, 0.0898, 0.0556, -0.0458,\n", + " -0.1360, -0.2984, 0.1287]]], dtype=torch.float64)\n", "thickness gradient:\n", - "tensor([ 0.0022, -0.0067])\n" + "tensor([ 0.0022, -0.0067], dtype=torch.float64)\n" ] } ], "source": [ - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device, fft_type=0, improve_dft=True)\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device)\n", "\n", "mee.ucell.requires_grad = True\n", "mee.thickness.requires_grad = True\n", @@ -134,41 +135,41 @@ "print(mee.ucell.grad)\n", "print('thickness gradient:')\n", "print(mee.thickness.grad)" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "Example 2: using predefined 'grad' function in meent" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "Example 2: using predefined 'grad' function in meent" + ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "ucell gradient:\n", - "tensor([[[-0.0512, -0.0253, -0.0073, 0.0787, -0.0184, 0.0945, 0.0878,\n", + "tensor([[[-0.0511, -0.0253, -0.0073, 0.0787, -0.0184, 0.0945, 0.0878,\n", " -0.0012, -0.0364, -0.0478]],\n", "\n", - " [[-0.1795, -0.0860, -0.2223, -0.1938, 0.0899, 0.0558, -0.0456,\n", - " -0.1359, -0.2983, 0.1288]]])\n", + " [[-0.1796, -0.0861, -0.2223, -0.1939, 0.0898, 0.0556, -0.0458,\n", + " -0.1360, -0.2984, 0.1287]]], dtype=torch.float64)\n", "thickness gradient:\n", - "tensor([ 0.0022, -0.0067])\n" + "tensor([ 0.0022, -0.0067], dtype=torch.float64)\n" ] } ], "source": [ - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device, fft_type=0, improve_dft=True)\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device)\n", "\n", "pois = ['ucell', 'thickness'] # Parameter Of Interests\n", "\n", @@ -183,41 +184,41 @@ "print(grad['ucell'])\n", "print('thickness gradient:')\n", "print(grad['thickness'])" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "## 2.2 Optimization" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "## 2.2 Optimization" + ] }, { "cell_type": "markdown", - "source": [ - "### 2.2.1 Examples" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### 2.2.1 Examples" + ] }, { "cell_type": "markdown", - "source": [ - "Example 1" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "Example 1" + ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -227,15 +228,15 @@ "tensor([[[1.0029, 1.0015, 1.0005, 4.9967, 5.0018, 4.9958, 4.9962, 1.0002,\n", " 1.0021, 1.0028]],\n", "\n", - " [[5.0054, 4.9999, 5.0082, 5.0065, 0.9932, 4.9925, 4.9983, 5.0037,\n", - " 5.0133, 4.9886]]], requires_grad=True)\n", + " [[5.0054, 4.9999, 5.0082, 5.0065, 0.9933, 4.9925, 4.9984, 5.0037,\n", + " 5.0133, 4.9886]]], dtype=torch.float64, requires_grad=True)\n", "thickness final:\n", - "tensor([ 499.9999, 1000.0004], requires_grad=True)\n" + "tensor([ 499.9999, 1000.0004], dtype=torch.float64, requires_grad=True)\n" ] } ], "source": [ - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device, fft_type=0, improve_dft=True)\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device)\n", "\n", "mee.ucell.requires_grad = True\n", "mee.thickness.requires_grad = True\n", @@ -256,29 +257,29 @@ "print(mee.ucell)\n", "print('thickness final:')\n", "print(mee.thickness)" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "Example 2" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "Example 2" + ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 3/3 [00:00<00:00, 183.91it/s]" + "100%|██████████| 3/3 [00:00<00:00, 145.39it/s]" ] }, { @@ -289,10 +290,10 @@ "tensor([[[1.0029, 1.0015, 1.0005, 4.9967, 5.0018, 4.9958, 4.9962, 1.0002,\n", " 1.0021, 1.0028]],\n", "\n", - " [[5.0054, 4.9999, 5.0082, 5.0065, 0.9932, 4.9925, 4.9983, 5.0037,\n", - " 5.0133, 4.9886]]], requires_grad=True)\n", + " [[5.0054, 4.9999, 5.0082, 5.0065, 0.9933, 4.9925, 4.9984, 5.0037,\n", + " 5.0133, 4.9886]]], dtype=torch.float64, requires_grad=True)\n", "thickness final:\n", - "tensor([ 499.9999, 1000.0004], requires_grad=True)\n" + "tensor([ 499.9999, 1000.0004], dtype=torch.float64, requires_grad=True)\n" ] }, { @@ -304,7 +305,7 @@ } ], "source": [ - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device, fft_type=0, improve_dft=True)\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device)\n", "\n", "\n", "def forward_fn():\n", @@ -329,29 +330,29 @@ "print(res[0])\n", "print('thickness final:')\n", "print(res[1])" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "Example 3" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "Example 3" + ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 3/3 [00:00<00:00, 219.78it/s]" + "100%|██████████| 3/3 [00:00<00:00, 196.12it/s]" ] }, { @@ -362,10 +363,10 @@ "tensor([[[1.0029, 1.0015, 1.0005, 4.9967, 5.0018, 4.9958, 4.9962, 1.0002,\n", " 1.0021, 1.0028]],\n", "\n", - " [[5.0054, 4.9999, 5.0082, 5.0065, 0.9932, 4.9925, 4.9983, 5.0037,\n", - " 5.0133, 4.9886]]], requires_grad=True)\n", + " [[5.0054, 4.9999, 5.0082, 5.0065, 0.9933, 4.9925, 4.9984, 5.0037,\n", + " 5.0133, 4.9886]]], dtype=torch.float64, requires_grad=True)\n", "thickness final:\n", - "tensor([ 499.9999, 1000.0004], requires_grad=True)\n" + "tensor([ 499.9999, 1000.0004], dtype=torch.float64, requires_grad=True)\n" ] }, { @@ -377,7 +378,7 @@ } ], "source": [ - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi, fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device, fft_type=0, improve_dft=True)\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi, fto=fto, wavelength=wavelength, period=period, ucell=ucell_1d_m, thickness=thickness, type_complex=type_complex, device=device)\n", "\n", "pois = ['ucell', 'thickness']\n", "\n", @@ -395,10 +396,7 @@ "print(res[0])\n", "print('thickness final:')\n", "print(res[1])" - ], - "metadata": { - "collapsed": false - } + ] } ], "metadata": { @@ -410,14 +408,14 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" + "pygments_lexer": "ipython3", + "version": "3.10.10" } }, "nbformat": 4, diff --git a/tutorials/03-device-and-datatype-jax.ipynb b/tutorials/03-device-and-datatype-jax.ipynb index a0e6aef..cfb89c1 100644 --- a/tutorials/03-device-and-datatype-jax.ipynb +++ b/tutorials/03-device-and-datatype-jax.ipynb @@ -15,8 +15,8 @@ "execution_count": 1, "metadata": { "ExecuteTime": { - "start_time": "2023-04-17T20:56:52.161568Z", - "end_time": "2023-04-17T20:56:52.649404Z" + "end_time": "2023-04-17T20:56:52.649404Z", + "start_time": "2023-04-17T20:56:52.161568Z" } }, "outputs": [], @@ -24,7 +24,7 @@ "import os\n", "\n", "os.environ[\"CUDA_DEVICE_ORDER\"] = \"PCI_BUS_ID\"\n", - "os.environ[\"CUDA_VISIBLE_DEVICES\"] = '1'\n", + "os.environ[\"CUDA_VISIBLE_DEVICES\"] = '0'\n", "\n", "import time\n", "import numpy as np\n", @@ -39,11 +39,10 @@ "outputs": [], "source": [ "# experiment options\n", - "grating_type = 2\n", "pol = 0 # 0: TE, 1: TM\n", "\n", - "n_I = 1 # n_incidence\n", - "n_II = 1 # n_transmission\n", + "n_top = 1 # n_topncidence\n", + "n_bot = 1 # n_transmission\n", "\n", "theta = 20 * np.pi / 180\n", "phi = 50 * np.pi / 180\n", @@ -53,8 +52,8 @@ "thickness = [500]\n", "period = [1000, 1000]\n", "\n", - "fourier_order = [15, 15]\n", - "# fourier_order = [3, 3]\n", + "fto = [15, 15]\n", + "# fto = [3, 3]\n", "res_x, res_y, res_z = 20, 20, 20\n", "\n", "ucell = np.array([\n", @@ -96,8 +95,8 @@ "backend = 1 # JaxMeent\n", "device = 0 # CPU;\n", "dtype = 0\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", " " @@ -118,8 +117,8 @@ "source": [ "backend = 1 # JaxMeent\n", "\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, type_complex=dtype)\n", "mee.device = 0" ] @@ -133,12 +132,12 @@ }, { "cell_type": "markdown", - "source": [ - "## JAX" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "## JAX" + ] }, { "cell_type": "markdown", @@ -179,8 +178,8 @@ "backend = 1 # JaxMeent\n", "device = 0 # CPU;\n", "dtype = 0\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -237,8 +236,8 @@ "backend = 1 # JaxMeent\n", "device = 1 # GPU;\n", "dtype = 0\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -268,16 +267,19 @@ }, { "cell_type": "markdown", - "source": [ - "### CPU, 32 bit" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### CPU, 32 bit" + ] }, { "cell_type": "code", "execution_count": 7, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stderr", @@ -306,8 +308,8 @@ "backend = 1 # JaxMeent\n", "device = 0 # CPU;\n", "dtype = 1 # 32bit\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -333,23 +335,23 @@ "t0 = time.time()\n", "de_ri, de_ti, field_cell = mee.conv_solve_field(res_x=res_x, res_y=res_y, res_z=res_z)\n", "print(f'time for efficiency and field in one step, 2nd: ', time.time() - t0)\n" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "### GPU, 32 bit" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### GPU, 32 bit" + ] }, { "cell_type": "code", "execution_count": 8, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -368,8 +370,8 @@ "backend = 1 # JaxMeent\n", "device = 1 # CPU;\n", "dtype = 1 # 32bit\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -395,10 +397,7 @@ "t0 = time.time()\n", "de_ri, de_ti, field_cell = mee.conv_solve_field(res_x=res_x, res_y=res_y, res_z=res_z)\n", "print(f'time for efficiency and field in one step, 2nd: ', time.time() - t0)\n" - ], - "metadata": { - "collapsed": false - } + ] } ], "metadata": { diff --git a/tutorials/03-device-and-datatype-torch.ipynb b/tutorials/03-device-and-datatype-torch.ipynb index 36ae969..ef2b106 100644 --- a/tutorials/03-device-and-datatype-torch.ipynb +++ b/tutorials/03-device-and-datatype-torch.ipynb @@ -15,8 +15,8 @@ "execution_count": 1, "metadata": { "ExecuteTime": { - "start_time": "2023-04-17T20:56:52.161568Z", - "end_time": "2023-04-17T20:56:52.649404Z" + "end_time": "2023-04-17T20:56:52.649404Z", + "start_time": "2023-04-17T20:56:52.161568Z" } }, "outputs": [], @@ -24,7 +24,7 @@ "import os\n", "\n", "os.environ[\"CUDA_DEVICE_ORDER\"] = \"PCI_BUS_ID\"\n", - "os.environ[\"CUDA_VISIBLE_DEVICES\"] = '2'\n", + "os.environ[\"CUDA_VISIBLE_DEVICES\"] = '0'\n", "\n", "import time\n", "import numpy as np\n", @@ -39,11 +39,10 @@ "outputs": [], "source": [ "# experiment options\n", - "grating_type = 2\n", "pol = 0 # 0: TE, 1: TM\n", "\n", - "n_I = 1 # n_incidence\n", - "n_II = 1 # n_transmission\n", + "n_top = 1 # n_topncidence\n", + "n_bot = 1 # n_transmission\n", "\n", "theta = 20 * np.pi / 180\n", "phi = 50 * np.pi / 180\n", @@ -53,7 +52,7 @@ "thickness = [500]\n", "period = [1000, 1000]\n", "\n", - "fourier_order = [15, 15]\n", + "fto = [15, 15]\n", "res_x, res_y, res_z = 20, 20, 20\n", "\n", "ucell = np.array([\n", @@ -95,8 +94,8 @@ "backend = 2 # TorchMeent\n", "device = 0 # CPU;\n", "dtype = 0\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", " " @@ -117,8 +116,8 @@ "source": [ "backend = 2 # TorchMeent\n", "\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, type_complex=dtype)\n", "mee.device = 0" ] @@ -132,25 +131,28 @@ }, { "cell_type": "markdown", - "source": [ - "## PyTorch" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "## PyTorch" + ] }, { "cell_type": "markdown", - "source": [ - "### CPU, 64 bit" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### CPU, 64 bit" + ] }, { "cell_type": "code", "execution_count": 5, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stderr", @@ -181,8 +183,8 @@ "backend = 2 # TorchMeent\n", "device = 0 # CPU;\n", "dtype = 0\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -208,23 +210,23 @@ "t0 = time.time()\n", "de_ri, de_ti, field_cell = mee.conv_solve_field(res_x=res_x, res_y=res_y, res_z=res_z)\n", "print(f'time for efficiency and field in one step, 2nd: ', time.time() - t0)\n" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "### GPU, 64 bit" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### GPU, 64 bit" + ] }, { "cell_type": "code", "execution_count": 6, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -243,8 +245,8 @@ "backend = 2 # TorchMeent\n", "device = 1 # GPU;\n", "dtype = 0\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -270,23 +272,23 @@ "t0 = time.time()\n", "de_ri, de_ti, field_cell = mee.conv_solve_field(res_x=res_x, res_y=res_y, res_z=res_z)\n", "print(f'time for efficiency and field in one step, 2nd: ', time.time() - t0)\n" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "### CPU, 32 bit" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### CPU, 32 bit" + ] }, { "cell_type": "code", "execution_count": 7, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -305,8 +307,8 @@ "backend = 2 # TorchMeent\n", "device = 0 # CPU;\n", "dtype = 1 # 32bit\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -332,23 +334,23 @@ "t0 = time.time()\n", "de_ri, de_ti, field_cell = mee.conv_solve_field(res_x=res_x, res_y=res_y, res_z=res_z)\n", "print(f'time for efficiency and field in one step, 2nd: ', time.time() - t0)\n" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", - "source": [ - "### GPU, 32 bit" - ], "metadata": { "collapsed": false - } + }, + "source": [ + "### GPU, 32 bit" + ] }, { "cell_type": "code", "execution_count": 8, + "metadata": { + "collapsed": false + }, "outputs": [ { "name": "stdout", @@ -367,8 +369,8 @@ "backend = 2 # TorchMeent\n", "device = 1 # CPU;\n", "dtype = 1 # 32bit\n", - "mee = meent.call_mee(backend=backend, grating_type=grating_type, pol=pol, n_I=n_I, n_II=n_II, theta=theta, phi=phi,\n", - " fourier_order=fourier_order, wavelength=wavelength, period=period, ucell=ucell,\n", + "mee = meent.call_mee(backend=backend, pol=pol, n_top=n_top, n_bot=n_bot, theta=theta, phi=phi,\n", + " fto=fto, wavelength=wavelength, period=period, ucell=ucell,\n", " thickness=thickness, device=device, type_complex=dtype)\n", "\n", "t0 = time.time()\n", @@ -394,19 +396,16 @@ "t0 = time.time()\n", "de_ri, de_ti, field_cell = mee.conv_solve_field(res_x=res_x, res_y=res_y, res_z=res_z)\n", "print(f'time for efficiency and field in one step, 2nd: ', time.time() - t0)\n" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 8, - "outputs": [], - "source": [], "metadata": { "collapsed": false - } + }, + "outputs": [], + "source": [] } ], "metadata": { From b60e9429c7ad9b915f7e9629912723bfe5114069 Mon Sep 17 00:00:00 2001 From: yonghakim Date: Fri, 9 Aug 2024 01:00:13 +0900 Subject: [PATCH 15/15] Cleaning. Resolving TODOs. --- meent/on_numpy/emsolver/transfer_method.py | 3 +- meent/on_torch/emsolver/_base.py | 191 +-------- meent/on_torch/emsolver/convolution_matrix.py | 252 ------------ meent/on_torch/emsolver/field_distribution.py | 387 +----------------- meent/on_torch/emsolver/rcwa.py | 14 +- meent/on_torch/emsolver/transfer_method.py | 6 +- meent/on_torch/modeler/modeling.py | 4 +- 7 files changed, 28 insertions(+), 829 deletions(-) diff --git a/meent/on_numpy/emsolver/transfer_method.py b/meent/on_numpy/emsolver/transfer_method.py index 3ed76e1..e50c68f 100644 --- a/meent/on_numpy/emsolver/transfer_method.py +++ b/meent/on_numpy/emsolver/transfer_method.py @@ -93,12 +93,11 @@ def transfer_1d_4(pol, F, G, T, kz_top, kz_bot, theta, n_top, n_bot, type_comple delta_i0[ff_xy // 2] = 1 if pol == 0: # TE - # TODO: check sign of H inc_term = 1j * n_top * np.cos(theta) * delta_i0 T1 = np.linalg.inv(G + 1j * Kz_top @ F) @ (1j * Kz_top @ delta_i0 + inc_term) elif pol == 1: # TM - inc_term = 1j * delta_i0 * np.cos(theta) / n_top # tODO: inc term? + inc_term = 1j * delta_i0 * np.cos(theta) / n_top T1 = np.linalg.inv(G + 1j * Kz_top / (n_top ** 2) @ F) @ (1j * Kz_top / (n_top ** 2) @ delta_i0 + inc_term) # T1 = np.linalg.inv(G + 1j * YZ_I @ F) @ (1j * YZ_I @ delta_i0 + inc_term) diff --git a/meent/on_torch/emsolver/_base.py b/meent/on_torch/emsolver/_base.py index 1779a73..ca72c35 100644 --- a/meent/on_torch/emsolver/_base.py +++ b/meent/on_torch/emsolver/_base.py @@ -54,8 +54,8 @@ def __init__(self, n_top=1., n_bot=1., theta=0., phi=0., psi=None, pol=0., fto=( self.layer_info_list = [] self.T1 = None - self.rayleigh_r = None # TODO - self.rayleigh_t = None + self.rayleigh_R = None # TODO: other bds + self.rayleigh_T = None @property def device(self): @@ -72,16 +72,6 @@ def device(self, device): else: raise ValueError - # TODO: need this? - # try: - # self._theta = self._theta.to(self.device) - # self._phi = self._phi.to(self.device) - # self._psi = self._psi.to(self.device) - # self.thickness = self._thickness.to(self.device) - # except AssertionError as e: - # print(f'{e}. Get back to CPU') - # self._device = torch.device('cpu') - @property def type_complex(self): return self._type_complex @@ -95,16 +85,6 @@ def type_complex(self, type_complex): else: raise ValueError('type_complex') - # TODO: need this? - # self._type_float = torch.float64 if self.type_complex is not torch.complex64 else torch.float32 - # self._type_int = torch.int64 if self.type_complex is not torch.complex64 else torch.int32 - # self._theta = self._theta.to(self.type_float) - # self._phi = self._phi.to(self.type_float) - # self._psi = self._psi.to(self.type_float) - - # self.fto = self._fto - # self.thickness = self._thickness - @property def type_float(self): return self._type_float @@ -229,22 +209,6 @@ def thickness(self, thickness): else: raise ValueError - # def get_kx_vector(self, wavelength): - # - # k0 = 2 * torch.pi / wavelength - # fourier_indices_x = torch.arange(-self.fto[0], self.fto[0] + 1, device=self.device, - # dtype=self.type_float) - # if self.grating_type == 0: - # kx = k0 * (self.n_top * torch.sin(self.theta) + fourier_indices_x * (wavelength / self.period[0]) - # ).type(self.type_complex) - # else: - # kx = k0 * (self.n_top * torch.sin(self.theta) * torch.cos(self.phi) + fourier_indices_x * ( - # wavelength / self.period[0])).type(self.type_complex) - # - # # kx = torch.where(kx == 0, self.perturbation, kx) - # - # return kx - def get_kx_ky_vector(self, wavelength): fto_x_range = torch.arange(-self.fto[0], self.fto[0] + 1, device=self.device, @@ -264,7 +228,7 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): self.layer_info_list = [] self.T1 = None - self.rayleigh_r, self.rayleigh_t = [], [] # tODO + self.rayleigh_R, self.rayleigh_T = [], [] ff_x = self.fto[0] * 2 + 1 @@ -275,10 +239,6 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): kz_top, kz_bot, F, G, T \ = transfer_1d_1(self.pol, ff_x, kx, self.n_top, self.n_bot, device=self.device, type_complex=self.type_complex) - # kx, Kx, k_I_z, k_II_z, f, YZ_I, g, inc_term, T \ - # = transfer_1d_1(ff_x, self.pol, k0, self.n_top, self.n_bot, self.kx, - # self.theta, delta_i0, self.fto, - # device=self.device, type_complex=self.type_complex) elif self.connecting_algo == 'SMM': Kx, Wg, Vg, Kzg, Wr, Vr, Kzr, Wt, Vt, Kzt, Ar, Br, Sg \ = scattering_1d_1(k0, self.n_top, self.n_bot, self.theta, self.phi, fourier_indices, self.period, @@ -295,29 +255,6 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): d = self.thickness[layer_index] - # if self.pol == 0: - # E_conv_i = None - # A = Kx ** 2 - E_conv - # Eig.perturbation = self.perturbation - # eigenvalues, W = Eig.apply(A) - # q = eigenvalues ** 0.5 - # Q = torch.diag(q) - # V = W @ Q - # - # elif self.pol == 1: - # E_conv_i = torch.linalg.inv(E_conv) - # B = Kx @ E_conv_i @ Kx - torch.eye(E_conv.shape[0], device=self.device, dtype=self.type_complex) - # # o_E_conv_i = torch.linalg.inv(o_E_conv) - # - # Eig.perturbation = self.perturbation - # eigenvalues, W = Eig.apply(E_conv @ B) - # q = eigenvalues ** 0.5 - # Q = torch.diag(q) - # # V = o_E_conv @ W @ Q - # V = E_conv_i @ W @ Q - # - # else: - # raise ValueError if self.connecting_algo == 'TMM': W, V, q = transfer_1d_2(self.pol, kx, epx_conv, epy_conv, epz_conv_i, device=self.device, type_complex=self.type_complex) @@ -331,22 +268,12 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): else: raise ValueError - # if self.algo == 'TMM': - # X, f, g, T, a_i, b = transfer_1d_2(k0, q, d, W, V, f, g, self.fto, T, - # device=self.device, type_complex=self.type_complex) - # - # layer_info = [E_conv_i, q, W, X, a_i, b, d] - # self.layer_info_list.append(layer_info) - # - # elif self.algo == 'SMM': - # A, B, S_dict, Sg = scattering_1d_2(W, Wg, V, Vg, d, k0, Q, Sg) - # else: - # raise ValueError - if self.connecting_algo == 'TMM': - de_ri, de_ti, T1 = transfer_1d_4(self.pol, F, G, T, kz_top, kz_bot, self.theta, self.n_top, self.n_bot, + de_ri, de_ti, T1, [R], [T] = transfer_1d_4(self.pol, F, G, T, kz_top, kz_bot, self.theta, self.n_top, self.n_bot, device=self.device, type_complex=self.type_complex) self.T1 = T1 + self.rayleigh_R = [R] + self.rayleigh_T = [T] elif self.connecting_algo == 'SMM': de_ri, de_ti = scattering_1d_3(Wt, Wg, Vt, Vg, Sg, self.ff, Wr, self.fto, Kzr, Kzt, @@ -354,93 +281,13 @@ def solve_1d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): else: raise ValueError - return de_ri, de_ti, self.rayleigh_r, self.rayleigh_t, self.layer_info_list, self.T1 - - def solve_1d_conical(self, wavelength, E_conv_all, o_E_conv_all): - """ - Deprecated. - Args: - wavelength: - E_conv_all: - o_E_conv_all: - - Returns: - - """ - self.layer_info_list = [] - self.T1 = None - self.rayleigh_r, self.rayleigh_t = [], [] - - # fourier_indices = torch.arange(-self.fto, self.fto + 1, device=self.device) - ff = self.fto[0] * 2 + 1 - - delta_i0 = torch.zeros(ff, device=self.device, dtype=self.type_complex) - delta_i0[self.fto[0]] = 1 - - k0 = 2 * torch.pi / wavelength - - if self.algo == 'TMM': - Kx, ky, k_I_z, k_II_z, varphi, Y_I, Y_II, Z_I, Z_II, big_F, big_G, big_T \ - = transfer_1d_conical_1(ff, k0, self.n_top, self.n_bot, self.kx_vector, self.theta, self.phi, - device=self.device, type_complex=self.type_complex) - elif self.algo == 'SMM': - print('SMM for 1D conical is not implemented') - return torch.nan, torch.nan - else: - raise ValueError - - count = min(len(E_conv_all), len(o_E_conv_all), len(self.thickness)) - - # From the last layer - for layer_index in range(count)[::-1]: - - E_conv = E_conv_all[layer_index] - # o_E_conv = o_E_conv_all[layer_index] - o_E_conv = None - - d = self.thickness[layer_index] - - E_conv_i = torch.linalg.inv(E_conv) - # o_E_conv_i = torch.linalg.inv(o_E_conv) - o_E_conv_i = None - - if self.algo == 'TMM': - big_X, big_F, big_G, big_T, big_A_i, big_B, W_1, W_2, V_11, V_12, V_21, V_22, q_1, q_2 \ - = transfer_1d_conical_2(k0, Kx, ky, E_conv, E_conv_i, o_E_conv_i, ff, d, - varphi, big_F, big_G, big_T, - device=self.device, type_complex=self.type_complex) - - layer_info = [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] - self.layer_info_list.append(layer_info) - - elif self.algo == 'SMM': - raise ValueError - else: - raise ValueError - - if self.algo == 'TMM': - de_ri, de_ti, big_T1, self.rayleigh_r, self.rayleigh_t = transfer_1d_conical_3(big_F, big_G, big_T, Z_I, - Y_I, self.psi, self.theta, - ff, - delta_i0, k_I_z, k0, - self.n_top, self.n_bot, - k_II_z, - device=self.device, - type_complex=self.type_complex) - self.T1 = big_T1 - - elif self.algo == 'SMM': - raise ValueError - else: - raise ValueError - - return de_ri, de_ti, self.rayleigh_r, self.rayleigh_t, self.layer_info_list, self.T1 + return de_ri, de_ti, self.rayleigh_R, self.rayleigh_T, self.layer_info_list, self.T1 def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): self.layer_info_list = [] self.T1 = None - self.rayleigh_r, self.rayleigh_t = [], [] + self.rayleigh_R, self.rayleigh_T = [], [] ff_x = self.fto[0] * 2 + 1 ff_y = self.fto[1] * 2 + 1 @@ -472,20 +319,10 @@ def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): d = self.thickness[layer_index] if self.connecting_algo == 'TMM': - # W, V, q = transfer_2d_wv(ff_xy, Kx, E_conv_i, Ky, o_E_conv_i, E_conv, - # device=self.device, type_complex=self.type_complex) W, V, q = transfer_2d_2(kx, ky, epx_conv, epy_conv, epz_conv_i, device=self.device, type_complex=self.type_complex) - # big_X, big_F, big_G, big_T, big_A_i, big_B, \ - # W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22 \ - # = transfer_2d_2(k0, d, W, V, center, q, varphi, I, O, big_F, big_G, big_T, device=self.device, - # type_complex=self.type_complex) - # - # layer_info = [E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] - # self.layer_info_list.append(layer_info) - big_X, big_F, big_G, big_T, big_A_i, big_B, \ = transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, device=self.device, type_complex=self.type_complex) @@ -499,15 +336,13 @@ def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): else: raise ValueError - if self.connecting_algo == 'TMM': # TODO: cleaning - # de_ri, de_ti, big_T1, self.rayleigh_r, self.rayleigh_t = transfer_2d_3(center, big_F, big_G, big_T, Z_I, Y_I, self.psi, self.theta, ff_xy, - # delta_i0, k_I_z, k0, self.n_top, self.n_bot, k_II_z, device=self.device, - # type_complex=self.type_complex) - # TODO: AA and BB - de_ri, de_ti, big_T1, AA, BB = transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, self.psi, self.theta, + if self.connecting_algo == 'TMM': + de_ri, de_ti, big_T1, [R_s, R_p], [T_s, T_p], = transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, self.psi, self.theta, self.n_top, self.n_bot, device=self.device, type_complex=self.type_complex) self.T1 = big_T1 + self.rayleigh_R = [R_s, R_p] + self.rayleigh_T = [T_s, T_p] elif self.connecting_algo == 'SMM': de_ri, de_ti = scattering_2d_3(Wt, Wg, Vt, Vg, Sg, Wr, Kx, Ky, Kzr, Kzt, kz_inc, self.n_top, @@ -518,4 +353,4 @@ def solve_2d(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): de_ri = de_ri.reshape((ff_y, ff_x)).T de_ti = de_ti.reshape((ff_y, ff_x)).T - return de_ri, de_ti, self.rayleigh_r, self.rayleigh_t, self.layer_info_list, self.T1 + return de_ri, de_ti, self.rayleigh_R, self.rayleigh_T, self.layer_info_list, self.T1 diff --git a/meent/on_torch/emsolver/convolution_matrix.py b/meent/on_torch/emsolver/convolution_matrix.py index be14dc5..c5a74e8 100644 --- a/meent/on_torch/emsolver/convolution_matrix.py +++ b/meent/on_torch/emsolver/convolution_matrix.py @@ -111,116 +111,6 @@ def to_conv_mat_vector(ucell_info_list, fto_x, fto_y, device=torch.device('cpu') return epx_conv_all, epy_conv_all, epz_conv_i_all - # ff_x = 2 * fto_x + 1 - # ff_y = 2 * fto_y + 1 - # - # e_conv_all = torch.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y), device=device).type(type_complex) - # o_e_conv_all = torch.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y), device=device).type(type_complex) - # - # # 2D - # for i, (cell, x_list, y_list) in enumerate(ucell_info_list): - # - # f_coeffs = fft_piecewise_constant(cell**2, x_list, y_list, - # fto_x, fto_y, device=device, type_complex=type_complex) - # o_f_coeffs = fft_piecewise_constant(1 / cell**2, x_list, y_list, - # fto_x, fto_y, device=device, type_complex=type_complex) - # - # center = torch.tensor(f_coeffs.shape, device=device) // 2 - # - # conv_idx_y = torch.arange(-ff_y + 1, ff_y, 1, device=device) - # conv_idx_y = circulant(conv_idx_y, device=device) - # conv_i = conv_idx_y.repeat_interleave(ff_x, dim=1) - # conv_i = conv_i.repeat_interleave(ff_x, dim=0) - # - # conv_idx_x = torch.arange(-ff_x + 1, ff_x, 1, device=device) - # conv_idx_x = circulant(conv_idx_x, device=device) - # conv_j = conv_idx_x.repeat(ff_y, ff_y) - # - # e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] - # o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] - # - # e_conv_all[i] = e_conv - # o_e_conv_all[i] = o_e_conv - # return e_conv_all, o_e_conv_all - - -# TODO: Fourier analysis - Analytic -# def fs_rectangle(cx, cy, lx, ly, pmtvy, fto, period): -# Px, Py = period -# fourier_x, fourier_y = fto -# Nx_vector = torch.arange(-2 * fourier_x, 2 * fourier_x + 1, 1).type(torch.complex128) -# Ny_vector = torch.arange(-2 * fourier_y, 2 * fourier_y + 1, 1).type(torch.complex128) -# -# # Nx_vector = torch.arange(-fourier_x, fourier_x + 1, 1).type(torch.complex128) * torch.cos(torch.tensor(torch.pi/4)) -# # Ny_vector = torch.arange(-fourier_y, fourier_y + 1, 1).type(torch.complex128) * torch.sin(torch.tensor(torch.pi/4)) -# -# # c = n_index * lx * ly / Px / Py * torch.sinc(torch.pi * ly / Py * Ny_vector.reshape((-1, 1))) @ torch.sinc(torch.pi * lx / Px * Nx_vector.reshape((1, -1))) -# c = pmtvy * lx * ly / Px / Py * torch.sinc(ly / Py * Ny_vector.reshape((-1, 1))) @ torch.sinc( -# lx / Px * Nx_vector.reshape((1, -1))) -# -# # c = c * (torch.exp(-1j * 2 * torch.pi * cy / Py * Ny_vector.reshape((-1, 1))) @ torch.exp(-1j * 2 * torch.pi * cx / Px * Nx_vector.reshape((1, -1)))) -# c = c * (torch.exp(-1j * 2 * torch.pi * cy / Py * Ny_vector.reshape((-1, 1))) @ torch.exp( -# -1j * 2 * torch.pi * cx / Px * Nx_vector.reshape((1, -1)))) -# -# return c.T -# -# -# def to_conv_mat_continuous_vector_sinc(ucell_info_list, fto_x, fto_y, device=torch.device('cpu'), -# type_complex=torch.complex128): -# ff_x = 2 * fto_x + 1 -# ff_y = 2 * fto_y + 1 -# -# e_conv_all = torch.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).type(type_complex) -# o_e_conv_all = torch.zeros((len(ucell_info_list), ff_x * ff_y, ff_x * ff_y)).type(type_complex) -# -# # 2D -# for i, ucell_info in enumerate(ucell_info_list): -# ucell_layer, x_list, y_list = ucell_info -# ucell_layer = ucell_layer ** 2 -# # ucell_layer = torch.tensor(ucell_layer, dtype=type_complex) if type(ucell_layer) != torch.Tensor else ucell_layer -# # x_list = torch.tensor(x_list, dtype=type_complex) if type(x_list) != torch.Tensor else x_list -# # y_list = torch.tensor(y_list, dtype=type_complex) if type(y_list) != torch.Tensor else y_list -# -# f_coeffs = fft_piecewise_constant_vector(ucell_layer, x_list, y_list, -# fto_x, fto_y, type_complex=type_complex) -# o_f_coeffs = fft_piecewise_constant_vector(1/ucell_layer, x_list, y_list, -# fto_x, fto_y, type_complex=type_complex) -# -# import seaborn as sns -# import matplotlib.pyplot as plt -# sns.heatmap(f_coeffs.detach().real) -# plt.show() -# sns.heatmap(o_f_coeffs.detach().real) -# plt.show() -# -# sns.heatmap(f_coeffs.detach().imag) -# plt.show() -# sns.heatmap(o_f_coeffs.detach().imag) -# plt.show() -# -# # f_coeffs = fs_rectangle() -# -# -# center = torch.tensor(f_coeffs.shape, device=device) // 2 -# # center = torch.div(torch.tensor(f_coeffs.shape, device=device), 2, rounding_mode='trunc') -# # center = torch.tensor(center, device=device) -# -# conv_idx_y = torch.arange(-ff_y + 1, ff_y, 1, device=device) -# conv_idx_y = circulant(conv_idx_y, device=device) -# conv_i = conv_idx_y.repeat_interleave(ff_x, dim=1) -# conv_i = conv_i.repeat_interleave(ff_x, dim=0) -# -# conv_idx_x = torch.arange(-ff_x + 1, ff_x, 1, device=device) -# conv_idx_x = circulant(conv_idx_x, device=device) -# conv_j = conv_idx_x.repeat(ff_y, ff_y) -# -# e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] -# o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] -# -# e_conv_all[i] = e_conv -# o_e_conv_all[i] = o_e_conv -# return e_conv_all, o_e_conv_all - def to_conv_mat_raster_continuous(ucell, fto_x, fto_y, device=torch.device('cpu'), type_complex=torch.complex128): @@ -244,58 +134,6 @@ def to_conv_mat_raster_continuous(ucell, fto_x, fto_y, device=torch.device('cpu' return epx_conv_all, epy_conv_all, epz_conv_i_all - # if ucell_pmt.shape[1] == 1: # 1D - # ff = 2 * fto_x + 1 - # - # - # for i, layer in enumerate(ucell_pmt): - # - # cell, x, y = cell_compression(layer, device=device, type_complex=type_complex) - # - # f_coeffs = fft_piecewise_constant(cell, x, y, fto_x, fto_y, device=device, type_complex=type_complex) - # o_f_coeffs = fft_piecewise_constant(1 / cell, x, y, fto_x, fto_y, device=device, type_complex=type_complex) - # - # center = torch.tensor(f_coeffs.shape, device=device) // 2 - # conv_idx = torch.arange(-ff + 1, ff, 1, device=device) - # conv_idx = circulant(conv_idx, device=device) - # e_conv = f_coeffs[center[0], center[1] + conv_idx] - # o_e_conv = o_f_coeffs[center[0], center[1] + conv_idx] - # e_conv_all[i] = e_conv - # o_e_conv_all[i] = o_e_conv - # - # else: # 2D - # ff_x = 2 * fto_x + 1 - # ff_y = 2 * fto_y + 1 - # - # e_conv_all = torch.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y), device=device).type(type_complex) - # o_e_conv_all = torch.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y), device=device).type(type_complex) - # - # for i, layer in enumerate(ucell_pmt): - # - # cell, x, y = cell_compression(layer, device=device, type_complex=type_complex) - # - # f_coeffs = fft_piecewise_constant(cell, x, y, fto_x, fto_y, device=device, - # type_complex=type_complex) - # o_f_coeffs = fft_piecewise_constant(1 / cell, x, y, fto_x, fto_y, device=device, - # type_complex=type_complex) - # - # center = torch.tensor(f_coeffs.shape, device=device) // 2 - # - # conv_idx_y = torch.arange(-ff_y + 1, ff_y, 1, device=device) - # conv_idx_y = circulant(conv_idx_y, device=device) - # conv_i = conv_idx_y.repeat_interleave(ff_x, dim=1) - # conv_i = conv_i.repeat_interleave(ff_x, dim=0) - # - # conv_idx_x = torch.arange(-ff_x + 1, ff_x, 1, device=device) - # conv_idx_x = circulant(conv_idx_x, device=device) - # conv_j = conv_idx_x.repeat(ff_y, ff_y) - # - # e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] - # o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] - # e_conv_all[i] = e_conv - # o_e_conv_all[i] = o_e_conv - # return e_conv_all, o_e_conv_all - def to_conv_mat_raster_discrete(ucell, fto_x, fto_y, device=None, type_complex=torch.complex128, enhanced_dfs=True): @@ -335,93 +173,3 @@ def to_conv_mat_raster_discrete(ucell, fto_x, fto_y, device=None, type_complex=t epz_conv_i_all[i] = torch.linalg.inv(epz_conv) return epx_conv_all, epy_conv_all, epz_conv_i_all - -#TODO: cleaning -def to_conv_mat_raster_discrete_(ucell, fourier_order_x, fourier_order_y, device=torch.device('cpu'), type_complex=torch.complex128, - improve_dft=True): - ucell_pmt = ucell ** 2 - - if ucell_pmt.shape[1] == 1: # 1D - ff = 2 * fourier_order_x + 1 - e_conv_all = torch.zeros((ucell_pmt.shape[0], ff, ff), device=device).type(type_complex) - o_e_conv_all = torch.zeros((ucell_pmt.shape[0], ff, ff), device=device).type(type_complex) - if improve_dft: - minimum_pattern_size = 2 * ff * ucell_pmt.shape[2] - else: - minimum_pattern_size = 2 * ff - - for i, layer in enumerate(ucell_pmt): - n = minimum_pattern_size // layer.shape[1] - layer = layer.repeat_interleave(n + 1, axis=1) - f_coeffs = torch.fft.fftshift(torch.fft.fft(layer / layer.numel()).type(type_complex)) - o_f_coeffs = torch.fft.fftshift(torch.fft.fft(1/layer / layer.numel()).type(type_complex)) - center = torch.tensor(f_coeffs.shape, device=device) // 2 - # center = torch.div(torch.tensor(f_coeffs.shape, device=device), 2, rounding_mode='trunc') - # center = torch.tensor(center, device=device) - conv_idx = torch.arange(-ff + 1, ff, 1, device=device) - conv_idx = circulant(conv_idx, device=device) - e_conv = f_coeffs[center[0], center[1] + conv_idx] - o_e_conv = o_f_coeffs[center[0], center[1] + conv_idx] - e_conv_all[i] = e_conv - o_e_conv_all[i] = o_e_conv - - else: # 2D - ff_x = 2 * fourier_order_x + 1 - ff_y = 2 * fourier_order_y + 1 - - e_conv_all = torch.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y), device=device).type(type_complex) - o_e_conv_all = torch.zeros((ucell_pmt.shape[0], ff_x * ff_y, ff_x * ff_y), device=device).type(type_complex) - - if improve_dft: - minimum_pattern_size_y = 2 * ff_y * ucell_pmt.shape[1] - minimum_pattern_size_x = 2 * ff_x * ucell_pmt.shape[2] - else: - minimum_pattern_size_y = 2 * ff_y - minimum_pattern_size_x = 2 * ff_x - # e.g., 8 bytes * (40*500) * (40*500) / 1E6 = 3200 MB = 3.2 GB - - for i, layer in enumerate(ucell_pmt): - if layer.shape[0] < minimum_pattern_size_y: - # n = torch.div(minimum_pattern_size_y, layer.shape[0], rounding_mode='trunc') - n = minimum_pattern_size_y // layer.shape[0] - n = torch.tensor(n, device=device) - - layer = layer.repeat_interleave(n + 1, axis=0) - if layer.shape[1] < minimum_pattern_size_x: - # n = torch.div(minimum_pattern_size_x, layer.shape[1], rounding_mode='trunc') - n = minimum_pattern_size_x // layer.shape[1] - n = torch.tensor(n, device=device) - layer = layer.repeat_interleave(n + 1, axis=1) - - f_coeffs = torch.fft.fftshift(torch.fft.fft2(layer / layer.numel())) - o_f_coeffs = torch.fft.fftshift(torch.fft.fft2(1/layer / layer.numel())) - center = torch.tensor(f_coeffs.shape, device=device) // 2 - - conv_idx_y = torch.arange(-ff_y + 1, ff_y, 1, device=device) - conv_idx_y = circulant(conv_idx_y, device=device) - conv_i = conv_idx_y.repeat_interleave(ff_x, dim=1) - conv_i = conv_i.repeat_interleave(ff_x, dim=0) - - conv_idx_x = torch.arange(-ff_x + 1, ff_x, 1, device=device) - conv_idx_x = circulant(conv_idx_x, device=device) - conv_j = conv_idx_x.repeat(ff_y, ff_y) - - e_conv = f_coeffs[center[0] + conv_i, center[1] + conv_j] - o_e_conv = o_f_coeffs[center[0] + conv_i, center[1] + conv_j] - e_conv_all[i] = e_conv - o_e_conv_all[i] = o_e_conv - return e_conv_all, o_e_conv_all - - -# def circulant(c, device=torch.device('cpu')): -# -# center = c.shape[0] // 2 -# circ = torch.zeros((center + 1, center + 1), device=device).type(torch.long) -# -# for r in range(center+1): -# idx = torch.arange(r, r - center - 1, -1, device=device) -# -# assign_value = c[center - idx] -# circ[r] = assign_value -# -# return circ diff --git a/meent/on_torch/emsolver/field_distribution.py b/meent/on_torch/emsolver/field_distribution.py index 603fef0..b4bf02c 100644 --- a/meent/on_torch/emsolver/field_distribution.py +++ b/meent/on_torch/emsolver/field_distribution.py @@ -15,11 +15,6 @@ def field_dist_1d(wavelength, kx, T1, layer_info_list, period, # From the first layer for idx_layer, (epz_conv_i, W, V, q, d, A_i, B) in enumerate(layer_info_list[::-1]): - # c1 = T_layer[:, None] - # c2 = b @ a_i @ X @ T_layer[:, None] - # - # Q = torch.diag(q) - X = torch.diag(torch.exp(-k0 * q * d)) c1 = T_layer[:, None] c2 = B @ A_i @ X @ T_layer[:, None] @@ -69,23 +64,6 @@ def field_dist_1d(wavelength, kx, T1, layer_info_list, period, def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, res_x=20, res_y=20, res_z=20, device='cpu', type_complex=torch.complex128, type_float=torch.float64): - # k0 = 2 * torch.pi / wavelength - # - # fourier_indices_y = torch.arange(-fourier_order_y, fourier_order_y + 1, dtype=type_float, device=device) - # ff_x = fourier_order_x * 2 + 1 - # ff_y = fourier_order_y * 2 + 1 - # ky = k0 * (n_top * torch.sin(theta) * torch.sin(phi) + fourier_indices_y * ( - # wavelength / period[1])).type(type_complex) - # - # Kx = torch.diag(torch.tile(kx, (ff_y, )).flatten()) / k0 - # Ky = torch.diag(torch.tile(ky.reshape((-1, 1)), (ff_x, )).flatten()) / k0 - # - # field_cell = torch.zeros((res_z * len(layer_info_list), res_y, res_x, 6), dtype=type_complex) - # - # T_layer = T1 - # - # big_I = torch.eye((len(T1)), device=device).type(type_complex) - k0 = 2 * torch.pi / wavelength ff_x = len(kx) @@ -136,19 +114,10 @@ def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, Sy = W_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + W_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - # Ux = -V_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - # - V_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - # Uy = -V_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - # - V_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - - Ux = V_11 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch( - k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_12 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch( - k0 * big_Q2 * (z_1d - d)) @ c2_minus) - Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch( - k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch( - k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Ux = V_11 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + + V_12 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) + Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ + + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) Sz = -1j * epz_conv_i @ (Kx @ Uy - Ky @ Ux) Uz = -1j * (Kx @ Sy - Ky @ Sx) @@ -188,287 +157,6 @@ def field_dist_2d(wavelength, kx, ky, T1, layer_info_list, period, return field_cell - # TODO: cleaning - # # From the first layer - # for idx_layer, (E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d)\ - # in enumerate(layer_info_list[::-1]): - # - # c = torch.cat([big_I, big_B @ big_A_i @ big_X]) @ T_layer - # z_1d = torch.arange(res_z, dtype=type_float, device=device).reshape((-1, 1, 1)) / res_z * d - # - # ff = len(c) // 4 - # - # c1_plus = c[0 * ff:1 * ff] - # c2_plus = c[1 * ff:2 * ff] - # c1_minus = c[2 * ff:3 * ff] - # c2_minus = c[3 * ff:4 * ff] - # - # q1 = q[:len(q) // 2] - # q2 = q[len(q) // 2:] - # big_Q1 = torch.diag(q1) - # big_Q2 = torch.diag(q2) - # Sx = W_11 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - # + W_12 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - # - # Sy = W_21 @ (diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - # + W_22 @ (diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - # - # Ux = V_11 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - # + V_12 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - # - # Uy = V_21 @ (-diag_exp_batch(-k0 * big_Q1 * z_1d) @ c1_plus + diag_exp_batch(k0 * big_Q1 * (z_1d - d)) @ c1_minus) \ - # + V_22 @ (-diag_exp_batch(-k0 * big_Q2 * z_1d) @ c2_plus + diag_exp_batch(k0 * big_Q2 * (z_1d - d)) @ c2_minus) - # - # Sz = -1j * E_conv_i @ (Kx @ Uy - Ky @ Ux) - # Uz = -1j * (Kx @ Sy - Ky @ Sx) - # - # x_1d = torch.arange(res_x, dtype=type_float, device=device).reshape((1, -1, 1)) - # y_1d = torch.arange(res_y, dtype=type_float, device=device).reshape((-1, 1, 1)) - # - # x_1d = -1j * x_1d * period[0] / res_x - # y_1d = -1j * y_1d * period[1] / res_y - # - # x_2d = torch.tile(x_1d, (res_y, 1, 1)) - # y_2d = torch.tile(y_1d, (1, res_x, 1)) - # - # x_2d = x_2d * kx - # y_2d = y_2d * ky - # - # x_2d = x_2d.reshape((res_y, res_x, 1, len(kx))) - # y_2d = y_2d.reshape((res_y, res_x, len(ky), 1)) - # - # exp_K = torch.exp(x_2d) * torch.exp(y_2d) - # exp_K = exp_K.reshape((res_y, res_x, -1)) - # - # Ex = exp_K[:, :, None, :] @ Sx[:, None, None, :, :] - # Ey = exp_K[:, :, None, :] @ Sy[:, None, None, :, :] - # Ez = exp_K[:, :, None, :] @ Sz[:, None, None, :, :] - # - # Hx = -1j * exp_K[:, :, None, :] @ Ux[:, None, None, :, :] - # Hy = -1j * exp_K[:, :, None, :] @ Uy[:, None, None, :, :] - # Hz = -1j * exp_K[:, :, None, :] @ Uz[:, None, None, :, :] - # - # val = torch.cat( - # (Ex.squeeze(-1), Ey.squeeze(-1), Ez.squeeze(-1), Hx.squeeze(-1), Hy.squeeze(-1), Hz.squeeze(-1)), -1) - # - # field_cell[res_z * idx_layer:res_z * (idx_layer + 1)] = val - # - # T_layer = big_A_i @ big_X @ T_layer - # - # return field_cell - - -def field_dist_1d_vanilla(wavelength, kx_vector, T1, layer_info_list, period, pol, res_x=20, res_y=20, res_z=20, - device='cpu', type_complex=torch.complex128, *args, **kwargs): - - k0 = 2 * torch.pi / wavelength - Kx = torch.diag(kx_vector / k0) - - field_cell = torch.zeros((res_z * len(layer_info_list), res_y, res_x, 3)).type(type_complex) - - T_layer = T1 - - # From the first layer - for idx_layer, (E_conv_i, q, W, X, a_i, b, d) in enumerate(layer_info_list[::-1]): - - c1 = T_layer[:, None] - c2 = b @ a_i @ X @ T_layer[:, None] - - Q = torch.diag(q) - - if pol == 0: - V = W @ Q - EKx = None - - else: - V = E_conv_i @ W @ Q - EKx = E_conv_i @ Kx - - for k in range(res_z): - z = k / res_z * d - - if pol == 0: # TE - Sy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Ux = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - f_here = (-1j) * Kx @ Sy - - for j in range(res_y): - for i in range(res_x): - x = i * period[0] / res_x - - Ey = Sy.T @ torch.exp(-1j * kx_vector.reshape((-1, 1)) * x) - Hx = -1j * Ux.T @ torch.exp(-1j * kx_vector.reshape((-1, 1)) * x) - Hz = f_here.T @ torch.exp(-1j * kx_vector.reshape((-1, 1)) * x) - val = torch.tensor([Ey, Hx, Hz]) - field_cell[res_z * idx_layer + k, j, i] = val - else: # TM - Uy = W @ (diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - Sx = V @ (-diag_exp(-k0 * Q * z) @ c1 + diag_exp(k0 * Q * (z - d)) @ c2) - f_here = (-1j) * EKx @ Uy # there is a better option for convergence - - for j in range(res_y): - for i in range(res_x): - x = i * period[0] / res_x - - Hy = Uy.T @ torch.exp(-1j * kx_vector.reshape((-1, 1)) * x) - Ex = 1j * Sx.T @ torch.exp(-1j * kx_vector.reshape((-1, 1)) * x) - Ez = f_here.T @ torch.exp(-1j * kx_vector.reshape((-1, 1)) * x) - val = torch.tensor([Hy, Ex, Ez]) - field_cell[res_z * idx_layer + k, j, i] = val - T_layer = a_i @ X @ T_layer - - return field_cell - - -def field_dist_1d_conical_vanilla(wavelength, kx_vector, n_I, theta, phi, T1, layer_info_list, period, res_x=20, res_y=20, res_z=20, - device='cpu', type_complex=torch.complex128, *args, **kwargs): - - k0 = 2 * torch.pi / wavelength - ky = k0 * n_I * torch.sin(theta) * torch.sin(phi) - Kx = torch.diag(kx_vector / k0) - - field_cell = torch.zeros((res_z * len(layer_info_list), res_y, res_x, 6)).type(type_complex) - - T_layer = T1 - - big_I = torch.eye((len(T1)), device=device, dtype=type_complex) - - # From the first layer - for idx_layer, [E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d] \ - in enumerate(layer_info_list[::-1]): - - c = torch.cat([big_I, big_B @ big_A_i @ big_X]) @ T_layer - - cut = len(c) // 4 - - c1_plus = c[0*cut:1*cut] - c2_plus = c[1*cut:2*cut] - c1_minus = c[2*cut:3*cut] - c2_minus = c[3*cut:4*cut] - - big_Q1 = torch.diag(q_1) - big_Q2 = torch.diag(q_2) - - for k in range(res_z): - z = k / res_z * d - - Sx = W_2 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Sy = V_11 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_12 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Ux = W_1 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) - - Uy = V_21 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_22 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Sz = -1j * E_conv_i @ (Kx @ Uy - ky * Ux) - - Uz = -1j * (Kx @ Sy - ky * Sx) - - for j in range(res_y): - for i in range(res_x): - x = i * period[0] / res_x - - exp_K = torch.exp(-1j*kx_vector.reshape((-1, 1)) * x) - - Ex = Sx @ exp_K - Ey = Sy @ exp_K - Ez = Sz @ exp_K - - Hx = -1j * Ux @ exp_K - Hy = -1j * Uy @ exp_K - Hz = -1j * Uz @ exp_K - - field_cell[res_z * idx_layer + k, j, i] = torch.tensor([Ex, Ey, Ez, Hx, Hy, Hz]) - - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - - -def field_dist_2d_vanilla(wavelength, kx_vector, n_I, theta, phi, fourier_order_x, fourier_order_y, T1, layer_info_list, - period, res_x=20, res_y=20, res_z=20, - device='cpu', type_complex=torch.complex128, type_float=torch.float64): - - k0 = 2 * torch.pi / wavelength - - fourier_indices_y = torch.arange(-fourier_order_y, fourier_order_y + 1, dtype=type_float, device=device) - ff_x = fourier_order_x * 2 + 1 - ff_y = fourier_order_y * 2 + 1 - ky_vector = k0 * (n_I * torch.sin(theta) * torch.sin(phi) + fourier_indices_y * ( - wavelength / period[1])).type(type_complex) - - Kx = torch.diag(kx_vector.tile(ff_y).flatten()) / k0 - Ky = torch.diag(ky_vector.reshape((-1, 1)).tile(ff_x).flatten() / k0) - - field_cell = torch.zeros((res_z * len(layer_info_list), res_y, res_x, 6)).type(type_complex) - - T_layer = T1 - - big_I = torch.eye((len(T1)), device=device, dtype=type_complex) - - # From the first layer - for idx_layer, (E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, big_X, big_A_i, big_B, d)\ - in enumerate(layer_info_list[::-1]): - - c = torch.cat([big_I, big_B @ big_A_i @ big_X]) @ T_layer - - cut = len(c) // 4 - - c1_plus = c[0*cut:1*cut] - c2_plus = c[1*cut:2*cut] - c1_minus = c[2*cut:3*cut] - c2_minus = c[3*cut:4*cut] - - q_1 = q[:len(q)//2] - q_2 = q[len(q)//2:] - big_Q1 = torch.diag(q_1) - big_Q2 = torch.diag(q_2) - - for k in range(res_z): - z = k / res_z * d - - Sx = W_11 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + W_12 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Sy = W_21 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + W_22 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Ux = V_11 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_12 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Uy = V_21 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_22 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Sz = -1j * E_conv_i @ (Kx @ Uy - Ky @ Ux) - - Uz = -1j * (Kx @ Sy - Ky @ Sx) - - for j in range(res_y): - y = j * period[1] / res_y - - for i in range(res_x): - - x = i * period[0] / res_x - - exp_K = torch.exp(-1j*kx_vector.reshape((1, -1)) * x) * torch.exp(-1j*ky_vector.reshape((-1, 1)) * y) - exp_K = exp_K.flatten() - - Ex = Sx.T @ exp_K - Ey = Sy.T @ exp_K - Ez = Sz.T @ exp_K - - Hx = -1j * Ux.T @ exp_K - Hy = -1j * Uy.T @ exp_K - Hz = -1j * Uz.T @ exp_K - - field_cell[res_z * idx_layer + k, j, i] = torch.tensor([Ex, Ey, Ez, Hx, Hy, Hz]) - T_layer = big_A_i @ big_X @ T_layer - - return field_cell - - def field_plot(field_cell, pol=0, plot_indices=(1, 1, 1, 1, 1, 1), y_slice=0, z_slice=-1, zx=True, yx=True): try: import matplotlib.pyplot as plt @@ -516,70 +204,3 @@ def diag_exp_batch(x): ix = torch.arange(x.shape[-1], device=x.device) res[:, ix, ix] = torch.exp(x[:, ix, ix]) return res - - -def z_loop_1d_conical(k, c, k0, Kx, ky, res_z, E_conv_i, q_1, q_2, W_1, W_2, V_11, V_12, V_21, V_22, d): - - z = k / res_z * d - - ff = len(c) // 4 - - c1_plus = c[0 * ff:1 * ff] - c2_plus = c[1 * ff:2 * ff] - c1_minus = c[2 * ff:3 * ff] - c2_minus = c[3 * ff:4 * ff] - - big_Q1 = torch.diag(q_1) - big_Q2 = torch.diag(q_2) - - Sx = W_2 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Sy = V_11 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_12 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Ux = W_1 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) - - Uy = V_21 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_22 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Sz = -1j * E_conv_i @ (Kx @ Uy - ky * Ux) - - Uz = -1j * (Kx @ Sy - ky * Sx) - - return Sx, Sy, Ux, Uy, Sz, Uz - - -def z_loop_2d(k, c, k0, Kx, Ky, res_z, E_conv_i, q, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22, d): - - z = k / res_z * d - - ff = len(c) // 4 - - c1_plus = c[0 * ff:1 * ff] - c2_plus = c[1 * ff:2 * ff] - c1_minus = c[2 * ff:3 * ff] - c2_minus = c[3 * ff:4 * ff] - - q1 = q[:len(q) // 2] - q2 = q[len(q) // 2:] - big_Q1 = torch.diag(q1) - big_Q2 = torch.diag(q2) - - Sx = W_11 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + W_12 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Sy = W_21 @ (diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + W_22 @ (diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Ux = V_11 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_12 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Uy = V_21 @ (-diag_exp(-k0 * big_Q1 * z) @ c1_plus + diag_exp(k0 * big_Q1 * (z - d)) @ c1_minus) \ - + V_22 @ (-diag_exp(-k0 * big_Q2 * z) @ c2_plus + diag_exp(k0 * big_Q2 * (z - d)) @ c2_minus) - - Sz = -1j * E_conv_i @ (Kx @ Uy - Ky @ Ux) - - Uz = -1j * (Kx @ Sy - Ky @ Sx) - - return Sx, Sy, Ux, Uy, Sz, Uz - diff --git a/meent/on_torch/emsolver/rcwa.py b/meent/on_torch/emsolver/rcwa.py index eda9294..7e84c25 100644 --- a/meent/on_torch/emsolver/rcwa.py +++ b/meent/on_torch/emsolver/rcwa.py @@ -108,18 +108,18 @@ def grating_type_assigned(self, grating_type_assigned): def _solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): if self._grating_type_assigned == 0: - de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + de_ri, de_ti, rayleigh_R, rayleigh_T, layer_info_list, T1 = self.solve_1d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) else: - de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + de_ri, de_ti, rayleigh_R, rayleigh_T, layer_info_list, T1 = self.solve_2d(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) - return de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1 + return de_ri, de_ti, rayleigh_R, rayleigh_T, layer_info_list, T1 def solve(self, wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all): - de_ri, de_ti, rayleigh_r, rayleigh_t, layer_info_list, T1 = self._solve(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) - # TODO: rayleigh - self.rayleigh_r = rayleigh_r - self.rayleigh_t = rayleigh_t + de_ri, de_ti, rayleigh_R, rayleigh_T, layer_info_list, T1 = self._solve(wavelength, epx_conv_all, epy_conv_all, epz_conv_i_all) + + self.rayleigh_R = rayleigh_R + self.rayleigh_T = rayleigh_T self.layer_info_list = layer_info_list self.T1 = T1 diff --git a/meent/on_torch/emsolver/transfer_method.py b/meent/on_torch/emsolver/transfer_method.py index 4f85d99..982bb48 100644 --- a/meent/on_torch/emsolver/transfer_method.py +++ b/meent/on_torch/emsolver/transfer_method.py @@ -133,7 +133,7 @@ def transfer_1d_4(pol, F, G, T, kz_top, kz_bot, theta, n_top, n_bot, device=torc else: raise ValueError - return de_ri.real, de_ti.real, T1 + return de_ri.real, de_ti.real, T1, [R], [T] def transfer_2d_1(ff_x, ff_y, kx, ky, n_top, n_bot, device=torch.device('cpu'), type_complex=torch.complex128): @@ -278,8 +278,6 @@ def transfer_2d_3(k0, W, V, q, d, varphi, big_F, big_G, big_T, device=torch.devi return big_X, big_F, big_G, big_T, big_A_i, big_B - # return big_X, big_F, big_G, big_T, big_A_i, big_B, W_11, W_12, W_21, W_22, V_11, V_12, V_21, V_22 - def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_top, n_bot, device=torch.device('cpu'), type_complex=torch.complex128): @@ -340,4 +338,4 @@ def transfer_2d_4(big_F, big_G, big_T, kz_top, kz_bot, psi, theta, n_top, n_bot, de_ti = T_s * torch.conj(T_s) * torch.real(kz_bot / (n_top * torch.cos(theta))) \ + T_p * torch.conj(T_p) * torch.real((kz_bot / n_bot ** 2) / (n_top * torch.cos(theta))) - return de_ri.real, de_ti.real, big_T1, (R_s, R_p), (T_s, T_p) + return de_ri.real, de_ti.real, big_T1, [R_s, R_p], [T_s, T_p] diff --git a/meent/on_torch/modeler/modeling.py b/meent/on_torch/modeler/modeling.py index 59ba1ef..d3d2ca0 100644 --- a/meent/on_torch/modeler/modeling.py +++ b/meent/on_torch/modeler/modeling.py @@ -363,7 +363,6 @@ def ellipse(self, cx, cy, lx, ly, n_index, angle=0, n_split_w=2, n_split_h=2, an def vector_per_layer_numeric(self, layer_info, x64=True): - # TODO: activate and apply 'x64' option thru this function and connect to meent class. if x64: datatype = torch.complex128 perturbation = 0 @@ -393,7 +392,7 @@ def vector_per_layer_numeric(self, layer_info, x64=True): top_left[0] = top_left[0] + perturbation else: - top_left[0] = top_left[0] + (top_left[0] * perturbation) # TODO: change; save how many perturbations were applied in a variable + top_left[0] = top_left[0] + (top_left[0] * perturbation) row_list.insert(index, top_left[0]) break else: @@ -476,7 +475,6 @@ def vector_per_layer_numeric(self, layer_info, x64=True): # ucell_layer = torch.ones((len(row_list), len(col_list)), dtype=datatype, requires_grad=True) * pmtvy_base ucell_layer = torch.ones((len(row_list), len(col_list)), dtype=datatype) * pmtvy_base - # TODO: requires_grad? for obj in obj_list: top_left, bottom_right, pmty = obj