Exemple #1
0
def desc_ed(df):
    print("DESC_ED")
    #Get descriptors from ci
    mol = gto.Mole()
    cis = fci.direct_uhf.FCISolver(mol)
    sigUs = []
    sigJsd = []
    sigNdz2 = []
    sigNdpi = []
    sigNdd = []
    sigNd = []
    sigN2pz = []
    sigN2ppi = []
    sigN4s = []
    sigTpi = []
    sigTds = []
    sigTdz = []
    sigTsz = []

    sigMONdz2 = []
    sigMONdpi = []
    sigMONdd = []
    sigMONd = []
    sigMON2pz = []
    sigMON2ppi = []
    sigMON4s = []
    sigMOTpi = []
    sigMOTds = []
    sigMOTdz = []
    sigMOTsz = []

    #GET MO TO IAO MATRIX
    act_iao = [5, 9, 6, 8, 11, 12, 7, 13, 1]
    iao = np.load('../../../pyscf/ub3lyp_full/b3lyp_iao_b.pickle')
    iao = iao[:, act_iao]

    #LOAD IN MOS
    act_mo = [5, 6, 7, 8, 9, 10, 11, 12, 13]
    chkfile = '../../../pyscf/chk/Cuvtz_r1.725_s1_B3LYP_1.chk'
    mol = lib.chkfile.load_mol(chkfile)
    m = ROKS(mol)
    m.__dict__.update(lib.chkfile.load(chkfile, 'scf'))
    mo = m.mo_coeff[:, act_mo]
    s = m.get_ovlp()
    mo_to_iao = reduce(np.dot, (mo.T, s, iao))

    for i in range(df.shape[0]):
        ci = df['ci'].iloc[i]
        norb = 9
        nelec = (8, 7)
        if (df['Sz'].iloc[i] == 1.5): nelec = (9, 6)
        ci = ci.reshape((sp.misc.comb(norb, nelec[0], exact=True),
                         sp.misc.comb(norb, nelec[1], exact=True)))
        dm2 = cis.make_rdm12s(ci, norb, nelec)

        sigUs.append(dm2[1][1][8, 8, 8, 8])

        Jsd = 0
        for j in [0, 1, 2, 3, 6]:
            Jsd += 0.25*(dm2[1][0][8,8,j,j] + dm2[1][2][8,8,j,j] - dm2[1][1][8,8,j,j] - dm2[1][1][j,j,8,8])-\
                   0.5*(dm2[1][1][j,8,8,j] + dm2[1][1][8,j,j,8])
        sigJsd.append(Jsd)

        dm = dm2[0][0] + dm2[0][1]

        #IAO ordering: ['del','del','yz','xz','x','y','z2','z','s']
        sigNdz2.append(dm[6, 6])
        sigNdpi.append(dm[2, 2] + dm[3, 3])
        sigNdd.append(dm[0, 0] + dm[1, 1])
        sigNd.append(dm[0, 0] + dm[1, 1] + dm[2, 2] + dm[3, 3] + dm[6, 6])
        sigN2pz.append(dm[7, 7])
        sigN2ppi.append(dm[4, 4] + dm[5, 5])
        sigN4s.append(dm[8, 8])
        sigTpi.append(2 * (dm[3, 4] + dm[2, 5]))
        sigTds.append(2 * dm[6, 8])
        sigTdz.append(2 * dm[6, 7])
        sigTsz.append(2 * dm[7, 8])

        #MO ordering:  dxz, dyz, dz2, delta, delta, px, py, pz, 4s
        mo_dm = reduce(np.dot, (mo_to_iao, dm, mo_to_iao.T))
        sigMONdz2.append(mo_dm[2, 2])
        sigMONdpi.append(mo_dm[0, 0] + mo_dm[1, 1])
        sigMONdd.append(mo_dm[3, 3] + mo_dm[4, 4])
        sigMONd.append(mo_dm[0, 0] + mo_dm[1, 1] + mo_dm[2, 2] + mo_dm[3, 3] +
                       mo_dm[4, 4])
        sigMON2pz.append(mo_dm[7, 7])
        sigMON2ppi.append(mo_dm[6, 6] + mo_dm[5, 5])
        sigMON4s.append(mo_dm[8, 8])
        sigMOTpi.append(2 * (mo_dm[0, 5] + mo_dm[1, 6]))
        sigMOTds.append(2 * mo_dm[2, 8])
        sigMOTdz.append(2 * mo_dm[2, 7])
        sigMOTsz.append(2 * mo_dm[7, 8])

    df['iao_n_3dz2'] = sigNdz2
    df['iao_n_3dpi'] = sigNdpi
    df['iao_n_3dd'] = sigNdd
    df['iao_n_3d'] = sigNd
    df['iao_n_2pz'] = sigN2pz
    df['iao_n_2ppi'] = sigN2ppi
    df['iao_n_4s'] = sigN4s
    df['iao_t_pi'] = sigTpi
    df['iao_t_ds'] = sigTds
    df['iao_t_dz'] = sigTdz
    df['iao_t_sz'] = sigTsz

    df['mo_n_3dz2'] = sigMONdz2
    df['mo_n_3dpi'] = sigMONdpi
    df['mo_n_3dd'] = sigMONdd
    df['mo_n_3d'] = sigMONd
    df['mo_n_2pz'] = sigMON2pz
    df['mo_n_2ppi'] = sigMON2ppi
    df['mo_n_4s'] = sigMON4s
    df['mo_t_pi'] = sigMOTpi
    df['mo_t_ds'] = sigMOTds
    df['mo_t_dz'] = sigMOTdz
    df['mo_t_sz'] = sigMOTsz

    df['Us'] = sigUs
    df['Jsd'] = sigJsd
    return df
Exemple #2
0
S = 1
r = 1.725
method = 'UB3LYP'
basis = 'vtz'
el = 'Cu'
df = None
for run in range(16):
    chkfile = el + basis + "_r" + str(r) + "_s" + str(
        S) + "_" + method + "_" + str(run) + ".chk"
    print(chkfile)
    mol = lib.chkfile.load_mol(chkfile)
    m = ROKS(mol)
    m.__dict__.update(lib.chkfile.load(chkfile, 'scf'))

    #Build RDM on IAO basis
    s = m.get_ovlp()
    mo_occ = m.mo_occ
    M = m.mo_coeff[0][:, mo_occ[0] > 0]
    M = reduce(np.dot, (a.T, s, M))
    dm_u = np.dot(M, M.T)
    M = m.mo_coeff[1][:, mo_occ[1] > 0]
    M = reduce(np.dot, (a.T, s, M))
    dm_d = np.dot(M, M.T)

    obdm = np.array([dm_u, dm_d])
    '''
  #Gather (MO)
  orb1=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,5, 6 ,7 ,7 ,12]
  orb2=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,10,11,12,13,13]
  one_body=sum_onebody(obdm,orb1,orb2)
  one_labels=['t_'+str(orb1[i])+'_'+str(orb2[i]) for i in range(len(orb1))]
Exemple #3
0
def analyze(df):
    df['gsw'] = np.round(df['gsw'], 2)
    print(list(df))

    df['n_3dd'] = df['t_4_4'] + df['t_5_5']
    df['n_3dpi'] = df['t_1_1'] + df['t_2_2']
    df['n_3dz2'] = df['t_3_3']
    df['n_3d'] = df['n_3dd'] + df['n_3dpi'] + df['n_3dz2']
    df['n_2ppi'] = df['t_6_6'] + df['t_7_7']
    df['n_2pz'] = df['t_8_8']
    df['n_2p'] = df['n_2ppi'] + df['n_2pz']
    df['n_4s'] = df['t_9_9']
    df['t_pi'] = 2 * (df['t_1_6'] + df['t_2_7'])
    df['t_dz'] = 2 * df['t_3_8']
    df['t_sz'] = 2 * df['t_8_9']
    df['t_ds'] = 2 * df['t_3_9']
    df['n'] = df['n_3d'] + df['n_4s'] + df['n_2p']

    #PAIRPLOTS --------------------------------------------------------------------------
    #sns.pairplot(df,vars=['energy','n'],hue='basestate',markers=['o']+['.']*8)
    #sns.pairplot(df,vars=['energy','n_2ppi','n_2pz','n_3d'],hue='basestate',markers=['o']+['.']*8)
    #sns.pairplot(df,vars=['energy','t_pi','t_dz','t_ds','t_sz'],hue='basestate',markers=['o']+['.']*8)
    #plt.show()
    #exit(0)

    #FITS --------------------------------------------------------------------------
    y = df['energy']
    yerr = df['energy_err']
    #BIGGEST
    #X=df[['n_3dd','n_3d','n_2ppi','n_2pz','n_2p','n_4s','t_pi','t_sz','t_dz','t_ds']]
    #SMALLEST
    #X=df[['n_3d','n_2ppi','n_2pz']]
    #SEQUENTIALLY BETTER
    #X=df[['n_3d','n_2ppi','n_2pz','t_pi']]
    #X=df[['n_3d','n_2ppi','n_2pz','t_pi','t_sz']]
    #X=df[['n_3d','n_2ppi','n_2pz','t_pi','t_dz']]
    #X=df[['n_3d','n_2ppi','n_2pz','t_pi','t_dz','t_sz']]

    #X=df[['n_3d','n_2ppi','n_2pz','t_dz']]
    #X=df[['n_3d','n_2ppi','n_2pz','t_sz']]

    X = df[['n_3d', 'n_2ppi', 'n_2pz', 't_ds', 't_pi']]
    #X=df[['n_3d','n_2ppi','n_2pz','t_pi','t_ds']]
    #X=df[['n_3d','n_2ppi','n_2pz','t_dz','t_ds']]
    #X=df[['n_3d','n_2ppi','n_2pz','t_sz','t_ds']]
    #X=df[['n_3d','n_2ppi','n_2pz','t_dz','t_sz','t_ds']]

    X = sm.add_constant(X)
    beta = 0.0
    wls = sm.WLS(y, X, weights=np.exp(-beta * (y - min(y)))).fit()
    print(wls.summary())

    df['pred'] = wls.predict(X)
    df['resid'] = df['energy'] - df['pred']
    sns.pairplot(df,
                 vars=['resid', 't_pi', 't_dz', 't_sz'],
                 hue='basestate',
                 markers=['o'] + ['.'] * 8)
    '''
  g = sns.FacetGrid(df,hue='basestate',hue_kws=dict(marker=['o']+['.']*8),palette=sns.color_palette('husl',9))
  g.map(plt.errorbar, "pred", "energy", "energy_err",fmt='o').add_legend()
  plt.plot(df['energy'],df['energy'],'k--')
  '''
    plt.show()
    exit(0)

    #ROTATE TO IAOS --------------------------------------------------------------------------
    #Gather IAOs
    f = '../../pyscf/analyze/b3lyp_iao_b.pickle'  #IAOs which span the MOs
    a = np.load(f)

    chkfile = '../../pyscf/chk/Cuvtz_r1.725_s1_B3LYP_1.chk'  #MOs we used to calculate RDM elements
    mol = lib.chkfile.load_mol(chkfile)
    m = ROKS(mol)
    m.__dict__.update(lib.chkfile.load(chkfile, 'scf'))

    s = m.get_ovlp()

    #dpi,dpi,dz2,dd,dd,ppi,ppi,pz,4s
    #e3d,e2pz,e2ppi,tpi,tdz,tsz=(-3.2487,-2.5759,-1.6910,0.3782,-0.7785,1.1160) #DMC
    e3d, e2pz, e2ppi, tpi, tdz, tsz = (-3.3324, -1.8762, -0.9182, 0.8266, 0, 0
                                       )  #DMC

    H = np.diag([e3d, e3d, e3d, e3d, e3d, e2ppi, e2ppi, e2pz, 0])
    H[0, 5] = tpi
    H[5, 0] = tpi
    H[1, 6] = tpi
    H[6, 1] = tpi
    H[2, 7] = tdz
    H[7, 2] = tdz
    H[7, 8] = tsz
    H[8, 7] = tsz

    mo_coeff = m.mo_coeff[:, 5:14]  #Only include active MOs
    a = a[:, [1, 5, 6, 7, 8, 9, 11, 12, 13]]  #Only include active IAOs
    e1 = reduce(np.dot, (a.T, s, mo_coeff, H, mo_coeff.T, s.T, a))
    e1 = (e1 + e1.T) / 2.

    plt.matshow(e1, vmax=5, vmin=-5, cmap=plt.cm.bwr)
    plt.colorbar()
    #labels=['3s','4s','3px','3py','3pz','3dxy','3dyz','3dz2','3dxz','3dx2-y2','2s','2px','2py','2pz']
    labels = [
        '4s', '3dxy', '3dyz', '3dz2', '3dxz', '3dx2-y2', '2px', '2py', '2pz'
    ]
    plt.xticks(np.arange(len(labels)), labels, rotation=90)
    plt.yticks(np.arange(len(labels)), labels)
    plt.show()