mimic_long_range Module

computes energy, forces, and potential from the interactions between the quantum fragment and long-range atoms using a multipole expansion approximation for the quantum fragment



Contents


Subroutines

public subroutine compute_folded_tensors(tensors, tensor_sums, multipole_origin, multipole_order, atoms)

Computes folded tensor used in energy and potential computations

Arguments

TypeIntentOptionalAttributesName
real(kind=dp), intent(out), dimension(:):: tensors

Array storing tensors

real(kind=dp), intent(out), dimension(:):: tensor_sums

Array stroing tensor sums

real(kind=dp), intent(in), dimension(3):: multipole_origin

Coordinates of the origin of multipolar expansion

integer, intent(in) :: multipole_order

Maximal order of multipoles

type(atom_type), intent(in), dimension(:):: atoms

long-range atoms

public subroutine compute_lr_energy(quantum_fragment, energy, tensor_sums)

compute interaction energy between quantum fragment and long-range atoms

Arguments

TypeIntentOptionalAttributesName
type(quantum_fragment_type), intent(in) :: quantum_fragment

quantum fragment

real(kind=dp), intent(out) :: energy

interaction energy

real(kind=dp), intent(in), dimension(:):: tensor_sums

Array stroing tensor sums

public subroutine compute_lr_potential(quantum_fragment, a_start, a_end, tensor_sums)

compute potential from long-range atoms on quantum fragment

Arguments

TypeIntentOptionalAttributesName
type(quantum_fragment_type), intent(in) :: quantum_fragment

quantum fragment

integer, intent(in) :: a_start

start index of real space mesh of lattice vector a

integer, intent(in) :: a_end

end index of real space mesh of lattice vector a

real(kind=dp), intent(in), dimension(:):: tensor_sums

Array stroing tensor sums

public subroutine compute_lr_forces(atoms, quantum_fragment, atom_start, atom_end)

compute forces from long-range atoms on quantum fragment and vice versa

Arguments

TypeIntentOptionalAttributesName
type(atom_type), intent(in), dimension(:):: atoms

list of atoms in the long-range part

type(quantum_fragment_type), intent(in) :: quantum_fragment

the quantum fragment

integer, intent(in) :: atom_start

index of the first atom that current process will handle

integer, intent(in) :: atom_end

index of the last atom that the current process will handle