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# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
31# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
34# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
35# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
36# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
38# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
47# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
58# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
59# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
60# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
61# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
62# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
63# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
64# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
66# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
67# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
68# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
70# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
71# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
74# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
75# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
76# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
78# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
79# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
81# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
83# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
85# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
87# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
89# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
91# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
93# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
95# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
97# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
99# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
115# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
119# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
121# 95 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
123# 100 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125# 105 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
127# 110 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129# 115 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
131# 120 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
133# 125 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
135# 130 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137# 135 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139# 165 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141# 219 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143# 233 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
145# 258 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
147# 269 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
149# 271 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
150# 282 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
152# 332 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
154# 342 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
156# 352 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
158# 361 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
160# 378 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
162# 388 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
164# 395 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
166# 401 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
168# 407 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
170# 413 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
172# 419 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
174# 425 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
176# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
177# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
178# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
179# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
180# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
181# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
182# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
183# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
185# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
186# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
187# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
189# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
190# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
193# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
194# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
195# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
197# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
198# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
200# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
202# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
204# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
206# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
208# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
210# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
212# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
214# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
216# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
218# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
232# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
234# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
236# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
238# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
240# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
242# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
244# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
246# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
248# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
250# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
252# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
254# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
256# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
258# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
260# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
262# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
264# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
266# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
268# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
270# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
272# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
274# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
277# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
280# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
283# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
286# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
289# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
292# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
295# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
298# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
301# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
304# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
307# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
310# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
313# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
316# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
319# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
322# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
325# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
328# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
331# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
333# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
334# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
336# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
338# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
343# 52 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
346# 72 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
349# 80 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
352# 104 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
355# 120 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
358# 145 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
360# 151 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
362# 158 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
364# 7 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp" 2
399#if defined(MFC_OpenACC)
400# 41 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
402# 41 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
403#elif defined(MFC_OpenMP)
404# 41 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
406# 41 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
408# 42 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
440 if (.not. parallel_io)
then
451 character(LEN=name_len),
parameter :: file_path =
'./simulation.inp'
452 logical :: file_exist
456 character(len=1000) :: line
458# 1 "/home/runner/work/MFC/MFC/build/include/simulation/generated_namelist.fpp" 1
461# 22 "/home/runner/work/MFC/MFC/build/include/simulation/generated_namelist.fpp"
462namelist /user_inputs/ adc_kappa, bx0, ca, r0ref, re_inv, web, acoustic, acoustic_source, adap_dt, adap_dt_max_iters, &
463 & adap_dt_tol, adv_n, alf_factor, alpha_bar, alt_soundspeed, avg_state,
bc_x,
bc_y,
bc_z, bf_spatial_support, bf_x, bf_y, &
464 & bf_z, bub_pp, bubble_model, bubbles_euler, bubbles_lagrange, case_dir, cfl_adap_dt, cfl_const_dt, cfl_target, chem_params, &
465 & coefficient_of_restitution, collision_model, collision_temporal_resolution, collision_time, cont_damage, cont_damage_s, &
466 & cyl_coord, down_sample, dt, fd_order, fft_wrt, file_per_process, fluid_pp, g_x, g_y, g_z, hll_u_interface, hyper_cleaning, &
467 & hyper_cleaning_speed, hyper_cleaning_tau, hypo_hll_interface_rhs, hypoelasticity, ib, ib_airfoil, &
468 & ib_coefficient_of_friction, ib_force_stride, ib_force_wrt, ib_ip_min_dist, ib_neighborhood_radius, ib_second_order_vel, &
469 & ib_state_wrt, ic_beta, ic_eps, int_comp, k_x, k_y, k_z, lag_params, low_mach, m, many_ib_patch_parallelism, mixture_err, &
470 & model_eqns, mp_weno, mpp_lim, muscl_eps, n, n_start, null_weights, num_bc_patches, num_ibs, num_igr_iters, &
471 & num_igr_warm_start_iters, num_particle_clouds, num_probes, num_source, num_stl_models, num_turbulent_sources, &
472 & 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, &
473 & patch_ib, pi_fac, poly_sigma, polydisperse, polytropic, precision, prim_vars_wrt, probe, probe_wrt, ptgalpha_eps, qbmm, &
474 & ramp_ratio, rburn, rdma_mpi, reactive_burn, relax, relax_model, riemann_hypo_adc, riemann_solver, run_time_info, sigma, &
476 &
synth_n_waves_per_shell, synth_seed, synthetic_turbulence, t_save, t_step_old, t_step_print, t_step_save, t_step_start, &
477 & t_step_stop, t_stop, tau_star, teno_ct, thermal, time_stepper,
turb_pos, w_x, w_y, w_z, wave_speeds, weno_re_flux, &
478 & weno_avg, weno_eps, &
479 & igr, igr_iter_solver, igr_order, igr_pres_lim, mapped_weno, mhd, muscl_lim, muscl_order,
nb, num_fluids, recon_type, &
480 & relativity, teno, viscous, weno_order, wenoz, wenoz_q
481# 42 "/home/runner/work/MFC/MFC/build/include/simulation/generated_namelist.fpp"
482# 92 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp" 2
484 inquire (file=trim(file_path), exist=file_exist)
487 open (1, file=trim(file_path), form=
'formatted', action=
'read', status=
'old')
488 read (1, nml=user_inputs, iostat=iostatus)
490 if (iostatus /= 0)
then
492 read (1, fmt=
'(A)') line
493 print *,
'Invalid line in namelist: ' // trim(line)
494 call s_mpi_abort(
'Invalid line in simulation.inp. It is ' //
'likely due to a datatype mismatch. Exiting.')
499 if ((bf_x) .or. (bf_y) .or. (bf_z) .or. (bf_spatial_support))
then
509 if (cfl_adap_dt .or. cfl_const_dt)
cfl_dt = .true.
519 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
527 character(LEN=path_len) :: file_path
528 logical :: file_exist
530 file_path = trim(case_dir) //
'/.'
534 if (file_exist .neqv. .true.)
then
535 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
547 character(LEN=path_len + 2*name_len) :: t_step_dir
548 character(LEN=path_len + 3*name_len) :: file_path
549 logical :: file_exist
553 write (t_step_dir,
'(A,I0,A,I0)') trim(case_dir) //
'/p_all/p',
proc_rank,
'/', n_start
555 write (t_step_dir,
'(A,I0,A,I0)') trim(case_dir) //
'/p_all/p',
proc_rank,
'/', t_step_start
558 file_path = trim(t_step_dir) //
'/.'
561 if (file_exist .neqv. .true.)
then
562 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
571 file_path = trim(t_step_dir) //
'/x_cb.dat'
573 inquire (file=trim(file_path), exist=file_exist)
576 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
577 read (2)
x_cb(-1:m);
close (2)
579 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
586 file_path = trim(t_step_dir) //
'/y_cb.dat'
588 inquire (file=trim(file_path), exist=file_exist)
591 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
592 read (2)
y_cb(-1:n);
close (2)
594 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
602 file_path = trim(t_step_dir) //
'/z_cb.dat'
604 inquire (file=trim(file_path), exist=file_exist)
607 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
608 read (2)
z_cb(-1:p);
close (2)
610 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
618 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/q_cons_vf',
i,
'.dat'
619 inquire (file=trim(file_path), exist=file_exist)
621 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
622 read (2)
q_cons_vf(
i)%sf(0:m,0:n,0:p);
close (2)
624 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
628 if (bubbles_euler .or. hypoelasticity)
then
630 if (qbmm .and. .not. polytropic)
then
633 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/pb', sys_size + (
i - 1)*
nnode +
r,
'.dat'
634 inquire (file=trim(file_path), exist=file_exist)
636 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
637 read (2)
pb_ts(1)%sf(0:m,0:n,0:p,
r,
i);
close (2)
639 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
645 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/mv', sys_size + (
i - 1)*
nnode +
r,
'.dat'
646 inquire (file=trim(file_path), exist=file_exist)
648 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
649 read (2)
mv_ts(1)%sf(0:m,0:n,0:p,
r,
i);
close (2)
651 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
666 real(wp),
allocatable,
dimension(:) :: x_cb_glb, y_cb_glb, z_cb_glb
667 integer :: ifile, ierr, data_size
668 integer,
dimension(MPI_STATUS_SIZE) :: status
669 integer(KIND=MPI_OFFSET_KIND) :: disp
670 integer(KIND=MPI_OFFSET_KIND) :: m_mok, n_mok, p_mok
671 integer(KIND=MPI_OFFSET_KIND) :: wp_mok, var_mok
672 integer(KIND=MPI_OFFSET_KIND) :: mok
673 character(LEN=path_len + 2*name_len) :: file_loc
674 logical :: file_exist
675 character(len=10) :: t_step_start_string
677 integer(KIND=MPI_OFFSET_KIND) :: nvars_mok
680 integer :: m_ds, n_ds, p_ds
681 integer :: m_glb_ds, n_glb_ds, p_glb_ds
682 integer :: m_glb_read, n_glb_read, p_glb_read
684 allocate (x_cb_glb(-1:
m_glb))
685 allocate (y_cb_glb(-1:
n_glb))
686 allocate (z_cb_glb(-1:
p_glb))
688 file_loc = trim(case_dir) //
'/restart_data' // trim(mpiiofs) //
'x_cb.dat'
689 inquire (file=trim(file_loc), exist=file_exist)
691 if (down_sample)
then
692 m_ds = int((m + 1)/3) - 1
693 n_ds = int((n + 1)/3) - 1
694 p_ds = int((p + 1)/3) - 1
696 m_glb_ds = int((
m_glb + 1)/3) - 1
697 n_glb_ds = int((
n_glb + 1)/3) - 1
698 p_glb_ds = int((
p_glb + 1)/3) - 1
702 data_size =
m_glb + 2
703 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
705 call mpi_file_read(ifile, x_cb_glb, data_size, mpi_p, status, ierr)
706 call mpi_file_close(ifile, ierr)
708 call s_mpi_abort(
'File ' // trim(file_loc) //
' is missing. Exiting.')
715 file_loc = trim(case_dir) //
'/restart_data' // trim(mpiiofs) //
'y_cb.dat'
716 inquire (file=trim(file_loc), exist=file_exist)
719 data_size =
n_glb + 2
720 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
722 call mpi_file_read(ifile, y_cb_glb, data_size, mpi_p, status, ierr)
723 call mpi_file_close(ifile, ierr)
725 call s_mpi_abort(
'File ' // trim(file_loc) //
' is missing. Exiting.')
732 file_loc = trim(case_dir) //
'/restart_data' // trim(mpiiofs) //
'z_cb.dat'
733 inquire (file=trim(file_loc), exist=file_exist)
736 data_size =
p_glb + 2
737 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
739 call mpi_file_read(ifile, z_cb_glb, data_size, mpi_p, status, ierr)
740 call mpi_file_close(ifile, ierr)
742 call s_mpi_abort(
'File ' // trim(file_loc) //
'is missing. Exiting.')
750 nvars_mok = int(sys_size, mpi_offset_kind)
751 if ((bubbles_euler .or. hypoelasticity) .and. qbmm .and. .not. polytropic) nvars_mok = nvars_mok + 2*
nb*
nnode
753 if (file_per_process)
then
756 write (file_loc,
'(I0,A1,I7.7,A)') n_start,
'_',
proc_rank,
'.dat'
759 write (file_loc,
'(I0,A1,I7.7,A)') t_step_start,
'_',
proc_rank,
'.dat'
761 file_loc = trim(case_dir) //
'/restart_data/lustre_' // trim(t_step_start_string) // trim(mpiiofs) // trim(file_loc)
762 inquire (file=trim(file_loc), exist=file_exist)
765 call mpi_file_open(mpi_comm_self, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
768 if (down_sample)
then
779 if (down_sample)
then
780 data_size = (m_ds + 3)*(n_ds + 3)*(p_ds + 3)
781 m_glb_read = m_glb_ds + 1
782 n_glb_read = n_glb_ds + 1
783 p_glb_read = p_glb_ds + 1
785 data_size = (m + 1)*(n + 1)*(p + 1)
786 m_glb_read =
m_glb + 1
787 n_glb_read =
n_glb + 1
788 p_glb_read =
p_glb + 1
791 & mpi_offset_kind)*nvars_mok)
793 m_mok = int(m_glb_read + 1, mpi_offset_kind)
794 n_mok = int(m_glb_read + 1, mpi_offset_kind)
795 p_mok = int(m_glb_read + 1, mpi_offset_kind)
796 wp_mok = int(storage_size(0._stp)/8, mpi_offset_kind)
797 mok = int(1._wp, mpi_offset_kind)
799 if (bubbles_euler .or. hypoelasticity)
then
801 var_mok = int(
i, mpi_offset_kind)
803 call mpi_file_read(ifile,
mpi_io_data%var(
i)%sf(:,:,:), data_size*mpi_io_type, mpi_io_p, status, ierr)
806 if (qbmm .and. .not. polytropic)
then
807 do i = sys_size + 1, sys_size + 2*
nb*
nnode
808 var_mok = int(
i, mpi_offset_kind)
810 call mpi_file_read(ifile,
mpi_io_data%var(
i)%sf(:,:,:), data_size*mpi_io_type, mpi_io_p, status, ierr)
814 if (down_sample)
then
816 var_mok = int(
i, mpi_offset_kind)
818 call mpi_file_read(ifile,
q_cons_temp(
i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
822 var_mok = int(
i, mpi_offset_kind)
824 call mpi_file_read(ifile,
mpi_io_data%var(
i)%sf(:,:,:), data_size*mpi_io_type, mpi_io_p, status, ierr)
831 call mpi_file_close(ifile, ierr)
833 call s_mpi_abort(
'File ' // trim(file_loc) //
' is missing. Exiting.')
837 write (file_loc,
'(I0,A)') n_start,
'.dat'
839 write (file_loc,
'(I0,A)') t_step_start,
'.dat'
841 file_loc = trim(case_dir) //
'/restart_data' // trim(mpiiofs) // trim(file_loc)
842 inquire (file=trim(file_loc), exist=file_exist)
845 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly, mpi_info_int, ifile, ierr)
855 data_size = (m + 1)*(n + 1)*(p + 1)
857 m_mok = int(
m_glb + 1, mpi_offset_kind)
858 n_mok = int(
n_glb + 1, mpi_offset_kind)
859 p_mok = int(
p_glb + 1, mpi_offset_kind)
860 wp_mok = int(storage_size(0._stp)/8, mpi_offset_kind)
861 mok = int(1._wp, mpi_offset_kind)
864 if (bubbles_euler .or. hypoelasticity)
then
866 var_mok = int(
i, mpi_offset_kind)
867 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
869 call mpi_file_set_view(ifile, disp, mpi_io_p,
mpi_io_data%view(
i),
'native', mpi_info_int, ierr)
870 call mpi_file_read(ifile,
mpi_io_data%var(
i)%sf(:,:,:), data_size*mpi_io_type, mpi_io_p, status, ierr)
873 if (qbmm .and. .not. polytropic)
then
874 do i = sys_size + 1, sys_size + 2*
nb*
nnode
875 var_mok = int(
i, mpi_offset_kind)
876 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
878 call mpi_file_set_view(ifile, disp, mpi_io_p,
mpi_io_data%view(
i),
'native', mpi_info_int, ierr)
879 call mpi_file_read(ifile,
mpi_io_data%var(
i)%sf(:,:,:), data_size*mpi_io_type, mpi_io_p, status, ierr)
884 var_mok = int(
i, mpi_offset_kind)
886 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
888 call mpi_file_set_view(ifile, disp, mpi_io_p,
mpi_io_data%view(
i),
'native', mpi_info_int, ierr)
889 call mpi_file_read_all(ifile,
mpi_io_data%var(
i)%sf(:,:,:), data_size*mpi_io_type, mpi_io_p, status, ierr)
895 call mpi_file_close(ifile, ierr)
897 call s_mpi_abort(
'File ' // trim(file_loc) //
' is missing. Exiting.')
901 deallocate (x_cb_glb, y_cb_glb, z_cb_glb)
917 integer,
intent(in) :: ifile
918 character(len=*),
intent(in) :: file_loc
919 integer(KIND=MPI_OFFSET_KIND),
intent(in) :: expected_bytes
920 integer(KIND=MPI_OFFSET_KIND) :: file_bytes
922 character(len=64) :: sizes
924 call mpi_file_get_size(ifile, file_bytes, ierr)
925 if (ierr /= mpi_success)
call s_mpi_abort(
'MPI_FILE_GET_SIZE failed on ' // trim(file_loc) //
'. Exiting.')
926 if (file_bytes < expected_bytes)
then
927 write (sizes,
'(I0," bytes but ",I0)') file_bytes, expected_bytes
928 call s_mpi_abort(
'Restart file ' // trim(file_loc) //
' holds ' // trim(sizes) //
' are expected. It is ' &
929 & //
'truncated, e.g. by a job killed while writing it; restart from an earlier step.')
938 type(
scalar_field),
dimension(sys_size),
intent(inout) :: v_vf
944 real(wp),
dimension(2) :: re
946 real(wp) :: alpha_i, alpha_rho_i, e_i
947 integer ::
i,
j,
k,
l, c
948 real(wp),
dimension(num_species) :: rhoyks
961 do i = eqn_idx%mom%beg, eqn_idx%mom%end
962 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)
966 do c = 1, num_species
967 rhoyks(c) = v_vf(eqn_idx%species%beg + c - 1)%sf(
j,
k,
l)
973 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)
975 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, &
976 &
l)**2 + v_vf(eqn_idx%B%beg + 2)%sf(
j,
k,
l)**2)
980 call s_compute_pressure(v_vf(eqn_idx%E)%sf(
j,
k,
l), 0._stp, dyn_pres, pi_inf, gamma, rho, qv, rhoyks, pres, &
981 & t, pres_mag=pres_mag)
984 alpha_i = v_vf(
i + eqn_idx%adv%beg - 1)%sf(
j,
k,
l)
985 alpha_rho_i = v_vf(
i + eqn_idx%cont%beg - 1)%sf(
j,
k,
l)
987 v_vf(
i + eqn_idx%int_en%beg - 1)%sf(
j,
k,
l) = e_i
998 integer,
intent(inout) :: t_step
999 real(wp),
intent(inout) :: time_avg
1000 integer ::
i, eta_hh, eta_mm, eta_ss
1002 real(wp) :: dt_floor
1003 character(len=8) :: lim_str
1006 if (cfl_const_dt .and. t_step == 0)
call s_compute_dt()
1015 if (collision_model > 0 .and. collision_temporal_resolution > 0)
then
1016 dt_floor = min(dt_floor, 1.e-3_wp*collision_time/real(collision_temporal_resolution, wp))
1019 if (dt < dt_floor .and. cfl_adap_dt .and.
proc_rank == 0)
then
1020 print *,
"Delta t = ", dt,
" limited by ",
dt_limiter
1028 if ((
mytime + dt) >= t_stop)
then
1031# 639 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1032#if defined(MFC_OpenACC)
1033# 639 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1035# 639 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1036#elif defined(MFC_OpenMP)
1037# 639 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1039# 639 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1041# 640 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1046 if (
proc_rank == 0 .and. mod(t_step - t_step_start, t_step_print) == 0)
then
1048 eta_hh = int(eta_sec)/3600
1049 eta_mm = mod(int(eta_sec), 3600)/60
1050 eta_ss = mod(int(eta_sec), 60)
1052 if (cfl_adap_dt) lim_str =
' (' //
dt_limiter //
')'
1053 print
'(" [", I3, "%] t = ", ES11.4, " dt = ", ES11.4, A, " @ step ", I0, " t/step ", ES9.2, "s (avg ", ES9.2, "s) ETA ", I0, ":", I2.2, ":", I2.2)', &
1058 if (
proc_rank == 0 .and. mod(t_step - t_step_start, t_step_print) == 0)
then
1060 eta_hh = int(eta_sec)/3600
1061 eta_mm = mod(int(eta_sec), 3600)/60
1062 eta_ss = mod(int(eta_sec), 60)
1063 print
'(" [", I3, "%] step ", I0, " of ", I0, " (t_step ", I0, ") t/step ", ES9.2, "s (avg ", ES9.2, "s) ETA ", I0, ":", I2.2, ":", I2.2)', &
1064 & int(ceiling(100._wp*(real(t_step - t_step_start)/(t_step_stop - t_step_start + 1)))), &
1073# 670 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1074#if defined(MFC_OpenACC)
1075# 670 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1077# 670 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1078#elif defined(MFC_OpenMP)
1079# 670 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1081# 670 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1083# 671 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1085 if (bubbles_euler)
then
1087# 673 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1088#if defined(MFC_OpenACC)
1089# 673 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1091# 673 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1092#elif defined(MFC_OpenMP)
1093# 673 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1095# 673 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1097# 674 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1103 call s_tvd_rk(t_step, time_avg, time_stepper)
1126 real(wp),
intent(inout) :: time_avg, time_final
1127 real(wp),
intent(inout) :: io_time_avg, io_time_final
1128 real(wp),
dimension(:),
intent(inout) :: proc_time
1129 real(wp),
dimension(:),
intent(inout) :: io_proc_time
1130 logical,
intent(inout) :: file_exists
1131 real(wp) :: grind_time
1143 io_time_final = 0._wp
1145 time_final = time_avg
1146 io_time_final = io_time_avg
1148 time_final = maxval(proc_time)
1149 io_time_final = maxval(io_proc_time)
1152 grind_time = time_final*1.0e9_wp/(real(sys_size, wp)*real(maxval((/1,
m_glb/)), wp)*real(maxval((/1,
n_glb/)), &
1153 & wp)*real(maxval((/1,
p_glb/)), wp))
1155 print *,
"Performance:", grind_time,
"ns/gp/eq/rhs"
1156 inquire (file=
'time_data.dat', exist=file_exists)
1157 if (file_exists)
then
1158 open (1, file=
'time_data.dat',
position=
'append', status=
'old')
1160 open (1, file=
'time_data.dat', status=
'new')
1162 write (1,
'(A10, A15, A15)')
"Ranks",
"s/rhs",
"ns/gp/eq/rhs"
1165 write (1,
'(I10, 2(F15.8))')
num_procs, time_final, grind_time
1169 inquire (file=
'io_time_data.dat', exist=file_exists)
1170 if (file_exists)
then
1171 open (1, file=
'io_time_data.dat',
position=
'append', status=
'old')
1173 open (1, file=
'io_time_data.dat', status=
'new')
1175 write (1,
'(A10, A15)')
"Ranks",
"s/save"
1178 write (1,
'(I10, F15.8)')
num_procs, io_time_final
1187 integer,
intent(inout) :: t_step
1188 real(wp),
intent(inout) :: start, finish, io_time_avg
1189 integer,
intent(inout) :: nt
1190 integer(kind=8) ::
i,
j,
k,
l
1192 integer :: save_count
1194 if (down_sample)
then
1202# 777 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1204# 777 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1205#if defined(MFC_OpenACC)
1206# 777 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1208# 777 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1209#elif defined(MFC_OpenMP)
1210# 777 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1212# 777 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1214# 777 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1216# 777 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1218# 777 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1220# 778 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1231# 787 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1232#if defined(MFC_OpenACC)
1233# 787 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1235# 787 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1236#elif defined(MFC_OpenMP)
1237# 787 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1239# 787 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1241# 787 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1243# 788 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1247 call cpu_time(start)
1250#ifndef FRONTIER_UNIFIED
1252# 795 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1253#if defined(MFC_OpenACC)
1254# 795 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1256# 795 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1257#elif defined(MFC_OpenMP)
1258# 795 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1260# 795 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1262# 796 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1268 print *,
"NaN(s) in timestep output.",
j,
k,
l,
i,
proc_rank, t_step, m, n, p
1276 if (qbmm .and. .not. polytropic)
then
1278# 810 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1279#if defined(MFC_OpenACC)
1280# 810 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1282# 810 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1283#elif defined(MFC_OpenMP)
1284# 810 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1286# 810 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1288# 811 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1290# 811 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1291#if defined(MFC_OpenACC)
1292# 811 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1294# 811 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1295#elif defined(MFC_OpenMP)
1296# 811 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1298# 811 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1300# 812 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1304 save_count = int(
mytime/t_save)
1309 if (bubbles_lagrange)
then
1311# 821 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1312#if defined(MFC_OpenACC)
1313# 821 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1315# 821 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1316#elif defined(MFC_OpenMP)
1317# 821 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1319# 821 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1321# 823 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1324 call s_mpi_abort(
"Bubble radius is negative or NaN, please reduce dt.")
1329# 829 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1330#if defined(MFC_OpenACC)
1331# 829 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1333# 829 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1334#elif defined(MFC_OpenMP)
1335# 829 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1337# 829 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1339# 830 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1342# 831 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1343#if defined(MFC_OpenACC)
1344# 831 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1346# 831 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1347#elif defined(MFC_OpenMP)
1348# 831 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1350# 831 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1352# 832 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1363 call cpu_time(finish)
1367 nt = int((t_step - t_step_start)/(t_step_save))
1371 io_time_avg = abs(finish - start)
1373 io_time_avg = (abs(finish - start) + io_time_avg*(nt - 1))/nt
1381 integer :: m_ds, n_ds, p_ds
1385# 874 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1386 if (bubbles_euler .or. bubbles_lagrange)
then
1401 if (acoustic_source)
then
1405 if (viscous .and. (.not. igr))
then
1421 if (down_sample)
then
1422 m_ds = int((m + 1)/3) - 1
1423 n_ds = int((n + 1)/3) - 1
1424 p_ds = int((p + 1)/3) - 1
1428 allocate (
q_cons_temp(
i)%sf(-1:m_ds + 1,-1:n_ds + 1,-1:p_ds + 1))
1432 if (down_sample)
then
1437# 924 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1438#if defined(MFC_OpenACC)
1439# 924 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1441# 924 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1442#elif defined(MFC_OpenMP)
1443# 924 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1445# 924 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1447# 925 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1465 else if (p == 0)
then
1474# 950 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1475#if defined(MFC_OpenACC)
1476# 950 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1478# 950 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1479#elif defined(MFC_OpenMP)
1480# 950 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1482# 950 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1484# 951 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1486 if (n > 0) dy_min = minval(
dy)
1487 if (p > 0) dz_min = minval(
dz)
1494 if (
cfl_dt .and. n_start > 0)
then
1496 else if (t_step_start > 0)
then
1539 real(wp) :: starttime, endtime
1540 integer :: num_devices, local_size, num_nodes, ppn, my_device_num
1541 integer :: dev, devnum, local_rank
1543 integer :: local_comm
1545#if defined(MFC_OpenACC)
1546 integer(acc_device_kind) :: devtype
1550 call s_mpi_initialize()
1557 call mpi_comm_split_type(mpi_comm_world, mpi_comm_type_shared, 0, mpi_info_null, local_comm, ierr)
1558 call mpi_comm_size(local_comm, local_size, ierr)
1559 call mpi_comm_rank(local_comm, local_rank, ierr)
1561#if defined(MFC_OpenACC)
1562 devtype = acc_get_device_type()
1563 devnum = acc_get_num_devices(devtype)
1564 dev = mod(local_rank, devnum)
1566 call acc_set_device_num(dev, devtype)
1567#elif defined(MFC_OpenMP)
1568 devnum = omp_get_num_devices()
1569 dev = mod(local_rank, devnum)
1570 call omp_set_default_device(dev)
1574 if (proc_rank == 0)
then
1575 call s_assign_default_values_to_user_inputs()
1579 print
'(" Simulating a ", A, " ", I0, "x", I0, "x", I0, " case on ", I0, " rank(s) ", A, ".")', &
1580# 1047 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1582# 1051 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1583 m, n, p, num_procs, &
1584#if defined(MFC_OpenACC)
1585 "with OpenACC offloading"
1586#elif defined(MFC_OpenMP)
1587 "with OpenMP offloading"
1593 call s_mpi_bcast_user_inputs()
1600 call s_initialize_parallel_io()
1602 call s_mpi_decompose_computational_domain(write_silo_ghost_offsets=.false., adjust_local_domains=.false.)
1604 bc = bc_xyz_info(bc_x, bc_y, bc_z)
1613 if (.not. down_sample)
then
1616# 1083 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1617#if defined(MFC_OpenACC)
1618# 1083 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1620# 1083 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1621#elif defined(MFC_OpenMP)
1622# 1083 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1624# 1083 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1626# 1084 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1630 if (qbmm .and. .not. polytropic)
then
1632# 1088 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1633#if defined(MFC_OpenACC)
1634# 1088 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1636# 1088 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1637#elif defined(MFC_OpenMP)
1638# 1088 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1640# 1088 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1642# 1089 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1646# 1091 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1647#if defined(MFC_OpenACC)
1648# 1091 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1650# 1091 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1651#elif defined(MFC_OpenMP)
1652# 1091 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1654# 1091 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1656# 1092 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1660# 1094 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1661#if defined(MFC_OpenACC)
1662# 1094 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1664# 1094 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1665#elif defined(MFC_OpenMP)
1666# 1094 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1668# 1094 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1670# 1095 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1673# 1096 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1674#if defined(MFC_OpenACC)
1675# 1096 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1677# 1096 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1678#elif defined(MFC_OpenMP)
1679# 1096 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1681# 1096 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1683# 1097 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1686# 1098 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1687#if defined(MFC_OpenACC)
1688# 1098 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1690# 1098 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1691#elif defined(MFC_OpenMP)
1692# 1098 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1694# 1098 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1696# 1102 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1698 if (bubbles_euler)
then
1700# 1104 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1701#if defined(MFC_OpenACC)
1702# 1104 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1704# 1104 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1705#elif defined(MFC_OpenMP)
1706# 1104 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1708# 1104 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1710# 1105 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1711 if (.not. polytropic)
then
1713# 1106 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1714#if defined(MFC_OpenACC)
1715# 1106 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1717# 1106 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1718#elif defined(MFC_OpenMP)
1719# 1106 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1721# 1106 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1723# 1107 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1726# 1108 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1727#if defined(MFC_OpenACC)
1728# 1108 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1730# 1108 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1731#elif defined(MFC_OpenMP)
1732# 1108 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1734# 1108 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1736# 1109 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1741# 1112 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1742#if defined(MFC_OpenACC)
1743# 1112 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1745# 1112 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1746#elif defined(MFC_OpenMP)
1747# 1112 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1749# 1112 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1751# 1113 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1754# 1114 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1755#if defined(MFC_OpenACC)
1756# 1114 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1758# 1114 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1759#elif defined(MFC_OpenMP)
1760# 1114 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1762# 1114 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1764# 1115 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1766# 1115 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1767#if defined(MFC_OpenACC)
1768# 1115 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1770# 1115 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1771#elif defined(MFC_OpenMP)
1772# 1115 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1774# 1115 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1776# 1116 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1779# 1117 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1780#if defined(MFC_OpenACC)
1781# 1117 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1783# 1117 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1784#elif defined(MFC_OpenMP)
1785# 1117 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1787# 1117 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1789# 1118 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1791# 1118 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1792#if defined(MFC_OpenACC)
1793# 1118 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1795# 1118 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1796#elif defined(MFC_OpenMP)
1797# 1118 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1799# 1118 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1801# 1119 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1803# 1119 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1804#if defined(MFC_OpenACC)
1805# 1119 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1807# 1119 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1808#elif defined(MFC_OpenMP)
1809# 1119 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1811# 1119 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1813# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1815# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1816#if defined(MFC_OpenACC)
1817# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1819# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1820#elif defined(MFC_OpenMP)
1821# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1823# 1120 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1825# 1121 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1827# 1121 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1828#if defined(MFC_OpenACC)
1829# 1121 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1831# 1121 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1832#elif defined(MFC_OpenMP)
1833# 1121 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1835# 1121 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1837# 1122 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1840# 1123 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1841#if defined(MFC_OpenACC)
1842# 1123 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1844# 1123 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1845#elif defined(MFC_OpenMP)
1846# 1123 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1848# 1123 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1850# 1124 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1852# 1124 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1853#if defined(MFC_OpenACC)
1854# 1124 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1856# 1124 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1857#elif defined(MFC_OpenMP)
1858# 1124 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1860# 1124 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1862# 1125 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1864# 1125 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1865#if defined(MFC_OpenACC)
1866# 1125 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1868# 1125 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1869#elif defined(MFC_OpenMP)
1870# 1125 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1872# 1125 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1874# 1126 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1877# 1127 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1878#if defined(MFC_OpenACC)
1879# 1127 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1881# 1127 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1882#elif defined(MFC_OpenMP)
1883# 1127 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1885# 1127 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1887# 1128 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1889# 1128 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1890#if defined(MFC_OpenACC)
1891# 1128 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1893# 1128 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1894#elif defined(MFC_OpenMP)
1895# 1128 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1897# 1128 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1899# 1129 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1901# 1129 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1902#if defined(MFC_OpenACC)
1903# 1129 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1905# 1129 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1906#elif defined(MFC_OpenMP)
1907# 1129 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1909# 1129 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1911# 1130 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1914# 1131 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1915#if defined(MFC_OpenACC)
1916# 1131 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1918# 1131 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1919#elif defined(MFC_OpenMP)
1920# 1131 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1922# 1131 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1924# 1132 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1926# 1132 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1927#if defined(MFC_OpenACC)
1928# 1132 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1930# 1132 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1931#elif defined(MFC_OpenMP)
1932# 1132 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1934# 1132 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1936# 1133 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1938# 1133 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1939#if defined(MFC_OpenACC)
1940# 1133 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1942# 1133 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1943#elif defined(MFC_OpenMP)
1944# 1133 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1946# 1133 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1948# 1134 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1950# 1134 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1951#if defined(MFC_OpenACC)
1952# 1134 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1954# 1134 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1955#elif defined(MFC_OpenMP)
1956# 1134 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1958# 1134 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1960# 1135 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1963# 1136 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1964#if defined(MFC_OpenACC)
1965# 1136 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1967# 1136 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1968#elif defined(MFC_OpenMP)
1969# 1136 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1971# 1136 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1973# 1137 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1976# 1138 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1977#if defined(MFC_OpenACC)
1978# 1138 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1980# 1138 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1981#elif defined(MFC_OpenMP)
1982# 1138 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1984# 1138 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1986# 1139 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1989# 1140 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1990#if defined(MFC_OpenACC)
1991# 1140 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1993# 1140 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1994#elif defined(MFC_OpenMP)
1995# 1140 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1997# 1140 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1999# 1141 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2004# 1144 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2005#if defined(MFC_OpenACC)
2006# 1144 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2008# 1144 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2009#elif defined(MFC_OpenMP)
2010# 1144 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2012# 1144 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2014# 1145 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2016# 1147 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2018# 1147 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2019#if defined(MFC_OpenACC)
2020# 1147 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2022# 1147 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2023#elif defined(MFC_OpenMP)
2024# 1147 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2026# 1147 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2028# 1148 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2029# 1149 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2036 if (ib .and. ib_force_wrt)
call s_close_ib_force_history()
2038 if (model_eqns == model_eqns_6eq)
call s_report_pressure_relaxation()
2039 if (ib .and. chemistry)
call s_report_ibm_surface()
2041 call s_finalize_time_steppers_module()
2042 if (hypoelasticity)
call s_finalize_hypoelastic_module()
2043 call s_finalize_derived_variables_module()
2044 call s_finalize_data_output_module()
2045 call s_finalize_rhs_module()
2047 call s_finalize_igr_module()
2049 call s_finalize_cbc_module()
2050 call s_finalize_riemann_solvers_module()
2051 if (recon_type == recon_type_weno)
then
2052 call s_finalize_weno_module()
2053 else if (recon_type == recon_type_muscl)
then
2054 call s_finalize_muscl_module()
2057 if (int_comp > 0)
call s_finalize_thinc_module()
2058 call s_finalize_variables_conversion_module()
2059 call s_finalize_eos_module()
2060 if (grid_geometry == 3)
call s_finalize_fftw_module
2061 call s_finalize_mpi_common_module()
2062 call s_finalize_global_parameters_module()
2063 call s_finalize_boundary_common_module()
2064 if (relax)
call s_finalize_relaxation_solver_module()
2065 if (bubbles_lagrange)
call s_finalize_lagrangian_solver()
2066 if (viscous .and. (.not. igr))
then
2067 call s_finalize_viscous_module()
2069 call s_finalize_mpi_proxy_module()
2071 if (surface_tension)
call s_finalize_surface_tension_module()
2072 if (bodyforces .or. synthetic_turbulence)
call s_finalize_body_forces_module()
2073 if (ib)
call s_finalize_ibm_module()
2075 call s_mpi_finalize()
2085 integer,
intent(in) :: cloud_ib_idx
2086 type(ib_patch_parameters),
intent(inout) :: ib_patch
2087 integer :: cloud_idx, idx_in_cloud
2089 idx_in_cloud = cloud_ib_idx
2090 do cloud_idx = 1, num_particle_clouds - 1
2091 if (idx_in_cloud <= particle_cloud(cloud_idx)%num_particles)
exit
2092 idx_in_cloud = idx_in_cloud - particle_cloud(cloud_idx)%num_particles
2095 ib_patch%geometry = merge(2, 8, num_dims < 3)
2096 ib_patch%step_x_centroid = 0._wp
2097 ib_patch%step_y_centroid = 0._wp
2098 ib_patch%step_z_centroid = 0._wp
2099 ib_patch%step_angles(:) = 0._wp
2100 ib_patch%step_vel(:) = 0._wp
2101 ib_patch%step_angular_vel(:) = 0._wp
2102 ib_patch%force(:) = 0._wp
2103 ib_patch%torque(:) = 0._wp
2104 ib_patch%centroid_offset(:) = 0._wp
2105 ib_patch%rotation_matrix = 0._wp
2106 ib_patch%rotation_matrix(1, 1) = 1._wp
2107 ib_patch%rotation_matrix(2, 2) = 1._wp
2108 ib_patch%rotation_matrix(3, 3) = 1._wp
2109 ib_patch%rotation_matrix_inverse = ib_patch%rotation_matrix
2110 ib_patch%mass = particle_cloud(cloud_idx)%mass
2111 ib_patch%moment = dflt_real
2112 ib_patch%moving_ibm = particle_cloud(cloud_idx)%moving_ibm
2113 ib_patch%slip = .false.
2116 ib_patch%thermal_bc = 0
2117 ib_patch%Twall = 0._wp
2118 ib_patch%surface_reaction = 0
2119 ib_patch%v_blow = 0._wp
2120 ib_patch%inj_species = 0
2121 ib_patch%burn_rate_exp = 0._wp
2122 ib_patch%burn_rate_pref = 0._wp
2124 ib_patch%kin_model = 0
2136 integer,
intent(in) :: t_step
2137 type(ib_patch_parameters),
allocatable,
dimension(:) :: namelist_ibs
2138 character(len=path_len + 2*name_len) :: file_loc
2139 integer :: i, ios, file_unit, gbl_id, n_records
2140 integer,
parameter :: nfields_per_ib = 20
2141 real(wp) :: ib_buf(nfields_per_ib)
2142 character(len=10) :: t_step_string
2144 moving_immersed_boundary_flag = any(patch_ib(1:num_ibs)%moving_ibm /= 0) &
2145 & .or. any(particle_cloud(1:num_particle_clouds)%moving_ibm /= 0)
2147 allocate (namelist_ibs(num_ibs))
2148 namelist_ibs(:) = patch_ib(1:num_ibs)
2149 num_gbl_ibs = num_ibs + sum(particle_cloud(1:num_particle_clouds)%num_particles)
2151 if (file_per_process)
then
2152 call s_int_to_str(t_step, t_step_string)
2153 write (file_loc,
'(A,I0,A,i7.7,A)')
'ib_state_', t_step,
'_', proc_rank,
'.dat'
2154 file_loc = trim(case_dir) //
'/restart_data/lustre_' // trim(t_step_string) //
'/' // trim(file_loc)
2156 write (file_loc,
'(A,I0,A)')
'/restart_data/ib_state_', t_step,
'.dat'
2157 file_loc = trim(case_dir) // trim(file_loc)
2160 open (newunit=file_unit, file=trim(file_loc), form=
'unformatted', access=
'stream', status=
'old', action=
'read', iostat=ios)
2161 if (ios /= 0)
call s_mpi_abort(
'Error opening IB state file: ' // trim(file_loc))
2163 n_records = num_gbl_ibs
2164 if (file_per_process)
then
2165 read (file_unit, iostat=ios) n_records
2166 if (ios /= 0)
call s_mpi_abort(
'Error reading IB state file header: ' // trim(file_loc))
2172 if (file_per_process)
read (file_unit, iostat=ios) gbl_id
2173 if (ios == 0)
read (file_unit, iostat=ios) ib_buf
2174 if (ios /= 0)
call s_mpi_abort(
'Error reading IB state file: ' // trim(file_loc))
2176 if (.not. file_per_process)
then
2177 if (.not. f_local_rank_owns_location(ib_buf(17:19), glb_bounds)) cycle
2180 num_ibs = num_ibs + 1
2181 if (num_ibs > num_local_ibs_max)
then
2182# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2183 call s_prohibit_abort(
"num_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.")
2184# 1300 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2186# 1302 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2187 if (gbl_id <=
size(namelist_ibs))
then
2188 patch_ib(num_ibs) = namelist_ibs(gbl_id)
2192 patch_ib(num_ibs)%gbl_patch_id = gbl_id
2193 patch_ib(num_ibs)%vel = ib_buf(8:10)
2194 patch_ib(num_ibs)%angular_vel = ib_buf(11:13)
2195 patch_ib(num_ibs)%angles = ib_buf(14:16)
2196 patch_ib(num_ibs)%x_centroid = ib_buf(17)
2197 patch_ib(num_ibs)%y_centroid = ib_buf(18)
2198 patch_ib(num_ibs)%z_centroid = ib_buf(19)
2199 patch_ib(num_ibs)%radius = ib_buf(20)
2200 local_ib_patch_ids(num_ibs) = num_ibs
2204 deallocate (namelist_ibs)
2206 num_local_ibs = num_ibs
2216 integer,
allocatable,
dimension(:) :: nbr_ranks, recv_counts, requests
2217 type(ib_patch_parameters),
allocatable,
dimension(:,:) :: recv_ibs
2218 integer :: i, n_nbrs, nreqs, patch_bytes, ierr
2224 if (num_procs > 1)
then
2226 allocate (nbr_ranks(
size(ib_neighbor_ranks)))
2227 nbr_ranks = reshape(ib_neighbor_ranks, [
size(ib_neighbor_ranks)])
2229 do i = 1,
size(nbr_ranks)
2230 if (nbr_ranks(i) < 0 .or. nbr_ranks(i) == proc_rank) cycle
2231 if (any(nbr_ranks(1:n_nbrs) == nbr_ranks(i))) cycle
2233 nbr_ranks(n_nbrs) = nbr_ranks(i)
2237 patch_ib(1:num_local_ibs)%owner_rank = proc_rank
2239 allocate (recv_counts(n_nbrs), requests(2*n_nbrs))
2241 call mpi_irecv(recv_counts(i), 1, mpi_integer, nbr_ranks(i), 500, mpi_comm_world, requests(2*i - 1), ierr)
2242 call mpi_isend(num_local_ibs, 1, mpi_integer, nbr_ranks(i), 500, mpi_comm_world, requests(2*i), ierr)
2244 call mpi_waitall(2*n_nbrs, requests, mpi_statuses_ignore, ierr)
2246 patch_bytes = storage_size(patch_ib(1))/8
2247 allocate (recv_ibs(max(1, maxval(recv_counts)), n_nbrs))
2250 if (recv_counts(i) > 0)
then
2252 call mpi_irecv(recv_ibs(:,i), recv_counts(i)*patch_bytes, mpi_byte, nbr_ranks(i), 501, mpi_comm_world, &
2253 & requests(nreqs), ierr)
2255 if (num_local_ibs > 0)
then
2257 call mpi_isend(patch_ib, num_local_ibs*patch_bytes, mpi_byte, nbr_ranks(i), 501, mpi_comm_world, &
2258 & requests(nreqs), ierr)
2261 call mpi_waitall(nreqs, requests, mpi_statuses_ignore, ierr)
2264 if (num_ibs + recv_counts(i) > num_ib_patches_max_namelist)
then
2265# 1379 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2266 call s_prohibit_abort(
"num_ibs + recv_counts(i) > num_ib_patches_max_namelist",
"IB neighborhood exceeds patch_ib capacity. Increase num_ib_patches_max_namelist.")
2267# 1379 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2269# 1381 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2270 patch_ib(num_ibs + 1:num_ibs + recv_counts(i)) = recv_ibs(1:recv_counts(i),i)
2271 patch_ib(num_ibs + 1:num_ibs + recv_counts(i))%owner_rank = nbr_ranks(i)
2272 num_ibs = num_ibs + recv_counts(i)
2275 deallocate (nbr_ranks, recv_counts, requests, recv_ibs)
2285 integer :: ax, k, nbr_idx, nreqs, sx, sy, sz, dx, dy, dz
2286 integer,
allocatable :: send_table(:,:,:), recv_tables(:,:,:,:)
2287 integer,
dimension(52) :: requests
2291 integer,
dimension(4) :: buf4, rbuf4
2292 integer,
dimension(2) :: buf2, rbuf2
2294 ax = ib_neighborhood_radius
2296 if (
allocated(ib_neighbor_ranks))
deallocate (ib_neighbor_ranks)
2297 allocate (ib_neighbor_ranks(-ax:ax,-ax:ax,-ax:ax))
2298 ib_neighbor_ranks = mpi_proc_null
2299 ib_neighbor_ranks(0, 0, 0) = proc_rank
2302 ib_neighbor_ranks(-1, 0, 0) = bc_x%beg
2303 ib_neighbor_ranks(+1, 0, 0) = bc_x%end
2304 if (num_dims >= 2)
then
2305 ib_neighbor_ranks(0, -1, 0) = bc_y%beg
2306 ib_neighbor_ranks(0, +1, 0) = bc_y%end
2308 if (num_dims == 3)
then
2309 ib_neighbor_ranks(0, 0, -1) = bc_z%beg
2310 ib_neighbor_ranks(0, 0, +1) = bc_z%end
2313 if (num_dims >= 2)
then
2315 buf4 = [bc_y%beg, bc_y%end, bc_z%beg, bc_z%end]
2318 call mpi_sendrecv(buf4, 4, mpi_integer, merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0), 310, rbuf4, 4, mpi_integer, &
2319 & merge(bc_x%end, mpi_proc_null, bc_x%end >= 0), 310, mpi_comm_world, mpi_status_ignore, ierr)
2320 if (bc_x%end >= 0)
then
2321 ib_neighbor_ranks(+1, -1, 0) = rbuf4(1)
2322 ib_neighbor_ranks(+1, +1, 0) = rbuf4(2)
2323 ib_neighbor_ranks(+1, 0, -1) = rbuf4(3)
2324 ib_neighbor_ranks(+1, 0, +1) = rbuf4(4)
2327 call mpi_sendrecv(buf4, 4, mpi_integer, merge(bc_x%end, mpi_proc_null, bc_x%end >= 0), 311, rbuf4, 4, mpi_integer, &
2328 & merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0), 311, mpi_comm_world, mpi_status_ignore, ierr)
2329 if (bc_x%beg >= 0)
then
2330 ib_neighbor_ranks(-1, -1, 0) = rbuf4(1)
2331 ib_neighbor_ranks(-1, +1, 0) = rbuf4(2)
2332 ib_neighbor_ranks(-1, 0, -1) = rbuf4(3)
2333 ib_neighbor_ranks(-1, 0, +1) = rbuf4(4)
2337 if (num_dims == 3)
then
2339 buf2 = [bc_z%beg, bc_z%end]
2341 call mpi_sendrecv(buf2, 2, mpi_integer, merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0), 312, rbuf2, 2, mpi_integer, &
2342 & merge(bc_y%end, mpi_proc_null, bc_y%end >= 0), 312, mpi_comm_world, mpi_status_ignore, ierr)
2343 if (bc_y%end >= 0)
then
2344 ib_neighbor_ranks(0, +1, -1) = rbuf2(1)
2345 ib_neighbor_ranks(0, +1, +1) = rbuf2(2)
2348 call mpi_sendrecv(buf2, 2, mpi_integer, merge(bc_y%end, mpi_proc_null, bc_y%end >= 0), 313, rbuf2, 2, mpi_integer, &
2349 & merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0), 313, mpi_comm_world, mpi_status_ignore, ierr)
2350 if (bc_y%beg >= 0)
then
2351 ib_neighbor_ranks(0, -1, -1) = rbuf2(1)
2352 ib_neighbor_ranks(0, -1, +1) = rbuf2(2)
2358# 1470 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2359 call mpi_sendrecv(buf2, 2, mpi_integer, merge(ib_neighbor_ranks(-1, -1, 0), mpi_proc_null, &
2360# 1471 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2361 & ib_neighbor_ranks(-1, -1, 0) >= 0), 320, rbuf2, 2, mpi_integer, &
2362# 1472 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2363 & merge(ib_neighbor_ranks(1, 1, 0), mpi_proc_null, ib_neighbor_ranks(1, 1, &
2364# 1473 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2365 & 0) >= 0), 320, mpi_comm_world, mpi_status_ignore, ierr)
2366# 1474 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2367 if (ib_neighbor_ranks(1, 1, 0) >= 0)
then
2368# 1475 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2369 ib_neighbor_ranks(1, 1, -1) = rbuf2(1)
2370# 1476 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2371 ib_neighbor_ranks(1, 1, +1) = rbuf2(2)
2372# 1477 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2374# 1470 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2375 call mpi_sendrecv(buf2, 2, mpi_integer, merge(ib_neighbor_ranks(-1, 1, 0), mpi_proc_null, &
2376# 1471 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2377 & ib_neighbor_ranks(-1, 1, 0) >= 0), 321, rbuf2, 2, mpi_integer, &
2378# 1472 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2379 & merge(ib_neighbor_ranks(1, -1, 0), mpi_proc_null, ib_neighbor_ranks(1, -1, &
2380# 1473 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2381 & 0) >= 0), 321, mpi_comm_world, mpi_status_ignore, ierr)
2382# 1474 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2383 if (ib_neighbor_ranks(1, -1, 0) >= 0)
then
2384# 1475 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2385 ib_neighbor_ranks(1, -1, -1) = rbuf2(1)
2386# 1476 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2387 ib_neighbor_ranks(1, -1, +1) = rbuf2(2)
2388# 1477 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2390# 1470 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2391 call mpi_sendrecv(buf2, 2, mpi_integer, merge(ib_neighbor_ranks(1, -1, 0), mpi_proc_null, &
2392# 1471 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2393 & ib_neighbor_ranks(1, -1, 0) >= 0), 322, rbuf2, 2, mpi_integer, &
2394# 1472 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2395 & merge(ib_neighbor_ranks(-1, 1, 0), mpi_proc_null, ib_neighbor_ranks(-1, 1, &
2396# 1473 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2397 & 0) >= 0), 322, mpi_comm_world, mpi_status_ignore, ierr)
2398# 1474 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2399 if (ib_neighbor_ranks(-1, 1, 0) >= 0)
then
2400# 1475 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2401 ib_neighbor_ranks(-1, 1, -1) = rbuf2(1)
2402# 1476 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2403 ib_neighbor_ranks(-1, 1, +1) = rbuf2(2)
2404# 1477 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2406# 1470 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2407 call mpi_sendrecv(buf2, 2, mpi_integer, merge(ib_neighbor_ranks(1, 1, 0), mpi_proc_null, &
2408# 1471 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2409 & ib_neighbor_ranks(1, 1, 0) >= 0), 323, rbuf2, 2, mpi_integer, &
2410# 1472 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2411 & merge(ib_neighbor_ranks(-1, -1, 0), mpi_proc_null, ib_neighbor_ranks(-1, -1, &
2412# 1473 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2413 & 0) >= 0), 323, mpi_comm_world, mpi_status_ignore, ierr)
2414# 1474 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2415 if (ib_neighbor_ranks(-1, -1, 0) >= 0)
then
2416# 1475 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2417 ib_neighbor_ranks(-1, -1, -1) = rbuf2(1)
2418# 1476 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2419 ib_neighbor_ranks(-1, -1, +1) = rbuf2(2)
2420# 1477 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2422# 1479 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2429 allocate (send_table(-ax:ax,-ax:ax,-ax:ax))
2430 allocate (recv_tables(-ax:ax,-ax:ax,-ax:ax,1:26))
2433 send_table = ib_neighbor_ranks
2440 if (sx == 0 .and. sy == 0 .and. sz == 0) cycle
2441 nbr_idx = nbr_idx + 1
2442 if (ib_neighbor_ranks(sx, sy, sz) < 0) cycle
2444 call mpi_irecv(recv_tables(:,:,:,nbr_idx), (2*ax + 1)**3, mpi_integer, ib_neighbor_ranks(sx, sy, sz), &
2445 & 400, mpi_comm_world, requests(nreqs), ierr)
2453 if (sx == 0 .and. sy == 0 .and. sz == 0) cycle
2454 if (ib_neighbor_ranks(sx, sy, sz) < 0) cycle
2456 call mpi_isend(send_table, (2*ax + 1)**3, mpi_integer, ib_neighbor_ranks(sx, sy, sz), 400, &
2457 & mpi_comm_world, requests(nreqs), ierr)
2462 call mpi_waitall(nreqs, requests, mpi_statuses_ignore, ierr)
2468 if (sx == 0 .and. sy == 0 .and. sz == 0) cycle
2469 nbr_idx = nbr_idx + 1
2470 if (ib_neighbor_ranks(sx, sy, sz) < 0) cycle
2474 if (recv_tables(dx, dy, dz, nbr_idx) == mpi_proc_null) cycle
2475 if (dx + sx < -ax .or. dx + sx > ax) cycle
2476 if (dy + sy < -ax .or. dy + sy > ax) cycle
2477 if (dz + sz < -ax .or. dz + sz > ax) cycle
2478 if (ib_neighbor_ranks(dx + sx, dy + sy, dz + sz) /= mpi_proc_null) cycle
2479 ib_neighbor_ranks(dx + sx, dy + sy, dz + sz) = recv_tables(dx, dy, dz, nbr_idx)
2488 deallocate (send_table, recv_tables)
2496 real(wp) :: beg_val, end_val, recv_val, bound, max_ib_bound, local_rank_width, min_rank_width
2497 integer :: k, send_neighbor, recv_neighbor, ierr, temporary_radius
2501 neighbor_domain_x%beg = -huge(0._wp)
2502 neighbor_domain_x%end = huge(0._wp)
2503 neighbor_domain_y%beg = -huge(0._wp)
2504 neighbor_domain_y%end = huge(0._wp)
2505 neighbor_domain_z%beg = -huge(0._wp)
2506 neighbor_domain_z%end = huge(0._wp)
2510 if (ib_neighborhood_radius < 1)
then
2511 ib_neighborhood_radius = 0
2514 max_ib_bound = -1._wp
2516 call s_get_ib_bound(patch_ib(k), bound)
2517 max_ib_bound = max(max_ib_bound, bound)
2519 do k = 1, num_particle_clouds
2520 max_ib_bound = max(max_ib_bound, particle_cloud(k)%radius)
2528 local_rank_width = huge(0._wp)
2529# 1586 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2530 if (num_dims >= 1) local_rank_width = min(local_rank_width, abs(x_cb(m) - x_cb(-1)))
2531# 1587 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2532# 1586 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2533 if (num_dims >= 2) local_rank_width = min(local_rank_width, abs(y_cb(n) - y_cb(-1)))
2534# 1587 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2535# 1586 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2536 if (num_dims >= 3) local_rank_width = min(local_rank_width, abs(z_cb(p) - z_cb(-1)))
2537# 1587 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2538# 1588 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2539 call s_mpi_allreduce_min(local_rank_width, min_rank_width)
2542 ib_neighborhood_radius = max(1, ceiling(1.1_wp*max_ib_bound/(min_rank_width)))
2543 if (proc_rank == 0) print *,
"Automatic choice of ib_neighborhood_radius selected: ", ib_neighborhood_radius
2548# 1598 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2549 if (num_dims >= 1)
then
2550# 1599 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2552# 1600 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2554# 1601 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2555 do k = 1, ib_neighborhood_radius
2556 send_neighbor = merge(bc_x%end, mpi_proc_null, bc_x%end >= 0)
2557# 1603 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2558 recv_neighbor = merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0)
2559# 1604 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2560 recv_val = -huge(0._wp)
2561 call mpi_sendrecv(beg_val, 1, mpi_p, send_neighbor, 100, recv_val, 1, mpi_p, recv_neighbor, 100, &
2562# 1606 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2563 & mpi_comm_world, mpi_status_ignore, ierr)
2566 send_neighbor = merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0)
2567# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2568 recv_neighbor = merge(bc_x%end, mpi_proc_null, bc_x%end >= 0)
2569# 1611 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2570 recv_val = huge(0._wp)
2571 call mpi_sendrecv(end_val, 1, mpi_p, send_neighbor, 101, recv_val, 1, mpi_p, recv_neighbor, &
2572# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2573 & 101, mpi_comm_world, mpi_status_ignore, ierr)
2574# 1614 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2578 if (f_approx_equal(beg_val, x_cb(m)) .or. f_approx_equal(end_val, x_cb(-1)))
then
2579# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2580 beg_val = -huge(0._wp)
2581 end_val = huge(0._wp)
2585 neighbor_domain_x%beg = beg_val
2586# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2587 neighbor_domain_x%end = end_val
2588# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2590# 1598 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2591 if (num_dims >= 2)
then
2592# 1599 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2594# 1600 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2596# 1601 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2597 do k = 1, ib_neighborhood_radius
2598 send_neighbor = merge(bc_y%end, mpi_proc_null, bc_y%end >= 0)
2599# 1603 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2600 recv_neighbor = merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0)
2601# 1604 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2602 recv_val = -huge(0._wp)
2603 call mpi_sendrecv(beg_val, 1, mpi_p, send_neighbor, 102, recv_val, 1, mpi_p, recv_neighbor, 102, &
2604# 1606 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2605 & mpi_comm_world, mpi_status_ignore, ierr)
2608 send_neighbor = merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0)
2609# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2610 recv_neighbor = merge(bc_y%end, mpi_proc_null, bc_y%end >= 0)
2611# 1611 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2612 recv_val = huge(0._wp)
2613 call mpi_sendrecv(end_val, 1, mpi_p, send_neighbor, 103, recv_val, 1, mpi_p, recv_neighbor, &
2614# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2615 & 103, mpi_comm_world, mpi_status_ignore, ierr)
2616# 1614 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2620 if (f_approx_equal(beg_val, y_cb(n)) .or. f_approx_equal(end_val, y_cb(-1)))
then
2621# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2622 beg_val = -huge(0._wp)
2623 end_val = huge(0._wp)
2627 neighbor_domain_y%beg = beg_val
2628# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2629 neighbor_domain_y%end = end_val
2630# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2632# 1598 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2633 if (num_dims >= 3)
then
2634# 1599 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2636# 1600 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2638# 1601 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2639 do k = 1, ib_neighborhood_radius
2640 send_neighbor = merge(bc_z%end, mpi_proc_null, bc_z%end >= 0)
2641# 1603 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2642 recv_neighbor = merge(bc_z%beg, mpi_proc_null, bc_z%beg >= 0)
2643# 1604 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2644 recv_val = -huge(0._wp)
2645 call mpi_sendrecv(beg_val, 1, mpi_p, send_neighbor, 104, recv_val, 1, mpi_p, recv_neighbor, 104, &
2646# 1606 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2647 & mpi_comm_world, mpi_status_ignore, ierr)
2650 send_neighbor = merge(bc_z%beg, mpi_proc_null, bc_z%beg >= 0)
2651# 1610 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2652 recv_neighbor = merge(bc_z%end, mpi_proc_null, bc_z%end >= 0)
2653# 1611 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2654 recv_val = huge(0._wp)
2655 call mpi_sendrecv(end_val, 1, mpi_p, send_neighbor, 105, recv_val, 1, mpi_p, recv_neighbor, &
2656# 1613 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2657 & 105, mpi_comm_world, mpi_status_ignore, ierr)
2658# 1614 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2662 if (f_approx_equal(beg_val, z_cb(p)) .or. f_approx_equal(end_val, z_cb(-1)))
then
2663# 1618 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2664 beg_val = -huge(0._wp)
2665 end_val = huge(0._wp)
2669 neighbor_domain_z%beg = beg_val
2670# 1624 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2671 neighbor_domain_z%end = end_val
2672# 1625 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2674# 1627 "/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. When synthetic_turbulence is enabled, generates random wave vector...
Noncharacteristic and processor boundary condition application for ghost cells and buffer regions.
subroutine, public s_populate_grid_variables_buffers(x_cb_in, x_cc_in, dx_in, x_offset, y_offset, z_offset, y_cb_in, y_cc_in, dy_in, z_cb_in, z_cc_in, dz_in, global_bounds)
Populate the buffers of the grid variables, which are constituted of the cell-boundary locations and ...
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.
impure subroutine, public s_initialize_boundary_common_module(use_dirichlet_buffers)
Allocate and set up boundary condition buffer arrays for all coordinate directions.
Boundary condition restart I/O, capillary/IGR buffer population, and grid-variable buffers.
subroutine s_assign_default_bc_type(bc_type)
Initialize the per-cell boundary condition type arrays with the global default BC values.
subroutine s_read_serial_boundary_condition_files(step_dirpath, bc_type)
Read boundary condition type and buffer data from serial (unformatted) restart files.
subroutine s_read_parallel_boundary_condition_files(bc_type, strict)
Read boundary condition type and buffer data from per-rank parallel files using MPI I/O.
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 of each bubble.
impure subroutine s_write_restart_lag_bubbles(t_step)
Write restart files for the Lagrangian bubble solver.
type(scalar_field), dimension(:), allocatable q_beta
Projection of the lagrangian particles in the Eulerian framework.
impure subroutine s_initialize_bubbles_el_module(q_cons_vf, bc_type)
Initializes the lagrangian subgrid bubble solver.
real(wp), dimension(:,:), allocatable intfc_rad
Bubble radius.
Characteristic boundary conditions (CBCs) 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(check_total_cells, n_global)
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)
Inquire on the existence of a directory or file.
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
integer, parameter bc_periodic
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. Called on every rank.
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...
Equations of state in Gamma/Pi form, rho e = Gamma(rho) p + Pi(rho).
impure subroutine, public s_initialize_eos_module()
Resolve every fluid's EOS coefficients once, before any conversion runs.
subroutine, public s_phase_internal_energy(pres, alpha, alpha_rho, i, e_phase)
Internal energy per unit volume of phase i at pressure pres: alpha (Gamma p + Pi) + alpha_rho qv,...
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
real(wp) mytime
Current simulation time.
real(wp), dimension(num_synth_shells_max) synth_k_shell
real(wp), dimension(num_synth_shells_max) synth_amp_shell
type(int_bounds_info), dimension(1:3) idwint
real(wp), dimension(:), allocatable, target z_cb
type(int_bounds_info) bc_z
logical, dimension(3) periodic_bc
integer proc_rank
Rank of the local processor.
type(mpi_io_ib_var), public mpi_io_ib_data
type(bounds_info), dimension(3) glb_bounds
type(int_bounds_info), dimension(1:3) idwbuff
integer buff_size
Number of ghost cells for boundary condition storage.
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
real(wp), dimension(:), allocatable, target z_cc
integer num_procs
Number of processors.
real(wp), dimension(:), allocatable, target x_cc
integer, dimension(num_synth_shells_max) synth_n_waves_per_shell
real(wp), dimension(num_turb_sources_max, 3) turb_pos
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(num_turb_sources_max, 3) synth_l
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)
Update 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 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_mpi_barrier
Halts all processes until all have reached barrier.
impure subroutine s_check_mpi_file_open(ierr, file_loc)
Abort naming the file if MPI_FILE_OPEN failed. File errors default to MPI_ERRORS_RETURN,...
subroutine s_apply_grid_from_global_dim(x_cb_glb, m_dim_glb, m_dim, sidx, bc_beg, bc_end, cb_lo, cb_hi, cw_lo, cw_hi, x_cb_loc, x_cc_loc, dx_loc)
Populate the local cell-boundary, cell-center, and cell-width arrays in one direction directly from t...
impure subroutine s_initialize_mpi_data(q_cons_vf, ib_markers, ib_mpi_data, beta, qbmm_pb, qbmm_mv)
Set up MPI I/O data views and variable pointers for 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.
subroutine s_initialize_mpi_data_ds(m_ds, n_ds, p_ds, q_cons_vf)
Set up MPI I/O data views for downsampled (coarsened) parallel file output.
impure subroutine s_initialize_mpi_common_module(exchange_all_chemistry_temperatures_in, use_rdma_transport_in)
Initialize the module.
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.
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 (no module-level state to set up; the pT/pTg relaxation solvers ar...
Pressure relaxation for the six-equation multi-component model via Newton–Raphson equilibration and v...
impure subroutine, public s_report_pressure_relaxation
One line at the end of a run if the equilibration ever stopped on its iteration cap....
Quadrature-based moment methods (QBMM) for polydisperse bubble moment inversion and transport.
impure subroutine, public s_initialize_qbmm_module
Initialize the QBMM module.
Assemble 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 cell state, CFL calculation, and stability checks.
character(len=4), public dt_limiter
Criterion currently limiting the adaptive time step (ICFL, VCFL, CCFL, TCFL, the collision cap,...
Reads input files, loads initial conditions and grid data, and orchestrates solver initialization and...
impure subroutine s_read_ib_restart_data(t_step)
Loads the IBs this rank owns from the IB state file for t_step into patch_ib(1:num_ibs),...
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.
subroutine s_assign_particle_cloud_ib_defaults(cloud_ib_idx, ib_patch)
Fills the properties of a generated particle-cloud IB that the IB state file does not carry (geometry...
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 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...
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.
subroutine s_get_neighbor_bounds()
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 s_check_restart_file_size(ifile, file_loc, expected_bytes)
Abort if an open restart file holds fewer bytes than are about to be read from it,...
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.
subroutine s_build_ib_neighborhood()
Completes this rank's IB neighborhood once s_read_ib_restart_data has loaded only the IBs it owns: ev...
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, e_e_in, pres_mag)
Compute the pressure from the appropriate equation of state.
impure subroutine, public s_initialize_variables_conversion_module(store_mixture_fields, enforce_density_floor, preserve_qbmm_number, lagrange_beta_index)
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 reconstructions with optional monotonicity-preserving bounds and mapped weights.
impure subroutine, public s_initialize_weno_module
Initialize the WENO module.
Integer bounds for variables.
Derived type annexing a scalar field (SF).