166 type(
coef_t),
target,
optional :: coef
167 type(
field_t),
target,
intent(in) :: s, u, v, w, p
168 character(*),
intent(in),
optional :: set
169 character(*),
intent(in),
optional :: name
171 character(len=1024) :: unique_name
183 if (
present(set))
then
184 this%stat_set = trim(set)
185 if (this%stat_set .eq.
'basic')
then
189 this%stat_set =
'full'
195 if (
present(name) .and. trim(name) .ne.
"fluid_stats")
then
196 unique_name = name //
"/"
200 call this%stats_work%init(this%u%dof,
'stats')
201 call this%stats_ss%init(this%u%dof,
'ss temp')
204 call this%s_mean%init(this%s, trim(unique_name) //
"mean_s")
206 call this%us%init(this%stats_work, trim(unique_name) //
'us')
207 call this%vs%init(this%stats_work, trim(unique_name) //
'vs')
208 call this%ws%init(this%stats_work, trim(unique_name) //
'ws')
210 call this%ss%init(this%stats_ss, trim(unique_name) //
'ss')
212 if (this%n_stats .eq. 42)
then
214 call this%stats_uiuj%init(this%u%dof,
'uiuj temp')
217 call this%dsdx%init(this%u%dof,
'dsdx')
218 call this%dsdy%init(this%u%dof,
'dsdy')
219 call this%dsdz%init(this%u%dof,
'dsdz')
221 call this%dudx%init(this%u%dof,
'dudx')
222 call this%dudy%init(this%u%dof,
'dudy')
223 call this%dudz%init(this%u%dof,
'dudz')
224 call this%dvdx%init(this%u%dof,
'dvdx')
225 call this%dvdy%init(this%u%dof,
'dvdy')
226 call this%dvdz%init(this%u%dof,
'dvdz')
227 call this%dwdx%init(this%u%dof,
'dwdx')
228 call this%dwdy%init(this%u%dof,
'dwdy')
229 call this%dwdz%init(this%u%dof,
'dwdz')
232 call this%sss%init(this%stats_work, trim(unique_name) //
'sss')
233 call this%ssss%init(this%stats_work, trim(unique_name) //
'ssss')
235 call this%uss%init(this%stats_work, trim(unique_name) //
'uss')
236 call this%vss%init(this%stats_work, trim(unique_name) //
'vss')
237 call this%wss%init(this%stats_work, trim(unique_name) //
'wss')
238 call this%uus%init(this%stats_work, trim(unique_name) //
'uus')
239 call this%vvs%init(this%stats_work, trim(unique_name) //
'vvs')
240 call this%wws%init(this%stats_work, trim(unique_name) //
'wws')
241 call this%uvs%init(this%stats_work, trim(unique_name) //
'uvs')
242 call this%uws%init(this%stats_work, trim(unique_name) //
'uws')
243 call this%vws%init(this%stats_work, trim(unique_name) //
'vws')
245 call this%ps%init(this%stats_work, trim(unique_name) //
'ps')
247 call this%pdsdx%init(this%stats_work, trim(unique_name) //
'pdsdx')
248 call this%pdsdy%init(this%stats_work, trim(unique_name) //
'pdsdy')
249 call this%pdsdz%init(this%stats_work, trim(unique_name) //
'pdsdz')
251 call this%udsdx%init(this%stats_work, trim(unique_name) //
'udsdx')
252 call this%udsdy%init(this%stats_work, trim(unique_name) //
'udsdy')
253 call this%udsdz%init(this%stats_work, trim(unique_name) //
'udsdz')
254 call this%vdsdx%init(this%stats_work, trim(unique_name) //
'vdsdx')
255 call this%vdsdy%init(this%stats_work, trim(unique_name) //
'vdsdy')
256 call this%vdsdz%init(this%stats_work, trim(unique_name) //
'vdsdz')
257 call this%wdsdx%init(this%stats_work, trim(unique_name) //
'wdsdx')
258 call this%wdsdy%init(this%stats_work, trim(unique_name) //
'wdsdy')
259 call this%wdsdz%init(this%stats_work, trim(unique_name) //
'wdsdz')
260 call this%sdudx%init(this%stats_work, trim(unique_name) //
'sdudx')
261 call this%sdudy%init(this%stats_work, trim(unique_name) //
'sdudy')
262 call this%sdudz%init(this%stats_work, trim(unique_name) //
'sdudz')
263 call this%sdvdx%init(this%stats_work, trim(unique_name) //
'sdvdx')
264 call this%sdvdy%init(this%stats_work, trim(unique_name) //
'sdvdy')
265 call this%sdvdz%init(this%stats_work, trim(unique_name) //
'sdvdz')
266 call this%sdwdx%init(this%stats_work, trim(unique_name) //
'sdwdx')
267 call this%sdwdy%init(this%stats_work, trim(unique_name) //
'sdwdy')
268 call this%sdwdz%init(this%stats_work, trim(unique_name) //
'sdwdz')
270 call this%ess%init(this%stats_work, trim(unique_name) //
'ess')
271 call this%eus%init(this%stats_work, trim(unique_name) //
'eus')
272 call this%evs%init(this%stats_work, trim(unique_name) //
'evs')
273 call this%ews%init(this%stats_work, trim(unique_name) //
'ews')
276 allocate(this%stat_fields%items(this%n_stats))
278 call this%stat_fields%assign_to_field(1, this%s_mean%mf)
280 call this%stat_fields%assign_to_field(2, this%us%mf)
281 call this%stat_fields%assign_to_field(3, this%vs%mf)
282 call this%stat_fields%assign_to_field(4, this%ws%mf)
284 call this%stat_fields%assign_to_field(5, this%ss%mf)
286 if (this%n_stats .eq. 42)
then
287 call this%stat_fields%assign_to_field(6, this%sss%mf)
288 call this%stat_fields%assign_to_field(7, this%ssss%mf)
290 call this%stat_fields%assign_to_field(8, this%uss%mf)
291 call this%stat_fields%assign_to_field(9, this%vss%mf)
292 call this%stat_fields%assign_to_field(10, this%wss%mf)
293 call this%stat_fields%assign_to_field(11, this%uus%mf)
294 call this%stat_fields%assign_to_field(12, this%vvs%mf)
295 call this%stat_fields%assign_to_field(13, this%wws%mf)
296 call this%stat_fields%assign_to_field(14, this%uvs%mf)
297 call this%stat_fields%assign_to_field(15, this%uws%mf)
298 call this%stat_fields%assign_to_field(16, this%vws%mf)
300 call this%stat_fields%assign_to_field(17, this%ps%mf)
302 call this%stat_fields%assign_to_field(18, this%pdsdx%mf)
303 call this%stat_fields%assign_to_field(19, this%pdsdy%mf)
304 call this%stat_fields%assign_to_field(20, this%pdsdz%mf)
306 call this%stat_fields%assign_to_field(21, this%udsdx%mf)
307 call this%stat_fields%assign_to_field(22, this%udsdy%mf)
308 call this%stat_fields%assign_to_field(23, this%udsdz%mf)
309 call this%stat_fields%assign_to_field(24, this%vdsdx%mf)
310 call this%stat_fields%assign_to_field(25, this%vdsdy%mf)
311 call this%stat_fields%assign_to_field(26, this%vdsdz%mf)
312 call this%stat_fields%assign_to_field(27, this%wdsdx%mf)
313 call this%stat_fields%assign_to_field(28, this%wdsdy%mf)
314 call this%stat_fields%assign_to_field(29, this%wdsdz%mf)
316 call this%stat_fields%assign_to_field(30, this%sdudx%mf)
317 call this%stat_fields%assign_to_field(31, this%sdudy%mf)
318 call this%stat_fields%assign_to_field(32, this%sdudz%mf)
319 call this%stat_fields%assign_to_field(33, this%sdvdx%mf)
320 call this%stat_fields%assign_to_field(34, this%sdvdy%mf)
321 call this%stat_fields%assign_to_field(35, this%sdvdz%mf)
322 call this%stat_fields%assign_to_field(36, this%sdwdx%mf)
323 call this%stat_fields%assign_to_field(37, this%sdwdy%mf)
324 call this%stat_fields%assign_to_field(38, this%sdwdz%mf)
326 call this%stat_fields%assign_to_field(39, this%ess%mf)
327 call this%stat_fields%assign_to_field(40, this%eus%mf)
328 call this%stat_fields%assign_to_field(41, this%evs%mf)
329 call this%stat_fields%assign_to_field(42, this%ews%mf)
338 real(kind=
rp),
intent(in) :: k
341 associate(stats_work => this%stats_work, stats_ss => this%stats_ss, &
342 stats_uiuj => this%stats_uiuj)
343 n = stats_work%dof%size()
348 call this%s_mean%update(k)
350 call device_col3(stats_work%x_d, this%u%x_d, this%s%x_d, n)
351 call this%us%update(k)
352 call device_col3(stats_work%x_d, this%v%x_d, this%s%x_d, n)
353 call this%vs%update(k)
354 call device_col3(stats_work%x_d, this%w%x_d, this%s%x_d, n)
355 call this%ws%update(k)
357 call device_col3(stats_ss%x_d, this%s%x_d, this%s%x_d, n)
358 call this%ss%update(k)
360 if (this%n_stats .eq. 5)
return
362 call device_col3(stats_work%x_d, this%stats_ss%x_d, this%s%x_d, n)
363 call this%sss%update(k)
364 call device_col3(stats_work%x_d, this%stats_ss%x_d, &
365 this%stats_ss%x_d, n)
366 call this%ssss%update(k)
368 call device_col3(stats_work%x_d, this%u%x_d, this%stats_ss%x_d, n)
369 call this%uss%update(k)
370 call device_col3(stats_work%x_d, this%v%x_d, this%stats_ss%x_d, n)
371 call this%vss%update(k)
372 call device_col3(stats_work%x_d, this%w%x_d, this%stats_ss%x_d, n)
373 call this%wss%update(k)
375 call device_col3(stats_uiuj%x_d, this%u%x_d, this%u%x_d, n)
376 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
377 call this%uus%update(k)
378 call device_col3(stats_uiuj%x_d, this%v%x_d, this%v%x_d, n)
379 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
380 call this%vvs%update(k)
381 call device_col3(stats_uiuj%x_d, this%w%x_d, this%w%x_d, n)
382 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
383 call this%wws%update(k)
384 call device_col3(stats_uiuj%x_d, this%u%x_d, this%v%x_d, n)
385 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
386 call this%uvs%update(k)
387 call device_col3(stats_uiuj%x_d, this%u%x_d, this%w%x_d, n)
388 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
389 call this%uws%update(k)
390 call device_col3(stats_uiuj%x_d, this%v%x_d, this%w%x_d, n)
391 call device_col3(stats_work%x_d, stats_uiuj%x_d, this%s%x_d, n)
392 call this%vws%update(k)
394 call device_col3(stats_work%x_d, this%p%x_d, this%s%x_d, n)
395 call this%ps%update(k)
399 call this%s_mean%update(k)
401 call col3(stats_work%x, this%u%x, this%s%x, n)
402 call this%us%update(k)
403 call col3(stats_work%x, this%v%x, this%s%x, n)
404 call this%vs%update(k)
405 call col3(stats_work%x, this%w%x, this%s%x, n)
406 call this%ws%update(k)
408 call col3(stats_ss%x, this%s%x, this%s%x, n)
409 call this%ss%update(k)
411 if (this%n_stats .eq. 5)
return
413 call col3(stats_work%x, this%stats_ss%x, this%s%x, n)
414 call this%sss%update(k)
415 call col3(stats_work%x, this%stats_ss%x, this%stats_ss%x, n)
416 call this%ssss%update(k)
418 call col3(stats_work%x, this%u%x, this%stats_ss%x, n)
419 call this%uss%update(k)
420 call col3(stats_work%x, this%v%x, this%stats_ss%x, n)
421 call this%vss%update(k)
422 call col3(stats_work%x, this%w%x, this%stats_ss%x, n)
423 call this%wss%update(k)
425 call col3(stats_uiuj%x, this%u%x, this%u%x, n)
426 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
427 call this%uus%update(k)
428 call col3(stats_uiuj%x, this%v%x, this%v%x, n)
429 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
430 call this%vvs%update(k)
431 call col3(stats_uiuj%x, this%w%x, this%w%x, n)
432 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
433 call this%wws%update(k)
434 call col3(stats_uiuj%x, this%u%x, this%v%x, n)
435 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
436 call this%uvs%update(k)
437 call col3(stats_uiuj%x, this%u%x, this%w%x, n)
438 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
439 call this%uws%update(k)
440 call col3(stats_uiuj%x, this%v%x, this%w%x, n)
441 call col3(stats_work%x, stats_uiuj%x, this%s%x, n)
442 call this%vws%update(k)
444 call col3(stats_work%x, this%p%x, this%s%x, n)
445 call this%ps%update(k)
449 call opgrad(this%dsdx%x, this%dsdy%x, this%dsdz%x, this%s%x, this%coef)
450 call opgrad(this%dudx%x, this%dudy%x, this%dudz%x, this%u%x, this%coef)
451 call opgrad(this%dvdx%x, this%dvdy%x, this%dvdz%x, this%v%x, this%coef)
452 call opgrad(this%dwdx%x, this%dwdy%x, this%dwdz%x, this%w%x, this%coef)
455 call device_col3(stats_work%x_d, this%dsdx%x_d, this%p%x_d, n)
456 call this%pdsdx%update(k)
457 call device_col3(stats_work%x_d, this%dsdy%x_d, this%p%x_d, n)
458 call this%pdsdy%update(k)
459 call device_col3(stats_work%x_d, this%dsdz%x_d, this%p%x_d, n)
460 call this%pdsdz%update(k)
462 call device_col3(stats_work%x_d, this%dsdx%x_d, this%u%x_d, n)
463 call this%udsdx%update(k)
464 call device_col3(stats_work%x_d, this%dsdy%x_d, this%u%x_d, n)
465 call this%udsdy%update(k)
466 call device_col3(stats_work%x_d, this%dsdz%x_d, this%u%x_d, n)
467 call this%udsdz%update(k)
469 call device_col3(stats_work%x_d, this%dsdx%x_d, this%v%x_d, n)
470 call this%vdsdx%update(k)
471 call device_col3(stats_work%x_d, this%dsdy%x_d, this%v%x_d, n)
472 call this%vdsdy%update(k)
473 call device_col3(stats_work%x_d, this%dsdz%x_d, this%v%x_d, n)
474 call this%vdsdz%update(k)
476 call device_col3(stats_work%x_d, this%dsdx%x_d, this%w%x_d, n)
477 call this%wdsdx%update(k)
478 call device_col3(stats_work%x_d, this%dsdy%x_d, this%w%x_d, n)
479 call this%wdsdy%update(k)
480 call device_col3(stats_work%x_d, this%dsdz%x_d, this%w%x_d, n)
481 call this%wdsdz%update(k)
483 call device_col3(stats_work%x_d, this%dudx%x_d, this%s%x_d, n)
484 call this%sdudx%update(k)
485 call device_col3(stats_work%x_d, this%dudy%x_d, this%s%x_d, n)
486 call this%sdudy%update(k)
487 call device_col3(stats_work%x_d, this%dudz%x_d, this%s%x_d, n)
488 call this%sdudz%update(k)
490 call device_col3(stats_work%x_d, this%dvdx%x_d, this%s%x_d, n)
491 call this%sdvdx%update(k)
492 call device_col3(stats_work%x_d, this%dvdy%x_d, this%s%x_d, n)
493 call this%sdvdy%update(k)
494 call device_col3(stats_work%x_d, this%dvdz%x_d, this%s%x_d, n)
495 call this%sdvdz%update(k)
497 call device_col3(stats_work%x_d, this%dwdx%x_d, this%s%x_d, n)
498 call this%sdwdx%update(k)
499 call device_col3(stats_work%x_d, this%dwdy%x_d, this%s%x_d, n)
500 call this%sdwdy%update(k)
501 call device_col3(stats_work%x_d, this%dwdz%x_d, this%s%x_d, n)
502 call this%sdwdz%update(k)
510 call this%ess%update(k)
518 call this%eus%update(k)
526 call this%evs%update(k)
534 call this%ews%update(k)
538 call col3(stats_work%x, this%dsdx%x, this%p%x, n)
539 call this%pdsdx%update(k)
540 call col3(stats_work%x, this%dsdy%x, this%p%x, n)
541 call this%pdsdy%update(k)
542 call col3(stats_work%x, this%dsdz%x, this%p%x, n)
543 call this%pdsdz%update(k)
545 call col3(stats_work%x, this%dsdx%x, this%u%x, n)
546 call this%udsdx%update(k)
547 call col3(stats_work%x, this%dsdy%x, this%u%x, n)
548 call this%udsdy%update(k)
549 call col3(stats_work%x, this%dsdz%x, this%u%x, n)
550 call this%udsdz%update(k)
552 call col3(stats_work%x, this%dsdx%x, this%v%x, n)
553 call this%vdsdx%update(k)
554 call col3(stats_work%x, this%dsdy%x, this%v%x, n)
555 call this%vdsdy%update(k)
556 call col3(stats_work%x, this%dsdz%x, this%v%x, n)
557 call this%vdsdz%update(k)
559 call col3(stats_work%x, this%dsdx%x, this%w%x, n)
560 call this%wdsdx%update(k)
561 call col3(stats_work%x, this%dsdy%x, this%w%x, n)
562 call this%wdsdy%update(k)
563 call col3(stats_work%x, this%dsdz%x, this%w%x, n)
564 call this%wdsdz%update(k)
566 call col3(stats_work%x, this%dudx%x, this%s%x, n)
567 call this%sdudx%update(k)
568 call col3(stats_work%x, this%dudy%x, this%s%x, n)
569 call this%sdudy%update(k)
570 call col3(stats_work%x, this%dudz%x, this%s%x, n)
571 call this%sdudz%update(k)
573 call col3(stats_work%x, this%dvdx%x, this%s%x, n)
574 call this%sdvdx%update(k)
575 call col3(stats_work%x, this%dvdy%x, this%s%x, n)
576 call this%sdvdy%update(k)
577 call col3(stats_work%x, this%dvdz%x, this%s%x, n)
578 call this%sdvdz%update(k)
580 call col3(stats_work%x, this%dwdx%x, this%s%x, n)
581 call this%sdwdx%update(k)
582 call col3(stats_work%x, this%dwdy%x, this%s%x, n)
583 call this%sdwdy%update(k)
584 call col3(stats_work%x, this%dwdz%x, this%s%x, n)
585 call this%sdwdz%update(k)
587 call col3(stats_work%x, this%dsdx%x, &
589 call addcol3(stats_work%x, this%dsdy%x, &
591 call addcol3(stats_work%x, this%dsdz%x, &
593 call this%ess%update(k)
595 call col3(stats_work%x, this%dudx%x, &
597 call addcol3(stats_work%x, this%dudy%x, &
599 call addcol3(stats_work%x, this%dudz%x, &
601 call this%eus%update(k)
603 call col3(stats_work%x, this%dvdx%x, &
605 call addcol3(stats_work%x, this%dvdy%x, &
607 call addcol3(stats_work%x, this%dvdz%x, &
609 call this%evs%update(k)
611 call col3(stats_work%x, this%dwdx%x, &
613 call addcol3(stats_work%x, this%dwdy%x, &
615 call addcol3(stats_work%x, this%dwdz%x, &
617 call this%ews%update(k)
776 if (this%n_stats .eq. 5)
return
778 n =
size(this%coef%B)
780 if (neko_bcknd_device .eq. 1)
then
781 call device_cfill(this%stats_work%x_d, 1.0_rp, n)
782 call device_invcol2(this%stats_work%x_d, this%coef%B_d, n)
784 call device_col2(this%pdsdx%mf%x_d, this%stats_work%x_d, n)
785 call device_col2(this%pdsdy%mf%x_d, this%stats_work%x_d, n)
786 call device_col2(this%pdsdz%mf%x_d, this%stats_work%x_d, n)
788 call device_col2(this%udsdx%mf%x_d, this%stats_work%x_d, n)
789 call device_col2(this%udsdy%mf%x_d, this%stats_work%x_d, n)
790 call device_col2(this%udsdz%mf%x_d, this%stats_work%x_d, n)
791 call device_col2(this%vdsdx%mf%x_d, this%stats_work%x_d, n)
792 call device_col2(this%vdsdy%mf%x_d, this%stats_work%x_d, n)
793 call device_col2(this%vdsdz%mf%x_d, this%stats_work%x_d, n)
794 call device_col2(this%wdsdx%mf%x_d, this%stats_work%x_d, n)
795 call device_col2(this%wdsdy%mf%x_d, this%stats_work%x_d, n)
796 call device_col2(this%wdsdz%mf%x_d, this%stats_work%x_d, n)
798 call device_col2(this%sdudx%mf%x_d, this%stats_work%x_d, n)
799 call device_col2(this%sdudy%mf%x_d, this%stats_work%x_d, n)
800 call device_col2(this%sdudz%mf%x_d, this%stats_work%x_d, n)
801 call device_col2(this%sdvdx%mf%x_d, this%stats_work%x_d, n)
802 call device_col2(this%sdvdy%mf%x_d, this%stats_work%x_d, n)
803 call device_col2(this%sdvdz%mf%x_d, this%stats_work%x_d, n)
804 call device_col2(this%sdwdx%mf%x_d, this%stats_work%x_d, n)
805 call device_col2(this%sdwdy%mf%x_d, this%stats_work%x_d, n)
806 call device_col2(this%sdwdz%mf%x_d, this%stats_work%x_d, n)
808 call device_col2(this%stats_work%x_d, this%stats_work%x_d, n)
810 call device_col2(this%ess%mf%x_d, this%stats_work%x_d, n)
811 call device_col2(this%eus%mf%x_d, this%stats_work%x_d, n)
812 call device_col2(this%evs%mf%x_d, this%stats_work%x_d, n)
813 call device_col2(this%ews%mf%x_d, this%stats_work%x_d, n)
817 call invers2(this%stats_work%x, this%coef%B, n)
819 call col2(this%pdsdx%mf%x, this%stats_work%x, n)
820 call col2(this%pdsdy%mf%x, this%stats_work%x, n)
821 call col2(this%pdsdz%mf%x, this%stats_work%x, n)
823 call col2(this%udsdx%mf%x, this%stats_work%x, n)
824 call col2(this%udsdy%mf%x, this%stats_work%x, n)
825 call col2(this%udsdz%mf%x, this%stats_work%x, n)
826 call col2(this%vdsdx%mf%x, this%stats_work%x, n)
827 call col2(this%vdsdy%mf%x, this%stats_work%x, n)
828 call col2(this%vdsdz%mf%x, this%stats_work%x, n)
829 call col2(this%wdsdx%mf%x, this%stats_work%x, n)
830 call col2(this%wdsdy%mf%x, this%stats_work%x, n)
831 call col2(this%wdsdz%mf%x, this%stats_work%x, n)
833 call col2(this%sdudx%mf%x, this%stats_work%x, n)
834 call col2(this%sdudy%mf%x, this%stats_work%x, n)
835 call col2(this%sdudz%mf%x, this%stats_work%x, n)
836 call col2(this%sdvdx%mf%x, this%stats_work%x, n)
837 call col2(this%sdvdy%mf%x, this%stats_work%x, n)
838 call col2(this%sdvdz%mf%x, this%stats_work%x, n)
839 call col2(this%sdwdx%mf%x, this%stats_work%x, n)
840 call col2(this%sdwdy%mf%x, this%stats_work%x, n)
841 call col2(this%sdwdz%mf%x, this%stats_work%x, n)
843 call col2(this%stats_work%x, this%stats_work%x, n)
845 call col2(this%ess%mf%x, this%stats_work%x, n)
846 call col2(this%eus%mf%x, this%stats_work%x, n)
847 call col2(this%evs%mf%x, this%stats_work%x, n)
848 call col2(this%ews%mf%x, this%stats_work%x, n)