QuantumATK Forum

QuantumATK => General Questions and Answers => Topic started by: ziand on October 23, 2012, 10:49

Title: A question about Hückel parameters
Post by: ziand on October 23, 2012, 10:49
The Cerdá Hückel parameters are double-zeta (two STOs per atomic orbital). Thus, in general, I need three parameters to describe an orbital: two Slater coefficients eta1, eta2 and one weighting factor C1. The other weight C2 is given by normalization.
As Cerdá wrote in his original paper, single-zeta is sometimes enough and in that case, one of the two STOs is chosen very localized: eta2 > 20. ATK takes only eta1 and C1 in that case.
Now I want to publish something about an improved set of Hückel parameters and therefore I'd like to know the value of eta2 (for example in case of the carbon 2s orbital; but should be same for all such orbitals).

Thanks.
Title: Re: A question about Hückel parameters
Post by: Anders Blom on October 23, 2012, 11:26
Very simple: it's infinite. That is, if there should only be one STO, we only use one STO, rather than fudging it with a high eta2.
Title: Re: A question about Hückel parameters
Post by: ziand on January 9, 2014, 17:11
Sorry for bringing this old post up again.
Quote
Very simple: it's infinite. That is, if there should only be one STO, we only use one STO, rather than fudging it with a high eta2.
If this is true, it should mean that C1 == 1, otherwise the orbital isn't normalized.
But this is not the case for the Cerda parameters.

My calculation:
Radial part of a singe STO is
R(n,C1,et1,r) = { r^(n-1) / sqrt[(2n)!] } * C1 * (2*eta1)^(n+1/2) * exp(-eta1*r)
If I integrate R(n,C1,et1,r)^2*r^2 dr from 0 to infinity I get a surprisingly simple result: it's C1^2.
Thus, the normalization condition is C1^2 == 1. Or am I wrong here?
Title: Re: A question about Hückel parameters
Post by: Anders Blom on January 9, 2014, 21:14
Correct - C1 is not a free parameter in this case, as it's determined by the normalization. The free parameter is C2/C1 in case you have 2 (or more).
Title: Re: A question about Hückel parameters
Post by: ziand on January 10, 2014, 14:31
I still don't get it.
Quote
Correct - C1 is not a free parameter in this case, as it's determined by the normalization.
For the Müller and Hoffmann parameters it is as expected.
But in the Cerda Hückel parameter table in the ATK manual, C1 appears as a free parameter.
Example: Cerda carbon graphite basis, 2s orbital: C1 (= W1) = 0.76422 and eta1 = 2.0249. Is the orbital not normalized? Or does it not matter in practice because an additional very localized orbital would correct the normalization but would numerically not contribute to any final results.

I also spotted a slight discrepancy:
For the Cerda carbon graphite basis the manual tells U = 10.0082eV
but in ATK it is
In [1]: CerdaHuckelParameters.Carbon_graphite_Basis.onsiteHartreeShift()
Out[1]: PhysicalQuantity([10.207, 10.207, 10.207],eV)
Title: Re: A question about Hückel parameters
Post by: Anders Blom on January 10, 2014, 16:22
I haven't actually checked myself if it's normalized, but just because we list C1 doesn't mean it's free - if you change C2 then C1 must change too, to retain the normalization. The values listed are those which give a normalized total orbital (if it works as I suspect it should work).

Yes, we changed a bit in the Cerda model for 13.8 to make the model work in selfconsistent calculations, and changed the definitions a bit of the U parameters. Thanks for pointing it out, we didn't observe the change also affects the manual. The precise values of the onsite shifts have a very small influence on the results.
Title: Re: A question about Hückel parameters
Post by: ziand on January 13, 2014, 16:37
Well, then we are back at your answer to my first post, because for example the 2s orbital of carbon has just one STO.
I checked the normalization and C1 should be 1 in that case (see explanation of my previous post). But it is not.
I assumed C2 == 0 (single STO; i.e. eta2 == infinite).
Title: Re: A question about Hückel parameters
Post by: Anders Blom on January 13, 2014, 16:42
I misread your post. Better I double-check before confusing you more! :)
Title: Re: A question about Hückel parameters
Post by: Nordland on January 13, 2014, 17:04
The actual normalization of basis function does not matter for ATK, because ATK always normalized the basis set prior to start actual calculations. In fact, the basis function that the user setup, is adjusted with a Gram-Schmidt process prior to starting the calculation. This gives better convergence, but allow user to operate in orbitals where he can see the physical nature of the orbitals.
Title: Re: A question about Hückel parameters
Post by: ziand on January 13, 2014, 20:03
Ah, now most of my confusion is gone.  :D

Now I have a last question.
Given the fact that the orbitals are normalized by ATK:
Suppose I want to fit my own single-zeta STO Hückel basis (just one weight and one exponent per orbital per element).
Do I have to vary both the exponent and the weight of each orbital of the given element?
(I would guess, that keeping the weight fixed e.g. == 1 could be fine... -> one less parameter -> better fitting.)
Title: Re: A question about Hückel parameters
Post by: Anders Blom on January 13, 2014, 21:51
Yes, the weights are as I mentioned only needed if you have more than one exponential per orbital, and then determines their relative contribution.
Title: Re: A question about Hückel parameters
Post by: Nordland on January 15, 2014, 10:03
If you dont know it already, ATK 13.8 includes scipy, and I personally use the minimize routines from scipy to optimizing the basis set from time to time. It is very easy to get started on,
 and it is quite robust. With a single STO you will only have one parameter, however if you have two STO, you will have four parameters.
Title: Re: A question about Hückel parameters
Post by: ziand on January 15, 2014, 16:10
Thanks for the Info, but right now I only have ATK 12.8.2.
The fitting itself is not the problem.

Question 1: Why do I have 4 parameters if I have two STO?

Question 2: I define Carbon with a STOs. Here is my basis set creation routine:
Code
huckelBasis = CerdaHuckelParameters.Carbon_graphite_Basis()
onsite_hartree_shift = huckelBasis.onsiteHartreeShift()
number_of_valence_electrons = int(huckelBasis.numberOfValenceElectrons())
wolfsberg_helmholtz_constant = huckelBasis.wolfsbergHelmholtzConstant()
vacuum_level = huckelBasis.vacuumLevel()

def createCerdaCarbonGraphiteBasis(x, w):
    carbon_2s = SlaterOrbital(principal_quantum_number = 2,
                              angular_momentum = 0,
                              slater_coefficients = x[3] * Bohr**-1,
                              weights = w[0])
    carbon_2p = SlaterOrbital(principal_quantum_number = 2,
                              angular_momentum = 1,
                              slater_coefficients = x[4] * Bohr**-1,
                              weights = w[1])
    carbon_3d = SlaterOrbital(principal_quantum_number = 3,
                              angular_momentum = 2,
                              slater_coefficients = x[5] * Bohr**-1,
                              weights = w[2])
    return HuckelBasisParameters(element = Carbon,
                                 orbitals = [carbon_2s, carbon_2p, carbon_3d],
                                 ionization_potential = [x[0] * eV, x[1] * eV, x[2] * eV],
                                 onsite_hartree_shift = onsite_hartree_shift,
                                 number_of_valence_electrons = number_of_valence_electrons,
                                 wolfsberg_helmholtz_constant = wolfsberg_helmholtz_constant,
                                 vacuum_level = vacuum_level)
Now lets assume I fix the parameters x are the weights w free or fixed? Must I include them in the fitting or not?

If I select w[0] == w[1] == w[2] == C and I vary C, this has a strong influence on the band structures I get! Why is this?

Title: Re: A question about Hückel parameters
Post by: Anders Blom on January 15, 2014, 16:18
I guess it should be 3 parameters - the 4th is the overall normalization :)

You can always set C1 to 1, and then your fitting parameters will be the two exponents and C2. So if you use ATK with the code you show, just set the weight of the first orbital to 1, but let w[0] and w[1] befitting parameters (for the 2p and 3d orbitals).

Now, that's speaking from a general perspective. The point you mentioned about varying C is worrying - we should have a look closer look I think. Nordland - task for you ;)
Title: Re: A question about Hückel parameters
Post by: Anders Blom on January 15, 2014, 16:24
Wait, I'm confused.

If your orbitals all are SINGLE STOs, the weights should not really play a role at all. The relative weights are only relevant when you have a double-STO.

I checked our code, the Gramm-Schmidt procedure is only used for LCAO, not Huckel, so that might explain your observation, and also negates the previous messages. Sorry - really sorry - for all confusion. We'll revert with a definite answer quickly.
Title: Re: A question about Hückel parameters
Post by: Nordland on January 15, 2014, 21:53
To avoid any more confusion, let me take it from the start.

First of all it is important to understand that the orbitals, in the Huckel theory, does not have to be physical reasonable orbitals like we know from LCAO-DFT. The orbitals that used to construct the overlap and Hamiltonian should be seen as a parameterization of the offsite Hamiltonian elements.

If we look in the reference manual for the Huckel model ( http://www.quantumwise.com/documents/manuals/latest/ReferenceManual/index.html/chap.atkse.html#sect1.atkse.parameters ), we can see this by the fact that the overlap onsite is defined as the Kronecker delta functions. If the huckel orbitals where basis function of a normalized basis set, this condition would be unnecessary. In fact these basis function can in extreme cases be so strange, and long ranged, that they are truncated to zero, such that the functions is not continuous. This is also the reason for that sometimes a real space visualization of eigenstate from Huckel might not look so pretty.

When you are optimizing the basis set, or otherwise using Huckel, you will from time to time encounter this error message:
"Diagonalization error, overlap matrix not positive definite. This may be caused by atoms that are too close to each other or situated in equivalent positions, or (in the Extended Huckel model) a too low value of interaction_max_range"

This comes from the fact the basis set function (aka parameterization of the offsite Hamiltonian) has become so "strange" that the constructed overlap is no longer positive definite, and it is possible to calculate the eigenvalues and eigenvectors for the Hamiltonian.
Summa summarum, this is the reason for your results depend on W even if you have single STO, you are scaling the offsite hamiltonian elements with this weight, and hence it affects results directly.

Personally whenever I have to create a Huckel basis set, and I only have a single STO, I would never touch the weight. This is of course a limitation since it is more limited in what kind of off-site Hamiltonian matrix elements I can describe, but I can still obtain good real space projections since the orbitals looks good. Cerda, how has many of the good basis set we include in ATK, has a different philosophy and used this weight to generate quite good basis set. The prize is that sometimes real space properties can look weird. This is the reason for my statement about only having one parameter.
If I have two STO, I will only allow for C1 and C2 such that the basis function is normalized for the same reason as above effectively giving me three free parameters.

I hope this made it all more clear, otherwise I will try to explain it in another way.
Title: Re: A question about Hückel parameters
Post by: ziand on January 16, 2014, 17:07
Good explanation. Thanks.

But when you mention that you would never touch the weight, you mean leave it as it is or fix it to some value? Both approaches are somewhat arbitrary, I guess.
My problem:
When I include the weigths in the fitting of a new carbon single-STO basis everything goes fine.
When I try to fix all the weigths during the fit (I used the value 1 here) I get the mentioned diagonalization error after some fit steps.
Title: Re: A question about Hückel parameters
Post by: Nordland on January 16, 2014, 21:36
Good explanation. Thanks.
You are welcome :)

But when you mention that you would never touch the weight, you mean leave it as it is or fix it to some value? Both approaches are somewhat arbitrary, I guess.
It is an arbitrary choice in some way, but I put it to 1 since then I can 'ignore' the fact that the it ever existed, and the off-site parameter act more like a normal orbital. But this is a human decision.

My problem:
When I include the weigths in the fitting of a new carbon single-STO basis everything goes fine.
When I try to fix all the weigths during the fit (I used the value 1 here) I get the mentioned diagonalization error after some fit steps.
It also comes to how good your starting guess is and which algorithm you use for the fitting and also what kind of target system you are fitting against. So if the first works fine, then go ahead - it is only a parametrization of the off-site Hamiltonian, so if it works it works. :)