37  use json_module, 
only : json_file
 
   50  use mpi_f08, 
only : mpi_wtime, mpi_barrier
 
   68     real(kind=
rp) :: start_time
 
   70     logical :: default_fname = .true.
 
   76     procedure, pass(this) :: init_from_components => &
 
 
   95    type(json_file), 
intent(inout) :: json
 
   96    class(
case_t), 
intent(inout), 
target :: case
 
   97    character(len=:), 
allocatable :: filename
 
   98    character(len=20), 
allocatable :: fields(:)
 
   99    character(len=:), 
allocatable :: hom_dir
 
  100    character(len=:), 
allocatable :: stat_set
 
  101    character(len=:), 
allocatable :: sname
 
  102    real(kind=
rp) :: start_time
 
  103    type(
field_t), 
pointer :: s, u, v, w, p
 
  104    type(
coef_t), 
pointer :: coef
 
  106    call this%init_base(json, 
case)
 
  121    coef => 
case%fluid%c_Xh
 
  123    if (json%valid_path(
"output_filename")) 
then 
  124       call json_get(json, 
"output_filename", filename)
 
  126            start_time, hom_dir, stat_set, filename)
 
  129            start_time, hom_dir, stat_set)
 
 
  144       start_time, hom_dir, stat_set, fname)
 
  146    character(len=*), 
intent(in) :: hom_dir
 
  147    character(len=*), 
intent(in) :: stat_set
 
  148    real(kind=
rp), 
intent(in) :: start_time
 
  149    type(
field_t), 
intent(in), 
target :: s, u, v, w, p
 
  150    type(
coef_t), 
intent(in), 
target :: coef
 
  151    character(len=*), 
intent(in), 
optional :: fname
 
  152    character(len=NEKO_FNAME_LEN) :: stats_fname
 
  153    character(len=LOG_SIZE) :: log_buf
 
  154    character(len=5) :: prefix
 
  156    call neko_log%section(
'Scalar stats')
 
  157    write(log_buf, 
'(A,A)') 
'Scalar field: ', trim(s%name)
 
  159    write(log_buf, 
'(A,E15.7)') 
'Start time: ', start_time
 
  161    write(log_buf, 
'(A,A)') 
'Set of statistics: ', trim(stat_set)
 
  163    write(log_buf, 
'(A,A)') 
'Averaging in direction: ', trim(hom_dir)
 
  167    call this%stats%init(coef, s, u, v, w, p, stat_set)
 
  169    this%start_time = start_time
 
  170    this%time = start_time
 
  171    if (
present(fname)) 
then 
  172       this%default_fname = .false.
 
  175       stats_fname = 
"scalar_stats0" 
  176       this%default_fname = .true.
 
  179    call this%stats_output%init(this%stats, this%start_time, &
 
  180         hom_dir = hom_dir,name = stats_fname, &
 
  181         path = this%case%output_directory)
 
  183    call this%case%output_controller%add(this%stats_output, &
 
  184         this%output_controller%control_value, &
 
  185         this%output_controller%control_mode)
 
 
  194    call this%free_base()
 
  195    call this%stats%free()
 
 
  201    character(len=NEKO_FNAME_LEN) :: fname
 
  202    character(len=5) :: prefix,suffix
 
  203    integer :: last_slash_pos
 
  206    if (t .gt. this%time) this%time = t
 
  207    if (this%default_fname) 
then 
  208       fname = this%stats_output%file_%get_base_fname()
 
  209       write (prefix, 
'(I5)') this%stats_output%file_%get_counter()
 
  213       if (last_slash_pos .ne. 0) 
then 
  215               trim(fname(1:last_slash_pos))// &
 
  216               "scalar_stats"//trim(adjustl(prefix))//
"."//suffix
 
  218          fname = 
"scalar_stats"// &
 
  219               trim(adjustl(prefix))//
"."//suffix
 
  221       call this%stats_output%init_base(fname)
 
 
  231    real(kind=
rp) :: delta_t, t
 
  232    real(kind=
rp) :: sample_start_time, sample_time
 
  233    character(len=LOG_SIZE) :: log_buf
 
  236    if (time%start_time .gt. this%start_time) 
then 
  237       write(log_buf, 
'(A)') 
'Simulation start time is later than the ' &
 
  238            // 
'scalar stats start time.' 
  240       write(log_buf, 
'(A,E15.7)') 
'Simulation start time:', time%start_time
 
  242       write(log_buf, 
'(A,E15.7)') 
'Scalar stats start time:', this%start_time
 
  244       write(log_buf, 
'(A)') 
'Assigning the statistics start time to ' &
 
  245            // 
'the simulation start time.' 
  247       this%start_time = time%start_time
 
  248       this%time = time%start_time
 
  253    if (t .ge. this%start_time) 
then 
  254       delta_t = t - this%time 
 
  258       sample_start_time = mpi_wtime()
 
  260       call this%stats%update(delta_t)
 
  264       sample_time = mpi_wtime() - sample_start_time
 
  266       call neko_log%section(
'Scalar stats')
 
  267       write(log_buf, 
'(A,E15.7)') 
'Sampling at time:', t
 
  269       write(log_buf, 
'(A33,E15.7)') 
'Simulationtime since last sample:', &
 
  272       write(log_buf, 
'(A,E15.7)') 
'Sampling time (s):', sample_time
 
 
Retrieves a parameter by name or assigns a provided default value. In the latter case also adds the m...
 
Retrieves a parameter by name or throws an error.
 
Defines a simulation case.
 
type(mpi_comm), public neko_comm
MPI communicator.
 
Defines a registry for storing solution fields.
 
type(field_registry_t), target, public neko_field_registry
Global field registry.
 
Utilities for retrieving parameters from the case files.
 
type(log_t), public neko_log
Global log stream.
 
integer, parameter, public log_size
 
integer, parameter, public dp
 
integer, parameter, public sp
 
integer, parameter, public rp
Global precision used in computations.
 
Implements scalar_stats_ouput_t.
 
Implements the scalar_stats_simcomp_t type.
 
subroutine scalar_stats_simcomp_free(this)
Destructor.
 
subroutine scalar_stats_simcomp_init_from_json(this, json, case)
Constructor from json.
 
subroutine scalar_stats_simcomp_restart(this, time)
 
subroutine scalar_stats_simcomp_compute(this, time)
scalar_stats, called depending on compute_control and compute_value
 
subroutine scalar_stats_simcomp_init_from_components(this, s, u, v, w, p, coef, start_time, hom_dir, stat_set, fname)
Actual constructor.
 
Computes various statistics for the scalar fields. We use the Reynolds decomposition for a field u = ...
 
Simulation components are objects that encapsulate functionality that can be fit to a particular comp...
 
subroutine restart_(this, time)
Dummy restart function.
 
subroutine compute_(this, time)
Dummy compute function.
 
Defines a container for all statistics.
 
Module with things related to the simulation time.
 
integer, parameter, public neko_fname_len
 
subroutine, public filename_suffix(fname, suffix)
Extract a filename's suffix.
 
pure integer function, public filename_tslash_pos(fname)
Find position (in the string) of a filename's trailing slash.
 
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
 
Defines an output for the scalar statistics computed using the scalar_stats_t object.
 
A simulation component that computes the scalar statistics for the skewness, kurtosis,...
 
Base abstract class for simulation components.
 
A struct that contains all info about the time, expand as needed.