rpaexpndv Subroutine

public subroutine rpaexpndv(vr, vl, vro, vlo, br, bl, ndsr, tamm_dancoff)

Uses

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

@brief Expand reduced vectors to real size space

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(in) :: vr(:,:)
real(kind=dp), intent(in) :: vl(:,:)
real(kind=dp), intent(out) :: vro(:,:)
real(kind=dp), intent(out) :: vlo(:,:)
real(kind=dp), intent(in) :: br(:,:)
real(kind=dp), intent(in) :: bl(:,:)
integer, intent(in) :: ndsr
logical, intent(in) :: tamm_dancoff

Calls

proc~~rpaexpndv~~CallsGraph proc~rpaexpndv rpaexpndv proc~oqp_dgemm_i64 oqp_dgemm_i64 proc~rpaexpndv->proc~oqp_dgemm_i64 dgemm dgemm proc~oqp_dgemm_i64->dgemm interface~show_message show_message proc~oqp_dgemm_i64->interface~show_message

Called by

proc~~rpaexpndv~~CalledByGraph proc~rpaexpndv rpaexpndv proc~tdhf_energy tdhf_energy proc~tdhf_energy->proc~rpaexpndv proc~tdhf_energy_c tdhf_energy_C proc~tdhf_energy_c->proc~tdhf_energy

Source Code

  subroutine rpaexpndv(vr,vl,vro,vlo,br,bl,ndsr,tamm_dancoff)
    use precision, only: dp

    implicit none

    real(kind=dp), intent(in) :: vr(:,:), vl(:,:)
    real(kind=dp), intent(out) :: vro(:,:), vlo(:,:)
    real(kind=dp), intent(in) :: br(:,:), bl(:,:)
    integer, intent(in) :: ndsr
    logical, intent(in) :: tamm_dancoff

    integer :: xvec_dim
    integer :: nvec

    nvec = ubound(vr, 2)
    xvec_dim = ubound(vro, 1)

    call dgemm('n','n',xvec_dim,ndsr,nvec, &
               1.0_dp,br,xvec_dim,vr,nvec, &
               0.0_dp,vro,xvec_dim)

    if (tamm_dancoff) then
      vlo(:,1:ndsr) = vro(:,1:ndsr)
    else
      call dgemm('n','n',xvec_dim,ndsr,nvec, &
                 1.0_dp,bl,xvec_dim,vl,nvec, &
                 0.0_dp,vlo,xvec_dim)
    end if

  end subroutine rpaexpndv