168 type(
coef_t),
target,
optional :: coef
169 type(
field_t),
target,
intent(in) :: s, u, v, w, p
170 character(*),
intent(in),
optional :: set
181 if (
present(set))
then
182 this%stat_set = trim(set)
183 if (this%stat_set .eq.
'basic')
then
187 this%stat_set =
'full'
192 call this%stats_work%init(this%u%dof,
'stats')
193 call this%stats_ss%init(this%u%dof,
'ss temp')
196 call this%s_mean%init(this%s)
198 call this%us%init(this%stats_work,
'us')
199 call this%vs%init(this%stats_work,
'vs')
200 call this%ws%init(this%stats_work,
'ws')
202 call this%ss%init(this%stats_ss,
'ss')
204 if (this%n_stats .eq. 42)
then
206 call this%stats_uiuj%init(this%u%dof,
'uiuj temp')
209 call this%dsdx%init(this%u%dof,
'dsdx')
210 call this%dsdy%init(this%u%dof,
'dsdy')
211 call this%dsdz%init(this%u%dof,
'dsdz')
213 call this%dudx%init(this%u%dof,
'dudx')
214 call this%dudy%init(this%u%dof,
'dudy')
215 call this%dudz%init(this%u%dof,
'dudz')
216 call this%dvdx%init(this%u%dof,
'dvdx')
217 call this%dvdy%init(this%u%dof,
'dvdy')
218 call this%dvdz%init(this%u%dof,
'dvdz')
219 call this%dwdx%init(this%u%dof,
'dwdx')
220 call this%dwdy%init(this%u%dof,
'dwdy')
221 call this%dwdz%init(this%u%dof,
'dwdz')
224 call this%sss%init(this%stats_work,
'sss')
225 call this%ssss%init(this%stats_work,
'ssss')
227 call this%uss%init(this%stats_work,
'uss')
228 call this%vss%init(this%stats_work,
'vss')
229 call this%wss%init(this%stats_work,
'wss')
231 call this%uus%init(this%stats_work,
'uus')
232 call this%vvs%init(this%stats_work,
'vvs')
233 call this%wws%init(this%stats_work,
'wws')
234 call this%uvs%init(this%stats_work,
'uvs')
235 call this%uws%init(this%stats_work,
'uws')
236 call this%vws%init(this%stats_work,
'vws')
238 call this%ps%init(this%stats_work,
'ps')
240 call this%pdsdx%init(this%stats_work,
'pdsdx')
241 call this%pdsdy%init(this%stats_work,
'pdsdy')
242 call this%pdsdz%init(this%stats_work,
'pdsdz')
244 call this%udsdx%init(this%stats_work,
'udsdx')
245 call this%udsdy%init(this%stats_work,
'udsdy')
246 call this%udsdz%init(this%stats_work,
'udsdz')
247 call this%vdsdx%init(this%stats_work,
'vdsdx')
248 call this%vdsdy%init(this%stats_work,
'vdsdy')
249 call this%vdsdz%init(this%stats_work,
'vdsdz')
250 call this%wdsdx%init(this%stats_work,
'wdsdx')
251 call this%wdsdy%init(this%stats_work,
'wdsdy')
252 call this%wdsdz%init(this%stats_work,
'wdsdz')
254 call this%sdudx%init(this%stats_work,
'sdudx')
255 call this%sdudy%init(this%stats_work,
'sdudy')
256 call this%sdudz%init(this%stats_work,
'sdudz')
257 call this%sdvdx%init(this%stats_work,
'sdvdx')
258 call this%sdvdy%init(this%stats_work,
'sdvdy')
259 call this%sdvdz%init(this%stats_work,
'sdvdz')
260 call this%sdwdx%init(this%stats_work,
'sdwdx')
261 call this%sdwdy%init(this%stats_work,
'sdwdy')
262 call this%sdwdz%init(this%stats_work,
'sdwdz')
264 call this%ess%init(this%stats_work,
'ess')
265 call this%eus%init(this%stats_work,
'eus')
266 call this%evs%init(this%stats_work,
'evs')
267 call this%ews%init(this%stats_work,
'ews')
270 allocate(this%stat_fields%items(this%n_stats))
272 call this%stat_fields%assign_to_field(1, this%s_mean%mf)
274 call this%stat_fields%assign_to_field(2, this%us%mf)
275 call this%stat_fields%assign_to_field(3, this%vs%mf)
276 call this%stat_fields%assign_to_field(4, this%ws%mf)
278 call this%stat_fields%assign_to_field(5, this%ss%mf)
280 if (this%n_stats .eq. 42)
then
281 call this%stat_fields%assign_to_field(6, this%sss%mf)
282 call this%stat_fields%assign_to_field(7, this%ssss%mf)
284 call this%stat_fields%assign_to_field(8, this%uss%mf)
285 call this%stat_fields%assign_to_field(9, this%vss%mf)
286 call this%stat_fields%assign_to_field(10, this%wss%mf)
287 call this%stat_fields%assign_to_field(11, this%uus%mf)
288 call this%stat_fields%assign_to_field(12, this%vvs%mf)
289 call this%stat_fields%assign_to_field(13, this%wws%mf)
290 call this%stat_fields%assign_to_field(14, this%uvs%mf)
291 call this%stat_fields%assign_to_field(15, this%uws%mf)
292 call this%stat_fields%assign_to_field(16, this%vws%mf)
294 call this%stat_fields%assign_to_field(17, this%ps%mf)
296 call this%stat_fields%assign_to_field(18, this%pdsdx%mf)
297 call this%stat_fields%assign_to_field(19, this%pdsdy%mf)
298 call this%stat_fields%assign_to_field(20, this%pdsdz%mf)
300 call this%stat_fields%assign_to_field(21, this%udsdx%mf)
301 call this%stat_fields%assign_to_field(22, this%udsdy%mf)
302 call this%stat_fields%assign_to_field(23, this%udsdz%mf)
303 call this%stat_fields%assign_to_field(24, this%vdsdx%mf)
304 call this%stat_fields%assign_to_field(25, this%vdsdy%mf)
305 call this%stat_fields%assign_to_field(26, this%vdsdz%mf)
306 call this%stat_fields%assign_to_field(27, this%wdsdx%mf)
307 call this%stat_fields%assign_to_field(28, this%wdsdy%mf)
308 call this%stat_fields%assign_to_field(29, this%wdsdz%mf)
310 call this%stat_fields%assign_to_field(30, this%sdudx%mf)
311 call this%stat_fields%assign_to_field(31, this%sdudy%mf)
312 call this%stat_fields%assign_to_field(32, this%sdudz%mf)
313 call this%stat_fields%assign_to_field(33, this%sdvdx%mf)
314 call this%stat_fields%assign_to_field(34, this%sdvdy%mf)
315 call this%stat_fields%assign_to_field(35, this%sdvdz%mf)
316 call this%stat_fields%assign_to_field(36, this%sdwdx%mf)
317 call this%stat_fields%assign_to_field(37, this%sdwdy%mf)
318 call this%stat_fields%assign_to_field(38, this%sdwdz%mf)
320 call this%stat_fields%assign_to_field(39, this%ess%mf)
321 call this%stat_fields%assign_to_field(40, this%eus%mf)
322 call this%stat_fields%assign_to_field(41, this%evs%mf)
323 call this%stat_fields%assign_to_field(42, this%ews%mf)
332 real(kind=
rp),
intent(in) :: k
335 associate(stats_work => this%stats_work, stats_ss => this%stats_ss, &
336 stats_uiuj => this%stats_uiuj)
337 n = stats_work%dof%size()
342 call this%s_mean%update(k)
344 call device_col3(stats_work%x_d, this%u%x_d, this%s%x_d, n)
345 call this%us%update(k)
346 call device_col3(stats_work%x_d, this%v%x_d, this%s%x_d, n)
347 call this%vs%update(k)
348 call device_col3(stats_work%x_d, this%w%x_d, this%s%x_d, n)
349 call this%ws%update(k)
351 call device_col3(stats_ss%x_d, this%s%x_d, this%s%x_d, n)
352 call this%ss%update(k)
354 if (this%n_stats .eq. 5)
return
356 call device_col3(stats_work%x_d, this%stats_ss%x_d, this%s%x_d, n)
357 call this%sss%update(k)
358 call device_col3(stats_work%x_d, this%stats_ss%x_d, this%stats_ss%x_d, n)
359 call this%ssss%update(k)
361 call device_col3(stats_work%x_d, this%u%x_d, this%stats_ss%x_d, n)
362 call this%uss%update(k)
363 call device_col3(stats_work%x_d, this%v%x_d, this%stats_ss%x_d, n)
364 call this%vss%update(k)
365 call device_col3(stats_work%x_d, this%w%x_d, this%stats_ss%x_d, n)
366 call this%wss%update(k)
368 call device_col3(stats_uiuj%x_d, this%u%x_d, this%u%x_d, n)
369 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
370 call this%uus%update(k)
371 call device_col3(stats_uiuj%x_d, this%v%x_d, this%v%x_d, n)
372 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
373 call this%vvs%update(k)
374 call device_col3(stats_uiuj%x_d, this%w%x_d, this%w%x_d, n)
375 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
376 call this%wws%update(k)
377 call device_col3(stats_uiuj%x_d, this%u%x_d, this%v%x_d, n)
378 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
379 call this%uvs%update(k)
380 call device_col3(stats_uiuj%x_d, this%u%x_d, this%w%x_d, n)
381 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
382 call this%uws%update(k)
383 call device_col3(stats_uiuj%x_d, this%v%x_d, this%w%x_d, n)
384 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
385 call this%vws%update(k)
387 call device_col3(stats_work%x_d, this%p%x_d, this%s%x_d, n)
388 call this%ps%update(k)
392 call this%s_mean%update(k)
394 call col3(stats_work%x, this%u%x, this%s%x, n)
395 call this%us%update(k)
396 call col3(stats_work%x, this%v%x, this%s%x, n)
397 call this%vs%update(k)
398 call col3(stats_work%x, this%w%x, this%s%x, n)
399 call this%ws%update(k)
401 call col3(stats_ss%x, this%s%x, this%s%x, n)
402 call this%ss%update(k)
404 if (this%n_stats .eq. 5)
return
406 call col3(stats_work%x, this%stats_ss%x, this%s%x, n)
407 call this%sss%update(k)
408 call col3(stats_work%x, this%stats_ss%x, this%stats_ss%x, n)
409 call this%ssss%update(k)
411 call col3(stats_work%x, this%u%x, this%stats_ss%x, n)
412 call this%uss%update(k)
413 call col3(stats_work%x, this%v%x, this%stats_ss%x, n)
414 call this%vss%update(k)
415 call col3(stats_work%x, this%w%x, this%stats_ss%x, n)
416 call this%wss%update(k)
418 call col3(stats_uiuj%x, this%u%x, this%u%x, n)
419 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
420 call this%uus%update(k)
421 call col3(stats_uiuj%x, this%v%x, this%v%x, n)
422 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
423 call this%vvs%update(k)
424 call col3(stats_uiuj%x, this%w%x, this%w%x, n)
425 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
426 call this%wws%update(k)
427 call col3(stats_uiuj%x, this%u%x, this%v%x, n)
428 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
429 call this%uvs%update(k)
430 call col3(stats_uiuj%x, this%u%x, this%w%x, n)
431 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
432 call this%uws%update(k)
433 call col3(stats_uiuj%x, this%v%x, this%w%x, n)
434 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
435 call this%vws%update(k)
437 call col3(stats_work%x, this%p%x, this%s%x, n)
438 call this%ps%update(k)
442 call opgrad(this%dsdx%x, this%dsdy%x, this%dsdz%x, this%s%x, this%coef)
443 call opgrad(this%dudx%x, this%dudy%x, this%dudz%x, this%u%x, this%coef)
444 call opgrad(this%dvdx%x, this%dvdy%x, this%dvdz%x, this%v%x, this%coef)
445 call opgrad(this%dwdx%x, this%dwdy%x, this%dwdz%x, this%w%x, this%coef)
448 call device_col3(stats_work%x_d, this%dsdx%x_d, this%p%x_d, n)
449 call this%pdsdx%update(k)
450 call device_col3(stats_work%x_d, this%dsdy%x_d, this%p%x_d, n)
451 call this%pdsdy%update(k)
452 call device_col3(stats_work%x_d, this%dsdz%x_d, this%p%x_d, n)
453 call this%pdsdz%update(k)
455 call device_col3(stats_work%x_d, this%dsdx%x_d, this%u%x_d, n)
456 call this%udsdx%update(k)
457 call device_col3(stats_work%x_d, this%dsdy%x_d, this%u%x_d, n)
458 call this%udsdy%update(k)
459 call device_col3(stats_work%x_d, this%dsdz%x_d, this%u%x_d, n)
460 call this%udsdz%update(k)
462 call device_col3(stats_work%x_d, this%dsdx%x_d, this%v%x_d, n)
463 call this%vdsdx%update(k)
464 call device_col3(stats_work%x_d, this%dsdy%x_d, this%v%x_d, n)
465 call this%vdsdy%update(k)
466 call device_col3(stats_work%x_d, this%dsdz%x_d, this%v%x_d, n)
467 call this%vdsdz%update(k)
469 call device_col3(stats_work%x_d, this%dsdx%x_d, this%w%x_d, n)
470 call this%wdsdx%update(k)
471 call device_col3(stats_work%x_d, this%dsdy%x_d, this%w%x_d, n)
472 call this%wdsdy%update(k)
473 call device_col3(stats_work%x_d, this%dsdz%x_d, this%w%x_d, n)
474 call this%wdsdz%update(k)
476 call device_col3(stats_work%x_d, this%dudx%x_d, this%s%x_d, n)
477 call this%sdudx%update(k)
478 call device_col3(stats_work%x_d, this%dudy%x_d, this%s%x_d, n)
479 call this%sdudy%update(k)
480 call device_col3(stats_work%x_d, this%dudz%x_d, this%s%x_d, n)
481 call this%sdudz%update(k)
483 call device_col3(stats_work%x_d, this%dvdx%x_d, this%s%x_d, n)
484 call this%sdvdx%update(k)
485 call device_col3(stats_work%x_d, this%dvdy%x_d, this%s%x_d, n)
486 call this%sdvdy%update(k)
487 call device_col3(stats_work%x_d, this%dvdz%x_d, this%s%x_d, n)
488 call this%sdvdz%update(k)
490 call device_col3(stats_work%x_d, this%dwdx%x_d, this%s%x_d, n)
491 call this%sdwdx%update(k)
492 call device_col3(stats_work%x_d, this%dwdy%x_d, this%s%x_d, n)
493 call this%sdwdy%update(k)
494 call device_col3(stats_work%x_d, this%dwdz%x_d, this%s%x_d, n)
495 call this%sdwdz%update(k)
503 call this%ess%update(k)
511 call this%eus%update(k)
519 call this%evs%update(k)
527 call this%ews%update(k)
531 call col3(stats_work%x, this%dsdx%x, this%p%x, n)
532 call this%pdsdx%update(k)
533 call col3(stats_work%x, this%dsdy%x, this%p%x, n)
534 call this%pdsdy%update(k)
535 call col3(stats_work%x, this%dsdz%x, this%p%x, n)
536 call this%pdsdz%update(k)
538 call col3(stats_work%x, this%dsdx%x, this%u%x, n)
539 call this%udsdx%update(k)
540 call col3(stats_work%x, this%dsdy%x, this%u%x, n)
541 call this%udsdy%update(k)
542 call col3(stats_work%x, this%dsdz%x, this%u%x, n)
543 call this%udsdz%update(k)
545 call col3(stats_work%x, this%dsdx%x, this%v%x, n)
546 call this%vdsdx%update(k)
547 call col3(stats_work%x, this%dsdy%x, this%v%x, n)
548 call this%vdsdy%update(k)
549 call col3(stats_work%x, this%dsdz%x, this%v%x, n)
550 call this%vdsdz%update(k)
552 call col3(stats_work%x, this%dsdx%x, this%w%x, n)
553 call this%wdsdx%update(k)
554 call col3(stats_work%x, this%dsdy%x, this%w%x, n)
555 call this%wdsdy%update(k)
556 call col3(stats_work%x, this%dsdz%x, this%w%x, n)
557 call this%wdsdz%update(k)
559 call col3(stats_work%x, this%dudx%x, this%s%x, n)
560 call this%sdudx%update(k)
561 call col3(stats_work%x, this%dudy%x, this%s%x, n)
562 call this%sdudy%update(k)
563 call col3(stats_work%x, this%dudz%x, this%s%x, n)
564 call this%sdudz%update(k)
566 call col3(stats_work%x, this%dvdx%x, this%s%x, n)
567 call this%sdvdx%update(k)
568 call col3(stats_work%x, this%dvdy%x, this%s%x, n)
569 call this%sdvdy%update(k)
570 call col3(stats_work%x, this%dvdz%x, this%s%x, n)
571 call this%sdvdz%update(k)
573 call col3(stats_work%x, this%dwdx%x, this%s%x, n)
574 call this%sdwdx%update(k)
575 call col3(stats_work%x, this%dwdy%x, this%s%x, n)
576 call this%sdwdy%update(k)
577 call col3(stats_work%x, this%dwdz%x, this%s%x, n)
578 call this%sdwdz%update(k)
580 call col3(stats_work%x, this%dsdx%x, &
582 call addcol3(stats_work%x, this%dsdy%x, &
584 call addcol3(stats_work%x, this%dsdz%x, &
586 call this%ess%update(k)
588 call col3(stats_work%x, this%dudx%x, &
590 call addcol3(stats_work%x, this%dudy%x, &
592 call addcol3(stats_work%x, this%dudz%x, &
594 call this%eus%update(k)
596 call col3(stats_work%x, this%dvdx%x, &
598 call addcol3(stats_work%x, this%dvdy%x, &
600 call addcol3(stats_work%x, this%dvdz%x, &
602 call this%evs%update(k)
604 call col3(stats_work%x, this%dwdx%x, &
606 call addcol3(stats_work%x, this%dwdy%x, &
608 call addcol3(stats_work%x, this%dwdz%x, &
610 call this%ews%update(k)
769 if (this%n_stats .eq. 5)
return
771 n =
size(this%coef%B)
773 if (neko_bcknd_device .eq. 1)
then
774 call device_cfill(this%stats_work%x_d, 1.0_rp, n)
775 call device_invcol2(this%stats_work%x_d, this%coef%B_d, n)
777 call device_col2(this%pdsdx%mf%x_d, this%stats_work%x_d, n)
778 call device_col2(this%pdsdy%mf%x_d, this%stats_work%x_d, n)
779 call device_col2(this%pdsdz%mf%x_d, this%stats_work%x_d, n)
781 call device_col2(this%udsdx%mf%x_d, this%stats_work%x_d, n)
782 call device_col2(this%udsdy%mf%x_d, this%stats_work%x_d, n)
783 call device_col2(this%udsdz%mf%x_d, this%stats_work%x_d, n)
784 call device_col2(this%vdsdx%mf%x_d, this%stats_work%x_d, n)
785 call device_col2(this%vdsdy%mf%x_d, this%stats_work%x_d, n)
786 call device_col2(this%vdsdz%mf%x_d, this%stats_work%x_d, n)
787 call device_col2(this%wdsdx%mf%x_d, this%stats_work%x_d, n)
788 call device_col2(this%wdsdy%mf%x_d, this%stats_work%x_d, n)
789 call device_col2(this%wdsdz%mf%x_d, this%stats_work%x_d, n)
791 call device_col2(this%sdudx%mf%x_d, this%stats_work%x_d, n)
792 call device_col2(this%sdudy%mf%x_d, this%stats_work%x_d, n)
793 call device_col2(this%sdudz%mf%x_d, this%stats_work%x_d, n)
794 call device_col2(this%sdvdx%mf%x_d, this%stats_work%x_d, n)
795 call device_col2(this%sdvdy%mf%x_d, this%stats_work%x_d, n)
796 call device_col2(this%sdvdz%mf%x_d, this%stats_work%x_d, n)
797 call device_col2(this%sdwdx%mf%x_d, this%stats_work%x_d, n)
798 call device_col2(this%sdwdy%mf%x_d, this%stats_work%x_d, n)
799 call device_col2(this%sdwdz%mf%x_d, this%stats_work%x_d, n)
801 call device_col2(this%stats_work%x_d, this%stats_work%x_d, n)
803 call device_col2(this%ess%mf%x_d, this%stats_work%x_d, n)
804 call device_col2(this%eus%mf%x_d, this%stats_work%x_d, n)
805 call device_col2(this%evs%mf%x_d, this%stats_work%x_d, n)
806 call device_col2(this%ews%mf%x_d, this%stats_work%x_d, n)
810 call invers2(this%stats_work%x, this%coef%B, n)
812 call col2(this%pdsdx%mf%x, this%stats_work%x, n)
813 call col2(this%pdsdy%mf%x, this%stats_work%x, n)
814 call col2(this%pdsdz%mf%x, this%stats_work%x, n)
816 call col2(this%udsdx%mf%x, this%stats_work%x, n)
817 call col2(this%udsdy%mf%x, this%stats_work%x, n)
818 call col2(this%udsdz%mf%x, this%stats_work%x, n)
819 call col2(this%vdsdx%mf%x, this%stats_work%x, n)
820 call col2(this%vdsdy%mf%x, this%stats_work%x, n)
821 call col2(this%vdsdz%mf%x, this%stats_work%x, n)
822 call col2(this%wdsdx%mf%x, this%stats_work%x, n)
823 call col2(this%wdsdy%mf%x, this%stats_work%x, n)
824 call col2(this%wdsdz%mf%x, this%stats_work%x, n)
826 call col2(this%sdudx%mf%x, this%stats_work%x, n)
827 call col2(this%sdudy%mf%x, this%stats_work%x, n)
828 call col2(this%sdudz%mf%x, this%stats_work%x, n)
829 call col2(this%sdvdx%mf%x, this%stats_work%x, n)
830 call col2(this%sdvdy%mf%x, this%stats_work%x, n)
831 call col2(this%sdvdz%mf%x, this%stats_work%x, n)
832 call col2(this%sdwdx%mf%x, this%stats_work%x, n)
833 call col2(this%sdwdy%mf%x, this%stats_work%x, n)
834 call col2(this%sdwdz%mf%x, this%stats_work%x, n)
836 call col2(this%stats_work%x, this%stats_work%x, n)
838 call col2(this%ess%mf%x, this%stats_work%x, n)
839 call col2(this%eus%mf%x, this%stats_work%x, n)
840 call col2(this%evs%mf%x, this%stats_work%x, n)
841 call col2(this%ews%mf%x, this%stats_work%x, n)