97 subroutine reset(neko_case, design_iteration, output_base_fname)
98 type(case_t),
intent(inout) :: neko_case
99 integer,
intent(in) :: design_iteration
100 character(len=*),
intent(in) :: output_base_fname
103 character(len=:),
allocatable :: string_val
104 logical :: has_scalar, freezeflow
105 type(field_t),
pointer :: u, v, w, p, s
106 type(json_file) :: json_subdict
112 u => neko_case%fluid%u
113 v => neko_case%fluid%v
114 w => neko_case%fluid%w
115 p => neko_case%fluid%p
116 if (
allocated(neko_case%scalars))
then
117 s => neko_case%scalars%scalar_fields(1)%scalar%s
126 call neko_case%time%reset()
127 t = neko_case%time%start_time
128 do i = 1,
size(neko_case%time%tlag)
129 neko_case%time%tlag(i) = t - i*neko_case%time%dtlag(i)
138 call neko_case%f_out%file_%file_type%init( &
139 trim(design_iteration_fname(output_base_fname, design_iteration)))
142 call neko_case%output_controller%set_counter(neko_case%time)
147 call neko_case%f_out%set_start_counter(0)
148 call neko_case%f_out%set_counter(-1)
151 call neko_case%fluid%restart(neko_case%chkp)
152 if (
allocated(neko_case%scalars))
then
153 call neko_case%scalars%restart(neko_case%chkp)
157 do i = 1,
size(neko_case%time%dtlag)
158 call neko_case%fluid%ext_bdf%set_coeffs(neko_case%time%dtlag)
162 call neko_simcomps%restart(neko_case%time)
168 call json_get(neko_case%params, &
169 'case.fluid.initial_condition.type', string_val)
170 call json_get(neko_case%params,
'case.fluid.initial_condition', &
179 if (trim(string_val) .ne.
'user')
then
180 call set_flow_ic(u, v, w, p, &
181 neko_case%fluid%c_Xh, neko_case%fluid%gs_Xh, &
182 string_val, json_subdict)
184 call set_flow_ic(u, v, w, p, &
185 neko_case%fluid%c_Xh, neko_case%fluid%gs_Xh, &
186 neko_case%user%initial_conditions, neko_case%fluid%name)
190 call neko_case%fluid%ulag%set(u)
191 call neko_case%fluid%vlag%set(v)
192 call neko_case%fluid%wlag%set(w)
194 select type (f => neko_case%fluid)
195 type is (fluid_pnpn_t)
196 call field_rzero(f%abx1)
197 call field_rzero(f%aby1)
198 call field_rzero(f%abz1)
199 call field_rzero(f%abx2)
200 call field_rzero(f%aby2)
201 call field_rzero(f%abz2)
202 call field_copy(f%u_e, u)
203 call field_copy(f%v_e, v)
204 call field_copy(f%w_e, w)
206 call field_rzero(neko_case%fluid%f_x)
207 call field_rzero(neko_case%fluid%f_y)
208 call field_rzero(neko_case%fluid%f_z)
214 call json_get_or_default(neko_case%params, &
215 'case.scalar.enabled', has_scalar, .false.)
219 if (
size(neko_case%scalars%scalar_fields) .gt. 1)
then
220 call neko_error(
'Multiple scalars not supported')
223 call field_rzero(neko_case%scalars%scalar_fields(1)%scalar%f_Xh)
226 select type (s_scheme => &
227 neko_case%scalars%scalar_fields(1)%scalar)
228 type is (scalar_pnpn_t)
229 call field_rzero(s_scheme%abx1)
230 call field_rzero(s_scheme%abx2)
234 call json_get(neko_case%params, &
235 'case.scalar.initial_condition.type', string_val)
236 call json_get(neko_case%params, &
237 'case.scalar.initial_condition', json_subdict)
238 if (trim(string_val) .ne.
'user')
then
239 if (trim(neko_case%scalars%scalar_fields(1)%scalar%name) .eq. &
241 call set_scalar_ic(neko_case%scalars%scalar_fields(1)%scalar%s, &
242 neko_case%fluid%c_Xh, neko_case%fluid%gs_Xh, string_val, &
245 call set_scalar_ic(neko_case%scalars%scalar_fields(1)%scalar%s, &
246 neko_case%fluid%c_Xh, neko_case%fluid%gs_Xh, string_val, &
250 call set_scalar_ic(neko_case%scalars%scalar_fields(1)%scalar%name, &
251 neko_case%scalars%scalar_fields(1)%scalar%s, &
252 neko_case%scalars%scalar_fields(1)%scalar%c_Xh, &
253 neko_case%scalars%scalar_fields(1)%scalar%gs_Xh, &
254 neko_case%user%initial_conditions)
257 call neko_case%scalars%scalar_fields(1)%scalar%slag%set(&
258 neko_case%scalars%scalar_fields(1)%scalar%s)
265 call json_get_or_default(neko_case%params, &
266 'case.fluid.freeze_flow', freezeflow, .false.)
268 neko_case%fluid%freeze = freezeflow
291 type(case_t),
intent(inout) :: neko_case
292 integer,
intent(in) :: design_iteration
293 character(len=*),
intent(in) :: output_base_fname
296 character(len=:),
allocatable :: string_val
297 logical :: has_scalar, freezeflow
298 type(field_t),
pointer :: u_adj, v_adj, w_adj, p_adj, s_adj
299 type(json_file) :: json_subdict
305 u_adj => adjoint_case%fluid_adj%u_adj
306 v_adj => adjoint_case%fluid_adj%v_adj
307 w_adj => adjoint_case%fluid_adj%w_adj
308 p_adj => adjoint_case%fluid_adj%p_adj
309 if (
allocated(adjoint_case%adjoint_scalars))
then
310 s_adj => adjoint_case%adjoint_scalars%adjoint_scalar_fields(1)%s_adj
319 call adjoint_case%time%reset()
320 t = adjoint_case%time%start_time
321 do i = 1,
size(adjoint_case%time%tlag)
322 adjoint_case%time%tlag(i) = t - i*adjoint_case%time%dtlag(i)
329 call adjoint_case%f_out%file_%file_type%init( &
330 trim(design_iteration_fname(output_base_fname, design_iteration)))
333 call adjoint_case%output_controller%set_counter(adjoint_case%time)
334 if (adjoint_case%norm_output_enabled)
then
335 call adjoint_case%norm_output_ctrl%set_counter(adjoint_case%time)
339 call adjoint_case%f_out%set_start_counter(0)
340 call adjoint_case%f_out%set_counter(-1)
343 do i = 1,
size(adjoint_case%time%dtlag)
344 call adjoint_case%fluid_adj%ext_bdf%set_coeffs(adjoint_case%time%dtlag)
352 call json_get(neko_case%params, &
353 'case.adjoint_fluid.initial_condition.type', string_val)
354 call json_get(neko_case%params,
'case.adjoint_fluid.initial_condition', &
358 call field_rzero(p_adj)
359 call field_rzero(u_adj)
360 call field_rzero(v_adj)
361 call field_rzero(w_adj)
363 if (trim(string_val) .ne.
'user')
then
364 call set_flow_ic(u_adj, v_adj, w_adj, p_adj, &
365 adjoint_case%fluid_adj%c_Xh, adjoint_case%fluid_adj%gs_Xh, &
366 string_val, json_subdict)
368 call neko_error(
"adjoint user initial conditions not supported")
372 call adjoint_case%fluid_adj%ulag%set(u_adj)
373 call adjoint_case%fluid_adj%vlag%set(v_adj)
374 call adjoint_case%fluid_adj%wlag%set(w_adj)
376 select type (f => adjoint_case%fluid_adj)
378 call field_rzero(f%abx1)
379 call field_rzero(f%aby1)
380 call field_rzero(f%abz1)
381 call field_rzero(f%abx2)
382 call field_rzero(f%aby2)
383 call field_rzero(f%abz2)
387 call field_rzero(adjoint_case%fluid_adj%f_adj_x)
388 call field_rzero(adjoint_case%fluid_adj%f_adj_y)
389 call field_rzero(adjoint_case%fluid_adj%f_adj_z)
395 call json_get_or_default(neko_case%params,
'case.scalar.enabled', &
400 if (
size(adjoint_case%adjoint_scalars%adjoint_scalar_fields) .gt. 1)
then
401 call neko_error(
'Multiple adjoint scalars not supported')
405 adjoint_case%adjoint_scalars%adjoint_scalar_fields(1)%f_Xh)
408 select type (s_scheme => &
409 adjoint_case%adjoint_scalars%adjoint_scalar_fields(1))
411 call field_rzero(s_scheme%abx1)
412 call field_rzero(s_scheme%abx2)
416 call json_get(neko_case%params, &
417 'case.adjoint_scalar.initial_condition.type', string_val)
418 call json_get(neko_case%params, &
419 'case.adjoint_scalar.initial_condition', json_subdict)
420 if (trim(string_val) .ne.
'user')
then
421 if (trim(neko_case%scalars%scalar_fields(1)%scalar%name) .eq. &
423 call set_scalar_ic( &
424 adjoint_case%adjoint_scalars%adjoint_scalar_fields(1)%s_adj, &
425 adjoint_case%fluid_adj%c_Xh, adjoint_case%fluid_adj%gs_Xh, &
426 string_val, json_subdict, 0)
428 call set_scalar_ic( &
429 adjoint_case%adjoint_scalars%adjoint_scalar_fields(1)%s_adj, &
430 adjoint_case%fluid_adj%c_Xh, adjoint_case%fluid_adj%gs_Xh, &
431 string_val, json_subdict, 1)
434 call neko_error(
"adjoint scalar user IC not supported")
437 call adjoint_case%adjoint_scalars%adjoint_scalar_fields(1)%s_adj_lag% &
438 set(adjoint_case%adjoint_scalars%adjoint_scalar_fields(1)%s_adj)
445 call json_get_or_default(neko_case%params, &
446 'case.adjoint_fluid.freeze_flow', freezeflow, .false.)
448 adjoint_case%fluid_adj%freeze = freezeflow