vevtr Subroutine

public pure subroutine vevtr(m, q, indx, v, ldv, ld2v, e, lde, ve, ldve, ld2ve, vev, ldvev, wrk5)

Compute v*e*trans(v) for the (indx)th m by q array in v.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: m

Number of columns of data in the independent variable.

integer, intent(in) :: q

Number of responses per observation.

integer, intent(in) :: indx

Row in v in which the m by q array is stored.

real(kind=wp), intent(in) :: v(ldv,ld2v,q)

An array of q by m matrices.

integer, intent(in) :: ldv

Leading dimension of array v.

integer, intent(in) :: ld2v

Second dimension of array v.

real(kind=wp), intent(in) :: e(lde,m)

Matrix of the factors, so ete = (d**2 + alpha*t**2).

integer, intent(in) :: lde

Leading dimension of array e.

real(kind=wp), intent(out) :: ve(ldve,ld2ve,m)

Array ve = v * inv(e).

integer, intent(in) :: ldve

Leading dimension of array ve.

integer, intent(in) :: ld2ve

Second dimension of array ve.

real(kind=wp), intent(out) :: vev(ldvev,q)

Array vev = v * inv(ete) * trans(v).

integer, intent(in) :: ldvev

Leading dimension of array vev.

real(kind=wp), intent(out) :: wrk5(m)

Work vector.


Calls

proc~~vevtr~~CallsGraph proc~vevtr vevtr proc~solve_trl solve_trl proc~vevtr->proc~solve_trl

Called by

proc~~vevtr~~CalledByGraph proc~vevtr vevtr proc~lcstep lcstep proc~lcstep->proc~vevtr proc~trust_region trust_region proc~trust_region->proc~lcstep proc~vcv_beta vcv_beta proc~vcv_beta->proc~lcstep proc~odr odr proc~odr->proc~trust_region proc~odr->proc~vcv_beta proc~odr_long_c odr_long_c proc~odr_long_c->proc~odr proc~odr_medium_c odr_medium_c proc~odr_medium_c->proc~odr proc~odr_short_c odr_short_c proc~odr_short_c->proc~odr program~example1 example1 program~example1->proc~odr program~example2 example2 program~example2->proc~odr program~example3 example3 program~example3->proc~odr program~example4 example4 program~example4->proc~odr program~example5 example5 program~example5->proc~odr

Variables

Type Visibility Attributes Name Initial
integer, public :: l1
integer, public :: l2

Source Code

   pure subroutine vevtr &
      (m, q, indx, v, ldv, ld2v, e, lde, ve, ldve, ld2ve, vev, ldvev, wrk5)
   !! Compute `v*e*trans(v)` for the (`indx`)th `m` by `q` array in `v`.

      integer, intent(in) :: m
         !! Number of columns of data in the independent variable.
      integer, intent(in) :: q
         !! Number of responses per observation.
      integer, intent(in) :: indx
         !! Row in `v` in which the `m` by `q` array is stored.
      integer, intent(in) :: ldv
         !! Leading dimension of array `v`.
      integer, intent(in) :: ld2v
         !! Second dimension of array `v`.
      integer, intent(in) :: lde
         !! Leading dimension of array `e`.
      integer, intent(in) :: ldve
         !! Leading dimension of array `ve`.
      integer, intent(in) :: ldvev
         !! Leading dimension of array `vev`.
      integer, intent(in) :: ld2ve
         !! Second dimension of array `ve`.
      real(wp), intent(in) :: v(ldv, ld2v, q)
         !! An array of `q` by `m` matrices.
      real(wp), intent(in) :: e(lde, m)
         !! Matrix of the factors, so `ete = (d**2 + alpha*t**2)`.
      real(wp), intent(out) :: ve(ldve, ld2ve, m)
         !! Array `ve = v * inv(e)`.
      real(wp), intent(out) :: vev(ldvev, q)
         !! Array `vev = v * inv(ete) * trans(v)`.
      real(wp), intent(out) :: wrk5(m)
         !! Work vector.

      ! Local scalars
      integer :: l1, l2

      ! Variable Definitions (alphabetically)
      !  J:       An indexing variable.
      !  L1:      An indexing variable.
      !  L2:      An indexing variable.

      if (q == 0 .or. m == 0) return

      do l1 = 1, q
         wrk5 = v(indx, 1:m, l1)
         call solve_trl(m, e, lde, wrk5, 4)
         ve(indx, l1, :) = wrk5
      end do

      do l1 = 1, q
         do l2 = 1, l1
            vev(l1, l2) = dot_product(ve(indx, l1, :), ve(indx, l2, :))
            vev(l2, l1) = vev(l1, l2)
         end do
      end do

   end subroutine vevtr