1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
6# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
7# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
8# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
9# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
10# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
11# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
12# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
13# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
15# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
16# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
17# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
19# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
20# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
23# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
24# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
25# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
27# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
30# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
32# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
34# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
36# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
38# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
40# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
42# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
44# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
46# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
47# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
48# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
49# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
52# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
59# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
63# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
64# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
65# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
67# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
68# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
70# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
72# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
74# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
76# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
78# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
80# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
82# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
84# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
86# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
88# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
90# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
91# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
94# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
96# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
98# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
104# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
106# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
108# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
110# 95 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
112# 100 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114# 105 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116# 110 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118# 115 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120# 120 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122# 125 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124# 130 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126# 135 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128# 165 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130# 219 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132# 233 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134# 258 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136# 269 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138# 271 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139# 282 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141# 332 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143# 342 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
145# 352 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
147# 361 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
149# 378 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
151# 388 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
153# 395 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
155# 401 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
157# 407 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
159# 413 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
161# 419 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
163# 425 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
165# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
166# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
167# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
168# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
169# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
170# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
171# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
172# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
174# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
175# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
176# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
178# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
179# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
182# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
183# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
184# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
186# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
187# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
189# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
191# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
193# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
195# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
197# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
199# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
201# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
203# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
205# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
207# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
223# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
225# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
227# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
229# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
231# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
233# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
235# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
237# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
239# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
241# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
243# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
245# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
247# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
249# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
251# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
253# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
255# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
257# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
259# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
261# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
263# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
266# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
269# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
272# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
275# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
278# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
281# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
287# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
293# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
296# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
299# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
302# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
305# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
308# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
311# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
314# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
317# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
320# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
322# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
323# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
325# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
327# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
332# 52 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
335# 72 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
338# 80 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
341# 104 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
344# 120 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
347# 145 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
349# 151 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
351# 158 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
353# 6 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp" 2
354# 1 "/home/runner/work/MFC/MFC/src/common/include/case.fpp" 1
360# 8 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
363# 12 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
364# 7 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp" 2
408 character(len=*),
parameter ::
ib_rec_fmt =
'(I10,19(1X,ES17.9E3))'
420 type(
scalar_field),
dimension(sys_size),
intent(inout) :: q_prim_vf
421 integer,
intent(in) :: t_step
423 type(
integer_field),
dimension(1:num_dims,-1:1),
intent(in) :: bc_type
425 if (.not. parallel_io)
then
436 character(LEN=name_len),
parameter :: file_name =
'run_time.inf'
437 character(LEN=path_len + name_len) :: file_path
438 character(LEN=8) :: file_date
440 file_path = trim(case_dir) //
'/' // trim(file_name)
442 open (3, file=trim(file_path), form=
'formatted', status=
'replace')
444 write (3,
'(A)')
'Description: Stability information at ' //
'each time-step of the simulation. This'
445 write (3,
'(13X,A)')
'data is composed of the inviscid ' //
'Courant-Friedrichs-Lewy (ICFL)'
446 write (3,
'(13X,A)')
'number, the viscous CFL (VCFL) number, ' //
'the capillary CFL (CCFL)'
447 write (3,
'(13X,A)')
'number, the thermal diffusion CFL (TCFL) ' //
'number, and the cell Reynolds (Rc)'
448 write (3,
'(13X,A)')
'number. Please note that only'
449 write (3,
'(13X,A)')
'those stability conditions pertinent ' //
'to the physics included in'
450 write (3,
'(13X,A)')
'the current computation are displayed.'
451 if (hypoelasticity)
then
452 write (3,
'(13X,A)')
'NOTE: the reported ICFL uses the acoustic ' //
'sound speed only; it may'
453 write (3,
'(13X,A)')
'underestimate the elastic characteristic ' //
'speeds.'
456 call date_and_time(date=file_date)
458 write (3,
'(A)')
'Date: ' // file_date(5:6) //
'/' // file_date(7:8) //
'/' // file_date(3:4)
460 write (3,
'(A)')
'';
write (3,
'(A)')
''
462 write (3,
'(13X,A9,13X,A10,13X,A10,13X,A10)', advance=
"no") trim(
'Time-step'), trim(
'dt'), trim(
'Time'), trim(
'ICFL Max')
464 if (surface_tension)
then
465 write (3,
'(13X,A10)', advance=
"no") trim(
'CCFL Max')
468 if (heat_conduction)
then
469 write (3,
'(13X,A10)', advance=
"no") trim(
'TCFL Max')
473 write (3,
'(13X,A10,13X,A16)', advance=
"no") trim(
'VCFL Max'), trim(
'Rc Min')
476 if (bubbles_lagrange)
then
477 write (3,
'(13X,A10)', advance=
"no") trim(
'N Bubbles')
487 character(LEN=path_len + 3*name_len) :: file_path
489 logical :: file_exist
490 logical :: fresh_start
495 fresh_start = merge(n_start == 0, t_step_start == 0,
cfl_dt)
498 write (file_path,
'(A,I0,A)')
'/D/probe', i,
'_prim.dat'
499 file_path = trim(case_dir) // trim(file_path)
501 inquire (file=trim(file_path), exist=file_exist)
507 if (file_exist .and. .not. fresh_start)
then
508 open (i + 30, file=trim(file_path), form=
'formatted', status=
'old', position=
'append')
510 open (i + 30, file=trim(file_path), form=
'formatted', status=
'replace')
519 type(
scalar_field),
dimension(sys_size),
intent(in) :: q_prim_vf
520 integer,
intent(in) :: t_step
523# 169 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
524 real(wp),
dimension(num_fluids) :: alpha, alpha_rho
525 real(wp),
dimension(num_vels) :: vel
526# 172 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
533 real(wp),
dimension(2) :: re
535 real(wp) :: icfl_max_loc, icfl_max_glb
536 real(wp) :: vcfl_max_loc, vcfl_max_glb
537 real(wp) :: ccfl_max_loc, ccfl_max_glb
538 real(wp) :: tcfl_max_loc, tcfl_max_glb
539 real(wp) :: rc_min_loc, rc_min_glb
540 real(wp) :: icfl, vcfl, ccfl, tcfl, rc
541 real(wp) :: mu_frac, mu_frac_max_loc, mu_frac_max_glb
543 logical :: include_cell
544 real(wp),
dimension(4) :: stab_max_loc, stab_max_glb
545 real(wp),
dimension(1) :: stab_min_loc, stab_min_glb
551 rc_min_loc = huge(1.0_wp)
552 mu_frac_max_loc = 0._wp
555# 199 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
557# 199 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
558#if defined(MFC_OpenACC)
559# 199 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
561# 199 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
563# 199 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
565# 199 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
566#elif defined(MFC_OpenMP)
567# 199 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
569# 199 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
571# 199 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
573# 199 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
575# 199 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
577# 199 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
579# 199 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
581# 202 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
586 include_cell = .true.
588 if (include_cell)
then
589 call s_compute_cell_state(q_prim_vf, pres, rho, gamma, pi_inf, re, alpha, alpha_rho, vel, vel_sum, qv,
j, &
592 call s_compute_speed_of_sound(pres, rho, gamma, pi_inf, alpha, c, alpha_rho)
597 if (any_state_dependent_eos)
then
599# 218 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
600#if defined(MFC_OpenACC)
601# 218 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
603# 218 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
604#elif defined(MFC_OpenMP)
605# 218 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
607# 218 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
609# 219 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
610 do fl = 1, num_fluids
612 mu_frac = (alpha_rho(fl)/max(alpha(fl), &
613 &
sgm_eps)/eos_coeffs(fl)%rho0 - 1._wp)/eos_coeffs(fl)%mu_max
614 mu_frac_max_loc = max(mu_frac_max_loc, mu_frac)
621 do fl = 1, num_fluids
628 re(1) = 1._wp/max(re(1),
sgm_eps)
631 call s_compute_stability_from_dt(vel, c, rho, re, alpha, alpha_rho,
j,
k,
l, icfl, vcfl, rc, ccfl, tcfl)
633 icfl_max_loc = max(icfl_max_loc, icfl)
634 vcfl_max_loc = max(vcfl_max_loc, merge(vcfl, 0.0_wp, viscous))
635 ccfl_max_loc = max(ccfl_max_loc, merge(ccfl, 0.0_wp, surface_tension))
636 tcfl_max_loc = max(tcfl_max_loc, merge(tcfl, 0.0_wp, heat_conduction))
637 rc_min_loc = min(rc_min_loc, merge(rc, huge(1.0_wp), viscous))
643# 251 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
644#if defined(MFC_OpenACC)
645# 251 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
647# 251 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
648#elif defined(MFC_OpenMP)
649# 251 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
651# 251 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
653# 251 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
655# 252 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
659 stab_max_loc = (/icfl_max_loc, vcfl_max_loc, ccfl_max_loc, tcfl_max_loc/)
660 stab_min_loc = (/rc_min_loc/)
661 call s_mpi_reduce_stability_criteria_extrema(stab_max_loc, stab_min_loc,
n_el_bubs_loc, stab_max_glb, stab_min_glb, &
663 icfl_max_glb = stab_max_glb(1)
664 vcfl_max_glb = stab_max_glb(2)
665 ccfl_max_glb = stab_max_glb(3)
666 tcfl_max_glb = stab_max_glb(4)
667 rc_min_glb = stab_min_glb(1)
669 icfl_max_glb = icfl_max_loc
670 if (viscous) vcfl_max_glb = vcfl_max_loc
671 if (viscous) rc_min_glb = rc_min_loc
672 if (surface_tension) ccfl_max_glb = ccfl_max_loc
673 if (heat_conduction) tcfl_max_glb = tcfl_max_loc
677 mu_frac_max_glb = mu_frac_max_loc
678 if (
num_procs > 1)
call s_mpi_allreduce_max(mu_frac_max_loc, mu_frac_max_glb)
682 if (surface_tension)
then
686 if (heat_conduction)
then
697 if ((.not.
f_approx_equal(icfl_max_loc, icfl_max_loc)) .or. icfl_max_loc > 1._wp)
then
703 write (3,
'(13X,I9,13X,F10.6,13X,F10.6,13X,F10.6)', advance=
"no") t_step, dt,
mytime, icfl_max_glb
705 if (surface_tension)
then
706 write (3,
'(13X,F10.6)', advance=
"no") ccfl_max_glb
709 if (heat_conduction)
then
710 write (3,
'(13X,F10.6)', advance=
"no") tcfl_max_glb
714 write (3,
'(13X,F10.6,13X,ES16.6)', advance=
"no") vcfl_max_glb, rc_min_glb
717 if (bubbles_lagrange)
then
723 if (mu_frac_max_glb > 1._wp)
then
724 print *,
'compression as a fraction of the Hugoniot fit limit', mu_frac_max_glb
725 call s_mpi_abort(
'A Mie-Gruneisen phase is compressed past what its Hugoniot fit represents. Exiting.')
729 call s_mpi_abort(
'ICFL is NaN. Exiting.')
730 else if (icfl_max_glb > 1._wp)
then
731 print *,
'icfl', icfl_max_glb
732 call s_mpi_abort(
'ICFL is greater than 1.0. Exiting.')
737 call s_mpi_abort(
'VCFL is NaN. Exiting.')
738 else if (vcfl_max_glb > 1._wp)
then
739 print *,
'vcfl', vcfl_max_glb
740 call s_mpi_abort(
'VCFL is greater than 1.0. Exiting.')
744 if (bubbles_lagrange)
then
746 call s_mpi_abort(
'No Lagrangian bubbles remain in the domain. Exiting.')
759 type(
scalar_field),
dimension(sys_size),
intent(in) :: q_prim_vf
760 real(wp),
dimension(num_fluids) :: alpha, alpha_rho
761 real(wp),
dimension(num_vels) :: vel, vel_hit
762 real(wp),
dimension(2) :: re
763 real(wp) :: rho, vel_sum, pres, gamma, pi_inf, qv, c
764 real(wp) :: rho_hit, pres_hit, c_hit
765 real(wp) :: icfl, vcfl, rc, ccfl, tcfl, icfl_hit
766 integer :: i,
j,
k,
l, fl, j_hit, k_hit, l_hit
767 real(wp) :: x_hit, y_hit, z_hit, dist
769 integer :: near1_id, near2_id
770 real(wp) :: near1_dist, near2_dist
774# 369 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
775#if defined(MFC_OpenACC)
776# 369 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
778# 369 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
779#elif defined(MFC_OpenMP)
780# 369 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
782# 369 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
784# 370 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
788# 372 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
789#if defined(MFC_OpenACC)
790# 372 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
792# 372 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
793#elif defined(MFC_OpenMP)
794# 372 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
796# 372 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
798# 373 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
801 icfl_hit = -huge(1._wp)
803 j_hit = 0; k_hit = 0; l_hit = 0
812 call s_compute_cell_state(q_prim_vf, pres, rho, gamma, pi_inf, re, alpha, alpha_rho, vel, vel_sum, qv,
j,
k,
l)
813 call s_compute_speed_of_sound(pres, rho, gamma, pi_inf, alpha, c, alpha_rho)
817 do fl = 1, num_fluids
824 re(1) = 1._wp/max(re(1),
sgm_eps)
827 call s_compute_stability_from_dt(vel, c, rho, re, alpha, alpha_rho,
j,
k,
l, icfl, vcfl, rc, ccfl, tcfl)
831 j_hit =
j; k_hit =
k; l_hit =
l
832 rho_hit = rho; pres_hit = pres; c_hit = c; vel_hit = vel
834 else if (icfl > icfl_hit)
then
836 j_hit =
j; k_hit =
k; l_hit =
l
837 rho_hit = rho; pres_hit = pres; c_hit = c; vel_hit = vel
844 y_hit = 0._wp;
if (n > 0) y_hit =
y_cc(k_hit)
845 z_hit = 0._wp;
if (p > 0) z_hit =
z_cc(l_hit)
847 print
'(A,I0,A,I0,A,I0,A,I0,A)',
'ICFL violation on rank ',
proc_rank,
': cell (j,k,l) = (', j_hit,
',', k_hit,
',', &
850 print
'(A)',
' icfl = NaN'
852 print
'(A,ES16.6)',
' icfl = ', icfl_hit
854 print
'(A,3(ES16.6,1X))',
' position = ', x_hit, y_hit, z_hit
855 print
'(A,ES16.6,A,ES16.6,A,ES16.6)',
' rho, pres, c = ', rho_hit,
', ', pres_hit,
', ', c_hit
856 print
'(A,3(ES16.6,1X))',
' velocity = ', vel_hit
857 if (ib) print
'(A,I0)',
' ib_markers = ',
ib_markers%sf(j_hit, k_hit, l_hit)
859 if (ib .and. num_ibs > 0)
then
860 near1_id = 0; near1_dist = huge(1._wp)
861 near2_id = 0; near2_dist = huge(1._wp)
863 dist = sqrt((x_hit - patch_ib(i)%x_centroid)**2 + (y_hit - patch_ib(i)%y_centroid)**2 + (z_hit &
864 & - patch_ib(i)%z_centroid)**2)
865 if (dist < near1_dist)
then
866 near2_dist = near1_dist; near2_id = near1_id
867 near1_dist = dist; near1_id = i
868 else if (dist < near2_dist)
then
869 near2_dist = dist; near2_id = i
872 if (near1_id > 0)
then
873 print
'(A,I0,A,ES16.6,A,ES16.6,A,3(ES16.6,1X))',
' nearest particle id=', near1_id,
' dist=', near1_dist, &
874 &
' gap=', near1_dist - patch_ib(near1_id)%radius,
' vel=', patch_ib(near1_id)%vel
875 print
'(A,3(ES16.6,1X))',
' centroid = ', patch_ib(near1_id)%x_centroid, patch_ib(near1_id)%y_centroid, &
876 & patch_ib(near1_id)%z_centroid
877 print
'(A,3(ES16.6,1X))',
' angular_vel = ', patch_ib(near1_id)%angular_vel
878 print
'(A,3(ES16.6,1X))',
' force = ', patch_ib(near1_id)%force
879 print
'(A,3(ES16.6,1X))',
' torque = ', patch_ib(near1_id)%torque
880 print
'(A,I0,A,ES16.6,A,ES16.6)',
' moving_ibm = ', patch_ib(near1_id)%moving_ibm,
' mass=', &
881 & patch_ib(near1_id)%mass,
' moment=', patch_ib(near1_id)%moment
883 if (near2_id > 0)
then
884 print
'(A,I0,A,ES16.6,A,ES16.6,A,3(ES16.6,1X))',
' 2nd nearest particle id=', near2_id,
' dist=', near2_dist, &
885 &
' gap=', near2_dist - patch_ib(near2_id)%radius,
' vel=', patch_ib(near2_id)%vel
886 print
'(A,3(ES16.6,1X))',
' centroid = ', patch_ib(near2_id)%x_centroid, patch_ib(near2_id)%y_centroid, &
887 & patch_ib(near2_id)%z_centroid
888 print
'(A,3(ES16.6,1X))',
' angular_vel = ', patch_ib(near2_id)%angular_vel
889 print
'(A,3(ES16.6,1X))',
' force = ', patch_ib(near2_id)%force
896 print
'(A)',
' x-neighborhood (dj, rho, pres, vel) around violating cell:'
898 call s_compute_cell_state(q_prim_vf, pres, rho, gamma, pi_inf, re, alpha, alpha_rho, vel, vel_sum, qv,
j, k_hit, l_hit)
899 print
'(A,I0,A,ES16.6,A,ES16.6,A,3(ES16.6,1X))',
' dj=',
j - j_hit,
' rho=', rho,
' pres=', pres,
' vel=', vel
911 type(
scalar_field),
dimension(sys_size),
intent(inout) :: q_prim_vf
912 integer,
intent(in) :: t_step
914 type(
integer_field),
dimension(1:num_dims,-1:1),
intent(in) :: bc_type
915 character(LEN=path_len + 2*name_len) :: t_step_dir
916 character(LEN=path_len + 3*name_len) :: file_path
917 logical :: file_exist
918 character(LEN=15) :: fmt
919 integer :: i,
j,
k,
l, r
921 write (t_step_dir,
'(A,I0,A,I0)') trim(case_dir) //
'/p_all'
922 write (t_step_dir,
'(a,i0,a,i0)') trim(case_dir) //
'/p_all/p',
proc_rank,
'/', t_step
924 file_path = trim(t_step_dir) //
'/.'
929 file_path = trim(t_step_dir) //
'/x_cb.dat'
931 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
932 write (2)
x_cb(-1:m);
close (2)
935 file_path = trim(t_step_dir) //
'/y_cb.dat'
937 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
938 write (2)
y_cb(-1:n);
close (2)
941 file_path = trim(t_step_dir) //
'/z_cb.dat'
943 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
944 write (2)
z_cb(-1:p);
close (2)
949 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/q_cons_vf', i,
'.dat'
951 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
953 write (2)
q_cons_vf(i)%sf(0:m,0:n,0:p);
close (2)
958 if (bubbles_lagrange)
then
959 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/q_cons_vf', sys_size + 1,
'.dat'
961 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
963 write (2) beta%sf(0:m,0:n,0:p);
close (2)
966 if (qbmm .and. .not. polytropic)
then
969 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/pb', sys_size + (i - 1)*
nnode + r,
'.dat'
971 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
973 write (2)
pb_ts(1)%sf(0:m,0:n,0:p,r, i);
close (2)
979 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/mv', sys_size + (i - 1)*
nnode + r,
'.dat'
981 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
983 write (2)
mv_ts(1)%sf(0:m,0:n,0:p,r, i);
close (2)
999 write (t_step_dir,
'(A,I0,A,I0)') trim(case_dir) //
'/D'
1000 file_path = trim(t_step_dir) //
'/.'
1002 inquire (file=trim(file_path), exist=file_exist)
1006 if ((prim_vars_wrt .or. (n == 0 .and. p == 0)) .and. (.not. igr))
then
1010# 583 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1011#if defined(MFC_OpenACC)
1012# 583 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1014# 583 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1015#elif defined(MFC_OpenMP)
1016# 583 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1018# 583 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1020# 584 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1025 q_prim_vf(eqn_idx%bub%beg)%sf = 1._wp
1029 if (n == 0 .and. p == 0)
then
1032 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/prim.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
1034 open (2, file=trim(file_path))
1037 if (((i >= eqn_idx%adv%beg) .and. (i <= eqn_idx%adv%end)))
then
1040 write (2, fmt)
x_cb(
j), q_prim_vf(i)%sf(
j, 0, 0)
1048 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/cons.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
1050 open (2, file=trim(file_path))
1057 if (qbmm .and. .not. polytropic)
then
1060 write (file_path,
'(A,I0,A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/pres.', i,
'.', r,
'.',
proc_rank, &
1061 &
'.', t_step,
'.dat'
1063 open (2, file=trim(file_path))
1065 write (2, fmt)
x_cb(
j),
pb_ts(1)%sf(
j, 0, 0, r, i)
1072 write (file_path,
'(A,I0,A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/mv.', i,
'.', r,
'.',
proc_rank, &
1073 &
'.', t_step,
'.dat'
1075 open (2, file=trim(file_path))
1077 write (2, fmt)
x_cb(
j),
mv_ts(1)%sf(
j, 0, 0, r, i)
1091 if ((n > 0) .and. (p == 0))
then
1093 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/cons.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
1094 open (2, file=trim(file_path))
1104 if (
present(beta))
then
1105 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/beta.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
1106 open (2, file=trim(file_path))
1116 if (qbmm .and. .not. polytropic)
then
1119 write (file_path,
'(A,I0,A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/pres.', i,
'.', r,
'.',
proc_rank, &
1120 &
'.', t_step,
'.dat'
1122 open (2, file=trim(file_path))
1133 write (file_path,
'(A,I0,A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/mv.', i,
'.', r,
'.',
proc_rank, &
1134 &
'.', t_step,
'.dat'
1136 open (2, file=trim(file_path))
1147 if (prim_vars_wrt .and. (.not. igr))
then
1149 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/prim.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
1151 open (2, file=trim(file_path))
1155 if (((i >= eqn_idx%cont%beg) .and. (i <= eqn_idx%cont%end)) .or. ((i >= eqn_idx%adv%beg) &
1156 & .and. (i <= eqn_idx%adv%end)))
then
1159 write (2, fmt)
x_cb(
j),
y_cb(
k), q_prim_vf(i)%sf(
j,
k, 0)
1177 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/cons.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
1178 open (2, file=trim(file_path))
1191 if (
present(beta))
then
1192 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/beta.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
1193 open (2, file=trim(file_path))
1206 if (qbmm .and. .not. polytropic)
then
1209 write (file_path,
'(A,I0,A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/pres.', i,
'.', r,
'.',
proc_rank, &
1210 &
'.', t_step,
'.dat'
1212 open (2, file=trim(file_path))
1225 write (file_path,
'(A,I0,A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/mv.', i,
'.', r,
'.',
proc_rank, &
1226 &
'.', t_step,
'.dat'
1228 open (2, file=trim(file_path))
1241 if (prim_vars_wrt .and. (.not. igr))
then
1243 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/prim.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
1245 open (2, file=trim(file_path))
1250 if (((i >= eqn_idx%cont%beg) .and. (i <= eqn_idx%cont%end)) .or. ((i >= eqn_idx%adv%beg) &
1251 & .and. (i <= eqn_idx%adv%end)) .or. ((i >= eqn_idx%species%beg) &
1252 & .and. (i <= eqn_idx%species%end)))
then
1273 integer,
intent(in) :: t_step
1275 type(
integer_field),
dimension(1:num_dims,-1:1),
intent(in) :: bc_type
1279 integer :: ifile, ierr, data_size
1280 integer,
dimension(MPI_STATUS_SIZE) :: status
1281 integer(kind=MPI_OFFSET_kind) :: disp
1282 integer(kind=MPI_OFFSET_kind) :: m_mok, n_mok, p_mok
1283 integer(kind=MPI_OFFSET_kind) :: wp_mok, var_mok, str_mok
1284 integer(kind=MPI_OFFSET_kind) :: nvars_mok
1285 integer(kind=MPI_OFFSET_kind) :: mok
1286 character(LEN=path_len + 2*name_len) :: file_loc
1287 logical :: file_exist, dir_check
1288 character(len=10) :: t_step_string
1292 integer :: m_ds, n_ds, p_ds
1293 integer :: m_glb_ds, n_glb_ds, p_glb_ds
1294 integer :: m_glb_save, n_glb_save, p_glb_save
1296 if (down_sample)
then
1300 if (
present(beta))
then
1301 alt_sys = sys_size + 1
1306 if (file_per_process)
then
1309 if (down_sample)
then
1310 call s_initialize_mpi_data_ds(m_ds, n_ds, p_ds)
1321 file_loc = trim(case_dir) //
'/restart_data/lustre_' // trim(t_step_string)
1323 if (dir_check .neqv. .true.)
then
1328 call s_mpi_barrier()
1333 write (file_loc,
'(I0,A,i7.7,A)') t_step,
'_',
proc_rank,
'.dat'
1334 file_loc = trim(case_dir) //
'/restart_data/lustre_' // trim(t_step_string) // trim(mpiiofs) // trim(file_loc)
1335 inquire (file=trim(file_loc), exist=file_exist)
1336 if (file_exist .and.
proc_rank == 0)
then
1337 call mpi_file_delete(file_loc, mpi_info_int, ierr)
1339 call mpi_file_open(mpi_comm_self, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
1340 call s_check_mpi_file_open(ierr, file_loc)
1342 if (down_sample)
then
1343 data_size = (m_ds + 3)*(n_ds + 3)*(p_ds + 3)
1344 m_glb_save = m_glb_ds + 1
1345 n_glb_save = n_glb_ds + 1
1346 p_glb_save = p_glb_ds + 1
1348 data_size = (m + 1)*(n + 1)*(p + 1)
1349 m_glb_save =
m_glb + 1
1350 n_glb_save =
n_glb + 1
1351 p_glb_save =
p_glb + 1
1354 m_mok = int(m_glb_save + 1, mpi_offset_kind)
1355 n_mok = int(n_glb_save + 1, mpi_offset_kind)
1356 p_mok = int(p_glb_save + 1, mpi_offset_kind)
1357 wp_mok = int(storage_size(0._stp)/8, mpi_offset_kind)
1358 mok = int(1._wp, mpi_offset_kind)
1359 str_mok = int(
name_len, mpi_offset_kind)
1360 nvars_mok = int(sys_size, mpi_offset_kind)
1362 if (bubbles_euler)
then
1364 var_mok = int(i, mpi_offset_kind)
1366 call mpi_file_write_all(ifile,
mpi_io_data%var(i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1368 if (qbmm .and. .not. polytropic)
then
1369 do i = sys_size + 1, sys_size + 2*
nb*
nnode
1370 var_mok = int(i, mpi_offset_kind)
1372 call mpi_file_write_all(ifile,
mpi_io_data%var(i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1376 if (down_sample)
then
1378 var_mok = int(i, mpi_offset_kind)
1380 call mpi_file_write_all(ifile,
q_cons_temp_ds(i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1384 var_mok = int(i, mpi_offset_kind)
1386 call mpi_file_write_all(ifile,
mpi_io_data%var(i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1391 call mpi_file_close(ifile, ierr)
1400 else if (
present(beta))
then
1406 write (file_loc,
'(I0,A)') t_step,
'.dat'
1407 file_loc = trim(case_dir) //
'/restart_data' // trim(mpiiofs) // trim(file_loc)
1408 inquire (file=trim(file_loc), exist=file_exist)
1409 if (file_exist .and.
proc_rank == 0)
then
1410 call mpi_file_delete(file_loc, mpi_info_int, ierr)
1412 call mpi_file_open(mpi_comm_world, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
1413 call s_check_mpi_file_open(ierr, file_loc)
1415 data_size = (m + 1)*(n + 1)*(p + 1)
1417 m_mok = int(
m_glb + 1, mpi_offset_kind)
1418 n_mok = int(
n_glb + 1, mpi_offset_kind)
1419 p_mok = int(
p_glb + 1, mpi_offset_kind)
1420 wp_mok = int(storage_size(0._stp)/8, mpi_offset_kind)
1421 mok = int(1._wp, mpi_offset_kind)
1422 str_mok = int(
name_len, mpi_offset_kind)
1423 nvars_mok = int(alt_sys, mpi_offset_kind)
1425 if (bubbles_euler)
then
1427 var_mok = int(i, mpi_offset_kind)
1429 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
1431 call mpi_file_set_view(ifile, disp, mpi_p,
mpi_io_data%view(i),
'native', mpi_info_int, ierr)
1432 call mpi_file_write_all(ifile,
mpi_io_data%var(i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1434 if (qbmm .and. .not. polytropic)
then
1435 do i = sys_size + 1, sys_size + 2*
nb*
nnode
1436 var_mok = int(i, mpi_offset_kind)
1438 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
1440 call mpi_file_set_view(ifile, disp, mpi_p,
mpi_io_data%view(i),
'native', mpi_info_int, ierr)
1441 call mpi_file_write_all(ifile,
mpi_io_data%var(i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1446 var_mok = int(i, mpi_offset_kind)
1448 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
1450 call mpi_file_set_view(ifile, disp, mpi_p,
mpi_io_data%view(i),
'native', mpi_info_int, ierr)
1451 call mpi_file_write_all(ifile,
mpi_io_data%var(i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1455 if (
present(beta))
then
1456 var_mok = int(sys_size + 1, mpi_offset_kind)
1458 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
1460 call mpi_file_set_view(ifile, disp, mpi_p,
mpi_io_data%view(sys_size + 1),
'native', mpi_info_int, ierr)
1461 call mpi_file_write_all(ifile,
mpi_io_data%var(sys_size + 1)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1464 call mpi_file_close(ifile, ierr)
1477 integer,
intent(in) :: time_step
1478 character(LEN=path_len + 2*name_len) :: file_path
1479 character(LEN=path_len + 2*name_len) :: t_step_dir
1481 write (t_step_dir,
'(A,I0,A,I0)') trim(case_dir) //
'/p_all'
1482 write (t_step_dir,
'(a,i0,a,i0)') trim(case_dir) //
'/p_all/p',
proc_rank,
'/', time_step
1483 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/ib_data.dat'
1485 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
1488# 1050 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1489#if defined(MFC_OpenACC)
1490# 1050 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1492# 1050 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1493#elif defined(MFC_OpenMP)
1494# 1050 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1496# 1050 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1498# 1051 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1499 write (2)
ib_markers%sf(0:m,0:n,0:p);
close (2)
1506 integer,
intent(in) :: time_step
1509 character(LEN=path_len + 2*name_len) :: file_loc
1510 integer(kind=MPI_OFFSET_kind) :: disp
1511 integer(kind=MPI_OFFSET_kind) :: m_MOK, n_MOK, p_MOK
1512 integer(kind=MPI_OFFSET_kind) :: WP_MOK, var_MOK, MOK
1513 integer :: ifile, ierr, data_size
1514 integer,
dimension(MPI_STATUS_SIZE) :: status
1515 character(len=10) :: t_step_string
1518# 1069 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1519#if defined(MFC_OpenACC)
1520# 1069 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1522# 1069 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1523#elif defined(MFC_OpenMP)
1524# 1069 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1526# 1069 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1528# 1070 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1530 data_size = (m + 1)*(n + 1)*(p + 1)
1531 m_mok = int(
m_glb + 1, mpi_offset_kind)
1532 n_mok = int(
n_glb + 1, mpi_offset_kind)
1533 p_mok = int(
p_glb + 1, mpi_offset_kind)
1534 wp_mok = int(storage_size(0._stp)/8, mpi_offset_kind)
1535 mok = int(1._wp, mpi_offset_kind)
1537 if (file_per_process)
then
1541 file_loc = trim(case_dir) //
'/restart_data/lustre_' // trim(t_step_string)
1544 call s_mpi_barrier()
1547 write (file_loc,
'(A,I0,A,i7.7,A)')
'ib_markers_', time_step,
'_',
proc_rank,
'.dat'
1548 file_loc = trim(case_dir) //
'/restart_data/lustre_' // trim(t_step_string) //
'/' // trim(file_loc)
1550 call mpi_file_open(mpi_comm_self, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
1551 call s_check_mpi_file_open(ierr, file_loc)
1552 call mpi_file_write_all(ifile,
mpi_io_ib_data%var%sf, data_size, mpi_integer, status, ierr)
1553 call mpi_file_close(ifile, ierr)
1555 write (file_loc,
'(A)')
'ib.dat'
1556 file_loc = trim(case_dir) //
'/restart_data' // trim(mpiiofs) // trim(file_loc)
1558 call s_mpi_barrier()
1561 call mpi_file_open(mpi_comm_world, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
1562 call s_check_mpi_file_open(ierr, file_loc)
1564 var_mok = int(sys_size + 1, mpi_offset_kind)
1565 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1 + int(time_step/t_step_save))
1566 if (time_step == 0) disp = 0
1568 call mpi_file_set_view(ifile, disp, mpi_integer,
mpi_io_ib_data%view,
'native', mpi_info_int, ierr)
1569 call mpi_file_write_all(ifile,
mpi_io_ib_data%var%sf, data_size, mpi_integer, status, ierr)
1570 call mpi_file_close(ifile, ierr)
1579 integer,
intent(in) :: time_step
1582# 1122 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1583#if defined(MFC_OpenACC)
1584# 1122 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1586# 1122 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1587#elif defined(MFC_OpenMP)
1588# 1122 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1590# 1122 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1592# 1123 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1594 if (parallel_io)
then
1605 integer,
intent(in) :: t_step
1608 character(LEN=path_len + 2*name_len) :: file_loc
1609 integer(kind=MPI_OFFSET_KIND) :: disp
1610 integer(kind=MPI_OFFSET_KIND) :: WP_MOK
1611 integer :: ifile, ierr
1612 integer,
dimension(MPI_STATUS_SIZE) :: status
1613 logical :: file_exist, dir_check
1614 integer :: i, ib_idx
1615 integer,
parameter :: NFIELDS_PER_IB = 20
1616 real(wp) :: ib_buf(NFIELDS_PER_IB)
1617 integer :: file_unit
1618 character(len=10) :: t_step_string
1621 integer :: ib_start, ib_end, nibs_per_rank, remainder
1623 wp_mok = int(storage_size(0._wp)/8, mpi_offset_kind)
1625 if (file_per_process)
then
1629 file_loc = trim(case_dir) //
'/restart_data/lustre_' // trim(t_step_string)
1632 call s_mpi_barrier()
1635 write (file_loc,
'(A,I0,A,i7.7,A)')
'ib_state_', t_step,
'_',
proc_rank,
'.dat'
1636 file_loc = trim(case_dir) //
'/restart_data/lustre_' // trim(t_step_string) //
'/' // trim(file_loc)
1638 inquire (file=trim(file_loc), exist=file_exist)
1639 if (file_exist)
then
1640 open (newunit=file_unit, file=trim(file_loc), form=
'unformatted', access=
'stream', status=
'replace')
1642 open (newunit=file_unit, file=trim(file_loc), form=
'unformatted', access=
'stream', status=
'new')
1649 ib_buf(2:4) = patch_ib(ib_idx)%force(1:3)
1650 ib_buf(5:7) = patch_ib(ib_idx)%torque(1:3)
1651 ib_buf(8:10) = patch_ib(ib_idx)%vel(1:3)
1652 ib_buf(11:13) = patch_ib(ib_idx)%angular_vel(1:3)
1653 ib_buf(14:16) = patch_ib(ib_idx)%angles(1:3)
1654 ib_buf(17) = patch_ib(ib_idx)%x_centroid
1655 ib_buf(18) = patch_ib(ib_idx)%y_centroid
1656 ib_buf(19) = patch_ib(ib_idx)%z_centroid
1657 ib_buf(20) = patch_ib(ib_idx)%radius
1659 write (file_unit) patch_ib(ib_idx)%gbl_patch_id
1660 write (file_unit) ib_buf
1668 call s_mpi_barrier()
1670 write (file_loc,
'(A,I0,A)')
'/restart_data/ib_state_', t_step,
'.dat'
1671 file_loc = trim(case_dir) // trim(file_loc)
1673 inquire (file=trim(file_loc), exist=file_exist)
1674 if (file_exist .and.
proc_rank == 0)
then
1675 call mpi_file_delete(file_loc, mpi_info_int, ierr)
1677 call s_mpi_barrier()
1679 call mpi_file_open(mpi_comm_world, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
1680 call s_check_mpi_file_open(ierr, file_loc)
1685 ib_buf(2:4) = patch_ib(ib_idx)%force(1:3)
1686 ib_buf(5:7) = patch_ib(ib_idx)%torque(1:3)
1687 ib_buf(8:10) = patch_ib(ib_idx)%vel(1:3)
1688 ib_buf(11:13) = patch_ib(ib_idx)%angular_vel(1:3)
1689 ib_buf(14:16) = patch_ib(ib_idx)%angles(1:3)
1690 ib_buf(17) = patch_ib(ib_idx)%x_centroid
1691 ib_buf(18) = patch_ib(ib_idx)%y_centroid
1692 ib_buf(19) = patch_ib(ib_idx)%z_centroid
1693 ib_buf(20) = patch_ib(ib_idx)%radius
1696 disp = int(patch_ib(ib_idx)%gbl_patch_id - 1, mpi_offset_kind)*int(nfields_per_ib, mpi_offset_kind)*wp_mok
1698 call mpi_file_write_at(ifile, disp, ib_buf, nfields_per_ib, mpi_p, status, ierr)
1701 call mpi_file_close(ifile, ierr)
1710 integer,
intent(in) :: t_step
1711 character(LEN=path_len + 2*name_len) :: file_loc
1712 integer :: i, ios, file_unit
1713 integer,
parameter :: NFIELDS_PER_IB = 20
1714 real(wp) :: ib_buf(NFIELDS_PER_IB)
1718 write (file_loc,
'(A,I0,A)')
'/restart_data/ib_state_', t_step,
'.dat'
1719 file_loc = trim(case_dir) // trim(file_loc)
1721 open (newunit=file_unit, file=trim(file_loc), form=
'unformatted', access=
'stream', status=
'replace', iostat=ios)
1722 if (ios /= 0)
call s_mpi_abort(
'Cannot open IB state output file: ' // trim(file_loc))
1726 ib_buf(2:4) = patch_ib(i)%force(1:3)
1727 ib_buf(5:7) = patch_ib(i)%torque(1:3)
1728 ib_buf(8:10) = patch_ib(i)%vel(1:3)
1729 ib_buf(11:13) = patch_ib(i)%angular_vel(1:3)
1730 ib_buf(14:16) = patch_ib(i)%angles(1:3)
1731 ib_buf(17) = patch_ib(i)%x_centroid
1732 ib_buf(18) = patch_ib(i)%y_centroid
1733 ib_buf(19) = patch_ib(i)%z_centroid
1734 ib_buf(20) = patch_ib(i)%radius
1736 write (file_unit) ib_buf
1763 integer,
intent(in) :: t_step
1764 character(LEN=IB_REC_LEN) :: rec
1765 character(LEN=path_len + 2*name_len) :: file_loc
1766 real(wp) :: fields(19)
1767 integer :: i, ib_idx, n_write, row
1770 integer(kind=MPI_OFFSET_KIND) :: disp
1771 integer :: ierr, status(mpi_status_size)
1774 if (.not. ib_force_wrt)
return
1775 if (mod(t_step, max(ib_force_stride, 1)) /= 0)
return
1782 if (t_step == t_step_start)
return
1788 row = t_step/max(ib_force_stride, 1) - t_step_start/max(ib_force_stride, 1) - 1
1791# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1792#if defined(MFC_OpenACC)
1793# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1795# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1796#elif defined(MFC_OpenMP)
1797# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1799# 1320 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1801# 1321 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1810 fields(2:4) = patch_ib(ib_idx)%force(1:3)
1811 fields(5:7) = patch_ib(ib_idx)%torque(1:3)
1812 fields(8:10) = patch_ib(ib_idx)%vel(1:3)
1813 fields(11:13) = patch_ib(ib_idx)%angular_vel(1:3)
1814 fields(14:16) = patch_ib(ib_idx)%angles(1:3)
1815 fields(17) = patch_ib(ib_idx)%x_centroid
1816 fields(18) = patch_ib(ib_idx)%y_centroid
1817 fields(19) = patch_ib(ib_idx)%z_centroid
1819 write (rec,
ib_rec_fmt) patch_ib(ib_idx)%gbl_patch_id, fields
1823 disp = (int(row, mpi_offset_kind)*int(
num_gbl_ibs, mpi_offset_kind) + int(patch_ib(ib_idx)%gbl_patch_id - 1, &
1824 & mpi_offset_kind))*int(
ib_rec_len, mpi_offset_kind)
1836 character(LEN=path_len + 2*name_len) :: file_loc
1837 character(LEN=IB_REC_LEN) :: probe
1842 logical :: file_exist
1850 write (probe,
ib_rec_fmt) 0, [(0._wp, i=1, 19)]
1852# 1370 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1853 call s_prohibit_abort(
"len_trim(probe) /= IB_REC_BODY",
"IB force record width disagrees with IB_REC_BODY; IB_REC_FMT and IB_REC_BODY must be changed together")
1854# 1370 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1856# 1372 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1858 file_loc = trim(case_dir) //
'/D/ib_forces.dat'
1863 inquire (file=trim(file_loc), exist=file_exist)
1864 if (file_exist .and.
proc_rank == 0)
call mpi_file_delete(file_loc, mpi_info_null, ierr)
1873 call s_mpi_barrier()
1874 call mpi_file_open(mpi_comm_world, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_null,
ib_hist_file, ierr)
1875 call s_check_mpi_file_open(ierr, file_loc)
1880 open (newunit=
ib_hist_file, file=trim(file_loc), form=
'unformatted', access=
'direct', recl=
ib_rec_len, status=
'replace')
1905 integer,
intent(in) :: time_step
1908# 1422 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1909#if defined(MFC_OpenACC)
1910# 1422 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1912# 1422 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1913#elif defined(MFC_OpenMP)
1914# 1422 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1916# 1422 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1918# 1423 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1920 if (parallel_io)
then
1933 integer,
intent(in) :: step
1934 character(len=path_len + 2*name_len) :: file_loc
1935 real(wp),
dimension(:,:),
allocatable :: off_loc, off_glb
1936 integer :: gid, i, ib_idx, n_own, file_unit
1948 off_loc(patch_ib(ib_idx)%gbl_patch_id,:) = [patch_ib(ib_idx)%centroid_offset, 1._wp]
1950 call s_mpi_allreduce_vectors_sum(off_loc, off_glb,
num_gbl_ibs, 4)
1952 write (file_loc,
'(A,I0,A)') trim(case_dir) //
'/restart_data/ib_offset_', step,
'.dat'
1953 open (newunit=file_unit, file=trim(file_loc), status=
'replace', action=
'write')
1955 if (off_glb(gid, 4) > 0.5_wp)
write (file_unit,
'(I0,3(1X,ES24.16))') gid, off_glb(gid,1:3)
1959 deallocate (off_loc, off_glb)
1966 integer,
intent(in) :: t_step
1968 real(wp),
dimension(0:m,0:n,0:p),
intent(in) :: accel_mag
1969 real(wp),
dimension(-1:m) :: distx
1970 real(wp),
dimension(-1:n) :: disty
1971 real(wp),
dimension(-1:p) :: distz
1975 real(wp) :: lit_gamma, nbub
1977 real(wp),
dimension(num_vels) :: vel
1983 real(wp),
dimension(num_fluids) :: alpha, alpha_rho
1988 real(wp) :: m00, m10, m01, m20, m02
1989 real(wp) :: varr, varv
1990 real(wp),
dimension(Nb) :: nr, r, nrdot, rdot
1993 real(wp) :: int_pres
1994 real(wp) :: max_pres
1995 real(wp),
dimension(2) :: re
1996 real(wp),
dimension(6) :: tau_e
1997 real(wp) :: g_undamaged, g_damaged
1998 real(wp) :: dyn_p, t
1999 real(wp) :: damage_state
2000 real(wp) :: solid_partial_density
2001 integer :: i,
j,
k,
l, s, d
2002 real(wp) :: nondim_time
2004 real(wp) :: rhoyks(1:num_species)
2008 if (time_stepper == 23)
then
2012 nondim_time = real(t_step + t_step_old, wp)*dt
2014 nondim_time = real(t_step, wp)*dt
2018 do i = 1, num_probes
2029 nr = 0._wp; r = 0._wp
2030 nrdot = 0._wp; rdot = 0._wp
2037 varr = 0._wp; varv = 0._wp
2039 do s = 1, (num_dims*(num_dims + 1))/2
2042 damage_state = 0._wp
2048 distx(s) =
x_cb(s) - probe(i)%x
2049 if (distx(s) < 0._wp) distx(s) = 1000._wp
2051 j = minloc(distx, 1)
2057 do d = 1, num_species
2058 rhoyks(d) =
q_cons_vf(eqn_idx%species%beg + d - 1)%sf(
j - 2,
k,
l)
2063 if (hypoelasticity)
then
2064 call s_convert_to_mixture_variables(
q_cons_vf,
j - 2,
k,
l, rho, gamma, pi_inf, qv, re, g_undamaged, &
2070 vel(s) =
q_cons_vf(eqn_idx%cont%end + s)%sf(
j - 2,
k,
l)/rho
2072 do s = 1, num_fluids
2073 alpha(s) =
q_cons_vf(eqn_idx%adv%beg + s - 1)%sf(
j - 2,
k,
l)
2074 alpha_rho(s) =
q_cons_vf(eqn_idx%cont%beg + s - 1)%sf(
j - 2,
k,
l)
2077 dyn_p = 0.5_wp*rho*dot_product(vel, vel)
2079 if (hypoelasticity)
then
2080 if (cont_damage)
then
2082 solid_partial_density = 0._wp
2083 do s = 1, num_fluids
2085 solid_partial_density = solid_partial_density +
q_cons_vf(eqn_idx%cont%beg + s - 1)%sf(
j - 2, &
2089 damage_state = min(max(
q_cons_vf(eqn_idx%damage)%sf(
j - 2,
k,
l)/max(solid_partial_density, &
2092 g_damaged = g_undamaged*max(1._wp - damage_state, 0._wp)
2095 & dyn_p, pi_inf, gamma, rho, qv, rhoyks(:), pres, t, &
2099 & dyn_p, pi_inf, gamma, rho, qv, rhoyks, pres, t)
2102 if (hypoelasticity)
then
2103 tau_e(1) =
q_cons_vf(eqn_idx%stress%end)%sf(
j - 2,
k,
l)/rho
2106 if (bubbles_euler)
then
2108 if (num_fluids == 3)
then
2121 nr3 = nr3 +
weight(s)*(nr(s)**3._wp)
2124 nbub = sqrt((4._wp*
pi/3._wp)*nr3/alf)
2127 print *,
'In probe, nbub: ', nbub
2141 varr = m20 - m10**2._wp
2142 varv = m02 - m01**2._wp
2145 rdot(:) = nrdot(:)/nbub
2148 ptot = pres - ptilde
2152 call s_compute_speed_of_sound(pres, rho, gamma, pi_inf, alpha, c, alpha_rho)
2153 if (hypoelasticity) c = sqrt(c*c + (4._wp/3._wp)*g_damaged/rho)
2155 accel = accel_mag(
j - 2,
k,
l)
2157 else if (p == 0)
then
2159 do d = 1, num_species
2160 rhoyks(d) =
q_cons_vf(eqn_idx%species%beg + d - 1)%sf(
j - 2,
k - 2,
l)
2167 distx(s) =
x_cb(s) - probe(i)%x
2168 if (distx(s) < 0._wp) distx(s) = 1000._wp
2171 disty(s) =
y_cb(s) - probe(i)%y
2172 if (disty(s) < 0._wp) disty(s) = 1000._wp
2174 j = minloc(distx, 1)
2175 k = minloc(disty, 1)
2181 call s_convert_to_mixture_variables(
q_cons_vf,
j - 2,
k - 2,
l, rho, gamma, pi_inf, qv, re, g_undamaged, &
2184 vel(s) =
q_cons_vf(eqn_idx%cont%end + s)%sf(
j - 2,
k - 2,
l)/rho
2186 do s = 1, num_fluids
2187 alpha(s) =
q_cons_vf(eqn_idx%adv%beg + s - 1)%sf(
j - 2,
k - 2,
l)
2188 alpha_rho(s) =
q_cons_vf(eqn_idx%cont%beg + s - 1)%sf(
j - 2,
k - 2,
l)
2191 dyn_p = 0.5_wp*rho*dot_product(vel, vel)
2193 if (hypoelasticity)
then
2194 if (cont_damage)
then
2196 solid_partial_density = 0._wp
2197 do s = 1, num_fluids
2199 solid_partial_density = solid_partial_density +
q_cons_vf(eqn_idx%cont%beg + s - 1)%sf(
j &
2203 damage_state = min(max(
q_cons_vf(eqn_idx%damage)%sf(
j - 2,
k - 2,
l)/max(solid_partial_density, &
2206 g_damaged = g_undamaged*max(1._wp - damage_state, 0._wp)
2209 &
k - 2,
l), dyn_p, pi_inf, gamma, rho, qv, rhoyks, pres, t, &
2213 &
k - 2,
l), dyn_p, pi_inf, gamma, rho, qv, rhoyks, pres, t)
2216 if (hypoelasticity)
then
2218 tau_e(s) =
q_cons_vf(eqn_idx%stress%beg + s - 1)%sf(
j - 2,
k - 2,
l)/rho
2222 if (bubbles_euler)
then
2234 nr3 = nr3 +
weight(s)*(nr(s)**3._wp)
2237 nbub = sqrt((4._wp*
pi/3._wp)*nr3/alf)
2241 rdot(:) = nrdot(:)/nbub
2244 call s_compute_speed_of_sound(pres, rho, gamma, pi_inf, alpha, c, alpha_rho)
2245 if (hypoelasticity) c = sqrt(c*c + (4._wp/3._wp)*g_damaged/rho)
2253 distx(s) =
x_cb(s) - probe(i)%x
2254 if (distx(s) < 0._wp) distx(s) = 1000._wp
2257 disty(s) =
y_cb(s) - probe(i)%y
2258 if (disty(s) < 0._wp) disty(s) = 1000._wp
2261 distz(s) =
z_cb(s) - probe(i)%z
2262 if (distz(s) < 0._wp) distz(s) = 1000._wp
2264 j = minloc(distx, 1)
2265 k = minloc(disty, 1)
2266 l = minloc(distz, 1)
2273 & g_undamaged, fluid_pp(:)%G)
2275 vel(s) =
q_cons_vf(eqn_idx%cont%end + s)%sf(
j - 2,
k - 2,
l - 2)/rho
2277 do s = 1, num_fluids
2278 alpha(s) =
q_cons_vf(eqn_idx%adv%beg + s - 1)%sf(
j - 2,
k - 2,
l - 2)
2279 alpha_rho(s) =
q_cons_vf(eqn_idx%cont%beg + s - 1)%sf(
j - 2,
k - 2,
l - 2)
2282 dyn_p = 0.5_wp*rho*dot_product(vel, vel)
2285 do d = 1, num_species
2286 rhoyks(d) =
q_cons_vf(eqn_idx%species%beg + d - 1)%sf(
j - 2,
k - 2,
l - 2)
2290 if (hypoelasticity)
then
2291 if (cont_damage)
then
2293 solid_partial_density = 0._wp
2294 do s = 1, num_fluids
2296 solid_partial_density = solid_partial_density +
q_cons_vf(eqn_idx%cont%beg + s &
2297 & - 1)%sf(
j - 2,
k - 2,
l - 2)
2300 damage_state = min(max(
q_cons_vf(eqn_idx%damage)%sf(
j - 2,
k - 2, &
2301 &
l - 2)/max(solid_partial_density,
verysmall), 0._wp), 1._wp)
2303 g_damaged = g_undamaged*max(1._wp - damage_state, 0._wp)
2306 &
q_cons_vf(eqn_idx%alf)%sf(
j - 2,
k - 2,
l - 2), dyn_p, pi_inf, gamma, &
2308 &
l - 2, rho, g_undamaged))
2311 &
q_cons_vf(eqn_idx%alf)%sf(
j - 2,
k - 2,
l - 2), dyn_p, pi_inf, gamma, &
2312 & rho, qv, rhoyks, pres, t)
2315 if (hypoelasticity)
then
2317 tau_e(s) =
q_cons_vf(eqn_idx%stress%beg + s - 1)%sf(
j - 2,
k - 2,
l - 2)/rho
2322 call s_compute_speed_of_sound(pres, rho, gamma, pi_inf, alpha, c, alpha_rho)
2323 if (hypoelasticity) c = sqrt(c*c + (4._wp/3._wp)*g_damaged/rho)
2325 accel = accel_mag(
j - 2,
k - 2,
l - 2)
2331# 1836 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2333# 1837 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2334 call s_mpi_allreduce_sum(tmp, rho)
2335# 1838 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2336# 1836 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2338# 1837 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2339 call s_mpi_allreduce_sum(tmp, pres)
2340# 1838 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2341# 1836 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2343# 1837 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2344 call s_mpi_allreduce_sum(tmp, gamma)
2345# 1838 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2346# 1836 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2348# 1837 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2349 call s_mpi_allreduce_sum(tmp, pi_inf)
2350# 1838 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2351# 1836 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2353# 1837 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2354 call s_mpi_allreduce_sum(tmp, qv)
2355# 1838 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2356# 1836 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2358# 1837 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2359 call s_mpi_allreduce_sum(tmp, c)
2360# 1838 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2361# 1836 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2363# 1837 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2364 call s_mpi_allreduce_sum(tmp, accel)
2365# 1838 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2366# 1839 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2370 call s_mpi_allreduce_sum(tmp, vel(s))
2373 if (bubbles_euler)
then
2374# 1847 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2376# 1848 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2377 call s_mpi_allreduce_sum(tmp, alf)
2378# 1849 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2379# 1847 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2381# 1848 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2382 call s_mpi_allreduce_sum(tmp, alfgr)
2383# 1849 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2384# 1847 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2386# 1848 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2387 call s_mpi_allreduce_sum(tmp, nbub)
2388# 1849 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2389# 1847 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2391# 1848 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2392 call s_mpi_allreduce_sum(tmp, nr(1))
2393# 1849 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2394# 1847 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2396# 1848 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2397 call s_mpi_allreduce_sum(tmp, nrdot(1))
2398# 1849 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2399# 1847 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2401# 1848 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2402 call s_mpi_allreduce_sum(tmp, m00)
2403# 1849 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2404# 1847 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2406# 1848 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2407 call s_mpi_allreduce_sum(tmp, r(1))
2408# 1849 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2409# 1847 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2411# 1848 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2412 call s_mpi_allreduce_sum(tmp, rdot(1))
2413# 1849 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2414# 1847 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2416# 1848 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2417 call s_mpi_allreduce_sum(tmp, ptilde)
2418# 1849 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2419# 1847 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2421# 1848 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2422 call s_mpi_allreduce_sum(tmp, ptot)
2423# 1849 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2424# 1850 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2427# 1853 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2429# 1854 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2430 call s_mpi_allreduce_sum(tmp, varr)
2431# 1855 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2432# 1853 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2434# 1854 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2435 call s_mpi_allreduce_sum(tmp, varv)
2436# 1855 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2437# 1853 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2439# 1854 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2440 call s_mpi_allreduce_sum(tmp, m10)
2441# 1855 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2442# 1853 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2444# 1854 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2445 call s_mpi_allreduce_sum(tmp, m01)
2446# 1855 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2447# 1853 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2449# 1854 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2450 call s_mpi_allreduce_sum(tmp, m20)
2451# 1855 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2452# 1853 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2454# 1854 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2455 call s_mpi_allreduce_sum(tmp, m02)
2456# 1855 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2457# 1856 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2461 if (hypoelasticity)
then
2462 do s = 1, (num_dims*(num_dims + 1))/2
2464 call s_mpi_allreduce_sum(tmp, tau_e(s))
2468 if (cont_damage)
then
2470 call s_mpi_allreduce_sum(tmp, damage_state)
2475 if (bubbles_euler .and. (num_fluids <= 2))
then
2477 write (i + 30,
'(6x,f12.6,14f28.16)') nondim_time, rho, vel(1), pres, alf, r(1), rdot(1), nr(1), &
2478 & nrdot(1), varr, varv, m10, m01, m20, m02
2480 write (i + 30,
'(6x,f12.6,8f24.8)') nondim_time, rho, vel(1), pres, alf, r(1), rdot(1), nr(1), nrdot(1)
2483 else if (bubbles_euler .and. (num_fluids == 3))
then
2485 &
'(6x,f12.6,f24.8,f24.8,f24.8,f24.8,f24.8,' //
'f24.8,f24.8,f24.8,f24.8,f24.8, f24.8)') &
2486 & nondim_time, rho, vel(1), pres, alf, alfgr, nr(1), nrdot(1), r(1), rdot(1), ptilde, ptot
2487 else if (bubbles_euler .and. num_fluids == 4)
then
2489 &
'(6x,f12.6,f24.8,f24.8,f24.8,f24.8,' //
'f24.8,f24.8,f24.8,f24.8,f24.8,f24.8,f24.8,f24.8,f24.8)') &
2491 & 0, 0),
q_cons_vf(4)%sf(
j - 2, 0, 0),
q_cons_vf(5)%sf(
j - 2, 0, 0),
q_cons_vf(6)%sf(
j - 2, 0, 0), &
2493 &
q_cons_vf(10)%sf(
j - 2, 0, 0), nbub, r(1), rdot(1)
2494 else if (hypoelasticity)
then
2495 write (i + 30,
'(6X,F12.6,F24.8,F24.8,F24.8,F24.8)') nondim_time, rho, vel(1), pres, tau_e(1)
2497 write (i + 30,
'(6X,F12.6,F24.8,F24.8,F24.8)') nondim_time, rho, vel(1), pres
2499 else if (p == 0)
then
2500 if (bubbles_euler)
then
2501# 1900 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2502 write (i + 30,
'(6X,10F24.8)') nondim_time, rho, vel(1), vel(2), pres, alf, nr(1), nrdot(1), r(1), &
2504# 1903 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2505 else if (hypoelasticity)
then
2506# 1905 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2507 write (i + 30,
'(6X,F12.6,F24.8,F24.8,F24.8,F24.8,' //
'F24.8,F24.8,F24.8)') nondim_time, rho, &
2508 & vel(1), vel(2), pres, tau_e(1), tau_e(2), tau_e(3)
2509# 1908 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2511# 1910 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2512 write (i + 30,
'(6X,F12.6,F24.8,F24.8,F24.8,F24.8)') nondim_time, rho, vel(1), vel(2), pres
2513# 1912 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2516# 1915 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2517 if (hypoelasticity)
then
2518 write (i + 30,
'(6X,F12.6,16F24.8)') nondim_time, rho, vel(1), vel(2), vel(3), pres, gamma, pi_inf, &
2519 & qv, c, accel, tau_e(1), tau_e(2), tau_e(3), tau_e(4), tau_e(5), tau_e(6)
2522 &
'(6X,F12.6,F24.8,F24.8,F24.8,F24.8,' //
'F24.8,F24.8,F24.8,F24.8,F24.8,' //
'F24.8)') &
2523 & nondim_time, rho, vel(1), vel(2), vel(3), pres, gamma, pi_inf, qv, c, accel
2525# 1924 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2535 real(wp) :: run_time
2537 write (3,
'(A)')
' '
2540 write (3,
'(A,F9.6)')
'ICFL Max: ',
icfl_max
2541 if (surface_tension)
write (3,
'(A,F9.6)')
'CCFL Max: ',
ccfl_max
2542 if (heat_conduction)
write (3,
'(A,F9.6)')
'TCFL Max: ',
tcfl_max
2543 if (viscous)
write (3,
'(A,F9.6)')
'VCFL Max: ',
vcfl_max
2544 if (viscous)
write (3,
'(A,ES16.6)')
'Rc Min: ',
rc_min
2546 call cpu_time(run_time)
2549 write (3,
'(A,I0,A)')
'Run-time: ', int(anint(run_time)),
's'
2550 write (3,
'(A)')
' '
2560 do i = 1, num_probes
2569 integer :: i, m_ds, n_ds, p_ds
2571 if (run_time_info)
then
2573 if (surface_tension)
then
2576 if (heat_conduction)
then
2585 if (down_sample)
then
2586 m_ds = int((m + 1)/3) - 1
2587 n_ds = int((n + 1)/3) - 1
2588 p_ds = int((p + 1)/3) - 1
2592 allocate (
q_cons_temp_ds(i)%sf(-1:m_ds + 1,-1:n_ds + 1,-1:p_ds + 1))
2603 if (down_sample)
then
2616 real(wp),
intent(in) :: v, lo, hi
2617 integer,
intent(in) :: dir
2621 if (.not. first) first = proc_coords(dir) == 0
2622 f_probe_owned = v <= hi .and. (v > lo .or. (first .and. v >= lo))
type(scalar_field), dimension(sys_size), intent(inout) q_cons_vf
Noncharacteristic and processor boundary condition application for ghost cells and buffer regions.
Platform-specific file and directory operations: create, delete, inquire, getcwd, and basename.
impure subroutine s_delete_directory(dir_name)
Recursively delete a directory using a platform-specific system command.
impure subroutine my_inquire(fileloc, dircheck)
Inquire on the existence of a directory or file.
impure subroutine s_create_directory(dir_name)
Create a directory and all its parents if it does not exist.
Compile-time constant parameters: default values, tolerances, and physical constants.
integer, parameter model_eqns_5eq
integer, parameter name_len
Maximum name length.
real(wp), parameter dflt_t_guess
Default guess for temperature (when a previous value is not available).
integer, parameter dflt_int
Default integer value.
integer, parameter eos_mie_gruneisen
real(wp), parameter sgm_eps
Segmentation tolerance.
integer, parameter nnode
Number of QBMM nodes.
integer, parameter precision_single
real(wp), parameter pi
Pi.
real(wp), parameter verysmall
Very small number.
Writes solution data, run-time stability diagnostics (ICFL, VCFL, CCFL, Rc), and probe/center-of-mass...
impure subroutine, public s_open_probe_files
Open flow probe data files for writing.
impure subroutine s_report_icfl_violation(q_prim_vf)
Locate the grid cell responsible for an ICFL violation on this rank and report its state plus the nea...
impure subroutine s_write_centroid_offsets(step)
Write each global patch's centroid_offset to restart_data/ib_offset_<step>.dat, so a restart continue...
real(wp) rc_min
Rc criterion maximum.
real(wp) vcfl_max
VCFL criterion maximum.
real(wp) tcfl_max
TCFL criterion maximum.
impure subroutine, public s_write_probe_files(t_step, q_cons_vf, accel_mag)
Write flow probe data at the current time step.
subroutine s_write_parallel_ib_state(t_step)
Writes the IB state information out to file.
impure subroutine s_open_ib_force_history
Open the shared history file. Done once for the run.
impure subroutine, public s_initialize_data_output_module
Initialize the data output module.
impure subroutine, public s_finalize_data_output_module
Module deallocation and/or disassociation procedures.
impure subroutine, public s_close_ib_force_history
Close the history file. Nothing is buffered, so there is nothing to flush first.
subroutine s_write_serial_ib_state(t_step)
Write IB state data to a per-timestep serial (unformatted) file.
subroutine s_write_serial_ib_data(time_step)
Write immersed boundary marker data to a serial (per-processor) unformatted file.
impure subroutine, public s_close_run_time_information_file
Write footer with stability criteria extrema and run-time to the information file,...
impure subroutine, public s_write_ib_force_history(t_step)
Record every immersed body's force, torque and kinematics for this step.
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.
integer, parameter ib_rec_len
plus the newline
impure subroutine, public s_write_serial_data_files(q_cons_vf, q_t_sf, q_prim_vf, t_step, bc_type, beta)
Write grid and conservative variable data files in serial format.
integer, parameter ib_rec_body
characters the format emits
logical function f_probe_owned(v, lo, hi, dir)
Half-open ownership lo < v <= hi, so a probe on a rank face is sampled once, by the rank holding the ...
character(len= *), parameter ib_rec_fmt
One fixed-width text record per immersed body per recorded step, in D/ib_forces.dat.
impure subroutine, public s_close_probe_files
Closes probe files.
impure subroutine, public s_write_run_time_information(q_prim_vf, t_step)
Write stability criteria extrema to the run-time information file at the given time step.
impure subroutine, public s_open_run_time_information_file
Open the run-time information file and write the stability criteria table header.
integer ib_hist_file
held open for the run; -1 until first write
real(wp) icfl_max
ICFL criterion maximum.
impure subroutine, public s_write_parallel_data_files(q_cons_vf, t_step, bc_type, beta, q_t_sf)
Write grid and conservative variable data files in parallel via MPI I/O.
impure subroutine, public s_write_ib_state_file(time_step)
Writes IB state records to restart_data/ib_state.dat. Called on every rank.
type(scalar_field), dimension(:), allocatable q_cons_temp_ds
subroutine s_write_parallel_ib_data(time_step)
Write immersed boundary marker data in parallel using MPI I/O.
subroutine, public s_write_ib_data_file(time_step)
Dispatch immersed boundary data output to the serial or parallel writer.
real(wp) ccfl_max
CCFL criterion maximum.
Rank-staggered file access delays to prevent I/O contention on parallel file systems.
impure subroutine, public s_delay_file_access(process_rank)
Introduce a rank-dependent busy-wait delay to stagger parallel file access and reduce I/O contention.
Shared derived types for field data, patch geometry, bubble dynamics, and MPI I/O structures.
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
real(wp) mytime
Current simulation time.
real(wp), dimension(:), allocatable fluid_inv_re
per-fluid Newtonian inverse-Re
type(int_bounds_info), dimension(1:3) idwint
real(wp), dimension(:), allocatable, target z_cb
logical any_non_newtonian
.true. if any fluid is non-Newtonian
type(qbmm_idx_info) qbmm_idx
QBMM moment index mappings (allocatable; GPU-managed separately).
integer proc_rank
Rank of the local processor.
type(mpi_io_ib_var), public mpi_io_ib_data
real(wp), dimension(:), allocatable weight
Simpson quadrature weights.
integer, dimension(num_local_ibs_max) local_ib_patch_ids
lookup table of IBs in the local compute domain
integer buff_size
Number of ghost cells for boundary condition storage.
real(wp), dimension(:), allocatable, target y_cc
type(pres_field), dimension(:), allocatable pb_ts
integer n_el_bubs_glb
Number of Lagrangian bubbles (local and global).
type(pres_field), dimension(:), allocatable mv_ts
real(wp), dimension(:), allocatable, target z_cc
integer num_procs
Number of processors.
real(wp), dimension(:), allocatable, target x_cc
real(wp), dimension(:), allocatable, target y_cb
real(wp), dimension(:,:,:), allocatable ptil
Pressure modification.
type(mpi_io_var), public mpi_io_data
real(wp), dimension(:), allocatable hb_mu_max
logical, dimension(:), allocatable is_non_newtonian
per-fluid NN flag
real(wp), dimension(:), allocatable, target x_cb
Basic floating-point utilities: approximate equality, default detection, and coordinate bounds.
logical elemental function, public f_approx_equal(a, b, tol_input)
Check if two floating point numbers of wp are within tolerance.
Utility routines for bubble model setup, coordinate transforms, array sampling, and special functions...
subroutine, public s_downsample_data(q_cons_vf, q_cons_temp, m_ds, n_ds, p_ds, m_glb_ds, n_glb_ds, p_glb_ds)
Downsample conservative variable fields by a factor of 3 in each direction using volume averaging.
elemental subroutine, public s_int_to_str(i, res)
Convert an integer to its trimmed string representation.
Ghost-node immersed boundary method: locates ghost/image points, computes interpolation coefficients,...
type(integer_field), public ib_markers
pure logical function f_needs_centroid_offset(patch)
A moving airfoil or STL (geometries 4, 5, 11, 12) moves its centroid to the centre of mass and keeps ...
logical centroid_offsets_active
some patch is a moving airfoil or STL, which carries a centroid_offset
MPI halo exchange, domain decomposition, and buffer packing/unpacking for the simulation solver.
Simulation helper routines for cell state, CFL calculation, and stability checks.
subroutine, public s_compute_stability_from_dt(vel, c, rho, re_l, alpha, alpha_rho, j, k, l, icfl, vcfl, rc, ccfl, tcfl)
Computes stability criterion for a specified dt.
subroutine, public s_compute_cell_state(q_prim_vf, pres, rho, gamma, pi_inf, re, alpha, alpha_rho, vel, vel_sum, qv, j, k, l)
Computes the mixture coefficients, velocity and pressure of one cell.
Conservative-to-primitive variable conversion, mixture property evaluation, and pressure computation.
real(wp) function, public f_hypoelastic_energy(q_cons_vf, j, k, l, rho, g)
Hypoelastic strain energy at one cell, summed over the stress components.
subroutine, public s_convert_conservative_to_primitive_variables(qk_cons_vf, q_t_sf, qk_prim_vf, ibounds)
Convert conserved variables (rho*alpha, rho*u, E, alpha) to primitives (rho, u, p,...
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.
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...
Derived type annexing an integer scalar field (SF).
Derived type annexing a scalar field (SF).