83 type(
mesh_t),
intent(in) :: msh
85 type(
coef_t),
intent(in) :: coef
86 real(kind=
rp),
intent(inout) :: w(xh%lx, xh%ly, xh%lz, msh%nelv)
87 real(kind=
rp),
intent(in) :: u(xh%lx, xh%ly, xh%lz, msh%nelv)
89 real(kind=
rp) :: dudr(xh%lx, xh%ly, xh%lz)
90 real(kind=
rp) :: duds(xh%lx, xh%ly, xh%lz)
91 real(kind=
rp) :: dudt(xh%lx, xh%ly, xh%lz)
92 real(kind=
rp) :: tmp1(xh%lx, xh%ly, xh%lz)
93 real(kind=
rp) :: tmp2(xh%lx, xh%ly, xh%lz)
94 real(kind=
rp) :: tmp3(xh%lx, xh%ly, xh%lz)
95 real(kind=
rp) :: tm1(xh%lx, xh%ly, xh%lz)
96 real(kind=
rp) :: tm2(xh%lx, xh%ly, xh%lz)
97 real(kind=
rp) :: tm3(xh%lx, xh%ly, xh%lz)
98 integer :: e, k, lxy, lxz, lyz, lxyz
99 type(libxsmm_dmmfunction),
save :: ax_helm_xmm1
100 type(libxsmm_dmmfunction),
save :: ax_helm_xmm2
101 type(libxsmm_dmmfunction),
save :: ax_helm_xmm3
102 integer,
save :: ax_helm_xsmm_lx = 0
103 logical,
save :: ax_helm_xsmm_init = .false.
108 lxyz = xh%lx*xh%ly*xh%lz
110 if (.not. ax_helm_xsmm_init .or. (ax_helm_xsmm_lx .ne. xh%lx))
then
111 call libxsmm_dispatch(ax_helm_xmm1, xh%lx, xh%ly*xh%lz, xh%lx, &
112 alpha = 1d0, beta = 0d0, prefetch = libxsmm_prefetch_auto)
113 call libxsmm_dispatch(ax_helm_xmm2, xh%lx, xh%ly, xh%ly, &
114 alpha = 1d0, beta = 0d0, prefetch = libxsmm_prefetch_auto)
115 call libxsmm_dispatch(ax_helm_xmm3, xh%lx*xh%ly, xh%lz, xh%lz, &
116 alpha = 1d0, beta = 0d0, prefetch = libxsmm_prefetch_auto)
117 ax_helm_xsmm_init = .true.
118 ax_helm_xsmm_lx = xh%lx
123 if (msh%gdim .eq. 2)
then
124 call mxm(xh%dx, xh%lx, u(1,1,1,e), xh%lx, dudr, lyz)
125 call mxm(u(1,1,1,e), xh%lx, xh%dyt, xh%ly, duds, xh%ly)
126 call col3(tmp1, dudr, coef%G11(1,1,1,e), lxyz)
127 call col3(tmp2, duds, coef%G22(1,1,1,e), lxyz)
128 if (msh%dfrmd_el(e))
then
129 call addcol3(tmp1, duds, coef%G12(1,1,1,e), lxyz)
130 call addcol3(tmp2, dudr, coef%G12(1,1,1,e), lxyz)
132 call col2(tmp1, coef%h1(1,1,1,e), lxyz)
133 call col2(tmp2, coef%h1(1,1,1,e), lxyz)
134 call mxm(xh%dxt, xh%lx, tmp1, xh%lx, tm1, lyz)
135 call mxm(tmp2, xh%lx, xh%dy, xh%ly, tm2, xh%ly)
136 call add3(w(1,1,1,e), tm1, tm2, lxyz)
140 call libxsmm_mmcall(ax_helm_xmm1, xh%dx, u(1,1,1,e), dudr)
142 call libxsmm_mmcall(ax_helm_xmm2, u(1,1,k,e), xh%dyt, &
145 call libxsmm_mmcall(ax_helm_xmm3, u(1,1,1,e), xh%dzt, dudt)
146 call col3(tmp1, dudr, coef%G11(1,1,1,e), lxyz)
147 call col3(tmp2, duds, coef%G22(1,1,1,e), lxyz)
148 call col3(tmp3, dudt, coef%G33(1,1,1,e), lxyz)
149 if (msh%dfrmd_el(e))
then
150 call addcol3(tmp1, duds, coef%G12(1,1,1,e), lxyz)
151 call addcol3(tmp1, dudt, coef%G13(1,1,1,e), lxyz)
152 call addcol3(tmp2, dudr, coef%G12(1,1,1,e), lxyz)
153 call addcol3(tmp2, dudt, coef%G23(1,1,1,e), lxyz)
154 call addcol3(tmp3, dudr, coef%G13(1,1,1,e), lxyz)
155 call addcol3(tmp3, duds, coef%G23(1,1,1,e), lxyz)
157 call col2(tmp1, coef%h1(1,1,1,e), lxyz)
158 call col2(tmp2, coef%h1(1,1,1,e), lxyz)
159 call col2(tmp3, coef%h1(1,1,1,e), lxyz)
160 call libxsmm_mmcall(ax_helm_xmm1, xh%dxt, tmp1, tm1)
162 call libxsmm_mmcall(ax_helm_xmm2, tmp2(1,1,k), xh%dy, &
165 call libxsmm_mmcall(ax_helm_xmm3, tmp3, xh%dz, tm3)
166 call add4(w(1,1,1,e), tm1, tm2, tm3, lxyz)
170 if (coef%ifh2)
call addcol4 (w, coef%h2, coef%B, u, coef%dof%n_dofs)