Neko 0.9.99
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
4 use tensor_cpu
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), s(1,1,2,ie))
24 do i = 1, nn
25 r(i,ie) = d(i,ie) * e(i,ie)
26 end do
27 call tnsr2d_el_cpu(e(1,ie), nl, r(1,ie), nl, s(1,1,1,ie), s(1,2,2,ie))
28 end do
29 else
30 do ie = 1, nelv
31 call tnsr3d_el_cpu(e(1,ie), nl, r(1,ie), nl, &
32 s(1,2,1,ie), s(1,1,2,ie), s(1,1,3,ie))
33 do i = 1, nn
34 r(i,ie) = d(i,ie) * e(i,ie)
35 end do
36 call tnsr3d_el_cpu(e(1,ie), nl, r(1,ie), nl, &
37 s(1,1,1,ie), s(1,2,2,ie), s(1,2,3,ie))
38 end do
39 end if
40 end subroutine fdm_do_fast_cpu
41
42end 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)