Neko  0.8.1
A portable framework for high-order spectral element flow simulations
dudxyz.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 cpu_dudxyz
35  use num_types, only : rp
36  implicit none
37 
38 contains
39 
40  subroutine cpu_dudxyz_lx(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel, lx)
41  integer, intent(in) :: nel, lx
42  real(kind=rp), dimension(lx,lx,lx,nel), intent(inout) :: du
43  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: u, dr, ds, dt
44  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: jacinv
45  real(kind=rp), dimension(lx,lx), intent(in) :: dx, dy, dz
46  real(kind=rp), dimension(lx,lx,lx) :: drst
47  real(kind=rp) :: tmp
48  integer :: e, i, j, k, l
49 
50  do e = 1, nel
51  do j = 1, lx * lx
52  do i = 1, lx
53  tmp = 0.0_rp
54  do k = 1, lx
55  tmp = tmp + dx(i,k) * u(k,j,1,e)
56  end do
57  du(i,j,1,e) = tmp
58  end do
59  end do
60 
61  do i = 1, lx * lx * lx
62  du(i,1,1,e) = du(i,1,1,e) * dr(i,1,1,e)
63  end do
64 
65  do k = 1, lx
66  do j = 1, lx
67  do i = 1, lx
68  tmp = 0.0_rp
69  do l = 1, lx
70  tmp = tmp + dy(j,l) * u(i,l,k,e)
71  end do
72  drst(i,j,k) = tmp
73  end do
74  end do
75  end do
76 
77  do i = 1, lx * lx * lx
78  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * ds(i,1,1,e)
79  end do
80 
81  do k = 1, lx
82  do i = 1, lx*lx
83  tmp = 0.0_rp
84  do l = 1, lx
85  tmp = tmp + dz(k,l) * u(i,1,l,e)
86  end do
87  drst(i,1,k) = tmp
88  end do
89  end do
90 
91  do i = 1, lx * lx * lx
92  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * dt(i,1,1,e)
93  end do
94 
95  do i = 1, lx * lx * lx
96  du(i,1,1,e) = du(i,1,1,e) * jacinv(i,1,1,e)
97  end do
98 
99  end do
100 
101  end subroutine cpu_dudxyz_lx
102 
103  subroutine cpu_dudxyz_lx14(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
104  integer, parameter :: lx = 14
105  integer, intent(in) :: nel
106  real(kind=rp), dimension(lx,lx,lx,nel), intent(inout) :: du
107  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: u, dr, ds, dt
108  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: jacinv
109  real(kind=rp), dimension(lx,lx), intent(in) :: dx, dy, dz
110  real(kind=rp), dimension(lx,lx,lx) :: drst
111  integer :: e, i, j, k
112 
113  do e = 1, nel
114  do j = 1, lx * lx
115  do i = 1, lx
116  du(i,j,1,e) = dx(i,1) * u(1,j,1,e) &
117  + dx(i,2) * u(2,j,1,e) &
118  + dx(i,3) * u(3,j,1,e) &
119  + dx(i,4) * u(4,j,1,e) &
120  + dx(i,5) * u(5,j,1,e) &
121  + dx(i,6) * u(6,j,1,e) &
122  + dx(i,7) * u(7,j,1,e) &
123  + dx(i,8) * u(8,j,1,e) &
124  + dx(i,9) * u(9,j,1,e) &
125  + dx(i,10) * u(10,j,1,e) &
126  + dx(i,11) * u(11,j,1,e) &
127  + dx(i,12) * u(12,j,1,e) &
128  + dx(i,13) * u(13,j,1,e) &
129  + dx(i,14) * u(14,j,1,e)
130  end do
131  end do
132 
133  do i = 1, lx * lx * lx
134  du(i,1,1,e) = du(i,1,1,e) * dr(i,1,1,e)
135  end do
136 
137  do k = 1, lx
138  do j = 1, lx
139  do i = 1, lx
140  drst(i,j,k) = dy(j,1) * u(i,1,k,e) &
141  + dy(j,2) * u(i,2,k,e) &
142  + dy(j,3) * u(i,3,k,e) &
143  + dy(j,4) * u(i,4,k,e) &
144  + dy(j,5) * u(i,5,k,e) &
145  + dy(j,6) * u(i,6,k,e) &
146  + dy(j,7) * u(i,7,k,e) &
147  + dy(j,8) * u(i,8,k,e) &
148  + dy(j,9) * u(i,9,k,e) &
149  + dy(j,10) * u(i,10,k,e) &
150  + dy(j,11) * u(i,11,k,e) &
151  + dy(j,12) * u(i,12,k,e) &
152  + dy(j,13) * u(i,13,k,e) &
153  + dy(j,14) * u(i,14,k,e)
154  end do
155  end do
156  end do
157 
158  do i = 1, lx * lx * lx
159  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * ds(i,1,1,e)
160  end do
161 
162  do k = 1, lx
163  do i = 1, lx*lx
164  drst(i,1,k) = dz(k,1) * u(i,1,1,e) &
165  + dz(k,2) * u(i,1,2,e) &
166  + dz(k,3) * u(i,1,3,e) &
167  + dz(k,4) * u(i,1,4,e) &
168  + dz(k,5) * u(i,1,5,e) &
169  + dz(k,6) * u(i,1,6,e) &
170  + dz(k,7) * u(i,1,7,e) &
171  + dz(k,8) * u(i,1,8,e) &
172  + dz(k,9) * u(i,1,9,e) &
173  + dz(k,10) * u(i,1,10,e) &
174  + dz(k,11) * u(i,1,11,e) &
175  + dz(k,12) * u(i,1,12,e) &
176  + dz(k,13) * u(i,1,13,e) &
177  + dz(k,14) * u(i,1,14,e)
178  end do
179  end do
180 
181  do i = 1, lx * lx * lx
182  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * dt(i,1,1,e)
183  end do
184 
185  do i = 1, lx * lx * lx
186  du(i,1,1,e) = du(i,1,1,e) * jacinv(i,1,1,e)
187  end do
188 
189  end do
190 
191  end subroutine cpu_dudxyz_lx14
192 
193  subroutine cpu_dudxyz_lx13(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
194  integer, parameter :: lx = 13
195  integer, intent(in) :: nel
196  real(kind=rp), dimension(lx,lx,lx,nel), intent(inout) :: du
197  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: u, dr, ds, dt
198  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: jacinv
199  real(kind=rp), dimension(lx,lx), intent(in) :: dx, dy, dz
200  real(kind=rp), dimension(lx,lx,lx) :: drst
201  integer :: e, i, j, k
202 
203  do e = 1, nel
204  do j = 1, lx * lx
205  do i = 1, lx
206  du(i,j,1,e) = dx(i,1) * u(1,j,1,e) &
207  + dx(i,2) * u(2,j,1,e) &
208  + dx(i,3) * u(3,j,1,e) &
209  + dx(i,4) * u(4,j,1,e) &
210  + dx(i,5) * u(5,j,1,e) &
211  + dx(i,6) * u(6,j,1,e) &
212  + dx(i,7) * u(7,j,1,e) &
213  + dx(i,8) * u(8,j,1,e) &
214  + dx(i,9) * u(9,j,1,e) &
215  + dx(i,10) * u(10,j,1,e) &
216  + dx(i,11) * u(11,j,1,e) &
217  + dx(i,12) * u(12,j,1,e) &
218  + dx(i,13) * u(13,j,1,e)
219  end do
220  end do
221 
222  do i = 1, lx * lx * lx
223  du(i,1,1,e) = du(i,1,1,e) * dr(i,1,1,e)
224  end do
225 
226  do k = 1, lx
227  do j = 1, lx
228  do i = 1, lx
229  drst(i,j,k) = dy(j,1) * u(i,1,k,e) &
230  + dy(j,2) * u(i,2,k,e) &
231  + dy(j,3) * u(i,3,k,e) &
232  + dy(j,4) * u(i,4,k,e) &
233  + dy(j,5) * u(i,5,k,e) &
234  + dy(j,6) * u(i,6,k,e) &
235  + dy(j,7) * u(i,7,k,e) &
236  + dy(j,8) * u(i,8,k,e) &
237  + dy(j,9) * u(i,9,k,e) &
238  + dy(j,10) * u(i,10,k,e) &
239  + dy(j,11) * u(i,11,k,e) &
240  + dy(j,12) * u(i,12,k,e) &
241  + dy(j,13) * u(i,13,k,e)
242  end do
243  end do
244  end do
245 
246  do i = 1, lx * lx * lx
247  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * ds(i,1,1,e)
248  end do
249 
250  do k = 1, lx
251  do i = 1, lx*lx
252  drst(i,1,k) = dz(k,1) * u(i,1,1,e) &
253  + dz(k,2) * u(i,1,2,e) &
254  + dz(k,3) * u(i,1,3,e) &
255  + dz(k,4) * u(i,1,4,e) &
256  + dz(k,5) * u(i,1,5,e) &
257  + dz(k,6) * u(i,1,6,e) &
258  + dz(k,7) * u(i,1,7,e) &
259  + dz(k,8) * u(i,1,8,e) &
260  + dz(k,9) * u(i,1,9,e) &
261  + dz(k,10) * u(i,1,10,e) &
262  + dz(k,11) * u(i,1,11,e) &
263  + dz(k,12) * u(i,1,12,e) &
264  + dz(k,13) * u(i,1,13,e)
265  end do
266  end do
267 
268  do i = 1, lx * lx * lx
269  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * dt(i,1,1,e)
270  end do
271 
272  do i = 1, lx * lx * lx
273  du(i,1,1,e) = du(i,1,1,e) * jacinv(i,1,1,e)
274  end do
275 
276  end do
277 
278  end subroutine cpu_dudxyz_lx13
279 
280  subroutine cpu_dudxyz_lx12(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
281  integer, parameter :: lx = 12
282  integer, intent(in) :: nel
283  real(kind=rp), dimension(lx,lx,lx,nel), intent(inout) :: du
284  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: u, dr, ds, dt
285  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: jacinv
286  real(kind=rp), dimension(lx,lx), intent(in) :: dx, dy, dz
287  real(kind=rp), dimension(lx,lx,lx) :: drst
288  integer :: e, i, j, k
289 
290  do e = 1, nel
291  do j = 1, lx * lx
292  do i = 1, lx
293  du(i,j,1,e) = dx(i,1) * u(1,j,1,e) &
294  + dx(i,2) * u(2,j,1,e) &
295  + dx(i,3) * u(3,j,1,e) &
296  + dx(i,4) * u(4,j,1,e) &
297  + dx(i,5) * u(5,j,1,e) &
298  + dx(i,6) * u(6,j,1,e) &
299  + dx(i,7) * u(7,j,1,e) &
300  + dx(i,8) * u(8,j,1,e) &
301  + dx(i,9) * u(9,j,1,e) &
302  + dx(i,10) * u(10,j,1,e) &
303  + dx(i,11) * u(11,j,1,e) &
304  + dx(i,12) * u(12,j,1,e)
305  end do
306  end do
307 
308  do i = 1, lx * lx * lx
309  du(i,1,1,e) = du(i,1,1,e) * dr(i,1,1,e)
310  end do
311 
312  do k = 1, lx
313  do j = 1, lx
314  do i = 1, lx
315  drst(i,j,k) = dy(j,1) * u(i,1,k,e) &
316  + dy(j,2) * u(i,2,k,e) &
317  + dy(j,3) * u(i,3,k,e) &
318  + dy(j,4) * u(i,4,k,e) &
319  + dy(j,5) * u(i,5,k,e) &
320  + dy(j,6) * u(i,6,k,e) &
321  + dy(j,7) * u(i,7,k,e) &
322  + dy(j,8) * u(i,8,k,e) &
323  + dy(j,9) * u(i,9,k,e) &
324  + dy(j,10) * u(i,10,k,e) &
325  + dy(j,11) * u(i,11,k,e) &
326  + dy(j,12) * u(i,12,k,e)
327  end do
328  end do
329  end do
330 
331  do i = 1, lx * lx * lx
332  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * ds(i,1,1,e)
333  end do
334 
335  do k = 1, lx
336  do i = 1, lx*lx
337  drst(i,1,k) = dz(k,1) * u(i,1,1,e) &
338  + dz(k,2) * u(i,1,2,e) &
339  + dz(k,3) * u(i,1,3,e) &
340  + dz(k,4) * u(i,1,4,e) &
341  + dz(k,5) * u(i,1,5,e) &
342  + dz(k,6) * u(i,1,6,e) &
343  + dz(k,7) * u(i,1,7,e) &
344  + dz(k,8) * u(i,1,8,e) &
345  + dz(k,9) * u(i,1,9,e) &
346  + dz(k,10) * u(i,1,10,e) &
347  + dz(k,11) * u(i,1,11,e) &
348  + dz(k,12) * u(i,1,12,e)
349  end do
350  end do
351 
352  do i = 1, lx * lx * lx
353  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * dt(i,1,1,e)
354  end do
355 
356  do i = 1, lx * lx * lx
357  du(i,1,1,e) = du(i,1,1,e) * jacinv(i,1,1,e)
358  end do
359 
360  end do
361 
362  end subroutine cpu_dudxyz_lx12
363 
364  subroutine cpu_dudxyz_lx11(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
365  integer, parameter :: lx = 11
366  integer, intent(in) :: nel
367  real(kind=rp), dimension(lx,lx,lx,nel), intent(inout) :: du
368  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: u, dr, ds, dt
369  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: jacinv
370  real(kind=rp), dimension(lx,lx), intent(in) :: dx, dy, dz
371  real(kind=rp), dimension(lx,lx,lx) :: drst
372  integer :: e, i, j, k
373 
374  do e = 1, nel
375  do j = 1, lx * lx
376  do i = 1, lx
377  du(i,j,1,e) = dx(i,1) * u(1,j,1,e) &
378  + dx(i,2) * u(2,j,1,e) &
379  + dx(i,3) * u(3,j,1,e) &
380  + dx(i,4) * u(4,j,1,e) &
381  + dx(i,5) * u(5,j,1,e) &
382  + dx(i,6) * u(6,j,1,e) &
383  + dx(i,7) * u(7,j,1,e) &
384  + dx(i,8) * u(8,j,1,e) &
385  + dx(i,9) * u(9,j,1,e) &
386  + dx(i,10) * u(10,j,1,e) &
387  + dx(i,11) * u(11,j,1,e)
388  end do
389  end do
390 
391  do i = 1, lx * lx * lx
392  du(i,1,1,e) = du(i,1,1,e) * dr(i,1,1,e)
393  end do
394 
395  do k = 1, lx
396  do j = 1, lx
397  do i = 1, lx
398  drst(i,j,k) = dy(j,1) * u(i,1,k,e) &
399  + dy(j,2) * u(i,2,k,e) &
400  + dy(j,3) * u(i,3,k,e) &
401  + dy(j,4) * u(i,4,k,e) &
402  + dy(j,5) * u(i,5,k,e) &
403  + dy(j,6) * u(i,6,k,e) &
404  + dy(j,7) * u(i,7,k,e) &
405  + dy(j,8) * u(i,8,k,e) &
406  + dy(j,9) * u(i,9,k,e) &
407  + dy(j,10) * u(i,10,k,e) &
408  + dy(j,11) * u(i,11,k,e)
409  end do
410  end do
411  end do
412 
413  do i = 1, lx * lx * lx
414  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * ds(i,1,1,e)
415  end do
416 
417  do k = 1, lx
418  do i = 1, lx*lx
419  drst(i,1,k) = dz(k,1) * u(i,1,1,e) &
420  + dz(k,2) * u(i,1,2,e) &
421  + dz(k,3) * u(i,1,3,e) &
422  + dz(k,4) * u(i,1,4,e) &
423  + dz(k,5) * u(i,1,5,e) &
424  + dz(k,6) * u(i,1,6,e) &
425  + dz(k,7) * u(i,1,7,e) &
426  + dz(k,8) * u(i,1,8,e) &
427  + dz(k,9) * u(i,1,9,e) &
428  + dz(k,10) * u(i,1,10,e) &
429  + dz(k,11) * u(i,1,11,e)
430  end do
431  end do
432 
433  do i = 1, lx * lx * lx
434  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * dt(i,1,1,e)
435  end do
436 
437  do i = 1, lx * lx * lx
438  du(i,1,1,e) = du(i,1,1,e) * jacinv(i,1,1,e)
439  end do
440 
441  end do
442 
443  end subroutine cpu_dudxyz_lx11
444 
445  subroutine cpu_dudxyz_lx10(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
446  integer, parameter :: lx = 10
447  integer, intent(in) :: nel
448  real(kind=rp), dimension(lx,lx,lx,nel), intent(inout) :: du
449  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: u, dr, ds, dt
450  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: jacinv
451  real(kind=rp), dimension(lx,lx), intent(in) :: dx, dy, dz
452  real(kind=rp), dimension(lx,lx,lx) :: drst
453  integer :: e, i, j, k
454 
455  do e = 1, nel
456  do j = 1, lx * lx
457  do i = 1, lx
458  du(i,j,1,e) = dx(i,1) * u(1,j,1,e) &
459  + dx(i,2) * u(2,j,1,e) &
460  + dx(i,3) * u(3,j,1,e) &
461  + dx(i,4) * u(4,j,1,e) &
462  + dx(i,5) * u(5,j,1,e) &
463  + dx(i,6) * u(6,j,1,e) &
464  + dx(i,7) * u(7,j,1,e) &
465  + dx(i,8) * u(8,j,1,e) &
466  + dx(i,9) * u(9,j,1,e) &
467  + dx(i,10) * u(10,j,1,e)
468  end do
469  end do
470 
471  do i = 1, lx * lx * lx
472  du(i,1,1,e) = du(i,1,1,e) * dr(i,1,1,e)
473  end do
474 
475  do k = 1, lx
476  do j = 1, lx
477  do i = 1, lx
478  drst(i,j,k) = dy(j,1) * u(i,1,k,e) &
479  + dy(j,2) * u(i,2,k,e) &
480  + dy(j,3) * u(i,3,k,e) &
481  + dy(j,4) * u(i,4,k,e) &
482  + dy(j,5) * u(i,5,k,e) &
483  + dy(j,6) * u(i,6,k,e) &
484  + dy(j,7) * u(i,7,k,e) &
485  + dy(j,8) * u(i,8,k,e) &
486  + dy(j,9) * u(i,9,k,e) &
487  + dy(j,10) * u(i,10,k,e)
488  end do
489  end do
490  end do
491 
492  do i = 1, lx * lx * lx
493  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * ds(i,1,1,e)
494  end do
495 
496  do k = 1, lx
497  do i = 1, lx*lx
498  drst(i,1,k) = dz(k,1) * u(i,1,1,e) &
499  + dz(k,2) * u(i,1,2,e) &
500  + dz(k,3) * u(i,1,3,e) &
501  + dz(k,4) * u(i,1,4,e) &
502  + dz(k,5) * u(i,1,5,e) &
503  + dz(k,6) * u(i,1,6,e) &
504  + dz(k,7) * u(i,1,7,e) &
505  + dz(k,8) * u(i,1,8,e) &
506  + dz(k,9) * u(i,1,9,e) &
507  + dz(k,10) * u(i,1,10,e)
508  end do
509  end do
510 
511  do i = 1, lx * lx * lx
512  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * dt(i,1,1,e)
513  end do
514 
515  do i = 1, lx * lx * lx
516  du(i,1,1,e) = du(i,1,1,e) * jacinv(i,1,1,e)
517  end do
518 
519  end do
520 
521  end subroutine cpu_dudxyz_lx10
522 
523  subroutine cpu_dudxyz_lx9(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
524  integer, parameter :: lx = 9
525  integer, intent(in) :: nel
526  real(kind=rp), dimension(lx,lx,lx,nel), intent(inout) :: du
527  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: u, dr, ds, dt
528  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: jacinv
529  real(kind=rp), dimension(lx,lx), intent(in) :: dx, dy, dz
530  real(kind=rp), dimension(lx,lx,lx) :: drst
531  integer :: e, i, j, k
532 
533  do e = 1, nel
534  do j = 1, lx * lx
535  do i = 1, lx
536  du(i,j,1,e) = dx(i,1) * u(1,j,1,e) &
537  + dx(i,2) * u(2,j,1,e) &
538  + dx(i,3) * u(3,j,1,e) &
539  + dx(i,4) * u(4,j,1,e) &
540  + dx(i,5) * u(5,j,1,e) &
541  + dx(i,6) * u(6,j,1,e) &
542  + dx(i,7) * u(7,j,1,e) &
543  + dx(i,8) * u(8,j,1,e) &
544  + dx(i,9) * u(9,j,1,e)
545  end do
546  end do
547 
548  do i = 1, lx * lx * lx
549  du(i,1,1,e) = du(i,1,1,e) * dr(i,1,1,e)
550  end do
551 
552  do k = 1, lx
553  do j = 1, lx
554  do i = 1, lx
555  drst(i,j,k) = dy(j,1) * u(i,1,k,e) &
556  + dy(j,2) * u(i,2,k,e) &
557  + dy(j,3) * u(i,3,k,e) &
558  + dy(j,4) * u(i,4,k,e) &
559  + dy(j,5) * u(i,5,k,e) &
560  + dy(j,6) * u(i,6,k,e) &
561  + dy(j,7) * u(i,7,k,e) &
562  + dy(j,8) * u(i,8,k,e) &
563  + dy(j,9) * u(i,9,k,e)
564  end do
565  end do
566  end do
567 
568  do i = 1, lx * lx * lx
569  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * ds(i,1,1,e)
570  end do
571 
572  do k = 1, lx
573  do i = 1, lx*lx
574  drst(i,1,k) = dz(k,1) * u(i,1,1,e) &
575  + dz(k,2) * u(i,1,2,e) &
576  + dz(k,3) * u(i,1,3,e) &
577  + dz(k,4) * u(i,1,4,e) &
578  + dz(k,5) * u(i,1,5,e) &
579  + dz(k,6) * u(i,1,6,e) &
580  + dz(k,7) * u(i,1,7,e) &
581  + dz(k,8) * u(i,1,8,e) &
582  + dz(k,9) * u(i,1,9,e)
583  end do
584  end do
585 
586  do i = 1, lx * lx * lx
587  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * dt(i,1,1,e)
588  end do
589 
590  do i = 1, lx * lx * lx
591  du(i,1,1,e) = du(i,1,1,e) * jacinv(i,1,1,e)
592  end do
593 
594  end do
595 
596  end subroutine cpu_dudxyz_lx9
597 
598  subroutine cpu_dudxyz_lx8(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
599  integer, parameter :: lx = 8
600  integer, intent(in) :: nel
601  real(kind=rp), dimension(lx,lx,lx,nel), intent(inout) :: du
602  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: u, dr, ds, dt
603  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: jacinv
604  real(kind=rp), dimension(lx,lx), intent(in) :: dx, dy, dz
605  real(kind=rp), dimension(lx,lx,lx) :: drst
606  integer :: e, i, j, k
607 
608  do e = 1, nel
609  do j = 1, lx * lx
610  do i = 1, lx
611  du(i,j,1,e) = dx(i,1) * u(1,j,1,e) &
612  + dx(i,2) * u(2,j,1,e) &
613  + dx(i,3) * u(3,j,1,e) &
614  + dx(i,4) * u(4,j,1,e) &
615  + dx(i,5) * u(5,j,1,e) &
616  + dx(i,6) * u(6,j,1,e) &
617  + dx(i,7) * u(7,j,1,e) &
618  + dx(i,8) * u(8,j,1,e)
619  end do
620  end do
621 
622  do i = 1, lx * lx * lx
623  du(i,1,1,e) = du(i,1,1,e) * dr(i,1,1,e)
624  end do
625 
626  do k = 1, lx
627  do j = 1, lx
628  do i = 1, lx
629  drst(i,j,k) = dy(j,1) * u(i,1,k,e) &
630  + dy(j,2) * u(i,2,k,e) &
631  + dy(j,3) * u(i,3,k,e) &
632  + dy(j,4) * u(i,4,k,e) &
633  + dy(j,5) * u(i,5,k,e) &
634  + dy(j,6) * u(i,6,k,e) &
635  + dy(j,7) * u(i,7,k,e) &
636  + dy(j,8) * u(i,8,k,e)
637  end do
638  end do
639  end do
640 
641  do i = 1, lx * lx * lx
642  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * ds(i,1,1,e)
643  end do
644 
645  do k = 1, lx
646  do i = 1, lx*lx
647  drst(i,1,k) = dz(k,1) * u(i,1,1,e) &
648  + dz(k,2) * u(i,1,2,e) &
649  + dz(k,3) * u(i,1,3,e) &
650  + dz(k,4) * u(i,1,4,e) &
651  + dz(k,5) * u(i,1,5,e) &
652  + dz(k,6) * u(i,1,6,e) &
653  + dz(k,7) * u(i,1,7,e) &
654  + dz(k,8) * u(i,1,8,e)
655  end do
656  end do
657 
658  do i = 1, lx * lx * lx
659  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * dt(i,1,1,e)
660  end do
661 
662  do i = 1, lx * lx * lx
663  du(i,1,1,e) = du(i,1,1,e) * jacinv(i,1,1,e)
664  end do
665 
666  end do
667 
668  end subroutine cpu_dudxyz_lx8
669 
670  subroutine cpu_dudxyz_lx7(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
671  integer, parameter :: lx = 7
672  integer, intent(in) :: nel
673  real(kind=rp), dimension(lx,lx,lx,nel), intent(inout) :: du
674  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: u, dr, ds, dt
675  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: jacinv
676  real(kind=rp), dimension(lx,lx), intent(in) :: dx, dy, dz
677  real(kind=rp), dimension(lx,lx,lx) :: drst
678  integer :: e, i, j, k
679 
680  do e = 1, nel
681  do j = 1, lx * lx
682  do i = 1, lx
683  du(i,j,1,e) = dx(i,1) * u(1,j,1,e) &
684  + dx(i,2) * u(2,j,1,e) &
685  + dx(i,3) * u(3,j,1,e) &
686  + dx(i,4) * u(4,j,1,e) &
687  + dx(i,5) * u(5,j,1,e) &
688  + dx(i,6) * u(6,j,1,e) &
689  + dx(i,7) * u(7,j,1,e)
690  end do
691  end do
692 
693  do i = 1, lx * lx * lx
694  du(i,1,1,e) = du(i,1,1,e) * dr(i,1,1,e)
695  end do
696 
697  do k = 1, lx
698  do j = 1, lx
699  do i = 1, lx
700  drst(i,j,k) = dy(j,1) * u(i,1,k,e) &
701  + dy(j,2) * u(i,2,k,e) &
702  + dy(j,3) * u(i,3,k,e) &
703  + dy(j,4) * u(i,4,k,e) &
704  + dy(j,5) * u(i,5,k,e) &
705  + dy(j,6) * u(i,6,k,e) &
706  + dy(j,7) * u(i,7,k,e)
707  end do
708  end do
709  end do
710 
711  do i = 1, lx * lx * lx
712  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * ds(i,1,1,e)
713  end do
714 
715  do k = 1, lx
716  do i = 1, lx*lx
717  drst(i,1,k) = dz(k,1) * u(i,1,1,e) &
718  + dz(k,2) * u(i,1,2,e) &
719  + dz(k,3) * u(i,1,3,e) &
720  + dz(k,4) * u(i,1,4,e) &
721  + dz(k,5) * u(i,1,5,e) &
722  + dz(k,6) * u(i,1,6,e) &
723  + dz(k,7) * u(i,1,7,e)
724  end do
725  end do
726 
727  do i = 1, lx * lx * lx
728  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * dt(i,1,1,e)
729  end do
730 
731  do i = 1, lx * lx * lx
732  du(i,1,1,e) = du(i,1,1,e) * jacinv(i,1,1,e)
733  end do
734 
735  end do
736 
737  end subroutine cpu_dudxyz_lx7
738 
739  subroutine cpu_dudxyz_lx6(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
740  integer, parameter :: lx = 6
741  integer, intent(in) :: nel
742  real(kind=rp), dimension(lx,lx,lx,nel), intent(inout) :: du
743  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: u, dr, ds, dt
744  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: jacinv
745  real(kind=rp), dimension(lx,lx), intent(in) :: dx, dy, dz
746  real(kind=rp), dimension(lx,lx,lx) :: drst
747  integer :: e, i, j, k
748 
749  do e = 1, nel
750  do j = 1, lx * lx
751  do i = 1, lx
752  du(i,j,1,e) = dx(i,1) * u(1,j,1,e) &
753  + dx(i,2) * u(2,j,1,e) &
754  + dx(i,3) * u(3,j,1,e) &
755  + dx(i,4) * u(4,j,1,e) &
756  + dx(i,5) * u(5,j,1,e) &
757  + dx(i,6) * u(6,j,1,e)
758  end do
759  end do
760 
761  do i = 1, lx * lx * lx
762  du(i,1,1,e) = du(i,1,1,e) * dr(i,1,1,e)
763  end do
764 
765  do k = 1, lx
766  do j = 1, lx
767  do i = 1, lx
768  drst(i,j,k) = dy(j,1) * u(i,1,k,e) &
769  + dy(j,2) * u(i,2,k,e) &
770  + dy(j,3) * u(i,3,k,e) &
771  + dy(j,4) * u(i,4,k,e) &
772  + dy(j,5) * u(i,5,k,e) &
773  + dy(j,6) * u(i,6,k,e)
774  end do
775  end do
776  end do
777 
778  do i = 1, lx * lx * lx
779  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * ds(i,1,1,e)
780  end do
781 
782  do k = 1, lx
783  do i = 1, lx*lx
784  drst(i,1,k) = dz(k,1) * u(i,1,1,e) &
785  + dz(k,2) * u(i,1,2,e) &
786  + dz(k,3) * u(i,1,3,e) &
787  + dz(k,4) * u(i,1,4,e) &
788  + dz(k,5) * u(i,1,5,e) &
789  + dz(k,6) * u(i,1,6,e)
790  end do
791  end do
792 
793  do i = 1, lx * lx * lx
794  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * dt(i,1,1,e)
795  end do
796 
797  do i = 1, lx * lx * lx
798  du(i,1,1,e) = du(i,1,1,e) * jacinv(i,1,1,e)
799  end do
800 
801  end do
802 
803  end subroutine cpu_dudxyz_lx6
804 
805  subroutine cpu_dudxyz_lx5(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
806  integer, parameter :: lx = 5
807  integer, intent(in) :: nel
808  real(kind=rp), dimension(lx,lx,lx,nel), intent(inout) :: du
809  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: u, dr, ds, dt
810  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: jacinv
811  real(kind=rp), dimension(lx,lx), intent(in) :: dx, dy, dz
812  real(kind=rp), dimension(lx,lx,lx) :: drst
813  integer :: e, i, j, k
814 
815  do e = 1, nel
816  do j = 1, lx * lx
817  do i = 1, lx
818  du(i,j,1,e) = dx(i,1) * u(1,j,1,e) &
819  + dx(i,2) * u(2,j,1,e) &
820  + dx(i,3) * u(3,j,1,e) &
821  + dx(i,4) * u(4,j,1,e) &
822  + dx(i,5) * u(5,j,1,e)
823  end do
824  end do
825 
826  do i = 1, lx * lx * lx
827  du(i,1,1,e) = du(i,1,1,e) * dr(i,1,1,e)
828  end do
829 
830  do k = 1, lx
831  do j = 1, lx
832  do i = 1, lx
833  drst(i,j,k) = dy(j,1) * u(i,1,k,e) &
834  + dy(j,2) * u(i,2,k,e) &
835  + dy(j,3) * u(i,3,k,e) &
836  + dy(j,4) * u(i,4,k,e) &
837  + dy(j,5) * u(i,5,k,e)
838  end do
839  end do
840  end do
841 
842  do i = 1, lx * lx * lx
843  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * ds(i,1,1,e)
844  end do
845 
846  do k = 1, lx
847  do i = 1, lx*lx
848  drst(i,1,k) = dz(k,1) * u(i,1,1,e) &
849  + dz(k,2) * u(i,1,2,e) &
850  + dz(k,3) * u(i,1,3,e) &
851  + dz(k,4) * u(i,1,4,e) &
852  + dz(k,5) * u(i,1,5,e)
853  end do
854  end do
855 
856  do i = 1, lx * lx * lx
857  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * dt(i,1,1,e)
858  end do
859 
860  do i = 1, lx * lx * lx
861  du(i,1,1,e) = du(i,1,1,e) * jacinv(i,1,1,e)
862  end do
863 
864  end do
865 
866  end subroutine cpu_dudxyz_lx5
867 
868  subroutine cpu_dudxyz_lx4(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
869  integer, parameter :: lx = 4
870  integer, intent(in) :: nel
871  real(kind=rp), dimension(lx,lx,lx,nel), intent(inout) :: du
872  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: u, dr, ds, dt
873  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: jacinv
874  real(kind=rp), dimension(lx,lx), intent(in) :: dx, dy, dz
875  real(kind=rp), dimension(lx,lx,lx) :: drst
876  integer :: e, i, j, k
877 
878  do e = 1, nel
879  do j = 1, lx * lx
880  do i = 1, lx
881  du(i,j,1,e) = dx(i,1) * u(1,j,1,e) &
882  + dx(i,2) * u(2,j,1,e) &
883  + dx(i,3) * u(3,j,1,e) &
884  + dx(i,4) * u(4,j,1,e)
885  end do
886  end do
887 
888  do i = 1, lx * lx * lx
889  du(i,1,1,e) = du(i,1,1,e) * dr(i,1,1,e)
890  end do
891 
892  do k = 1, lx
893  do j = 1, lx
894  do i = 1, lx
895  drst(i,j,k) = dy(j,1) * u(i,1,k,e) &
896  + dy(j,2) * u(i,2,k,e) &
897  + dy(j,3) * u(i,3,k,e) &
898  + dy(j,4) * u(i,4,k,e)
899  end do
900  end do
901  end do
902 
903  do i = 1, lx * lx * lx
904  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * ds(i,1,1,e)
905  end do
906 
907  do k = 1, lx
908  do i = 1, lx*lx
909  drst(i,1,k) = dz(k,1) * u(i,1,1,e) &
910  + dz(k,2) * u(i,1,2,e) &
911  + dz(k,3) * u(i,1,3,e) &
912  + dz(k,4) * u(i,1,4,e)
913  end do
914  end do
915 
916  do i = 1, lx * lx * lx
917  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * dt(i,1,1,e)
918  end do
919 
920  do i = 1, lx * lx * lx
921  du(i,1,1,e) = du(i,1,1,e) * jacinv(i,1,1,e)
922  end do
923 
924  end do
925 
926  end subroutine cpu_dudxyz_lx4
927 
928  subroutine cpu_dudxyz_lx3(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
929  integer, parameter :: lx = 3
930  integer, intent(in) :: nel
931  real(kind=rp), dimension(lx,lx,lx,nel), intent(inout) :: du
932  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: u, dr, ds, dt
933  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: jacinv
934  real(kind=rp), dimension(lx,lx), intent(in) :: dx, dy, dz
935  real(kind=rp), dimension(lx,lx,lx) :: drst
936  integer :: e, i, j, k
937 
938  do e = 1, nel
939  do j = 1, lx * lx
940  do i = 1, lx
941  du(i,j,1,e) = dx(i,1) * u(1,j,1,e) &
942  + dx(i,2) * u(2,j,1,e) &
943  + dx(i,3) * u(3,j,1,e)
944  end do
945  end do
946 
947  do i = 1, lx * lx * lx
948  du(i,1,1,e) = du(i,1,1,e) * dr(i,1,1,e)
949  end do
950 
951  do k = 1, lx
952  do j = 1, lx
953  do i = 1, lx
954  drst(i,j,k) = dy(j,1) * u(i,1,k,e) &
955  + dy(j,2) * u(i,2,k,e) &
956  + dy(j,3) * u(i,3,k,e)
957  end do
958  end do
959  end do
960 
961  do i = 1, lx * lx * lx
962  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * ds(i,1,1,e)
963  end do
964 
965  do k = 1, lx
966  do i = 1, lx*lx
967  drst(i,1,k) = dz(k,1) * u(i,1,1,e) &
968  + dz(k,2) * u(i,1,2,e) &
969  + dz(k,3) * u(i,1,3,e)
970  end do
971  end do
972 
973  do i = 1, lx * lx * lx
974  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * dt(i,1,1,e)
975  end do
976 
977  do i = 1, lx * lx * lx
978  du(i,1,1,e) = du(i,1,1,e) * jacinv(i,1,1,e)
979  end do
980 
981  end do
982 
983  end subroutine cpu_dudxyz_lx3
984 
985  subroutine cpu_dudxyz_lx2(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
986  integer, parameter :: lx = 2
987  integer, intent(in) :: nel
988  real(kind=rp), dimension(lx,lx,lx,nel), intent(inout) :: du
989  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: u, dr, ds, dt
990  real(kind=rp), dimension(lx,lx,lx,nel), intent(in) :: jacinv
991  real(kind=rp), dimension(lx,lx), intent(in) :: dx, dy, dz
992  real(kind=rp), dimension(lx,lx,lx) :: drst
993  integer :: e, i, j, k
994 
995  do e = 1, nel
996  do j = 1, lx * lx
997  do i = 1, lx
998  du(i,j,1,e) = dx(i,1) * u(1,j,1,e) &
999  + dx(i,2) * u(2,j,1,e)
1000  end do
1001  end do
1002 
1003  do i = 1, lx * lx * lx
1004  du(i,1,1,e) = du(i,1,1,e) * dr(i,1,1,e)
1005  end do
1006 
1007  do k = 1, lx
1008  do j = 1, lx
1009  do i = 1, lx
1010  drst(i,j,k) = dy(j,1) * u(i,1,k,e) &
1011  + dy(j,2) * u(i,2,k,e)
1012  end do
1013  end do
1014  end do
1015 
1016  do i = 1, lx * lx * lx
1017  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * ds(i,1,1,e)
1018  end do
1019 
1020  do k = 1, lx
1021  do i = 1, lx*lx
1022  drst(i,1,k) = dz(k,1) * u(i,1,1,e) &
1023  + dz(k,2) * u(i,1,2,e)
1024  end do
1025  end do
1026 
1027  do i = 1, lx * lx * lx
1028  du(i,1,1,e) = du(i,1,1,e) + drst(i,1,1) * dt(i,1,1,e)
1029  end do
1030 
1031  do i = 1, lx * lx * lx
1032  du(i,1,1,e) = du(i,1,1,e) * jacinv(i,1,1,e)
1033  end do
1034 
1035  end do
1036 
1037  end subroutine cpu_dudxyz_lx2
1038 
1039 end module cpu_dudxyz
Derivative kernels.
Definition: dudxyz.f90:34
subroutine cpu_dudxyz_lx4(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
Definition: dudxyz.f90:869
subroutine cpu_dudxyz_lx12(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
Definition: dudxyz.f90:281
subroutine cpu_dudxyz_lx13(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
Definition: dudxyz.f90:194
subroutine cpu_dudxyz_lx10(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
Definition: dudxyz.f90:446
subroutine cpu_dudxyz_lx11(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
Definition: dudxyz.f90:365
subroutine cpu_dudxyz_lx14(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
Definition: dudxyz.f90:104
subroutine cpu_dudxyz_lx7(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
Definition: dudxyz.f90:671
subroutine cpu_dudxyz_lx2(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
Definition: dudxyz.f90:986
subroutine cpu_dudxyz_lx9(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
Definition: dudxyz.f90:524
subroutine cpu_dudxyz_lx3(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
Definition: dudxyz.f90:929
subroutine cpu_dudxyz_lx6(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
Definition: dudxyz.f90:740
subroutine cpu_dudxyz_lx(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel, lx)
Definition: dudxyz.f90:41
subroutine cpu_dudxyz_lx8(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
Definition: dudxyz.f90:599
subroutine cpu_dudxyz_lx5(du, u, dr, ds, dt, dx, dy, dz, jacinv, nel)
Definition: dudxyz.f90:806
integer, parameter, public rp
Global precision used in computations.
Definition: num_types.f90:12