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