Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

First-order properties

First-order properties quantify expectation values of one-electron operators in individual electronic states. For the electronic ground state, quantities such as the permanent electric dipole moment are evaluated directly from the converged Kohn–Sham density, requiring no response treatment. In contrast, expectation values for electronically excited states—most notably excited-state dipole moments—are obtained from the double residue of the quadratic response function, which provides the transition-specific way to construct expectation values in the excited-state manifold. Together, these formulations provide a consistent route to state-specific first-order properties across both ground and excited electronic states. See Norman et al. (2018) for further details.

Electric dipole moment

Ground state

Simple translation test

import veloxchem as vlx

h2o_xyz = """3

O    10.000000000000        0.000000000000        0.000000000000
H    10.000000000000        0.740848095288        0.582094932012
H    10.000000000000       -0.740848095288        0.582094932012
"""

molecule = vlx.Molecule.read_xyz_string(h2o_xyz)
basis = vlx.MolecularBasis.read(molecule, "def2-svp")

scf_drv = vlx.ScfRestrictedDriver()
scf_drv.xcfun = "b3lyp"
scf_results = scf_drv.compute(molecule, basis)

prop_drv = vlx.FirstOrderPropertyDriver()

prop_drv.property = "electric dipole moment"

prop_results = prop_drv.compute(molecule, basis, scf_results)
print(prop_results)
{'electric dipole moment': {'total': array([ 1.95657334e-14, -9.36750677e-17,  7.80569421e-01]), 'nuclear': array([0., 0., 0.]), 'electronic': array([ 1.95657334e-14, -9.36750677e-17,  7.80569421e-01]), 'origin': array([18.89726125,  0.        ,  0.22      ]), 'units': 'a.u.'}, 'electric_dipole_moment': {'total': array([ 1.95657334e-14, -9.36750677e-17,  7.80569421e-01]), 'nuclear': array([0., 0., 0.]), 'electronic': array([ 1.95657334e-14, -9.36750677e-17,  7.80569421e-01]), 'origin': array([18.89726125,  0.        ,  0.22      ]), 'units': 'a.u.'}}
  • It appears that results for key ‘electric dipole moment’ are entered twice into the dictionary.

  • The origin is reported to be (18.89726125, 0, 0.22). What does that mean?

  • I am not getting any nuclear dipole moment although I have translated the water molecule in the x-direction

Python script

import veloxchem as vlx

molecule = vlx.Molecule.read_name("para-nitroaniline")
basis = vlx.MolecularBasis.read(molecule, "def2-svp")

scf_drv = vlx.ScfRestrictedDriver()
scf_drv.xcfun = "b3lyp"
scf_results = scf_drv.compute(molecule, basis)

prop_drv = vlx.FirstOrderPropertyDriver()

prop_drv.property = "electric dipole moment"

prop_results = prop_drv.compute(molecule, basis, scf_results)
Electric dipole moment (a.u.):
                x        y        z
   nuclear:  -0.0000   0.0000   0.0000
electronic:  -0.6933  -2.2896  -2.2007
     total:  -0.6933  -2.2896  -2.2007

Magnitude:  8.2621 Debye
Loading...

Excited state

Python script

import veloxchem as vlx

molecule = vlx.Molecule.read_name("water")
basis = vlx.MolecularBasis.read(molecule, "def2-svp")

scf_drv = vlx.ScfRestrictedDriver()
scf_drv.xcfun = "cam-b3lyp"
scf_results = scf_drv.compute(molecule, basis)
excmom_drv = DoubleResBetaDriver()

excmom_drv.initial_state = 3
excmom_drv.final_state = 3

excmom_results = excmom_drv.compute(molecule, basis, scf_results)
mu_g = np.array(excmom_results['ground_state_dipole_moments'])
print(f"\nmu_g: {np.linalg.norm(mu_g) * au2debye: .4f} Debye")

mu = []
for key, value in excmom_results['excited_state_dipole_moments'].items():
    mu.append(value)

mu = np.array(mu)

print(f"\nmu: {np.linalg.norm(mu) * au2debye: .4f} Debye")

mu_e = -(mu - 2 * mu_g)
print(f"\nmu_e: {np.linalg.norm(mu_e) * au2debye: .4f} Debye")

print(mu_e)

mu_g:  8.2621 Debye

mu:  3.8046 Debye

mu_e:  12.7337 Debye
[-0.96317215 -3.56948309 -3.38073115]
  • It appears that what is calculated is (μeμg)-(\mu_e - \mu_g) so we need to change sign before adding μg\mu_g

  • What is computed is also the difference in electronic dipole moment so we need to add the nuclear part.

  • polish: let us remove the plural “s” in the keys of the result dictionary

Text file

jobs
task: response
@end

@method settings
xcfun: cam-b3lyp
basis: def2-svpd
@end

@response
property: transition dipole moment
initial_state: 1
final_state: 1
@end

@molecule
charge: 0
multiplicity: 1
xyz:
...
@end
References
  1. Norman, P., Ruud, K., & Saue, T. (2018). Principles and practices of molecular properties. John Wiley & Sons, Ltd.