38 use json_module,
only : json_file
60 real(kind=
rp),
pointer :: dr(:,:,:,:)
62 real(kind=
rp),
pointer :: ds(:,:,:,:)
64 real(kind=
rp),
pointer :: dt(:,:,:,:)
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 => &
94 type(json_file),
intent(inout) :: json
95 class(
case_t),
intent(inout),
target :: case
96 character(len=:),
allocatable :: field_name
97 character(len=:),
allocatable :: direction
98 character(len=:),
allocatable :: computed_field
99 character(len=20) :: fields(1)
103 call json_get(json,
"field", field_name)
104 call json_get(json,
"direction", direction)
107 "d" // trim(field_name) //
"_d" // direction)
109 fields(1) = trim(computed_field)
110 call json%add(
"fields", fields)
112 call this%init_base(json,
case)
113 call this%writer%init(json,
case)
115 call this%init_common(field_name, computed_field, direction)
125 character(len=*) :: field_name
126 character(len=*) :: computed_field
127 character(len=*) :: direction
132 "d" // field_name //
"_d" // direction)
134 if (direction .eq.
"x")
then
135 this%dr => this%case%fluid%c_Xh%drdx
136 this%ds => this%case%fluid%c_Xh%dsdx
137 this%dt => this%case%fluid%c_Xh%dtdx
138 else if (direction .eq.
"y")
then
139 this%dr => this%case%fluid%c_Xh%drdy
140 this%ds => this%case%fluid%c_Xh%dsdy
141 this%dt => this%case%fluid%c_Xh%dtdy
142 else if (direction .eq.
"z")
then
143 this%dr => this%case%fluid%c_Xh%drdz
144 this%ds => this%case%fluid%c_Xh%dsdz
145 this%dt => this%case%fluid%c_Xh%dtdz
147 call neko_error(
"The direction of the derivative must be x, y or z")
164 preprocess_controller, compute_controller, output_controller, &
165 field_name, computed_field, direction, filename, precision)
167 class(
case_t),
intent(inout),
target :: case
172 character(len=*) :: field_name
173 character(len=*) :: computed_field
174 character(len=*) :: direction
175 character(len=*),
intent(in),
optional :: filename
176 integer,
intent(in),
optional :: precision
178 character(len=20) :: fields(1)
180 fields(1) = trim(computed_field)
182 call this%init_base_from_components(
case, order, preprocess_controller, &
184 call this%writer%init_from_components(
case, order, preprocess_controller, &
186 call this%init_common(field_name, computed_field, direction)
208 case, order, preprocess_control, preprocess_value, compute_control, &
209 compute_value, output_control, output_value, field_name, &
210 computed_field, direction, filename, precision)
212 class(
case_t),
intent(inout),
target :: case
214 character(len=*),
intent(in) :: preprocess_control
215 real(kind=
rp),
intent(in) :: preprocess_value
216 character(len=*),
intent(in) :: compute_control
217 real(kind=
rp),
intent(in) :: compute_value
218 character(len=*),
intent(in) :: output_control
219 real(kind=
rp),
intent(in) :: output_value
220 character(len=*) :: field_name
221 character(len=*) :: computed_field
222 character(len=*) :: direction
223 character(len=*),
intent(in),
optional :: filename
224 integer,
intent(in),
optional :: precision
226 character(len=20) :: fields(1)
228 fields(1) = trim(computed_field)
230 call this%init_base_from_components(
case, order, preprocess_control, &
231 preprocess_value, compute_control, compute_value, output_control, &
233 call this%writer%init_from_components(
case, order, preprocess_control, &
234 preprocess_value, compute_control, compute_value, output_control, &
235 output_value, fields, filename, precision)
236 call this%init_common(field_name, computed_field, direction)
244 call this%free_base()
245 call this%writer%free()
259 call dudxyz(this%du%x, this%u%x, this%dr, this%ds, this%dt,&
260 this%case%fluid%c_Xh)
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.
Implements the derivative_t type.
subroutine derivative_free(this)
Destructor.
subroutine derivative_compute(this, time)
Compute the derivative field.
subroutine derivative_init_from_json(this, json, case)
Constructor from json.
subroutine derivative_init_from_controllers_properties(this, case, order, preprocess_control, preprocess_value, compute_control, compute_value, output_control, output_value, field_name, computed_field, direction, filename, precision)
Constructor from components, passing properties to the time_based_controller` components in the base ...
subroutine derivative_init_common(this, field_name, computed_field, direction)
Common part of constructors from components.
subroutine derivative_init_from_controllers(this, case, order, preprocess_controller, compute_controller, output_controller, field_name, computed_field, direction, filename, precision)
Constructor from components, passing controllers.
Defines a registry for storing solution fields.
type(field_registry_t), target, public neko_field_registry
Global field registry.
Implements the field_writer_t type.
Utilities for retrieving parameters from the case files.
integer, parameter, public dp
integer, parameter, public sp
integer, parameter, public rp
Global precision used in computations.
subroutine, public dudxyz(du, u, dr, ds, dt, coef)
Compute derivative of a scalar field along a single direction.
Implements output_controller_t
Simulation components are objects that encapsulate functionality that can be fit to a particular comp...
subroutine compute_(this, time)
Dummy compute function.
Contains the time_based_controller_t type.
Module with things related to the simulation time.
A simulation component that computes a derivative of a field. Wraps the duxyz operator.
A simulation component that writes a 3d field to a file.
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.