16 #include "../base/base_uses.f90"
22 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'virial_types'
24 PUBLIC :: virial_type, virial_p_type
27 REAL(KIND=
dp),
DIMENSION(3, 3) :: pv_total = 0.0_dp, &
28 pv_kinetic = 0.0_dp, &
31 pv_fock_4c = 0.0_dp, &
32 pv_constraint = 0.0_dp
33 REAL(KIND=
dp),
DIMENSION(3, 3) :: pv_overlap = 0.0_dp, &
34 pv_ekinetic = 0.0_dp, &
37 pv_ecore_overlap = 0.0_dp, &
38 pv_ehartree = 0.0_dp, &
46 LOGICAL :: pv_availability = .false., &
47 pv_calculate = .false., &
53 TYPE(virial_type),
POINTER :: virial => null()
54 END TYPE virial_p_type
67 TYPE(virial_type),
INTENT(INOUT) :: virial
73 virial%pv_total(j, i) = 0.5_dp*(virial%pv_total(i, j) + virial%pv_total(j, i))
74 virial%pv_total(i, j) = virial%pv_total(j, i)
75 virial%pv_kinetic(j, i) = 0.5_dp*(virial%pv_kinetic(i, j) + virial%pv_kinetic(j, i))
76 virial%pv_kinetic(i, j) = virial%pv_kinetic(j, i)
77 virial%pv_virial(j, i) = 0.5_dp*(virial%pv_virial(i, j) + virial%pv_virial(j, i))
78 virial%pv_virial(i, j) = virial%pv_virial(j, i)
79 virial%pv_xc(j, i) = 0.5_dp*(virial%pv_xc(i, j) + virial%pv_xc(j, i))
80 virial%pv_xc(i, j) = virial%pv_xc(j, i)
81 virial%pv_fock_4c(j, i) = 0.5_dp*(virial%pv_fock_4c(i, j) + virial%pv_fock_4c(j, i))
82 virial%pv_fock_4c(i, j) = virial%pv_fock_4c(j, i)
83 virial%pv_constraint(j, i) = 0.5_dp*(virial%pv_constraint(i, j) + virial%pv_constraint(j, i))
84 virial%pv_constraint(i, j) = virial%pv_constraint(j, i)
86 virial%pv_overlap(j, i) = 0.5_dp*(virial%pv_overlap(i, j) + virial%pv_overlap(j, i))
87 virial%pv_overlap(i, j) = virial%pv_overlap(j, i)
88 virial%pv_ekinetic(j, i) = 0.5_dp*(virial%pv_ekinetic(i, j) + virial%pv_ekinetic(j, i))
89 virial%pv_ekinetic(i, j) = virial%pv_ekinetic(j, i)
90 virial%pv_ppl(j, i) = 0.5_dp*(virial%pv_ppl(i, j) + virial%pv_ppl(j, i))
91 virial%pv_ppl(i, j) = virial%pv_ppl(j, i)
92 virial%pv_ppnl(j, i) = 0.5_dp*(virial%pv_ppnl(i, j) + virial%pv_ppnl(j, i))
93 virial%pv_ppnl(i, j) = virial%pv_ppnl(j, i)
94 virial%pv_ecore_overlap(j, i) = 0.5_dp*(virial%pv_ecore_overlap(i, j) + virial%pv_ecore_overlap(j, i))
95 virial%pv_ecore_overlap(i, j) = virial%pv_ecore_overlap(j, i)
96 virial%pv_ehartree(j, i) = 0.5_dp*(virial%pv_ehartree(i, j) + virial%pv_ehartree(j, i))
97 virial%pv_ehartree(i, j) = virial%pv_ehartree(j, i)
98 virial%pv_exc(j, i) = 0.5_dp*(virial%pv_exc(i, j) + virial%pv_exc(j, i))
99 virial%pv_exc(i, j) = virial%pv_exc(j, i)
100 virial%pv_exx(j, i) = 0.5_dp*(virial%pv_exx(i, j) + virial%pv_exx(j, i))
101 virial%pv_exx(i, j) = virial%pv_exx(j, i)
102 virial%pv_vdw(j, i) = 0.5_dp*(virial%pv_vdw(i, j) + virial%pv_vdw(j, i))
103 virial%pv_vdw(i, j) = virial%pv_vdw(j, i)
104 virial%pv_mp2(j, i) = 0.5_dp*(virial%pv_mp2(i, j) + virial%pv_mp2(j, i))
105 virial%pv_mp2(i, j) = virial%pv_mp2(j, i)
106 virial%pv_nlcc(j, i) = 0.5_dp*(virial%pv_nlcc(i, j) + virial%pv_nlcc(j, i))
107 virial%pv_nlcc(i, j) = virial%pv_nlcc(j, i)
108 virial%pv_gapw(j, i) = 0.5_dp*(virial%pv_gapw(i, j) + virial%pv_gapw(j, i))
109 virial%pv_gapw(i, j) = virial%pv_gapw(j, i)
110 virial%pv_lrigpw(j, i) = 0.5_dp*(virial%pv_lrigpw(i, j) + virial%pv_lrigpw(j, i))
111 virial%pv_lrigpw(i, j) = virial%pv_lrigpw(j, i)
123 TYPE(virial_type),
INTENT(INOUT) :: virial
124 LOGICAL,
INTENT(IN),
OPTIONAL :: reset
129 IF (
PRESENT(reset)) my_reset = reset
131 virial%pv_total = 0.0_dp
132 virial%pv_kinetic = 0.0_dp
133 virial%pv_virial = 0.0_dp
134 virial%pv_xc = 0.0_dp
135 virial%pv_fock_4c = 0.0_dp
136 virial%pv_constraint = 0.0_dp
138 virial%pv_overlap = 0.0_dp
139 virial%pv_ekinetic = 0.0_dp
140 virial%pv_ppl = 0.0_dp
141 virial%pv_ppnl = 0.0_dp
142 virial%pv_ecore_overlap = 0.0_dp
143 virial%pv_ehartree = 0.0_dp
144 virial%pv_exc = 0.0_dp
145 virial%pv_exx = 0.0_dp
146 virial%pv_vdw = 0.0_dp
147 virial%pv_mp2 = 0.0_dp
148 virial%pv_nlcc = 0.0_dp
149 virial%pv_gapw = 0.0_dp
150 virial%pv_lrigpw = 0.0_dp
153 virial%pv_availability = .false.
154 virial%pv_calculate = .false.
155 virial%pv_numer = .false.
156 virial%pv_diagonal = .false.
188 SUBROUTINE virial_set(virial, pv_total, pv_kinetic, pv_virial, pv_xc, pv_fock_4c, pv_constraint, &
189 pv_overlap, pv_ekinetic, pv_ppl, pv_ppnl, pv_ecore_overlap, pv_ehartree, &
190 pv_exc, pv_exx, pv_vdw, pv_mp2, pv_nlcc, pv_gapw, pv_lrigpw, &
191 pv_availability, pv_calculate, pv_numer, pv_diagonal)
193 TYPE(virial_type),
INTENT(INOUT) :: virial
194 REAL(kind=
dp),
DIMENSION(3, 3),
OPTIONAL :: pv_total, pv_kinetic, pv_virial, pv_xc, &
195 pv_fock_4c, pv_constraint, pv_overlap, pv_ekinetic, pv_ppl, pv_ppnl, pv_ecore_overlap, &
196 pv_ehartree, pv_exc, pv_exx, pv_vdw, pv_mp2, pv_nlcc, pv_gapw, pv_lrigpw
197 LOGICAL,
OPTIONAL :: pv_availability, pv_calculate, pv_numer, &
200 IF (
PRESENT(pv_total)) virial%pv_total = pv_total
201 IF (
PRESENT(pv_kinetic)) virial%pv_kinetic = pv_kinetic
202 IF (
PRESENT(pv_virial)) virial%pv_virial = pv_virial
203 IF (
PRESENT(pv_xc)) virial%pv_xc = pv_xc
204 IF (
PRESENT(pv_fock_4c)) virial%pv_fock_4c = pv_fock_4c
205 IF (
PRESENT(pv_constraint)) virial%pv_constraint = pv_constraint
207 IF (
PRESENT(pv_overlap)) virial%pv_overlap = pv_overlap
208 IF (
PRESENT(pv_ekinetic)) virial%pv_ekinetic = pv_ekinetic
209 IF (
PRESENT(pv_ppl)) virial%pv_ppl = pv_ppl
210 IF (
PRESENT(pv_ppnl)) virial%pv_ppnl = pv_ppnl
211 IF (
PRESENT(pv_ecore_overlap)) virial%pv_ecore_overlap = pv_ecore_overlap
212 IF (
PRESENT(pv_ehartree)) virial%pv_ehartree = pv_ehartree
213 IF (
PRESENT(pv_exc)) virial%pv_exc = pv_exc
214 IF (
PRESENT(pv_exx)) virial%pv_exx = pv_exx
215 IF (
PRESENT(pv_vdw)) virial%pv_vdw = pv_vdw
216 IF (
PRESENT(pv_mp2)) virial%pv_mp2 = pv_mp2
217 IF (
PRESENT(pv_nlcc)) virial%pv_nlcc = pv_nlcc
218 IF (
PRESENT(pv_gapw)) virial%pv_gapw = pv_gapw
219 IF (
PRESENT(pv_lrigpw)) virial%pv_lrigpw = pv_lrigpw
221 IF (
PRESENT(pv_availability)) virial%pv_availability = pv_availability
222 IF (
PRESENT(pv_calculate)) virial%pv_calculate = pv_calculate
223 IF (
PRESENT(pv_numer)) virial%pv_numer = pv_numer
224 IF (
PRESENT(pv_diagonal)) virial%pv_diagonal = pv_diagonal
Defines the basic variable types.
integer, parameter, public dp
subroutine, public zero_virial(virial, reset)
...
subroutine, public virial_set(virial, pv_total, pv_kinetic, pv_virial, pv_xc, pv_fock_4c, pv_constraint, pv_overlap, pv_ekinetic, pv_ppl, pv_ppnl, pv_ecore_overlap, pv_ehartree, pv_exc, pv_exx, pv_vdw, pv_mp2, pv_nlcc, pv_gapw, pv_lrigpw, pv_availability, pv_calculate, pv_numer, pv_diagonal)
...
subroutine, public symmetrize_virial(virial)
Symmetrize the virial components.