1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
6# 1 "/home/runner/work/MFC/MFC/src/common/include/case.fpp" 1
12# 8 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
15# 12 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
16# 6 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp" 2
17# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
18# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
19# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
20# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
21# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
23# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
26# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
27# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
30# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
32# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
34# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
36# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
38# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
40# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
42# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
44# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
46# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
47# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
48# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
49# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
52# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
59# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
61# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
63# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
65# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
67# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
69# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
71# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
73# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
75# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
77# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
78# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
79# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
80# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
81# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
83# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
85# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
87# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
91# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
93# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
95# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
97# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
99# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
115# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
119# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
121# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
123# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
127# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
140# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
142# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
144# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
146# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
148# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
150# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
152# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
154# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
155# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
156# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
157# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
158# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
159# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
160# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
163# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
164# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
165# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
167# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
169# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
171# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
173# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
175# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
177# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
179# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
181# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
183# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
185# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
187# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
189# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
191# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
193# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
195# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
197# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
199# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
201# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
203# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
205# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
207# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
223# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
225# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
227# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
229# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
231# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
233# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
235# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
237# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
239# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
241# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
244# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
247# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
250# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
253# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
256# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
259# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
262# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
265# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
268# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
271# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
274# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
277# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
280# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
283# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
286# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
289# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
292# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
295# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
298# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
300# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
301# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
303# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
305# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
310# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
313# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
316# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
319# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
322# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
325# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
327# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
329# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
331# 7 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp" 2
364#if defined(MFC_OpenACC)
365# 39 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
367# 39 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
368#elif defined(MFC_OpenMP)
369# 39 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
371# 39 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
405 if (.not. parallel_io)
then
416 character(LEN=name_len),
parameter :: file_path =
'./simulation.inp'
417 logical :: file_exist
421 character(len=1000) :: line
423# 1 "/home/runner/work/MFC/MFC/build/include/simulation/generated_namelist.fpp" 1
426# 19 "/home/runner/work/MFC/MFC/build/include/simulation/generated_namelist.fpp"
427namelist /user_inputs/ bx0, ca, r0ref, re_inv, web, acoustic, acoustic_source, adap_dt, adap_dt_max_iters, adap_dt_tol, adv_n, &
428 & alf_factor, alpha_bar, alt_soundspeed, avg_state,
bc_x,
bc_y,
bc_z, bf_x, bf_y, bf_z, bub_pp, bubble_model, bubbles_euler, &
429 & bubbles_lagrange, case_dir, cfl_adap_dt, cfl_const_dt, cfl_target, chem_params, coefficient_of_restitution, &
430 & collision_model, collision_time, cont_damage, cont_damage_s, cyl_coord, down_sample, dt, fd_order, fft_wrt, &
431 & file_per_process, fluid_pp, g_x, g_y, g_z, hyper_cleaning, hyper_cleaning_speed, hyper_cleaning_tau, hyperelasticity, &
432 & hypoelasticity, ib, ib_airfoil, ib_coefficient_of_friction, ib_neighborhood_radius, ib_state_wrt, ic_beta, ic_eps, &
433 & int_comp, integral, integral_wrt, k_x, k_y, k_z, lag_params, low_mach, m, many_ib_patch_parallelism, mixture_err, &
434 & model_eqns, mp_weno, mpp_lim, muscl_eps, n, n_start, null_weights, num_bc_patches, num_ibs, num_igr_iters, &
435 & num_igr_warm_start_iters, num_integrals, num_particle_clouds, num_probes, num_source, num_stl_models, &
436 & nv_uvm_igr_temps_on_gpu, nv_uvm_out_of_core, nv_uvm_pref_gpu, p, p_x, p_y, p_z, palpha_eps, parallel_io, particle_cloud, &
437 & patch_ib, pi_fac, poly_sigma, polydisperse, polytropic, precision, pref, prim_vars_wrt, probe, probe_wrt, ptgalpha_eps, &
438 & qbmm, rdma_mpi, relax, relax_model, rhoref, riemann_solver, run_time_info, sigma, stl_models, surface_tension, t_save, &
439 & t_step_old, t_step_print, t_step_save, t_step_start, t_step_stop, t_stop, tau_star, teno_ct, thermal, time_stepper, w_x, &
440 & w_y, w_z, wave_speeds, weno_re_flux, weno_avg, weno_eps, x_a, x_b,
x_domain, y_a, y_b,
y_domain, z_a, z_b,
z_domain, &
441 & igr, igr_iter_solver, igr_order, igr_pres_lim, mapped_weno, mhd, muscl_lim, muscl_order,
nb, num_fluids, recon_type, &
442 & relativity, teno, viscous, weno_order, wenoz, wenoz_q
443# 36 "/home/runner/work/MFC/MFC/build/include/simulation/generated_namelist.fpp"
444# 91 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp" 2
446 inquire (file=trim(file_path), exist=file_exist)
449 open (1, file=trim(file_path), form=
'formatted', action=
'read', status=
'old')
450 read (1, nml=user_inputs, iostat=iostatus)
452 if (iostatus /= 0)
then
454 read (1, fmt=
'(A)') line
455 print *,
'Invalid line in namelist: ' // trim(line)
456 call s_mpi_abort(
'Invalid line in simulation.inp. It is ' //
'likely due to a datatype mismatch. Exiting.')
461 if ((bf_x) .or. (bf_y) .or. (bf_z))
then
471 if (cfl_adap_dt .or. cfl_const_dt)
cfl_dt = .true.
477 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
485 character(LEN=path_len) :: file_path
486 logical :: file_exist
488 file_path = trim(case_dir) //
'/.'
492 if (file_exist .neqv. .true.)
then
493 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
505 character(LEN=path_len + 2*name_len) :: t_step_dir
506 character(LEN=path_len + 3*name_len) :: file_path
507 logical :: file_exist
511 write (t_step_dir,
'(A,I0,A,I0)') trim(case_dir) //
'/p_all/p',
proc_rank,
'/', n_start
513 write (t_step_dir,
'(A,I0,A,I0)') trim(case_dir) //
'/p_all/p',
proc_rank,
'/', t_step_start
516 file_path = trim(t_step_dir) //
'/.'
519 if (file_exist .neqv. .true.)
then
520 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
524 call s_read_serial_boundary_condition_files(t_step_dir,
bc_type)
526 call s_assign_default_bc_type(
bc_type)
529 file_path = trim(t_step_dir) //
'/x_cb.dat'
531 inquire (file=trim(file_path), exist=file_exist)
534 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
535 read (2)
x_cb(-1:m);
close (2)
537 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
544 file_path = trim(t_step_dir) //
'/y_cb.dat'
546 inquire (file=trim(file_path), exist=file_exist)
549 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
550 read (2)
y_cb(-1:n);
close (2)
552 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
560 file_path = trim(t_step_dir) //
'/z_cb.dat'
562 inquire (file=trim(file_path), exist=file_exist)
565 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
566 read (2)
z_cb(-1:p);
close (2)
568 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
576 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/q_cons_vf',
i,
'.dat'
577 inquire (file=trim(file_path), exist=file_exist)
579 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
580 read (2)
q_cons_vf(
i)%sf(0:m,0:n,0:p);
close (2)
582 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
586 if (bubbles_euler .or. elasticity)
then
588 if (qbmm .and. .not. polytropic)
then
591 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/pb', sys_size + (
i - 1)*
nnode +
r,
'.dat'
592 inquire (file=trim(file_path), exist=file_exist)
594 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
595 read (2)
pb_ts(1)%sf(0:m,0:n,0:p,
r,
i);
close (2)
597 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
603 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/mv', sys_size + (
i - 1)*
nnode +
r,
'.dat'
604 inquire (file=trim(file_path), exist=file_exist)
606 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
607 read (2)
mv_ts(1)%sf(0:m,0:n,0:p,
r,
i);
close (2)
609 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
624 real(wp),
allocatable,
dimension(:) :: x_cb_glb, y_cb_glb, z_cb_glb
625 integer :: ifile, ierr, data_size
626 integer,
dimension(MPI_STATUS_SIZE) :: status
627 integer(KIND=MPI_OFFSET_KIND) :: disp
628 integer(KIND=MPI_OFFSET_KIND) :: m_mok, n_mok, p_mok
629 integer(KIND=MPI_OFFSET_KIND) :: wp_mok, var_mok
630 integer(KIND=MPI_OFFSET_KIND) :: mok
631 character(LEN=path_len + 2*name_len) :: file_loc
632 logical :: file_exist
633 character(len=10) :: t_step_start_string
637 integer :: m_ds, n_ds, p_ds
638 integer :: m_glb_ds, n_glb_ds, p_glb_ds
639 integer :: m_glb_read, n_glb_read, p_glb_read
641 allocate (x_cb_glb(-1:
m_glb))
642 allocate (y_cb_glb(-1:
n_glb))
643 allocate (z_cb_glb(-1:
p_glb))
645 file_loc = trim(case_dir) //
'/restart_data' // trim(mpiiofs) //
'x_cb.dat'
646 inquire (file=trim(file_loc), exist=file_exist)
648 if (down_sample)
then
649 m_ds = int((m + 1)/3) - 1
650 n_ds = int((n + 1)/3) - 1
651 p_ds = int((p + 1)/3) - 1
653 m_glb_ds = int((
m_glb + 1)/3) - 1
654 n_glb_ds = int((
n_glb + 1)/3) - 1
655 p_glb_ds = int((
p_glb + 1)/3) - 1
659 data_size =
m_glb + 2
660 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
661 call mpi_file_read(ifile, x_cb_glb, data_size, mpi_p, status, ierr)
662 call mpi_file_close(ifile, ierr)
664 call s_mpi_abort(
'File ' // trim(file_loc) //
' is missing. Exiting.')
667 x_cb(-1:m) = x_cb_glb((start_idx(1) - 1):(start_idx(1) + m))
672 file_loc = trim(case_dir) //
'/restart_data' // trim(mpiiofs) //
'y_cb.dat'
673 inquire (file=trim(file_loc), exist=file_exist)
676 data_size =
n_glb + 2
677 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
678 call mpi_file_read(ifile, y_cb_glb, data_size, mpi_p, status, ierr)
679 call mpi_file_close(ifile, ierr)
681 call s_mpi_abort(
'File ' // trim(file_loc) //
' is missing. Exiting.')
684 y_cb(-1:n) = y_cb_glb((start_idx(2) - 1):(start_idx(2) + n))
689 file_loc = trim(case_dir) //
'/restart_data' // trim(mpiiofs) //
'z_cb.dat'
690 inquire (file=trim(file_loc), exist=file_exist)
693 data_size =
p_glb + 2
694 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
695 call mpi_file_read(ifile, z_cb_glb, data_size, mpi_p, status, ierr)
696 call mpi_file_close(ifile, ierr)
698 call s_mpi_abort(
'File ' // trim(file_loc) //
'is missing. Exiting.')
701 z_cb(-1:p) = z_cb_glb((start_idx(3) - 1):(start_idx(3) + p))
707 if (file_per_process)
then
710 write (file_loc,
'(I0,A1,I7.7,A)') n_start,
'_',
proc_rank,
'.dat'
713 write (file_loc,
'(I0,A1,I7.7,A)') t_step_start,
'_',
proc_rank,
'.dat'
715 file_loc = trim(case_dir) //
'/restart_data/lustre_' // trim(t_step_start_string) // trim(mpiiofs) // trim(file_loc)
716 inquire (file=trim(file_loc), exist=file_exist)
719 call mpi_file_open(mpi_comm_self, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
721 if (down_sample)
then
731 if (down_sample)
then
732 data_size = (m_ds + 3)*(n_ds + 3)*(p_ds + 3)
733 m_glb_read = m_glb_ds + 1
734 n_glb_read = n_glb_ds + 1
735 p_glb_read = p_glb_ds + 1
737 data_size = (m + 1)*(n + 1)*(p + 1)
738 m_glb_read =
m_glb + 1
739 n_glb_read =
n_glb + 1
740 p_glb_read =
p_glb + 1
743 m_mok = int(m_glb_read + 1, mpi_offset_kind)
744 n_mok = int(m_glb_read + 1, mpi_offset_kind)
745 p_mok = int(m_glb_read + 1, mpi_offset_kind)
746 wp_mok = int(storage_size(0._stp)/8, mpi_offset_kind)
747 mok = int(1._wp, mpi_offset_kind)
749 if (bubbles_euler .or. elasticity)
then
751 var_mok = int(
i, mpi_offset_kind)
753 call mpi_file_read(ifile,
mpi_io_data%var(
i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
756 if (qbmm .and. .not. polytropic)
then
757 do i = sys_size + 1, sys_size + 2*
nb*
nnode
758 var_mok = int(
i, mpi_offset_kind)
760 call mpi_file_read(ifile,
mpi_io_data%var(
i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
764 if (down_sample)
then
766 var_mok = int(
i, mpi_offset_kind)
768 call mpi_file_read(ifile,
q_cons_temp(
i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
772 var_mok = int(
i, mpi_offset_kind)
774 call mpi_file_read(ifile,
mpi_io_data%var(
i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
781 call mpi_file_close(ifile, ierr)
783 call s_mpi_abort(
'File ' // trim(file_loc) //
' is missing. Exiting.')
787 write (file_loc,
'(I0,A)') n_start,
'.dat'
789 write (file_loc,
'(I0,A)') t_step_start,
'.dat'
791 file_loc = trim(case_dir) //
'/restart_data' // trim(mpiiofs) // trim(file_loc)
792 inquire (file=trim(file_loc), exist=file_exist)
795 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
803 data_size = (m + 1)*(n + 1)*(p + 1)
805 m_mok = int(
m_glb + 1, mpi_offset_kind)
806 n_mok = int(
n_glb + 1, mpi_offset_kind)
807 p_mok = int(
p_glb + 1, mpi_offset_kind)
808 wp_mok = int(storage_size(0._stp)/8, mpi_offset_kind)
809 mok = int(1._wp, mpi_offset_kind)
811 if (bubbles_euler .or. elasticity)
then
813 var_mok = int(
i, mpi_offset_kind)
814 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
816 call mpi_file_set_view(ifile, disp, mpi_io_p,
mpi_io_data%view(
i),
'native', mpi_info_int, ierr)
817 call mpi_file_read(ifile,
mpi_io_data%var(
i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
820 if (qbmm .and. .not. polytropic)
then
821 do i = sys_size + 1, sys_size + 2*
nb*
nnode
822 var_mok = int(
i, mpi_offset_kind)
823 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
825 call mpi_file_set_view(ifile, disp, mpi_io_p,
mpi_io_data%view(
i),
'native', mpi_info_int, ierr)
826 call mpi_file_read(ifile,
mpi_io_data%var(
i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
831 var_mok = int(
i, mpi_offset_kind)
833 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
835 call mpi_file_set_view(ifile, disp, mpi_io_p,
mpi_io_data%view(
i),
'native', mpi_info_int, ierr)
836 call mpi_file_read_all(ifile,
mpi_io_data%var(
i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
842 call mpi_file_close(ifile, ierr)
844 call s_mpi_abort(
'File ' // trim(file_loc) //
' is missing. Exiting.')
848 deallocate (x_cb_glb, y_cb_glb, z_cb_glb)
851 call s_read_parallel_boundary_condition_files(
bc_type)
853 call s_assign_default_bc_type(
bc_type)
862 type(
scalar_field),
dimension(sys_size),
intent(inout) :: v_vf
868 real(wp),
dimension(2) :: re
870 integer ::
i,
j,
k,
l,
c
871 real(wp),
dimension(num_species) :: rhoyks
884 do i = eqn_idx%mom%beg, eqn_idx%mom%end
885 dyn_pres = dyn_pres + 5.e-1_wp*v_vf(
i)%sf(
j,
k,
l)*v_vf(
i)%sf(
j,
k,
l)/max(rho,
sgm_eps)
889 do c = 1, num_species
890 rhoyks(
c) = v_vf(eqn_idx%species%beg +
c - 1)%sf(
j,
k,
l)
896 pres_mag = 0.5_wp*(bx0**2 + v_vf(eqn_idx%B%beg)%sf(
j,
k,
l)**2 + v_vf(eqn_idx%B%beg + 1)%sf(
j,
k,
l)**2)
898 pres_mag = 0.5_wp*(v_vf(eqn_idx%B%beg)%sf(
j,
k,
l)**2 + v_vf(eqn_idx%B%beg + 1)%sf(
j,
k, &
899 &
l)**2 + v_vf(eqn_idx%B%beg + 2)%sf(
j,
k,
l)**2)
903 call s_compute_pressure(v_vf(eqn_idx%E)%sf(
j,
k,
l), 0._stp, dyn_pres, pi_inf, gamma, rho, qv, rhoyks, pres, &
904 & t, pres_mag=pres_mag)
907 v_vf(
i + eqn_idx%int_en%beg - 1)%sf(
j,
k,
l) = v_vf(
i + eqn_idx%adv%beg - 1)%sf(
j,
k, &
919 integer,
intent(inout) :: t_step
920 real(wp),
intent(inout) :: time_avg
921 integer ::
i, eta_hh, eta_mm, eta_ss
932 print *,
"Delta t = ", dt
938 if ((
mytime + dt) >= t_stop)
then
941# 586 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
942#if defined(MFC_OpenACC)
943# 586 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
945# 586 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
946#elif defined(MFC_OpenMP)
947# 586 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
949# 586 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
956# 591 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
957#if defined(MFC_OpenACC)
958# 591 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
960# 591 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
961#elif defined(MFC_OpenMP)
962# 591 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
964# 591 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
970 if (
proc_rank == 0 .and. mod(t_step - t_step_start, t_step_print) == 0)
then
972 eta_hh = int(eta_sec)/3600
973 eta_mm = mod(int(eta_sec), 3600)/60
974 eta_ss = mod(int(eta_sec), 60)
975 print
'(" [", I3, "%] Time ", ES16.6, " dt = ", ES16.6, " @ Time Step = ", I8, " Time Avg = ", ES16.6, " Time/step = ", ES12.6, " ETA (HH:MM:SS) = ", I0, ":", I2.2, ":", I2.2)', &
979 if (
proc_rank == 0 .and. mod(t_step - t_step_start, t_step_print) == 0)
then
981 eta_hh = int(eta_sec)/3600
982 eta_mm = mod(int(eta_sec), 3600)/60
983 eta_ss = mod(int(eta_sec), 60)
984 print
'(" [", I3, "%] Time step ", I8, " of ", I0, " @ t_step = ", I8, " Time Avg = ", ES12.6, " Time/step= ", ES12.6, " ETA (HH:MM:SS) = ", I0, ":", I2.2, ":", I2.2)', &
985 & int(ceiling(100._wp*(real(t_step - t_step_start)/(t_step_stop - t_step_start + 1)))), &
994# 619 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
995#if defined(MFC_OpenACC)
996# 619 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
998# 619 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
999#elif defined(MFC_OpenMP)
1000# 619 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1002# 619 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1009 call s_tvd_rk(t_step, time_avg, time_stepper)
1026 real(wp),
intent(inout) :: time_avg, time_final
1027 real(wp),
intent(inout) :: io_time_avg, io_time_final
1028 real(wp),
dimension(:),
intent(inout) :: proc_time
1029 real(wp),
dimension(:),
intent(inout) :: io_proc_time
1030 logical,
intent(inout) :: file_exists
1031 real(wp) :: grind_time
1043 io_time_final = 0._wp
1045 time_final = time_avg
1046 io_time_final = io_time_avg
1048 time_final = maxval(proc_time)
1049 io_time_final = maxval(io_proc_time)
1052 grind_time = time_final*1.0e9_wp/(real(sys_size, wp)*real(maxval((/1,
m_glb/)), wp)*real(maxval((/1,
n_glb/)), &
1053 & wp)*real(maxval((/1,
p_glb/)), wp))
1055 print *,
"Performance:", grind_time,
"ns/gp/eq/rhs"
1056 inquire (file=
'time_data.dat', exist=file_exists)
1057 if (file_exists)
then
1058 open (1, file=
'time_data.dat',
position=
'append', status=
'old')
1060 open (1, file=
'time_data.dat', status=
'new')
1061 write (1,
'(A10, A15, A15)')
"Ranks",
"s/step",
"ns/gp/eq/rhs"
1064 write (1,
'(I10, 2(F15.8))')
num_procs, time_final, grind_time
1068 inquire (file=
'io_time_data.dat', exist=file_exists)
1069 if (file_exists)
then
1070 open (1, file=
'io_time_data.dat',
position=
'append', status=
'old')
1072 open (1, file=
'io_time_data.dat', status=
'new')
1073 write (1,
'(A10, A15)')
"Ranks",
"s/step"
1076 write (1,
'(I10, F15.8)')
num_procs, io_time_final
1085 integer,
intent(inout) :: t_step
1086 real(wp),
intent(inout) :: start, finish, io_time_avg
1087 integer,
intent(inout) :: nt
1088 integer(kind=8) ::
i,
j,
k,
l
1090 integer :: save_count
1092 if (down_sample)
then
1100# 715 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1102# 715 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1103#if defined(MFC_OpenACC)
1104# 715 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1106# 715 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1107#elif defined(MFC_OpenMP)
1108# 715 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1110# 715 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1112# 715 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1114# 715 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1116# 715 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1128# 725 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1129#if defined(MFC_OpenACC)
1130# 725 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1132# 725 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1133#elif defined(MFC_OpenMP)
1134# 725 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1136# 725 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1138# 725 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1143 call cpu_time(start)
1146#ifndef FRONTIER_UNIFIED
1148# 733 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1149#if defined(MFC_OpenACC)
1150# 733 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1152# 733 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1153#elif defined(MFC_OpenMP)
1154# 733 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1156# 733 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1163 print *,
"NaN(s) in timestep output.",
j,
k,
l,
i,
proc_rank, t_step, m, n, p
1171 if (qbmm .and. .not. polytropic)
then
1173# 748 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1174#if defined(MFC_OpenACC)
1175# 748 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1177# 748 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1178#elif defined(MFC_OpenMP)
1179# 748 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1181# 748 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1184# 749 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1185#if defined(MFC_OpenACC)
1186# 749 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1188# 749 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1189#elif defined(MFC_OpenMP)
1190# 749 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1192# 749 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1197 save_count = int(
mytime/t_save)
1202 if (bubbles_lagrange)
then
1204# 759 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1205#if defined(MFC_OpenACC)
1206# 759 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1208# 759 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1209#elif defined(MFC_OpenMP)
1210# 759 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1212# 759 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1214# 761 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1217 call s_mpi_abort(
"Bubble radius is negative or NaN, please reduce dt.")
1222# 767 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1223#if defined(MFC_OpenACC)
1224# 767 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1226# 767 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1227#elif defined(MFC_OpenMP)
1228# 767 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1230# 767 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1234# 769 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1235#if defined(MFC_OpenACC)
1236# 769 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1238# 769 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1239#elif defined(MFC_OpenMP)
1240# 769 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1242# 769 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1254 call cpu_time(finish)
1258 nt = int((t_step - t_step_start)/(t_step_save))
1262 io_time_avg = abs(finish - start)
1264 io_time_avg = (abs(finish - start) + io_time_avg*(nt - 1))/nt
1272 integer :: m_ds, n_ds, p_ds
1276# 812 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1277 if (bubbles_euler .or. bubbles_lagrange)
then
1291 if (acoustic_source)
then
1295 if (viscous .and. (.not. igr))
then
1311 if (down_sample)
then
1312 m_ds = int((m + 1)/3) - 1
1313 n_ds = int((n + 1)/3) - 1
1314 p_ds = int((p + 1)/3) - 1
1318 allocate (
q_cons_temp(
i)%sf(-1:m_ds + 1,-1:n_ds + 1,-1:p_ds + 1))
1322 if (down_sample)
then
1327# 861 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1328#if defined(MFC_OpenACC)
1329# 861 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1331# 861 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1332#elif defined(MFC_OpenMP)
1333# 861 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1335# 861 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1346 call s_populate_grid_variables_buffers()
1353 if (
cfl_dt .and. n_start > 0)
then
1355 allocate (particle_cloud_ibs(0))
1356 else if (t_step_start > 0)
then
1358 allocate (particle_cloud_ibs(0))
1365 deallocate (particle_cloud_ibs)
1368 if (t_step_start == 0 .or. (
cfl_dt .and. n_start == 0))
then
1408 real(wp) :: starttime, endtime
1409 integer :: num_devices, local_size, num_nodes, ppn, my_device_num
1410 integer :: dev, devnum, local_rank
1412 integer :: local_comm
1414#if defined(MFC_OpenACC)
1415 integer(acc_device_kind) :: devtype
1419 call s_mpi_initialize()
1426 call mpi_comm_split_type(mpi_comm_world, mpi_comm_type_shared, 0, mpi_info_null, local_comm, ierr)
1427 call mpi_comm_size(local_comm, local_size, ierr)
1428 call mpi_comm_rank(local_comm, local_rank, ierr)
1430#if defined(MFC_OpenACC)
1431 devtype = acc_get_device_type()
1432 devnum = acc_get_num_devices(devtype)
1433 dev = mod(local_rank, devnum)
1435 call acc_set_device_num(dev, devtype)
1436#elif defined(MFC_OpenMP)
1437 devnum = omp_get_num_devices()
1438 dev = mod(local_rank, devnum)
1439 call omp_set_default_device(dev)
1443 if (proc_rank == 0)
then
1444 call s_assign_default_values_to_user_inputs()
1448 print
'(" Simulating a ", A, " ", I0, "x", I0, "x", I0, " case on ", I0, " rank(s) ", A, ".")', &
1449# 975 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1451# 979 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1452 m, n, p, num_procs, &
1453#if defined(MFC_OpenACC)
1454 "with OpenACC offloading"
1455#elif defined(MFC_OpenMP)
1456 "with OpenMP offloading"
1462 call s_mpi_bcast_user_inputs()
1469 call s_initialize_parallel_io()
1471 call s_mpi_decompose_computational_domain()
1480 if (.not. down_sample)
then
1483# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1484#if defined(MFC_OpenACC)
1485# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1487# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1488#elif defined(MFC_OpenMP)
1489# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1491# 1009 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1496 if (qbmm .and. .not. polytropic)
then
1498# 1014 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1499#if defined(MFC_OpenACC)
1500# 1014 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1502# 1014 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1503#elif defined(MFC_OpenMP)
1504# 1014 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1506# 1014 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1511# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1512#if defined(MFC_OpenACC)
1513# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1515# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1516#elif defined(MFC_OpenMP)
1517# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1519# 1017 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1524# 1020 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1525#if defined(MFC_OpenACC)
1526# 1020 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1528# 1020 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1529#elif defined(MFC_OpenMP)
1530# 1020 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1532# 1020 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1536# 1022 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1537#if defined(MFC_OpenACC)
1538# 1022 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1540# 1022 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1541#elif defined(MFC_OpenMP)
1542# 1022 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1544# 1022 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1546# 1026 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1548 if (bubbles_euler)
then
1550# 1028 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1551#if defined(MFC_OpenACC)
1552# 1028 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1554# 1028 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1555#elif defined(MFC_OpenMP)
1556# 1028 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1558# 1028 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1560 if (.not. polytropic)
then
1562# 1030 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1563#if defined(MFC_OpenACC)
1564# 1030 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1566# 1030 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1567#elif defined(MFC_OpenMP)
1568# 1030 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1570# 1030 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1574# 1032 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1575#if defined(MFC_OpenACC)
1576# 1032 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1578# 1032 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1579#elif defined(MFC_OpenMP)
1580# 1032 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1582# 1032 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1588# 1036 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1589#if defined(MFC_OpenACC)
1590# 1036 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1592# 1036 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1593#elif defined(MFC_OpenMP)
1594# 1036 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1596# 1036 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1600# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1601#if defined(MFC_OpenACC)
1602# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1604# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1605#elif defined(MFC_OpenMP)
1606# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1608# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1611# 1039 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1612#if defined(MFC_OpenACC)
1613# 1039 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1615# 1039 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1616#elif defined(MFC_OpenMP)
1617# 1039 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1619# 1039 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1623# 1041 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1624#if defined(MFC_OpenACC)
1625# 1041 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1627# 1041 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1628#elif defined(MFC_OpenMP)
1629# 1041 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1631# 1041 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1634# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1635#if defined(MFC_OpenACC)
1636# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1638# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1639#elif defined(MFC_OpenMP)
1640# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1642# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1645# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1646#if defined(MFC_OpenACC)
1647# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1649# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1650#elif defined(MFC_OpenMP)
1651# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1653# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1656# 1044 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1657#if defined(MFC_OpenACC)
1658# 1044 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1660# 1044 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1661#elif defined(MFC_OpenMP)
1662# 1044 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1664# 1044 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1667# 1045 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1668#if defined(MFC_OpenACC)
1669# 1045 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1671# 1045 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1672#elif defined(MFC_OpenMP)
1673# 1045 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1675# 1045 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1679# 1047 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1680#if defined(MFC_OpenACC)
1681# 1047 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1683# 1047 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1684#elif defined(MFC_OpenMP)
1685# 1047 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1687# 1047 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1690# 1048 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1691#if defined(MFC_OpenACC)
1692# 1048 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1694# 1048 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1695#elif defined(MFC_OpenMP)
1696# 1048 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1698# 1048 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1701# 1049 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1702#if defined(MFC_OpenACC)
1703# 1049 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1705# 1049 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1706#elif defined(MFC_OpenMP)
1707# 1049 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1709# 1049 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1713# 1051 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1714#if defined(MFC_OpenACC)
1715# 1051 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1717# 1051 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1718#elif defined(MFC_OpenMP)
1719# 1051 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1721# 1051 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1724# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1725#if defined(MFC_OpenACC)
1726# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1728# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1729#elif defined(MFC_OpenMP)
1730# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1732# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1735# 1053 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1736#if defined(MFC_OpenACC)
1737# 1053 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1739# 1053 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1740#elif defined(MFC_OpenMP)
1741# 1053 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1743# 1053 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1746# 1054 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1747#if defined(MFC_OpenACC)
1748# 1054 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1750# 1054 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1751#elif defined(MFC_OpenMP)
1752# 1054 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1754# 1054 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1758# 1056 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1759#if defined(MFC_OpenACC)
1760# 1056 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1762# 1056 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1763#elif defined(MFC_OpenMP)
1764# 1056 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1766# 1056 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1770# 1058 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1771#if defined(MFC_OpenACC)
1772# 1058 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1774# 1058 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1775#elif defined(MFC_OpenMP)
1776# 1058 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1778# 1058 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1784# 1062 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1785#if defined(MFC_OpenACC)
1786# 1062 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1788# 1062 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1789#elif defined(MFC_OpenMP)
1790# 1062 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1792# 1062 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1795# 1065 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1797# 1065 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1798#if defined(MFC_OpenACC)
1799# 1065 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1801# 1065 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1802#elif defined(MFC_OpenMP)
1803# 1065 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1805# 1065 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1807# 1067 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1814 call s_finalize_time_steppers_module()
1815 if (hypoelasticity)
call s_finalize_hypoelastic_module()
1816 if (hyperelasticity)
call s_finalize_hyperelastic_module()
1817 call s_finalize_derived_variables_module()
1818 call s_finalize_data_output_module()
1819 call s_finalize_rhs_module()
1821 call s_finalize_igr_module()
1823 call s_finalize_cbc_module()
1824 call s_finalize_riemann_solvers_module()
1825 if (recon_type == recon_type_weno)
then
1826 call s_finalize_weno_module()
1827 else if (recon_type == recon_type_muscl)
then
1828 call s_finalize_muscl_module()
1831 if (int_comp > 0)
call s_finalize_thinc_module()
1832 call s_finalize_variables_conversion_module()
1833 if (grid_geometry == 3)
call s_finalize_fftw_module
1834 call s_finalize_mpi_common_module()
1835 call s_finalize_global_parameters_module()
1836 call s_finalize_boundary_common_module()
1837 if (relax)
call s_finalize_relaxation_solver_module()
1838 if (bubbles_lagrange)
call s_finalize_lagrangian_solver()
1839 if (viscous .and. (.not. igr))
then
1840 call s_finalize_viscous_module()
1842 call s_finalize_mpi_proxy_module()
1844 if (surface_tension)
call s_finalize_surface_tension_module()
1845 if (bodyforces)
call s_finalize_body_forces_module()
1846 if (ib)
call s_finalize_ibm_module()
1848 call s_mpi_finalize()
1856 integer,
intent(in) :: t_step
1857 character(len=path_len + 2*name_len) :: file_loc
1858 integer :: i, ios, file_unit, ierr
1859 integer :: r, nlocal, gbl_id
1860 integer,
parameter :: nfields_per_ib = 20
1861 real(wp) :: ib_buf(nfields_per_ib)
1862 logical :: file_exist
1863 character(len=10) :: t_step_string
1865 if (file_per_process)
then
1866 call s_int_to_str(t_step, t_step_string)
1868 do r = 0, num_procs - 1
1869 write (file_loc,
'(A,I0,A,i7.7,A)')
'ib_state_', t_step,
'_', r,
'.dat'
1870 file_loc = trim(case_dir) //
'/restart_data/lustre_' // trim(t_step_string) //
'/' // trim(file_loc)
1872 inquire (file=trim(file_loc), exist=file_exist)
1873 if (.not. file_exist)
call s_mpi_abort(
'Cannot open IB state file for restart: ' // trim(file_loc))
1875 open (newunit=file_unit, file=trim(file_loc), form=
'unformatted', access=
'stream', status=
'old', iostat=ios)
1876 if (ios /= 0)
call s_mpi_abort(
'Error opening IB state restart file: ' // trim(file_loc))
1878 read (file_unit, iostat=ios) nlocal
1879 if (ios /= 0)
call s_mpi_abort(
'Error reading IB state file header: ' // trim(file_loc))
1882 read (file_unit, iostat=ios) gbl_id
1883 if (ios /= 0)
call s_mpi_abort(
'Error reading IB patch ID: ' // trim(file_loc))
1884 read (file_unit, iostat=ios) ib_buf
1885 if (ios /= 0)
call s_mpi_abort(
'Error reading IB state data: ' // trim(file_loc))
1887 patch_ib(gbl_id)%vel = ib_buf(8:10)
1888 patch_ib(gbl_id)%angular_vel = ib_buf(11:13)
1889 patch_ib(gbl_id)%angles = ib_buf(14:16)
1890 patch_ib(gbl_id)%x_centroid = ib_buf(17)
1891 patch_ib(gbl_id)%y_centroid = ib_buf(18)
1892 patch_ib(gbl_id)%z_centroid = ib_buf(19)
1898 write (file_loc,
'(A,I0,A)')
'/restart_data/ib_state_', t_step,
'.dat'
1899 file_loc = trim(case_dir) // trim(file_loc)
1901 if (proc_rank == 0)
then
1902 inquire (file=trim(file_loc), exist=file_exist)
1903 if (.not. file_exist)
then
1904 call s_mpi_abort(
'Cannot open IB state file for restart: ' // trim(file_loc))
1907 open (newunit=file_unit, file=trim(file_loc), form=
'unformatted', access=
'stream', status=
'old', iostat=ios)
1908 if (ios /= 0)
call s_mpi_abort(
'Error opening IB state restart file: ' // trim(file_loc))
1911 read (file_unit, iostat=ios) ib_buf
1912 if (ios /= 0)
call s_mpi_abort(
'Error reading IB state restart file')
1914 patch_ib(i)%vel = ib_buf(8:10)
1915 patch_ib(i)%angular_vel = ib_buf(11:13)
1916 patch_ib(i)%angles = ib_buf(14:16)
1917 patch_ib(i)%x_centroid = ib_buf(17)
1918 patch_ib(i)%y_centroid = ib_buf(18)
1919 patch_ib(i)%z_centroid = ib_buf(19)
1927 call mpi_bcast(patch_ib(i)%vel, 3, mpi_p, 0, mpi_comm_world, ierr)
1928 call mpi_bcast(patch_ib(i)%angular_vel, 3, mpi_p, 0, mpi_comm_world, ierr)
1929 call mpi_bcast(patch_ib(i)%angles, 3, mpi_p, 0, mpi_comm_world, ierr)
1930 call mpi_bcast(patch_ib(i)%x_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1931 call mpi_bcast(patch_ib(i)%y_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1932 call mpi_bcast(patch_ib(i)%z_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1944 type(ib_patch_parameters),
intent(in),
dimension(:) :: particle_cloud_ibs
1945 real(wp),
dimension(3) :: centroid
1947 integer :: num_namelist_ibs, num_bed_ibs
1949 num_namelist_ibs = num_ibs
1951 do i = 1, num_particle_clouds
1952 num_bed_ibs = num_bed_ibs + particle_cloud(i)%num_particles
1956 moving_immersed_boundary_flag = .false.
1957 do i = 1, num_namelist_ibs
1958 if (patch_ib(i)%moving_ibm /= 0)
then
1959 moving_immersed_boundary_flag = .true.
1963 if (.not. moving_immersed_boundary_flag)
then
1964 do i = 1, num_bed_ibs
1965 if (particle_cloud_ibs(i)%moving_ibm /= 0)
then
1966 moving_immersed_boundary_flag = .true.
1975 num_gbl_ibs = num_namelist_ibs + num_bed_ibs
1978 if (num_procs == 1)
then
1980 if (num_gbl_ibs > num_ib_patches_max_namelist)
then
1981# 1239 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1982 call s_prohibit_abort(
"num_gbl_ibs > num_ib_patches_max_namelist",
"Total IB count exceeds patch_ib capacity. Increase num_ib_patches_max_namelist.")
1983# 1239 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1985# 1241 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1986 do i = 1, num_bed_ibs
1987 patch_ib(num_namelist_ibs + i) = particle_cloud_ibs(i)
1988 patch_ib(num_namelist_ibs + i)%gbl_patch_id = num_namelist_ibs + i
1990 num_ibs = num_gbl_ibs
1991 num_local_ibs = num_gbl_ibs
1992 do i = 1, num_gbl_ibs
1993 local_ib_patch_ids(i) = i
1999 do i = 1, num_namelist_ibs
2000 centroid = [patch_ib(i)%x_centroid, patch_ib(i)%y_centroid, 0._wp]
2001 if (num_dims == 3) centroid(3) = patch_ib(i)%z_centroid
2002 if (f_neighborhood_ranks_own_location(centroid))
then
2003 num_ibs = num_ibs + 1
2004 patch_ib(num_ibs) = patch_ib(i)
2005 patch_ib(num_ibs)%gbl_patch_id = i
2006 if (f_local_rank_owns_location(centroid))
then
2007 num_local_ibs = num_local_ibs + 1
2008 local_ib_patch_ids(num_local_ibs) = num_ibs
2012 do i = 1, num_bed_ibs
2013 centroid = [particle_cloud_ibs(i)%x_centroid, particle_cloud_ibs(i)%y_centroid, 0._wp]
2014 if (num_dims == 3) centroid(3) = particle_cloud_ibs(i)%z_centroid
2015 if (f_neighborhood_ranks_own_location(centroid))
then
2016 num_ibs = num_ibs + 1
2017 if (num_ibs > num_ib_patches_max_namelist)
then
2018# 1272 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2019 call s_prohibit_abort(
"num_ibs > num_ib_patches_max_namelist",
"Local IB count exceeds patch_ib capacity. Increase num_ib_patches_max_namelist.")
2020# 1272 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2022# 1274 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2023 patch_ib(num_ibs) = particle_cloud_ibs(i)
2024 patch_ib(num_ibs)%gbl_patch_id = num_namelist_ibs + i
2025 if (f_local_rank_owns_location(centroid))
then
2026 num_local_ibs = num_local_ibs + 1
2027 local_ib_patch_ids(num_local_ibs) = num_ibs
2031 if (num_local_ibs > num_local_ibs_max)
then
2032# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2033 call s_prohibit_abort(
"num_local_ibs > num_local_ibs_max",
"Too many IBs on a single processor rank. Modify case file or increase limit of num_local_ibs_max to resolve.")
2034# 1282 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2036# 1284 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2040 if (num_gbl_ibs > num_ib_patches_max_namelist)
then
2041# 1287 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2042 call s_prohibit_abort(
"num_gbl_ibs > num_ib_patches_max_namelist",
"Total IB count exceeds patch_ib capacity. Increase num_ib_patches_max_namelist.")
2043# 1287 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2045# 1289 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2046 do i = 1, num_bed_ibs
2047 patch_ib(num_namelist_ibs + i) = particle_cloud_ibs(i)
2048 patch_ib(num_namelist_ibs + i)%gbl_patch_id = num_namelist_ibs + i
2050 num_ibs = num_gbl_ibs
2051 num_local_ibs = num_gbl_ibs
2052 do i = 1, num_gbl_ibs
2053 local_ib_patch_ids(i) = i
2058# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2060# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2061 use iso_fortran_env,
only: output_unit
2062# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2064# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2065 print *,
'm_start_up.fpp:1300: ',
'@:ALLOCATE(ib_gbl_idx_lookup(1:num_gbl_ibs))'
2066# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2068# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2069 call flush (output_unit)
2070# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2072# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2074# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2075 allocate (ib_gbl_idx_lookup(1:num_gbl_ibs))
2076# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2078# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2080# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2081#if defined(MFC_OpenACC)
2082# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2084# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2085#elif defined(MFC_OpenMP)
2086# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2088# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2097 integer :: ax, k, nbr_idx, nreqs, sx, sy, sz, dx, dy, dz
2098 integer,
allocatable :: send_table(:,:,:), recv_tables(:,:,:,:)
2099 integer,
dimension(52) :: requests
2103 integer,
dimension(4) :: buf4, rbuf4
2104 integer,
dimension(2) :: buf2, rbuf2
2106 ax = ib_neighborhood_radius
2108 if (
allocated(ib_neighbor_ranks))
deallocate (ib_neighbor_ranks)
2109 allocate (ib_neighbor_ranks(-ax:ax,-ax:ax,-ax:ax))
2110 ib_neighbor_ranks = mpi_proc_null
2111 ib_neighbor_ranks(0, 0, 0) = proc_rank
2114 ib_neighbor_ranks(-1, 0, 0) = bc_x%beg
2115 ib_neighbor_ranks(+1, 0, 0) = bc_x%end
2116 if (num_dims >= 2)
then
2117 ib_neighbor_ranks(0, -1, 0) = bc_y%beg
2118 ib_neighbor_ranks(0, +1, 0) = bc_y%end
2120 if (num_dims == 3)
then
2121 ib_neighbor_ranks(0, 0, -1) = bc_z%beg
2122 ib_neighbor_ranks(0, 0, +1) = bc_z%end
2125 if (num_dims >= 2)
then
2127 buf4 = [bc_y%beg, bc_y%end, bc_z%beg, bc_z%end]
2130 call mpi_sendrecv(buf4, 4, mpi_integer, merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0), 310, rbuf4, 4, mpi_integer, &
2131 & merge(bc_x%end, mpi_proc_null, bc_x%end >= 0), 310, mpi_comm_world, mpi_status_ignore, ierr)
2132 if (bc_x%end >= 0)
then
2133 ib_neighbor_ranks(+1, -1, 0) = rbuf4(1)
2134 ib_neighbor_ranks(+1, +1, 0) = rbuf4(2)
2135 ib_neighbor_ranks(+1, 0, -1) = rbuf4(3)
2136 ib_neighbor_ranks(+1, 0, +1) = rbuf4(4)
2139 call mpi_sendrecv(buf4, 4, mpi_integer, merge(bc_x%end, mpi_proc_null, bc_x%end >= 0), 311, rbuf4, 4, mpi_integer, &
2140 & merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0), 311, mpi_comm_world, mpi_status_ignore, ierr)
2141 if (bc_x%beg >= 0)
then
2142 ib_neighbor_ranks(-1, -1, 0) = rbuf4(1)
2143 ib_neighbor_ranks(-1, +1, 0) = rbuf4(2)
2144 ib_neighbor_ranks(-1, 0, -1) = rbuf4(3)
2145 ib_neighbor_ranks(-1, 0, +1) = rbuf4(4)
2149 if (num_dims == 3)
then
2151 buf2 = [bc_z%beg, bc_z%end]
2153 call mpi_sendrecv(buf2, 2, mpi_integer, merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0), 312, rbuf2, 2, mpi_integer, &
2154 & merge(bc_y%end, mpi_proc_null, bc_y%end >= 0), 312, mpi_comm_world, mpi_status_ignore, ierr)
2155 if (bc_y%end >= 0)
then
2156 ib_neighbor_ranks(0, +1, -1) = rbuf2(1)
2157 ib_neighbor_ranks(0, +1, +1) = rbuf2(2)
2160 call mpi_sendrecv(buf2, 2, mpi_integer, merge(bc_y%end, mpi_proc_null, bc_y%end >= 0), 313, rbuf2, 2, mpi_integer, &
2161 & merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0), 313, mpi_comm_world, mpi_status_ignore, ierr)
2162 if (bc_y%beg >= 0)
then
2163 ib_neighbor_ranks(0, -1, -1) = rbuf2(1)
2164 ib_neighbor_ranks(0, -1, +1) = rbuf2(2)
2170# 1382 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2171 call mpi_sendrecv(buf2, 2, mpi_integer, merge(ib_neighbor_ranks(-1, -1, 0), mpi_proc_null, &
2172 & ib_neighbor_ranks(-1, -1, 0) >= 0), 320, rbuf2, 2, mpi_integer, &
2173 & merge(ib_neighbor_ranks(1, 1, 0), mpi_proc_null, ib_neighbor_ranks(1, 1, &
2174 & 0) >= 0), 320, mpi_comm_world, mpi_status_ignore, ierr)
2175 if (ib_neighbor_ranks(1, 1, 0) >= 0)
then
2176 ib_neighbor_ranks(1, 1, -1) = rbuf2(1)
2177 ib_neighbor_ranks(1, 1, +1) = rbuf2(2)
2179# 1382 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2180 call mpi_sendrecv(buf2, 2, mpi_integer, merge(ib_neighbor_ranks(-1, 1, 0), mpi_proc_null, &
2181 & ib_neighbor_ranks(-1, 1, 0) >= 0), 321, rbuf2, 2, mpi_integer, &
2182 & merge(ib_neighbor_ranks(1, -1, 0), mpi_proc_null, ib_neighbor_ranks(1, -1, &
2183 & 0) >= 0), 321, mpi_comm_world, mpi_status_ignore, ierr)
2184 if (ib_neighbor_ranks(1, -1, 0) >= 0)
then
2185 ib_neighbor_ranks(1, -1, -1) = rbuf2(1)
2186 ib_neighbor_ranks(1, -1, +1) = rbuf2(2)
2188# 1382 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2189 call mpi_sendrecv(buf2, 2, mpi_integer, merge(ib_neighbor_ranks(1, -1, 0), mpi_proc_null, &
2190 & ib_neighbor_ranks(1, -1, 0) >= 0), 322, rbuf2, 2, mpi_integer, &
2191 & merge(ib_neighbor_ranks(-1, 1, 0), mpi_proc_null, ib_neighbor_ranks(-1, 1, &
2192 & 0) >= 0), 322, mpi_comm_world, mpi_status_ignore, ierr)
2193 if (ib_neighbor_ranks(-1, 1, 0) >= 0)
then
2194 ib_neighbor_ranks(-1, 1, -1) = rbuf2(1)
2195 ib_neighbor_ranks(-1, 1, +1) = rbuf2(2)
2197# 1382 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2198 call mpi_sendrecv(buf2, 2, mpi_integer, merge(ib_neighbor_ranks(1, 1, 0), mpi_proc_null, &
2199 & ib_neighbor_ranks(1, 1, 0) >= 0), 323, rbuf2, 2, mpi_integer, &
2200 & merge(ib_neighbor_ranks(-1, -1, 0), mpi_proc_null, ib_neighbor_ranks(-1, -1, &
2201 & 0) >= 0), 323, mpi_comm_world, mpi_status_ignore, ierr)
2202 if (ib_neighbor_ranks(-1, -1, 0) >= 0)
then
2203 ib_neighbor_ranks(-1, -1, -1) = rbuf2(1)
2204 ib_neighbor_ranks(-1, -1, +1) = rbuf2(2)
2206# 1391 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2213 allocate (send_table(-ax:ax,-ax:ax,-ax:ax))
2214 allocate (recv_tables(-ax:ax,-ax:ax,-ax:ax,1:26))
2217 send_table = ib_neighbor_ranks
2224 if (sx == 0 .and. sy == 0 .and. sz == 0) cycle
2225 nbr_idx = nbr_idx + 1
2226 if (ib_neighbor_ranks(sx, sy, sz) < 0) cycle
2228 call mpi_irecv(recv_tables(:,:,:,nbr_idx), (2*ax + 1)**3, mpi_integer, ib_neighbor_ranks(sx, sy, sz), &
2229 & 400, mpi_comm_world, requests(nreqs), ierr)
2237 if (sx == 0 .and. sy == 0 .and. sz == 0) cycle
2238 if (ib_neighbor_ranks(sx, sy, sz) < 0) cycle
2240 call mpi_isend(send_table, (2*ax + 1)**3, mpi_integer, ib_neighbor_ranks(sx, sy, sz), 400, &
2241 & mpi_comm_world, requests(nreqs), ierr)
2246 call mpi_waitall(nreqs, requests, mpi_statuses_ignore, ierr)
2252 if (sx == 0 .and. sy == 0 .and. sz == 0) cycle
2253 nbr_idx = nbr_idx + 1
2254 if (ib_neighbor_ranks(sx, sy, sz) < 0) cycle
2258 if (recv_tables(dx, dy, dz, nbr_idx) == mpi_proc_null) cycle
2259 if (dx + sx < -ax .or. dx + sx > ax) cycle
2260 if (dy + sy < -ax .or. dy + sy > ax) cycle
2261 if (dz + sz < -ax .or. dz + sz > ax) cycle
2262 if (ib_neighbor_ranks(dx + sx, dy + sy, dz + sz) /= mpi_proc_null) cycle
2263 ib_neighbor_ranks(dx + sx, dy + sy, dz + sz) = recv_tables(dx, dy, dz, nbr_idx)
2272 deallocate (send_table, recv_tables)
2280 real(wp) :: beg_val, end_val, recv_val
2281 integer :: k, send_neighbor, recv_neighbor, ierr
2285 neighbor_domain_x%beg = -huge(0._wp)
2286 neighbor_domain_x%end = huge(0._wp)
2287 neighbor_domain_y%beg = -huge(0._wp)
2288 neighbor_domain_y%end = huge(0._wp)
2289 neighbor_domain_z%beg = -huge(0._wp)
2290 neighbor_domain_z%end = huge(0._wp)
2295# 1480 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2296 if (num_dims >= 1)
then
2299 do k = 1, ib_neighborhood_radius
2300 send_neighbor = merge(bc_x%end, mpi_proc_null, bc_x%end >= 0)
2301 recv_neighbor = merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0)
2302 recv_val = -huge(0._wp)
2303 call mpi_sendrecv(beg_val, 1, mpi_p, send_neighbor, 100, recv_val, 1, mpi_p, recv_neighbor, 100, &
2304 & mpi_comm_world, mpi_status_ignore, ierr)
2307 send_neighbor = merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0)
2308 recv_neighbor = merge(bc_x%end, mpi_proc_null, bc_x%end >= 0)
2309 recv_val = huge(0._wp)
2310 call mpi_sendrecv(end_val, 1, mpi_p, send_neighbor, 101, recv_val, 1, mpi_p, recv_neighbor, &
2311 & 101, mpi_comm_world, mpi_status_ignore, ierr)
2315 if (f_approx_equal(beg_val, x_cb(m)) .or. f_approx_equal(end_val, x_cb(-1)))
then
2316 beg_val = -huge(0._wp)
2317 end_val = huge(0._wp)
2321 neighbor_domain_x%beg = beg_val
2322 neighbor_domain_x%end = end_val
2324# 1480 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2325 if (num_dims >= 2)
then
2328 do k = 1, ib_neighborhood_radius
2329 send_neighbor = merge(bc_y%end, mpi_proc_null, bc_y%end >= 0)
2330 recv_neighbor = merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0)
2331 recv_val = -huge(0._wp)
2332 call mpi_sendrecv(beg_val, 1, mpi_p, send_neighbor, 102, recv_val, 1, mpi_p, recv_neighbor, 102, &
2333 & mpi_comm_world, mpi_status_ignore, ierr)
2336 send_neighbor = merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0)
2337 recv_neighbor = merge(bc_y%end, mpi_proc_null, bc_y%end >= 0)
2338 recv_val = huge(0._wp)
2339 call mpi_sendrecv(end_val, 1, mpi_p, send_neighbor, 103, recv_val, 1, mpi_p, recv_neighbor, &
2340 & 103, mpi_comm_world, mpi_status_ignore, ierr)
2344 if (f_approx_equal(beg_val, y_cb(n)) .or. f_approx_equal(end_val, y_cb(-1)))
then
2345 beg_val = -huge(0._wp)
2346 end_val = huge(0._wp)
2350 neighbor_domain_y%beg = beg_val
2351 neighbor_domain_y%end = end_val
2353# 1480 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2354 if (num_dims >= 3)
then
2357 do k = 1, ib_neighborhood_radius
2358 send_neighbor = merge(bc_z%end, mpi_proc_null, bc_z%end >= 0)
2359 recv_neighbor = merge(bc_z%beg, mpi_proc_null, bc_z%beg >= 0)
2360 recv_val = -huge(0._wp)
2361 call mpi_sendrecv(beg_val, 1, mpi_p, send_neighbor, 104, recv_val, 1, mpi_p, recv_neighbor, 104, &
2362 & mpi_comm_world, mpi_status_ignore, ierr)
2365 send_neighbor = merge(bc_z%beg, mpi_proc_null, bc_z%beg >= 0)
2366 recv_neighbor = merge(bc_z%end, mpi_proc_null, bc_z%end >= 0)
2367 recv_val = huge(0._wp)
2368 call mpi_sendrecv(end_val, 1, mpi_p, send_neighbor, 105, recv_val, 1, mpi_p, recv_neighbor, &
2369 & 105, mpi_comm_world, mpi_status_ignore, ierr)
2373 if (f_approx_equal(beg_val, z_cb(p)) .or. f_approx_equal(end_val, z_cb(-1)))
then
2374 beg_val = -huge(0._wp)
2375 end_val = huge(0._wp)
2379 neighbor_domain_z%beg = beg_val
2380 neighbor_domain_z%end = end_val
2382# 1509 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
type(scalar_field), dimension(sys_size), intent(inout) q_cons_vf
One-way acoustic source injection, Maeda and Colonius JCP (2017).
impure subroutine, public s_precalculate_acoustic_spatial_sources
Pre-compute non-zero spatial source weights before time-stepping.
impure subroutine, public s_initialize_acoustic_src
Initialize the acoustic source module.
Computes gravitational and body force source terms for the momentum equations.
impure subroutine, public s_initialize_body_forces_module
Initialize the body forces module.
Noncharacteristic and processor boundary condition application for ghost cells and buffer regions.
impure subroutine, public s_initialize_boundary_common_module()
Allocate and set up boundary condition buffer arrays for all coordinate directions.
impure subroutine, public s_populate_variables_buffers(bc_type, q_prim_vf, pb_in, mv_in, q_t_sf)
Populate the buffers of the primitive variables based on the selected boundary conditions.
Computes ensemble-averaged (Euler–Euler) bubble source terms for radius, velocity,...
impure subroutine s_initialize_bubbles_ee_module
Initialize the Euler-Euler bubble module.
Tracks Lagrangian bubbles and couples their dynamics to the Eulerian flow via volume averaging.
impure subroutine s_write_lag_bubble_stats()
Write the maximum and minimum radius statistics for each bubble.
impure subroutine s_write_restart_lag_bubbles(t_step)
Write restart files for the Lagrangian bubble solver.
integer nbubs
Number of bubbles in the local domain.
impure subroutine s_initialize_bubbles_el_module(q_cons_vf)
Initializes the lagrangian subgrid bubble solver.
type(scalar_field), dimension(:), allocatable q_beta
Projection of the lagrangian particles in the Eulerian framework.
real(wp), dimension(:,:), allocatable intfc_rad
Bubble radius.
Characteristic boundary conditions (CBC) for slip walls, non-reflecting subsonic inflow/outflow,...
impure subroutine, public s_initialize_cbc_module
Initialize the CBC module.
Shared input validation checks for grid dimensions and AMD GPU compiler limits.
impure subroutine, public s_check_inputs_common
Checks compatibility of parameters in the input file. Used by all three stages.
Validates simulation input parameters for consistency and supported configurations.
impure subroutine, public s_check_inputs
Checks compatibility of parameters in the input file. Used by the simulation stage.
Multi-species chemistry interface for thermodynamic properties, reaction rates, and transport coeffic...
subroutine s_compute_q_t_sf(q_t_sf, q_cons_vf, bounds)
Initialize the temperature field from conservative variables by inverting the energy equation.
Ghost-node immersed boundary method: locates ghost/image points, computes interpolation coefficients,...
Platform-specific file and directory operations: create, delete, inquire, getcwd, and basename.
impure subroutine my_inquire(fileloc, dircheck)
Inquires on the existence of a directory.
Compile-time constant parameters: default values, tolerances, and physical constants.
real(wp), parameter dflt_t_guess
Default guess for temperature (when a previous value is not available).
integer, parameter time_stepper_rk2
real(wp), parameter sgm_eps
Segmentation tolerance.
integer, parameter recon_type_muscl
integer, parameter time_stepper_rk1
integer, parameter time_stepper_rk3
integer, parameter nnode
Number of QBMM nodes.
integer, parameter recon_type_weno
integer, parameter model_eqns_6eq
Writes solution data, run-time stability diagnostics (ICFL, VCFL, CCFL, Rc), and probe/center-of-mass...
impure subroutine, public s_initialize_data_output_module
Initialize the data output module.
impure subroutine, public s_write_data_files(q_cons_vf, q_t_sf, q_prim_vf, t_step, bc_type, beta)
Write data files. Dispatch subroutine that replaces procedure pointer.
impure subroutine, public s_write_ib_state_file(time_step)
Writes IB state records to restart_data/ib_state.dat. Must be called only on rank 0.
subroutine, public s_write_ib_data_file(time_step)
Dispatch immersed boundary data output to the serial or parallel writer.
Shared derived types for field data, patch geometry, bubble dynamics, and MPI I/O structures.
Derives diagnostic flow quantities (vorticity, speed of sound, numerical Schlieren,...
impure subroutine, public s_initialize_derived_variables
Allocate and open derived variables. Computing FD coefficients.
impure subroutine, public s_initialize_derived_variables_module
Computation of parameters, allocation procedures, and/or any other tasks needed to properly setup the...
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
real(wp) mytime
Current simulation time.
type(int_bounds_info), dimension(1:3) idwint
real(wp), dimension(:), allocatable, target z_cb
type(int_bounds_info) bc_z
integer proc_rank
Rank of the local processor.
type(bounds_info) z_domain
type(bounds_info) x_domain
type(int_bounds_info), dimension(1:3) idwbuff
type(int_bounds_info) bc_y
impure subroutine s_initialize_global_parameters_module
Initialize the global parameters module.
real(wp), dimension(:), allocatable, target y_cc
type(pres_field), dimension(:), allocatable pb_ts
type(pres_field), dimension(:), allocatable mv_ts
type(int_bounds_info) bc_x
type(bounds_info) y_domain
real(wp), dimension(:), allocatable, target z_cc
real(wp), dimension(:), allocatable qvs
real(wp), dimension(:), allocatable pi_infs
integer num_procs
Number of processors.
real(wp), dimension(:), allocatable, target x_cc
real(wp), dimension(:), allocatable, target y_cb
type(cell_num_bounds) cells_bounds
type(mpi_io_var), public mpi_io_data
real(wp), dimension(:), allocatable, target dy
real(wp), dimension(:), allocatable gammas
real(wp) finaltime
Final simulation time.
real(wp), dimension(:), allocatable, target dz
real(wp), dimension(:), allocatable, target dx
real(wp), dimension(:), allocatable, target x_cb
Basic floating-point utilities: approximate equality, default detection, and coordinate bounds.
elemental subroutine, public s_update_cell_bounds(bounds, m, n, p)
Updates the min and max number of cells in each set of axes.
Utility routines for bubble model setup, coordinate transforms, array sampling, and special functions...
subroutine, public s_upsample_data(q_cons_vf, q_cons_temp)
Upsample conservative variable fields from a coarsened grid back to the original resolution using int...
impure subroutine, public s_initialize_bubbles_model()
Initialize bubble model arrays for Euler or Lagrangian bubbles with polytropic or non-polytropic gas.
elemental subroutine, public s_int_to_str(i, res)
Convert an integer to its trimmed string representation.
Computes the left Cauchy–Green deformation tensor and hyperelastic stress source terms.
impure subroutine, public s_initialize_hyperelastic_module
Initialize the hyperelastic module.
Computes hypoelastic stress-rate source terms and damage-state evolution.
impure subroutine, public s_initialize_hypoelastic_module
Initialize the hypoelastic module.
Allocate memory and read initial condition data for IC extrusion.
subroutine, public s_initialize_ib_airfoils()
Initialize the NACA surface grids for all airfoil IB patches. Must be called after the grid is establ...
Ghost-node immersed boundary method: locates ghost/image points, computes interpolation coefficients,...
impure subroutine, public s_ibm_setup()
Initializes the values of various IBM variables, such as ghost points and image points.
type(integer_field), public ib_markers
impure subroutine, public s_initialize_ibm_module()
Allocates memory for the variables in the IBM module.
Iterative ghost rasterization (IGR) for sharp immersed boundary treatment.
subroutine, public s_initialize_igr_module()
Initialize the IGR module.
Binary STL file reader and processor for immersed boundary geometry.
subroutine, public s_instantiate_stl_models()
Load, transform, and register STL/OBJ immersed-boundary models onto the simulation grid.
MPI communication layer: domain decomposition, halo exchange, reductions, and parallel I/O setup.
impure subroutine s_mpi_abort(prnt, code)
The subroutine terminates the MPI execution environment.
impure subroutine s_initialize_mpi_common_module
Initialize the module.
impure subroutine s_mpi_barrier
Halts all processes until all have reached barrier.
impure subroutine s_initialize_mpi_data(q_cons_vf, ib_markers, beta)
Set up MPI I/O data views and variable pointers for parallel file output.
subroutine s_initialize_mpi_data_ds(q_cons_vf)
Set up MPI I/O data views for downsampled (coarsened) parallel file output.
impure subroutine mpi_bcast_time_step_values(proc_time, time_avg)
Gather per-rank time step wall-clock times onto rank 0 for performance reporting.
MPI halo exchange, domain decomposition, and buffer packing/unpacking for the simulation solver.
subroutine s_initialize_mpi_proxy_module()
Initialize the MPI proxy module.
MUSCL reconstruction with interface sharpening for contact-preserving advection.
subroutine, public s_initialize_muscl_module()
Allocate and initialize MUSCL reconstruction working arrays.
NVIDIA NVTX profiling API bindings for GPU performance instrumentation.
subroutine nvtxstartrange(name, id)
Push a named NVTX range for GPU profiling, optionally with a color based on the given identifier.
subroutine nvtxendrange
Pop the current NVTX range to end the GPU profiling region.
Generates particle beds by converting particle_cloud patch specifications into individual immersed bo...
impure subroutine, public s_generate_particle_clouds(particle_cloud_ibs)
Generate all particle beds and fill particle_cloud_ibs. Called on all ranks before s_reduce_ib_patch_...
Phase transition relaxation solvers for liquid-vapor flows with cavitation and boiling.
subroutine, public s_infinite_relaxation_k(q_cons_vf)
Apply pT- or pTg-equilibrium relaxation with mass depletion based on the incoming state conditions.
impure subroutine, public s_initialize_phasechange_module
Initialize the phase change module by setting saturation curve coefficients for pT- or pTg-equilibriu...
Quadrature-based moment methods (QBMM) for polydisperse bubble moment inversion and transport.
impure subroutine, public s_initialize_qbmm_module
Initialize the QBMM module.
Assembles the right-hand side of the governing equations using finite-volume flux differencing,...
impure subroutine, public s_initialize_rhs_module
Initialize the RHS module.
Approximate and exact Riemann solvers (HLL, HLLC, HLLD, exact) for the multicomponent Navier–Stokes e...
impure subroutine, public s_initialize_riemann_solvers_module
Initialize the Riemann solvers module.
Simulation helper routines for enthalpy computation, CFL calculation, and stability checks.
Reads input files, loads initial conditions and grid data, and orchestrates solver initialization and...
impure subroutine s_read_ib_restart_data(t_step)
Reads IB kinematic state from restart_data/ib_state.dat on restart. Rank 0 reads the last num_ibs rec...
impure subroutine, public s_read_serial_data_files(q_cons_vf)
Read serial initial condition and grid data files and compute cell-width distributions.
impure subroutine, public s_initialize_modules
Initialize all simulation sub-modules in the required dependency order.
impure subroutine, public s_read_data_files(q_cons_vf)
Read data files. Dispatch subroutine that replaces procedure pointer.
impure subroutine, public s_read_parallel_data_files(q_cons_vf)
Read parallel initial condition and grid data files via MPI I/O.
subroutine, public s_initialize_internal_energy_equations(v_vf)
Initialize internal-energy equations from phase mass, mixture momentum, and total energy.
impure subroutine, public s_save_performance_metrics(time_avg, time_final, io_time_avg, io_time_final, proc_time, io_proc_time, file_exists)
Collect per-process wall-clock times and write aggregate performance metrics to file.
subroutine get_neighbor_bounds()
subroutine s_compute_ib_neighbor_ranks()
Build ib_neighbor_ranks(-1:1,-1:1,-1:1): MPI ranks of all neighbor domains. Uses two rounds of MPI_SE...
subroutine s_reduce_ib_patch_array(particle_cloud_ibs)
Merges patch_ib (namelist patches, fixed at num_ib_patches_max_namelist) with particle_cloud_ibs (CPU...
impure subroutine, public s_save_data(t_step, start, finish, io_time_avg, nt)
Save conservative variable data to disk at the current time step.
type(scalar_field), dimension(:), allocatable q_cons_temp
subroutine, public s_initialize_gpu_vars
Transfer initial conservative variable and model parameter data to the GPU device.
impure subroutine, public s_initialize_mpi_domain
Set up the MPI execution environment, bind GPUs, and decompose the computational domain.
impure subroutine, public s_finalize_modules
Finalize and deallocate all simulation sub-modules in reverse initialization order.
impure subroutine, public s_read_input_file
Verify the input file exists and read it.
impure subroutine, public s_check_input_file
Validate that all user-provided inputs form a consistent simulation configuration.
impure subroutine, public s_perform_time_step(t_step, time_avg)
Advance the simulation by one time step, handling CFL-based dt and time-stepper dispatch.
Computes capillary source fluxes and color-function gradients for the diffuse-interface surface tensi...
impure subroutine, public s_initialize_surface_tension_module
Allocate and initialize surface tension module arrays.
THINC and MTHINC interface compression for volume fraction sharpening. THINC (int_comp=1): 1D directi...
subroutine, public s_initialize_thinc_module()
real(wp), dimension(:,:,:), allocatable position
Total-variation-diminishing (TVD) Runge–Kutta time integrators (1st-, 2nd-, and 3rd-order SSP).
type(scalar_field) q_t_sf
Cell-average temperature variables at the current time-stage.
type(integer_field), dimension(:,:), allocatable bc_type
Boundary condition identifiers.
impure subroutine s_initialize_time_steppers_module
Initialize the time steppers module.
type(vector_field), dimension(:), allocatable q_cons_ts
Cell-average conservative variables at each time-stage (TS).
type(scalar_field), dimension(:), allocatable q_prim_vf
Cell-average primitive variables at the current time-stage.
impure subroutine s_compute_dt()
Compute the global time step size from CFL stability constraints across all cells.
impure subroutine s_tvd_rk(t_step, time_avg, nstage)
Advance the solution one full step using a TVD Runge-Kutta time integrator.
integer stor
storage index
Conservative-to-primitive variable conversion, mixture property evaluation, and pressure computation.
subroutine, public s_compute_pressure(energy, alf, dyn_p, pi_inf, gamma, rho, qv, rhoyks, pres, t, stress, mom, g, pres_mag)
Compute the pressure from the appropriate equation of state.
impure subroutine, public s_initialize_variables_conversion_module
Initialize the variables conversion module.
subroutine, public s_convert_to_mixture_variables(q_vf, i, j, k, rho, gamma, pi_inf, qv, re_k, g_k, g)
Dispatch to the s_convert_mixture_to_mixture_variables and s_convert_species_to_mixture_variables sub...
Computes viscous stress tensors and diffusive flux contributions for the Navier–Stokes equations.
impure subroutine, public s_initialize_viscous_module
Initialize the viscous module.
WENO/WENO-Z/TENO reconstruction with optional monotonicity-preserving bounds and mapped weights.
impure subroutine, public s_initialize_weno_module
Initialize the WENO module.
Derived type annexing a scalar field (SF).