hlxin / tinnet

Theory Infused Neural Network
GNU General Public License v3.0
9 stars 3 forks source link

vad2.txt #2

Open linmx1 opened 10 months ago

linmx1 commented 10 months ago

I did not see the crucial file 'vad2.txt' in the folder. 503593088@qq.com

linmx1 commented 10 months ago

ead.txt I also did not see the 'ead.txt' file.

dogs1231992 commented 10 months ago

Hi,

Sorry for causing confusion.

Ead and Vad2 can be found in the .db file

database

db = connect('tinnet_OH.db')

constants

vad2 = np.array([r['data']['vad2'] for r in db.select()])

main target

ead = np.array([r['ead'] for r in db.select()])

I will update the test.py file accordingly.

dogs1231992 commented 10 months ago

The table of Vad2

elements = {'Ca': {'vad2': 20.8 }, 'Sc': {'vad2': 7.90}, 'Ti': {'vad2': 4.65}, 'V' : {'vad2': 3.15}, 'Cr': {'vad2': 2.35}, 'Mn': {'vad2': 1.94}, 'Fe': {'vad2': 1.59}, 'Co': {'vad2': 1.34}, 'Ni': {'vad2': 1.16}, 'Cu': {'vad2': 1.00}, 'Zn': {'vad2': 0.46}, 'Sr': {'vad2': 36.5 }, 'Y' : {'vad2': 17.3 }, 'Zr': {'vad2': 10.90}, 'Nb': {'vad2': 7.73}, 'Mo': {'vad2': 6.62}, 'Tc': {'vad2': 4.71}, 'Ru': {'vad2': 3.87}, 'Rh': {'vad2': 3.32}, 'Pd': {'vad2': 2.78}, 'Ag': {'vad2': 2.26}, 'Cd': {'vad2': 1.58}, 'Ba': {'vad2': 41.5 }, 'Lu': {'vad2': 17.1 }, 'Hf': {'vad2': 11.90}, 'Ta': {'vad2': 9.05}, 'W' : {'vad2': 7.27}, 'Re': {'vad2': 6.04}, 'Os': {'vad2': 5.13}, 'Ir': {'vad2': 4.45}, 'Pt': {'vad2': 3.90}, 'Au': {'vad2': 3.35}, 'Hg': {'vad2': 2.64}}

dogs1231992 commented 10 months ago

Vad2 comes from

Ruban, A., Hammer, B., Stoltze, P., Skriver, H. L., & Nørskov, J. K. (1997). Surface electronic structure and reactivity of transition and noble metals. Journal of Molecular Catalysis A: Chemical, 115(3), 421-429.

dogs1231992 commented 10 months ago

Updated NA model for PyTorch >= 3.8

def NA_Model(self, adse, beta, delta, dos_d, vad2):
    h = self.h
    ergy = self.ergy
    eps = np.finfo(float).eps
    fermi = self.fermi

    wdos = np.pi * (beta[:,None]*vad2[:,None]*dos_d) + delta[:,None]
    wdos_ = np.pi * (0*vad2[:,None]*dos_d) + delta[:,None]

    # Hilbert transform
    af = torch.fft.fft(wdos, dim=1)
    htwdos = torch.imag(torch.fft.ifft(af*h[None,:]))
    deno = (ergy[None,:] - adse[:,None] - htwdos)
    deno = deno * (torch.abs(deno) > eps) \
           + eps * (torch.abs(deno) <= eps) * (deno >= 0) \
           - eps * (torch.abs(deno) <= eps) * (deno < 0)
    integrand = wdos / deno
    arctan = torch.atan(integrand)
    arctan = (arctan-np.pi)*(arctan > 0) + (arctan)*(arctan <= 0)
    d_hyb = 2 / np.pi * torch.trapz(arctan[:,0:fermi],ergy[None,0:fermi])

    lorentzian = (1/np.pi) * (delta[:,None]) \
                 / ((ergy[None,:] - adse[:,None])**2 + delta[:,None]**2)
    na = torch.trapz(lorentzian[:,0:fermi], ergy[None,0:fermi])

    deno_ = (ergy[None,:] - adse[:,None])
    deno_ = deno_ * (torch.abs(deno_) > eps) \
            + eps * (torch.abs(deno_) <= eps) * (deno_ >= 0) \
            - eps * (torch.abs(deno_) <= eps) * (deno_ < 0)
    integrand_ = wdos_ / deno_
    arctan_ = torch.atan(integrand_)
    arctan_ = (arctan_-np.pi)*(arctan_ > 0) + (arctan_)*(arctan_ <= 0)
    d_hyb_ = 2 / np.pi * torch.trapz(arctan_[:,0:fermi],ergy[None,0:fermi])

    energy_NA = d_hyb - d_hyb_

    dos_ads = wdos/(deno**2+wdos**2)/np.pi
    dos_ads = dos_ads/torch.trapz(dos_ads, ergy[None,:])[:,None]
    return na, energy_NA, dos_ads
dogs1231992 commented 10 months ago

The only difference is the Hilbert transform

# Hilbert transform
af = torch.fft.fft(wdos, dim=1)
htwdos = torch.imag(torch.fft.ifft(af*h[None,:]))