89 real(real64),
allocatable :: dchi(:,:,:,:)
90 complex(real64),
allocatable :: zchi(:,:,:,:)
99 type(states_elec_t),
public,
pointer :: st => null()
100 type(xc_cam_t) :: cam
101 type(poisson_t) :: psolver
102 type(singularity_t) :: singul
106 type(isdf_options_t) :: isdf
112 type(fourier_space_op_t) :: coulb
116 real(real64),
parameter,
private :: TOL_EXX_WEIGHT = 1.0e-3_real64
121 subroutine ace_init(this, namespace, st)
122 class(ACE_t),
intent(inout) :: this
123 type(namespace_t),
intent(in) :: namespace
124 type(states_elec_t),
intent(in ) :: st
141 if (this%nst > st%nst)
then
145 if (this%nst < st%nst)
then
146 call messages_experimental(
"Adaptively-compressed exchange defined with a subset of states", namespace=namespace)
149 if (this%nst * st%smear%el_per_state < st%qtot)
then
150 write(
message(1),
'(a)')
"ACESize should at least equal the number of occupied states."
162 class(ACE_t),
intent(inout) :: this
167 safe_deallocate_a(this%dchi)
168 safe_deallocate_a(this%zchi)
175 class(ACE_t),
intent(in) :: this
176 type(namespace_t),
intent(in) :: namespace
181 &
" approximately exact (ACESize)", this%nst, namespace=namespace)
190 class(
space_t),
intent(in) :: space
193 type(multicomm_t),
intent(in) :: mc
224 call parse_variable(namespace,
'ACEWithISDF', .false., this%with_isdf)
226 if (this%with_isdf .and. .not. this%useACE)
then
228 '"ACEWithISDF = yes" must be used with "AdaptivelyCompressedExchange = yes"')
232 if (this%useACE)
then
233 call this%ace%init(namespace, st)
234 if (this%with_isdf)
call this%isdf%init(namespace, space, st, der%mesh, this%ace%nst)
237 call poisson_init(this%psolver, namespace, space, der, mc, stencil, st%qtot, &
253 if (
present(st))
then
267 if (
associated(this%st) .and. .not. this%useACE)
then
270 safe_deallocate_p(this%st)
285 type(
mesh_t),
intent(in) :: mesh
292 call batch_scal(mesh%np, this%st%occ(:, hpsib%ik), hpsib)
305 if (this%useACE)
then
306 call this%ace%write_info(namespace)
307 if (this%with_isdf)
then
309 call this%isdf%write_info(namespace)
320#include "exchange_operator_inc.F90"
323#include "complex.F90"
324#include "exchange_operator_inc.F90"
scale a batch by a constant or vector
Prints out to iunit a message in the form: ["InputVariable" = value] where "InputVariable" is given b...
This module implements batches of mesh functions.
This module implements common operations on batches of mesh functions.
This module calculates the derivatives (gradients, Laplacians, etc.) of a function.
subroutine, public dexchange_operator_hartree_apply(this, namespace, mesh, st_d, kpoints, exx_coef, psib, hpsib)
subroutine, public dexchange_operator_ace(this, namespace, mesh, st, xst, phase)
subroutine ace_write_info(this, namespace)
subroutine ace_init(this, namespace, st)
Initialize an instance of ACE_t.
subroutine, public zexchange_operator_compute_potentials(this, namespace, space, gr, st, xst, kpoints, F_out)
subroutine, public zexchange_operator_commute_r(this, namespace, mesh, st_d, ik, psi, gpsi)
subroutine, public exchange_operator_init(this, namespace, space, st, der, mc, stencil, kpoints, cam)
subroutine, public exchange_operator_reinit(this, cam, st)
subroutine exchange_operator_write_info(this, namespace)
subroutine, public dexchange_operator_compute_potentials(this, namespace, space, gr, st, xst, kpoints, F_out)
subroutine, public zexchange_operator_single(this, namespace, space, mesh, st_d, kpoints, phase, ist, ik, psi, hpsi, rdmft, force_noace)
subroutine, public dexchange_operator_single(this, namespace, space, mesh, st_d, kpoints, phase, ist, ik, psi, hpsi, rdmft, force_noace)
subroutine ace_end(this)
End an instance of ACE_t.
subroutine, public dexchange_operator_commute_r(this, namespace, mesh, st_d, ik, psi, gpsi)
subroutine, public zexchange_operator_hartree_apply(this, namespace, mesh, st_d, kpoints, exx_coef, psib, hpsib)
subroutine, public exchange_operator_end(this)
subroutine, public zexchange_operator_apply(this, namespace, space, mesh, st_d, kpoints, phase, psib, hpsib, rdmft, force_noace)
subroutine, public dexchange_operator_apply(this, namespace, space, mesh, st_d, kpoints, phase, psib, hpsib, rdmft, force_noace)
subroutine, public zexchange_operator_ace(this, namespace, mesh, st, xst, phase)
real(real64) function, public dexchange_operator_compute_ex(mesh, st, xst)
Compute the exact exchange energy.
subroutine, public exchange_operator_rdmft_occ_apply(this, mesh, hpsib)
real(real64) function, public zexchange_operator_compute_ex(mesh, st, xst)
Compute the exact exchange energy.
subroutine, public fourier_space_op_end(this)
This module implements the underlying real-space grid.
This module is intended to contain "only mathematical" functions and procedures.
This module defines functions over batches of mesh functions.
This module defines various routines, operating on mesh functions.
This module defines the meshes, which are used in Octopus.
subroutine, public messages_print_with_emphasis(msg, iunit, namespace)
character(len=512), private msg
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_input_error(namespace, var, details, row, column)
subroutine, public messages_experimental(name, namespace)
This module handles the communicators for the various parallelization strategies.
Some general things and nomenclature:
subroutine, public poisson_init(this, namespace, space, der, mc, stencil, qtot, label, solver, verbose, force_serial, force_cmplx)
subroutine, public poisson_end(this)
This module is an helper to perform ring-pattern communications among all states.
subroutine, public singularity_end(this)
subroutine, public singularity_init(this, namespace, space, st, kpoints)
pure logical function, public states_are_real(st)
This module provides routines for communicating all batches in a ring-pattern scheme.
This module handles spin dimensions of the states and the k-point distribution.
subroutine, public states_elec_end(st)
finalize the states_elec_t object
This module provides routines for communicating states when using states parallelization.
subroutine, public states_elec_parallel_remote_access_stop(this)
stop remote memory access for states on other processors
This module defines stencils used in Octopus.
brief This module defines the class unit_t which is used by the unit_systems_oct_m module.
This module defines the unit system, used for input and output.
class representing derivatives
Describes mesh distribution to nodes.
The states_elec_t class contains all electronic wave functions.
The class representing the stencil, which is used for non-local mesh operations.
batches of electronic states
Coulomb-attenuating method parameters, used in the partitioning of the Coulomb potential into a short...