[CP2K-user] [CP2K:18911] molecular polarizability calculated via cp2k is different from psi4 and gaussian09
Jürg Hutter
hutter at chem.uzh.ch
Sat Jun 10 16:38:58 UTC 2023
Hi
your setup is almost correct. In order to do a fully non-periodic calculation you also
have to specify a non-periodic electrical field. Instead of
&PERIODIC_EFIELD you need &EFIELD
For GAPW calculations it is also better to use PRECONDITIONER FULL_ALL.
regards
JH
________________________________________
From: cp2k at googlegroups.com <cp2k at googlegroups.com> on behalf of jin xi <jinxi.insilico at gmail.com>
Sent: Saturday, June 10, 2023 5:08 AM
To: cp2k
Subject: [CP2K:18909] molecular polarizability calculated via cp2k is different from psi4 and gaussian09
Dear CP2K users,
I am trying to calculate molecular polarizability of a single CH4 molecular via cp2k software using the B3LYP functional and the d-aug-cc-pVDZ basis set. The strategy is as follows. By changing the polarization direction of the electric field, the corresponding molecular dipole moment is obtained, and then the molecular polarizability is calculated by differential method. To verify the correctness of the calculations, I also used PSI4 1.1 and Gaussian09 software to calculate the molecular polarizability at the same functional and basis set, and the results are as follows.
[1.png]
[2.png]
It is not difficult to see that the main diagonal results of the molecular polarizability calculated by cp2k are inconsistent with the calculations of psi4 1.1 and Gaussian09. I tried changing parameters like &MGRID, EPS_default and &XC, but none worked. The input files for each software are as follows. Does anyone know what the reason is?
Thanks in advanced.
#####==== cp2k ch4.inp ====#####
&GLOBAL
PROJECT CH4
RUN_TYPE ENERGY
PRINT_LEVEL LOW
&END GLOBAL
&FORCE_EVAL
METHOD Quickstep ! Electronic structure method (DFT,...)
&DFT
BASIS_SET_FILE_NAME ./d-aug-cc-pvdz
BASIS_SET_FILE_NAME ./d-aug-cc-pvdz-jkfit
POTENTIAL_FILE_NAME POTENTIAL
RESTART_FILE_NAME CH4-RESTART.wfn
&MGRID
CUTOFF 400
NGRIDS 6
REL_CUTOFF 60
&END MGRID
&POISSON ! Solver requested for non periodic calculations
PERIODIC NONE
POISSON_SOLVER WAVELET ! Type of solver
&END POISSON
&QS ! Parameters needed to set up the Quickstep framework
METHOD GAPW ! Method: gaussian and augmented plane waves
EPS_DEFAULT 1.0E-10
&END QS
&SCF
SCF_GUESS RESTART
EPS_SCF 1.0E-6
MAX_SCF 100
&OUTER_SCF
MAX_SCF 50
EPS_SCF 1.0E-6
&END OUTER_SCF
&OT
PRECONDITIONER FULL_KINETIC
MINIMIZER CG
&END OT
&END SCF
&XC ! Parametes needed to compute the electronic exchange potential
&XC_FUNCTIONAL
&LYP
SCALE_C 0.81
&END
&BECKE88
SCALE_X 0.72
&END
&VWN
FUNCTIONAL_TYPE VWN3
SCALE_C 0.19
&END
&XALPHA
SCALE_X 0.08
&END
&END XC_FUNCTIONAL
&HF
&SCREENING
EPS_SCHWARZ 1.0E-10
&END
&MEMORY
MAX_MEMORY 100
&END
FRACTION 0.20
&END
&END XC
&PERIODIC_EFIELD
INTENSITY 1.8897261250E-5
POLARISATION -1.0 0.0 0.0 !change the polarisation for x+ x- y+ y- z+ z-
&END PERIODIC_EFIELD
&PRINT
&MOMENTS
PERIODIC FALSE
REFERENCE COM
&EACH
MD 1
&END EACH
FILENAME =dipole.txt
&END MOMENTS
&END PRINT
&END DFT
&SUBSYS
&CELL
ABC 10. 10. 10.
PERIODIC NONE ! Non periodic calculations. That's why the POISSON section is needed
&END CELL
&TOPOLOGY ! Section used to center the atomic coordinates in the given box. Useful for big molecules
&CENTER_COORDINATES
&END
&END
&COORD
C 0.000003015000 0.000003640000 0.000013990000
H 1.096282485000 0.000218630000 0.008833370000
H -0.365745055000 1.033471870000 0.008832970000
H -0.372522695000 -0.527106690000 0.886170220000
H -0.358032825000 -0.506605650000 -0.903920500000
&END COORD
&KIND H ! potential and basis for H
BASIS_SET d-aug-cc-pVDZ
#BASIS_SET AUX_FIT d-aug-cc-pVDZ-JKFIT
POTENTIAL ALL
&END KIND
&KIND C ! potential and basis for C
BASIS_SET d-aug-cc-pVDZ
#BASIS_SET AUX_FIT d-aug-cc-pVDZ-JKFIT
POTENTIAL ALL
&END KIND
&END SUBSYS
&END FORCE_EVAL
[3.png]
#####==== gaussian CH4.gif ====#####
%chk=C:\Users\hp\Desktop\spectra\gaussian_methanol\demo\demo.chk
#p b3lyp/gen nosymm polar
demo
0 1
C 0.00000301 0.00000364 0.00001399
H 1.09628248 0.00021863 0.00883337
H -0.36574505 1.03347187 0.00883297
H -0.37252270 -0.52710669 0.88617022
H -0.35803282 -0.50660565 -0.90392050
H 0
S 4 1.00
13.0100000 0.0196850
1.9620000 0.1379770
0.4446000 0.4781480
0.1220000 0.5012400
S 1 1.00
0.1220000 1.0000000
S 1 1.00
0.0297400 1.0000000
S 1 1.00
0.00725 1.000000
P 1 1.00
0.7270000 1.0000000
P 1 1.00
0.1410000 1.0000000
P 1 1.00
0.02730 1.000000
****
C 0
S 9 1.00
6665.0000000 0.0006920
1000.0000000 0.0053290
228.0000000 0.0270770
64.7100000 0.1017180
21.0600000 0.2747400
7.4950000 0.4485640
2.7970000 0.2850740
0.5215000 0.0152040
0.1596000 -0.0031910
S 9 1.00
6665.0000000 -0.0001460
1000.0000000 -0.0011540
228.0000000 -0.0057250
64.7100000 -0.0233120
21.0600000 -0.0639550
7.4950000 -0.1499810
2.7970000 -0.1272620
0.5215000 0.5445290
0.1596000 0.5804960
S 1 1.00
0.1596000 1.0000000
S 1 1.00
0.0469000 1.0000000
S 1 1.00
0.0138 1.000000
P 4 1.00
9.4390000 0.0381090
2.0020000 0.2094800
0.5456000 0.5085570
0.1517000 0.4688420
P 1 1.00
0.1517000 1.0000000
P 1 1.00
0.0404100 1.0000000
P 1 1.00
0.0108 1.000000
D 1 1.00
0.5500000 1.0000000
D 1 1.00
0.1510000 1.0000000
D 1 1.00
0.0415 1.000000
****
#####==== psi4 CH4.in ====#####
memory 12000 mb
molecule mol {
0 1
C .0000030150 .0000036400 .0000139900
H 1.0962824850 .0002186300 .0088333700
H -.3657450550 1.0334718700 .0088329700
H -.3725226950 -.5271066900 .8861702200
H -.3580328250 -.5066056500 -.9039205000
symmetry c1
no_reorient
no_com
}
set {
basis d-aug-cc-pVDZ
guess sad
scf_type direct
df_basis_scf d-aug-cc-pvdz-jkfit
e_convergence 1.0E-10
d_convergence 1.0E-10
}
import math
dipole_NE = []
quadrupole_NE = []
e, wfn = energy('B3LYP',return_wfn=True)
dpx = psi4.get_variable('SCF DIPOLE X')
dpy = psi4.get_variable('SCF DIPOLE Y')
dpz = psi4.get_variable('SCF DIPOLE Z')
dptot = math.sqrt(dpx*dpx + dpy*dpy + dpz*dpz)
dipole_NE.append(dpx)
dipole_NE.append(dpy)
dipole_NE.append(dpz)
dipole_NE.append(dptot)
oeprop(wfn,'QUADRUPOLE',title="B3LYP")
qpxx = psi4.get_variable('B3LYP QUADRUPOLE XX')
qpxy = psi4.get_variable('B3LYP QUADRUPOLE XY')
qpyy = psi4.get_variable('B3LYP QUADRUPOLE YY')
qpxz = psi4.get_variable('B3LYP QUADRUPOLE XZ')
qpyz = psi4.get_variable('B3LYP QUADRUPOLE YZ')
qpzz = psi4.get_variable('B3LYP QUADRUPOLE ZZ')
quadrupole_NE.append(qpxx)
quadrupole_NE.append(qpxy)
quadrupole_NE.append(qpyy)
quadrupole_NE.append(qpxz)
quadrupole_NE.append(qpyz)
quadrupole_NE.append(qpzz)
#--------------------------------------------------------------------
mints = psi4.core.MintsHelper(wfn.basisset())
ao_overlap = mints.ao_overlap()
Co = wfn.Ca()
import numpy
numpy.set_printoptions(threshold=numpy.nan)
Da_so = wfn.Da()
np.save('molecule0001_ao_overlap_E0.npy',ao_overlap)
np.save('molecule0001_so_density_E0.npy',Da_so)
np.save('molecule0001_mo_coefficients_E0.npy',Co)
#--------------------------------------------------------------------
#perturbation
pert = 1.8897261250e-5
lambdas = [pert, -pert]
dipole_EX = []
dipole_EY = []
dipole_EZ = []
set perturb_h true
set perturb_with dipole
sign = 'P'
for l in lambdas:
set perturb_dipole [$l, 0, 0]
set scf guess read
e, wfn = energy('B3LYP',return_wfn=True)
dpx = psi4.get_variable('SCF DIPOLE X')
dpy = psi4.get_variable('SCF DIPOLE Y')
dpz = psi4.get_variable('SCF DIPOLE Z')
dipole_EX.append(dpx)
dipole_EX.append(dpy)
dipole_EX.append(dpz)
#--------------------------------------------------------------------
mints = psi4.core.MintsHelper(wfn.basisset())
ao_overlap = mints.ao_overlap()
Co = wfn.Ca()
Da_so = wfn.Da()
Da_mo = Matrix.triplet(wfn.Ca(), Da_so, wfn.Ca(), True, False, False)
np.save('molecule0001_ao_overlap_E' + sign + 'X.npy',ao_overlap)
np.save('molecule0001_so_density_E' + sign + 'X.npy',Da_so)
np.save('molecule0001_mo_coefficients_E' + sign + 'X.npy',Co)
#--------------------------------------------------------------------
#--------------------------------------------------------------------
set perturb_dipole [0, $l, 0]
set scf guess read
e, wfn = energy('B3LYP',return_wfn=True)
oeprop(wfn,'DIPOLE')
dpx = psi4.get_variable('SCF DIPOLE X')
dpy = psi4.get_variable('SCF DIPOLE Y')
dpz = psi4.get_variable('SCF DIPOLE Z')
dipole_EY.append(dpx)
dipole_EY.append(dpy)
dipole_EY.append(dpz)
#--------------------------------------------------------------------
mints = psi4.core.MintsHelper(wfn.basisset())
ao_overlap = mints.ao_overlap()
Co = wfn.Ca()
Da_so = wfn.Da()
np.save('molecule0001_ao_overlap_E' + sign + 'Y.npy',ao_overlap)
np.save('molecule0001_so_density_E' + sign + 'Y.npy',Da_so)
np.save('molecule0001_mo_coefficients_E' + sign + 'Y.npy',Co)
#--------------------------------------------------------------------
#--------------------------------------------------------------------
set perturb_dipole [0, 0, $l]
set scf guess read
e, wfn = energy('B3LYP',return_wfn=True)
oeprop(wfn,'DIPOLE')
dpx = psi4.get_variable('SCF DIPOLE X')
dpy = psi4.get_variable('SCF DIPOLE Y')
dpz = psi4.get_variable('SCF DIPOLE Z')
dipole_EZ.append(dpx)
dipole_EZ.append(dpy)
dipole_EZ.append(dpz)
#--------------------------------------------------------------------
mints = psi4.core.MintsHelper(wfn.basisset())
ao_overlap = mints.ao_overlap()
Co = wfn.Ca()
Da_so = wfn.Da()
np.save('molecule0001_ao_overlap_E' + sign + 'Z.npy',ao_overlap)
np.save('molecule0001_so_density_E' + sign + 'Z.npy',Da_so)
np.save('molecule0001_mo_coefficients_E' + sign + 'Z.npy',Co)
sign = 'N'
#--------------------------------------------------------------------
#--------------------------------------------------------------------
pl_11 = -(dipole_EX[0] - dipole_EX[3])/(2.0*pert*psi_dipmom_au2debye)
pl_12 = -(dipole_EX[1] - dipole_EX[4])/(2.0*pert*psi_dipmom_au2debye)
pl_13 = -(dipole_EX[2] - dipole_EX[5])/(2.0*pert*psi_dipmom_au2debye)
pl_21 = -(dipole_EY[0] - dipole_EY[3])/(2.0*pert*psi_dipmom_au2debye)
pl_22 = -(dipole_EY[1] - dipole_EY[4])/(2.0*pert*psi_dipmom_au2debye)
pl_23 = -(dipole_EY[2] - dipole_EY[5])/(2.0*pert*psi_dipmom_au2debye)
pl_31 = -(dipole_EZ[0] - dipole_EZ[3])/(2.0*pert*psi_dipmom_au2debye)
pl_32 = -(dipole_EZ[1] - dipole_EZ[4])/(2.0*pert*psi_dipmom_au2debye)
pl_33 = -(dipole_EZ[2] - dipole_EZ[5])/(2.0*pert*psi_dipmom_au2debye)
print_out("\nYY-Dipole Moment [Debye] x+ x- y+ y- z+ z-")
print_out("\n")
psi4.print_out("{:22.15f}{:25.15f}{:25.15f}\n".format(dipole_EX[0],dipole_EX[1],dipole_EX[2]))
psi4.print_out("{:22.15f}{:25.15f}{:25.15f}\n".format(dipole_EX[3],dipole_EX[4],dipole_EX[5]))
psi4.print_out("{:22.15f}{:25.15f}{:25.15f}\n".format(dipole_EY[0],dipole_EY[1],dipole_EY[2]))
psi4.print_out("{:22.15f}{:25.15f}{:25.15f}\n".format(dipole_EY[3],dipole_EY[4],dipole_EY[5]))
psi4.print_out("{:22.15f}{:25.15f}{:25.15f}\n".format(dipole_EZ[0],dipole_EZ[1],dipole_EZ[2]))
psi4.print_out("{:22.15f}{:25.15f}{:25.15f}\n".format(dipole_EZ[3],dipole_EZ[4],dipole_EZ[5]))
print_out("\nYY-Polarizability tensor [a.u.]")
print_out("\n")
psi4.print_out("{:22.15f}{:25.15f}{:25.15f}\n".format(pl_11,pl_12,pl_13))
psi4.print_out("{:22.15f}{:25.15f}{:25.15f}\n".format(pl_21,pl_22,pl_23))
psi4.print_out("{:22.15f}{:25.15f}{:25.15f}\n".format(pl_31,pl_32,pl_33))
print_out("\nYY-Dipole Moment(Debye)")
print_out("\n")
psi4.print_out("{}{:24.15f}{}{:22.15f}{}{:22.15f}\n".format("X",dipole_NE[0]," Y",dipole_NE[1]," Z",dipole_NE[2]))
psi4.print_out("{}{:22.15f}\n".format("Tol",dipole_NE[3]))
print_out("\nYY-Quadrupole Moments (Debye-Ang)")
print_out("\n")
psi4.print_out("{}{:22.15f}{}{:22.15f}{}{:22.15f}\n".format("XX",quadrupole_NE[0]," XY",quadrupole_NE[1]," YY",quadrupole_NE[2]))
psi4.print_out("{}{:22.15f}{}{:22.15f}{}{:22.15f}\n".format("XZ",quadrupole_NE[3]," YZ",quadrupole_NE[4]," ZZ",quadrupole_NE[5]))
--
You received this message because you are subscribed to the Google Groups "cp2k" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cp2k+unsubscribe at googlegroups.com<mailto:cp2k+unsubscribe at googlegroups.com>.
To view this discussion on the web visit https://groups.google.com/d/msgid/cp2k/780660d3-ae84-4beb-b3c5-6c12afee7d66n%40googlegroups.com<https://groups.google.com/d/msgid/cp2k/780660d3-ae84-4beb-b3c5-6c12afee7d66n%40googlegroups.com?utm_medium=email&utm_source=footer>.
--
You received this message because you are subscribed to the Google Groups "cp2k" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cp2k+unsubscribe at googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/cp2k/ZR0P278MB07598BF7661A188099BC21A19F56A%40ZR0P278MB0759.CHEP278.PROD.OUTLOOK.COM.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 3.png
Type: image/png
Size: 86309 bytes
Desc: 3.png
URL: <https://lists.cp2k.org/archives/cp2k-user/attachments/20230610/34d20d83/attachment-0003.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 2.png
Type: image/png
Size: 32740 bytes
Desc: 2.png
URL: <https://lists.cp2k.org/archives/cp2k-user/attachments/20230610/34d20d83/attachment-0004.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 1.png
Type: image/png
Size: 78987 bytes
Desc: 1.png
URL: <https://lists.cp2k.org/archives/cp2k-user/attachments/20230610/34d20d83/attachment-0005.png>
More information about the CP2K-user
mailing list