Neko  0.9.99
A portable framework for high-order spectral element flow simulations
fdm_sx.f90
Go to the documentation of this file.
1 ! Copyright (c) 2021, The Neko Authors
2 ! All rights reserved.
3 !
4 ! Redistribution and use in source and binary forms, with or without
5 ! modification, are permitted provided that the following conditions
6 ! are met:
7 !
8 ! * Redistributions of source code must retain the above copyright
9 ! notice, this list of conditions and the following disclaimer.
10 !
11 ! * Redistributions in binary form must reproduce the above
12 ! copyright notice, this list of conditions and the following
13 ! disclaimer in the documentation and/or other materials provided
14 ! with the distribution.
15 !
16 ! * Neither the name of the authors nor the names of its
17 ! contributors may be used to endorse or promote products derived
18 ! from this software without specific prior written permission.
19 !
20 ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 ! "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 ! LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23 ! FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24 ! COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25 ! INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26 ! BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27 ! LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28 ! CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 ! LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30 ! ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 ! POSSIBILITY OF SUCH DAMAGE.
32 !
34 module fdm_sx
35  use num_types
36  use tensor_sx
37  implicit none
38  private
39 
40  public :: fdm_do_fast_sx
41 
42 contains
43 
44  subroutine fdm_do_fast_sx(e, r, s, d, nl, ldim, nelv)
45  integer, intent(in) :: nl, nelv, ldim
46  real(kind=rp), intent(inout) :: e(nl**ldim, nelv)
47  real(kind=rp), intent(inout) :: r(nl**ldim, nelv)
48  real(kind=rp), intent(inout) :: s(nl*nl,2,ldim, nelv)
49  real(kind=rp), intent(inout) :: d(nl**ldim, nelv)
50  integer :: ie, nn, i
51 
52  nn = nl**ldim
53  if(.not. ldim .eq. 3) then
54  do ie = 1, nelv
55  call tnsr2d_el_sx(e(1,ie), nl, r(1,ie), nl, s(1,2,1,ie), s(1,1,2,ie))
56  do i = 1, nn
57  r(i,ie) = d(i,ie) * e(i,ie)
58  end do
59  call tnsr2d_el_sx(e(1,ie), nl, r(1,ie), nl, s(1,1,1,ie), s(1,2,2,ie))
60  end do
61  else
62  select case (nl)
63  case (14)
64  call fdm_do_fast_sx_nl14(e, r, s, d, nelv)
65  case (13)
66  call fdm_do_fast_sx_nl13(e, r, s, d, nelv)
67  case (12)
68  call fdm_do_fast_sx_nl12(e, r, s, d, nelv)
69  case (11)
70  call fdm_do_fast_sx_nl11(e, r, s, d, nelv)
71  case (10)
72  call fdm_do_fast_sx_nl10(e, r, s, d, nelv)
73  case (9)
74  call fdm_do_fast_sx_nl9(e, r, s, d, nelv)
75  case (8)
76  call fdm_do_fast_sx_nl8(e, r, s, d, nelv)
77  case (7)
78  call fdm_do_fast_sx_nl7(e, r, s, d, nelv)
79  case (6)
80  call fdm_do_fast_sx_nl6(e, r, s, d, nelv)
81  case (5)
82  call fdm_do_fast_sx_nl5(e, r, s, d, nelv)
83  case (4)
84  call fdm_do_fast_sx_nl4(e, r, s, d, nelv)
85  case (3)
86  call fdm_do_fast_sx_nl3(e, r, s, d, nelv)
87  case (2)
88  call fdm_do_fast_sx_nl2(e, r, s, d, nelv)
89  case default
90  call fdm_do_fast_sx_nl(e, r, s, d, nelv, nl)
91  end select
92  end if
93  end subroutine fdm_do_fast_sx
94 
95  subroutine fdm_do_fast_sx_nl(e, r, s, d, nelv, n)
96  integer, intent(in) :: nelv, n
97  real(kind=rp), intent(inout) :: e(n**3, nelv)
98  real(kind=rp), intent(inout) :: r(n**3, nelv)
99  real(kind=rp), intent(inout) :: s(n,n,2,3, nelv)
100  real(kind=rp), intent(inout) :: d(n**3, nelv)
101  real(kind=rp) :: wrk(n**3, nelv), wrk2(n**3, nelv), tmp
102  integer :: ie, i, j, k, l, ii, jj, nn, nnn
103 
104  nn = n**2
105  nnn = n**3
106 
107 
108  do j = 1, nn
109  do i = 1, n
110  do ie = 1, nelv
111  ii = i + n * (j - 1)
112  tmp = 0.0_rp
113  do k = 1, n
114  tmp = tmp + s(i,k,2,1,ie) * r(k + n * (j - 1), ie)
115  end do
116  wrk(ii, ie) = tmp
117  end do
118  end do
119  end do
120 
121  do i = 1, n
122  do j = 1, n
123  do l = 1, n
124  do ie = 1, nelv
125  ii = l + n * (j - 1) + nn * (i - 1)
126  tmp = 0.0_rp
127  do k = 1, n
128  tmp = tmp + wrk(l + n * (k - 1) + nn * (i - 1), ie) &
129  * s(k,j,1,2,ie)
130  end do
131  wrk2(ii,ie) = tmp
132  end do
133  end do
134  end do
135  end do
136 
137  do j = 1, n
138  do i = 1, nn
139  do ie = 1, nelv
140  jj = i + nn * (j - 1)
141  tmp = 0.0_rp
142  do k = 1, n
143  tmp = tmp + wrk2(i + nn * (k - 1), ie) * s(k, j, 1, 3, ie)
144  end do
145  e(jj,ie) = tmp
146  end do
147  end do
148  end do
149 
150  do i = 1, nnn * nelv
151  r(i,1) = d(i,1) * e(i,1)
152  end do
153 
154  do j = 1, nn
155  do i = 1, n
156  do ie = 1, nelv
157  ii = i + n * (j - 1)
158  tmp = 0.0_rp
159  do k = 1, n
160  tmp = tmp + s(i,k,1,1,ie) * r(k + n * (j - 1), ie)
161  end do
162  wrk(ii, ie) = tmp
163  end do
164  end do
165  end do
166 
167  do i = 1, n
168  do j = 1, n
169  do l = 1, n
170  do ie = 1, nelv
171  ii = l + n * (j - 1) + nn * (i - 1)
172  tmp = 0.0_rp
173  do k = 1, n
174  tmp = tmp + wrk(l + n * (k - 1) + nn * (i - 1), ie) &
175  * s(k,j,2,2,ie)
176  end do
177  wrk2(ii,ie) = tmp
178  end do
179  end do
180  end do
181  end do
182 
183  do j = 1, n
184  do i = 1, nn
185  do ie = 1, nelv
186  jj = i + nn * (j - 1)
187  tmp = 0.0_rp
188  do k = 1, n
189  tmp = tmp + wrk2(i + nn * (k - 1), ie) * s(k, j, 2, 3, ie)
190  end do
191  e(jj,ie) = tmp
192  end do
193  end do
194  end do
195 
196  end subroutine fdm_do_fast_sx_nl
197 
198  subroutine fdm_do_fast_sx_nl14(e, r, s, d, nelv)
199  integer, parameter :: n = 14
200  integer, parameter :: nn = n**2
201  integer, parameter :: nnn = n**3
202  integer, intent(in) :: nelv
203  real(kind=rp), intent(inout) :: e(n**3, nelv)
204  real(kind=rp), intent(inout) :: r(n**3, nelv)
205  real(kind=rp), intent(inout) :: s(n,n,2,3, nelv)
206  real(kind=rp), intent(inout) :: d(n**3, nelv)
207  real(kind=rp) :: wrk(n**3, nelv), wrk2(n**3, nelv)
208  integer :: ie, i, j, l, ii, jj
209 
210  do j = 1, nn
211  do i = 1, n
212  do ie = 1, nelv
213  ii = i + n * (j - 1)
214  wrk(ii, ie) = s(i,1,2,1,ie) * r(1 + n * (j - 1), ie) &
215  + s(i,2,2,1,ie) * r(2 + n * (j - 1), ie) &
216  + s(i,3,2,1,ie) * r(3 + n * (j - 1), ie) &
217  + s(i,4,2,1,ie) * r(4 + n * (j - 1), ie) &
218  + s(i,5,2,1,ie) * r(5 + n * (j - 1), ie) &
219  + s(i,6,2,1,ie) * r(6 + n * (j - 1), ie) &
220  + s(i,7,2,1,ie) * r(7 + n * (j - 1), ie) &
221  + s(i,8,2,1,ie) * r(8 + n * (j - 1), ie) &
222  + s(i,9,2,1,ie) * r(9 + n * (j - 1), ie) &
223  + s(i,10,2,1,ie) * r(10 + n * (j - 1), ie) &
224  + s(i,11,2,1,ie) * r(11 + n * (j - 1), ie) &
225  + s(i,12,2,1,ie) * r(12 + n * (j - 1), ie) &
226  + s(i,13,2,1,ie) * r(13 + n * (j - 1), ie) &
227  + s(i,14,2,1,ie) * r(14 + n * (j - 1), ie)
228  end do
229  end do
230  end do
231 
232  do i = 1, n
233  do j = 1, n
234  do l = 1, n
235  do ie = 1, nelv
236  ii = l + n * (j - 1) + nn * (i - 1)
237  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
238  * s(1,j,1,2,ie) &
239  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
240  * s(2,j,1,2,ie) &
241  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
242  * s(3,j,1,2,ie) &
243  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
244  * s(4,j,1,2,ie) &
245  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
246  * s(5,j,1,2,ie) &
247  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
248  * s(6,j,1,2,ie) &
249  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
250  * s(7,j,1,2,ie) &
251  + wrk(l + n * (8 - 1) + nn * (i - 1), ie) &
252  * s(8,j,1,2,ie) &
253  + wrk(l + n * (9 - 1) + nn * (i - 1), ie) &
254  * s(9,j,1,2,ie) &
255  + wrk(l + n * (10 - 1) + nn * (i - 1), ie) &
256  * s(10,j,1,2,ie) &
257  + wrk(l + n * (11 - 1) + nn * (i - 1), ie) &
258  * s(11,j,1,2,ie) &
259  + wrk(l + n * (12 - 1) + nn * (i - 1), ie) &
260  * s(12,j,1,2,ie) &
261  + wrk(l + n * (13 - 1) + nn * (i - 1), ie) &
262  * s(13,j,1,2,ie) &
263  + wrk(l + n * (14 - 1) + nn * (i - 1), ie) &
264  * s(14,j,1,2,ie)
265  end do
266  end do
267  end do
268  end do
269 
270  do j = 1, n
271  do i = 1, nn
272  do ie = 1, nelv
273  jj = i + nn * (j - 1)
274  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 1, 3, ie) &
275  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 1, 3, ie) &
276  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 1, 3, ie) &
277  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 1, 3, ie) &
278  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 1, 3, ie) &
279  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 1, 3, ie) &
280  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 1, 3, ie) &
281  + wrk2(i + nn * (8 - 1), ie) * s(8, j, 1, 3, ie) &
282  + wrk2(i + nn * (9 - 1), ie) * s(9, j, 1, 3, ie) &
283  + wrk2(i + nn * (10 - 1), ie) * s(10, j, 1, 3, ie) &
284  + wrk2(i + nn * (11 - 1), ie) * s(11, j, 1, 3, ie) &
285  + wrk2(i + nn * (12 - 1), ie) * s(12, j, 1, 3, ie) &
286  + wrk2(i + nn * (13 - 1), ie) * s(13, j, 1, 3, ie) &
287  + wrk2(i + nn * (14 - 1), ie) * s(14, j, 1, 3, ie)
288  end do
289  end do
290  end do
291 
292  do i = 1, nnn * nelv
293  r(i,1) = d(i,1) * e(i,1)
294  end do
295 
296  do j = 1, nn
297  do i = 1, n
298  do ie = 1, nelv
299  ii = i + n * (j - 1)
300  wrk(ii, ie) = s(i,1,1,1,ie) * r(1 + n * (j - 1), ie) &
301  + s(i,2,1,1,ie) * r(2 + n * (j - 1), ie) &
302  + s(i,3,1,1,ie) * r(3 + n * (j - 1), ie) &
303  + s(i,4,1,1,ie) * r(4 + n * (j - 1), ie) &
304  + s(i,5,1,1,ie) * r(5 + n * (j - 1), ie) &
305  + s(i,6,1,1,ie) * r(6 + n * (j - 1), ie) &
306  + s(i,7,1,1,ie) * r(7 + n * (j - 1), ie) &
307  + s(i,8,1,1,ie) * r(8 + n * (j - 1), ie) &
308  + s(i,9,1,1,ie) * r(9 + n * (j - 1), ie) &
309  + s(i,10,1,1,ie) * r(10 + n * (j - 1), ie) &
310  + s(i,11,1,1,ie) * r(11 + n * (j - 1), ie) &
311  + s(i,12,1,1,ie) * r(12 + n * (j - 1), ie) &
312  + s(i,13,1,1,ie) * r(13 + n * (j - 1), ie) &
313  + s(i,14,1,1,ie) * r(14 + n * (j - 1), ie)
314  end do
315  end do
316  end do
317 
318  do i = 1, n
319  do j = 1, n
320  do l = 1, n
321  do ie = 1, nelv
322  ii = l + n * (j - 1) + nn * (i - 1)
323  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
324  * s(1,j,2,2,ie) &
325  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
326  * s(2,j,2,2,ie) &
327  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
328  * s(3,j,2,2,ie) &
329  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
330  * s(4,j,2,2,ie) &
331  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
332  * s(5,j,2,2,ie) &
333  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
334  * s(6,j,2,2,ie) &
335  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
336  * s(7,j,2,2,ie) &
337  + wrk(l + n * (8 - 1) + nn * (i - 1), ie) &
338  * s(8,j,2,2,ie) &
339  + wrk(l + n * (9 - 1) + nn * (i - 1), ie) &
340  * s(9,j,2,2,ie) &
341  + wrk(l + n * (10 - 1) + nn * (i - 1), ie) &
342  * s(10,j,2,2,ie) &
343  + wrk(l + n * (11 - 1) + nn * (i - 1), ie) &
344  * s(11,j,2,2,ie) &
345  + wrk(l + n * (12 - 1) + nn * (i - 1), ie) &
346  * s(12,j,2,2,ie) &
347  + wrk(l + n * (13 - 1) + nn * (i - 1), ie) &
348  * s(13,j,2,2,ie) &
349  + wrk(l + n * (14 - 1) + nn * (i - 1), ie) &
350  * s(14,j,2,2,ie)
351  end do
352  end do
353  end do
354  end do
355 
356  do j = 1, n
357  do i = 1, nn
358  do ie = 1, nelv
359  jj = i + nn * (j - 1)
360  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 2, 3, ie) &
361  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 2, 3, ie) &
362  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 2, 3, ie) &
363  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 2, 3, ie) &
364  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 2, 3, ie) &
365  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 2, 3, ie) &
366  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 2, 3, ie) &
367  + wrk2(i + nn * (8 - 1), ie) * s(8, j, 2, 3, ie) &
368  + wrk2(i + nn * (9 - 1), ie) * s(9, j, 2, 3, ie) &
369  + wrk2(i + nn * (10 - 1), ie) * s(10, j, 2, 3, ie) &
370  + wrk2(i + nn * (11 - 1), ie) * s(11, j, 2, 3, ie) &
371  + wrk2(i + nn * (12 - 1), ie) * s(12, j, 2, 3, ie) &
372  + wrk2(i + nn * (13 - 1), ie) * s(13, j, 2, 3, ie) &
373  + wrk2(i + nn * (14 - 1), ie) * s(14, j, 2, 3, ie)
374  end do
375  end do
376  end do
377 
378 
379  end subroutine fdm_do_fast_sx_nl14
380 
381  subroutine fdm_do_fast_sx_nl13(e, r, s, d, nelv)
382  integer, parameter :: n = 13
383  integer, parameter :: nn = n**2
384  integer, parameter :: nnn = n**3
385  integer, intent(in) :: nelv
386  real(kind=rp), intent(inout) :: e(n**3, nelv)
387  real(kind=rp), intent(inout) :: r(n**3, nelv)
388  real(kind=rp), intent(inout) :: s(n,n,2,3, nelv)
389  real(kind=rp), intent(inout) :: d(n**3, nelv)
390  real(kind=rp) :: wrk(n**3, nelv), wrk2(n**3, nelv)
391  integer :: ie, i, j, l, ii, jj
392 
393  do j = 1, nn
394  do i = 1, n
395  do ie = 1, nelv
396  ii = i + n * (j - 1)
397  wrk(ii, ie) = s(i,1,2,1,ie) * r(1 + n * (j - 1), ie) &
398  + s(i,2,2,1,ie) * r(2 + n * (j - 1), ie) &
399  + s(i,3,2,1,ie) * r(3 + n * (j - 1), ie) &
400  + s(i,4,2,1,ie) * r(4 + n * (j - 1), ie) &
401  + s(i,5,2,1,ie) * r(5 + n * (j - 1), ie) &
402  + s(i,6,2,1,ie) * r(6 + n * (j - 1), ie) &
403  + s(i,7,2,1,ie) * r(7 + n * (j - 1), ie) &
404  + s(i,8,2,1,ie) * r(8 + n * (j - 1), ie) &
405  + s(i,9,2,1,ie) * r(9 + n * (j - 1), ie) &
406  + s(i,10,2,1,ie) * r(10 + n * (j - 1), ie) &
407  + s(i,11,2,1,ie) * r(11 + n * (j - 1), ie) &
408  + s(i,12,2,1,ie) * r(12 + n * (j - 1), ie) &
409  + s(i,13,2,1,ie) * r(13 + n * (j - 1), ie)
410  end do
411  end do
412  end do
413 
414  do i = 1, n
415  do j = 1, n
416  do l = 1, n
417  do ie = 1, nelv
418  ii = l + n * (j - 1) + nn * (i - 1)
419  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
420  * s(1,j,1,2,ie) &
421  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
422  * s(2,j,1,2,ie) &
423  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
424  * s(3,j,1,2,ie) &
425  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
426  * s(4,j,1,2,ie) &
427  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
428  * s(5,j,1,2,ie) &
429  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
430  * s(6,j,1,2,ie) &
431  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
432  * s(7,j,1,2,ie) &
433  + wrk(l + n * (8 - 1) + nn * (i - 1), ie) &
434  * s(8,j,1,2,ie) &
435  + wrk(l + n * (9 - 1) + nn * (i - 1), ie) &
436  * s(9,j,1,2,ie) &
437  + wrk(l + n * (10 - 1) + nn * (i - 1), ie) &
438  * s(10,j,1,2,ie) &
439  + wrk(l + n * (11 - 1) + nn * (i - 1), ie) &
440  * s(11,j,1,2,ie) &
441  + wrk(l + n * (12 - 1) + nn * (i - 1), ie) &
442  * s(12,j,1,2,ie) &
443  + wrk(l + n * (13 - 1) + nn * (i - 1), ie) &
444  * s(13,j,1,2,ie)
445  end do
446  end do
447  end do
448  end do
449 
450  do j = 1, n
451  do i = 1, nn
452  do ie = 1, nelv
453  jj = i + nn * (j - 1)
454  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 1, 3, ie) &
455  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 1, 3, ie) &
456  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 1, 3, ie) &
457  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 1, 3, ie) &
458  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 1, 3, ie) &
459  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 1, 3, ie) &
460  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 1, 3, ie) &
461  + wrk2(i + nn * (8 - 1), ie) * s(8, j, 1, 3, ie) &
462  + wrk2(i + nn * (9 - 1), ie) * s(9, j, 1, 3, ie) &
463  + wrk2(i + nn * (10 - 1), ie) * s(10, j, 1, 3, ie) &
464  + wrk2(i + nn * (11 - 1), ie) * s(11, j, 1, 3, ie) &
465  + wrk2(i + nn * (12 - 1), ie) * s(12, j, 1, 3, ie) &
466  + wrk2(i + nn * (13 - 1), ie) * s(13, j, 1, 3, ie)
467  end do
468  end do
469  end do
470 
471  do i = 1, nnn * nelv
472  r(i,1) = d(i,1) * e(i,1)
473  end do
474 
475  do j = 1, nn
476  do i = 1, n
477  do ie = 1, nelv
478  ii = i + n * (j - 1)
479  wrk(ii, ie) = s(i,1,1,1,ie) * r(1 + n * (j - 1), ie) &
480  + s(i,2,1,1,ie) * r(2 + n * (j - 1), ie) &
481  + s(i,3,1,1,ie) * r(3 + n * (j - 1), ie) &
482  + s(i,4,1,1,ie) * r(4 + n * (j - 1), ie) &
483  + s(i,5,1,1,ie) * r(5 + n * (j - 1), ie) &
484  + s(i,6,1,1,ie) * r(6 + n * (j - 1), ie) &
485  + s(i,7,1,1,ie) * r(7 + n * (j - 1), ie) &
486  + s(i,8,1,1,ie) * r(8 + n * (j - 1), ie) &
487  + s(i,9,1,1,ie) * r(9 + n * (j - 1), ie) &
488  + s(i,10,1,1,ie) * r(10 + n * (j - 1), ie) &
489  + s(i,11,1,1,ie) * r(11 + n * (j - 1), ie) &
490  + s(i,12,1,1,ie) * r(12 + n * (j - 1), ie) &
491  + s(i,13,1,1,ie) * r(13 + n * (j - 1), ie)
492  end do
493  end do
494  end do
495 
496  do i = 1, n
497  do j = 1, n
498  do l = 1, n
499  do ie = 1, nelv
500  ii = l + n * (j - 1) + nn * (i - 1)
501  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
502  * s(1,j,2,2,ie) &
503  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
504  * s(2,j,2,2,ie) &
505  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
506  * s(3,j,2,2,ie) &
507  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
508  * s(4,j,2,2,ie) &
509  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
510  * s(5,j,2,2,ie) &
511  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
512  * s(6,j,2,2,ie) &
513  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
514  * s(7,j,2,2,ie) &
515  + wrk(l + n * (8 - 1) + nn * (i - 1), ie) &
516  * s(8,j,2,2,ie) &
517  + wrk(l + n * (9 - 1) + nn * (i - 1), ie) &
518  * s(9,j,2,2,ie) &
519  + wrk(l + n * (10 - 1) + nn * (i - 1), ie) &
520  * s(10,j,2,2,ie) &
521  + wrk(l + n * (11 - 1) + nn * (i - 1), ie) &
522  * s(11,j,2,2,ie) &
523  + wrk(l + n * (12 - 1) + nn * (i - 1), ie) &
524  * s(12,j,2,2,ie) &
525  + wrk(l + n * (13 - 1) + nn * (i - 1), ie) &
526  * s(13,j,2,2,ie)
527  end do
528  end do
529  end do
530  end do
531 
532  do j = 1, n
533  do i = 1, nn
534  do ie = 1, nelv
535  jj = i + nn * (j - 1)
536  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 2, 3, ie) &
537  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 2, 3, ie) &
538  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 2, 3, ie) &
539  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 2, 3, ie) &
540  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 2, 3, ie) &
541  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 2, 3, ie) &
542  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 2, 3, ie) &
543  + wrk2(i + nn * (8 - 1), ie) * s(8, j, 2, 3, ie) &
544  + wrk2(i + nn * (9 - 1), ie) * s(9, j, 2, 3, ie) &
545  + wrk2(i + nn * (10 - 1), ie) * s(10, j, 2, 3, ie) &
546  + wrk2(i + nn * (11 - 1), ie) * s(11, j, 2, 3, ie) &
547  + wrk2(i + nn * (12 - 1), ie) * s(12, j, 2, 3, ie) &
548  + wrk2(i + nn * (13 - 1), ie) * s(13, j, 2, 3, ie)
549  end do
550  end do
551  end do
552 
553 
554  end subroutine fdm_do_fast_sx_nl13
555 
556  subroutine fdm_do_fast_sx_nl12(e, r, s, d, nelv)
557  integer, parameter :: n = 12
558  integer, parameter :: nn = n**2
559  integer, parameter :: nnn = n**3
560  integer, intent(in) :: nelv
561  real(kind=rp), intent(inout) :: e(n**3, nelv)
562  real(kind=rp), intent(inout) :: r(n**3, nelv)
563  real(kind=rp), intent(inout) :: s(n,n,2,3, nelv)
564  real(kind=rp), intent(inout) :: d(n**3, nelv)
565  real(kind=rp) :: wrk(n**3, nelv), wrk2(n**3, nelv)
566  integer :: ie, i, j, l, ii, jj
567 
568  do j = 1, nn
569  do i = 1, n
570  do ie = 1, nelv
571  ii = i + n * (j - 1)
572  wrk(ii, ie) = s(i,1,2,1,ie) * r(1 + n * (j - 1), ie) &
573  + s(i,2,2,1,ie) * r(2 + n * (j - 1), ie) &
574  + s(i,3,2,1,ie) * r(3 + n * (j - 1), ie) &
575  + s(i,4,2,1,ie) * r(4 + n * (j - 1), ie) &
576  + s(i,5,2,1,ie) * r(5 + n * (j - 1), ie) &
577  + s(i,6,2,1,ie) * r(6 + n * (j - 1), ie) &
578  + s(i,7,2,1,ie) * r(7 + n * (j - 1), ie) &
579  + s(i,8,2,1,ie) * r(8 + n * (j - 1), ie) &
580  + s(i,9,2,1,ie) * r(9 + n * (j - 1), ie) &
581  + s(i,10,2,1,ie) * r(10 + n * (j - 1), ie) &
582  + s(i,11,2,1,ie) * r(11 + n * (j - 1), ie) &
583  + s(i,12,2,1,ie) * r(12 + n * (j - 1), ie)
584  end do
585  end do
586  end do
587 
588  do i = 1, n
589  do j = 1, n
590  do l = 1, n
591  do ie = 1, nelv
592  ii = l + n * (j - 1) + nn * (i - 1)
593  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
594  * s(1,j,1,2,ie) &
595  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
596  * s(2,j,1,2,ie) &
597  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
598  * s(3,j,1,2,ie) &
599  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
600  * s(4,j,1,2,ie) &
601  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
602  * s(5,j,1,2,ie) &
603  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
604  * s(6,j,1,2,ie) &
605  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
606  * s(7,j,1,2,ie) &
607  + wrk(l + n * (8 - 1) + nn * (i - 1), ie) &
608  * s(8,j,1,2,ie) &
609  + wrk(l + n * (9 - 1) + nn * (i - 1), ie) &
610  * s(9,j,1,2,ie) &
611  + wrk(l + n * (10 - 1) + nn * (i - 1), ie) &
612  * s(10,j,1,2,ie) &
613  + wrk(l + n * (11 - 1) + nn * (i - 1), ie) &
614  * s(11,j,1,2,ie) &
615  + wrk(l + n * (12 - 1) + nn * (i - 1), ie) &
616  * s(12,j,1,2,ie)
617  end do
618  end do
619  end do
620  end do
621 
622  do j = 1, n
623  do i = 1, nn
624  do ie = 1, nelv
625  jj = i + nn * (j - 1)
626  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 1, 3, ie) &
627  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 1, 3, ie) &
628  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 1, 3, ie) &
629  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 1, 3, ie) &
630  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 1, 3, ie) &
631  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 1, 3, ie) &
632  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 1, 3, ie) &
633  + wrk2(i + nn * (8 - 1), ie) * s(8, j, 1, 3, ie) &
634  + wrk2(i + nn * (9 - 1), ie) * s(9, j, 1, 3, ie) &
635  + wrk2(i + nn * (10 - 1), ie) * s(10, j, 1, 3, ie) &
636  + wrk2(i + nn * (11 - 1), ie) * s(11, j, 1, 3, ie) &
637  + wrk2(i + nn * (12 - 1), ie) * s(12, j, 1, 3, ie)
638  end do
639  end do
640  end do
641 
642  do i = 1, nnn * nelv
643  r(i,1) = d(i,1) * e(i,1)
644  end do
645 
646  do j = 1, nn
647  do i = 1, n
648  do ie = 1, nelv
649  ii = i + n * (j - 1)
650  wrk(ii, ie) = s(i,1,1,1,ie) * r(1 + n * (j - 1), ie) &
651  + s(i,2,1,1,ie) * r(2 + n * (j - 1), ie) &
652  + s(i,3,1,1,ie) * r(3 + n * (j - 1), ie) &
653  + s(i,4,1,1,ie) * r(4 + n * (j - 1), ie) &
654  + s(i,5,1,1,ie) * r(5 + n * (j - 1), ie) &
655  + s(i,6,1,1,ie) * r(6 + n * (j - 1), ie) &
656  + s(i,7,1,1,ie) * r(7 + n * (j - 1), ie) &
657  + s(i,8,1,1,ie) * r(8 + n * (j - 1), ie) &
658  + s(i,9,1,1,ie) * r(9 + n * (j - 1), ie) &
659  + s(i,10,1,1,ie) * r(10 + n * (j - 1), ie) &
660  + s(i,11,1,1,ie) * r(11 + n * (j - 1), ie) &
661  + s(i,12,1,1,ie) * r(12 + n * (j - 1), ie)
662  end do
663  end do
664  end do
665 
666  do i = 1, n
667  do j = 1, n
668  do l = 1, n
669  do ie = 1, nelv
670  ii = l + n * (j - 1) + nn * (i - 1)
671  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
672  * s(1,j,2,2,ie) &
673  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
674  * s(2,j,2,2,ie) &
675  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
676  * s(3,j,2,2,ie) &
677  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
678  * s(4,j,2,2,ie) &
679  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
680  * s(5,j,2,2,ie) &
681  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
682  * s(6,j,2,2,ie) &
683  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
684  * s(7,j,2,2,ie) &
685  + wrk(l + n * (8 - 1) + nn * (i - 1), ie) &
686  * s(8,j,2,2,ie) &
687  + wrk(l + n * (9 - 1) + nn * (i - 1), ie) &
688  * s(9,j,2,2,ie) &
689  + wrk(l + n * (10 - 1) + nn * (i - 1), ie) &
690  * s(10,j,2,2,ie) &
691  + wrk(l + n * (11 - 1) + nn * (i - 1), ie) &
692  * s(11,j,2,2,ie) &
693  + wrk(l + n * (12 - 1) + nn * (i - 1), ie) &
694  * s(12,j,2,2,ie)
695  end do
696  end do
697  end do
698  end do
699 
700  do j = 1, n
701  do i = 1, nn
702  do ie = 1, nelv
703  jj = i + nn * (j - 1)
704  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 2, 3, ie) &
705  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 2, 3, ie) &
706  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 2, 3, ie) &
707  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 2, 3, ie) &
708  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 2, 3, ie) &
709  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 2, 3, ie) &
710  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 2, 3, ie) &
711  + wrk2(i + nn * (8 - 1), ie) * s(8, j, 2, 3, ie) &
712  + wrk2(i + nn * (9 - 1), ie) * s(9, j, 2, 3, ie) &
713  + wrk2(i + nn * (10 - 1), ie) * s(10, j, 2, 3, ie) &
714  + wrk2(i + nn * (11 - 1), ie) * s(11, j, 2, 3, ie) &
715  + wrk2(i + nn * (12 - 1), ie) * s(12, j, 2, 3, ie)
716  end do
717  end do
718  end do
719 
720 
721  end subroutine fdm_do_fast_sx_nl12
722 
723  subroutine fdm_do_fast_sx_nl11(e, r, s, d, nelv)
724  integer, parameter :: n = 11
725  integer, parameter :: nn = n**2
726  integer, parameter :: nnn = n**3
727  integer, intent(in) :: nelv
728  real(kind=rp), intent(inout) :: e(n**3, nelv)
729  real(kind=rp), intent(inout) :: r(n**3, nelv)
730  real(kind=rp), intent(inout) :: s(n,n,2,3, nelv)
731  real(kind=rp), intent(inout) :: d(n**3, nelv)
732  real(kind=rp) :: wrk(n**3, nelv), wrk2(n**3, nelv)
733  integer :: ie, i, j, l, ii, jj
734 
735  do j = 1, nn
736  do i = 1, n
737  do ie = 1, nelv
738  ii = i + n * (j - 1)
739  wrk(ii, ie) = s(i,1,2,1,ie) * r(1 + n * (j - 1), ie) &
740  + s(i,2,2,1,ie) * r(2 + n * (j - 1), ie) &
741  + s(i,3,2,1,ie) * r(3 + n * (j - 1), ie) &
742  + s(i,4,2,1,ie) * r(4 + n * (j - 1), ie) &
743  + s(i,5,2,1,ie) * r(5 + n * (j - 1), ie) &
744  + s(i,6,2,1,ie) * r(6 + n * (j - 1), ie) &
745  + s(i,7,2,1,ie) * r(7 + n * (j - 1), ie) &
746  + s(i,8,2,1,ie) * r(8 + n * (j - 1), ie) &
747  + s(i,9,2,1,ie) * r(9 + n * (j - 1), ie) &
748  + s(i,10,2,1,ie) * r(10 + n * (j - 1), ie) &
749  + s(i,11,2,1,ie) * r(11 + n * (j - 1), ie)
750  end do
751  end do
752  end do
753 
754  do i = 1, n
755  do j = 1, n
756  do l = 1, n
757  do ie = 1, nelv
758  ii = l + n * (j - 1) + nn * (i - 1)
759  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
760  * s(1,j,1,2,ie) &
761  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
762  * s(2,j,1,2,ie) &
763  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
764  * s(3,j,1,2,ie) &
765  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
766  * s(4,j,1,2,ie) &
767  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
768  * s(5,j,1,2,ie) &
769  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
770  * s(6,j,1,2,ie) &
771  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
772  * s(7,j,1,2,ie) &
773  + wrk(l + n * (8 - 1) + nn * (i - 1), ie) &
774  * s(8,j,1,2,ie) &
775  + wrk(l + n * (9 - 1) + nn * (i - 1), ie) &
776  * s(9,j,1,2,ie) &
777  + wrk(l + n * (10 - 1) + nn * (i - 1), ie) &
778  * s(10,j,1,2,ie) &
779  + wrk(l + n * (11 - 1) + nn * (i - 1), ie) &
780  * s(11,j,1,2,ie)
781  end do
782  end do
783  end do
784  end do
785 
786  do j = 1, n
787  do i = 1, nn
788  do ie = 1, nelv
789  jj = i + nn * (j - 1)
790  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 1, 3, ie) &
791  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 1, 3, ie) &
792  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 1, 3, ie) &
793  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 1, 3, ie) &
794  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 1, 3, ie) &
795  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 1, 3, ie) &
796  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 1, 3, ie) &
797  + wrk2(i + nn * (8 - 1), ie) * s(8, j, 1, 3, ie) &
798  + wrk2(i + nn * (9 - 1), ie) * s(9, j, 1, 3, ie) &
799  + wrk2(i + nn * (10 - 1), ie) * s(10, j, 1, 3, ie) &
800  + wrk2(i + nn * (11 - 1), ie) * s(11, j, 1, 3, ie)
801  end do
802  end do
803  end do
804 
805  do i = 1, nnn * nelv
806  r(i,1) = d(i,1) * e(i,1)
807  end do
808 
809  do j = 1, nn
810  do i = 1, n
811  do ie = 1, nelv
812  ii = i + n * (j - 1)
813  wrk(ii, ie) = s(i,1,1,1,ie) * r(1 + n * (j - 1), ie) &
814  + s(i,2,1,1,ie) * r(2 + n * (j - 1), ie) &
815  + s(i,3,1,1,ie) * r(3 + n * (j - 1), ie) &
816  + s(i,4,1,1,ie) * r(4 + n * (j - 1), ie) &
817  + s(i,5,1,1,ie) * r(5 + n * (j - 1), ie) &
818  + s(i,6,1,1,ie) * r(6 + n * (j - 1), ie) &
819  + s(i,7,1,1,ie) * r(7 + n * (j - 1), ie) &
820  + s(i,8,1,1,ie) * r(8 + n * (j - 1), ie) &
821  + s(i,9,1,1,ie) * r(9 + n * (j - 1), ie) &
822  + s(i,10,1,1,ie) * r(10 + n * (j - 1), ie) &
823  + s(i,11,1,1,ie) * r(11 + n * (j - 1), ie)
824  end do
825  end do
826  end do
827 
828  do i = 1, n
829  do j = 1, n
830  do l = 1, n
831  do ie = 1, nelv
832  ii = l + n * (j - 1) + nn * (i - 1)
833  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
834  * s(1,j,2,2,ie) &
835  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
836  * s(2,j,2,2,ie) &
837  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
838  * s(3,j,2,2,ie) &
839  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
840  * s(4,j,2,2,ie) &
841  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
842  * s(5,j,2,2,ie) &
843  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
844  * s(6,j,2,2,ie) &
845  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
846  * s(7,j,2,2,ie) &
847  + wrk(l + n * (8 - 1) + nn * (i - 1), ie) &
848  * s(8,j,2,2,ie) &
849  + wrk(l + n * (9 - 1) + nn * (i - 1), ie) &
850  * s(9,j,2,2,ie) &
851  + wrk(l + n * (10 - 1) + nn * (i - 1), ie) &
852  * s(10,j,2,2,ie) &
853  + wrk(l + n * (11 - 1) + nn * (i - 1), ie) &
854  * s(11,j,2,2,ie)
855  end do
856  end do
857  end do
858  end do
859 
860  do j = 1, n
861  do i = 1, nn
862  do ie = 1, nelv
863  jj = i + nn * (j - 1)
864  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 2, 3, ie) &
865  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 2, 3, ie) &
866  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 2, 3, ie) &
867  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 2, 3, ie) &
868  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 2, 3, ie) &
869  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 2, 3, ie) &
870  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 2, 3, ie) &
871  + wrk2(i + nn * (8 - 1), ie) * s(8, j, 2, 3, ie) &
872  + wrk2(i + nn * (9 - 1), ie) * s(9, j, 2, 3, ie) &
873  + wrk2(i + nn * (10 - 1), ie) * s(10, j, 2, 3, ie) &
874  + wrk2(i + nn * (11 - 1), ie) * s(11, j, 2, 3, ie)
875  end do
876  end do
877  end do
878 
879 
880  end subroutine fdm_do_fast_sx_nl11
881 
882  subroutine fdm_do_fast_sx_nl10(e, r, s, d, nelv)
883  integer, parameter :: n = 10
884  integer, parameter :: nn = n**2
885  integer, parameter :: nnn = n**3
886  integer, intent(in) :: nelv
887  real(kind=rp), intent(inout) :: e(n**3, nelv)
888  real(kind=rp), intent(inout) :: r(n**3, nelv)
889  real(kind=rp), intent(inout) :: s(n,n,2,3, nelv)
890  real(kind=rp), intent(inout) :: d(n**3, nelv)
891  real(kind=rp) :: wrk(n**3, nelv), wrk2(n**3, nelv)
892  integer :: ie, i, j, l, ii, jj
893 
894  do j = 1, nn
895  do i = 1, n
896  do ie = 1, nelv
897  ii = i + n * (j - 1)
898  wrk(ii, ie) = s(i,1,2,1,ie) * r(1 + n * (j - 1), ie) &
899  + s(i,2,2,1,ie) * r(2 + n * (j - 1), ie) &
900  + s(i,3,2,1,ie) * r(3 + n * (j - 1), ie) &
901  + s(i,4,2,1,ie) * r(4 + n * (j - 1), ie) &
902  + s(i,5,2,1,ie) * r(5 + n * (j - 1), ie) &
903  + s(i,6,2,1,ie) * r(6 + n * (j - 1), ie) &
904  + s(i,7,2,1,ie) * r(7 + n * (j - 1), ie) &
905  + s(i,8,2,1,ie) * r(8 + n * (j - 1), ie) &
906  + s(i,9,2,1,ie) * r(9 + n * (j - 1), ie) &
907  + s(i,10,2,1,ie) * r(10 + n * (j - 1), ie)
908  end do
909  end do
910  end do
911 
912  do i = 1, n
913  do j = 1, n
914  do l = 1, n
915  do ie = 1, nelv
916  ii = l + n * (j - 1) + nn * (i - 1)
917  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
918  * s(1,j,1,2,ie) &
919  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
920  * s(2,j,1,2,ie) &
921  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
922  * s(3,j,1,2,ie) &
923  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
924  * s(4,j,1,2,ie) &
925  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
926  * s(5,j,1,2,ie) &
927  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
928  * s(6,j,1,2,ie) &
929  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
930  * s(7,j,1,2,ie) &
931  + wrk(l + n * (8 - 1) + nn * (i - 1), ie) &
932  * s(8,j,1,2,ie) &
933  + wrk(l + n * (9 - 1) + nn * (i - 1), ie) &
934  * s(9,j,1,2,ie) &
935  + wrk(l + n * (10 - 1) + nn * (i - 1), ie) &
936  * s(10,j,1,2,ie)
937  end do
938  end do
939  end do
940  end do
941 
942  do j = 1, n
943  do i = 1, nn
944  do ie = 1, nelv
945  jj = i + nn * (j - 1)
946  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 1, 3, ie) &
947  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 1, 3, ie) &
948  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 1, 3, ie) &
949  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 1, 3, ie) &
950  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 1, 3, ie) &
951  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 1, 3, ie) &
952  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 1, 3, ie) &
953  + wrk2(i + nn * (8 - 1), ie) * s(8, j, 1, 3, ie) &
954  + wrk2(i + nn * (9 - 1), ie) * s(9, j, 1, 3, ie) &
955  + wrk2(i + nn * (10 - 1), ie) * s(10, j, 1, 3, ie)
956  end do
957  end do
958  end do
959 
960  do i = 1, nnn * nelv
961  r(i,1) = d(i,1) * e(i,1)
962  end do
963 
964  do j = 1, nn
965  do i = 1, n
966  do ie = 1, nelv
967  ii = i + n * (j - 1)
968  wrk(ii, ie) = s(i,1,1,1,ie) * r(1 + n * (j - 1), ie) &
969  + s(i,2,1,1,ie) * r(2 + n * (j - 1), ie) &
970  + s(i,3,1,1,ie) * r(3 + n * (j - 1), ie) &
971  + s(i,4,1,1,ie) * r(4 + n * (j - 1), ie) &
972  + s(i,5,1,1,ie) * r(5 + n * (j - 1), ie) &
973  + s(i,6,1,1,ie) * r(6 + n * (j - 1), ie) &
974  + s(i,7,1,1,ie) * r(7 + n * (j - 1), ie) &
975  + s(i,8,1,1,ie) * r(8 + n * (j - 1), ie) &
976  + s(i,9,1,1,ie) * r(9 + n * (j - 1), ie) &
977  + s(i,10,1,1,ie) * r(10 + n * (j - 1), ie)
978  end do
979  end do
980  end do
981 
982  do i = 1, n
983  do j = 1, n
984  do l = 1, n
985  do ie = 1, nelv
986  ii = l + n * (j - 1) + nn * (i - 1)
987  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
988  * s(1,j,2,2,ie) &
989  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
990  * s(2,j,2,2,ie) &
991  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
992  * s(3,j,2,2,ie) &
993  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
994  * s(4,j,2,2,ie) &
995  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
996  * s(5,j,2,2,ie) &
997  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
998  * s(6,j,2,2,ie) &
999  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
1000  * s(7,j,2,2,ie) &
1001  + wrk(l + n * (8 - 1) + nn * (i - 1), ie) &
1002  * s(8,j,2,2,ie) &
1003  + wrk(l + n * (9 - 1) + nn * (i - 1), ie) &
1004  * s(9,j,2,2,ie) &
1005  + wrk(l + n * (10 - 1) + nn * (i - 1), ie) &
1006  * s(10,j,2,2,ie)
1007  end do
1008  end do
1009  end do
1010  end do
1011 
1012  do j = 1, n
1013  do i = 1, nn
1014  do ie = 1, nelv
1015  jj = i + nn * (j - 1)
1016  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 2, 3, ie) &
1017  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 2, 3, ie) &
1018  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 2, 3, ie) &
1019  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 2, 3, ie) &
1020  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 2, 3, ie) &
1021  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 2, 3, ie) &
1022  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 2, 3, ie) &
1023  + wrk2(i + nn * (8 - 1), ie) * s(8, j, 2, 3, ie) &
1024  + wrk2(i + nn * (9 - 1), ie) * s(9, j, 2, 3, ie) &
1025  + wrk2(i + nn * (10 - 1), ie) * s(10, j, 2, 3, ie)
1026  end do
1027  end do
1028  end do
1029 
1030 
1031  end subroutine fdm_do_fast_sx_nl10
1032 
1033  subroutine fdm_do_fast_sx_nl9(e, r, s, d, nelv)
1034  integer, parameter :: n = 9
1035  integer, parameter :: nn = n**2
1036  integer, parameter :: nnn = n**3
1037  integer, intent(in) :: nelv
1038  real(kind=rp), intent(inout) :: e(n**3, nelv)
1039  real(kind=rp), intent(inout) :: r(n**3, nelv)
1040  real(kind=rp), intent(inout) :: s(n,n,2,3, nelv)
1041  real(kind=rp), intent(inout) :: d(n**3, nelv)
1042  real(kind=rp) :: wrk(n**3, nelv), wrk2(n**3, nelv)
1043  integer :: ie, i, j, l, ii, jj
1044 
1045  do j = 1, nn
1046  do i = 1, n
1047  do ie = 1, nelv
1048  ii = i + n * (j - 1)
1049  wrk(ii, ie) = s(i,1,2,1,ie) * r(1 + n * (j - 1), ie) &
1050  + s(i,2,2,1,ie) * r(2 + n * (j - 1), ie) &
1051  + s(i,3,2,1,ie) * r(3 + n * (j - 1), ie) &
1052  + s(i,4,2,1,ie) * r(4 + n * (j - 1), ie) &
1053  + s(i,5,2,1,ie) * r(5 + n * (j - 1), ie) &
1054  + s(i,6,2,1,ie) * r(6 + n * (j - 1), ie) &
1055  + s(i,7,2,1,ie) * r(7 + n * (j - 1), ie) &
1056  + s(i,8,2,1,ie) * r(8 + n * (j - 1), ie) &
1057  + s(i,9,2,1,ie) * r(9 + n * (j - 1), ie)
1058  end do
1059  end do
1060  end do
1061 
1062  do i = 1, n
1063  do j = 1, n
1064  do l = 1, n
1065  do ie = 1, nelv
1066  ii = l + n * (j - 1) + nn * (i - 1)
1067  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1068  * s(1,j,1,2,ie) &
1069  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1070  * s(2,j,1,2,ie) &
1071  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
1072  * s(3,j,1,2,ie) &
1073  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
1074  * s(4,j,1,2,ie) &
1075  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
1076  * s(5,j,1,2,ie) &
1077  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
1078  * s(6,j,1,2,ie) &
1079  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
1080  * s(7,j,1,2,ie) &
1081  + wrk(l + n * (8 - 1) + nn * (i - 1), ie) &
1082  * s(8,j,1,2,ie) &
1083  + wrk(l + n * (9 - 1) + nn * (i - 1), ie) &
1084  * s(9,j,1,2,ie)
1085  end do
1086  end do
1087  end do
1088  end do
1089 
1090  do j = 1, n
1091  do i = 1, nn
1092  do ie = 1, nelv
1093  jj = i + nn * (j - 1)
1094  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 1, 3, ie) &
1095  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 1, 3, ie) &
1096  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 1, 3, ie) &
1097  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 1, 3, ie) &
1098  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 1, 3, ie) &
1099  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 1, 3, ie) &
1100  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 1, 3, ie) &
1101  + wrk2(i + nn * (8 - 1), ie) * s(8, j, 1, 3, ie) &
1102  + wrk2(i + nn * (9 - 1), ie) * s(9, j, 1, 3, ie)
1103  end do
1104  end do
1105  end do
1106 
1107  do i = 1, nnn * nelv
1108  r(i,1) = d(i,1) * e(i,1)
1109  end do
1110 
1111  do j = 1, nn
1112  do i = 1, n
1113  do ie = 1, nelv
1114  ii = i + n * (j - 1)
1115  wrk(ii, ie) = s(i,1,1,1,ie) * r(1 + n * (j - 1), ie) &
1116  + s(i,2,1,1,ie) * r(2 + n * (j - 1), ie) &
1117  + s(i,3,1,1,ie) * r(3 + n * (j - 1), ie) &
1118  + s(i,4,1,1,ie) * r(4 + n * (j - 1), ie) &
1119  + s(i,5,1,1,ie) * r(5 + n * (j - 1), ie) &
1120  + s(i,6,1,1,ie) * r(6 + n * (j - 1), ie) &
1121  + s(i,7,1,1,ie) * r(7 + n * (j - 1), ie) &
1122  + s(i,8,1,1,ie) * r(8 + n * (j - 1), ie) &
1123  + s(i,9,1,1,ie) * r(9 + n * (j - 1), ie)
1124  end do
1125  end do
1126  end do
1127 
1128  do i = 1, n
1129  do j = 1, n
1130  do l = 1, n
1131  do ie = 1, nelv
1132  ii = l + n * (j - 1) + nn * (i - 1)
1133  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1134  * s(1,j,2,2,ie) &
1135  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1136  * s(2,j,2,2,ie) &
1137  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
1138  * s(3,j,2,2,ie) &
1139  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
1140  * s(4,j,2,2,ie) &
1141  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
1142  * s(5,j,2,2,ie) &
1143  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
1144  * s(6,j,2,2,ie) &
1145  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
1146  * s(7,j,2,2,ie) &
1147  + wrk(l + n * (8 - 1) + nn * (i - 1), ie) &
1148  * s(8,j,2,2,ie) &
1149  + wrk(l + n * (9 - 1) + nn * (i - 1), ie) &
1150  * s(9,j,2,2,ie)
1151  end do
1152  end do
1153  end do
1154  end do
1155 
1156  do j = 1, n
1157  do i = 1, nn
1158  do ie = 1, nelv
1159  jj = i + nn * (j - 1)
1160  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 2, 3, ie) &
1161  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 2, 3, ie) &
1162  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 2, 3, ie) &
1163  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 2, 3, ie) &
1164  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 2, 3, ie) &
1165  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 2, 3, ie) &
1166  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 2, 3, ie) &
1167  + wrk2(i + nn * (8 - 1), ie) * s(8, j, 2, 3, ie) &
1168  + wrk2(i + nn * (9 - 1), ie) * s(9, j, 2, 3, ie)
1169  end do
1170  end do
1171  end do
1172 
1173 
1174  end subroutine fdm_do_fast_sx_nl9
1175 
1176  subroutine fdm_do_fast_sx_nl8(e, r, s, d, nelv)
1177  integer, parameter :: n = 8
1178  integer, parameter :: nn = n**2
1179  integer, parameter :: nnn = n**3
1180  integer, intent(in) :: nelv
1181  real(kind=rp), intent(inout) :: e(n**3, nelv)
1182  real(kind=rp), intent(inout) :: r(n**3, nelv)
1183  real(kind=rp), intent(inout) :: s(n,n,2,3, nelv)
1184  real(kind=rp), intent(inout) :: d(n**3, nelv)
1185  real(kind=rp) :: wrk(n**3, nelv), wrk2(n**3, nelv)
1186  integer :: ie, i, j, l, ii, jj
1187 
1188  do j = 1, nn
1189  do i = 1, n
1190  do ie = 1, nelv
1191  ii = i + n * (j - 1)
1192  wrk(ii, ie) = s(i,1,2,1,ie) * r(1 + n * (j - 1), ie) &
1193  + s(i,2,2,1,ie) * r(2 + n * (j - 1), ie) &
1194  + s(i,3,2,1,ie) * r(3 + n * (j - 1), ie) &
1195  + s(i,4,2,1,ie) * r(4 + n * (j - 1), ie) &
1196  + s(i,5,2,1,ie) * r(5 + n * (j - 1), ie) &
1197  + s(i,6,2,1,ie) * r(6 + n * (j - 1), ie) &
1198  + s(i,7,2,1,ie) * r(7 + n * (j - 1), ie) &
1199  + s(i,8,2,1,ie) * r(8 + n * (j - 1), ie)
1200  end do
1201  end do
1202  end do
1203 
1204  do i = 1, n
1205  do j = 1, n
1206  do l = 1, n
1207  do ie = 1, nelv
1208  ii = l + n * (j - 1) + nn * (i - 1)
1209  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1210  * s(1,j,1,2,ie) &
1211  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1212  * s(2,j,1,2,ie) &
1213  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
1214  * s(3,j,1,2,ie) &
1215  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
1216  * s(4,j,1,2,ie) &
1217  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
1218  * s(5,j,1,2,ie) &
1219  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
1220  * s(6,j,1,2,ie) &
1221  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
1222  * s(7,j,1,2,ie) &
1223  + wrk(l + n * (8 - 1) + nn * (i - 1), ie) &
1224  * s(8,j,1,2,ie)
1225  end do
1226  end do
1227  end do
1228  end do
1229 
1230  do j = 1, n
1231  do i = 1, nn
1232  do ie = 1, nelv
1233  jj = i + nn * (j - 1)
1234  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 1, 3, ie) &
1235  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 1, 3, ie) &
1236  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 1, 3, ie) &
1237  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 1, 3, ie) &
1238  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 1, 3, ie) &
1239  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 1, 3, ie) &
1240  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 1, 3, ie) &
1241  + wrk2(i + nn * (8 - 1), ie) * s(8, j, 1, 3, ie)
1242  end do
1243  end do
1244  end do
1245 
1246  do i = 1, nnn * nelv
1247  r(i,1) = d(i,1) * e(i,1)
1248  end do
1249 
1250  do j = 1, nn
1251  do i = 1, n
1252  do ie = 1, nelv
1253  ii = i + n * (j - 1)
1254  wrk(ii, ie) = s(i,1,1,1,ie) * r(1 + n * (j - 1), ie) &
1255  + s(i,2,1,1,ie) * r(2 + n * (j - 1), ie) &
1256  + s(i,3,1,1,ie) * r(3 + n * (j - 1), ie) &
1257  + s(i,4,1,1,ie) * r(4 + n * (j - 1), ie) &
1258  + s(i,5,1,1,ie) * r(5 + n * (j - 1), ie) &
1259  + s(i,6,1,1,ie) * r(6 + n * (j - 1), ie) &
1260  + s(i,7,1,1,ie) * r(7 + n * (j - 1), ie) &
1261  + s(i,8,1,1,ie) * r(8 + n * (j - 1), ie)
1262  end do
1263  end do
1264  end do
1265 
1266  do i = 1, n
1267  do j = 1, n
1268  do l = 1, n
1269  do ie = 1, nelv
1270  ii = l + n * (j - 1) + nn * (i - 1)
1271  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1272  * s(1,j,2,2,ie) &
1273  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1274  * s(2,j,2,2,ie) &
1275  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
1276  * s(3,j,2,2,ie) &
1277  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
1278  * s(4,j,2,2,ie) &
1279  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
1280  * s(5,j,2,2,ie) &
1281  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
1282  * s(6,j,2,2,ie) &
1283  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
1284  * s(7,j,2,2,ie) &
1285  + wrk(l + n * (8 - 1) + nn * (i - 1), ie) &
1286  * s(8,j,2,2,ie)
1287  end do
1288  end do
1289  end do
1290  end do
1291 
1292  do j = 1, n
1293  do i = 1, nn
1294  do ie = 1, nelv
1295  jj = i + nn * (j - 1)
1296  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 2, 3, ie) &
1297  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 2, 3, ie) &
1298  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 2, 3, ie) &
1299  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 2, 3, ie) &
1300  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 2, 3, ie) &
1301  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 2, 3, ie) &
1302  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 2, 3, ie) &
1303  + wrk2(i + nn * (8 - 1), ie) * s(8, j, 2, 3, ie)
1304  end do
1305  end do
1306  end do
1307 
1308 
1309  end subroutine fdm_do_fast_sx_nl8
1310 
1311  subroutine fdm_do_fast_sx_nl7(e, r, s, d, nelv)
1312  integer, parameter :: n = 7
1313  integer, parameter :: nn = n**2
1314  integer, parameter :: nnn = n**3
1315  integer, intent(in) :: nelv
1316  real(kind=rp), intent(inout) :: e(n**3, nelv)
1317  real(kind=rp), intent(inout) :: r(n**3, nelv)
1318  real(kind=rp), intent(inout) :: s(n,n,2,3, nelv)
1319  real(kind=rp), intent(inout) :: d(n**3, nelv)
1320  real(kind=rp) :: wrk(n**3, nelv), wrk2(n**3, nelv)
1321  integer :: ie, i, j, l, ii, jj
1322 
1323  do j = 1, nn
1324  do i = 1, n
1325  do ie = 1, nelv
1326  ii = i + n * (j - 1)
1327  wrk(ii, ie) = s(i,1,2,1,ie) * r(1 + n * (j - 1), ie) &
1328  + s(i,2,2,1,ie) * r(2 + n * (j - 1), ie) &
1329  + s(i,3,2,1,ie) * r(3 + n * (j - 1), ie) &
1330  + s(i,4,2,1,ie) * r(4 + n * (j - 1), ie) &
1331  + s(i,5,2,1,ie) * r(5 + n * (j - 1), ie) &
1332  + s(i,6,2,1,ie) * r(6 + n * (j - 1), ie) &
1333  + s(i,7,2,1,ie) * r(7 + n * (j - 1), ie)
1334  end do
1335  end do
1336  end do
1337 
1338  do i = 1, n
1339  do j = 1, n
1340  do l = 1, n
1341  do ie = 1, nelv
1342  ii = l + n * (j - 1) + nn * (i - 1)
1343  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1344  * s(1,j,1,2,ie) &
1345  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1346  * s(2,j,1,2,ie) &
1347  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
1348  * s(3,j,1,2,ie) &
1349  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
1350  * s(4,j,1,2,ie) &
1351  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
1352  * s(5,j,1,2,ie) &
1353  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
1354  * s(6,j,1,2,ie) &
1355  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
1356  * s(7,j,1,2,ie)
1357  end do
1358  end do
1359  end do
1360  end do
1361 
1362  do j = 1, n
1363  do i = 1, nn
1364  do ie = 1, nelv
1365  jj = i + nn * (j - 1)
1366  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 1, 3, ie) &
1367  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 1, 3, ie) &
1368  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 1, 3, ie) &
1369  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 1, 3, ie) &
1370  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 1, 3, ie) &
1371  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 1, 3, ie) &
1372  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 1, 3, ie)
1373  end do
1374  end do
1375  end do
1376 
1377  do i = 1, nnn * nelv
1378  r(i,1) = d(i,1) * e(i,1)
1379  end do
1380 
1381  do j = 1, nn
1382  do i = 1, n
1383  do ie = 1, nelv
1384  ii = i + n * (j - 1)
1385  wrk(ii, ie) = s(i,1,1,1,ie) * r(1 + n * (j - 1), ie) &
1386  + s(i,2,1,1,ie) * r(2 + n * (j - 1), ie) &
1387  + s(i,3,1,1,ie) * r(3 + n * (j - 1), ie) &
1388  + s(i,4,1,1,ie) * r(4 + n * (j - 1), ie) &
1389  + s(i,5,1,1,ie) * r(5 + n * (j - 1), ie) &
1390  + s(i,6,1,1,ie) * r(6 + n * (j - 1), ie) &
1391  + s(i,7,1,1,ie) * r(7 + n * (j - 1), ie)
1392  end do
1393  end do
1394  end do
1395 
1396  do i = 1, n
1397  do j = 1, n
1398  do l = 1, n
1399  do ie = 1, nelv
1400  ii = l + n * (j - 1) + nn * (i - 1)
1401  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1402  * s(1,j,2,2,ie) &
1403  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1404  * s(2,j,2,2,ie) &
1405  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
1406  * s(3,j,2,2,ie) &
1407  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
1408  * s(4,j,2,2,ie) &
1409  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
1410  * s(5,j,2,2,ie) &
1411  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
1412  * s(6,j,2,2,ie) &
1413  + wrk(l + n * (7 - 1) + nn * (i - 1), ie) &
1414  * s(7,j,2,2,ie)
1415  end do
1416  end do
1417  end do
1418  end do
1419 
1420  do j = 1, n
1421  do i = 1, nn
1422  do ie = 1, nelv
1423  jj = i + nn * (j - 1)
1424  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 2, 3, ie) &
1425  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 2, 3, ie) &
1426  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 2, 3, ie) &
1427  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 2, 3, ie) &
1428  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 2, 3, ie) &
1429  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 2, 3, ie) &
1430  + wrk2(i + nn * (7 - 1), ie) * s(7, j, 2, 3, ie)
1431  end do
1432  end do
1433  end do
1434 
1435 
1436  end subroutine fdm_do_fast_sx_nl7
1437 
1438  subroutine fdm_do_fast_sx_nl6(e, r, s, d, nelv)
1439  integer, parameter :: n = 6
1440  integer, parameter :: nn = n**2
1441  integer, parameter :: nnn = n**3
1442  integer, intent(in) :: nelv
1443  real(kind=rp), intent(inout) :: e(n**3, nelv)
1444  real(kind=rp), intent(inout) :: r(n**3, nelv)
1445  real(kind=rp), intent(inout) :: s(n,n,2,3, nelv)
1446  real(kind=rp), intent(inout) :: d(n**3, nelv)
1447  real(kind=rp) :: wrk(n**3, nelv), wrk2(n**3, nelv)
1448  integer :: ie, i, j, l, ii, jj
1449 
1450  do j = 1, nn
1451  do i = 1, n
1452  do ie = 1, nelv
1453  ii = i + n * (j - 1)
1454  wrk(ii, ie) = s(i,1,2,1,ie) * r(1 + n * (j - 1), ie) &
1455  + s(i,2,2,1,ie) * r(2 + n * (j - 1), ie) &
1456  + s(i,3,2,1,ie) * r(3 + n * (j - 1), ie) &
1457  + s(i,4,2,1,ie) * r(4 + n * (j - 1), ie) &
1458  + s(i,5,2,1,ie) * r(5 + n * (j - 1), ie) &
1459  + s(i,6,2,1,ie) * r(6 + n * (j - 1), ie)
1460  end do
1461  end do
1462  end do
1463 
1464  do i = 1, n
1465  do j = 1, n
1466  do l = 1, n
1467  do ie = 1, nelv
1468  ii = l + n * (j - 1) + nn * (i - 1)
1469  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1470  * s(1,j,1,2,ie) &
1471  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1472  * s(2,j,1,2,ie) &
1473  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
1474  * s(3,j,1,2,ie) &
1475  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
1476  * s(4,j,1,2,ie) &
1477  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
1478  * s(5,j,1,2,ie) &
1479  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
1480  * s(6,j,1,2,ie)
1481  end do
1482  end do
1483  end do
1484  end do
1485 
1486  do j = 1, n
1487  do i = 1, nn
1488  do ie = 1, nelv
1489  jj = i + nn * (j - 1)
1490  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 1, 3, ie) &
1491  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 1, 3, ie) &
1492  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 1, 3, ie) &
1493  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 1, 3, ie) &
1494  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 1, 3, ie) &
1495  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 1, 3, ie)
1496  end do
1497  end do
1498  end do
1499 
1500  do i = 1, nnn * nelv
1501  r(i,1) = d(i,1) * e(i,1)
1502  end do
1503 
1504  do j = 1, nn
1505  do i = 1, n
1506  do ie = 1, nelv
1507  ii = i + n * (j - 1)
1508  wrk(ii, ie) = s(i,1,1,1,ie) * r(1 + n * (j - 1), ie) &
1509  + s(i,2,1,1,ie) * r(2 + n * (j - 1), ie) &
1510  + s(i,3,1,1,ie) * r(3 + n * (j - 1), ie) &
1511  + s(i,4,1,1,ie) * r(4 + n * (j - 1), ie) &
1512  + s(i,5,1,1,ie) * r(5 + n * (j - 1), ie) &
1513  + s(i,6,1,1,ie) * r(6 + n * (j - 1), ie)
1514  end do
1515  end do
1516  end do
1517 
1518  do i = 1, n
1519  do j = 1, n
1520  do l = 1, n
1521  do ie = 1, nelv
1522  ii = l + n * (j - 1) + nn * (i - 1)
1523  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1524  * s(1,j,2,2,ie) &
1525  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1526  * s(2,j,2,2,ie) &
1527  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
1528  * s(3,j,2,2,ie) &
1529  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
1530  * s(4,j,2,2,ie) &
1531  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
1532  * s(5,j,2,2,ie) &
1533  + wrk(l + n * (6 - 1) + nn * (i - 1), ie) &
1534  * s(6,j,2,2,ie)
1535  end do
1536  end do
1537  end do
1538  end do
1539 
1540  do j = 1, n
1541  do i = 1, nn
1542  do ie = 1, nelv
1543  jj = i + nn * (j - 1)
1544  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 2, 3, ie) &
1545  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 2, 3, ie) &
1546  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 2, 3, ie) &
1547  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 2, 3, ie) &
1548  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 2, 3, ie) &
1549  + wrk2(i + nn * (6 - 1), ie) * s(6, j, 2, 3, ie)
1550  end do
1551  end do
1552  end do
1553 
1554 
1555  end subroutine fdm_do_fast_sx_nl6
1556 
1557  subroutine fdm_do_fast_sx_nl5(e, r, s, d, nelv)
1558  integer, parameter :: n = 5
1559  integer, parameter :: nn = n**2
1560  integer, parameter :: nnn = n**3
1561  integer, intent(in) :: nelv
1562  real(kind=rp), intent(inout) :: e(n**3, nelv)
1563  real(kind=rp), intent(inout) :: r(n**3, nelv)
1564  real(kind=rp), intent(inout) :: s(n,n,2,3, nelv)
1565  real(kind=rp), intent(inout) :: d(n**3, nelv)
1566  real(kind=rp) :: wrk(n**3, nelv), wrk2(n**3, nelv)
1567  integer :: ie, i, j, l, ii, jj
1568 
1569  do j = 1, nn
1570  do i = 1, n
1571  do ie = 1, nelv
1572  ii = i + n * (j - 1)
1573  wrk(ii, ie) = s(i,1,2,1,ie) * r(1 + n * (j - 1), ie) &
1574  + s(i,2,2,1,ie) * r(2 + n * (j - 1), ie) &
1575  + s(i,3,2,1,ie) * r(3 + n * (j - 1), ie) &
1576  + s(i,4,2,1,ie) * r(4 + n * (j - 1), ie) &
1577  + s(i,5,2,1,ie) * r(5 + n * (j - 1), ie)
1578  end do
1579  end do
1580  end do
1581 
1582  do i = 1, n
1583  do j = 1, n
1584  do l = 1, n
1585  do ie = 1, nelv
1586  ii = l + n * (j - 1) + nn * (i - 1)
1587  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1588  * s(1,j,1,2,ie) &
1589  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1590  * s(2,j,1,2,ie) &
1591  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
1592  * s(3,j,1,2,ie) &
1593  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
1594  * s(4,j,1,2,ie) &
1595  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
1596  * s(5,j,1,2,ie)
1597  end do
1598  end do
1599  end do
1600  end do
1601 
1602  do j = 1, n
1603  do i = 1, nn
1604  do ie = 1, nelv
1605  jj = i + nn * (j - 1)
1606  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 1, 3, ie) &
1607  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 1, 3, ie) &
1608  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 1, 3, ie) &
1609  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 1, 3, ie) &
1610  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 1, 3, ie)
1611  end do
1612  end do
1613  end do
1614 
1615  do i = 1, nnn * nelv
1616  r(i,1) = d(i,1) * e(i,1)
1617  end do
1618 
1619  do j = 1, nn
1620  do i = 1, n
1621  do ie = 1, nelv
1622  ii = i + n * (j - 1)
1623  wrk(ii, ie) = s(i,1,1,1,ie) * r(1 + n * (j - 1), ie) &
1624  + s(i,2,1,1,ie) * r(2 + n * (j - 1), ie) &
1625  + s(i,3,1,1,ie) * r(3 + n * (j - 1), ie) &
1626  + s(i,4,1,1,ie) * r(4 + n * (j - 1), ie) &
1627  + s(i,5,1,1,ie) * r(5 + n * (j - 1), ie)
1628  end do
1629  end do
1630  end do
1631 
1632  do i = 1, n
1633  do j = 1, n
1634  do l = 1, n
1635  do ie = 1, nelv
1636  ii = l + n * (j - 1) + nn * (i - 1)
1637  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1638  * s(1,j,2,2,ie) &
1639  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1640  * s(2,j,2,2,ie) &
1641  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
1642  * s(3,j,2,2,ie) &
1643  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
1644  * s(4,j,2,2,ie) &
1645  + wrk(l + n * (5 - 1) + nn * (i - 1), ie) &
1646  * s(5,j,2,2,ie)
1647  end do
1648  end do
1649  end do
1650  end do
1651 
1652  do j = 1, n
1653  do i = 1, nn
1654  do ie = 1, nelv
1655  jj = i + nn * (j - 1)
1656  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 2, 3, ie) &
1657  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 2, 3, ie) &
1658  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 2, 3, ie) &
1659  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 2, 3, ie) &
1660  + wrk2(i + nn * (5 - 1), ie) * s(5, j, 2, 3, ie)
1661  end do
1662  end do
1663  end do
1664 
1665 
1666  end subroutine fdm_do_fast_sx_nl5
1667 
1668  subroutine fdm_do_fast_sx_nl4(e, r, s, d, nelv)
1669  integer, parameter :: n = 4
1670  integer, parameter :: nn = n**2
1671  integer, parameter :: nnn = n**3
1672  integer, intent(in) :: nelv
1673  real(kind=rp), intent(inout) :: e(n**3, nelv)
1674  real(kind=rp), intent(inout) :: r(n**3, nelv)
1675  real(kind=rp), intent(inout) :: s(n,n,2,3, nelv)
1676  real(kind=rp), intent(inout) :: d(n**3, nelv)
1677  real(kind=rp) :: wrk(n**3, nelv), wrk2(n**3, nelv)
1678  integer :: ie, i, j, l, ii, jj
1679 
1680  do j = 1, nn
1681  do i = 1, n
1682  do ie = 1, nelv
1683  ii = i + n * (j - 1)
1684  wrk(ii, ie) = s(i,1,2,1,ie) * r(1 + n * (j - 1), ie) &
1685  + s(i,2,2,1,ie) * r(2 + n * (j - 1), ie) &
1686  + s(i,3,2,1,ie) * r(3 + n * (j - 1), ie) &
1687  + s(i,4,2,1,ie) * r(4 + n * (j - 1), ie)
1688  end do
1689  end do
1690  end do
1691 
1692  do i = 1, n
1693  do j = 1, n
1694  do l = 1, n
1695  do ie = 1, nelv
1696  ii = l + n * (j - 1) + nn * (i - 1)
1697  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1698  * s(1,j,1,2,ie) &
1699  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1700  * s(2,j,1,2,ie) &
1701  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
1702  * s(3,j,1,2,ie) &
1703  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
1704  * s(4,j,1,2,ie)
1705  end do
1706  end do
1707  end do
1708  end do
1709 
1710  do j = 1, n
1711  do i = 1, nn
1712  do ie = 1, nelv
1713  jj = i + nn * (j - 1)
1714  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 1, 3, ie) &
1715  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 1, 3, ie) &
1716  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 1, 3, ie) &
1717  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 1, 3, ie)
1718  end do
1719  end do
1720  end do
1721 
1722  do i = 1, nnn * nelv
1723  r(i,1) = d(i,1) * e(i,1)
1724  end do
1725 
1726  do j = 1, nn
1727  do i = 1, n
1728  do ie = 1, nelv
1729  ii = i + n * (j - 1)
1730  wrk(ii, ie) = s(i,1,1,1,ie) * r(1 + n * (j - 1), ie) &
1731  + s(i,2,1,1,ie) * r(2 + n * (j - 1), ie) &
1732  + s(i,3,1,1,ie) * r(3 + n * (j - 1), ie) &
1733  + s(i,4,1,1,ie) * r(4 + n * (j - 1), ie)
1734  end do
1735  end do
1736  end do
1737 
1738  do i = 1, n
1739  do j = 1, n
1740  do l = 1, n
1741  do ie = 1, nelv
1742  ii = l + n * (j - 1) + nn * (i - 1)
1743  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1744  * s(1,j,2,2,ie) &
1745  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1746  * s(2,j,2,2,ie) &
1747  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
1748  * s(3,j,2,2,ie) &
1749  + wrk(l + n * (4 - 1) + nn * (i - 1), ie) &
1750  * s(4,j,2,2,ie)
1751  end do
1752  end do
1753  end do
1754  end do
1755 
1756  do j = 1, n
1757  do i = 1, nn
1758  do ie = 1, nelv
1759  jj = i + nn * (j - 1)
1760  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 2, 3, ie) &
1761  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 2, 3, ie) &
1762  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 2, 3, ie) &
1763  + wrk2(i + nn * (4 - 1), ie) * s(4, j, 2, 3, ie)
1764  end do
1765  end do
1766  end do
1767 
1768 
1769  end subroutine fdm_do_fast_sx_nl4
1770 
1771  subroutine fdm_do_fast_sx_nl3(e, r, s, d, nelv)
1772  integer, parameter :: n = 3
1773  integer, parameter :: nn = n**2
1774  integer, parameter :: nnn = n**3
1775  integer, intent(in) :: nelv
1776  real(kind=rp), intent(inout) :: e(n**3, nelv)
1777  real(kind=rp), intent(inout) :: r(n**3, nelv)
1778  real(kind=rp), intent(inout) :: s(n,n,2,3, nelv)
1779  real(kind=rp), intent(inout) :: d(n**3, nelv)
1780  real(kind=rp) :: wrk(n**3, nelv), wrk2(n**3, nelv)
1781  integer :: ie, i, j, l, ii, jj
1782 
1783  do j = 1, nn
1784  do i = 1, n
1785  do ie = 1, nelv
1786  ii = i + n * (j - 1)
1787  wrk(ii, ie) = s(i,1,2,1,ie) * r(1 + n * (j - 1), ie) &
1788  + s(i,2,2,1,ie) * r(2 + n * (j - 1), ie) &
1789  + s(i,3,2,1,ie) * r(3 + n * (j - 1), ie)
1790  end do
1791  end do
1792  end do
1793 
1794  do i = 1, n
1795  do j = 1, n
1796  do l = 1, n
1797  do ie = 1, nelv
1798  ii = l + n * (j - 1) + nn * (i - 1)
1799  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1800  * s(1,j,1,2,ie) &
1801  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1802  * s(2,j,1,2,ie) &
1803  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
1804  * s(3,j,1,2,ie)
1805  end do
1806  end do
1807  end do
1808  end do
1809 
1810  do j = 1, n
1811  do i = 1, nn
1812  do ie = 1, nelv
1813  jj = i + nn * (j - 1)
1814  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 1, 3, ie) &
1815  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 1, 3, ie) &
1816  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 1, 3, ie)
1817  end do
1818  end do
1819  end do
1820 
1821  do i = 1, nnn * nelv
1822  r(i,1) = d(i,1) * e(i,1)
1823  end do
1824 
1825  do j = 1, nn
1826  do i = 1, n
1827  do ie = 1, nelv
1828  ii = i + n * (j - 1)
1829  wrk(ii, ie) = s(i,1,1,1,ie) * r(1 + n * (j - 1), ie) &
1830  + s(i,2,1,1,ie) * r(2 + n * (j - 1), ie) &
1831  + s(i,3,1,1,ie) * r(3 + n * (j - 1), ie)
1832  end do
1833  end do
1834  end do
1835 
1836  do i = 1, n
1837  do j = 1, n
1838  do l = 1, n
1839  do ie = 1, nelv
1840  ii = l + n * (j - 1) + nn * (i - 1)
1841  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1842  * s(1,j,2,2,ie) &
1843  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1844  * s(2,j,2,2,ie) &
1845  + wrk(l + n * (3 - 1) + nn * (i - 1), ie) &
1846  * s(3,j,2,2,ie)
1847  end do
1848  end do
1849  end do
1850  end do
1851 
1852  do j = 1, n
1853  do i = 1, nn
1854  do ie = 1, nelv
1855  jj = i + nn * (j - 1)
1856  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 2, 3, ie) &
1857  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 2, 3, ie) &
1858  + wrk2(i + nn * (3 - 1), ie) * s(3, j, 2, 3, ie)
1859  end do
1860  end do
1861  end do
1862 
1863 
1864  end subroutine fdm_do_fast_sx_nl3
1865 
1866  subroutine fdm_do_fast_sx_nl2(e, r, s, d, nelv)
1867  integer, parameter :: n = 2
1868  integer, parameter :: nn = n**2
1869  integer, parameter :: nnn = n**3
1870  integer, intent(in) :: nelv
1871  real(kind=rp), intent(inout) :: e(n**3, nelv)
1872  real(kind=rp), intent(inout) :: r(n**3, nelv)
1873  real(kind=rp), intent(inout) :: s(n,n,2,3, nelv)
1874  real(kind=rp), intent(inout) :: d(n**3, nelv)
1875  real(kind=rp) :: wrk(n**3, nelv), wrk2(n**3, nelv)
1876  integer :: ie, i, j, l, ii, jj
1877 
1878  do j = 1, nn
1879  do i = 1, n
1880  do ie = 1, nelv
1881  ii = i + n * (j - 1)
1882  wrk(ii, ie) = s(i,1,2,1,ie) * r(1 + n * (j - 1), ie) &
1883  + s(i,2,2,1,ie) * r(2 + n * (j - 1), ie)
1884  end do
1885  end do
1886  end do
1887 
1888  do i = 1, n
1889  do j = 1, n
1890  do l = 1, n
1891  do ie = 1, nelv
1892  ii = l + n * (j - 1) + nn * (i - 1)
1893  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1894  * s(1,j,1,2,ie) &
1895  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1896  * s(2,j,1,2,ie)
1897  end do
1898  end do
1899  end do
1900  end do
1901 
1902  do j = 1, n
1903  do i = 1, nn
1904  do ie = 1, nelv
1905  jj = i + nn * (j - 1)
1906  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 1, 3, ie) &
1907  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 1, 3, ie)
1908  end do
1909  end do
1910  end do
1911 
1912  do i = 1, nnn * nelv
1913  r(i,1) = d(i,1) * e(i,1)
1914  end do
1915 
1916  do j = 1, nn
1917  do i = 1, n
1918  do ie = 1, nelv
1919  ii = i + n * (j - 1)
1920  wrk(ii, ie) = s(i,1,1,1,ie) * r(1 + n * (j - 1), ie) &
1921  + s(i,2,1,1,ie) * r(2 + n * (j - 1), ie)
1922  end do
1923  end do
1924  end do
1925 
1926  do i = 1, n
1927  do j = 1, n
1928  do l = 1, n
1929  do ie = 1, nelv
1930  ii = l + n * (j - 1) + nn * (i - 1)
1931  wrk2(ii,ie) = wrk(l + n * (1 - 1) + nn * (i - 1), ie) &
1932  * s(1,j,2,2,ie) &
1933  + wrk(l + n * (2 - 1) + nn * (i - 1), ie) &
1934  * s(2,j,2,2,ie)
1935  end do
1936  end do
1937  end do
1938  end do
1939 
1940  do j = 1, n
1941  do i = 1, nn
1942  do ie = 1, nelv
1943  jj = i + nn * (j - 1)
1944  e(jj,ie) = wrk2(i + nn * (1 - 1), ie) * s(1, j, 2, 3, ie) &
1945  + wrk2(i + nn * (2 - 1), ie) * s(2, j, 2, 3, ie)
1946  end do
1947  end do
1948  end do
1949 
1950 
1951  end subroutine fdm_do_fast_sx_nl2
1952 
1953 end module fdm_sx
Fast Diagonalization SX-Aurora backend.
Definition: fdm_sx.f90:34
subroutine fdm_do_fast_sx_nl11(e, r, s, d, nelv)
Definition: fdm_sx.f90:724
subroutine fdm_do_fast_sx_nl9(e, r, s, d, nelv)
Definition: fdm_sx.f90:1034
subroutine fdm_do_fast_sx_nl8(e, r, s, d, nelv)
Definition: fdm_sx.f90:1177
subroutine fdm_do_fast_sx_nl4(e, r, s, d, nelv)
Definition: fdm_sx.f90:1669
subroutine fdm_do_fast_sx_nl10(e, r, s, d, nelv)
Definition: fdm_sx.f90:883
subroutine fdm_do_fast_sx_nl6(e, r, s, d, nelv)
Definition: fdm_sx.f90:1439
subroutine, public fdm_do_fast_sx(e, r, s, d, nl, ldim, nelv)
Definition: fdm_sx.f90:45
subroutine fdm_do_fast_sx_nl2(e, r, s, d, nelv)
Definition: fdm_sx.f90:1867
subroutine fdm_do_fast_sx_nl13(e, r, s, d, nelv)
Definition: fdm_sx.f90:382
subroutine fdm_do_fast_sx_nl14(e, r, s, d, nelv)
Definition: fdm_sx.f90:199
subroutine fdm_do_fast_sx_nl12(e, r, s, d, nelv)
Definition: fdm_sx.f90:557
subroutine fdm_do_fast_sx_nl(e, r, s, d, nelv, n)
Definition: fdm_sx.f90:96
subroutine fdm_do_fast_sx_nl3(e, r, s, d, nelv)
Definition: fdm_sx.f90:1772
subroutine fdm_do_fast_sx_nl5(e, r, s, d, nelv)
Definition: fdm_sx.f90:1558
subroutine fdm_do_fast_sx_nl7(e, r, s, d, nelv)
Definition: fdm_sx.f90:1312
integer, parameter, public rp
Global precision used in computations.
Definition: num_types.f90:12
Tensor operations SX-Aurora backend.
Definition: tensor_sx.f90:2
subroutine, public tnsr2d_el_sx(v, nv, u, nu, A, Bt)
Definition: tensor_sx.f90:13