def mat_func(r_prime): r_x = r_prime.x r_y = r_prime.y r_z = r_prime.z x_fac = 1 y_fac = 1 z_fac = 1 if (r_prime.x < X_1): x_fac = res_factor r_x = X_1 + (r_prime.x - X_1) / res_factor elif (r_prime.x > X_2): x_fac = res_factor r_x = X_2 + (r_prime.x - X_2) / res_factor if (r_prime.y < Y_1): y_fac = res_factor r_y = Y_1 + (r_prime.y - Y_1) / res_factor elif (r_prime.y > Y_2): y_fac = res_factor r_y = Y_2 + (r_prime.y - Y_2) / res_factor if (r_prime.z < Z_1): z_fac = res_factor r_z = Z_1 + (r_prime.z - Z_1) / res_factor elif (r_prime.z > Z_2): z_fac = res_factor r_z = Z_2 + (r_prime.z - Z_2) / res_factor r = mp.Vector3(r_x, r_y, r_z) J = np.matrix([[x_fac, 0, 0], [0, y_fac, 0], [0, 0, z_fac]]) #Loop through all objects inside of tip and see if point is inside. # if yes -- then set eps_point to tip eps # if no -- then leave it as air eps_point = 1.0 for kk in range(len(tip)): if (mp.is_point_in_object(r, tip[kk])): eps_point = eps_tip eps_transform = eps_point * J * J.transpose() / np.linalg.det(J) mu_transform = J * J.transpose() / np.linalg.det(J) eps_diag = eps_transform.diagonal() mu_diag = mu_transform.diagonal() mat = mp.Medium(epsilon_diag=mp.Vector3(eps_diag[0, 0], eps_diag[0, 1], eps_diag[0, 2]), mu_diag=mp.Vector3(mu_diag[0, 0], mu_diag[0, 1], mu_diag[0, 2]), D_conductivity=sig_d_tip) return mat
def _geom2med_helper(geometries, point, default_material): """ Function that geom2med wraps around """ for geom in reversed(geometries): if isinstance(geom, mp.GeometricObject): if mp.is_point_in_object(point, geom): return geom.material elif isinstance(geom, shapes.Shape): if geom.contains(point): return geom.material return default_material
def __contains__(self, point): return mp.is_point_in_object(point, self)
def __contains__(self, point): return mp.is_point_in_object(Vector3(*point), self)