37 use json_module,
only : json_file
52 use mpi_f08,
only : mpi_wtime, mpi_barrier
66 real(kind=
rp) :: start_time
68 logical :: default_fname = .true.
74 procedure, pass(this) :: init_from_components => &
93 type(json_file),
intent(inout) :: json
94 class(
case_t),
intent(inout),
target :: case
95 character(len=:),
allocatable :: filename
96 character(len=NEKO_VARNAME_LEN),
allocatable :: fields(:)
97 character(len=:),
allocatable :: hom_dir
98 character(len=:),
allocatable :: nut_field
99 character(len=:),
allocatable :: name
100 real(kind=
rp) :: start_time
101 type(
field_t),
pointer :: u, v, w
102 type(
coef_t),
pointer :: coef
105 call this%init_base(json,
case)
117 coef =>
case%fluid%c_Xh
120 if (json%valid_path(
"output_filename"))
then
121 call json_get(json,
"output_filename", filename)
123 start_time, hom_dir, nut_field, filename)
126 start_time, hom_dir, nut_field)
129 nullify(u, v, w, coef)
143 start_time, hom_dir, nut_field, fname)
145 character(len=*),
intent(in) :: hom_dir
146 character(len=*),
intent(in) :: nut_field
147 real(kind=
rp),
intent(in) :: start_time
148 type(
field_t),
intent(in),
target :: u, v, w
149 type(
coef_t),
intent(in),
target :: coef
150 character(len=*),
intent(in),
optional :: fname
151 character(len=NEKO_FNAME_LEN) :: stats_fname
152 character(len=LOG_SIZE) :: log_buf
153 character(len=5) :: prefix
155 call neko_log%section(
'Fluid stats')
156 write(log_buf,
'(A,E15.7)')
'Start time: ', start_time
158 write(log_buf,
'(A,A)')
'Nut field name: ', trim(nut_field)
160 write(log_buf,
'(A,A)')
'Averaging in direction: ', trim(hom_dir)
164 call this%stats%init(coef, u, v, w, nut_field)
166 this%start_time = start_time
167 this%time = start_time
168 if (
present(fname))
then
169 this%default_fname = .false.
172 stats_fname =
"fluid_sgs_stats0"
173 this%default_fname = .true.
176 call this%stats_output%init(this%stats, this%start_time, &
177 hom_dir = hom_dir, name = stats_fname, &
178 path = this%case%output_directory)
180 call this%case%output_controller%add(this%stats_output, &
181 this%output_controller%control_value, &
182 this%output_controller%control_mode)
191 call this%free_base()
192 call this%stats%free()
193 call this%stats_output%free()
199 character(len=NEKO_FNAME_LEN) :: fname
200 character(len=5) :: prefix, suffix
201 integer :: last_slash_pos
204 if (t .gt. this%time) this%time = t
205 if (this%default_fname)
then
206 fname = this%stats_output%file_%get_base_fname()
207 write (prefix,
'(I5)') &
208 this%stats_output%file_%file_type%get_start_counter()
212 if (last_slash_pos .ne. 0)
then
214 trim(fname(1:last_slash_pos))// &
215 "fluid_sgs_stats"//trim(adjustl(prefix))//
"."//suffix
217 fname =
"fluid_sgs_stats"// &
218 trim(adjustl(prefix))//
"."//suffix
220 call this%stats_output%init_base(fname)
229 real(kind=
rp) :: delta_t, t
230 real(kind=
rp) :: sample_start_time, sample_time
231 character(len=LOG_SIZE) :: log_buf
234 if (time%start_time .gt. this%start_time)
then
235 write(log_buf,
'(A)')
'Simulation start time is later than the ' &
236 //
'fluid stats start time.'
238 write(log_buf,
'(A,E15.7)')
'Simulation start time:', time%start_time
240 write(log_buf,
'(A,E15.7)')
'Fluid stats start time:', this%start_time
242 write(log_buf,
'(A)')
'Assigning the statistics start time to ' &
243 //
'the simulation start time.'
245 this%start_time = time%start_time
246 this%time = time%start_time
251 if (t .ge. this%start_time)
then
252 delta_t = t - this%time
256 sample_start_time = mpi_wtime()
258 call this%stats%update(delta_t)
262 sample_time = mpi_wtime() - sample_start_time
264 call neko_log%section(
'Fluid SGS stats')
265 write(log_buf,
'(A,E15.7)')
'Sampling at time:', t
267 write(log_buf,
'(A33,E15.7)')
'Simulation time since last sample:', &
270 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.
Implements fluid_sgs_stats_ouput_t.
Implements the fluid_sgs_stats_simcomp_t type.
subroutine fluid_sgs_stats_simcomp_init_from_components(this, u, v, w, coef, start_time, hom_dir, nut_field, fname)
Actual constructor.
subroutine fluid_sgs_stats_simcomp_compute(this, time)
fluid_sgs_stats, called depending on compute_control and compute_value
subroutine fluid_sgs_stats_simcomp_restart(this, time)
subroutine fluid_sgs_stats_simcomp_free(this)
Destructor.
subroutine fluid_sgs_stats_simcomp_init_from_json(this, json, case)
Constructor from json.
Computes the subgrid-scale contributions for Reynolds stresses. We use the Reynolds decomposition for...
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.
Defines a registry for storing solution fields.
type(registry_t), target, public neko_registry
Global field registry.
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.
integer, parameter, public neko_varname_len
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 sgs statistics for fluid computed using the fluid_sgs_stats_t object.
A simulation component that computes the subgrid-scale contributions to the Reynolds stresses in LES.
Base abstract class for simulation components.
A struct that contains all info about the time, expand as needed.