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
171 character(*),
intent(in),
optional :: name
173 character(len=1024) :: unique_name
185 if (
present(set))
then
186 this%stat_set = trim(set)
187 if (this%stat_set .eq.
'basic')
then
191 this%stat_set =
'full'
197 if (
present(name) .and. trim(name) .ne.
"fluid_stats")
then
198 unique_name = name //
"/"
202 call this%stats_work%init(this%u%dof,
'stats')
203 call this%stats_ss%init(this%u%dof,
'ss temp')
206 call this%s_mean%init(this%s, trim(unique_name) //
"mean_s")
208 call this%us%init(this%stats_work, trim(unique_name) //
'us')
209 call this%vs%init(this%stats_work, trim(unique_name) //
'vs')
210 call this%ws%init(this%stats_work, trim(unique_name) //
'ws')
212 call this%ss%init(this%stats_ss, trim(unique_name) //
'ss')
214 if (this%n_stats .eq. 42)
then
216 call this%stats_uiuj%init(this%u%dof,
'uiuj temp')
219 call this%dsdx%init(this%u%dof,
'dsdx')
220 call this%dsdy%init(this%u%dof,
'dsdy')
221 call this%dsdz%init(this%u%dof,
'dsdz')
223 call this%dudx%init(this%u%dof,
'dudx')
224 call this%dudy%init(this%u%dof,
'dudy')
225 call this%dudz%init(this%u%dof,
'dudz')
226 call this%dvdx%init(this%u%dof,
'dvdx')
227 call this%dvdy%init(this%u%dof,
'dvdy')
228 call this%dvdz%init(this%u%dof,
'dvdz')
229 call this%dwdx%init(this%u%dof,
'dwdx')
230 call this%dwdy%init(this%u%dof,
'dwdy')
231 call this%dwdz%init(this%u%dof,
'dwdz')
234 call this%sss%init(this%stats_work, trim(unique_name) //
'sss')
235 call this%ssss%init(this%stats_work, trim(unique_name) //
'ssss')
237 call this%uss%init(this%stats_work, trim(unique_name) //
'uss')
238 call this%vss%init(this%stats_work, trim(unique_name) //
'vss')
239 call this%wss%init(this%stats_work, trim(unique_name) //
'wss')
240 call this%uus%init(this%stats_work, trim(unique_name) //
'uus')
241 call this%vvs%init(this%stats_work, trim(unique_name) //
'vvs')
242 call this%wws%init(this%stats_work, trim(unique_name) //
'wws')
243 call this%uvs%init(this%stats_work, trim(unique_name) //
'uvs')
244 call this%uws%init(this%stats_work, trim(unique_name) //
'uws')
245 call this%vws%init(this%stats_work, trim(unique_name) //
'vws')
247 call this%ps%init(this%stats_work, trim(unique_name) //
'ps')
249 call this%pdsdx%init(this%stats_work, trim(unique_name) //
'pdsdx')
250 call this%pdsdy%init(this%stats_work, trim(unique_name) //
'pdsdy')
251 call this%pdsdz%init(this%stats_work, trim(unique_name) //
'pdsdz')
253 call this%udsdx%init(this%stats_work, trim(unique_name) //
'udsdx')
254 call this%udsdy%init(this%stats_work, trim(unique_name) //
'udsdy')
255 call this%udsdz%init(this%stats_work, trim(unique_name) //
'udsdz')
256 call this%vdsdx%init(this%stats_work, trim(unique_name) //
'vdsdx')
257 call this%vdsdy%init(this%stats_work, trim(unique_name) //
'vdsdy')
258 call this%vdsdz%init(this%stats_work, trim(unique_name) //
'vdsdz')
259 call this%wdsdx%init(this%stats_work, trim(unique_name) //
'wdsdx')
260 call this%wdsdy%init(this%stats_work, trim(unique_name) //
'wdsdy')
261 call this%wdsdz%init(this%stats_work, trim(unique_name) //
'wdsdz')
262 call this%sdudx%init(this%stats_work, trim(unique_name) //
'sdudx')
263 call this%sdudy%init(this%stats_work, trim(unique_name) //
'sdudy')
264 call this%sdudz%init(this%stats_work, trim(unique_name) //
'sdudz')
265 call this%sdvdx%init(this%stats_work, trim(unique_name) //
'sdvdx')
266 call this%sdvdy%init(this%stats_work, trim(unique_name) //
'sdvdy')
267 call this%sdvdz%init(this%stats_work, trim(unique_name) //
'sdvdz')
268 call this%sdwdx%init(this%stats_work, trim(unique_name) //
'sdwdx')
269 call this%sdwdy%init(this%stats_work, trim(unique_name) //
'sdwdy')
270 call this%sdwdz%init(this%stats_work, trim(unique_name) //
'sdwdz')
272 call this%ess%init(this%stats_work, trim(unique_name) //
'ess')
273 call this%eus%init(this%stats_work, trim(unique_name) //
'eus')
274 call this%evs%init(this%stats_work, trim(unique_name) //
'evs')
275 call this%ews%init(this%stats_work, trim(unique_name) //
'ews')
278 allocate(this%stat_fields%items(this%n_stats))
280 call this%stat_fields%assign_to_field(1, this%s_mean%mf)
282 call this%stat_fields%assign_to_field(2, this%us%mf)
283 call this%stat_fields%assign_to_field(3, this%vs%mf)
284 call this%stat_fields%assign_to_field(4, this%ws%mf)
286 call this%stat_fields%assign_to_field(5, this%ss%mf)
288 if (this%n_stats .eq. 42)
then
289 call this%stat_fields%assign_to_field(6, this%sss%mf)
290 call this%stat_fields%assign_to_field(7, this%ssss%mf)
292 call this%stat_fields%assign_to_field(8, this%uss%mf)
293 call this%stat_fields%assign_to_field(9, this%vss%mf)
294 call this%stat_fields%assign_to_field(10, this%wss%mf)
295 call this%stat_fields%assign_to_field(11, this%uus%mf)
296 call this%stat_fields%assign_to_field(12, this%vvs%mf)
297 call this%stat_fields%assign_to_field(13, this%wws%mf)
298 call this%stat_fields%assign_to_field(14, this%uvs%mf)
299 call this%stat_fields%assign_to_field(15, this%uws%mf)
300 call this%stat_fields%assign_to_field(16, this%vws%mf)
302 call this%stat_fields%assign_to_field(17, this%ps%mf)
304 call this%stat_fields%assign_to_field(18, this%pdsdx%mf)
305 call this%stat_fields%assign_to_field(19, this%pdsdy%mf)
306 call this%stat_fields%assign_to_field(20, this%pdsdz%mf)
308 call this%stat_fields%assign_to_field(21, this%udsdx%mf)
309 call this%stat_fields%assign_to_field(22, this%udsdy%mf)
310 call this%stat_fields%assign_to_field(23, this%udsdz%mf)
311 call this%stat_fields%assign_to_field(24, this%vdsdx%mf)
312 call this%stat_fields%assign_to_field(25, this%vdsdy%mf)
313 call this%stat_fields%assign_to_field(26, this%vdsdz%mf)
314 call this%stat_fields%assign_to_field(27, this%wdsdx%mf)
315 call this%stat_fields%assign_to_field(28, this%wdsdy%mf)
316 call this%stat_fields%assign_to_field(29, this%wdsdz%mf)
318 call this%stat_fields%assign_to_field(30, this%sdudx%mf)
319 call this%stat_fields%assign_to_field(31, this%sdudy%mf)
320 call this%stat_fields%assign_to_field(32, this%sdudz%mf)
321 call this%stat_fields%assign_to_field(33, this%sdvdx%mf)
322 call this%stat_fields%assign_to_field(34, this%sdvdy%mf)
323 call this%stat_fields%assign_to_field(35, this%sdvdz%mf)
324 call this%stat_fields%assign_to_field(36, this%sdwdx%mf)
325 call this%stat_fields%assign_to_field(37, this%sdwdy%mf)
326 call this%stat_fields%assign_to_field(38, this%sdwdz%mf)
328 call this%stat_fields%assign_to_field(39, this%ess%mf)
329 call this%stat_fields%assign_to_field(40, this%eus%mf)
330 call this%stat_fields%assign_to_field(41, this%evs%mf)
331 call this%stat_fields%assign_to_field(42, this%ews%mf)
340 real(kind=
rp),
intent(in) :: k
343 associate(stats_work => this%stats_work, stats_ss => this%stats_ss, &
344 stats_uiuj => this%stats_uiuj)
345 n = stats_work%dof%size()
350 call this%s_mean%update(k)
352 call device_col3(stats_work%x_d, this%u%x_d, this%s%x_d, n)
353 call this%us%update(k)
354 call device_col3(stats_work%x_d, this%v%x_d, this%s%x_d, n)
355 call this%vs%update(k)
356 call device_col3(stats_work%x_d, this%w%x_d, this%s%x_d, n)
357 call this%ws%update(k)
359 call device_col3(stats_ss%x_d, this%s%x_d, this%s%x_d, n)
360 call this%ss%update(k)
362 if (this%n_stats .eq. 5)
return
364 call device_col3(stats_work%x_d, this%stats_ss%x_d, this%s%x_d, n)
365 call this%sss%update(k)
366 call device_col3(stats_work%x_d, this%stats_ss%x_d, &
367 this%stats_ss%x_d, n)
368 call this%ssss%update(k)
370 call device_col3(stats_work%x_d, this%u%x_d, this%stats_ss%x_d, n)
371 call this%uss%update(k)
372 call device_col3(stats_work%x_d, this%v%x_d, this%stats_ss%x_d, n)
373 call this%vss%update(k)
374 call device_col3(stats_work%x_d, this%w%x_d, this%stats_ss%x_d, n)
375 call this%wss%update(k)
377 call device_col3(stats_uiuj%x_d, this%u%x_d, this%u%x_d, n)
378 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
379 call this%uus%update(k)
380 call device_col3(stats_uiuj%x_d, this%v%x_d, this%v%x_d, n)
381 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
382 call this%vvs%update(k)
383 call device_col3(stats_uiuj%x_d, this%w%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%wws%update(k)
386 call device_col3(stats_uiuj%x_d, this%u%x_d, this%v%x_d, n)
387 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
388 call this%uvs%update(k)
389 call device_col3(stats_uiuj%x_d, this%u%x_d, this%w%x_d, n)
390 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
391 call this%uws%update(k)
392 call device_col3(stats_uiuj%x_d, this%v%x_d, this%w%x_d, n)
393 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
394 call this%vws%update(k)
396 call device_col3(stats_work%x_d, this%p%x_d, this%s%x_d, n)
397 call this%ps%update(k)
401 call this%s_mean%update(k)
403 call col3(stats_work%x, this%u%x, this%s%x, n)
404 call this%us%update(k)
405 call col3(stats_work%x, this%v%x, this%s%x, n)
406 call this%vs%update(k)
407 call col3(stats_work%x, this%w%x, this%s%x, n)
408 call this%ws%update(k)
410 call col3(stats_ss%x, this%s%x, this%s%x, n)
411 call this%ss%update(k)
413 if (this%n_stats .eq. 5)
return
415 call col3(stats_work%x, this%stats_ss%x, this%s%x, n)
416 call this%sss%update(k)
417 call col3(stats_work%x, this%stats_ss%x, this%stats_ss%x, n)
418 call this%ssss%update(k)
420 call col3(stats_work%x, this%u%x, this%stats_ss%x, n)
421 call this%uss%update(k)
422 call col3(stats_work%x, this%v%x, this%stats_ss%x, n)
423 call this%vss%update(k)
424 call col3(stats_work%x, this%w%x, this%stats_ss%x, n)
425 call this%wss%update(k)
427 call col3(stats_uiuj%x, this%u%x, this%u%x, n)
428 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
429 call this%uus%update(k)
430 call col3(stats_uiuj%x, this%v%x, this%v%x, n)
431 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
432 call this%vvs%update(k)
433 call col3(stats_uiuj%x, this%w%x, this%w%x, n)
434 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
435 call this%wws%update(k)
436 call col3(stats_uiuj%x, this%u%x, this%v%x, n)
437 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
438 call this%uvs%update(k)
439 call col3(stats_uiuj%x, this%u%x, this%w%x, n)
440 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
441 call this%uws%update(k)
442 call col3(stats_uiuj%x, this%v%x, this%w%x, n)
443 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
444 call this%vws%update(k)
446 call col3(stats_work%x, this%p%x, this%s%x, n)
447 call this%ps%update(k)
451 call opgrad(this%dsdx%x, this%dsdy%x, this%dsdz%x, this%s%x, this%coef)
452 call opgrad(this%dudx%x, this%dudy%x, this%dudz%x, this%u%x, this%coef)
453 call opgrad(this%dvdx%x, this%dvdy%x, this%dvdz%x, this%v%x, this%coef)
454 call opgrad(this%dwdx%x, this%dwdy%x, this%dwdz%x, this%w%x, this%coef)
457 call device_col3(stats_work%x_d, this%dsdx%x_d, this%p%x_d, n)
458 call this%pdsdx%update(k)
459 call device_col3(stats_work%x_d, this%dsdy%x_d, this%p%x_d, n)
460 call this%pdsdy%update(k)
461 call device_col3(stats_work%x_d, this%dsdz%x_d, this%p%x_d, n)
462 call this%pdsdz%update(k)
464 call device_col3(stats_work%x_d, this%dsdx%x_d, this%u%x_d, n)
465 call this%udsdx%update(k)
466 call device_col3(stats_work%x_d, this%dsdy%x_d, this%u%x_d, n)
467 call this%udsdy%update(k)
468 call device_col3(stats_work%x_d, this%dsdz%x_d, this%u%x_d, n)
469 call this%udsdz%update(k)
471 call device_col3(stats_work%x_d, this%dsdx%x_d, this%v%x_d, n)
472 call this%vdsdx%update(k)
473 call device_col3(stats_work%x_d, this%dsdy%x_d, this%v%x_d, n)
474 call this%vdsdy%update(k)
475 call device_col3(stats_work%x_d, this%dsdz%x_d, this%v%x_d, n)
476 call this%vdsdz%update(k)
478 call device_col3(stats_work%x_d, this%dsdx%x_d, this%w%x_d, n)
479 call this%wdsdx%update(k)
480 call device_col3(stats_work%x_d, this%dsdy%x_d, this%w%x_d, n)
481 call this%wdsdy%update(k)
482 call device_col3(stats_work%x_d, this%dsdz%x_d, this%w%x_d, n)
483 call this%wdsdz%update(k)
485 call device_col3(stats_work%x_d, this%dudx%x_d, this%s%x_d, n)
486 call this%sdudx%update(k)
487 call device_col3(stats_work%x_d, this%dudy%x_d, this%s%x_d, n)
488 call this%sdudy%update(k)
489 call device_col3(stats_work%x_d, this%dudz%x_d, this%s%x_d, n)
490 call this%sdudz%update(k)
492 call device_col3(stats_work%x_d, this%dvdx%x_d, this%s%x_d, n)
493 call this%sdvdx%update(k)
494 call device_col3(stats_work%x_d, this%dvdy%x_d, this%s%x_d, n)
495 call this%sdvdy%update(k)
496 call device_col3(stats_work%x_d, this%dvdz%x_d, this%s%x_d, n)
497 call this%sdvdz%update(k)
499 call device_col3(stats_work%x_d, this%dwdx%x_d, this%s%x_d, n)
500 call this%sdwdx%update(k)
501 call device_col3(stats_work%x_d, this%dwdy%x_d, this%s%x_d, n)
502 call this%sdwdy%update(k)
503 call device_col3(stats_work%x_d, this%dwdz%x_d, this%s%x_d, n)
504 call this%sdwdz%update(k)
512 call this%ess%update(k)
520 call this%eus%update(k)
528 call this%evs%update(k)
536 call this%ews%update(k)
540 call col3(stats_work%x, this%dsdx%x, this%p%x, n)
541 call this%pdsdx%update(k)
542 call col3(stats_work%x, this%dsdy%x, this%p%x, n)
543 call this%pdsdy%update(k)
544 call col3(stats_work%x, this%dsdz%x, this%p%x, n)
545 call this%pdsdz%update(k)
547 call col3(stats_work%x, this%dsdx%x, this%u%x, n)
548 call this%udsdx%update(k)
549 call col3(stats_work%x, this%dsdy%x, this%u%x, n)
550 call this%udsdy%update(k)
551 call col3(stats_work%x, this%dsdz%x, this%u%x, n)
552 call this%udsdz%update(k)
554 call col3(stats_work%x, this%dsdx%x, this%v%x, n)
555 call this%vdsdx%update(k)
556 call col3(stats_work%x, this%dsdy%x, this%v%x, n)
557 call this%vdsdy%update(k)
558 call col3(stats_work%x, this%dsdz%x, this%v%x, n)
559 call this%vdsdz%update(k)
561 call col3(stats_work%x, this%dsdx%x, this%w%x, n)
562 call this%wdsdx%update(k)
563 call col3(stats_work%x, this%dsdy%x, this%w%x, n)
564 call this%wdsdy%update(k)
565 call col3(stats_work%x, this%dsdz%x, this%w%x, n)
566 call this%wdsdz%update(k)
568 call col3(stats_work%x, this%dudx%x, this%s%x, n)
569 call this%sdudx%update(k)
570 call col3(stats_work%x, this%dudy%x, this%s%x, n)
571 call this%sdudy%update(k)
572 call col3(stats_work%x, this%dudz%x, this%s%x, n)
573 call this%sdudz%update(k)
575 call col3(stats_work%x, this%dvdx%x, this%s%x, n)
576 call this%sdvdx%update(k)
577 call col3(stats_work%x, this%dvdy%x, this%s%x, n)
578 call this%sdvdy%update(k)
579 call col3(stats_work%x, this%dvdz%x, this%s%x, n)
580 call this%sdvdz%update(k)
582 call col3(stats_work%x, this%dwdx%x, this%s%x, n)
583 call this%sdwdx%update(k)
584 call col3(stats_work%x, this%dwdy%x, this%s%x, n)
585 call this%sdwdy%update(k)
586 call col3(stats_work%x, this%dwdz%x, this%s%x, n)
587 call this%sdwdz%update(k)
589 call col3(stats_work%x, this%dsdx%x, &
591 call addcol3(stats_work%x, this%dsdy%x, &
593 call addcol3(stats_work%x, this%dsdz%x, &
595 call this%ess%update(k)
597 call col3(stats_work%x, this%dudx%x, &
599 call addcol3(stats_work%x, this%dudy%x, &
601 call addcol3(stats_work%x, this%dudz%x, &
603 call this%eus%update(k)
605 call col3(stats_work%x, this%dvdx%x, &
607 call addcol3(stats_work%x, this%dvdy%x, &
609 call addcol3(stats_work%x, this%dvdz%x, &
611 call this%evs%update(k)
613 call col3(stats_work%x, this%dwdx%x, &
615 call addcol3(stats_work%x, this%dwdy%x, &
617 call addcol3(stats_work%x, this%dwdz%x, &
619 call this%ews%update(k)
778 if (this%n_stats .eq. 5)
return
780 n =
size(this%coef%B)
782 if (neko_bcknd_device .eq. 1)
then
783 call device_cfill(this%stats_work%x_d, 1.0_rp, n)
784 call device_invcol2(this%stats_work%x_d, this%coef%B_d, n)
786 call device_col2(this%pdsdx%mf%x_d, this%stats_work%x_d, n)
787 call device_col2(this%pdsdy%mf%x_d, this%stats_work%x_d, n)
788 call device_col2(this%pdsdz%mf%x_d, this%stats_work%x_d, n)
790 call device_col2(this%udsdx%mf%x_d, this%stats_work%x_d, n)
791 call device_col2(this%udsdy%mf%x_d, this%stats_work%x_d, n)
792 call device_col2(this%udsdz%mf%x_d, this%stats_work%x_d, n)
793 call device_col2(this%vdsdx%mf%x_d, this%stats_work%x_d, n)
794 call device_col2(this%vdsdy%mf%x_d, this%stats_work%x_d, n)
795 call device_col2(this%vdsdz%mf%x_d, this%stats_work%x_d, n)
796 call device_col2(this%wdsdx%mf%x_d, this%stats_work%x_d, n)
797 call device_col2(this%wdsdy%mf%x_d, this%stats_work%x_d, n)
798 call device_col2(this%wdsdz%mf%x_d, this%stats_work%x_d, n)
800 call device_col2(this%sdudx%mf%x_d, this%stats_work%x_d, n)
801 call device_col2(this%sdudy%mf%x_d, this%stats_work%x_d, n)
802 call device_col2(this%sdudz%mf%x_d, this%stats_work%x_d, n)
803 call device_col2(this%sdvdx%mf%x_d, this%stats_work%x_d, n)
804 call device_col2(this%sdvdy%mf%x_d, this%stats_work%x_d, n)
805 call device_col2(this%sdvdz%mf%x_d, this%stats_work%x_d, n)
806 call device_col2(this%sdwdx%mf%x_d, this%stats_work%x_d, n)
807 call device_col2(this%sdwdy%mf%x_d, this%stats_work%x_d, n)
808 call device_col2(this%sdwdz%mf%x_d, this%stats_work%x_d, n)
810 call device_col2(this%stats_work%x_d, this%stats_work%x_d, n)
812 call device_col2(this%ess%mf%x_d, this%stats_work%x_d, n)
813 call device_col2(this%eus%mf%x_d, this%stats_work%x_d, n)
814 call device_col2(this%evs%mf%x_d, this%stats_work%x_d, n)
815 call device_col2(this%ews%mf%x_d, this%stats_work%x_d, n)
819 call invers2(this%stats_work%x, this%coef%B, n)
821 call col2(this%pdsdx%mf%x, this%stats_work%x, n)
822 call col2(this%pdsdy%mf%x, this%stats_work%x, n)
823 call col2(this%pdsdz%mf%x, this%stats_work%x, n)
825 call col2(this%udsdx%mf%x, this%stats_work%x, n)
826 call col2(this%udsdy%mf%x, this%stats_work%x, n)
827 call col2(this%udsdz%mf%x, this%stats_work%x, n)
828 call col2(this%vdsdx%mf%x, this%stats_work%x, n)
829 call col2(this%vdsdy%mf%x, this%stats_work%x, n)
830 call col2(this%vdsdz%mf%x, this%stats_work%x, n)
831 call col2(this%wdsdx%mf%x, this%stats_work%x, n)
832 call col2(this%wdsdy%mf%x, this%stats_work%x, n)
833 call col2(this%wdsdz%mf%x, this%stats_work%x, n)
835 call col2(this%sdudx%mf%x, this%stats_work%x, n)
836 call col2(this%sdudy%mf%x, this%stats_work%x, n)
837 call col2(this%sdudz%mf%x, this%stats_work%x, n)
838 call col2(this%sdvdx%mf%x, this%stats_work%x, n)
839 call col2(this%sdvdy%mf%x, this%stats_work%x, n)
840 call col2(this%sdvdz%mf%x, this%stats_work%x, n)
841 call col2(this%sdwdx%mf%x, this%stats_work%x, n)
842 call col2(this%sdwdy%mf%x, this%stats_work%x, n)
843 call col2(this%sdwdz%mf%x, this%stats_work%x, n)
845 call col2(this%stats_work%x, this%stats_work%x, n)
847 call col2(this%ess%mf%x, this%stats_work%x, n)
848 call col2(this%eus%mf%x, this%stats_work%x, n)
849 call col2(this%evs%mf%x, this%stats_work%x, n)
850 call col2(this%ews%mf%x, this%stats_work%x, n)