38 use json_module,
only : json_file
56 real(kind=
rp) :: start_time
62 integer :: n_avg_fields = 0
64 character(len=20),
allocatable :: field_names(:)
72 generic :: init_from_components => &
73 init_from_controllers, init_from_controllers_properties
75 procedure, pass(this) :: init_from_controllers => &
79 procedure, pass(this) :: init_from_controllers_properties => &
97 type(json_file),
intent(inout) :: json
98 class(
case_t),
intent(inout),
target :: case
99 character(len=:),
allocatable :: filename
100 character(len=:),
allocatable :: avg_dir
102 call this%init_base(json,
case)
105 call json%info(
'fields', n_children = this%n_avg_fields)
106 call json_get(json,
'fields', this%field_names)
112 case%fluid%c_Xh, avg_dir, filename = filename)
119 if (time%t .gt. this%time) this%time = time%t
135 preprocess_controller, compute_controller, output_controller, &
136 start_time, coef, avg_dir, filename, precision)
138 class(
case_t),
intent(inout),
target :: case
143 real(kind=
rp),
intent(in) :: start_time
144 character(len=*),
intent(in) :: avg_dir
145 type(
coef_t),
intent(inout) :: coef
146 character(len=*),
intent(in),
optional :: filename
147 integer,
intent(in),
optional :: precision
149 call this%init_base_from_components(
case, order, preprocess_controller, &
151 call this%init_common(start_time, coef, avg_dir, filename, precision)
173 case, order, preprocess_control, preprocess_value, compute_control, &
174 compute_value, output_control, output_value, start_time, coef, avg_dir, &
177 class(
case_t),
intent(inout),
target :: case
179 character(len=*),
intent(in) :: preprocess_control
180 real(kind=
rp),
intent(in) :: preprocess_value
181 character(len=*),
intent(in) :: compute_control
182 real(kind=
rp),
intent(in) :: compute_value
183 character(len=*),
intent(in) :: output_control
184 real(kind=
rp),
intent(in) :: output_value
185 real(kind=
rp),
intent(in) :: start_time
186 character(len=*),
intent(in) :: avg_dir
187 type(
coef_t),
intent(inout) :: coef
188 character(len=*),
intent(in),
optional :: filename
189 integer,
intent(in),
optional :: precision
191 call this%init_base_from_components(
case, order, preprocess_control, &
192 preprocess_value, compute_control, compute_value, output_control, &
194 call this%init_common(start_time, coef, avg_dir, filename, precision)
206 character(len=*),
intent(in) :: filename
207 integer,
intent(in),
optional :: precision
208 real(kind=
rp),
intent(in) :: start_time
209 character(len=*),
intent(in) :: avg_dir
210 type(
coef_t),
intent(inout) :: coef
212 type(
field_t),
pointer :: field_to_avg
214 this%start_time = start_time
215 this%time = start_time
218 allocate(this%mean_fields(this%n_avg_fields))
219 do i = 1, this%n_avg_fields
221 call this%mean_fields(i)%init(field_to_avg)
224 call this%output%init(this%mean_fields, this%n_avg_fields, &
225 this%start_time, coef, avg_dir, name=filename)
226 call this%case%output_controller%add(this%output, &
227 this%output_controller%control_value, &
228 this%output_controller%control_mode)
236 call this%free_base()
238 if (
allocated(this%mean_fields))
then
239 do i = 1, this%n_avg_fields
240 call this%mean_fields(i)%free()
242 deallocate(this%mean_fields)
245 if (
allocated(this%field_names))
then
246 deallocate(this%field_names)
259 if (time%t .ge. this%start_time)
then
260 do i = 1, this%n_avg_fields
261 call this%mean_fields(i)%update(time%t - this%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.
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.
Defines an output for a list of mean fields.
integer, parameter, public dp
integer, parameter, public sp
integer, parameter, public rp
Global precision used in computations.
Implements output_controller_t
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.
Contains the time_based_controller_t type.
Module with things related to the simulation time.
Implements the user_stats_t type.
subroutine user_stats_free(this)
Destructor.
subroutine user_stats_compute(this, time)
Update the running averages.
subroutine user_stats_restart(this, time)
subroutine user_stats_init_from_controllers_properties(this, case, order, preprocess_control, preprocess_value, compute_control, compute_value, output_control, output_value, start_time, coef, avg_dir, filename, precision)
Constructor from components, passing properties to the time_based_controller` components in the base ...
subroutine user_stats_init_from_json(this, json, case)
Constructor from json.
subroutine user_stats_init_from_controllers(this, case, order, preprocess_controller, compute_controller, output_controller, start_time, coef, avg_dir, filename, precision)
Constructor from components, passing controllers.
subroutine user_stats_init_common(this, start_time, coef, avg_dir, filename, precision)
Common part of constructors.
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
Computes the temporal mean of a field.
Output for a list of mean fields.
Base abstract class for simulation components.
A utility type for determining whether an action should be executed based on the current time value....
A struct that contains all info about the time, expand as needed.
A simulation component that computes the averages of fields in the registry.