Ejemplo n.º 1
0
def geo(filename, ftype, n_spe):
    #maybe some old stupid habits....
    ab = fx.info(filename, ftype, n_spe)
    tot_num = ab.tot_num
    cell = ab.cell
    data = ab.data
    return cell, data, tot_num
Ejemplo n.º 2
0
def all_NNs(a, N_type, cutoff):
    aa = fx.info(a, 'cfg', N_type)
    cell = aa.cell
    data1 = aa.data
    #data1=[x for x in data1 if (x[0]==1.07868200e+02)]
    tot_num = int(len(data1))
    tmp = np.arange(len(data1))
    tmp = tmp.reshape(len(data1), 1)
    data = np.concatenate((data1, tmp), axis=1)

    pool = multiprocessing.Pool(processes=8)
    query_list = [79951, 71056]
    NN_list = [
        pool.apply_async(get_NN.get_NN, args=(cell, data, i, cutoff)).get()
        for i in query_list
    ]
    #print(NN_list[0][0])
    #print(NN_list[0][1])
    #print(NN_list[0][2])
    #print(NN_list[0][3])

    #a=id_orientation(NN_list[0][1])
    #a=norm_NN_vectors(NN_list[0][3])
    b = orthogonal_2nn(NN_list[0][3])
    b0 = rotation_M_2NN_ref_001(b)  #rotation matrix ref to [100][010][001]
    b1 = decompose_R(b0)
    print b1

    return
Ejemplo n.º 3
0
def select_surface(file_in,nnn,nb1,nb3,cn):
    aa=fx.info(file_in,'cfg',1)
    data=aa.data     
    n_type=aa.atom_type_num
    lst=np.argwhere(nnn <= cn)
    tot_num=len(lst)
    lst=lst.flatten()
    data_new=data[lst,:]
    aa.data=data_new
    aa.tot_num=tot_num
    aa.get_cfg_file('surface.cfg')
    return
def surface_atoms_filter(a, N_type, N_space, estimate):
    aa = fx.info(a, 'cfg', N_type)
    cell = aa.cell
    data = aa.data
    n_type = aa.atom_type_num
    tot_num = int(len(data))

    data_new = cutoff_surf_atoms(data, estimate)
    aa.data = np.asarray(data_new)
    aa.tot_num = int(len(aa.data))
    aa.atom_type_num = [n_type[1]]
    aa.get_cfg_file_one('cutoff.cfg')

    xx, yy = np.meshgrid(np.linspace(0.0, 1.0, N_space - 1),
                         np.linspace(0.0, 1.0, N_space - 1))
    M = np.array(
        [[x1, x1 + 1.0 / float(N_space), x2, x2 + 1.0 / float(N_space)]
         for x1, x2 in zip(np.ravel(xx), np.ravel(yy))])
    pool = multiprocessing.Pool(processes=4)
    surface_atoms = [
        pool.apply_async(get_surf_atoms,
                         args=(cell, data_new, n_type, M[i])).get()
        for i in range(len(M))
    ]
    #surface_atoms = [pool.apply_async(get_surf_atoms, args=(cell,data,n_type,M[i])).get() for i in range(len(M))]
    surface_atoms = [x for x in surface_atoms if x is not None]
    surface_atoms = np.asarray(surface_atoms)

    with open("surf.dat", 'w') as fout:
        for i in range(3):
            fout.write("%12.8f   %12.8f   %12.8f\n" %
                       (cell[i][0], cell[i][1], cell[i][2]))
        fout.write("%12d\n" % (len(surface_atoms)))
        for i in range(len(surface_atoms)):
            fout.write("%12.8f   %12.8f   %12.8f   %12.8f\n" %
                       (surface_atoms[i][0], surface_atoms[i][1],
                        surface_atoms[i][2], surface_atoms[i][3]))

    #print np.asarray(surface_atoms)
    #print(len(surface_atoms))
    aa.data = np.asarray(surface_atoms)
    aa.tot_num = int(len(aa.data))
    aa.atom_type_num = [n_type[1]]
    aa.get_cfg_file_one('surface.cfg')
    return
Ejemplo n.º 5
0
def surface_roughness(a,N_type,N_space):
    aa=fx.info(a,'cfg',2)
    cell=aa.cell
    data=aa.data     
    n_type=aa.atom_type_num
    tot_num=int(sum(n_type))
    #data=np.delete(data,np.arange(n_type[0]))
    surface_atoms=[]
    for ii in range(N_space):
        xmin=ii/float(N_space)
        xmax=(ii+1)/float(N_space)
        for jj in range(N_space):
            ymin=jj/float(N_space)
            ymax=(jj+1)/float(N_space)
            l2 = [data[i] for i in range(tot_num) if data[i][1] > xmin and data[i][1] < xmax and data[i][2] > ymin and data[i][2] < ymax and data[i][0]==1.07868200e+02 ]
            l2 = sorted(l2,key=lambda x:x[3],reverse=True)
            if len(l2)==0: pass
            else:
                surface_atoms.append(l2[0])
    aa.data=np.asarray(surface_atoms)
    aa.tot_num=int(len(aa.data))
    aa.atom_type_num=[n_type[1]]
    aa.get_cfg_file_one('surface.cfg')
    return
Ejemplo n.º 6
0
    for i in range(tot_num):
        data[i][1] -= dis_x
        data[i][2] -= dis_y
        data[i][3] -= dis_z
    return data


'''
#check if atom coordinates is out of boundary (not finished yet)
def check_boundary(cell,data,tot_num): 
    for i in range(tot_num):
        while 
        tmp = int(data[i][1]/ cell[0][0])
'''

a = fx.info('CONTCAR', 'vasp', 1)
cutoff = 3.5
pm = expd_prmt(a.cell, cutoff)
tot_num_0 = a.tot_num
b = cell_expd_frac_2sides(a.cell, a.data, a.tot_num, pm)
#op.get_xsf('F',b[0],b[1],b[2],'tmp.xsf')
a.cell = b[0]
a.data = b[1]
a.tot_num = b[2]
a.get_cfg_file('tmp.cfg')
original_lst = [i for i in range(tot_num_0)]

#a.get_RDF_list(original_lst,cutoff)
#a.get_ADF_list(original_lst,cutoff)
#Q=a.get_BOP(original_lst,cutoff,8)
#np.save('saved_values/Q_8.npy',Q)
def surface_statistics(a, N_space):
    with open(a, 'r') as fin:
        mylines = fin.readlines()
        cell = np.zeros((3, 3))
        tmp1 = int(mylines[3].split()[0])
        data = np.zeros((tmp1, 4))
        for i in range(3):
            cell[i][0] = float(mylines[i].split()[0])
            cell[i][1] = float(mylines[i].split()[1])
            cell[i][2] = float(mylines[i].split()[2])
        for i in range(tmp1):
            for j in range(4):
                data[i][j] = float(mylines[4 + i].split()[j])

    lowest_h = np.amin(data, axis=0)[3]
    h_bar = np.mean(data[:, 3]) - lowest_h
    w = np.std(data[:, 3])
    print "mean height:", h_bar * cell[2][2]
    print "RMS ave of height devieation Rq(std):", w * cell[2][2]
    tmp = np.zeros((len(data), 1))
    for i in range(len(data)):
        tmp[i] = abs(data[i][3] - h_bar)
        if tmp[i] < 0.0: tmp[i] += 1.0
    print "Arithmetic average of the absolute values", np.mean(
        tmp) * cell[2][2]
    for i in range(len(data)):
        data[i][3] -= lowest_h
        if data[i][3] < 0.0: data[i][3] += 1.0
    samples = []
    M = np.zeros((N_space, N_space))
    for ii in range(N_space):
        xmin = ii / float(N_space)
        xmax = (ii + 1) / float(N_space)
        for jj in range(N_space):
            ymin = jj / float(N_space)
            ymax = (jj + 1) / float(N_space)
            flag1 = 0
            for i in range(len(data)):
                if (data[i][1] > xmin and data[i][1] < xmax
                        and data[i][2] > ymin and data[i][2] < ymax):
                    samples.append(np.asarray(data[i]))
                    M[ii][jj] = float(data[i][3])
                    flag1 = 1
                    break
            if flag1 == 0:
                samples.append(
                    np.array([
                        1.07868200e+02, (xmin + xmax) / 2.0,
                        (ymin + ymax) / 2.0, 0.0
                    ]))
                M[ii][jj] = 0.0
    samples = np.asarray(samples)
    M = np.asarray(M)
    #----------generate cfg--------------
    aa = fx.info('surface.cfg', 'cfg', 1)
    aa.data = np.asarray(samples)
    aa.tot_num = int(len(aa.data))
    aa.atom_type_num = [aa.tot_num]
    aa.get_cfg_file_one('sample.cfg')
    #-----done generate cfg--------------
    #Fk = fft.fft2(M)/N_space
    #Fk = fft.fft2(M)/N_space # Fourier coefficients (divided by n) nu = fft.fftfreq(n,dx) # Natural frequencies
    #Fk = fft.fftshift(Fk) # Shift zero freq to center
    #freqs = fft.fftfreq(N_space)
    #freqs = fft.fftshift(freqs)
    ##nu = fft.fftshift(nu) # Shift zero freq to center
    #psd2D = np.abs( Fk )**2
    #X, Y = np.meshgrid(freqs, freqs)
    #fig = plt.figure()
    #ax = plt.axes(projection='3d')
    #ax.contour3D(X, Y, psd2D, 50, cmap='binary')
    #fig.savefig('1.png')
    return