Neko 1.99.2
A portable framework for high-order spectral element flow simulations
Loading...
Searching...
No Matches
fdm_xsmm.f90
Go to the documentation of this file.
1
2module fdm_xsmm
3 use num_types, only : rp
5 implicit none
6
7contains
8
9 subroutine fdm_do_fast_xsmm(e, r, s, d, nl, ldim, nelv)
10 integer, intent(in) :: nl, nelv, ldim
11 real(kind=rp), intent(inout) :: e(nl**ldim, nelv)
12 real(kind=rp), intent(inout) :: r(nl**ldim, nelv)
13 real(kind=rp), intent(inout) :: s(nl*nl, 2, ldim, nelv)
14 real(kind=rp), intent(inout) :: d(nl**ldim, nelv)
15 integer :: ie, nn, i
16
17 nn = nl**ldim
18 if (.not. ldim .eq. 3) then
19 do ie = 1, nelv
20 call tnsr2d_el_xsmm(e(1, ie), nl, r(1, ie), nl, s(1, 2, 1, ie), &
21 s(1, 1, 2, ie))
22 do i = 1, nn
23 r(i, ie) = d(i, ie) * e(i, ie)
24 end do
25 call tnsr2d_el_xsmm(e(1, ie), nl, r(1, ie), nl, s(1, 1, 1, ie), &
26 s(1, 2, 2, ie))
27 end do
28 else
29 do ie = 1, nelv
30 call tnsr3d_el_xsmm(e(1, ie), nl, r(1, ie), nl, &
31 s(1, 2, 1, ie), s(1, 1, 2, ie), s(1, 1, 3, ie))
32 do i = 1, nn
33 r(i, ie) = d(i, ie) * e(i, ie)
34 end do
35 call tnsr3d_el_xsmm(e(1, ie), nl, r(1, ie), nl, &
36 s(1, 1, 1, ie), s(1, 2, 2, ie), s(1, 2, 3, ie))
37 end do
38 end if
39 end subroutine fdm_do_fast_xsmm
40
41end module fdm_xsmm
Fast Diagonalization libxsmm backend.
Definition fdm_xsmm.f90:2
subroutine fdm_do_fast_xsmm(e, r, s, d, nl, ldim, nelv)
Definition fdm_xsmm.f90:10
integer, parameter, public rp
Global precision used in computations.
Definition num_types.f90:12
Tensor operations libxsmm backend.
subroutine, public tnsr3d_el_xsmm(v, nv, u, nu, a, bt, ct)
subroutine, public tnsr2d_el_xsmm(v, nv, u, nu, a, bt)