grad_nn Subroutine

public subroutine grad_nn(atoms, ecp_el)

@brief Gradient of nuclear repulsion energy

Arguments

Type IntentOptional Attributes Name
type(atomic_structure), intent(inout) :: atoms
integer, intent(in) :: ecp_el(:)

Called by

proc~~grad_nn~~CalledByGraph proc~grad_nn grad_nn proc~hf_gradient hf_gradient proc~hf_gradient->proc~grad_nn proc~tdhf_1e_grad tdhf_1e_grad proc~tdhf_1e_grad->proc~grad_nn proc~tdhf_gradient tdhf_gradient proc~tdhf_gradient->proc~tdhf_1e_grad proc~tdhf_gradient_c tdhf_gradient_C proc~tdhf_gradient_c->proc~tdhf_gradient

Source Code

  subroutine grad_nn(atoms, ecp_el)
    implicit none
    type(atomic_structure), intent(inout) :: atoms
    integer, intent(in) :: ecp_el(:)

    integer :: k, l
    real(kind=dp) :: pkl(3), rkl3, de1(3)

    do k = 2, ubound(atoms%zn, 1)
        do l = 1, k-1
            if (k==l) cycle
            pkl = atoms%xyz(:,k)-atoms%xyz(:,l)
            rkl3 = norm2(pkl)**3
            de1 = -(atoms%zn(k)-ecp_el(k))*(atoms%zn(l)-ecp_el(l))*pkl/rkl3
            atoms%grad(:,k) = atoms%grad(:,k) + de1
            atoms%grad(:,l) = atoms%grad(:,l) - de1
        end do
    end do

  end subroutine grad_nn