Compute v*e*trans(v)
for the (indx
)th m
by q
array in v
.
Type | Intent | Optional | 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 |
||
real(kind=wp), | intent(in) | :: | v(ldv,ld2v,q) |
An array of |
||
integer, | intent(in) | :: | ldv |
Leading dimension of array |
||
integer, | intent(in) | :: | ld2v |
Second dimension of array |
||
real(kind=wp), | intent(in) | :: | e(lde,m) |
Matrix of the factors, so |
||
integer, | intent(in) | :: | lde |
Leading dimension of array |
||
real(kind=wp), | intent(out) | :: | ve(ldve,ld2ve,m) |
Array |
||
integer, | intent(in) | :: | ldve |
Leading dimension of array |
||
integer, | intent(in) | :: | ld2ve |
Second dimension of array |
||
real(kind=wp), | intent(out) | :: | vev(ldvev,q) |
Array |
||
integer, | intent(in) | :: | ldvev |
Leading dimension of array |
||
real(kind=wp), | intent(out) | :: | wrk5(m) |
Work vector. |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public | :: | l1 | ||||
integer, | public | :: | l2 |
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