95 subroutine reset(neko_case, design_iteration, output_base_fname)
96 type(case_t),
intent(inout) :: neko_case
97 integer,
intent(in) :: design_iteration
98 character(len=*),
intent(in) :: output_base_fname
101 character(len=:),
allocatable :: string_val
102 logical :: has_scalar, freezeflow
103 type(field_t),
pointer :: u, v, w, p, s
104 type(json_file) :: json_subdict
110 u => neko_case%fluid%u
111 v => neko_case%fluid%v
112 w => neko_case%fluid%w
113 p => neko_case%fluid%p
114 if (
allocated(neko_case%scalars))
then
115 s => neko_case%scalars%scalar_fields(1)%scalar%s
124 call neko_case%time%reset()
125 t = neko_case%time%start_time
126 do i = 1,
size(neko_case%time%tlag)
127 neko_case%time%tlag(i) = t - i*neko_case%time%dtlag(i)
136 call neko_case%f_out%file_%file_type%init( &
137 trim(design_iteration_fname(output_base_fname, design_iteration)))
140 call neko_case%output_controller%set_counter(neko_case%time)
145 call neko_case%f_out%set_start_counter(0)
146 call neko_case%f_out%set_counter(-1)
149 call neko_case%fluid%restart(neko_case%chkp)
150 if (
allocated(neko_case%scalars))
then
151 call neko_case%scalars%restart(neko_case%chkp)
155 do i = 1,
size(neko_case%time%dtlag)
156 call neko_case%fluid%ext_bdf%set_coeffs(neko_case%time%dtlag)
160 call neko_simcomps%restart(neko_case%time)
166 call json_get(neko_case%params, &
167 'case.fluid.initial_condition.type', string_val)
168 call json_get(neko_case%params,
'case.fluid.initial_condition', &
171 if (trim(string_val) .ne.
'user')
then
172 call set_flow_ic(u, v, w, p, &
173 neko_case%fluid%c_Xh, neko_case%fluid%gs_Xh, &
174 string_val, json_subdict)
176 call set_flow_ic(u, v, w, p, &
177 neko_case%fluid%c_Xh, neko_case%fluid%gs_Xh, &
178 neko_case%user%initial_conditions, neko_case%fluid%name)
182 call neko_case%fluid%ulag%set(u)
183 call neko_case%fluid%vlag%set(v)
184 call neko_case%fluid%wlag%set(w)
186 select type (f => neko_case%fluid)
187 type is (fluid_pnpn_t)
188 call field_rzero(f%abx1)
189 call field_rzero(f%aby1)
190 call field_rzero(f%abz1)
191 call field_rzero(f%abx2)
192 call field_rzero(f%aby2)
193 call field_rzero(f%abz2)
194 call field_copy(f%u_e, u)
195 call field_copy(f%v_e, v)
196 call field_copy(f%w_e, w)
198 call field_rzero(neko_case%fluid%f_x)
199 call field_rzero(neko_case%fluid%f_y)
200 call field_rzero(neko_case%fluid%f_z)
206 call json_get_or_default(neko_case%params, &
207 'case.scalar.enabled', has_scalar, .false.)
211 if (
size(neko_case%scalars%scalar_fields) .gt. 1)
then
212 call neko_error(
'Multiple scalars not supported')
215 call field_rzero(neko_case%scalars%scalar_fields(1)%scalar%f_Xh)
217 call json_get(neko_case%params, &
218 'case.scalar.initial_condition.type', string_val)
219 call json_get(neko_case%params, &
220 'case.scalar.initial_condition', json_subdict)
221 if (trim(string_val) .ne.
'user')
then
222 if (trim(neko_case%scalars%scalar_fields(1)%scalar%name) .eq. &
224 call set_scalar_ic(neko_case%scalars%scalar_fields(1)%scalar%s, &
225 neko_case%fluid%c_Xh, neko_case%fluid%gs_Xh, string_val, &
228 call set_scalar_ic(neko_case%scalars%scalar_fields(1)%scalar%s, &
229 neko_case%fluid%c_Xh, neko_case%fluid%gs_Xh, string_val, &
233 call set_scalar_ic(neko_case%scalars%scalar_fields(1)%scalar%name, &
234 neko_case%scalars%scalar_fields(1)%scalar%s, &
235 neko_case%scalars%scalar_fields(1)%scalar%c_Xh, &
236 neko_case%scalars%scalar_fields(1)%scalar%gs_Xh, &
237 neko_case%user%initial_conditions)
240 call neko_case%scalars%scalar_fields(1)%scalar%slag%set(&
241 neko_case%scalars%scalar_fields(1)%scalar%s)
248 call json_get_or_default(neko_case%params, &
249 'case.fluid.freeze_flow', freezeflow, .false.)
251 neko_case%fluid%freeze = freezeflow
274 type(case_t),
intent(inout) :: neko_case
275 integer,
intent(in) :: design_iteration
276 character(len=*),
intent(in) :: output_base_fname
279 character(len=:),
allocatable :: string_val
280 logical :: has_scalar, freezeflow
281 type(field_t),
pointer :: u_adj, v_adj, w_adj, p_adj, s_adj
282 type(json_file) :: json_subdict
288 u_adj => adjoint_case%fluid_adj%u_adj
289 v_adj => adjoint_case%fluid_adj%v_adj
290 w_adj => adjoint_case%fluid_adj%w_adj
291 p_adj => adjoint_case%fluid_adj%p_adj
292 if (
allocated(adjoint_case%adjoint_scalars))
then
293 s_adj => adjoint_case%adjoint_scalars%adjoint_scalar_fields(1)%s_adj
302 call adjoint_case%time%reset()
303 t = adjoint_case%time%start_time
304 do i = 1,
size(adjoint_case%time%tlag)
305 adjoint_case%time%tlag(i) = t - i*adjoint_case%time%dtlag(i)
312 call adjoint_case%f_out%file_%file_type%init( &
313 trim(design_iteration_fname(output_base_fname, design_iteration)))
316 call adjoint_case%output_controller%set_counter(adjoint_case%time)
317 if (adjoint_case%norm_output_enabled)
then
318 call adjoint_case%norm_output_ctrl%set_counter(adjoint_case%time)
322 call adjoint_case%f_out%set_start_counter(0)
323 call adjoint_case%f_out%set_counter(-1)
326 do i = 1,
size(adjoint_case%time%dtlag)
327 call adjoint_case%fluid_adj%ext_bdf%set_coeffs(adjoint_case%time%dtlag)
335 call json_get(neko_case%params, &
336 'case.adjoint_fluid.initial_condition.type', string_val)
337 call json_get(neko_case%params,
'case.adjoint_fluid.initial_condition', &
340 if (trim(string_val) .ne.
'user')
then
341 call set_flow_ic(u_adj, v_adj, w_adj, p_adj, &
342 adjoint_case%fluid_adj%c_Xh, adjoint_case%fluid_adj%gs_Xh, &
343 string_val, json_subdict)
345 call neko_error(
"adjoint user initial conditions not supported")
349 call adjoint_case%fluid_adj%ulag%set(u_adj)
350 call adjoint_case%fluid_adj%vlag%set(v_adj)
351 call adjoint_case%fluid_adj%wlag%set(w_adj)
353 select type (f => adjoint_case%fluid_adj)
355 call field_rzero(f%abx1)
356 call field_rzero(f%aby1)
357 call field_rzero(f%abz1)
358 call field_rzero(f%abx2)
359 call field_rzero(f%aby2)
360 call field_rzero(f%abz2)
364 call field_rzero(adjoint_case%fluid_adj%f_adj_x)
365 call field_rzero(adjoint_case%fluid_adj%f_adj_y)
366 call field_rzero(adjoint_case%fluid_adj%f_adj_z)
372 call json_get_or_default(neko_case%params,
'case.scalar.enabled', &
377 if (
size(adjoint_case%adjoint_scalars%adjoint_scalar_fields) .gt. 1)
then
378 call neko_error(
'Multiple adjoint scalars not supported')
382 adjoint_case%adjoint_scalars%adjoint_scalar_fields(1)%f_Xh)
384 call json_get(neko_case%params, &
385 'case.adjoint_scalar.initial_condition.type', string_val)
386 call json_get(neko_case%params, &
387 'case.adjoint_scalar.initial_condition', json_subdict)
388 if (trim(string_val) .ne.
'user')
then
389 if (trim(neko_case%scalars%scalar_fields(1)%scalar%name) .eq. &
391 call set_scalar_ic( &
392 adjoint_case%adjoint_scalars%adjoint_scalar_fields(1)%s_adj, &
393 adjoint_case%fluid_adj%c_Xh, adjoint_case%fluid_adj%gs_Xh, &
394 string_val, json_subdict, 0)
396 call set_scalar_ic( &
397 adjoint_case%adjoint_scalars%adjoint_scalar_fields(1)%s_adj, &
398 adjoint_case%fluid_adj%c_Xh, adjoint_case%fluid_adj%gs_Xh, &
399 string_val, json_subdict, 1)
402 call neko_error(
"adjoint scalar user IC not supported")
405 call adjoint_case%adjoint_scalars%adjoint_scalar_fields(1)%s_adj_lag% &
406 set(adjoint_case%adjoint_scalars%adjoint_scalar_fields(1)%s_adj)
413 call json_get_or_default(neko_case%params, &
414 'case.adjoint_fluid.freeze_flow', freezeflow, .false.)
416 adjoint_case%fluid_adj%freeze = freezeflow