[gpaw-users] problem with LCAO coefficients - probably in spherical harmonics

Ondřej Krejčí Okrejcio at seznam.cz
Thu Feb 16 23:46:36 CET 2017


Dear GPAW developers!



I'm trying to calculate a STM current by means of the Chen rules and wave-
functions restored from LCAO coefficients (and some empirical exponential as
an radial function).  This works pretty well when the Pi orbital of 
molecules (pz orbitals of C, N etc.) is dominating in the current, however 
when I try to implement d-orbitals (for some metal organic molecules), I get
some really asymmetric signal, even though the wavefunction of the eigen-
state looks absolutely symmetric in the cube file. I looked into the files 
with radial functions and all the valence radial functions seems to be 
positive (especially in the far distance), therefore it is in agreement with
my STM code.

Thus, I'm thinking that there is some different sign convention in the  
spherical harmonics for the GPAW basis set. For me: p_y = Np*y/r, p_z=Np*z/
r,  p_x = Np*y/r, Nd*(x*y)/r^2 ... where N are just normalization constants 
> 0. Am I right, or the mistake is somewhere else? For other LCAO codes 
(Fireball, FHI-AIMS) I'm getting proper and symmetrical current maps.




If somebody would like to see the way I'm obtaining the LCAO coefficients, I
put it here:





n_max_ ... last eigen-state in the calculations

n_min_ ... first eigen-state in the calculations


num_at_ ... number of atoms in the calcultions

Ynum = 4 for 'sp' orbs, 9 for 'spd' orbs (only valence)




coef = np.zeros((n_max_-n_min_,num_at_,Ynum_))

if (orbs=='spd'):

from gpaw.setup_data import SetupData


chem_sym=slab.get_chemical_symbols()

d_orb=np.zeros((num_at_));

for i in range(num_at_):

if at_num[i]>2:

setup =  SetupData(chem_sym[i],'LDA','paw');l_j = setup.l_j;tmp=l_j[:l_j.
index(2)];a=[1,3];oo=0;

for j in range(len(tmp)):

oo +=a[tmp[j]];

d_orb[i]=oo;

for i in range(n_min_,n_max_):

h=0

for j in range(num_at_):

ii = i-n_min_

coef[ii,j,0] = calc.wfs.kpt_u[0].C_nM[i,h]

if (at_num[j]>2):

coef[ii,j,1] = calc.wfs.kpt_u[0].C_nM[i,h+1]

coef[ii,j,2] = calc.wfs.kpt_u[0].C_nM[i,h+2]

coef[ii,j,3] = calc.wfs.kpt_u[0].C_nM[i,h+3]

if ((orbs=='spd')and(d_orb[j]>1)):

coef[ii,j,4] = calc.wfs.kpt_u[0].C_nM[i,h+d_orb[j]]

coef[ii,j,5] = calc.wfs.kpt_u[0].C_nM[i,h+d_orb[j]+1]

coef[ii,j,6] = calc.wfs.kpt_u[0].C_nM[i,h+d_orb[j]+2]

coef[ii,j,7] = calc.wfs.kpt_u[0].C_nM[i,h+d_orb[j]+3]

coef[ii,j,8] = calc.wfs.kpt_u[0].C_nM[i,h+d_orb[j]+4]


h += calc.wfs.setups[j].nao





This procedure sometimes gives me a crazy wavefunction, if Hydorgens are not
the last  atoms of the molecule, it seems that - h += calc.wfs.setups[j].nao
- is sometimes shifted by one, but this can be easily overcome.




Thank you for any help and suggestions!

All the best,

Ondrej Krejci
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.fysik.dtu.dk/pipermail/gpaw-users/attachments/20170216/a780e496/attachment.html>


More information about the gpaw-users mailing list