rpavnorm Subroutine

public subroutine rpavnorm(vr, vl, tamm_dancoff)

Uses

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

@brief Normalize V1 and V2 by biorthogonality condition

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(out), dimension(:,:) :: vr
real(kind=dp), intent(out), dimension(:,:) :: vl
logical, intent(in) :: tamm_dancoff

Called by

proc~~rpavnorm~~CalledByGraph proc~rpavnorm rpavnorm proc~tdhf_energy tdhf_energy proc~tdhf_energy->proc~rpavnorm proc~tdhf_mrsf_energy tdhf_mrsf_energy proc~tdhf_mrsf_energy->proc~rpavnorm proc~tdhf_sf_energy tdhf_sf_energy proc~tdhf_sf_energy->proc~rpavnorm proc~tdhf_energy_c tdhf_energy_C proc~tdhf_energy_c->proc~tdhf_energy 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 rpavnorm(vr,vl,tamm_dancoff)

    use precision, only: dp

    implicit none

    real(kind=dp), intent(out), dimension(:,:) :: vr, vl
    logical, intent(in) :: tamm_dancoff

    real(kind=dp) :: scal, vrl, vrr
    integer :: ivec, nvec

    nvec = ubound(vl, 2)

    if (tamm_dancoff) then
      do ivec = 1, nvec
        vrr = dot_product(vr(:,ivec),vr(:,ivec))
        scal = sqrt(1.0_dp/vrr)
        vr(:,ivec) = vr(:,ivec)*scal
      end do
    else
      do ivec = 1, nvec
        vrl = dot_product(vr(:,ivec),vl(1:nvec,ivec))
        scal = sqrt(1.0D+00/vrl)
        vr(:,ivec)=vr(:,ivec)*scal
        vl(:,ivec)=vl(:,ivec)*scal
      end do
    end if
  end subroutine rpavnorm