예제 #1
0
def get_velocities(surface: Surface):
    """ Calculates the surface velocity regarding to etching or sputtering."""
    
    if par.ETCHING:
        return par.ETCH_RATE * np.ones_like(surface.x)
    else:
        N = par.DENSITY
        
        # get the normal vectors
        normal = surface.normal()
        normal_x = normal[0]
        normal_y = normal[1]
        theta = np.empty_like(normal_x)
        
        # calculate theta by using the inner product
        theta = np.arccos(np.abs(normal_y))
        # calculate f_beam and f_sput
        y = sputter_yield(theta)
        f_beam = par.BEAM_CURRENT_DENSITY / constants.e
        f_sput = f_beam * y * np.cos(theta)
        
        # convert from cm/s to nm/s
        v_normal = f_sput / N * 1e7
        
        #Calculate redeposition
        if par.REDEP:
            f_redep = surface.viewfactor().dot(f_sput)
            #v_normal = (f_sput - f_redep) / N * 1e7

        return v_normal
예제 #2
0
def get_velocities(surface: Surface):
    """ Calculates the surface velocity regarding to etching or sputtering."""

    if par.ETCHING:
        return par.ETCH_RATE * np.ones_like(surface.x)
    else:
        N = par.DENSITY

        # get the normal vectors
        normal = surface.normal()
        normal_x = normal[0]
        normal_y = normal[1]
        theta = np.empty_like(normal_x)

        # calculate theta by using the inner product
        theta = np.arccos(np.abs(normal_y))
        # calculate f_beam and f_sput
        y = sputter_yield(theta)

        f_beam1 = par.BEAM_CURRENT_DENSITY / constants.e  # old
        f_sput = f_beam1 * y * np.cos(theta)
        #f_sput = f_beam(surface.x) * y * np.cos(theta)
        # print(len(surface.x))

        # convert from cm/s to nm/s
        v_normal = f_sput / N * 1e7
        return v_normal
예제 #3
0
def advance(surface: Surface):
    """Simulate etching or sputtering process as a movment along the normal
    vector of points.
    
    
    :param surface: Surface object
    """

    normal_vec = surface.normal()
    velocity = get_velocities(surface)

    surface.x += normal_vec[0] * par.TIME_STEP * velocity[0]
    surface.y += normal_vec[1] * par.TIME_STEP * velocity[1]

    # Call the method for delooping after every time step
    surface.deloop()
예제 #4
0
def advance(surface: Surface):
    """Simulate etching or sputtering process as a movment along the normal
    vector of points.
    
    
    :param surface: Surface object
    """
    
    normal_vec = surface.normal()
    velocity = get_velocities(surface)
    
    if par.TIME_INTEGRATION == 'normal':
        surface.x += normal_vec[0] * par.TIME_STEP * velocity
        surface.y += normal_vec[1] * par.TIME_STEP * velocity
    if par.TIME_INTEGRATION == 'vertical':
        surface.x = surface.x
        surface.y += par.TIME_STEP * velocity / normal_vec[1]
    #y points are recalculated with the same method in both integrations

    # Call the method for delooping after every time step
    surface.deloop()