Making NCI Plots in molecules, surfaces, and solids

These examples show how to make non-covalent interaction (NCI) plots in molecules and solids. For more details on what NCI plots are, see Johnson et al.’s article and this other article for the implementation in solids, and the manual pages indicated at the end.

Molecules: Phenol Dimer

NCI plots can be generated in two ways. If you have the structure and the self-consistent electron density, you can calculate the NCI domains using them. Otherwise, the promolecular density can be used for the generation of the NCI domains, in which case only the structure is required.

A simple NCI plot input file for phenol dimer using the promolecular density is:

molecule phenol_phenol.xyz 0

nciplot
endnciplot

First, the molecular structure of the phenol dimer (contained in an xyz file) is loaded into critic2 with the MOLECULE keyword. Then, the NCI plot is generated by calling the nciplot/endnciplot environment. A number of optional keywords can be used in this environment to tune the behavior of NCIPLOT, a few of which are described in this example. Please consult the NCIPLOT keyword entry in the manual for details.

The 0 after the MOLECULE command instructs critic2 to restrict the molecular cell to the smallest box that encompasses the molecular structure (i.e. a box with zero border). The same effect can be achieved using the MOLCELL keyword:

molcell 0

after loading the structure with MOLECULE. The molecular cell determines the size of the grid in which the NCI plot quantities (density, reduced density gradients, etc.) will be calculated. A small molecular cell has the double advantage of making the calculation cheaper (because you need smaller grids) and also of restricting the NCI plot to the region of interest. The only downside is that one of your NCI domains may be cut off, in which case you will have to increase this number somewhat.

Running the example above generates a number of files. You can view the results using the vmd program. To open the file, use:

vmd -e phenol_phenol.vmd

Rotate the molecule into the position you want and do File -> Render -> Tachyon (internal, in memory) and press “Start rendering”. This will generate the NCI plot file.

In general, it is better if you have run the calculation and have the self-consistent density for the system from which to make the NCI plot. This density can be read in any format understood by critic2. In this example, we can use a wfx wavefunction file from Gaussian:

molecule phenol_phenol.wfx 0
load phenol_phenol.wfx
nciplot
endnciplot

Note the only difference is that the structure and density are both read from the wavefunction file, and therefore used in the NCI plot.

Phenol dimer NCI plot
Phenol dimer NCI plot.

Surfaces: Benzene on Kaolinite

Now we consider making the NCI plots of a molecule (benzene) on an inorganic surface, kaolinite (001). The equilibrium structure was calculated using Quantum ESPRESSO in two cases: when the benzene molecule is adsorbed to the hydrophobic side (hb) and when it is adsorbed to the hydrophilic side (hl). The structure and self-consistent electron densities are contained in the hbpar1_rho.cube and hlpar1_rho.cube cube files, respectively, generated using QE’s pp.x program.

We consider absorption to the hydrophobic surface first (hbpar1_rho.cube). We could use an NCIplot input file identical to the one in the previous section for molecular systems. However, in surfaces and solids, there are typically too many NCI domains and it is often the case that we want to focus on a particular interaction. In this case, we want only the NCI domains that arise from the interaction between the molecule and the surface. To focus only on these interactions, we create .xyz files containing the relevant fragments (one for benzene and another for the surface) and then pass those to the NCIPLOT environment. That way, only the domains that involve interactions between the two fragments will be plotted.

Therefore, we first need to write the structure contained in the cube files and select the fragments for the NCIplot calculation. To do this, we first write an xyz file containing the surface and the molecule:

crystal hbpar1_rho.cube
write cell.xyz border 1 1 2

This creates an xyz file (cell.xyz) containing the slab plus the molecule. The 1 1 2 instructs critic2 to write a 1x1x2 supercell of the original system, so that a whole slab is contained in the file. The BORDER keyword makes all atoms at the border of the supercell be included in the file. You can now open this file with your favorite program (I use avogadro) and cut away from it the benzene and the surface underneath, and save the two systems to separate xyz files (hbpar1_benzene.xyz and hbpar1_surface.xyz).

Lastly, we generate the NCI plot with the input file:

crystal hbpar1_rho.cube
load hbpar1_rho.cube
nciplot
  fragment hbpar1_benzene.xyz
  fragment hbpar1_surface.xyz
  nstep 100 100 100
endnciplot

We first load the surface structure from the cube file, then the self-consistent electron density, which becomes the reference field and therefore will be used by NCIPLOT to generate the NCI domains. The xyz files containing the fragments written in the previous step are passed to the NCIPLOT environment, which ensures that only the NCI domains contained between those fragments are plotted. Lastly, the default grid used for the NCI plots (0.1 bohr between points in each direction) is too large for this example. Therefore, we use the NSTEP option to limit the grids used for the plot to 100 points in each direction. In a production calculation, you should use a finer grid (perhaps the default grid) to improve the quality of the plot and avoid artifacts.

For the case of benzene on the hydrophilic surface, the procedure to make the NCI plots is entirely analogous. First, we create an xyz file containing the surface:

crystal hlpar1_rho.cube
write cell.xyz border 1 1 2

Then, we cut the benzene and surface fragments into their respective xyz files (hlpar1_benzene.xyz and hlpar1_surface.xyz) and finally we generate the NCI plot with:

crystal hlpar1_rho.cube
load hlpar1_rho.cube
nciplot
  fragment hlpar1_benzene.xyz
  fragment hlpar1_surface.xyz
  nstep 100 100 100
endnciplot

As in the molecular case, the promolecular density can be used instead of the calculated electron density if the latter is not available. To do this, simply remove the LOAD command. This requires only the surface structure.

Benzene on kaolinite, hydrophobic
Benzene on kaolinite, adsorption on hydrophobic side.
Benzene on kaolinite, hydrophilic
Benzene on kaolinite, adsorption on hydrophilic side.

Solids: Thymine Molecular Crystal

Same as in the surface case, NCI plots of a periodic crystal are very busy because of the large number of NCI domains and atoms. We need to use the FRAGMENT keyword to focus the NCI plot on the interactions we are interested in. In this example we examine the thymine crystal, in which there are two dominant interactions: the intra-layer hydrogen bonds and the inter-layer stacking interactions.

Before calculating the NCI plots, we need to generate the fragment structures. The equilibrium structure and electron density were calculated with Quantum ESPRESSO, and both are contained in the thymine_rho.cube file. To create the fragments, we use the following input:

crystal thymine_rho.cube
write cell.xyz molmotif

This creates an xyz file (cell.xyz) containing the atoms in the unit cell. The MOLMOTIF option makes critic2 include all atoms from neighboring cells necessary to complete all molecular structures. If a larger unit cell is needed to define the fragments, we could do:

crystal thymine_rho.cube
write cell.xyz molmotif 2 2 2

to perform the same operation on a 2x2x2 supercell. You can also write all the monomers in the unit cell with:

write thymine_monomers.xyz molmotif nmer 1

and all the dimers with:

write thymine_pairs.xyz molmotif nmer 2

Using avogadro, we now cut the fragments of interest. To examine the intra-layer hydrogen bond, we select three adjacent molecules interacting via hydrogen bonds within the same layer (thymine_intra*.xyz). For the stacked layer interaction, we pick a three-molecule motif from one layer (thymine_inter1.xyz) and a single molecule, exactly above this triangular motif, from an adjacent layer (thymine_inter1.xyz).

Now we generate the NCI plot for the inter-layer stacking interaction with:

crystal thymine_rho.cube
load thymine_rho.cube

nciplot
 fragment thymine_inter1.xyz
 fragment thymine_inter2.xyz
 nstep 100 100 100
endnciplot

The two fragments we generated before (the triangular motif and the single molecule on top of it) are passed to the NCIPLOT environment using the FRAGMENT option. This restricts the NCI domain to only those that appear between the selected fragments. The NSTEP option reduces the number of points in the calculated density and reduced density gradient grids. For production calculations, you should use the defaults (remove the NSTEP) or increase these numbers; otherwise oscillations appear, as shown in the NCI plots below.

For the intra-layer interactions, we pass to the FRAGMENT option the three fragments corresponding to the three hydrogen-bonded molecules within the same layer:

crystal thymine_rho.cube
load thymine_rho.cube

nciplot
 fragment thymine_intra1.xyz
 fragment thymine_intra2.xyz
 fragment thymine_intra3.xyz
 nstep 175 175 75
endnciplot

As before, we use NSTEP to restrict the number of points in the calculated grids. You should use the defaults, or at least a finer grid, for production plots.

Thymine crystal, inter-layer interactions
NCI domains for the inter-layer interactions in the thymine crystal.
Thymine crystal, intra-layer interactions
NCI domains for the intra-layer interactions in the thymine crystal.

As before, the promolecular density can be used instead of the calculated electron density if the latter is not available. To do this, simply remove the LOAD commands. In this case, only the structure of the molecular solid is needed.

Example Files Package

Files: example_12_01.tar.xz.

Manual Pages

Updated: