Category Archives: NBO
The Natural Bond Orbitals Deletion analysis provides an excellent approach to the assessment of bonding energy within a single molecular fragment or between many. It deletes specific elements of the Fock matrix (this means it sets their values to 0.000) and then re-diagonalizes it in order to find the difference in energy respect to the original matrix. About nine different kinds of deletions are available, which will be briefly summarized in the following section.
One of the main strengths of the NBO derived methods is their almost complete basis set independence, which allows us to obtain comparable numbers under different levels of theory.
Both G03 and G09 use the NBO3.1 program. The 5.0 version is sold separately by their creators, namely prof. Frank Weinhold, who can be contacted through their website. It’s not available for geometry optimizations (gradients),
some people insist on trying to get a different geometry by eliminating a certain interaction and that is just not possible directly with the NBODel method It is indeed possible to perform NBODeletions along with optimizations in G09 (Thanks to prof. Weinhold for his clarifying message) but there are some restrictions: molecular coordinates should be in Z-Matrix format and the number of variables to be optimized should not exceed 50; prof. Weinhold also recommends to use print=0 in the $NBO keylist in order to prevent the output files to become too big. Be sure to start with a proper geometry (close to the desired minimum) since given the nature of this analysis some apretiable geometry effects are to be expected.
The general syntax for its usage includes the string pop=NBODel in the route section of the GaussianX input file. Then, at the end of the file, the following is required:
--End of Input File-- --blank line-- $NBO $END $DEL Interactions to be deleted $END
ENTIRE BLOCKS OF ATOMS
In this kind of deletion one is able to delete all the elements between specific groups of atoms, as if their orbitals (and hence their common Fock elements) did not overlap.
--End of Input File-- --blank line-- $NBO $END $DEL ZERO 2 ATOM BLOCKS 2 BY 3 1 2 3 4 5 3 BY 2 3 4 5 1 2 $END --blank line--
The first line after $DEL indicates how many groups of atoms will be set to zero and the following lines indicate how many atoms belong to each group (i.e. the size of each block which in this case are 2 and 3, respectively). After this line the groups of atoms are listed, in this example all elements from atoms 1 and 2 with those of atoms 3, 4 and 5 will become zero. The next three lines are used for symmetry, so all the interactions from (1,2)->(3,4,5) are deleted along with (3,4,5)->(1,2)
DELETIONS BETWEEN ENTIRE MOLECULAR FRAGMENTS (Intermolecular deletions)
If we want to assess the interaction energy between two molecules, the previous method would consume a lot of time in declaring the size of each block with every atom of each molecule in it, plus there seems to be a limit to the size of the block. In this kind of deletion one is able to delete all the elements between two or more molecular fragments.
--End of Input File-- --blank line-- $NBO $END $DEL ZERO 2 DELOC FROM 1 TO 2 FROM 2 TO 1 $END --blank line--
The delocalizations can also be calculated only in one direction (FROM 1 to 2), in the case above both interactions 1->2 and 2->1 have been deleted. The input for a trimer in which all three fragments interacted with each other would look like this:
ZERO 6 DELOC FROM 1 TO 2 FROM 2 TO 1 FROM 2 TO 3 FROM 3 TO 2 FROM 1 TO 3 FROM 3 TO 1
In short, the number of bilateral delocalizations to be deleted is equal to twice the number of edges in a graph depicting the intermolecular interactions (A post on topology in chemistry is now due).
Reading the output file
Almost at the very end of the output file the following section can be found:
>>>>>>>>>> Convergence criterion not met.
SCF Done: E(RHF) = -4728.57245403 A.U. after 2 cycles
Convg = 0.2354D-03 -V/T = 2.0012
Energy of deletion : -4728.572454034
Total SCF energy : -4728.604640956
Energy change : 0.032187 a.u., 20.198 kcal/mol
The warning about the convergence can be disregarded without any concern about the accuracy of the outcome and it will show in every $DEL calculation. The SCF energy displayed in the second line is the energy corresponding to the modified Fock Matrix, which is the same as the one labeled as Energy of deletion. The Total SCF energy corresponds to the original Fock Matrix; the difference between them is labeled as Energy change and the value is reported in both atomic units as well as kcal/mol.
Some common errors and possible solutions
–> Sometimes you get the following error message at the beginning of the calculation making it crash:
** ERROR IN INITNF. NUMBER OF VARIABLES ( 57) **
** INCORRECT (SHOULD BE BETWEEN 1 AND 50) **
I have found that changing the molecule specification section from Z-matrix to Cartesian coordinates, or vice versa, overcomes this difficulty. Also, if the Opt keyword appears in the route section the previous message will be shown. Opt is
not available under the NBODel method (read the first paragraph for the proper correction).
–> Possible conflicts between NBODel and the usage of DFT methods:
In some revisions of Gaussian 03 there is a conflict when using NBODel and DFT methods. The IOp(5/48=10000) should be included to repair such conflict. This issue was solved in some revision of Gaussian 03 but I don’t know which, so try this if you have problems. Gaussian09 has taken care of the issue although still the usage of DFT to obtain NBODel calculations is not advised.
–> The following error is not self-explanatory:
Error termination via Lnk1e in ‘/../../path’
This particular error arises from the absence of the ‘$NBO $END’ line before the $DEL instruction. The previous line may or may not include additional keywords. If you are interested in computing some kind of deletion energy just leave the line as presented above in all previous examples. My guess is that the $DEL instruction does not calculate the corresponding NBO’s from which to make the deletion but it rather takes all the results from the $NBO instruction and works from there. Bottom line: don’t forget this line!
As with other posts tagged as ‘white papers’, this one will be updated and expanded every time new information is found. In the mean time, thanks to everyone for reading, commenting and rating, this keeps me going with the blog. Have you encountered problems with NBODel methods? share your experiences and solutions with the rest in the comments section.
Have a nice day!
I’m posting this white paper “as is” but I will keep on coming back to update it; the thing is that I haven’t had the time to post anything else lately and if I don’t do it like this then I will never get it out. Please be kind on your comments and ratings!
For a more thorough discussion of NBO analysis please check out the references.
Requesting an NBO population analysis on the route section of a Gaussian job (via the simplest option pop=nbo) generates a lot of information on the output file which sometimes is not too straightforward to read. Please refer to previous posts in this blog (all under the NBO category) for more info on NBO calculations. The first part of this post deals with the analysis of the default information obtained from an NBO calculation; the second part deals with some useful/popular options of the NBO analysis which are controlled through the pop=nboread keyword available in NBO3.1 which is the version incorporated in Gaussian.
Perhaps the most common issue when reading NBO results is making sense of the hybridization shown. Take the example below as taken from the NBO manual for Methylamine:
(Occupancy) Bond orbital/ Coefficients/ Hybrids
1. (1.99858) BD (1) C 1 – N 2
(40.07%) 0.6330* C1 s(21.71%)p 3.61(78.29%)
-0.0003 -0.4653 -0.0238 -0.8808 -0.0291
-0.0786 -0.0110 -0.0000 -0.0000
(50.93%) 0.7742* N 2 s(30.88%)p 2.24(69.12%)
-0.0001 -0.5557 0.0011 0.8302 0.0004
0.0443 -0.0098 0.0000 0.0000
The first line shows the occupancy (between 0.00 and 2.00 electrons), then the label of the NBO (BD = Bonding (2 centers); CR = Core (1 center); LP = Lone pair; RY = Rydberg; BD* = Antibond), after that a ‘serial number‘ which corresponds to the connectivity (or idealized bond index between the atoms, i.e., single double triple bond), and finally the atom(s) to which the NBO belongs.
The next line describes the natural atomic hybrids of which the NBO is composed, giving the percentage (100|cA|^2) of the NBO on each hybrid (40% the C hybrid orbital and 60% the N hybrid orbital), the polarization coefficient cA (Nitrogen is more electronegative than Carbon, hence the polarization coefficients look like 0.633 for C and 0.7742 for N, i.e. this NBO is more polarized towards N), the atom label (self explanatory) , and a hybrid label showing the sp^x composition: for the C hybrid orbital it is sp^3.61 while for the one on N is sp^2.24. The number in parenthesis is just the percentage in composition of the hybrid (75%p and 25%s corresponds to an ideal sp^3 hybridization) Now, for the tricky part: Sometimes you’ll get numbers larger than 3 for an sp^x hybrid or even s^yp^x hybrids (for y>1 and x>3), this has to do with the basis set employed and the number of functions used to describe each atomic orbital. (EXAMPLE SOON, IM LAZY)
Below the hybridization we find the set of coefficients that specify how the NHO is written as a linear combination of Natural Atomic Orbitals. The previous NHO for C has the largest coefficients from the second (-0.4653) and fourth (-0.8808) natural atomic orbitals, corresponding to a rough description like: NHOc = -0.4653(2s)c -0.8808(2px)c
To control the options in the Natural Bond Orbital population analysis the line $NBO keywords $END must be included at the end of the input file (after the infamous blank line located after the molecule specification)
Wiberg bond indexes
This is a feature I use a lot when dealing with adducts with closed shell molecules. It is achieved through the BNDIDX keyword. Two indexes are obtained: The Wiberg bond index which is presented as a matrix; and the Wiberg bond index total which is the summation of all Wiberg indexes for every atom. The latter index roughly resembles the number of covalent bonds each atom forms. When analyzing this total index on a given atom, it should be compared to a well defined one in another part of the molecule just to make sure that all numbers are reflecting the same trends. Wiberg’s is not the only bond index provided by NBO analysis: the BOAO keyword generates bond index on the basis of the natural atomic orbitals.
Some common errors and possible solutions
->> Concerning NBO Deletion analysis
***** WARNING ***** The variational principle has been violated and the above deletion energy is invalid!!
This usually caused by one of the following:
1) Wavefunction symmetry breaking: Use the Nosymm option on the route section of your input file.
2) The use of DFT methods: Strong deletions often lead to densities that derail the density functional. Safest is to use HF, where the variational theorem can be counted on, and
DFT artifacts are averted. The FIXDM keyword (available only in NBO 5.0) may also correct some numerical problems associated with large basis sets
3) Deletion of some degenerated orbitals which breaks the symmetry of the wavefunction. Sometimes it could be that although there are no formal degenerate states accidental degeneracies might occur, deletion of which will cause this error.
->> Also on NBO Deletion Analysis
** ERROR IN INITNF. NUMBER OF VARIABLES ( 57) **
** INCORRECT (SHOULD BE BETWEEN 1 AND 50) **
This is one weird error. I have solved it by changing the molecule specification from Z-Matrix to Cartesian coordinates. Also, if you are running a DFT calculation in an older revision of Gaussian 03, try using the IOp(5/48=10000). Later revisions of Gaussian 03 and the more recent Gaussian 09 claim to have fixed this problem.
->> NBO Analysis
WARNING: Population inversion found on atom X#
This is not a problem! NBO lists orbitals within each atom according to their energy and their population afterwards. This warning only states that some low energy lying orbitals are less populated than others with higher energy. It cannot be “fixed” since this is a natural consequence of the orthonormalization process of the NBO generation.
NBO5.0 Home. Site of the creator of NBO and NBOView (Dr. Frank Weinhold)
FAQ‘s on NBO Home. I can’t recommend it enough!!!
Population Analysis Keyword in Gaussian
This is the second post on a series which will try to address common technical questions in computational chemistry that recursively appear on the CCL.
The Natural Bond Orbitals analysis is a powerful tool in population analysis calculations which is more robust than the traditional Mulliken approach, if for no better reason because its almost insensitive to the change of basis set while Mulliken’s P.A. is highly sensitive to basis set effects. Another advantage of the NBO analysis is that it provides a localized depiction of the electron density over a molecule, making it more related to chemists intuition. So far I have only worked with Gaussian 98, Gaussian 03 and only recently with Gaussian 09 in calculating NBO’s although it is possible also to perform them with GAMESS and the standalone NBO5.0 program created by Frank Weinhold. Visualizing them, however is never a straightforward process, and quite often we see more questions on the CCL than answers trying to address the matter. Most of the answers are concerned with what visualization programs to use but they seldom provide step by step instructions, furthermore most manuals are a bit cryptic about the procedure to plot this orbitals.
In Molekel 4.3
Make sure that the route section in your input file includes the following options: pop=nboread; gfoldprint (in case you are using G03 or even G09) or gfprint (in case you are still running G98), e.g.:
#P opt rhf/6-31G(d,p) pop=(full,nboread) gfoldprint geom=connectivity
This calculation requests a geometry optimization followed by a Natural Bond Orbital population analysis (with keywords to be read) using the Restricted Hartree-Fock method with the split valence basis set 6-31G(d,p)
NOTE: I have my own issues and concerns about the use of DFT along with NBO but maybe that will be treated in another post.
At the end of the input file, after the infamous blank line type the following:
$NBO PLOT $END
You may include other keywords such as BNDIDX which generates a Wiberg bond index (order) matrix; or BOAO which generates the same matrix but in the Natural Atomic Orbitals basis. The PLOT option will generate a series of files with numerical extensions. The one you want to pay attention to is filename.47
If you are using Gaussian 03 or Gaussian 09 and STILL want to use Molekel 4.3 then you probably already know you have to change 03 for 98 on the header of the output file:
Gaussian 03: x86… –> Gaussian 98: x86-
That aside, load your output file (filename.out or filename.log) on Molekel 4.3 as usual. Then go to Load -> nbo orb and load filename.47. Now, go to Compute -> Orbital and now select the Natural Bond Orbital you are interested in. This should do it! As an interesting exercise try computing the same orbitals (lets say HOMO and HOMO-1) with and without loading filename.47 in order to observe the difference between the shape of the MO’s and NBO’s. Molekel 4.3, though, is filled with bugs that will make it close unexpectedly, specially when running under Windows Vista. Sometimes the window closes because some sort of resolution problem, specially when taking snapshots (interestingly enough this happened to me when the background color was set to white) decrease the resolution of your monitor before taking the snapshot to prevent this problem. Some people complain about the look and feel of the latest molekel version so they stick to this old bugged one, so that is why I’m posting this method.
In Gasusview 3.0
This is the gaussview version I currently work with. When performing the NBO analysis on Gaussian (by the way, Gaussian 09 cannot be visualized with gaussview 3.x) use the savenbo option in the rout section, for example:
#P opt HF/6-31G(d) freq=noraman pop=(ful,nboread,savenbo) geom=connectivity
This will save the NBO coefficients into the checkpoint file. Load the output file with gaussview normally and then click on the Molecular Orbital icon (or go to Edit -> MO’s). This will open a new window with four tabs at the bottom of the molecule image. Click on the ‘New’ tab and load your checkpoint file. Gaussview will automatically format the chk file (this can cause some troubles when crossing architectures or platforms, so be careful to generate the proper formatted chk file!) Once load select the orbital you need to visualize and go to the ‘Visualize’ tab and click update; the orbital displayed is the Natural Bond Orbital. In this tab you can also adjust certain parameters like the isovalue (which is set to 0.02 by default) or the cube grid which controls how smooth the surface looks. UPDATE: According to John Keller from Alaska you can use this methodology when calculating with G09 and using Gview3.x, this also allows to visualize vibrations when this same software combination is used.
As usual, this post will be updated whenever I find some more useful information about the matter. Rate this post or leave a comment, just to know if you found it useful. Thanks!