28 use,
intrinsic :: iso_fortran_env
66 integer,
public,
parameter :: &
75 class(interaction_partner_t),
target,
intent(inout) :: partner
76 class(xc_interaction_t),
pointer :: this
82 this%label =
"exchange-correlation interaction"
84 this%partner => partner
91 class(xc_interaction_t),
intent(inout) :: this
100 class(xc_interaction_t),
intent(inout) :: this
111 class(xc_interaction_t),
intent(inout) :: this
123 class(xc_interaction_t),
intent(inout) :: this
133 class(xc_interaction_t),
intent(inout) :: this
137 safe_deallocate_a(this%density)
147 type(xc_interaction_t),
intent(inout) :: this
157 subroutine calc_tb09_c(mesh, space, functl, dens, gdens, ispin, rcell_volume)
158 class(
mesh_t),
intent(in) :: mesh
159 class(
space_t),
intent(in) :: space
161 real(real64),
intent(in) :: dens(:,:)
162 real(real64),
intent(in) :: gdens(:,:,:)
163 integer,
intent(in) :: ispin
164 real(real64),
intent(in) :: rcell_volume
166 real(real64),
allocatable :: gnon(:)
167 real(real64) :: gn(space%dim), n,
parameters(1)
172 safe_allocate(gnon(1:mesh%np))
177 gn(1:space%dim) = gdens(ii, 1:space%dim, 1)
179 n = dens(ii, 1) + dens(ii, 2)
180 gn(1:space%dim) = gdens(ii, 1:space%dim, 1) + gdens(ii, 1:space%dim, 2)
183 if (n <= 1e-7_real64)
then
186 gnon(ii) =
sqrt(sum((gn(1:space%dim)/n)**2))
192 call xc_f03_func_set_ext_params(functl(1)%conf,
parameters)
194 safe_deallocate_a(gnon)
200 subroutine calc_mvorb_alpha(mesh, namespace, space, functl, dens, gdens, ispin, rcell_volume, cam)
201 class(
mesh_t),
intent(in) :: mesh
203 class(
space_t),
intent(in) :: space
205 real(real64),
intent(in) :: dens(:,:)
206 real(real64),
intent(in) :: gdens(:,:,:)
207 integer,
intent(in) :: ispin
208 real(real64),
intent(in) :: rcell_volume
209 type(
xc_cam_t),
intent(inout) :: cam
211 real(real64),
allocatable :: gnon(:)
212 real(real64) :: tb09_c, alpha
213 real(real64) :: gn(space%dim), n
215 real(real64) :: parameters(3)
216 real(real64),
parameter :: tol_small_dens = 1e-11_real64
220 safe_allocate(gnon(1:mesh%np))
225 gn(1:space%dim) = gdens(ii, 1:space%dim, 1)
227 n = dens(ii, 1) + dens(ii, 2)
228 gn(1:space%dim) = gdens(ii, 1:space%dim, 1) + gdens(ii, 1:space%dim, 2)
231 if (n <= tol_small_dens)
then
234 gnon(ii) =
sqrt(sum((gn(1:space%dim)/n)**2))
235 gnon(ii) =
sqrt(gnon(ii))
241 safe_deallocate_a(gnon)
243 select case (functl(
func_c)%id)
245 alpha = 0.121983_real64+0.130711_real64*tb09_c**4
248 write(
message(1),
'(a,f6.3,a)')
'MVORB mixing parameter bigger than one (' , alpha ,
').'
252 write(
message(1),
'(a,f6.3,a)')
'MVORB mixing parameter is (' , alpha ,
').'
266 alpha = -1.00778_real64+1.10507_real64*tb09_c
269 write(
message(1),
'(a,f6.3,a)')
'MVORB mixing parameter bigger than one (' , alpha ,
').'
272 else if (alpha < 0)
then
273 write(
message(1),
'(a,f6.3,a)')
'MVORB mixing parameter smaller than zero (' , alpha ,
').'
277 write(
message(1),
'(a,f6.3,a)')
'MVORB mixing parameter is (' , alpha ,
').'
285 call messages_not_implemented(
"MVORB density-based mixing for functionals other than PBE0 and HSE06", namespace=namespace)
double sqrt(double __x) __attribute__((__nothrow__
integer, parameter, public unpolarized
Parameters...
real(real64), parameter, public m_zero
This module defines the abstract interaction_t class, and some auxiliary classes for interactions.
subroutine, public interaction_end(this)
This module defines classes and functions for interaction partners.
This module defines various routines, operating on mesh functions.
This module defines the meshes, which are used in Octopus.
subroutine, public messages_not_implemented(feature, namespace)
subroutine, public messages_warning(no_lines, all_nodes, namespace)
character(len=256), dimension(max_lines), public message
to be output by fatal, warning
subroutine, public messages_info(no_lines, iunit, debug_only, stress, all_nodes, namespace)
This module defines the quantity_t class and the IDs for quantities, which can be exposed by a system...
This module handles spin dimensions of the states and the k-point distribution.
integer, parameter, public xc_hyb_gga_xc_mvorb_pbeh
Density-based mixing parameter of PBE0.
integer, parameter, public xc_hyb_gga_xc_mvorb_hse06
Density-based mixing parameter of HSE06.
subroutine xc_interaction_finalize(this)
class(xc_interaction_t) function, pointer xc_interaction_constructor(partner)
subroutine, public xc_interaction_compute(this)
subroutine xc_interaction_end(this)
subroutine, public calc_tb09_c(mesh, space, functl, dens, gdens, ispin, rcell_volume)
integer, parameter, public func_c
subroutine xc_interaction_init(this)
subroutine xc_interaction_calculate(this)
subroutine xc_interaction_calculate_energy(this)
subroutine, public calc_mvorb_alpha(mesh, namespace, space, functl, dens, gdens, ispin, rcell_volume, cam)
Describes mesh distribution to nodes.
Coulomb-attenuating method parameters, used in the partitioning of the Coulomb potential into a short...