-
Notifications
You must be signed in to change notification settings - Fork 62
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
moldft: virtual orbitals are broken #127
Comments
With canonical orbitals, the problem is due to use of symmetric orthogonalization (via Newton iteration) which does not respect the priority of occupied over virtual orbitals. In addition, localized orbitals need to modify the Lagrange multipliers in BSH update (but am not clear how). I will make a fix for canonical orbitals. Long term I think we need a separate solver for virtuals. |
I've been having a quick look at this for canonical and I think it's more than just the orthogonalization causing problems - I did a bit of a hack to make the orthogonalization asymmetric (not very efficient, but it more or less works), and that seemed to help things for some systems but not others, i.e. it gets closer to the right solution than before but still never converges. I think we might have a similar problem going on in get_fock_transformation/diag_fock_matrix where there's also some mixing between occupied and virtual, but I've yet to figure out exactly what we should be doing differently. |
The mixing in the diagonalization should be good for convergence but to
|
What system (molecule and functional) are you testing on? On Wed, Jul 22, 2015 at 8:51 PM, Robert Harrison rjharrison@gmail.com
Robert J. Harrison |
I tried that, and it fixed things in some cases, but in a couple of cases it made convergence much slower and in another case nothing changed. I've been testing an assortment of small molecules using LDA. |
Using nwchem in a large basis or another code what is the virtual orbital
|
Laura, in our experience LDA virtual orbitals should be unbound (especially for small molecules). We did TDA calculations on helium and we used box sizes of about 1000 bohr and it was still not converged. If you use HF it's better, but the higher virtuals still may be unbound. What exactly do you want to do with the virtuals? Florian On Jul 27, 2015, at 5:42 PM, robertjharrison notifications@github.com wrote:
|
I checked each system with BigDFT first to make sure I'm only looking for the negative eigenvalues (i.e. just the first few states). I haven't modified the box sizes so that's probably the next thing to check, but I think moldft usually uses larger box sizes than BigDFT. I'm just looking to calculate dipole matrix elements between core and virtual states as a first approximation of core spectra. |
Unfortunately I'm not familiar with core spectra.. Do you need actual virtual orbitals for that or do you only need a complete set of orthogonal functions? In this case you could just generate a set of gaussian functions and project out the occupied space. As for virtuals we also had some problems with generating suitable guess functions. In the end we would compute a large Fock matrix and diagonalize that to get a guess. Florian On Jul 27, 2015, at 5:57 PM, lratcliff notifications@github.com wrote:
|
There might be a more sophisticated approach that doesn't need them explicitly, but the method I'm using needs the actual orbitals and their energies. For the moment my aim is just to use it as an application of the mixed all electron/pseudopotential implementation, so I wasn't looking to implement anything more advanced. |
I changed a few lines in the TDA response code that it is now able to For which systems are you trying to get the virtuals ? I have added an example input for the B+ cation in src/examples/ For now this does only CIS but since for the virtuals only the XC Best wishes from Berlin, |
I think that even if BigDFT uses a smaller box size than MADNESS the way What is the BigDFT eigenvalue for the virtual? What molecule is this? Can you please post the MADNESS input and output? On Mon, Jul 27, 2015 at 11:57 AM, lratcliff notifications@github.com
Robert J. Harrison |
Thanks for the input Jakob, I'll have a look at your code to see if there's anything obvious we're missing. Mostly though it already seems to be working already for very small molecules, so I'm not sure how much we can conclude anything from tests on cations. It seems to be that the larger the system, the worse the problem, at least from my small sampling of a dozen or so molecules. One example where things are broken even with the asymmetric orthogonalization is SO2. I'm just trying to calculate the LUMO, for which BigDFT gives an energy of -0.18. Without the virtual state, moldft converges in 10 iterations, whereas with the virtual state it's still not converged after 80 iterations. I tried nearly doubling the cell size, and it made no difference. Here's the input file I'm using: dft geometry |
Can you send the output? Have the occupied states converged but not the On Wed, Aug 5, 2015 at 5:06 PM, lratcliff notifications@github.com wrote:
Robert J. Harrison |
I have included the lda functional for the calculation of virtuals in I guess it is more stable to first converge all occupied states and then Here is my input for the SO2 calculations plot dft excite TDA geometry Am 05/08/15 um 23:06 schrieb lratcliff:
|
Sorry, I should have attached the output yesterday, I'm on vacation now without access to my desktop at ANL. But both the occupied and virtuals were messed up, essentially the energy was just fluctuating all over the place, and the residuals weren't going down at all. That sounds really promising Jakob, thanks for doing the test. I had thought that doing occupied then virtuals would be a good route to go down, and this seems to confirm it. As you say, this would avoid problems with unwanted mixing. When I get back from vacation I'll try using your input for a few other molecules and if everything works then I suggest we adopt that approach in moldft. |
I agree that for the purpose of computing the virtuals, the right approach However, adding a few virtuals should make convergence of the occupied It would also be good to do fractional occupation which is sort of the same On Thu, Aug 6, 2015 at 2:20 PM, lratcliff notifications@github.com wrote:
Robert J. Harrison |
I've tested my latest fix (commit 2015578) on some larger molecules (coronene, phthalocyanine, various fullerenes), and for canonical orbitals everything seems to be working now. Sometimes some of the higher energy (but still bound) virtual orbitals are missed by MADNESS, so I borrowed a trick that I previously used for virtual states in ONETEP: start with more virtual orbitals than needed and optimize for a few iterations before restarting with the number you actually want. This reorders some of the orbitals from the initial guess and the missing states are recovered. For localized orbitals the original problem persists, i.e. as soon as you add any virtual states convergence is broken. |
No description provided.
The text was updated successfully, but these errors were encountered: