38 use json_module,
only : json_file
60 real(kind=
rp),
pointer,
contiguous :: dr(:,:,:,:)
62 real(kind=
rp),
pointer,
contiguous :: ds(:,:,:,:)
64 real(kind=
rp),
pointer,
contiguous :: 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=:),
allocatable :: name
100 character(len=20) :: fields(1)
105 call json_get(json,
"field", field_name)
106 call json_get(json,
"direction", direction)
109 "d" // trim(field_name) //
"_d" // direction)
111 fields(1) = trim(computed_field)
112 call json%add(
"fields", fields)
114 call this%init_base(json,
case)
115 call this%writer%init(json,
case)
117 call this%init_common(name, field_name, computed_field, direction)
128 character(len=*) :: name
129 character(len=*) :: field_name
130 character(len=*) :: computed_field
131 character(len=*) :: direction
137 "d" // field_name //
"_d" // direction)
139 if (direction .eq.
"x")
then
140 this%dr => this%case%fluid%c_Xh%drdx
141 this%ds => this%case%fluid%c_Xh%dsdx
142 this%dt => this%case%fluid%c_Xh%dtdx
143 else if (direction .eq.
"y")
then
144 this%dr => this%case%fluid%c_Xh%drdy
145 this%ds => this%case%fluid%c_Xh%dsdy
146 this%dt => this%case%fluid%c_Xh%dtdy
147 else if (direction .eq.
"z")
then
148 this%dr => this%case%fluid%c_Xh%drdz
149 this%ds => this%case%fluid%c_Xh%dsdz
150 this%dt => this%case%fluid%c_Xh%dtdz
152 call neko_error(
"The direction of the derivative must be x, y or z")
170 preprocess_controller, compute_controller, output_controller, &
171 field_name, computed_field, direction, filename, precision)
173 character(len=*),
intent(in) :: name
174 class(
case_t),
intent(inout),
target :: case
179 character(len=*) :: field_name
180 character(len=*) :: computed_field
181 character(len=*) :: direction
182 character(len=*),
intent(in),
optional :: filename
183 integer,
intent(in),
optional :: precision
185 character(len=20) :: fields(1)
187 fields(1) = trim(computed_field)
189 call this%init_base_from_components(
case, order, preprocess_controller, &
191 call this%writer%init_from_components(
"field_writer",
case, order, &
194 call this%init_common(name, field_name, computed_field, direction)
217 case, order, preprocess_control, preprocess_value, compute_control, &
218 compute_value, output_control, output_value, field_name, &
219 computed_field, direction, filename, precision)
221 character(len=*),
intent(in) :: name
222 class(
case_t),
intent(inout),
target :: case
224 character(len=*),
intent(in) :: preprocess_control
225 real(kind=
rp),
intent(in) :: preprocess_value
226 character(len=*),
intent(in) :: compute_control
227 real(kind=
rp),
intent(in) :: compute_value
228 character(len=*),
intent(in) :: output_control
229 real(kind=
rp),
intent(in) :: output_value
230 character(len=*) :: field_name
231 character(len=*) :: computed_field
232 character(len=*) :: direction
233 character(len=*),
intent(in),
optional :: filename
234 integer,
intent(in),
optional :: precision
236 character(len=20) :: fields(1)
238 fields(1) = trim(computed_field)
240 call this%init_base_from_components(
case, order, preprocess_control, &
241 preprocess_value, compute_control, compute_value, output_control, &
243 call this%writer%init_from_components(
"field_writer",
case, order, &
244 preprocess_control, preprocess_value, compute_control, compute_value, &
245 output_control, output_value, fields, filename, precision)
246 call this%init_common(name, field_name, computed_field, direction)
254 call this%free_base()
255 call this%writer%free()
269 call dudxyz(this%du%x, this%u%x, this%dr, this%ds, this%dt,&
270 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_init_common(this, name, field_name, computed_field, direction)
Common part of constructors from components.
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(this, name, case, order, preprocess_controller, compute_controller, output_controller, field_name, computed_field, direction, filename, precision)
Constructor from components, passing controllers.
subroutine derivative_init_from_controllers_properties(this, name, 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 ...
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
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 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.