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
示例#2
0
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
示例#3
0
 def __contains__(self, point):
     return mp.is_point_in_object(point, self)
示例#4
0
文件: geom.py 项目: oskooi/meep
 def __contains__(self, point):
     return mp.is_point_in_object(point, self)
示例#5
0
文件: geom.py 项目: zzzzz9527/meep
 def __contains__(self, point):
     return mp.is_point_in_object(Vector3(*point), self)