def call_chi1(self,material,omega): sim = mp.Simulation(cell_size=mp.Vector3(1,1,1), default_material=material, resolution=20) sim.init_sim() v3 = mp.py_v3_to_vec(sim.dimensions, mp.Vector3(0,0,0), sim.is_cylindrical) chi1inv = np.zeros((3,3),dtype=np.complex128) for i, com in enumerate([mp.Ex,mp.Ey,mp.Ez]): for k, dir in enumerate([mp.X,mp.Y,mp.Z]): chi1inv[i,k] = sim.structure.get_chi1inv(com,dir,v3,omega) n = np.real(np.sqrt(np.linalg.inv(chi1inv.astype(np.complex128)))) n_actual = np.real(np.sqrt(material.epsilon(omega).astype(np.complex128))) np.testing.assert_allclose(n,n_actual)
def call_chi1(self,material,frequency): sim = mp.Simulation(cell_size=mp.Vector3(1,1,1), default_material=material, resolution=20) sim.init_sim() v3 = mp.py_v3_to_vec(sim.dimensions, mp.Vector3(0,0,0), sim.is_cylindrical) chi1inv = np.zeros((3,3),dtype=np.complex128) for i, com in enumerate([mp.Ex,mp.Ey,mp.Ez]): for k, dir in enumerate([mp.X,mp.Y,mp.Z]): chi1inv[i,k] = sim.structure.get_chi1inv(com,dir,v3,frequency) n = np.real(np.sqrt(np.linalg.inv(chi1inv.astype(np.complex128)))) n_actual = np.real(np.sqrt(material.epsilon(frequency).astype(np.complex128))) tol = 1e-6 if mp.is_single_precision() else 1e-8 self.assertClose(n, n_actual, epsilon=tol)