83    integer, 
intent(in) :: nv, nu
 
   84    real(kind=
rp), 
intent(inout) :: v(nv*nv*nv), u(nu*nu*nu)
 
   85    real(kind=
rp), 
intent(inout) :: a(nv,nu),bt(nu, nv),ct(nu,nv)
 
   86    real(kind=
rp) :: work(0:nu**2*nv), work2(0:nu*nv**2)
 
   87    integer :: i, nunu, nvnu, nvnv
 
   93    call mxm(a, nv, u(1), nu ,work, nunu)
 
   95       call mxm(work(nvnu*i), nv, bt, nu, work2(nv*nv*i), nv)
 
   97    call mxm(work2, nvnv, ct, nu, v(1), nv)
 
 
  102    integer, 
intent(inout) :: nv, nu, nelv
 
  103    real(kind=
rp), 
intent(inout) :: v(nv*nv*nv,nelv), u(nu*nu*nu,nelv)
 
  104    real(kind=
rp), 
intent(inout) :: a(nv,nu), bt(nu, nv), ct(nu,nv)
 
  105    real(kind=
rp) :: work(0:nu**2*nv), work2(0:nu*nv**2)
 
  106    integer :: ie, i, nunu, nvnu, nvnv
 
  113       call mxm(a, nv, u(1,ie), nu, work, nunu)
 
  115          call mxm(work(nvnu*i), nv, bt, nu, work2(nv*nv*i), nv)
 
  117       call mxm(work2, nvnv, ct, nu, v(1,ie), nv)
 
 
  123    integer, 
intent(in) :: nv, nu, nelv
 
  124    real(kind=
rp), 
intent(inout) :: v(nv*nv*nv*nelv)
 
  125    real(kind=
rp), 
intent(inout) :: a(nv,nu), bt(nu, nv), ct(nu,nv)
 
  126    real(kind=
rp) :: work(0:nu**2*nv), work2(0:nu*nv**2)
 
  127    integer :: e, e0, ee, es, iu, iv, i, nu3, nv3
 
  145       call mxm(a, nv, v(iu), nu, work, nu*nu)
 
  147          call mxm(work(nv*nu*i), nv, bt, nu, work2(nv*nv*i), nv)
 
  149       call mxm(work2, nv*nv, ct, nu, v(iv), nv)
 
 
subroutine, public mxm(a, n1, b, n2, c, n3)
Compute matrix-matrix product  for contiguously packed matrices A,B, and C.