def corr_KC(): atoms = graphene_nanoribbon(1, 1, type='armchair', C_C=bond, saturated=False) atoms.rotate([1, 0, 0], np.pi / 2, rotate_cell=True) if edge == 'ac': atoms.rotate([0, 0, 1], -np.pi / 2, rotate_cell=True) del atoms[[0, 3]] trans_idx = 1 elif edge == 'zz': del atoms[[1, 0]] trans_idx = 0 atoms.set_cell([20, 20, 10]) atoms.center() params = {} params['positions'] = atoms.positions params['chemical_symbols'] = atoms.get_chemical_symbols() params['ia_dist'] = 10 params['edge'] = edge params['bond'] = bond params['ncores'] = 2 add_KC = KC_potential_p(params, True) constraints = [] for i in range(len(atoms)): fix_l = FixedLine(i, [0., 0., 1.]) constraints.append(fix_l) constraints.append(add_KC) lamp_parameters = get_lammps_params(H=False) calc = LAMMPS(parameters=lamp_parameters) #, files=['lammps.data']) atoms.set_calculator(calc) atoms.set_constraint(constraints) #dyn = BFGS(atoms, trajectory = 'test.traj') #dyn.run(fmax=0.05) #plot_posits(atoms, edge, bond) trans_vec = trans_atomsKC(atoms.positions[trans_idx], edge, bond) atoms.translate(trans_vec) #plot_posits(atoms, edge, bond) init_pos = atoms.positions.copy() r_around = init_pos[trans_idx] #thetas = np.linspace(0, np.pi/3, 7) #, endpoint = False) #thetas_deg = np.array([1,3,5,7,9,11,12,13,15,17,43,45,47,48,49,51,57,55,57,59]) thetas_deg = np.array([ .5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5, 18.5, 19.5 ]) traj = PickleTrajectory(path + '%s_corr_twist_thetas_(%.1f-%.1f).traj' \ %(edge, np.min(thetas_deg), np.max(thetas_deg)), 'w', atoms) n = 100 for i, theta_deg in enumerate(thetas_deg): fname = path + 'corr_%s_theta=%.2f.data' % (edge, theta_deg) print 'Calculating theta = %.2f' % (theta_deg) theta = theta_deg / 360 * np.pi * 2 print 'time ' + str(datetime.now().time()) atoms.positions = init_pos atoms.rotate([0, 0, 1], theta, center=r_around) rot_init_pos = atoms.positions.copy() lat_vec_theta1 = lat_vec1.copy() lat_vec_theta2 = lat_vec2.copy() trans_vec2 = lat_vec_theta2.copy() / n data = np.zeros((n, n)) for k in range(n): atoms.positions = rot_init_pos atoms.translate(lat_vec_theta1 * float(k) / n) #plot_posits(atoms, edge, bond, vecs = [lat_vec_theta1, lat_vec_theta2]) print '%.1f percent done' % (100 * float(k) / n) for l in range(n): atoms.translate(trans_vec2) emin = get_optimal_h(atoms, len(atoms), dyn=False)[0] data[ k, l] = emin #atoms.get_potential_energy()/len(atoms) #emin # saveAndPrint(atoms, traj, False) header = '%s runs along x-dir, angle measured from x-axis, natoms = %i. x (Angs), e (eV/atom), hmin \n\ the lattice vectors are l1 = [%.5f, %.5f, %.5f] and l2 = [%.5f, %.5f, %.5f], they are divided in %i parts. data[i,j,:] \n\ -> atoms pos += l1/n*i + l2/n*j, initial position is such that atom1 is in middle if hexagon.' \ %(edge, len(atoms), lat_vec_theta1[0], lat_vec_theta1[1], lat_vec_theta1[2], \ lat_vec_theta2[0], lat_vec_theta2[1], lat_vec_theta2[2], n) np.savetxt(fname, data, header=header)
def corr_KC(width, edge): #width = 5 #edge = 'ac' params0 = get_simulParams(edge)[-1] bond = params0['bond'] atoms = create_stucture(1, width, edge, key='top', a=bond)[0] atoms.set_cell([40, 40, 20]) atoms.center() atoms.positions[:, 2] = 3.4 h_t = [] for i in range(len(atoms)): if atoms[i].number == 1: h_t.append(i) del atoms[h_t] params = {} params['positions'] = atoms.positions params['chemical_symbols'] = atoms.get_chemical_symbols() params['ia_dist'] = 10 params['edge'] = edge params['bond'] = bond params['ncores'] = 2 add_KC = KC_potential_p(params) constraints = [] for i in range(len(atoms)): fix_l = FixedLine(i, [0., 0., 1.]) constraints.append(fix_l) constraints.append(add_KC) lamp_parameters = get_lammps_params(H=False) calc = LAMMPS(parameters=lamp_parameters) #, files=['lammps.data']) atoms.set_calculator(calc) atoms.set_constraint(constraints) #dyn = BFGS(atoms, trajectory = 'test.traj') #dyn.run(fmax=0.05) trans_vec = trans_atomsKC(atoms.positions[0], edge, bond) atoms.translate(trans_vec) init_pos = atoms.positions.copy() middle = [ np.average(init_pos[:, 0]), np.average(init_pos[:, 1]), np.average(init_pos[:, 2]) ] thetas = np.linspace(np.pi / 2, np.pi, 91) L = 4 * bond ds = .05 n = int(L / ds) for i, theta in enumerate(thetas): fname = path + 'corr_w=%02d_%s_theta=%.2f.data' % (width, edge, theta / (2 * np.pi) * 360) if not os.path.isfile(fname): print 'Calculating w=%i, theta = %.2f' % (width, theta / (2 * np.pi) * 360) atoms.positions = init_pos atoms.rotate([0, 0, 1], theta, center=middle) trans_vec = np.array([-np.sin(theta), np.cos(theta), 0]) data = np.zeros((n, 3)) for j in range(n): atoms.translate(ds * trans_vec) emin, hmin = get_optimal_h(atoms, len(atoms), dyn=False) data[j, :] = [j * ds, emin, hmin] #plot_posits(atoms, edge, bond) header = '%s runs along x-dir, angle measured from x-axis, natoms = %i. x (Angs), e (eV/atom), hmin' % ( edge, len(atoms)) np.savetxt(fname, data, header=header)
def corr_KC(width, edge): params0 = get_simulParams(edge)[-1] bond = params0['bond'] ''' atoms = graphene_nanoribbon(1, 1, type= 'armchair', C_C=bond, saturated = False) atoms.rotate([1,0,0], np.pi/2, rotate_cell = True) atoms.rotate([0,0,1], -np.pi/2, rotate_cell = True) atoms.set_cell([20, 20, 10]) atoms.center() del atoms[[2,3]] ''' atoms = create_stucture(2, width, edge, key='top', a=bond)[0] atoms.set_cell([70, 70, 20]) atoms.center() atoms.positions[:, 2] = 3.4 h_t = [] for i in range(len(atoms)): if atoms[i].number == 1: h_t.append(i) del atoms[h_t] #view(atoms) params = {} params['positions'] = atoms.positions params['chemical_symbols'] = atoms.get_chemical_symbols() params['ia_dist'] = 10 params['edge'] = edge params['bond'] = bond params['ncores'] = 2 params['no_edge_neigh'] = True add_KC = KC_potential_p(params) constraints = [] for i in range(len(atoms)): fix_l = FixedLine(i, [0., 0., 1.]) constraints.append(fix_l) constraints.append(add_KC) lamp_parameters = get_lammps_params(H=False) calc = LAMMPS(parameters=lamp_parameters) #, files=['lammps.data']) atoms.set_calculator(calc) atoms.set_constraint(constraints) #dyn = BFGS(atoms, trajectory = 'test.traj') #dyn.run(fmax=0.05) #plot_posits(atoms, edge, bond) trans_vec = trans_atomsKC(atoms.positions[0], edge, bond) atoms.translate(trans_vec) #plot_posits(atoms, edge, bond) #exit() init_pos = atoms.positions.copy() r_around = init_pos[1] thetas = np.linspace(0, np.pi / 3, 61) n = 15 lat_vec1 = np.array([3. / 2 * bond, np.sqrt(3) / 2 * bond, 0.]) lat_vec2 = np.array([3. / 2 * bond, -np.sqrt(3) / 2 * bond, 0.]) for i, theta in enumerate(thetas): fname = path + 'corr_%s_theta=%.2f.data' % (edge, theta / (2 * np.pi) * 360) #if not os.path.isfile(fname): print 'Calculating theta = %.2f' % (theta / (2 * np.pi) * 360) atoms.positions = init_pos atoms.rotate([0, 0, 1], theta, center=r_around) R = np.array([[np.cos(theta), -np.sin(theta), 0.], [np.sin(theta), np.cos(theta), 0.], [0., 0., 1.]]) lat_vec_theta1 = np.dot(R, lat_vec1.copy()) lat_vec_theta2 = np.dot(R, lat_vec2.copy()) #trans_vec1 = lat_vec_theta1.copy()/n trans_vec2 = lat_vec_theta2.copy() / n data = np.zeros((n, n)) #plot_posits(atoms, edge, bond, vecs = [lat_vec_theta1, lat_vec_theta2]) for k in range(n): atoms.positions = init_pos atoms.translate(lat_vec_theta1 * float(k) / n) #plot_posits(atoms, edge, bond, vecs = [lat_vec_theta1, lat_vec_theta2]) #print trans_vec1*float(k)/n, k, n, float(k)/n for l in range(n): atoms.translate(trans_vec2) emin, hmin = get_optimal_h(atoms, len(atoms), dyn=False) #data[k,l,:] = [emin, hmin] data[k, l] = emin #atoms.get_potential_energy()/len(atoms) header = '%s runs along x-dir, angle measured from x-axis, natoms = %i. x (Angs), e (eV/atom), hmin \n\ the lattice vectors are l1 = [%.5f, %.5f, %.5f] and l2 = [%.5f, %.5f, %.5f], they are divided in %i parts. data[i,j,:] \n\ -> atoms pos += l1/n*i + l2/n*j, initial position is such that atom1 is in middle if hexagon.' \ %(edge, len(atoms), lat_vec_theta1[0], lat_vec_theta1[1], lat_vec_theta1[2], \ lat_vec_theta2[0], lat_vec_theta2[1], lat_vec_theta2[2], n) np.savetxt(fname, data, header=header)
def corr_KC(): atoms = graphene_nanoribbon(1, 1, type= 'armchair', C_C=bond, saturated = False) atoms.rotate([1,0,0], np.pi/2, rotate_cell = True) if edge == 'ac': atoms.rotate([0,0,1], -np.pi/2, rotate_cell = True) del atoms[[0,3]] trans_idx = 1 elif edge == 'zz': del atoms[[1,0]] trans_idx = 0 atoms.set_cell([20, 20, 10]) atoms.center() params = {} params['positions'] = atoms.positions params['chemical_symbols'] = atoms.get_chemical_symbols() params['ia_dist'] = 10 params['edge'] = edge params['bond'] = bond params['ncores'] = 2 add_KC = KC_potential_p(params, True) constraints = [] for i in range(len(atoms)): fix_l = FixedLine(i, [0., 0., 1.]) constraints.append(fix_l) constraints.append(add_KC) lamp_parameters = get_lammps_params(H=False) calc = LAMMPS(parameters = lamp_parameters) #, files=['lammps.data']) atoms.set_calculator(calc) atoms.set_constraint(constraints) #dyn = BFGS(atoms, trajectory = 'test.traj') #dyn.run(fmax=0.05) #plot_posits(atoms, edge, bond) trans_vec = trans_atomsKC(atoms.positions[trans_idx], edge, bond) atoms.translate(trans_vec) #plot_posits(atoms, edge, bond) init_pos = atoms.positions.copy() r_around = init_pos[trans_idx] #thetas = np.linspace(0, np.pi/3, 7) #, endpoint = False) #thetas_deg = np.array([1,3,5,7,9,11,12,13,15,17,43,45,47,48,49,51,57,55,57,59]) thetas_deg = np.array([.5,1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5,10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5,19.5]) traj = PickleTrajectory(path + '%s_corr_twist_thetas_(%.1f-%.1f).traj' \ %(edge, np.min(thetas_deg), np.max(thetas_deg)), 'w', atoms) n = 100 for i, theta_deg in enumerate(thetas_deg): fname = path + 'corr_%s_theta=%.2f.data' %(edge, theta_deg) print 'Calculating theta = %.2f' %(theta_deg) theta = theta_deg/360*np.pi*2 print 'time ' + str(datetime.now().time()) atoms.positions = init_pos atoms.rotate([0,0,1], theta, center = r_around) rot_init_pos = atoms.positions.copy() lat_vec_theta1 = lat_vec1.copy() lat_vec_theta2 = lat_vec2.copy() trans_vec2 = lat_vec_theta2.copy()/n data = np.zeros((n,n)) for k in range(n): atoms.positions = rot_init_pos atoms.translate(lat_vec_theta1*float(k)/n) #plot_posits(atoms, edge, bond, vecs = [lat_vec_theta1, lat_vec_theta2]) print '%.1f percent done' %(100*float(k)/n) for l in range(n): atoms.translate(trans_vec2) emin = get_optimal_h(atoms, len(atoms), dyn = False)[0] data[k,l] = emin #atoms.get_potential_energy()/len(atoms) #emin # saveAndPrint(atoms, traj, False) header = '%s runs along x-dir, angle measured from x-axis, natoms = %i. x (Angs), e (eV/atom), hmin \n\ the lattice vectors are l1 = [%.5f, %.5f, %.5f] and l2 = [%.5f, %.5f, %.5f], they are divided in %i parts. data[i,j,:] \n\ -> atoms pos += l1/n*i + l2/n*j, initial position is such that atom1 is in middle if hexagon.' \ %(edge, len(atoms), lat_vec_theta1[0], lat_vec_theta1[1], lat_vec_theta1[2], \ lat_vec_theta2[0], lat_vec_theta2[1], lat_vec_theta2[2], n) np.savetxt(fname, data, header = header)
def corr_KC(width, edge): #width = 5 #edge = 'ac' params0 = get_simulParams(edge)[-1] bond = params0['bond'] atoms = create_stucture(1, width, edge, key = 'top', a = bond)[0] atoms.set_cell([40, 40, 20]) atoms.center() atoms.positions[:,2] = 3.4 h_t = [] for i in range(len(atoms)): if atoms[i].number == 1: h_t.append(i) del atoms[h_t] params = {} params['positions'] = atoms.positions params['chemical_symbols'] = atoms.get_chemical_symbols() params['ia_dist'] = 10 params['edge'] = edge params['bond'] = bond params['ncores'] = 2 add_KC = KC_potential_p(params) constraints = [] for i in range(len(atoms)): fix_l = FixedLine(i, [0., 0., 1.]) constraints.append(fix_l) constraints.append(add_KC) lamp_parameters = get_lammps_params(H=False) calc = LAMMPS(parameters = lamp_parameters) #, files=['lammps.data']) atoms.set_calculator(calc) atoms.set_constraint(constraints) #dyn = BFGS(atoms, trajectory = 'test.traj') #dyn.run(fmax=0.05) trans_vec = trans_atomsKC(atoms.positions[0], edge, bond) atoms.translate(trans_vec) init_pos = atoms.positions.copy() middle = [np.average(init_pos[:,0]), np.average(init_pos[:,1]), np.average(init_pos[:,2])] thetas = np.linspace(np.pi/2, np.pi, 91) L = 4*bond ds = .05 n = int(L/ds) for i, theta in enumerate(thetas): fname = path + 'corr_w=%02d_%s_theta=%.2f.data' %(width, edge, theta/(2*np.pi)*360) if not os.path.isfile(fname): print 'Calculating w=%i, theta = %.2f' %(width, theta/(2*np.pi)*360) atoms.positions = init_pos atoms.rotate([0,0,1], theta, center = middle) trans_vec = np.array([-np.sin(theta), np.cos(theta), 0]) data = np.zeros((n, 3)) for j in range(n): atoms.translate(ds*trans_vec) emin, hmin = get_optimal_h(atoms, len(atoms), dyn = False) data[j, :] = [j*ds, emin, hmin] #plot_posits(atoms, edge, bond) header = '%s runs along x-dir, angle measured from x-axis, natoms = %i. x (Angs), e (eV/atom), hmin' %(edge, len(atoms)) np.savetxt(fname, data, header = header)
def corr_KC(width, edge): params0 = get_simulParams(edge)[-1] bond = params0['bond'] ''' atoms = graphene_nanoribbon(1, 1, type= 'armchair', C_C=bond, saturated = False) atoms.rotate([1,0,0], np.pi/2, rotate_cell = True) atoms.rotate([0,0,1], -np.pi/2, rotate_cell = True) atoms.set_cell([20, 20, 10]) atoms.center() del atoms[[2,3]] ''' atoms = create_stucture(2, width, edge, key = 'top', a = bond)[0] atoms.set_cell([70, 70, 20]) atoms.center() atoms.positions[:,2] = 3.4 h_t = [] for i in range(len(atoms)): if atoms[i].number == 1: h_t.append(i) del atoms[h_t] #view(atoms) params = {} params['positions'] = atoms.positions params['chemical_symbols'] = atoms.get_chemical_symbols() params['ia_dist'] = 10 params['edge'] = edge params['bond'] = bond params['ncores'] = 2 params['no_edge_neigh'] = True add_KC = KC_potential_p(params) constraints = [] for i in range(len(atoms)): fix_l = FixedLine(i, [0., 0., 1.]) constraints.append(fix_l) constraints.append(add_KC) lamp_parameters = get_lammps_params(H=False) calc = LAMMPS(parameters = lamp_parameters) #, files=['lammps.data']) atoms.set_calculator(calc) atoms.set_constraint(constraints) #dyn = BFGS(atoms, trajectory = 'test.traj') #dyn.run(fmax=0.05) #plot_posits(atoms, edge, bond) trans_vec = trans_atomsKC(atoms.positions[0], edge, bond) atoms.translate(trans_vec) #plot_posits(atoms, edge, bond) #exit() init_pos = atoms.positions.copy() r_around = init_pos[1] thetas = np.linspace(0, np.pi/3, 61) n = 15 lat_vec1 = np.array([3./2*bond, np.sqrt(3)/2*bond, 0.]) lat_vec2 = np.array([3./2*bond, -np.sqrt(3)/2*bond, 0.]) for i, theta in enumerate(thetas): fname = path + 'corr_%s_theta=%.2f.data' %(edge, theta/(2*np.pi)*360) #if not os.path.isfile(fname): print 'Calculating theta = %.2f' %(theta/(2*np.pi)*360) atoms.positions = init_pos atoms.rotate([0,0,1], theta, center = r_around) R = np.array([[np.cos(theta), -np.sin(theta), 0.], [np.sin(theta), np.cos(theta), 0.], [0., 0., 1.]]) lat_vec_theta1 = np.dot(R, lat_vec1.copy()) lat_vec_theta2 = np.dot(R, lat_vec2.copy()) #trans_vec1 = lat_vec_theta1.copy()/n trans_vec2 = lat_vec_theta2.copy()/n data = np.zeros((n,n)) #plot_posits(atoms, edge, bond, vecs = [lat_vec_theta1, lat_vec_theta2]) for k in range(n): atoms.positions = init_pos atoms.translate(lat_vec_theta1*float(k)/n) #plot_posits(atoms, edge, bond, vecs = [lat_vec_theta1, lat_vec_theta2]) #print trans_vec1*float(k)/n, k, n, float(k)/n for l in range(n): atoms.translate(trans_vec2) emin, hmin = get_optimal_h(atoms, len(atoms), dyn = False) #data[k,l,:] = [emin, hmin] data[k,l] = emin #atoms.get_potential_energy()/len(atoms) header = '%s runs along x-dir, angle measured from x-axis, natoms = %i. x (Angs), e (eV/atom), hmin \n\ the lattice vectors are l1 = [%.5f, %.5f, %.5f] and l2 = [%.5f, %.5f, %.5f], they are divided in %i parts. data[i,j,:] \n\ -> atoms pos += l1/n*i + l2/n*j, initial position is such that atom1 is in middle if hexagon.' \ %(edge, len(atoms), lat_vec_theta1[0], lat_vec_theta1[1], lat_vec_theta1[2], \ lat_vec_theta2[0], lat_vec_theta2[1], lat_vec_theta2[2], n) np.savetxt(fname, data, header = header)