Database: H-bond and electric field correlations for water in highly hydrated crystals

Anik Sen, Pavlin D. Mitev, Anders Eriksson, and Kersti Hermansson,
International Journal of Quantum Chemistry
, 116, ( 2016), 67-80
DOI: 10.1002/qua.25022

ASE format database with all structures, Bader and Wannier analysis, and OH stretching frequency published.

Download

$> ase db IJQC.116.db -c id,name,method,pbc,charge,volume,energy
id|name         |method|pbc|charge|  volume|  energy
 1|Al(NO3)3.9H2O|PBE-D2|TTT| 0.000|1421.939|-882.352
 2|MgSO4.11H2O  |PBE-D2|TTT| 0.000| 680.318|-405.280
 3|MgSO4.7H2O   |PBE-D2|TTT| 0.000| 933.902|-571.405
 4|Na2CO3.10H2O |PBE-D2|TTT| 0.000|1219.089|-752.414

You can use web browser to look on common prperties

$> ase db IJQC.116.db -w
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

Here are some Python scripts with examples to  extract/calculate properties from the database.
Download the package, and setup the environmental variables to use the tools.

export PATH=/path_to/ase.db/bin:$PATH
export PYTHONPATH=/path_to/ase.db/bin:$PYTHONPATH

ASE-db-bader-H2O_dipole.py will calculate the dipole moment for each water molecule of selected structure from the Bader analysis data saved in the database.


$> echo 'core_charges= {"H":1., "O":6., "W":-2., "Al":3., "N":5.}' > core_charges.py
$> ASE-db-bader-H2O_dipole.py  IJQC.116.db  1

  Origin at atom idx: 89 core_charge: 6.0
==========================================
idx:  165   Chg: -0.3572   dist: 0.999387
idx:  249   Chg: -7.3174   dist: 0.000008
idx:    6   Chg:  1.0000   dist: 1.000710
idx:  166   Chg: -0.3630   dist: 1.000718
idx:    5   Chg:  1.0000   dist: 0.999393
==========================================
  Total Dipole=  2.9927 [Debye]
  Total Charge= -0.0375 [e]
...

Similar for the Wannier dipole moments


$> echo 'core_charges= {"H":1., "O":6., "W":-2., "Al":3., "N":5.}' > core_charges.py
$> ASE-db-wannier-H2O_dipole.py IJQC.116.db 1

  Origin at atom idx: 89  core_charge: 6.0
============================================
idx:  214   Chg: -2.0   dist: 0.478127
idx:  287   Chg: -2.0   dist: 0.293650
idx:    6   Chg:  1.0   dist: 1.000710
idx:  303   Chg: -2.0   dist: 0.479148
idx:  338   Chg: -2.0   dist: 0.359560
idx:    5   Chg:  1.0   dist: 0.999393
============================================
  Total Dipole= 3.9117 [Debye]
...

EF at hydrogen positions of all water molecules can be calculated from Bader and Wannier data in a similar way. Note:  ASE-db-wannier-H2O_EF.py and ASE-db-bader-H2O_EF.py require pymatgen Python library.


$> echo 'core_charges= {"H":1., "O":6., "W":-2., "Al":3., "N":5.}' > core_charges.py
$> ASE-db-wannier-H2O_EF.py IJQC.116.db 1

Running Ewald ...
Done
 Ow idx: 89
==================================================
  H5    H5    dist: 0.000000   chg5     1.0000
  H5    H6    dist: 1.661998   chg6     1.0000
  H5    W214  dist: 0.521994   chg214  -2.0000
  H5    W287  dist: 1.119922   chg287  -2.0000
  H5    W303  dist: 1.252862   chg303  -2.0000
  H5    W338  dist: 1.190344   chg338  -2.0000
--------------------------------------------------
 H5     rOH=  0.999393  EF@H_along_bisector= 0.068833 a.u.
                        EF@H_along_OH_bond=  0.104850 a.u.

  H6    H6    dist: 0.000000   chg6     1.0000
  H6    H5    dist: 1.661998   chg5     1.0000
  H6    W214  dist: 1.255014   chg214  -2.0000
  H6    W287  dist: 1.116823   chg287  -2.0000
  H6    W303  dist: 0.522386   chg303  -2.0000
  H6    W338  dist: 1.185104   chg338  -2.0000
--------------------------------------------------
 H6     rOH=  1.000710  EF@H_along_bisector= 0.112705 a.u.
                        EF@H_along_OH_bond=  0.116978 a.u.

...

ASE-db-read-data.py is a handy tool to extract data stored in the database:

$> ASE-db-read-data.py IJQC.116.db 1 "BADER_charges"
1 -0.47735
2 -0.47836
3 -0.47735
4 -0.47836
5 -0.35715
6 -0.36297
7 -0.356
8 -0.36382
...

To check what additional data is available

$> ase db IJQC.116.db id=1 -l
Al4H72N12O72:
============================== Basic properties ==============================
Unit cell in Ang:
axis|periodic|          x|          y|          z
   1|     yes|     13.973|      0.000|     -0.053
   2|     yes|      0.000|      9.463|      0.000
   3|     yes|     -1.123|      0.000|     10.758
...

...
Data: OH_PES_O95.H17, OH_PES_O89.H06, INCAR, KPOINTS, BADER_KPOINTS,
OH_PES_O89.H05, OH_PES_O95.H18, ATOM_labels, BADER_INCAR, WANNIER_path, 
BADER_path, WANNIER_xyz, OH_PES_O92.H12, BADER_charges, OH_PES_O91.H10, 
OH_PES_O91.H09, OH_PES_O94.H16, OH_PES_O96.H19, BADER_dipoles, 
OH_PES_O94.H15, OH_PES_O92.H11, OH_PES_O90.H07, OH_PES_O90.H08, 
CONTCAR, POTCAR_TITEL, BADER_xyz, OH_PES_O97.H21, OH_PES_O97.H22, 
WANNIER_frac, OH_PES_O96.H20, OH_PES_O93.H14, DVR_data, OH_PES_O93.H13 

Most keys are intuitive and here are some specific:

OH_PES_O92.H12 – contains the Potential Energy Surface for the OH stretch as decribed in the paper for the O91 and H12 pair. Indexes are running from 1…N while Python indexes  0..N-1 are used only internally.

DVR_data is a matrix  (N x 4) containing  harmonic frequency, E0, E1, E2 levels for H that were involved in a stretch in [cm-1] unit . The corresponding  anharmonic frequency = E1-E0. The rest of the elements are 0 (zeroes).

$> ASE-db-read-data.py IJQC.116.db 1 DVR_data | awk '{if ($4>1) print ($5-$4)}'
2864.13
2803.75
2685.09
2715.34
2992.91
2566.12
2784.76
2712.4
...