1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
6# 1 "/home/runner/work/MFC/MFC/src/common/include/case.fpp" 1
12# 8 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
15# 12 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
16# 6 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp" 2
17# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
18# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
19# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
20# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
21# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
23# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
26# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
27# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
30# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
32# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
34# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
36# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
38# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
40# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
42# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
44# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
45# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
46# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
47# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
48# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
59# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
61# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
63# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
65# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
67# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
69# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
71# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
73# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
74# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
75# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
76# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
77# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
79# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
81# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
83# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
85# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
87# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
91# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
93# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
95# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
97# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
99# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
115# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
119# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
121# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
123# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
140# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
142# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
144# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
146# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
148# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
150# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
151# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
152# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
153# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
154# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
155# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
156# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
157# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
159# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
160# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
163# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
165# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
167# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
169# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
171# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
173# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
175# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
177# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
179# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
181# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
183# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
185# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
187# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
189# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
191# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
193# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
195# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
197# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
199# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
201# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
203# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
205# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
207# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
223# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
225# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
227# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
229# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
231# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
233# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
235# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
238# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
241# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
244# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
247# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
250# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
253# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
256# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
259# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
262# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
265# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
268# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
271# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
274# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
277# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
280# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
283# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
286# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
289# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
292# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
294# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
295# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
297# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
299# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
304# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
307# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
310# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
313# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
316# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
319# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
321# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
323# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
325# 7 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp" 2
358#if defined(MFC_OpenACC)
359# 39 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
361# 39 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
362#elif defined(MFC_OpenMP)
363# 39 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
365# 39 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
409 character(LEN=name_len),
parameter :: file_path =
'./simulation.inp'
410 logical :: file_exist
414 character(len=1000) :: line
416# 1 "/home/runner/work/MFC/MFC/build/include/simulation/generated_namelist.fpp" 1
419# 19 "/home/runner/work/MFC/MFC/build/include/simulation/generated_namelist.fpp"
420namelist /user_inputs/
bx0,
ca,
r0ref,
re_inv,
web,
acoustic,
acoustic_source,
adap_dt,
adap_dt_max_iters,
adap_dt_tol,
adv_n, &
421 &
alf_factor,
alpha_bar,
alt_soundspeed,
avg_state,
bc_x,
bc_y,
bc_z,
bf_x,
bf_y,
bf_z,
bub_pp,
bubble_model,
bubbles_euler, &
426 &
int_comp,
integral,
integral_wrt,
k_x,
k_y,
k_z,
lag_params,
low_mach,
m,
mixture_err,
model_eqns,
mp_weno,
mpp_lim, &
429 &
p,
p_x,
p_y,
p_z,
palpha_eps,
parallel_io,
particle_cloud,
patch_ib,
pi_fac,
poly_sigma,
polydisperse,
polytropic, &
430 &
precision,
pref,
prim_vars_wrt,
probe,
probe_wrt,
ptgalpha_eps,
qbmm,
rdma_mpi,
relax,
relax_model,
rhoref, &
432 &
t_step_start,
t_step_stop,
t_stop,
tau_star,
teno_ct,
thermal,
time_stepper,
w_x,
w_y,
w_z,
wave_speeds,
weno_re_flux, &
433 &
weno_avg,
weno_eps,
x_a,
x_b,
x_domain,
y_a,
y_b,
y_domain,
z_a,
z_b,
z_domain, &
434 &
igr,
igr_iter_solver,
igr_order,
igr_pres_lim,
mapped_weno,
mhd,
muscl_lim,
muscl_order,
nb,
num_fluids,
recon_type, &
436# 36 "/home/runner/work/MFC/MFC/build/include/simulation/generated_namelist.fpp"
437# 90 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp" 2
439 inquire (file=trim(file_path), exist=file_exist)
442 open (1, file=trim(file_path), form=
'formatted', action=
'read', status=
'old')
443 read (1, nml=user_inputs, iostat=iostatus)
445 if (iostatus /= 0)
then
447 read (1, fmt=
'(A)') line
448 print *,
'Invalid line in namelist: ' // trim(line)
449 call s_mpi_abort(
'Invalid line in simulation.inp. It is ' //
'likely due to a datatype mismatch. Exiting.')
470 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
478 character(LEN=path_len) :: file_path
479 logical :: file_exist
485 if (file_exist .neqv. .true.)
then
486 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
498 character(LEN=path_len + 2*name_len) :: t_step_dir
499 character(LEN=path_len + 3*name_len) :: file_path
500 logical :: file_exist
509 file_path = trim(t_step_dir) //
'/.'
512 if (file_exist .neqv. .true.)
then
513 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
522 file_path = trim(t_step_dir) //
'/x_cb.dat'
524 inquire (file=trim(file_path), exist=file_exist)
527 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
528 read (2)
x_cb(-1:
m);
close (2)
530 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
537 file_path = trim(t_step_dir) //
'/y_cb.dat'
539 inquire (file=trim(file_path), exist=file_exist)
542 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
543 read (2)
y_cb(-1:
n);
close (2)
545 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
553 file_path = trim(t_step_dir) //
'/z_cb.dat'
555 inquire (file=trim(file_path), exist=file_exist)
558 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
559 read (2)
z_cb(-1:
p);
close (2)
561 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
569 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/q_cons_vf',
i,
'.dat'
570 inquire (file=trim(file_path), exist=file_exist)
572 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
575 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
584 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/pb',
sys_size + (
i - 1)*nnode +
r,
'.dat'
585 inquire (file=trim(file_path), exist=file_exist)
587 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
588 read (2)
pb_ts(1)%sf(0:
m,0:
n,0:
p,
r,
i);
close (2)
590 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
596 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/mv',
sys_size + (
i - 1)*nnode +
r,
'.dat'
597 inquire (file=trim(file_path), exist=file_exist)
599 open (2, file=trim(file_path), form=
'unformatted', action=
'read', status=
'old')
600 read (2)
mv_ts(1)%sf(0:
m,0:
n,0:
p,
r,
i);
close (2)
602 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
617 real(wp),
allocatable,
dimension(:) :: x_cb_glb, y_cb_glb, z_cb_glb
618 integer :: ifile, ierr, data_size
619 integer,
dimension(MPI_STATUS_SIZE) :: status
620 integer(KIND=MPI_OFFSET_KIND) :: disp
621 integer(KIND=MPI_OFFSET_KIND) :: m_mok, n_mok, p_mok
622 integer(KIND=MPI_OFFSET_KIND) :: wp_mok, var_mok
623 integer(KIND=MPI_OFFSET_KIND) :: mok
624 character(LEN=path_len + 2*name_len) :: file_loc
625 logical :: file_exist
626 character(len=10) :: t_step_start_string
630 integer :: m_ds, n_ds, p_ds
631 integer :: m_glb_ds, n_glb_ds, p_glb_ds
632 integer :: m_glb_read, n_glb_read, p_glb_read
634 allocate (x_cb_glb(-1:
m_glb))
635 allocate (y_cb_glb(-1:
n_glb))
636 allocate (z_cb_glb(-1:
p_glb))
638 file_loc = trim(
case_dir) //
'/restart_data' // trim(
mpiiofs) //
'x_cb.dat'
639 inquire (file=trim(file_loc), exist=file_exist)
642 m_ds = int((
m + 1)/3) - 1
643 n_ds = int((
n + 1)/3) - 1
644 p_ds = int((
p + 1)/3) - 1
646 m_glb_ds = int((
m_glb + 1)/3) - 1
647 n_glb_ds = int((
n_glb + 1)/3) - 1
648 p_glb_ds = int((
p_glb + 1)/3) - 1
652 data_size =
m_glb + 2
653 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly,
mpi_info_int, ifile, ierr)
654 call mpi_file_read(ifile, x_cb_glb, data_size, mpi_p, status, ierr)
655 call mpi_file_close(ifile, ierr)
657 call s_mpi_abort(
'File ' // trim(file_loc) //
' is missing. Exiting.')
665 file_loc = trim(
case_dir) //
'/restart_data' // trim(
mpiiofs) //
'y_cb.dat'
666 inquire (file=trim(file_loc), exist=file_exist)
669 data_size =
n_glb + 2
670 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly,
mpi_info_int, ifile, ierr)
671 call mpi_file_read(ifile, y_cb_glb, data_size, mpi_p, status, ierr)
672 call mpi_file_close(ifile, ierr)
674 call s_mpi_abort(
'File ' // trim(file_loc) //
' is missing. Exiting.')
682 file_loc = trim(
case_dir) //
'/restart_data' // trim(
mpiiofs) //
'z_cb.dat'
683 inquire (file=trim(file_loc), exist=file_exist)
686 data_size =
p_glb + 2
687 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly,
mpi_info_int, ifile, ierr)
688 call mpi_file_read(ifile, z_cb_glb, data_size, mpi_p, status, ierr)
689 call mpi_file_close(ifile, ierr)
691 call s_mpi_abort(
'File ' // trim(file_loc) //
'is missing. Exiting.')
708 file_loc = trim(
case_dir) //
'/restart_data/lustre_' // trim(t_step_start_string) // trim(
mpiiofs) // trim(file_loc)
709 inquire (file=trim(file_loc), exist=file_exist)
712 call mpi_file_open(mpi_comm_self, file_loc, mpi_mode_rdonly,
mpi_info_int, ifile, ierr)
725 data_size = (m_ds + 3)*(n_ds + 3)*(p_ds + 3)
726 m_glb_read = m_glb_ds + 1
727 n_glb_read = n_glb_ds + 1
728 p_glb_read = p_glb_ds + 1
730 data_size = (
m + 1)*(
n + 1)*(
p + 1)
731 m_glb_read =
m_glb + 1
732 n_glb_read =
n_glb + 1
733 p_glb_read =
p_glb + 1
736 m_mok = int(m_glb_read + 1, mpi_offset_kind)
737 n_mok = int(m_glb_read + 1, mpi_offset_kind)
738 p_mok = int(m_glb_read + 1, mpi_offset_kind)
739 wp_mok = int(storage_size(0._stp)/8, mpi_offset_kind)
740 mok = int(1._wp, mpi_offset_kind)
744 var_mok = int(
i, mpi_offset_kind)
746 call mpi_file_read(ifile,
mpi_io_data%var(
i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
751 var_mok = int(
i, mpi_offset_kind)
753 call mpi_file_read(ifile,
mpi_io_data%var(
i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
759 var_mok = int(
i, mpi_offset_kind)
761 call mpi_file_read(ifile,
q_cons_temp(
i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
765 var_mok = int(
i, mpi_offset_kind)
767 call mpi_file_read(ifile,
mpi_io_data%var(
i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
774 call mpi_file_close(ifile, ierr)
776 call s_mpi_abort(
'File ' // trim(file_loc) //
' is missing. Exiting.')
780 write (file_loc,
'(I0,A)')
n_start,
'.dat'
784 file_loc = trim(
case_dir) //
'/restart_data' // trim(
mpiiofs) // trim(file_loc)
785 inquire (file=trim(file_loc), exist=file_exist)
788 call mpi_file_open(mpi_comm_world, file_loc, mpi_mode_rdonly,
mpi_info_int, ifile, ierr)
796 data_size = (
m + 1)*(
n + 1)*(
p + 1)
798 m_mok = int(
m_glb + 1, mpi_offset_kind)
799 n_mok = int(
n_glb + 1, mpi_offset_kind)
800 p_mok = int(
p_glb + 1, mpi_offset_kind)
801 wp_mok = int(storage_size(0._stp)/8, mpi_offset_kind)
802 mok = int(1._wp, mpi_offset_kind)
806 var_mok = int(
i, mpi_offset_kind)
807 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
810 call mpi_file_read(ifile,
mpi_io_data%var(
i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
815 var_mok = int(
i, mpi_offset_kind)
816 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
819 call mpi_file_read(ifile,
mpi_io_data%var(
i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
824 var_mok = int(
i, mpi_offset_kind)
826 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
829 call mpi_file_read_all(ifile,
mpi_io_data%var(
i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
835 call mpi_file_close(ifile, ierr)
837 call s_mpi_abort(
'File ' // trim(file_loc) //
' is missing. Exiting.')
841 deallocate (x_cb_glb, y_cb_glb, z_cb_glb)
855 type(
scalar_field),
dimension(sys_size),
intent(inout) :: v_vf
861 real(wp),
dimension(2) :: re
863 integer ::
i,
j,
k,
l,
c
864 real(wp),
dimension(num_species) :: rhoyks
878 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)
882 do c = 1, num_species
883 rhoyks(
c) = v_vf(
eqn_idx%species%beg +
c - 1)%sf(
j,
k,
l)
896 call s_compute_pressure(v_vf(
eqn_idx%E)%sf(
j,
k,
l), 0._stp, dyn_pres, pi_inf, gamma, rho, qv, rhoyks, pres, &
897 & t, pres_mag=pres_mag)
912 integer,
intent(inout) :: t_step
913 real(wp),
intent(inout) :: time_avg
914 integer ::
i, eta_hh, eta_mm, eta_ss
925 print *,
"Delta t = ",
dt
934# 585 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
935#if defined(MFC_OpenACC)
936# 585 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
938# 585 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
939#elif defined(MFC_OpenMP)
940# 585 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
942# 585 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
949# 590 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
950#if defined(MFC_OpenACC)
951# 590 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
953# 590 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
954#elif defined(MFC_OpenMP)
955# 590 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
957# 590 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
965 eta_hh = int(eta_sec)/3600
966 eta_mm = mod(int(eta_sec), 3600)/60
967 eta_ss = mod(int(eta_sec), 60)
968 print
'(" [", I3, "%] Time ", ES16.6, " dt = ", ES16.6, " @ Time Step = ", I8, " Time Avg = ", ES16.6, " Time/step = ", ES12.6, " ETA (HH:MM:SS) = ", I0, ":", I2.2, ":", I2.2)', &
974 eta_hh = int(eta_sec)/3600
975 eta_mm = mod(int(eta_sec), 3600)/60
976 eta_ss = mod(int(eta_sec), 60)
977 print
'(" [", I3, "%] Time step ", I8, " of ", I0, " @ t_step = ", I8, " Time Avg = ", ES12.6, " Time/step= ", ES12.6, " ETA (HH:MM:SS) = ", I0, ":", I2.2, ":", I2.2)', &
987# 618 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
988#if defined(MFC_OpenACC)
989# 618 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
991# 618 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
992#elif defined(MFC_OpenMP)
993# 618 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
995# 618 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1019 real(wp),
intent(inout) :: time_avg, time_final
1020 real(wp),
intent(inout) :: io_time_avg, io_time_final
1021 real(wp),
dimension(:),
intent(inout) :: proc_time
1022 real(wp),
dimension(:),
intent(inout) :: io_proc_time
1023 logical,
intent(inout) :: file_exists
1024 real(wp) :: grind_time
1036 io_time_final = 0._wp
1038 time_final = time_avg
1039 io_time_final = io_time_avg
1041 time_final = maxval(proc_time)
1042 io_time_final = maxval(io_proc_time)
1045 grind_time = time_final*1.0e9_wp/(real(
sys_size, wp)*real(maxval((/1,
m_glb/)), wp)*real(maxval((/1,
n_glb/)), &
1046 & wp)*real(maxval((/1,
p_glb/)), wp))
1048 print *,
"Performance:", grind_time,
"ns/gp/eq/rhs"
1049 inquire (file=
'time_data.dat', exist=file_exists)
1050 if (file_exists)
then
1051 open (1, file=
'time_data.dat',
position=
'append', status=
'old')
1053 open (1, file=
'time_data.dat', status=
'new')
1054 write (1,
'(A10, A15, A15)')
"Ranks",
"s/step",
"ns/gp/eq/rhs"
1057 write (1,
'(I10, 2(F15.8))')
num_procs, time_final, grind_time
1061 inquire (file=
'io_time_data.dat', exist=file_exists)
1062 if (file_exists)
then
1063 open (1, file=
'io_time_data.dat',
position=
'append', status=
'old')
1065 open (1, file=
'io_time_data.dat', status=
'new')
1066 write (1,
'(A10, A15)')
"Ranks",
"s/step"
1069 write (1,
'(I10, F15.8)')
num_procs, io_time_final
1078 integer,
intent(inout) :: t_step
1079 real(wp),
intent(inout) :: start, finish, io_time_avg
1080 integer,
intent(inout) :: nt
1081 integer(kind=8) ::
i,
j,
k,
l
1083 integer :: save_count
1093# 714 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1095# 714 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1096#if defined(MFC_OpenACC)
1097# 714 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1099# 714 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1100#elif defined(MFC_OpenMP)
1101# 714 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1103# 714 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1105# 714 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1107# 714 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1109# 714 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1121# 724 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1122#if defined(MFC_OpenACC)
1123# 724 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1125# 724 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1126#elif defined(MFC_OpenMP)
1127# 724 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1129# 724 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1131# 724 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1136 call cpu_time(start)
1139#ifndef FRONTIER_UNIFIED
1141# 732 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1142#if defined(MFC_OpenACC)
1143# 732 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1145# 732 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1146#elif defined(MFC_OpenMP)
1147# 732 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1149# 732 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1156 print *,
"NaN(s) in timestep output.",
j,
k,
l,
i,
proc_rank, t_step,
m,
n,
p
1166# 747 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1167#if defined(MFC_OpenACC)
1168# 747 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1170# 747 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1171#elif defined(MFC_OpenMP)
1172# 747 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1174# 747 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1177# 748 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1178#if defined(MFC_OpenACC)
1179# 748 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1181# 748 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1182#elif defined(MFC_OpenMP)
1183# 748 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1185# 748 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1197# 758 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1198#if defined(MFC_OpenACC)
1199# 758 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1201# 758 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1202#elif defined(MFC_OpenMP)
1203# 758 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1205# 758 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1207# 760 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1210 call s_mpi_abort(
"Bubble radius is negative or NaN, please reduce dt.")
1215# 766 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1216#if defined(MFC_OpenACC)
1217# 766 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1219# 766 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1220#elif defined(MFC_OpenMP)
1221# 766 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1223# 766 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1227# 768 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1228#if defined(MFC_OpenACC)
1229# 768 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1231# 768 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1232#elif defined(MFC_OpenMP)
1233# 768 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1235# 768 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1247 call cpu_time(finish)
1255 io_time_avg = abs(finish - start)
1257 io_time_avg = (abs(finish - start) + io_time_avg*(nt - 1))/nt
1265 integer :: m_ds, n_ds, p_ds
1269# 811 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1305 m_ds = int((
m + 1)/3) - 1
1306 n_ds = int((
n + 1)/3) - 1
1307 p_ds = int((
p + 1)/3) - 1
1311 allocate (
q_cons_temp(
i)%sf(-1:m_ds + 1,-1:n_ds + 1,-1:p_ds + 1))
1320# 860 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1321#if defined(MFC_OpenACC)
1322# 860 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1324# 860 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1325#elif defined(MFC_OpenMP)
1326# 860 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1328# 860 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1348 allocate (particle_cloud_ibs(0))
1351 allocate (particle_cloud_ibs(0))
1358 deallocate (particle_cloud_ibs)
1401 real(wp) :: starttime, endtime
1402 integer :: num_devices, local_size, num_nodes, ppn, my_device_num
1403 integer :: dev, devnum, local_rank
1405 integer :: local_comm
1407#if defined(MFC_OpenACC)
1408 integer(acc_device_kind) :: devtype
1412 call s_mpi_initialize()
1419 call mpi_comm_split_type(mpi_comm_world, mpi_comm_type_shared, 0, mpi_info_null, local_comm, ierr)
1420 call mpi_comm_size(local_comm, local_size, ierr)
1421 call mpi_comm_rank(local_comm, local_rank, ierr)
1423#if defined(MFC_OpenACC)
1424 devtype = acc_get_device_type()
1425 devnum = acc_get_num_devices(devtype)
1426 dev = mod(local_rank, devnum)
1428 call acc_set_device_num(dev, devtype)
1429#elif defined(MFC_OpenMP)
1430 devnum = omp_get_num_devices()
1431 dev = mod(local_rank, devnum)
1432 call omp_set_default_device(dev)
1436 if (proc_rank == 0)
then
1437 call s_assign_default_values_to_user_inputs()
1441 print
'(" Simulating a ", A, " ", I0, "x", I0, "x", I0, " case on ", I0, " rank(s) ", A, ".")', &
1442# 974 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1444# 978 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1445 m, n, p, num_procs, &
1446#if defined(MFC_OpenACC)
1447 "with OpenACC offloading"
1448#elif defined(MFC_OpenMP)
1449 "with OpenMP offloading"
1455 call s_mpi_bcast_user_inputs()
1462 call s_initialize_parallel_io()
1464 call s_mpi_decompose_computational_domain()
1473 if (.not. down_sample)
then
1476# 1008 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1477#if defined(MFC_OpenACC)
1478# 1008 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1480# 1008 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1481#elif defined(MFC_OpenMP)
1482# 1008 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1484# 1008 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1489 if (qbmm .and. .not. polytropic)
then
1491# 1013 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1492#if defined(MFC_OpenACC)
1493# 1013 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1495# 1013 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1496#elif defined(MFC_OpenMP)
1497# 1013 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1499# 1013 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1504# 1016 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1505#if defined(MFC_OpenACC)
1506# 1016 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1508# 1016 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1509#elif defined(MFC_OpenMP)
1510# 1016 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1512# 1016 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1517# 1019 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1518#if defined(MFC_OpenACC)
1519# 1019 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1521# 1019 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1522#elif defined(MFC_OpenMP)
1523# 1019 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1525# 1019 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1529# 1021 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1530#if defined(MFC_OpenACC)
1531# 1021 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1533# 1021 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1534#elif defined(MFC_OpenMP)
1535# 1021 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1537# 1021 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1539# 1025 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1541 if (bubbles_euler)
then
1543# 1027 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1544#if defined(MFC_OpenACC)
1545# 1027 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1547# 1027 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1548#elif defined(MFC_OpenMP)
1549# 1027 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1551# 1027 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1553 if (.not. polytropic)
then
1555# 1029 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1556#if defined(MFC_OpenACC)
1557# 1029 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1559# 1029 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1560#elif defined(MFC_OpenMP)
1561# 1029 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1563# 1029 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1567# 1031 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1568#if defined(MFC_OpenACC)
1569# 1031 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1571# 1031 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1572#elif defined(MFC_OpenMP)
1573# 1031 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1575# 1031 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1581# 1035 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1582#if defined(MFC_OpenACC)
1583# 1035 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1585# 1035 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1586#elif defined(MFC_OpenMP)
1587# 1035 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1589# 1035 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1593# 1037 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1594#if defined(MFC_OpenACC)
1595# 1037 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1597# 1037 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1598#elif defined(MFC_OpenMP)
1599# 1037 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1601# 1037 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1604# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1605#if defined(MFC_OpenACC)
1606# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1608# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1609#elif defined(MFC_OpenMP)
1610# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1612# 1038 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1616# 1040 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1617#if defined(MFC_OpenACC)
1618# 1040 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1620# 1040 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1621#elif defined(MFC_OpenMP)
1622# 1040 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1624# 1040 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1627# 1041 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1628#if defined(MFC_OpenACC)
1629# 1041 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1631# 1041 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1632#elif defined(MFC_OpenMP)
1633# 1041 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1635# 1041 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1638# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1639#if defined(MFC_OpenACC)
1640# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1642# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1643#elif defined(MFC_OpenMP)
1644# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1646# 1042 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1649# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1650#if defined(MFC_OpenACC)
1651# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1653# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1654#elif defined(MFC_OpenMP)
1655# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1657# 1043 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1660# 1044 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1661#if defined(MFC_OpenACC)
1662# 1044 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1664# 1044 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1665#elif defined(MFC_OpenMP)
1666# 1044 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1668# 1044 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1672# 1046 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1673#if defined(MFC_OpenACC)
1674# 1046 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1676# 1046 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1677#elif defined(MFC_OpenMP)
1678# 1046 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1680# 1046 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1683# 1047 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1684#if defined(MFC_OpenACC)
1685# 1047 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1687# 1047 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1688#elif defined(MFC_OpenMP)
1689# 1047 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1691# 1047 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1694# 1048 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1695#if defined(MFC_OpenACC)
1696# 1048 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1698# 1048 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1699#elif defined(MFC_OpenMP)
1700# 1048 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1702# 1048 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1706# 1050 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1707#if defined(MFC_OpenACC)
1708# 1050 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1710# 1050 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1711#elif defined(MFC_OpenMP)
1712# 1050 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1714# 1050 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1717# 1051 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1718#if defined(MFC_OpenACC)
1719# 1051 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1721# 1051 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1722#elif defined(MFC_OpenMP)
1723# 1051 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1725# 1051 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1728# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1729#if defined(MFC_OpenACC)
1730# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1732# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1733#elif defined(MFC_OpenMP)
1734# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1736# 1052 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1739# 1053 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1740#if defined(MFC_OpenACC)
1741# 1053 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1743# 1053 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1744#elif defined(MFC_OpenMP)
1745# 1053 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1747# 1053 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1751# 1055 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1752#if defined(MFC_OpenACC)
1753# 1055 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1755# 1055 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1756#elif defined(MFC_OpenMP)
1757# 1055 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1759# 1055 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1763# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1764#if defined(MFC_OpenACC)
1765# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1767# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1768#elif defined(MFC_OpenMP)
1769# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1771# 1057 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1777# 1061 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1778#if defined(MFC_OpenACC)
1779# 1061 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1781# 1061 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1782#elif defined(MFC_OpenMP)
1783# 1061 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1785# 1061 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1788# 1064 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1790# 1064 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1791#if defined(MFC_OpenACC)
1792# 1064 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1794# 1064 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1795#elif defined(MFC_OpenMP)
1796# 1064 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1798# 1064 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1800# 1066 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1807 call s_finalize_time_steppers_module()
1808 if (hypoelasticity)
call s_finalize_hypoelastic_module()
1809 if (hyperelasticity)
call s_finalize_hyperelastic_module()
1810 call s_finalize_derived_variables_module()
1811 call s_finalize_data_output_module()
1812 call s_finalize_rhs_module()
1814 call s_finalize_igr_module()
1816 call s_finalize_cbc_module()
1817 call s_finalize_riemann_solvers_module()
1818 if (recon_type == weno_type)
then
1819 call s_finalize_weno_module()
1820 else if (recon_type == muscl_type)
then
1821 call s_finalize_muscl_module()
1824 if (int_comp > 0)
call s_finalize_thinc_module()
1825 call s_finalize_variables_conversion_module()
1826 if (grid_geometry == 3)
call s_finalize_fftw_module
1827 call s_finalize_mpi_common_module()
1828 call s_finalize_global_parameters_module()
1829 call s_finalize_boundary_common_module()
1830 if (relax)
call s_finalize_relaxation_solver_module()
1831 if (bubbles_lagrange)
call s_finalize_lagrangian_solver()
1832 if (viscous .and. (.not. igr))
then
1833 call s_finalize_viscous_module()
1835 call s_finalize_mpi_proxy_module()
1837 if (surface_tension)
call s_finalize_surface_tension_module()
1838 if (bodyforces)
call s_finalize_body_forces_module()
1839 if (ib)
call s_finalize_ibm_module()
1841 call s_mpi_finalize()
1849 integer,
intent(in) :: t_step
1850 character(len=path_len + 2*name_len) :: file_loc
1851 integer :: i, ios, file_unit, ierr
1852 integer :: r, nlocal, gbl_id
1853 integer,
parameter :: nfields_per_ib = 20
1854 real(wp) :: ib_buf(nfields_per_ib)
1855 logical :: file_exist
1856 character(len=10) :: t_step_string
1858 if (file_per_process)
then
1859 call s_int_to_str(t_step, t_step_string)
1861 do r = 0, num_procs - 1
1862 write (file_loc,
'(A,I0,A,i7.7,A)')
'ib_state_', t_step,
'_', r,
'.dat'
1863 file_loc = trim(case_dir) //
'/restart_data/lustre_' // trim(t_step_string) //
'/' // trim(file_loc)
1865 inquire (file=trim(file_loc), exist=file_exist)
1866 if (.not. file_exist)
call s_mpi_abort(
'Cannot open IB state file for restart: ' // trim(file_loc))
1868 open (newunit=file_unit, file=trim(file_loc), form=
'unformatted', access=
'stream', status=
'old', iostat=ios)
1869 if (ios /= 0)
call s_mpi_abort(
'Error opening IB state restart file: ' // trim(file_loc))
1871 read (file_unit, iostat=ios) nlocal
1872 if (ios /= 0)
call s_mpi_abort(
'Error reading IB state file header: ' // trim(file_loc))
1875 read (file_unit, iostat=ios) gbl_id
1876 if (ios /= 0)
call s_mpi_abort(
'Error reading IB patch ID: ' // trim(file_loc))
1877 read (file_unit, iostat=ios) ib_buf
1878 if (ios /= 0)
call s_mpi_abort(
'Error reading IB state data: ' // trim(file_loc))
1880 patch_ib(gbl_id)%vel = ib_buf(8:10)
1881 patch_ib(gbl_id)%angular_vel = ib_buf(11:13)
1882 patch_ib(gbl_id)%angles = ib_buf(14:16)
1883 patch_ib(gbl_id)%x_centroid = ib_buf(17)
1884 patch_ib(gbl_id)%y_centroid = ib_buf(18)
1885 patch_ib(gbl_id)%z_centroid = ib_buf(19)
1891 write (file_loc,
'(A,I0,A)')
'/restart_data/ib_state_', t_step,
'.dat'
1892 file_loc = trim(case_dir) // trim(file_loc)
1894 if (proc_rank == 0)
then
1895 inquire (file=trim(file_loc), exist=file_exist)
1896 if (.not. file_exist)
then
1897 call s_mpi_abort(
'Cannot open IB state file for restart: ' // trim(file_loc))
1900 open (newunit=file_unit, file=trim(file_loc), form=
'unformatted', access=
'stream', status=
'old', iostat=ios)
1901 if (ios /= 0)
call s_mpi_abort(
'Error opening IB state restart file: ' // trim(file_loc))
1904 read (file_unit, iostat=ios) ib_buf
1905 if (ios /= 0)
call s_mpi_abort(
'Error reading IB state restart file')
1907 patch_ib(i)%vel = ib_buf(8:10)
1908 patch_ib(i)%angular_vel = ib_buf(11:13)
1909 patch_ib(i)%angles = ib_buf(14:16)
1910 patch_ib(i)%x_centroid = ib_buf(17)
1911 patch_ib(i)%y_centroid = ib_buf(18)
1912 patch_ib(i)%z_centroid = ib_buf(19)
1920 call mpi_bcast(patch_ib(i)%vel, 3, mpi_p, 0, mpi_comm_world, ierr)
1921 call mpi_bcast(patch_ib(i)%angular_vel, 3, mpi_p, 0, mpi_comm_world, ierr)
1922 call mpi_bcast(patch_ib(i)%angles, 3, mpi_p, 0, mpi_comm_world, ierr)
1923 call mpi_bcast(patch_ib(i)%x_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1924 call mpi_bcast(patch_ib(i)%y_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1925 call mpi_bcast(patch_ib(i)%z_centroid, 1, mpi_p, 0, mpi_comm_world, ierr)
1937 type(ib_patch_parameters),
intent(in),
dimension(:) :: particle_cloud_ibs
1938 real(wp),
dimension(3) :: centroid
1940 integer :: num_namelist_ibs, num_bed_ibs
1942 num_namelist_ibs = num_ibs
1944 do i = 1, num_particle_clouds
1945 num_bed_ibs = num_bed_ibs + particle_cloud(i)%num_particles
1949 moving_immersed_boundary_flag = .false.
1950 do i = 1, num_namelist_ibs
1951 if (patch_ib(i)%moving_ibm /= 0)
then
1952 moving_immersed_boundary_flag = .true.
1956 if (.not. moving_immersed_boundary_flag)
then
1957 do i = 1, num_bed_ibs
1958 if (particle_cloud_ibs(i)%moving_ibm /= 0)
then
1959 moving_immersed_boundary_flag = .true.
1968 num_gbl_ibs = num_namelist_ibs + num_bed_ibs
1971 if (num_procs == 1)
then
1973 if (num_gbl_ibs > num_ib_patches_max_namelist)
then
1974# 1238 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1975 call s_prohibit_abort(
"num_gbl_ibs > num_ib_patches_max_namelist",
"Total IB count exceeds patch_ib capacity. Increase num_ib_patches_max_namelist.")
1976# 1238 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1978# 1240 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
1979 do i = 1, num_bed_ibs
1980 patch_ib(num_namelist_ibs + i) = particle_cloud_ibs(i)
1981 patch_ib(num_namelist_ibs + i)%gbl_patch_id = num_namelist_ibs + i
1983 num_ibs = num_gbl_ibs
1984 num_local_ibs = num_gbl_ibs
1985 do i = 1, num_gbl_ibs
1986 local_ib_patch_ids(i) = i
1992 do i = 1, num_namelist_ibs
1993 centroid = [patch_ib(i)%x_centroid, patch_ib(i)%y_centroid, 0._wp]
1994 if (num_dims == 3) centroid(3) = patch_ib(i)%z_centroid
1995 if (f_neighborhood_ranks_own_location(centroid))
then
1996 num_ibs = num_ibs + 1
1997 patch_ib(num_ibs) = patch_ib(i)
1998 patch_ib(num_ibs)%gbl_patch_id = i
1999 if (f_local_rank_owns_location(centroid))
then
2000 num_local_ibs = num_local_ibs + 1
2001 local_ib_patch_ids(num_local_ibs) = num_ibs
2005 do i = 1, num_bed_ibs
2006 centroid = [particle_cloud_ibs(i)%x_centroid, particle_cloud_ibs(i)%y_centroid, 0._wp]
2007 if (num_dims == 3) centroid(3) = particle_cloud_ibs(i)%z_centroid
2008 if (f_neighborhood_ranks_own_location(centroid))
then
2009 num_ibs = num_ibs + 1
2010 if (num_ibs > num_ib_patches_max_namelist)
then
2011# 1271 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2012 call s_prohibit_abort(
"num_ibs > num_ib_patches_max_namelist",
"Local IB count exceeds patch_ib capacity. Increase num_ib_patches_max_namelist.")
2013# 1271 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2015# 1273 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2016 patch_ib(num_ibs) = particle_cloud_ibs(i)
2017 patch_ib(num_ibs)%gbl_patch_id = num_namelist_ibs + i
2018 if (f_local_rank_owns_location(centroid))
then
2019 num_local_ibs = num_local_ibs + 1
2020 local_ib_patch_ids(num_local_ibs) = num_ibs
2024 if (num_local_ibs > num_local_ibs_max)
then
2025# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2026 call s_prohibit_abort(
"num_local_ibs > num_local_ibs_max",
"Too many IBs on a single processor rank. Modify case file or increase limit of num_local_ibs_max to resolve.")
2027# 1281 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2029# 1283 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2033 if (num_gbl_ibs > num_ib_patches_max_namelist)
then
2034# 1286 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2035 call s_prohibit_abort(
"num_gbl_ibs > num_ib_patches_max_namelist",
"Total IB count exceeds patch_ib capacity. Increase num_ib_patches_max_namelist.")
2036# 1286 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2038# 1288 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2039 do i = 1, num_bed_ibs
2040 patch_ib(num_namelist_ibs + i) = particle_cloud_ibs(i)
2041 patch_ib(num_namelist_ibs + i)%gbl_patch_id = num_namelist_ibs + i
2043 num_ibs = num_gbl_ibs
2044 num_local_ibs = num_gbl_ibs
2045 do i = 1, num_gbl_ibs
2046 local_ib_patch_ids(i) = i
2051# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2053# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2054 use iso_fortran_env,
only: output_unit
2055# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2057# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2058 print *,
'm_start_up.fpp:1299: ',
'@:ALLOCATE(ib_gbl_idx_lookup(1:num_gbl_ibs))'
2059# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2061# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2062 call flush (output_unit)
2063# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2065# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2067# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2068 allocate (ib_gbl_idx_lookup(1:num_gbl_ibs))
2069# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2071# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2073# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2074#if defined(MFC_OpenACC)
2075# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2077# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2078#elif defined(MFC_OpenMP)
2079# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2081# 1299 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2090 integer :: ax, k, nbr_idx, nreqs, sx, sy, sz, dx, dy, dz
2091 integer,
allocatable :: send_table(:,:,:), recv_tables(:,:,:,:)
2092 integer,
dimension(52) :: requests
2096 integer,
dimension(4) :: buf4, rbuf4
2097 integer,
dimension(2) :: buf2, rbuf2
2099 ax = ib_neighborhood_radius
2101 if (
allocated(ib_neighbor_ranks))
deallocate (ib_neighbor_ranks)
2102 allocate (ib_neighbor_ranks(-ax:ax,-ax:ax,-ax:ax))
2103 ib_neighbor_ranks = mpi_proc_null
2104 ib_neighbor_ranks(0, 0, 0) = proc_rank
2107 ib_neighbor_ranks(-1, 0, 0) = bc_x%beg
2108 ib_neighbor_ranks(+1, 0, 0) = bc_x%end
2109 if (num_dims >= 2)
then
2110 ib_neighbor_ranks(0, -1, 0) = bc_y%beg
2111 ib_neighbor_ranks(0, +1, 0) = bc_y%end
2113 if (num_dims == 3)
then
2114 ib_neighbor_ranks(0, 0, -1) = bc_z%beg
2115 ib_neighbor_ranks(0, 0, +1) = bc_z%end
2118 if (num_dims >= 2)
then
2120 buf4 = [bc_y%beg, bc_y%end, bc_z%beg, bc_z%end]
2123 call mpi_sendrecv(buf4, 4, mpi_integer, merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0), 310, rbuf4, 4, mpi_integer, &
2124 & merge(bc_x%end, mpi_proc_null, bc_x%end >= 0), 310, mpi_comm_world, mpi_status_ignore, ierr)
2125 if (bc_x%end >= 0)
then
2126 ib_neighbor_ranks(+1, -1, 0) = rbuf4(1)
2127 ib_neighbor_ranks(+1, +1, 0) = rbuf4(2)
2128 ib_neighbor_ranks(+1, 0, -1) = rbuf4(3)
2129 ib_neighbor_ranks(+1, 0, +1) = rbuf4(4)
2132 call mpi_sendrecv(buf4, 4, mpi_integer, merge(bc_x%end, mpi_proc_null, bc_x%end >= 0), 311, rbuf4, 4, mpi_integer, &
2133 & merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0), 311, mpi_comm_world, mpi_status_ignore, ierr)
2134 if (bc_x%beg >= 0)
then
2135 ib_neighbor_ranks(-1, -1, 0) = rbuf4(1)
2136 ib_neighbor_ranks(-1, +1, 0) = rbuf4(2)
2137 ib_neighbor_ranks(-1, 0, -1) = rbuf4(3)
2138 ib_neighbor_ranks(-1, 0, +1) = rbuf4(4)
2142 if (num_dims == 3)
then
2144 buf2 = [bc_z%beg, bc_z%end]
2146 call mpi_sendrecv(buf2, 2, mpi_integer, merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0), 312, rbuf2, 2, mpi_integer, &
2147 & merge(bc_y%end, mpi_proc_null, bc_y%end >= 0), 312, mpi_comm_world, mpi_status_ignore, ierr)
2148 if (bc_y%end >= 0)
then
2149 ib_neighbor_ranks(0, +1, -1) = rbuf2(1)
2150 ib_neighbor_ranks(0, +1, +1) = rbuf2(2)
2153 call mpi_sendrecv(buf2, 2, mpi_integer, merge(bc_y%end, mpi_proc_null, bc_y%end >= 0), 313, rbuf2, 2, mpi_integer, &
2154 & merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0), 313, mpi_comm_world, mpi_status_ignore, ierr)
2155 if (bc_y%beg >= 0)
then
2156 ib_neighbor_ranks(0, -1, -1) = rbuf2(1)
2157 ib_neighbor_ranks(0, -1, +1) = rbuf2(2)
2163# 1381 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2164 call mpi_sendrecv(buf2, 2, mpi_integer, merge(ib_neighbor_ranks(-1, -1, 0), mpi_proc_null, &
2165 & ib_neighbor_ranks(-1, -1, 0) >= 0), 320, rbuf2, 2, mpi_integer, &
2166 & merge(ib_neighbor_ranks(1, 1, 0), mpi_proc_null, ib_neighbor_ranks(1, 1, &
2167 & 0) >= 0), 320, mpi_comm_world, mpi_status_ignore, ierr)
2168 if (ib_neighbor_ranks(1, 1, 0) >= 0)
then
2169 ib_neighbor_ranks(1, 1, -1) = rbuf2(1)
2170 ib_neighbor_ranks(1, 1, +1) = rbuf2(2)
2172# 1381 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2173 call mpi_sendrecv(buf2, 2, mpi_integer, merge(ib_neighbor_ranks(-1, 1, 0), mpi_proc_null, &
2174 & ib_neighbor_ranks(-1, 1, 0) >= 0), 321, rbuf2, 2, mpi_integer, &
2175 & merge(ib_neighbor_ranks(1, -1, 0), mpi_proc_null, ib_neighbor_ranks(1, -1, &
2176 & 0) >= 0), 321, mpi_comm_world, mpi_status_ignore, ierr)
2177 if (ib_neighbor_ranks(1, -1, 0) >= 0)
then
2178 ib_neighbor_ranks(1, -1, -1) = rbuf2(1)
2179 ib_neighbor_ranks(1, -1, +1) = rbuf2(2)
2181# 1381 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2182 call mpi_sendrecv(buf2, 2, mpi_integer, merge(ib_neighbor_ranks(1, -1, 0), mpi_proc_null, &
2183 & ib_neighbor_ranks(1, -1, 0) >= 0), 322, rbuf2, 2, mpi_integer, &
2184 & merge(ib_neighbor_ranks(-1, 1, 0), mpi_proc_null, ib_neighbor_ranks(-1, 1, &
2185 & 0) >= 0), 322, mpi_comm_world, mpi_status_ignore, ierr)
2186 if (ib_neighbor_ranks(-1, 1, 0) >= 0)
then
2187 ib_neighbor_ranks(-1, 1, -1) = rbuf2(1)
2188 ib_neighbor_ranks(-1, 1, +1) = rbuf2(2)
2190# 1381 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2191 call mpi_sendrecv(buf2, 2, mpi_integer, merge(ib_neighbor_ranks(1, 1, 0), mpi_proc_null, &
2192 & ib_neighbor_ranks(1, 1, 0) >= 0), 323, rbuf2, 2, mpi_integer, &
2193 & merge(ib_neighbor_ranks(-1, -1, 0), mpi_proc_null, ib_neighbor_ranks(-1, -1, &
2194 & 0) >= 0), 323, mpi_comm_world, mpi_status_ignore, ierr)
2195 if (ib_neighbor_ranks(-1, -1, 0) >= 0)
then
2196 ib_neighbor_ranks(-1, -1, -1) = rbuf2(1)
2197 ib_neighbor_ranks(-1, -1, +1) = rbuf2(2)
2199# 1390 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2206 allocate (send_table(-ax:ax,-ax:ax,-ax:ax))
2207 allocate (recv_tables(-ax:ax,-ax:ax,-ax:ax,1:26))
2210 send_table = ib_neighbor_ranks
2217 if (sx == 0 .and. sy == 0 .and. sz == 0) cycle
2218 nbr_idx = nbr_idx + 1
2219 if (ib_neighbor_ranks(sx, sy, sz) < 0) cycle
2221 call mpi_irecv(recv_tables(:,:,:,nbr_idx), (2*ax + 1)**3, mpi_integer, ib_neighbor_ranks(sx, sy, sz), &
2222 & 400, mpi_comm_world, requests(nreqs), ierr)
2230 if (sx == 0 .and. sy == 0 .and. sz == 0) cycle
2231 if (ib_neighbor_ranks(sx, sy, sz) < 0) cycle
2233 call mpi_isend(send_table, (2*ax + 1)**3, mpi_integer, ib_neighbor_ranks(sx, sy, sz), 400, &
2234 & mpi_comm_world, requests(nreqs), ierr)
2239 call mpi_waitall(nreqs, requests, mpi_statuses_ignore, ierr)
2245 if (sx == 0 .and. sy == 0 .and. sz == 0) cycle
2246 nbr_idx = nbr_idx + 1
2247 if (ib_neighbor_ranks(sx, sy, sz) < 0) cycle
2251 if (recv_tables(dx, dy, dz, nbr_idx) == mpi_proc_null) cycle
2252 if (dx + sx < -ax .or. dx + sx > ax) cycle
2253 if (dy + sy < -ax .or. dy + sy > ax) cycle
2254 if (dz + sz < -ax .or. dz + sz > ax) cycle
2255 if (ib_neighbor_ranks(dx + sx, dy + sy, dz + sz) /= mpi_proc_null) cycle
2256 ib_neighbor_ranks(dx + sx, dy + sy, dz + sz) = recv_tables(dx, dy, dz, nbr_idx)
2265 deallocate (send_table, recv_tables)
2273 real(wp) :: beg_val, end_val, recv_val
2274 integer :: k, send_neighbor, recv_neighbor, ierr
2278 neighbor_domain_x%beg = -huge(0._wp)
2279 neighbor_domain_x%end = huge(0._wp)
2280 neighbor_domain_y%beg = -huge(0._wp)
2281 neighbor_domain_y%end = huge(0._wp)
2282 neighbor_domain_z%beg = -huge(0._wp)
2283 neighbor_domain_z%end = huge(0._wp)
2288# 1479 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2289 if (num_dims >= 1)
then
2292 do k = 1, ib_neighborhood_radius
2293 send_neighbor = merge(bc_x%end, mpi_proc_null, bc_x%end >= 0)
2294 recv_neighbor = merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0)
2295 recv_val = -huge(0._wp)
2296 call mpi_sendrecv(beg_val, 1, mpi_p, send_neighbor, 100, recv_val, 1, mpi_p, recv_neighbor, 100, &
2297 & mpi_comm_world, mpi_status_ignore, ierr)
2300 send_neighbor = merge(bc_x%beg, mpi_proc_null, bc_x%beg >= 0)
2301 recv_neighbor = merge(bc_x%end, mpi_proc_null, bc_x%end >= 0)
2302 recv_val = huge(0._wp)
2303 call mpi_sendrecv(end_val, 1, mpi_p, send_neighbor, 101, recv_val, 1, mpi_p, recv_neighbor, &
2304 & 101, mpi_comm_world, mpi_status_ignore, ierr)
2307 neighbor_domain_x%beg = beg_val
2308 neighbor_domain_x%end = end_val
2310# 1479 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2311 if (num_dims >= 2)
then
2314 do k = 1, ib_neighborhood_radius
2315 send_neighbor = merge(bc_y%end, mpi_proc_null, bc_y%end >= 0)
2316 recv_neighbor = merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0)
2317 recv_val = -huge(0._wp)
2318 call mpi_sendrecv(beg_val, 1, mpi_p, send_neighbor, 102, recv_val, 1, mpi_p, recv_neighbor, 102, &
2319 & mpi_comm_world, mpi_status_ignore, ierr)
2322 send_neighbor = merge(bc_y%beg, mpi_proc_null, bc_y%beg >= 0)
2323 recv_neighbor = merge(bc_y%end, mpi_proc_null, bc_y%end >= 0)
2324 recv_val = huge(0._wp)
2325 call mpi_sendrecv(end_val, 1, mpi_p, send_neighbor, 103, recv_val, 1, mpi_p, recv_neighbor, &
2326 & 103, mpi_comm_world, mpi_status_ignore, ierr)
2329 neighbor_domain_y%beg = beg_val
2330 neighbor_domain_y%end = end_val
2332# 1479 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
2333 if (num_dims >= 3)
then
2336 do k = 1, ib_neighborhood_radius
2337 send_neighbor = merge(bc_z%end, mpi_proc_null, bc_z%end >= 0)
2338 recv_neighbor = merge(bc_z%beg, mpi_proc_null, bc_z%beg >= 0)
2339 recv_val = -huge(0._wp)
2340 call mpi_sendrecv(beg_val, 1, mpi_p, send_neighbor, 104, recv_val, 1, mpi_p, recv_neighbor, 104, &
2341 & mpi_comm_world, mpi_status_ignore, ierr)
2344 send_neighbor = merge(bc_z%beg, mpi_proc_null, bc_z%beg >= 0)
2345 recv_neighbor = merge(bc_z%end, mpi_proc_null, bc_z%end >= 0)
2346 recv_val = huge(0._wp)
2347 call mpi_sendrecv(end_val, 1, mpi_p, send_neighbor, 105, recv_val, 1, mpi_p, recv_neighbor, &
2348 & 105, mpi_comm_world, mpi_status_ignore, ierr)
2351 neighbor_domain_z%beg = beg_val
2352 neighbor_domain_z%end = end_val
2354# 1501 "/home/runner/work/MFC/MFC/src/simulation/m_start_up.fpp"
type(scalar_field), dimension(sys_size), intent(inout) q_cons_vf
One-way acoustic source injection, Maeda and Colonius JCP (2017).
impure subroutine, public s_precalculate_acoustic_spatial_sources
Pre-compute non-zero spatial source weights before time-stepping.
impure subroutine, public s_initialize_acoustic_src
Initialize the acoustic source module.
Computes gravitational and body force source terms for the momentum equations.
impure subroutine, public s_initialize_body_forces_module
Initialize the body forces module.
Noncharacteristic and processor boundary condition application for ghost cells and buffer regions.
impure subroutine, public s_initialize_boundary_common_module()
Allocate and set up boundary condition buffer arrays for all coordinate directions.
subroutine, public s_read_parallel_boundary_condition_files(bc_type)
Read boundary condition type and buffer data from per-rank parallel files using MPI I/O.
subroutine, public s_populate_grid_variables_buffers
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.
subroutine, public s_read_serial_boundary_condition_files(step_dirpath, bc_type)
Read boundary condition type and buffer data from serial (unformatted) restart files.
subroutine, public s_assign_default_bc_type(bc_type)
Initialize the per-cell boundary condition type arrays with the global default BC values.
Computes ensemble-averaged (Euler–Euler) bubble source terms for radius, velocity,...
impure subroutine s_initialize_bubbles_ee_module
Initialize the Euler-Euler bubble module.
Tracks Lagrangian bubbles and couples their dynamics to the Eulerian flow via volume averaging.
impure subroutine s_write_lag_bubble_stats()
Write the maximum and minimum radius statistics for each bubble.
impure subroutine s_write_restart_lag_bubbles(t_step)
Write restart files for the Lagrangian bubble solver.
integer nbubs
Number of bubbles in the local domain.
impure subroutine s_initialize_bubbles_el_module(q_cons_vf)
Initializes the lagrangian subgrid bubble solver.
type(scalar_field), dimension(:), allocatable q_beta
Projection of the lagrangian particles in the Eulerian framework.
real(wp), dimension(:,:), allocatable intfc_rad
Bubble radius.
Characteristic boundary conditions (CBC) for slip walls, non-reflecting subsonic inflow/outflow,...
impure subroutine, public s_initialize_cbc_module
Initialize the CBC module.
Shared input validation checks for grid dimensions and AMD GPU compiler limits.
impure subroutine, public s_check_inputs_common
Checks compatibility of parameters in the input file. Used by all three stages.
Validates simulation input parameters for consistency and supported configurations.
impure subroutine, public s_check_inputs
Checks compatibility of parameters in the input file. Used by the simulation stage.
Multi-species chemistry interface for thermodynamic properties, reaction rates, and transport coeffic...
subroutine s_compute_q_t_sf(q_t_sf, q_cons_vf, bounds)
Initialize the temperature field from conservative variables by inverting the energy equation.
Ghost-node immersed boundary method: locates ghost/image points, computes interpolation coefficients,...
Platform-specific file and directory operations: create, delete, inquire, getcwd, and basename.
impure subroutine my_inquire(fileloc, dircheck)
Inquires on the existence of a directory.
Writes solution data, run-time stability diagnostics (ICFL, VCFL, CCFL, Rc), and probe/center-of-mass...
impure subroutine, public s_initialize_data_output_module
Initialize the data output module.
impure subroutine, public s_write_data_files(q_cons_vf, q_t_sf, q_prim_vf, t_step, bc_type, beta)
Write data files. Dispatch subroutine that replaces procedure pointer.
impure subroutine, public s_write_ib_state_file(time_step)
Writes IB state records to restart_data/ib_state.dat. Must be called only on rank 0.
subroutine, public s_write_ib_data_file(time_step)
Dispatch immersed boundary data output to the serial or parallel writer.
Shared derived types for field data, patch geometry, bubble dynamics, and MPI I/O structures.
Derives diagnostic flow quantities (vorticity, speed of sound, numerical Schlieren,...
impure subroutine, public s_initialize_derived_variables
Allocate and open derived variables. Computing FD coefficients.
impure subroutine, public s_initialize_derived_variables_module
Computation of parameters, allocation procedures, and/or any other tasks needed to properly setup the...
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
real(wp) mytime
Current simulation time.
type(ib_stl_parameters), dimension(num_stl_models_max) stl_models
Per-STL model parameters (namelist).
integer num_particle_clouds
type(int_bounds_info), dimension(1:3) idwint
real(wp), dimension(:), allocatable, target z_cb
logical, parameter chemistry
Chemistry modeling.
real(wp) ib_coefficient_of_friction
type(int_bounds_info) bc_z
type(bubbles_lagrange_parameters) lag_params
Lagrange bubbles' parameters.
integer proc_rank
Rank of the local processor.
real(wp) hyper_cleaning_tau
integer ib_neighborhood_radius
real(wp) hyper_cleaning_speed
type(bounds_info) z_domain
character(len=name_len) mpiiofs
integer, dimension(:), allocatable start_idx
Starting cell-center index of local processor in global grid.
type(vec3_dt), dimension(num_probes_max) probe
integer sys_size
Number of unknowns in system of eqns.
type(bounds_info) x_domain
type(ib_airfoil_parameters), dimension(num_ib_airfoils_max) ib_airfoil
Per-airfoil NACA user inputs (namelist).
type(int_bounds_info), dimension(1:3) idwbuff
type(particle_cloud_parameters), dimension(num_particle_clouds_max) particle_cloud
Particle bed specifications.
type(physical_parameters), dimension(num_fluids_max) fluid_pp
Stiffened gas EOS parameters and Reynolds numbers per fluid.
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(chemistry_parameters) chem_params
type(int_bounds_info) bc_x
type(bounds_info) y_domain
type(ib_patch_parameters), dimension(num_ib_patches_max_namelist) patch_ib
Immersed boundary patch parameters.
real(wp), dimension(:), allocatable, target z_cc
integer adap_dt_max_iters
real(wp), dimension(:), allocatable qvs
real(wp), dimension(:), allocatable pi_infs
integer num_procs
Number of processors.
character(len=path_len) case_dir
real(wp), dimension(:), allocatable, target x_cc
type(acoustic_parameters), dimension(num_probes_max) acoustic
Acoustic source parameters.
type(integral_parameters), dimension(num_probes_max) integral
real(wp), dimension(:), allocatable, target y_cb
type(cell_num_bounds) cells_bounds
logical nv_uvm_out_of_core
integer num_igr_warm_start_iters
integer nv_uvm_igr_temps_on_gpu
logical elasticity
elasticity modeling, true for hyper or hypo
type(mpi_io_var), public mpi_io_data
real(wp) coefficient_of_restitution
real(wp), dimension(:), allocatable, target dy
type(subgrid_bubble_physical_parameters) bub_pp
real(wp), dimension(:), allocatable gammas
real(wp) finaltime
Final simulation time.
real(wp), dimension(:), allocatable, target dz
real(wp), dimension(:), allocatable, target dx
type(eqn_idx_info) eqn_idx
All conserved-variable equation index ranges and scalars.
real(wp), dimension(:), allocatable, target x_cb
Basic floating-point utilities: approximate equality, default detection, and coordinate bounds.
elemental subroutine, public s_update_cell_bounds(bounds, m, n, p)
Updates the min and max number of cells in each set of axes.
Utility routines for bubble model setup, coordinate transforms, array sampling, and special functions...
subroutine, public s_upsample_data(q_cons_vf, q_cons_temp)
Upsample conservative variable fields from a coarsened grid back to the original resolution using int...
impure subroutine, public s_initialize_bubbles_model()
Initialize bubble model arrays for Euler or Lagrangian bubbles with polytropic or non-polytropic gas.
elemental subroutine, public s_int_to_str(i, res)
Convert an integer to its trimmed string representation.
Computes the left Cauchy–Green deformation tensor and hyperelastic stress source terms.
impure subroutine, public s_initialize_hyperelastic_module
Initialize the hyperelastic module.
Computes hypoelastic stress-rate source terms and damage-state evolution.
impure subroutine, public s_initialize_hypoelastic_module
Initialize the hypoelastic module.
Allocate memory and read initial condition data for IC extrusion.
subroutine, public s_initialize_ib_airfoils()
Initialize the NACA surface grids for all airfoil IB patches. Must be called after the grid is establ...
Ghost-node immersed boundary method: locates ghost/image points, computes interpolation coefficients,...
impure subroutine, public s_ibm_setup()
Initializes the values of various IBM variables, such as ghost points and image points.
type(integer_field), public ib_markers
impure subroutine, public s_initialize_ibm_module()
Allocates memory for the variables in the IBM module.
Iterative ghost rasterization (IGR) for sharp immersed boundary treatment.
subroutine, public s_initialize_igr_module()
Initialize the IGR module.
Binary STL file reader and processor for immersed boundary geometry.
subroutine, public s_instantiate_stl_models()
Load, transform, and register STL/OBJ immersed-boundary models onto the simulation grid.
MPI communication layer: domain decomposition, halo exchange, reductions, and parallel I/O setup.
impure subroutine s_mpi_abort(prnt, code)
The subroutine terminates the MPI execution environment.
impure subroutine s_initialize_mpi_common_module
Initialize the module.
impure subroutine s_mpi_barrier
Halts all processes until all have reached barrier.
impure subroutine s_initialize_mpi_data(q_cons_vf, ib_markers, beta)
Set up MPI I/O data views and variable pointers for parallel file output.
subroutine s_initialize_mpi_data_ds(q_cons_vf)
Set up MPI I/O data views for downsampled (coarsened) parallel file output.
impure subroutine mpi_bcast_time_step_values(proc_time, time_avg)
Gather per-rank time step wall-clock times onto rank 0 for performance reporting.
MPI halo exchange, domain decomposition, and buffer packing/unpacking for the simulation solver.
subroutine s_initialize_mpi_proxy_module()
Initialize the MPI proxy module.
MUSCL reconstruction with interface sharpening for contact-preserving advection.
subroutine, public s_initialize_muscl_module()
Allocate and initialize MUSCL reconstruction working arrays.
NVIDIA NVTX profiling API bindings for GPU performance instrumentation.
subroutine nvtxstartrange(name, id)
Push a named NVTX range for GPU profiling, optionally with a color based on the given identifier.
subroutine nvtxendrange
Pop the current NVTX range to end the GPU profiling region.
Generates particle beds by converting particle_cloud patch specifications into individual immersed bo...
impure subroutine, public s_generate_particle_clouds(particle_cloud_ibs)
Generate all particle beds and fill particle_cloud_ibs. Called on all ranks before s_reduce_ib_patch_...
Phase transition relaxation solvers for liquid-vapor flows with cavitation and boiling.
subroutine, public s_infinite_relaxation_k(q_cons_vf)
Apply pT- or pTg-equilibrium relaxation with mass depletion based on the incoming state conditions.
impure subroutine, public s_initialize_phasechange_module
Initialize the phase change module by setting saturation curve coefficients for pT- or pTg-equilibriu...
Quadrature-based moment methods (QBMM) for polydisperse bubble moment inversion and transport.
impure subroutine, public s_initialize_qbmm_module
Initialize the QBMM module.
Assembles the right-hand side of the governing equations using finite-volume flux differencing,...
impure subroutine, public s_initialize_rhs_module
Initialize the RHS module.
Approximate and exact Riemann solvers (HLL, HLLC, HLLD, exact) for the multicomponent Navier–Stokes e...
impure subroutine, public s_initialize_riemann_solvers_module
Initialize the Riemann solvers module.
Simulation helper routines for enthalpy computation, CFL calculation, and stability checks.
Reads input files, loads initial conditions and grid data, and orchestrates solver initialization and...
impure subroutine s_read_ib_restart_data(t_step)
Reads IB kinematic state from restart_data/ib_state.dat on restart. Rank 0 reads the last num_ibs rec...
impure subroutine, public s_read_serial_data_files(q_cons_vf)
Read serial initial condition and grid data files and compute cell-width distributions.
impure subroutine, public s_initialize_modules
Initialize all simulation sub-modules in the required dependency order.
impure subroutine, public s_read_data_files(q_cons_vf)
Read data files. Dispatch subroutine that replaces procedure pointer.
impure subroutine, public s_read_parallel_data_files(q_cons_vf)
Read parallel initial condition and grid data files via MPI I/O.
subroutine, public s_initialize_internal_energy_equations(v_vf)
Initialize internal-energy equations from phase mass, mixture momentum, and total energy.
impure subroutine, public s_save_performance_metrics(time_avg, time_final, io_time_avg, io_time_final, proc_time, io_proc_time, file_exists)
Collect per-process wall-clock times and write aggregate performance metrics to file.
subroutine get_neighbor_bounds()
subroutine s_compute_ib_neighbor_ranks()
Build ib_neighbor_ranks(-1:1,-1:1,-1:1): MPI ranks of all neighbor domains. Uses two rounds of MPI_SE...
subroutine s_reduce_ib_patch_array(particle_cloud_ibs)
Merges patch_ib (namelist patches, fixed at num_ib_patches_max_namelist) with particle_cloud_ibs (CPU...
impure subroutine, public s_save_data(t_step, start, finish, io_time_avg, nt)
Save conservative variable data to disk at the current time step.
type(scalar_field), dimension(:), allocatable q_cons_temp
subroutine, public s_initialize_gpu_vars
Transfer initial conservative variable and model parameter data to the GPU device.
impure subroutine, public s_initialize_mpi_domain
Set up the MPI execution environment, bind GPUs, and decompose the computational domain.
impure subroutine, public s_finalize_modules
Finalize and deallocate all simulation sub-modules in reverse initialization order.
impure subroutine, public s_read_input_file
Verify the input file exists and read it.
impure subroutine, public s_check_input_file
Validate that all user-provided inputs form a consistent simulation configuration.
impure subroutine, public s_perform_time_step(t_step, time_avg)
Advance the simulation by one time step, handling CFL-based dt and time-stepper dispatch.
Computes capillary source fluxes and color-function gradients for the diffuse-interface surface tensi...
impure subroutine, public s_initialize_surface_tension_module
Allocate and initialize surface tension module arrays.
THINC and MTHINC interface compression for volume fraction sharpening. THINC (int_comp=1): 1D directi...
subroutine, public s_initialize_thinc_module()
real(wp), dimension(:,:,:), allocatable position
Total-variation-diminishing (TVD) Runge–Kutta time integrators (1st-, 2nd-, and 3rd-order SSP).
type(scalar_field) q_t_sf
Cell-average temperature variables at the current time-stage.
type(integer_field), dimension(:,:), allocatable bc_type
Boundary condition identifiers.
impure subroutine s_initialize_time_steppers_module
Initialize the time steppers module.
type(vector_field), dimension(:), allocatable q_cons_ts
Cell-average conservative variables at each time-stage (TS).
type(scalar_field), dimension(:), allocatable q_prim_vf
Cell-average primitive variables at the current time-stage.
impure subroutine s_compute_dt()
Compute the global time step size from CFL stability constraints across all cells.
impure subroutine s_tvd_rk(t_step, time_avg, nstage)
Advance the solution one full step using a TVD Runge-Kutta time integrator.
integer stor
storage index
Conservative-to-primitive variable conversion, mixture property evaluation, and pressure computation.
subroutine, public s_compute_pressure(energy, alf, dyn_p, pi_inf, gamma, rho, qv, rhoyks, pres, t, stress, mom, g, pres_mag)
Compute the pressure from the appropriate equation of state.
impure subroutine, public s_initialize_variables_conversion_module
Initialize the variables conversion module.
subroutine, public s_convert_to_mixture_variables(q_vf, i, j, k, rho, gamma, pi_inf, qv, re_k, g_k, g)
Dispatch to the s_convert_mixture_to_mixture_variables and s_convert_species_to_mixture_variables sub...
Computes viscous stress tensors and diffusive flux contributions for the Navier–Stokes equations.
impure subroutine, public s_initialize_viscous_module
Initialize the viscous module.
WENO/WENO-Z/TENO reconstruction with optional monotonicity-preserving bounds and mapped weights.
impure subroutine, public s_initialize_weno_module
Initialize the WENO module.
Derived type annexing a scalar field (SF).