72 integer,
intent(in) :: nv, nu
73 real(kind=
rp),
intent(inout) :: v(nv*nv), u(nu*nu)
74 real(kind=
rp),
intent(inout) :: a(nv,nu), bt(nu,nv)
75 real(kind=
rp) :: work(0:nu**2*nv)
77 call mxm(a, nv, u, nu, work, nu)
78 call mxm(work, nv, bt, nu, v, nv)
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(in) :: nv, nu, nelv
103 real(kind=
rp),
intent(inout) :: v(nv*nv*nv,nelv)
104 real(kind=
rp),
intent(in) :: u(nu*nu*nu,nelv)
105 real(kind=
rp),
intent(in) :: a(nv,nu), bt(nu, nv), ct(nu,nv)
106 real(kind=
rp) :: work(0:nu**2*nv), work2(0:nu*nv**2)
107 integer :: ie, i, nunu, nvnu, nvnv
114 call mxm(a, nv, u(1,ie), nu, work, nunu)
116 call mxm(work(nvnu*i), nv, bt, nu, work2(nv*nv*i), nv)
118 call mxm(work2, nvnv, ct, nu, v(1,ie), nv)
124 integer,
intent(in) :: nv, nu, nelv
125 real(kind=
rp),
intent(inout) :: v(nv*nv*nv*nelv)
126 real(kind=
rp),
intent(inout) :: a(nv,nu), bt(nu, nv), ct(nu,nv)
127 real(kind=
rp) :: work(0:nu**2*nv), work2(0:nu*nv**2)
128 integer :: e, e0, ee, es, iu, iv, i, nu3, nv3
146 call mxm(a, nv, v(iu), nu, work, nu*nu)
148 call mxm(work(nv*nu*i), nv, bt, nu, work2(nv*nv*i), nv)
150 call mxm(work2, nv*nv, ct, nu, v(iv), nv)
Wrapper for all matrix-matrix product implementations.
subroutine, public mxm(a, n1, b, n2, c, n3)
Compute matrix-matrix product for contiguously packed matrices A,B, and C.
integer, parameter, public rp
Global precision used in computations.
Tensor operations libxsmm backend.
subroutine, public tnsr3d_el_xsmm(v, nv, u, nu, a, bt, ct)
subroutine, public tnsr3d_xsmm(v, nv, u, nu, a, bt, ct, nelv)
subroutine, public tnsr2d_el_xsmm(v, nv, u, nu, a, bt)
subroutine, public tnsr1_3d_xsmm(v, nv, nu, a, bt, ct, nelv)