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=NEKO_VARNAME_LEN) :: 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=NEKO_VARNAME_LEN) :: 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=NEKO_VARNAME_LEN) :: 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.
Compute derivative of a scalar field along a single direction.
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.
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.
integer, parameter, public neko_varname_len
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.