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
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
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()
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()