95 real(real64),
allocatable :: dchi(:,:,:,:)
96 complex(real64),
allocatable :: zchi(:,:,:,:)
97 type(wfs_elec_t),
allocatable :: chib(:)
110 type(states_elec_t),
public,
pointer :: st => null()
111 type(xc_cam_t) :: cam
112 type(poisson_t) :: psolver
113 type(singularity_t) :: singul
117 type(isdf_options_t) :: isdf
123 type(fourier_space_op_t) :: coulb
127 real(real64),
parameter,
private :: TOL_EXX_WEIGHT = 1.0e-3_real64
132 subroutine ace_init(this, namespace, st)
133 class(ACE_t),
intent(inout) :: this
134 type(namespace_t),
intent(in) :: namespace
135 type(states_elec_t),
intent(in ) :: st
152 if (this%nst > st%nst)
then
156 if (this%nst < st%nst)
then
157 call messages_experimental(
"Adaptively-compressed exchange defined with a subset of states", namespace=namespace)
160 if (this%nst * st%smear%el_per_state < st%qtot)
then
161 write(
message(1),
'(a)')
"ACESize should at least equal the number of occupied states."
174 class(ACE_t),
intent(inout) :: this
181 safe_deallocate_a(this%dchi)
182 safe_deallocate_a(this%zchi)
184 if (
allocated(this%chib))
then
185 do ik = lbound(this%chib, 1), ubound(this%chib, 1)
186 call this%chib(ik)%end()
188 safe_deallocate_a(this%chib)
196 class(
ace_t),
intent(in) :: this
202 &
" approximately exact (ACESize)", this%nst, namespace=namespace)
245 call parse_variable(namespace,
'ACEWithISDF', .false., this%with_isdf)
247 if (this%with_isdf .and. .not. this%useACE)
then
249 '"ACEWithISDF = yes" must be used with "AdaptivelyCompressedExchange = yes"')
253 if (this%useACE)
then
254 call this%ace%init(namespace, st)
255 if (this%with_isdf)
call this%isdf%init(namespace, space, der%mesh, this%ace%nst)
262 call poisson_init(this%psolver, namespace, space, der, mc, stencil, st%qtot, &
264 fft_batch_size = st%block_size)
279 if (
present(st))
then
293 if (
associated(this%st) .and. .not. this%useACE)
then
296 safe_deallocate_p(this%st)
311 type(
mesh_t),
intent(in) :: mesh
318 call batch_scal(mesh%np, this%st%occ(:, hpsib%ik), hpsib)
331 if (this%useACE)
then
332 call this%ace%write_info(namespace)
333 if (this%with_isdf)
then
335 call this%isdf%write_info(namespace)
346#include "exchange_operator_inc.F90"
349#include "complex.F90"
350#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 contains interfaces for BLAS routines You should not use these routines directly....
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)
Construct the ACE vectors.
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)
Construct the ACE vectors.
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.
Fast Fourier Transform module. This module provides a single interface that works with different FFT ...
integer, parameter, public fftlib_accel
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, fft_batch_size)
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.
subroutine, public dsymmetrizer_apply_batch(this, mesh, iop, src, dst)
Symmetrize a whole batch, returning another batch with the same layout.
subroutine, public zsymmetrizer_apply_batch(this, mesh, iop, src, dst)
Symmetrize a whole batch, returning another batch with the same layout.
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.
Stores all communicators and groups.
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...