47 use json_module,
only : json_file
89 type(
field_t),
intent(inout) :: s
90 type(
coef_t),
intent(in) :: coef
91 type(
gs_t),
intent(inout) :: gs
92 character(len=*) :: type
93 type(json_file),
intent(inout) :: params
94 integer,
intent(in) :: i
97 real(kind=
rp) :: ic_value
98 character(len=:),
allocatable :: read_str
99 real(kind=
rp) :: zone_value
101 select case (trim(type))
109 call json_get(params,
'value', read_str)
111 if (
allocated(read_str))
deallocate(read_str)
116 call json_get(params,
'zone_name', read_str)
124 character(len=NEKO_FNAME_LEN) :: fname, mesh_fname
125 logical :: interpolate
126 type(json_file) :: interp_subdict
127 integer :: tgt_scal_idx
129 call json_get(params,
'file_name', read_str)
130 fname = trim(read_str)
133 mesh_fname = trim(read_str)
143 tgt_scal_idx, interp_subdict)
166 character(len=*),
intent(in) :: scheme_name
167 type(field_t),
target,
intent(inout) :: s
168 type(coef_t),
intent(in) :: coef
169 type(gs_t),
intent(inout) :: gs
170 procedure(user_initial_conditions_intf) :: user_proc
171 real(kind=rp) :: sm, init
172 type(field_list_t) :: fields
174 call neko_log%message(
"Type: user")
177 call fields%assign_to_field(1, s)
180 call field_cfill(s, init)
182 call user_proc(scheme_name, fields)
185 if (abscmp(sm, init))
call neko_error(
'Initial condition did not set s')
200 type(field_t),
intent(inout) :: s
201 type(coef_t),
intent(in) :: coef
202 type(gs_t),
intent(inout) :: gs
208 call gs%op(s%x, n, gs_op_add)
210 if (neko_bcknd_device .eq. 1)
then
211 call device_col2(s%x_d, coef%mult_d, n)
213 call col2(s%x, coef%mult, n)
223 type(field_t),
intent(inout) :: s
224 real(kind=rp),
intent(in) :: ic_value
226 character(len=LOG_SIZE) :: log_buf
228 call neko_log%message(
"Type : uniform")
229 write (log_buf,
'(A,ES12.6)')
"Value: ", ic_value
230 call neko_log%message(log_buf)
232 call field_cfill(s, ic_value)
245 type(field_t),
intent(inout) :: s
246 character(len=*),
intent(in) :: expr
248 call neko_log%message(
"Type : expression")
249 call neko_log%message(
"Value: " // trim(expr))
251 call expression_eval_static(expr, s%x, s%dof%size(), &
252 s%dof%x%x, s%dof%y%x, s%dof%z%x,
'scalar initial condition')
253 call s%copy_from(host_to_device, .true.)
265 type(field_t),
intent(inout) :: s
266 real(kind=rp),
intent(in) :: base_value
267 character(len=*),
intent(in) :: zone_name
268 real(kind=rp),
intent(in) :: zone_value
271 character(len=LOG_SIZE) :: log_buf
272 class(point_zone_t),
pointer :: zone
275 call neko_log%message(
"Type : point_zone")
276 write (log_buf,
'(A,ES12.6)')
"Base value: ", base_value
277 call neko_log%message(log_buf)
278 call neko_log%message(
"Zone name : " // trim(zone_name))
279 write (log_buf,
'(A,ES12.6)')
"Zone value: ", zone_value
280 call neko_log%message(log_buf)
283 zone => neko_point_zone_registry%get_point_zone(trim(zone_name))
285 call cfill(s%x, base_value, size)
286 call cfill_mask(s%x, zone_value,
size, zone%mask%get(), zone%size)
287 call s%copy_from(host_to_device, .true.)
307 interpolate, mesh_file_name, i, target_idx, global_interp_subdict)
308 type(field_t),
target,
intent(inout) :: s
309 character(len=*),
intent(in) :: file_name
310 logical,
intent(in) :: interpolate
311 character(len=*),
intent(inout) :: mesh_file_name
312 integer,
intent(in) :: i
313 integer,
intent(in) :: target_idx
314 type(json_file),
intent(inout) :: global_interp_subdict
316 character(len=LOG_SIZE) :: log_buf
317 type(field_t),
pointer :: ss
318 type(field_list_t) :: s_tgt_list
320 if (i .ne. target_idx)
then
321 write (log_buf,
'(A,I0,A,I0)')
"Loading scalar #", target_idx, &
323 call neko_log%message(log_buf)
330 call s_tgt_list%init(1)
331 call s_tgt_list%assign(1, ss)
333 call import_fields(file_name, global_interp_subdict, mesh_file_name, &
334 s_target_list = s_tgt_list, &
335 s_index_list = [target_idx], &
336 interpolate = interpolate)
338 call s_tgt_list%free()
Copy data between host and device (or device and device)
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.
Abstract interface for user defined initial conditions.
Defines format-independent checkpoint registration and restart state.
subroutine, public device_col2(a_d, b_d, n, strm)
Vector multiplication .
Device abstraction, common interface for various accelerators.
integer, parameter, public host_to_device
integer, parameter, public device_to_host
Evaluation of mathematical expressions given as strings in the case file.
subroutine, public expression_eval_static(str, res, n, x, y, z, usage)
Compile an expression and evaluate it in a set of points, in a context where there is no time state.
real(kind=rp) function, public field_glmin(a, n)
Global minimum of all elements in a field .
subroutine, public field_cfill(a, c, n)
Set all elements to a constant c .
Module for file I/O operations.
Simple module to handle fld file series. Provides an interface to the different fields sotred in a fl...
Implements global_interpolation given a dofmap.
Importation of fields from fld files.
Routines to interpolate between different spaces.
Utilities for retrieving parameters from the case files.
subroutine, public json_get_subdict_or_empty(json, key, output)
Extract a sub-object from a json object and returns an empty object if the key is missing.
type(log_t), public neko_log
Global log stream.
integer, parameter, public log_size
subroutine, public cfill(a, c, n)
Set all elements to a constant c .
subroutine, public col2(a, b, n)
Vector multiplication .
subroutine, public cfill_mask(a, c, n, mask, n_mask)
Fill a constant to a masked vector. .
integer, parameter neko_bcknd_device
integer, parameter, public rp
Global precision used in computations.
type(point_zone_registry_t), target, public neko_point_zone_registry
Global point_zone registry.
Scalar initial condition.
subroutine set_scalar_ic_uniform(s, ic_value)
Uniform initial condition.
subroutine set_scalar_ic_fld(s, file_name, interpolate, mesh_file_name, i, target_idx, global_interp_subdict)
Set the initial condition of the scalar based on a field. @detail The field is read from an fld file....
subroutine set_scalar_ic_point_zone(s, base_value, zone_name, zone_value)
Point zone initial condition.
subroutine set_scalar_ic_common(s, coef, gs)
Set scalar initial condition (common)
subroutine set_scalar_ic_int(s, coef, gs, type, params, i)
Set scalar initial condition (builtin)
subroutine set_scalar_ic_expression(s, expr)
Expression initial condition.
subroutine set_scalar_ic_usr(scheme_name, s, coef, gs, user_proc)
Set scalar intial condition (user defined)
Defines a function space.
integer, parameter, public gll
Interfaces for user interaction with NEKO.
integer function, public extract_fld_file_index(fld_filename, default_index)
Extracts the index of a field file. For example, "myfield.f00045" will return 45. If the suffix of th...
integer, parameter, public neko_fname_len
subroutine, public neko_warning(warning_msg)
Reports a warning to standard output.
subroutine, public filename_chsuffix(fname, new_fname, new_suffix)
Change a filename's suffix.
subroutine, public filename_suffix(fname, suffix)
Extract a filename's suffix.
Collection of live simulation data registered for checkpointing.
Coefficients defined on a given (mesh, ) tuple. Arrays use indices (i,j,k,e): element e,...
field_list_t, To be able to group fields together
A wrapper around a polymorphic generic_file_t that handles its init. This is essentially a factory fo...
Interface for NEKTON fld files.
Implements global interpolation for arbitrary points in the domain.
Interpolation between two space::space_t.
Base abstract type for point zones.
The function space for the SEM solution fields.