sfqvec Subroutine

public subroutine sfqvec(q, xm, eigv, ndsr)

Uses

  • proc~~sfqvec~~UsesGraph proc~sfqvec sfqvec module~precision precision proc~sfqvec->module~precision iso_fortran_env iso_fortran_env module~precision->iso_fortran_env

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(inout), dimension(:,:) :: q
real(kind=dp), intent(in), dimension(:) :: xm
real(kind=dp), intent(in), dimension(:) :: eigv
integer, intent(in) :: ndsr

Called by

proc~~sfqvec~~CalledByGraph proc~sfqvec sfqvec proc~tdhf_mrsf_energy tdhf_mrsf_energy proc~tdhf_mrsf_energy->proc~sfqvec proc~tdhf_sf_energy tdhf_sf_energy proc~tdhf_sf_energy->proc~sfqvec proc~tdhf_mrsf_energy_c tdhf_mrsf_energy_C proc~tdhf_mrsf_energy_c->proc~tdhf_mrsf_energy proc~tdhf_sf_energy_c tdhf_sf_energy_C proc~tdhf_sf_energy_c->proc~tdhf_sf_energy

Source Code

  subroutine sfqvec(q,xm,eigv,ndsr)
    use precision, only: dp

    implicit none

    real(kind=dp), intent(inout), dimension(:,:) :: q
    real(kind=dp), intent(in), dimension(:) :: xm, eigv
    integer, intent(in) :: ndsr

    integer :: ii, ist, xvec_dim
    real(kind=dp) :: sign, val1, val2

    xvec_dim = ubound(xm, 1)

    do ist = 1, ndsr
      do ii = 1, xvec_dim
        val1 = eigv(ist)-xm(ii)
        val2 = abs(val1)
        if( val2<1.0D-12 )then
          val1 = 1.0D-05
        else if( val2<1.0D-05 )then
          sign = val2/val1
          val1 = sign*1.0D-05
        end if
        q(ii,ist) = q(ii,ist)/val1
      end do
    end do
  end subroutine sfqvec