Neko  0.8.1
A portable framework for high-order spectral element flow simulations
sx_cfl.f90
Go to the documentation of this file.
1 ! Copyright (c) 2022, 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 sx_cfl
35  use num_types, only : rp
36  implicit none
37  private
38 
43 
44 contains
45 
46  function sx_cfl_lx(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, &
47  drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, &
48  jacinv,nelv, gdim, lx) result(cfl)
49  integer :: nelv, gdim, lx
50  real(kind=rp), intent(in) :: dt
51  real(kind=rp), dimension(lx,lx,lx,nelv) :: u, v, w
52  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdx, dsdx, dtdx
53  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdy, dsdy, dtdy
54  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdz, dsdz, dtdz
55  real(kind=rp), dimension(lx), intent(in) :: dr_inv, ds_inv, dt_inv
56  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: jacinv
57  real(kind=rp) :: cflr, cfls, cflt, cflm
58  real(kind=rp) :: ur, us, ut
59  real(kind=rp) :: cfl
60  integer :: i, j, k, e
61  cfl = 0d0
62 
63  do k = 1, lx
64  do j = 1, lx
65  do i = 1, lx
66  do e = 1, nelv
67  ur = ( u(i,j,k,e)*drdx(i,j,k,e) &
68  + v(i,j,k,e)*drdy(i,j,k,e) &
69  + w(i,j,k,e)*drdz(i,j,k,e) ) * jacinv(i,j,k,e)
70  us = ( u(i,j,k,e)*dsdx(i,j,k,e) &
71  + v(i,j,k,e)*dsdy(i,j,k,e) &
72  + w(i,j,k,e)*dsdz(i,j,k,e) ) * jacinv(i,j,k,e)
73  ut = ( u(i,j,k,e)*dtdx(i,j,k,e) &
74  + v(i,j,k,e)*dtdy(i,j,k,e) &
75  + w(i,j,k,e)*dtdz(i,j,k,e) ) * jacinv(i,j,k,e)
76 
77  cflr = abs(dt*ur*dr_inv(i))
78  cfls = abs(dt*us*ds_inv(j))
79  cflt = abs(dt*ut*dt_inv(k))
80 
81  cflm = cflr + cfls + cflt
82  cfl = max(cfl,cflm)
83  end do
84  end do
85  end do
86  end do
87 
88  end function sx_cfl_lx
89 
90  function sx_cfl_lx14(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, &
91  drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, &
92  jacinv,nelv, gdim) result(cfl)
93  integer, parameter :: lx =14
94  integer :: nelv, gdim
95  real(kind=rp), intent(in) :: dt
96  real(kind=rp), dimension(lx,lx,lx,nelv) :: u, v, w
97  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdx, dsdx, dtdx
98  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdy, dsdy, dtdy
99  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdz, dsdz, dtdz
100  real(kind=rp), dimension(lx), intent(in) :: dr_inv, ds_inv, dt_inv
101  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: jacinv
102  real(kind=rp) :: cflr, cfls, cflt, cflm
103  real(kind=rp) :: ur, us, ut
104  real(kind=rp) :: cfl
105  integer :: i, j, k, e
106  cfl = 0d0
107 
108  do k = 1, lx
109  do j = 1, lx
110  do i = 1, lx
111  do e = 1, nelv
112  ur = ( u(i,j,k,e)*drdx(i,j,k,e) &
113  + v(i,j,k,e)*drdy(i,j,k,e) &
114  + w(i,j,k,e)*drdz(i,j,k,e) ) * jacinv(i,j,k,e)
115  us = ( u(i,j,k,e)*dsdx(i,j,k,e) &
116  + v(i,j,k,e)*dsdy(i,j,k,e) &
117  + w(i,j,k,e)*dsdz(i,j,k,e) ) * jacinv(i,j,k,e)
118  ut = ( u(i,j,k,e)*dtdx(i,j,k,e) &
119  + v(i,j,k,e)*dtdy(i,j,k,e) &
120  + w(i,j,k,e)*dtdz(i,j,k,e) ) * jacinv(i,j,k,e)
121 
122  cflr = abs(dt*ur*dr_inv(i))
123  cfls = abs(dt*us*ds_inv(j))
124  cflt = abs(dt*ut*dt_inv(k))
125 
126  cflm = cflr + cfls + cflt
127  cfl = max(cfl,cflm)
128  end do
129  end do
130  end do
131  end do
132 
133  end function sx_cfl_lx14
134 
135  function sx_cfl_lx13(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, &
136  drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, &
137  jacinv,nelv, gdim) result(cfl)
138  integer, parameter :: lx = 13
139  integer :: nelv, gdim
140  real(kind=rp), intent(in) :: dt
141  real(kind=rp), dimension(lx,lx,lx,nelv) :: u, v, w
142  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdx, dsdx, dtdx
143  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdy, dsdy, dtdy
144  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdz, dsdz, dtdz
145  real(kind=rp), dimension(lx), intent(in) :: dr_inv, ds_inv, dt_inv
146  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: jacinv
147  real(kind=rp) :: cflr, cfls, cflt, cflm
148  real(kind=rp) :: ur, us, ut
149  real(kind=rp) :: cfl
150  integer :: i, j, k, e
151  cfl = 0d0
152 
153  do k = 1, lx
154  do j = 1, lx
155  do i = 1, lx
156  do e = 1, nelv
157  ur = ( u(i,j,k,e)*drdx(i,j,k,e) &
158  + v(i,j,k,e)*drdy(i,j,k,e) &
159  + w(i,j,k,e)*drdz(i,j,k,e) ) * jacinv(i,j,k,e)
160  us = ( u(i,j,k,e)*dsdx(i,j,k,e) &
161  + v(i,j,k,e)*dsdy(i,j,k,e) &
162  + w(i,j,k,e)*dsdz(i,j,k,e) ) * jacinv(i,j,k,e)
163  ut = ( u(i,j,k,e)*dtdx(i,j,k,e) &
164  + v(i,j,k,e)*dtdy(i,j,k,e) &
165  + w(i,j,k,e)*dtdz(i,j,k,e) ) * jacinv(i,j,k,e)
166 
167  cflr = abs(dt*ur*dr_inv(i))
168  cfls = abs(dt*us*ds_inv(j))
169  cflt = abs(dt*ut*dt_inv(k))
170 
171  cflm = cflr + cfls + cflt
172  cfl = max(cfl,cflm)
173  end do
174  end do
175  end do
176  end do
177 
178  end function sx_cfl_lx13
179 
180  function sx_cfl_lx12(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, &
181  drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, &
182  jacinv,nelv, gdim) result(cfl)
183  integer, parameter :: lx = 12
184  integer :: nelv, gdim
185  real(kind=rp), intent(in) :: dt
186  real(kind=rp), dimension(lx,lx,lx,nelv) :: u, v, w
187  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdx, dsdx, dtdx
188  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdy, dsdy, dtdy
189  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdz, dsdz, dtdz
190  real(kind=rp), dimension(lx), intent(in) :: dr_inv, ds_inv, dt_inv
191  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: jacinv
192  real(kind=rp) :: cflr, cfls, cflt, cflm
193  real(kind=rp) :: ur, us, ut
194  real(kind=rp) :: cfl
195  integer :: i, j, k, e
196  cfl = 0d0
197 
198  do k = 1, lx
199  do j = 1, lx
200  do i = 1, lx
201  do e = 1, nelv
202  ur = ( u(i,j,k,e)*drdx(i,j,k,e) &
203  + v(i,j,k,e)*drdy(i,j,k,e) &
204  + w(i,j,k,e)*drdz(i,j,k,e) ) * jacinv(i,j,k,e)
205  us = ( u(i,j,k,e)*dsdx(i,j,k,e) &
206  + v(i,j,k,e)*dsdy(i,j,k,e) &
207  + w(i,j,k,e)*dsdz(i,j,k,e) ) * jacinv(i,j,k,e)
208  ut = ( u(i,j,k,e)*dtdx(i,j,k,e) &
209  + v(i,j,k,e)*dtdy(i,j,k,e) &
210  + w(i,j,k,e)*dtdz(i,j,k,e) ) * jacinv(i,j,k,e)
211 
212  cflr = abs(dt*ur*dr_inv(i))
213  cfls = abs(dt*us*ds_inv(j))
214  cflt = abs(dt*ut*dt_inv(k))
215 
216  cflm = cflr + cfls + cflt
217  cfl = max(cfl,cflm)
218  end do
219  end do
220  end do
221  end do
222 
223  end function sx_cfl_lx12
224 
225  function sx_cfl_lx11(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, &
226  drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, &
227  jacinv,nelv, gdim) result(cfl)
228  integer, parameter :: lx = 11
229  integer :: nelv, gdim
230  real(kind=rp), intent(in) :: dt
231  real(kind=rp), dimension(lx,lx,lx,nelv) :: u, v, w
232  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdx, dsdx, dtdx
233  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdy, dsdy, dtdy
234  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdz, dsdz, dtdz
235  real(kind=rp), dimension(lx), intent(in) :: dr_inv, ds_inv, dt_inv
236  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: jacinv
237  real(kind=rp) :: cflr, cfls, cflt, cflm
238  real(kind=rp) :: ur, us, ut
239  real(kind=rp) :: cfl
240  integer :: i, j, k, e
241  cfl = 0d0
242 
243  do k = 1, lx
244  do j = 1, lx
245  do i = 1, lx
246  do e = 1, nelv
247  ur = ( u(i,j,k,e)*drdx(i,j,k,e) &
248  + v(i,j,k,e)*drdy(i,j,k,e) &
249  + w(i,j,k,e)*drdz(i,j,k,e) ) * jacinv(i,j,k,e)
250  us = ( u(i,j,k,e)*dsdx(i,j,k,e) &
251  + v(i,j,k,e)*dsdy(i,j,k,e) &
252  + w(i,j,k,e)*dsdz(i,j,k,e) ) * jacinv(i,j,k,e)
253  ut = ( u(i,j,k,e)*dtdx(i,j,k,e) &
254  + v(i,j,k,e)*dtdy(i,j,k,e) &
255  + w(i,j,k,e)*dtdz(i,j,k,e) ) * jacinv(i,j,k,e)
256 
257  cflr = abs(dt*ur*dr_inv(i))
258  cfls = abs(dt*us*ds_inv(j))
259  cflt = abs(dt*ut*dt_inv(k))
260 
261  cflm = cflr + cfls + cflt
262  cfl = max(cfl,cflm)
263  end do
264  end do
265  end do
266  end do
267 
268  end function sx_cfl_lx11
269 
270  function sx_cfl_lx10(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, &
271  drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, &
272  jacinv,nelv, gdim) result(cfl)
273  integer, parameter :: lx = 10
274  integer :: nelv, gdim
275  real(kind=rp), intent(in) :: dt
276  real(kind=rp), dimension(lx,lx,lx,nelv) :: u, v, w
277  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdx, dsdx, dtdx
278  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdy, dsdy, dtdy
279  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdz, dsdz, dtdz
280  real(kind=rp), dimension(lx), intent(in) :: dr_inv, ds_inv, dt_inv
281  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: jacinv
282  real(kind=rp) :: cflr, cfls, cflt, cflm
283  real(kind=rp) :: ur, us, ut
284  real(kind=rp) :: cfl
285  integer :: i, j, k, e
286  cfl = 0d0
287 
288  do k = 1, lx
289  do j = 1, lx
290  do i = 1, lx
291  do e = 1, nelv
292  ur = ( u(i,j,k,e)*drdx(i,j,k,e) &
293  + v(i,j,k,e)*drdy(i,j,k,e) &
294  + w(i,j,k,e)*drdz(i,j,k,e) ) * jacinv(i,j,k,e)
295  us = ( u(i,j,k,e)*dsdx(i,j,k,e) &
296  + v(i,j,k,e)*dsdy(i,j,k,e) &
297  + w(i,j,k,e)*dsdz(i,j,k,e) ) * jacinv(i,j,k,e)
298  ut = ( u(i,j,k,e)*dtdx(i,j,k,e) &
299  + v(i,j,k,e)*dtdy(i,j,k,e) &
300  + w(i,j,k,e)*dtdz(i,j,k,e) ) * jacinv(i,j,k,e)
301 
302  cflr = abs(dt*ur*dr_inv(i))
303  cfls = abs(dt*us*ds_inv(j))
304  cflt = abs(dt*ut*dt_inv(k))
305 
306  cflm = cflr + cfls + cflt
307  cfl = max(cfl,cflm)
308  end do
309  end do
310  end do
311  end do
312 
313  end function sx_cfl_lx10
314 
315  function sx_cfl_lx9(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, &
316  drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, &
317  jacinv,nelv, gdim) result(cfl)
318  integer, parameter :: lx = 9
319  integer :: nelv, gdim
320  real(kind=rp), intent(in) :: dt
321  real(kind=rp), dimension(lx,lx,lx,nelv) :: u, v, w
322  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdx, dsdx, dtdx
323  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdy, dsdy, dtdy
324  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdz, dsdz, dtdz
325  real(kind=rp), dimension(lx), intent(in) :: dr_inv, ds_inv, dt_inv
326  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: jacinv
327  real(kind=rp) :: cflr, cfls, cflt, cflm
328  real(kind=rp) :: ur, us, ut
329  real(kind=rp) :: cfl
330  integer :: i, j, k, e
331  cfl = 0d0
332 
333  do k = 1, lx
334  do j = 1, lx
335  do i = 1, lx
336  do e = 1, nelv
337  ur = ( u(i,j,k,e)*drdx(i,j,k,e) &
338  + v(i,j,k,e)*drdy(i,j,k,e) &
339  + w(i,j,k,e)*drdz(i,j,k,e) ) * jacinv(i,j,k,e)
340  us = ( u(i,j,k,e)*dsdx(i,j,k,e) &
341  + v(i,j,k,e)*dsdy(i,j,k,e) &
342  + w(i,j,k,e)*dsdz(i,j,k,e) ) * jacinv(i,j,k,e)
343  ut = ( u(i,j,k,e)*dtdx(i,j,k,e) &
344  + v(i,j,k,e)*dtdy(i,j,k,e) &
345  + w(i,j,k,e)*dtdz(i,j,k,e) ) * jacinv(i,j,k,e)
346 
347  cflr = abs(dt*ur*dr_inv(i))
348  cfls = abs(dt*us*ds_inv(j))
349  cflt = abs(dt*ut*dt_inv(k))
350 
351  cflm = cflr + cfls + cflt
352  cfl = max(cfl,cflm)
353  end do
354  end do
355  end do
356  end do
357 
358  end function sx_cfl_lx9
359 
360  function sx_cfl_lx8(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, &
361  drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, &
362  jacinv,nelv, gdim) result(cfl)
363  integer, parameter :: lx = 8
364  integer :: nelv, gdim
365  real(kind=rp), intent(in) :: dt
366  real(kind=rp), dimension(lx,lx,lx,nelv) :: u, v, w
367  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdx, dsdx, dtdx
368  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdy, dsdy, dtdy
369  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdz, dsdz, dtdz
370  real(kind=rp), dimension(lx), intent(in) :: dr_inv, ds_inv, dt_inv
371  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: jacinv
372  real(kind=rp) :: cflr, cfls, cflt, cflm
373  real(kind=rp) :: ur, us, ut
374  real(kind=rp) :: cfl
375  integer :: i, j, k, e
376  cfl = 0d0
377 
378  do k = 1, lx
379  do j = 1, lx
380  do i = 1, lx
381  do e = 1, nelv
382  ur = ( u(i,j,k,e)*drdx(i,j,k,e) &
383  + v(i,j,k,e)*drdy(i,j,k,e) &
384  + w(i,j,k,e)*drdz(i,j,k,e) ) * jacinv(i,j,k,e)
385  us = ( u(i,j,k,e)*dsdx(i,j,k,e) &
386  + v(i,j,k,e)*dsdy(i,j,k,e) &
387  + w(i,j,k,e)*dsdz(i,j,k,e) ) * jacinv(i,j,k,e)
388  ut = ( u(i,j,k,e)*dtdx(i,j,k,e) &
389  + v(i,j,k,e)*dtdy(i,j,k,e) &
390  + w(i,j,k,e)*dtdz(i,j,k,e) ) * jacinv(i,j,k,e)
391 
392  cflr = abs(dt*ur*dr_inv(i))
393  cfls = abs(dt*us*ds_inv(j))
394  cflt = abs(dt*ut*dt_inv(k))
395 
396  cflm = cflr + cfls + cflt
397  cfl = max(cfl,cflm)
398  end do
399  end do
400  end do
401  end do
402 
403  end function sx_cfl_lx8
404 
405  function sx_cfl_lx7(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, &
406  drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, &
407  jacinv,nelv, gdim) result(cfl)
408  integer, parameter :: lx = 7
409  integer :: nelv, gdim
410  real(kind=rp), intent(in) :: dt
411  real(kind=rp), dimension(lx,lx,lx,nelv) :: u, v, w
412  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdx, dsdx, dtdx
413  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdy, dsdy, dtdy
414  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdz, dsdz, dtdz
415  real(kind=rp), dimension(lx), intent(in) :: dr_inv, ds_inv, dt_inv
416  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: jacinv
417  real(kind=rp) :: cflr, cfls, cflt, cflm
418  real(kind=rp) :: ur, us, ut
419  real(kind=rp) :: cfl
420  integer :: i, j, k, e
421  cfl = 0d0
422 
423  do k = 1, lx
424  do j = 1, lx
425  do i = 1, lx
426  do e = 1, nelv
427  ur = ( u(i,j,k,e)*drdx(i,j,k,e) &
428  + v(i,j,k,e)*drdy(i,j,k,e) &
429  + w(i,j,k,e)*drdz(i,j,k,e) ) * jacinv(i,j,k,e)
430  us = ( u(i,j,k,e)*dsdx(i,j,k,e) &
431  + v(i,j,k,e)*dsdy(i,j,k,e) &
432  + w(i,j,k,e)*dsdz(i,j,k,e) ) * jacinv(i,j,k,e)
433  ut = ( u(i,j,k,e)*dtdx(i,j,k,e) &
434  + v(i,j,k,e)*dtdy(i,j,k,e) &
435  + w(i,j,k,e)*dtdz(i,j,k,e) ) * jacinv(i,j,k,e)
436 
437  cflr = abs(dt*ur*dr_inv(i))
438  cfls = abs(dt*us*ds_inv(j))
439  cflt = abs(dt*ut*dt_inv(k))
440 
441  cflm = cflr + cfls + cflt
442  cfl = max(cfl,cflm)
443  end do
444  end do
445  end do
446  end do
447 
448  end function sx_cfl_lx7
449 
450  function sx_cfl_lx6(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, &
451  drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, &
452  jacinv,nelv, gdim) result(cfl)
453  integer, parameter :: lx = 6
454  integer :: nelv, gdim
455  real(kind=rp), intent(in) :: dt
456  real(kind=rp), dimension(lx,lx,lx,nelv) :: u, v, w
457  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdx, dsdx, dtdx
458  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdy, dsdy, dtdy
459  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdz, dsdz, dtdz
460  real(kind=rp), dimension(lx), intent(in) :: dr_inv, ds_inv, dt_inv
461  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: jacinv
462  real(kind=rp) :: cflr, cfls, cflt, cflm
463  real(kind=rp) :: ur, us, ut
464  real(kind=rp) :: cfl
465  integer :: i, j, k, e
466  cfl = 0d0
467 
468  do k = 1, lx
469  do j = 1, lx
470  do i = 1, lx
471  do e = 1, nelv
472  ur = ( u(i,j,k,e)*drdx(i,j,k,e) &
473  + v(i,j,k,e)*drdy(i,j,k,e) &
474  + w(i,j,k,e)*drdz(i,j,k,e) ) * jacinv(i,j,k,e)
475  us = ( u(i,j,k,e)*dsdx(i,j,k,e) &
476  + v(i,j,k,e)*dsdy(i,j,k,e) &
477  + w(i,j,k,e)*dsdz(i,j,k,e) ) * jacinv(i,j,k,e)
478  ut = ( u(i,j,k,e)*dtdx(i,j,k,e) &
479  + v(i,j,k,e)*dtdy(i,j,k,e) &
480  + w(i,j,k,e)*dtdz(i,j,k,e) ) * jacinv(i,j,k,e)
481 
482  cflr = abs(dt*ur*dr_inv(i))
483  cfls = abs(dt*us*ds_inv(j))
484  cflt = abs(dt*ut*dt_inv(k))
485 
486  cflm = cflr + cfls + cflt
487  cfl = max(cfl,cflm)
488  end do
489  end do
490  end do
491  end do
492 
493  end function sx_cfl_lx6
494 
495  function sx_cfl_lx5(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, &
496  drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, &
497  jacinv,nelv, gdim) result(cfl)
498  integer, parameter :: lx = 5
499  integer :: nelv, gdim
500  real(kind=rp), intent(in) :: dt
501  real(kind=rp), dimension(lx,lx,lx,nelv) :: u, v, w
502  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdx, dsdx, dtdx
503  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdy, dsdy, dtdy
504  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdz, dsdz, dtdz
505  real(kind=rp), dimension(lx), intent(in) :: dr_inv, ds_inv, dt_inv
506  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: jacinv
507  real(kind=rp) :: cflr, cfls, cflt, cflm
508  real(kind=rp) :: ur, us, ut
509  real(kind=rp) :: cfl
510  integer :: i, j, k, e
511  cfl = 0d0
512 
513  do k = 1, lx
514  do j = 1, lx
515  do i = 1, lx
516  do e = 1, nelv
517  ur = ( u(i,j,k,e)*drdx(i,j,k,e) &
518  + v(i,j,k,e)*drdy(i,j,k,e) &
519  + w(i,j,k,e)*drdz(i,j,k,e) ) * jacinv(i,j,k,e)
520  us = ( u(i,j,k,e)*dsdx(i,j,k,e) &
521  + v(i,j,k,e)*dsdy(i,j,k,e) &
522  + w(i,j,k,e)*dsdz(i,j,k,e) ) * jacinv(i,j,k,e)
523  ut = ( u(i,j,k,e)*dtdx(i,j,k,e) &
524  + v(i,j,k,e)*dtdy(i,j,k,e) &
525  + w(i,j,k,e)*dtdz(i,j,k,e) ) * jacinv(i,j,k,e)
526 
527  cflr = abs(dt*ur*dr_inv(i))
528  cfls = abs(dt*us*ds_inv(j))
529  cflt = abs(dt*ut*dt_inv(k))
530 
531  cflm = cflr + cfls + cflt
532  cfl = max(cfl,cflm)
533  end do
534  end do
535  end do
536  end do
537 
538  end function sx_cfl_lx5
539 
540  function sx_cfl_lx4(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, &
541  drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, &
542  jacinv,nelv, gdim) result(cfl)
543  integer, parameter :: lx = 4
544  integer :: nelv, gdim
545  real(kind=rp), intent(in) :: dt
546  real(kind=rp), dimension(lx,lx,lx,nelv) :: u, v, w
547  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdx, dsdx, dtdx
548  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdy, dsdy, dtdy
549  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdz, dsdz, dtdz
550  real(kind=rp), dimension(lx), intent(in) :: dr_inv, ds_inv, dt_inv
551  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: jacinv
552  real(kind=rp) :: cflr, cfls, cflt, cflm
553  real(kind=rp) :: ur, us, ut
554  real(kind=rp) :: cfl
555  integer :: i, j, k, e
556  cfl = 0d0
557 
558  do k = 1, lx
559  do j = 1, lx
560  do i = 1, lx
561  do e = 1, nelv
562  ur = ( u(i,j,k,e)*drdx(i,j,k,e) &
563  + v(i,j,k,e)*drdy(i,j,k,e) &
564  + w(i,j,k,e)*drdz(i,j,k,e) ) * jacinv(i,j,k,e)
565  us = ( u(i,j,k,e)*dsdx(i,j,k,e) &
566  + v(i,j,k,e)*dsdy(i,j,k,e) &
567  + w(i,j,k,e)*dsdz(i,j,k,e) ) * jacinv(i,j,k,e)
568  ut = ( u(i,j,k,e)*dtdx(i,j,k,e) &
569  + v(i,j,k,e)*dtdy(i,j,k,e) &
570  + w(i,j,k,e)*dtdz(i,j,k,e) ) * jacinv(i,j,k,e)
571 
572  cflr = abs(dt*ur*dr_inv(i))
573  cfls = abs(dt*us*ds_inv(j))
574  cflt = abs(dt*ut*dt_inv(k))
575 
576  cflm = cflr + cfls + cflt
577  cfl = max(cfl,cflm)
578  end do
579  end do
580  end do
581  end do
582 
583  end function sx_cfl_lx4
584 
585  function sx_cfl_lx3(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, &
586  drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, &
587  jacinv,nelv, gdim) result(cfl)
588  integer, parameter :: lx = 3
589  integer :: nelv, gdim
590  real(kind=rp), intent(in) :: dt
591  real(kind=rp), dimension(lx,lx,lx,nelv) :: u, v, w
592  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdx, dsdx, dtdx
593  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdy, dsdy, dtdy
594  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdz, dsdz, dtdz
595  real(kind=rp), dimension(lx), intent(in) :: dr_inv, ds_inv, dt_inv
596  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: jacinv
597  real(kind=rp) :: cflr, cfls, cflt, cflm
598  real(kind=rp) :: ur, us, ut
599  real(kind=rp) :: cfl
600  integer :: i, j, k, e
601  cfl = 0d0
602 
603  do k = 1, lx
604  do j = 1, lx
605  do i = 1, lx
606  do e = 1, nelv
607  ur = ( u(i,j,k,e)*drdx(i,j,k,e) &
608  + v(i,j,k,e)*drdy(i,j,k,e) &
609  + w(i,j,k,e)*drdz(i,j,k,e) ) * jacinv(i,j,k,e)
610  us = ( u(i,j,k,e)*dsdx(i,j,k,e) &
611  + v(i,j,k,e)*dsdy(i,j,k,e) &
612  + w(i,j,k,e)*dsdz(i,j,k,e) ) * jacinv(i,j,k,e)
613  ut = ( u(i,j,k,e)*dtdx(i,j,k,e) &
614  + v(i,j,k,e)*dtdy(i,j,k,e) &
615  + w(i,j,k,e)*dtdz(i,j,k,e) ) * jacinv(i,j,k,e)
616 
617  cflr = abs(dt*ur*dr_inv(i))
618  cfls = abs(dt*us*ds_inv(j))
619  cflt = abs(dt*ut*dt_inv(k))
620 
621  cflm = cflr + cfls + cflt
622  cfl = max(cfl,cflm)
623  end do
624  end do
625  end do
626  end do
627 
628  end function sx_cfl_lx3
629 
630  function sx_cfl_lx2(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, &
631  drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, &
632  jacinv,nelv, gdim) result(cfl)
633  integer, parameter :: lx = 2
634  integer :: nelv, gdim
635  real(kind=rp), intent(in) :: dt
636  real(kind=rp), dimension(lx,lx,lx,nelv) :: u, v, w
637  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdx, dsdx, dtdx
638  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdy, dsdy, dtdy
639  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: drdz, dsdz, dtdz
640  real(kind=rp), dimension(lx), intent(in) :: dr_inv, ds_inv, dt_inv
641  real(kind=rp), dimension(lx,lx,lx,nelv), intent(in) :: jacinv
642  real(kind=rp) :: cflr, cfls, cflt, cflm
643  real(kind=rp) :: ur, us, ut
644  real(kind=rp) :: cfl
645  integer :: i, j, k, e
646  cfl = 0d0
647 
648  do k = 1, lx
649  do j = 1, lx
650  do i = 1, lx
651  do e = 1, nelv
652  ur = ( u(i,j,k,e)*drdx(i,j,k,e) &
653  + v(i,j,k,e)*drdy(i,j,k,e) &
654  + w(i,j,k,e)*drdz(i,j,k,e) ) * jacinv(i,j,k,e)
655  us = ( u(i,j,k,e)*dsdx(i,j,k,e) &
656  + v(i,j,k,e)*dsdy(i,j,k,e) &
657  + w(i,j,k,e)*dsdz(i,j,k,e) ) * jacinv(i,j,k,e)
658  ut = ( u(i,j,k,e)*dtdx(i,j,k,e) &
659  + v(i,j,k,e)*dtdy(i,j,k,e) &
660  + w(i,j,k,e)*dtdz(i,j,k,e) ) * jacinv(i,j,k,e)
661 
662  cflr = abs(dt*ur*dr_inv(i))
663  cfls = abs(dt*us*ds_inv(j))
664  cflt = abs(dt*ut*dt_inv(k))
665 
666  cflm = cflr + cfls + cflt
667  cfl = max(cfl,cflm)
668  end do
669  end do
670  end do
671  end do
672 
673  end function sx_cfl_lx2
674 
675 end module sx_cfl
integer, parameter, public rp
Global precision used in computations.
Definition: num_types.f90:12
CFL SX-Aurora kernels.
Definition: sx_cfl.f90:34
real(kind=rp) function, public sx_cfl_lx10(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, jacinv, nelv, gdim)
Definition: sx_cfl.f90:273
real(kind=rp) function, public sx_cfl_lx14(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, jacinv, nelv, gdim)
Definition: sx_cfl.f90:93
real(kind=rp) function, public sx_cfl_lx13(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, jacinv, nelv, gdim)
Definition: sx_cfl.f90:138
real(kind=rp) function, public sx_cfl_lx8(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, jacinv, nelv, gdim)
Definition: sx_cfl.f90:363
real(kind=rp) function, public sx_cfl_lx2(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, jacinv, nelv, gdim)
Definition: sx_cfl.f90:633
real(kind=rp) function, public sx_cfl_lx12(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, jacinv, nelv, gdim)
Definition: sx_cfl.f90:183
real(kind=rp) function, public sx_cfl_lx(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, jacinv, nelv, gdim, lx)
Definition: sx_cfl.f90:49
real(kind=rp) function, public sx_cfl_lx7(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, jacinv, nelv, gdim)
Definition: sx_cfl.f90:408
real(kind=rp) function, public sx_cfl_lx5(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, jacinv, nelv, gdim)
Definition: sx_cfl.f90:498
real(kind=rp) function, public sx_cfl_lx6(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, jacinv, nelv, gdim)
Definition: sx_cfl.f90:453
real(kind=rp) function, public sx_cfl_lx4(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, jacinv, nelv, gdim)
Definition: sx_cfl.f90:543
real(kind=rp) function, public sx_cfl_lx3(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, jacinv, nelv, gdim)
Definition: sx_cfl.f90:588
real(kind=rp) function, public sx_cfl_lx11(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, jacinv, nelv, gdim)
Definition: sx_cfl.f90:228
real(kind=rp) function, public sx_cfl_lx9(dt, u, v, w, drdx, dsdx, dtdx, drdy, dsdy, dtdy, drdz, dsdz, dtdz, dr_inv, ds_inv, dt_inv, jacinv, nelv, gdim)
Definition: sx_cfl.f90:318
#define max(a, b)
Definition: tensor.cu:40