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# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
21# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
23# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
25# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
27# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
29# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
31# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
33# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
35# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
36# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
37# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
38# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
40# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
42# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
44# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
46# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
48# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
52# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
60# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
62# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
64# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
66# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
67# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
68# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
69# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
70# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
72# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
74# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
76# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
78# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
80# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
82# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
84# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
86# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
88# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
90# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
92# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
94# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
96# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
98# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
100# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
104# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
106# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
108# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
110# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
112# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
119# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
121# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
123# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
125# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
127# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
129# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
131# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
133# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
135# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
144# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
145# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
146# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
147# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
148# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
149# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
150# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
152# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
153# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
154# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
156# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
158# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
160# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
162# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
164# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
166# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
168# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
170# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
172# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
174# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
176# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
178# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
180# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
182# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
184# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
186# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
188# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
190# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
192# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
194# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
196# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
198# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
200# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
202# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
204# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
206# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
208# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
210# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
212# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
214# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
216# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
218# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
220# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
222# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
224# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
226# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
228# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
230# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
233# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
236# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
239# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
242# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
245# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
248# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
251# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
254# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
257# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
260# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
263# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
266# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
269# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
272# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
275# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
278# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
281# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
287# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
289# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
292# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
294# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
299# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
302# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
305# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
308# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
311# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
314# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
316# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
318# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
320# 6 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp" 2
321# 1 "/home/runner/work/MFC/MFC/src/common/include/case.fpp" 1
327# 8 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
330# 12 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
331# 7 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp" 2
357 real(wp),
public,
allocatable,
dimension(:,:) ::
c_mass
359# 33 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
360#if defined(MFC_OpenACC)
361# 33 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
363# 33 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
364#elif defined(MFC_OpenMP)
365# 33 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
367# 33 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
387 type(
scalar_field),
dimension(sys_size),
intent(inout) :: q_prim_vf
388 integer,
intent(in) :: t_step
390 type(
integer_field),
dimension(1:num_dims,-1:1),
intent(in) :: bc_type
392 if (.not. parallel_io)
then
403 character(LEN=name_len),
parameter :: file_name =
'run_time.inf'
404 character(LEN=path_len + name_len) :: file_path
405 character(LEN=8) :: file_date
407 file_path = trim(case_dir) //
'/' // trim(file_name)
409 open (3, file=trim(file_path), form=
'formatted', status=
'replace')
411 write (3,
'(A)')
'Description: Stability information at ' //
'each time-step of the simulation. This'
412 write (3,
'(13X,A)')
'data is composed of the inviscid ' //
'Courant-Friedrichs-Lewy (ICFL)'
413 write (3,
'(13X,A)')
'number, the viscous CFL (VCFL) number, ' //
'the capillary CFL (CCFL)'
414 write (3,
'(13X,A)')
'number and the cell Reynolds (Rc) ' //
'number. Please note that only'
415 write (3,
'(13X,A)')
'those stability conditions pertinent ' //
'to the physics included in'
416 write (3,
'(13X,A)')
'the current computation are displayed.'
418 call date_and_time(date=file_date)
420 write (3,
'(A)')
'Date: ' // file_date(5:6) //
'/' // file_date(7:8) //
'/' // file_date(3:4)
422 write (3,
'(A)')
'';
write (3,
'(A)')
''
424 write (3,
'(13X,A9,13X,A10,13X,A10,13X,A10)', advance=
"no") trim(
'Time-step'), trim(
'dt'), trim(
'Time'), trim(
'ICFL Max')
426 if (surface_tension)
then
427 write (3,
'(13X,A10)', advance=
"no") trim(
'CCFL Max')
431 write (3,
'(13X,A10,13X,A16)', advance=
"no") trim(
'VCFL Max'), trim(
'Rc Min')
434 if (bubbles_lagrange)
then
435 write (3,
'(13X,A10)', advance=
"no") trim(
'N Bubbles')
445 character(len=path_len + 3*name_len) :: file_path
449 write (file_path,
'(A,I0,A)')
'/fluid', i,
'_com.dat'
450 file_path = trim(case_dir) // trim(file_path)
451 open (i + 120, file=trim(file_path), form=
'formatted', position=
'append', status=
'unknown')
453 write (i + 120,
'(A)')
' Non-Dimensional Time ' //
' Total Mass ' //
' x-loc ' //
' Total Volume '
454 else if (p == 0)
then
456 &
'(A)')
' Non-Dimensional Time ' //
' Total Mass ' //
' x-loc ' //
' y-loc ' &
457 & //
' Total Volume '
460 &
'(A)')
' Non-Dimensional Time ' //
' Total Mass ' //
' x-loc ' //
' y-loc ' //
' z-loc ' &
461 & //
' Total Volume '
470 character(LEN=path_len + 3*name_len) :: file_path
472 logical :: file_exist
475 write (file_path,
'(A,I0,A)')
'/D/probe', i,
'_prim.dat'
476 file_path = trim(case_dir) // trim(file_path)
478 inquire (file=trim(file_path), exist=file_exist)
481 open (i + 30, file=trim(file_path), form=
'formatted', status=
'old', position=
'append')
483 open (i + 30, file=trim(file_path), form=
'formatted', status=
'unknown')
487 if (integral_wrt)
then
488 do i = 1, num_integrals
489 write (file_path,
'(A,I0,A)')
'/D/integral', i,
'_prim.dat'
490 file_path = trim(case_dir) // trim(file_path)
492 open (i + 70, file=trim(file_path), form=
'formatted', position=
'append', status=
'unknown')
501 type(
scalar_field),
dimension(sys_size),
intent(in) :: q_prim_vf
502 integer,
intent(in) :: t_step
505# 174 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
506 real(wp),
dimension(num_fluids) :: alpha
507 real(wp),
dimension(num_vels) :: vel
508# 177 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
516 real(wp),
dimension(2) :: re
518 real(wp) :: icfl_max_loc, icfl_max_glb
519 real(wp) :: vcfl_max_loc, vcfl_max_glb
520 real(wp) :: ccfl_max_loc, ccfl_max_glb
521 real(wp) :: rc_min_loc, rc_min_glb
522 real(wp) :: icfl, vcfl, ccfl, rc
528 rc_min_loc = huge(1.0_wp)
531# 198 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
533# 198 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
534#if defined(MFC_OpenACC)
535# 198 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
537# 198 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
539# 198 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
540#elif defined(MFC_OpenMP)
541# 198 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
543# 198 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
545# 198 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
547# 198 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
549# 198 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
551# 198 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
553# 201 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
557 call s_compute_enthalpy(q_prim_vf, pres, rho, gamma, pi_inf, re, h, alpha, vel, vel_sum, qv,
j,
k,
l)
563 do fl = 1, num_fluids
570 re(1) = 1._wp/max(re(1),
sgm_eps)
573 call s_compute_stability_from_dt(vel, c, rho, re,
j,
k,
l, icfl, vcfl, rc, ccfl)
575 icfl_max_loc = max(icfl_max_loc, icfl)
576 vcfl_max_loc = max(vcfl_max_loc, merge(vcfl, 0.0_wp, viscous))
577 ccfl_max_loc = max(ccfl_max_loc, merge(ccfl, 0.0_wp, surface_tension))
578 rc_min_loc = min(rc_min_loc, merge(rc, huge(1.0_wp), viscous))
583# 229 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
584#if defined(MFC_OpenACC)
585# 229 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
587# 229 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
588#elif defined(MFC_OpenMP)
589# 229 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
591# 229 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
593# 229 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
598 call s_mpi_reduce_stability_criteria_extrema(icfl_max_loc, vcfl_max_loc, rc_min_loc,
n_el_bubs_loc, icfl_max_glb, &
599 & vcfl_max_glb, rc_min_glb,
n_el_bubs_glb, ccfl_max_loc, ccfl_max_glb)
601 icfl_max_glb = icfl_max_loc
602 if (viscous) vcfl_max_glb = vcfl_max_loc
603 if (viscous) rc_min_glb = rc_min_loc
604 if (surface_tension) ccfl_max_glb = ccfl_max_loc
610 if (surface_tension)
then
620 write (3,
'(13X,I9,13X,F10.6,13X,F10.6,13X,F10.6)', advance=
"no") t_step, dt,
mytime, icfl_max_glb
622 if (surface_tension)
then
623 write (3,
'(13X,F10.6)', advance=
"no") ccfl_max_glb
627 write (3,
'(13X,F10.6,13X,ES16.6)', advance=
"no") vcfl_max_glb, rc_min_glb
630 if (bubbles_lagrange)
then
637 call s_mpi_abort(
'ICFL is NaN. Exiting.')
638 else if (icfl_max_glb > 1._wp)
then
639 print *,
'icfl', icfl_max_glb
640 call s_mpi_abort(
'ICFL is greater than 1.0. Exiting.')
645 call s_mpi_abort(
'VCFL is NaN. Exiting.')
646 else if (vcfl_max_glb > 1._wp)
then
647 print *,
'vcfl', vcfl_max_glb
648 call s_mpi_abort(
'VCFL is greater than 1.0. Exiting.')
652 if (bubbles_lagrange)
then
654 call s_mpi_abort(
'No Lagrangian bubbles remain in the domain. Exiting.')
668 type(
scalar_field),
dimension(sys_size),
intent(inout) :: q_prim_vf
669 integer,
intent(in) :: t_step
671 type(
integer_field),
dimension(1:num_dims,-1:1),
intent(in) :: bc_type
672 character(LEN=path_len + 2*name_len) :: t_step_dir
673 character(LEN=path_len + 3*name_len) :: file_path
674 logical :: file_exist
675 character(LEN=15) :: fmt
676 integer :: i,
j,
k,
l, r
677 real(wp) :: gamma, lit_gamma, pi_inf, qv
679 write (t_step_dir,
'(A,I0,A,I0)') trim(case_dir) //
'/p_all'
680 write (t_step_dir,
'(a,i0,a,i0)') trim(case_dir) //
'/p_all/p',
proc_rank,
'/', t_step
682 file_path = trim(t_step_dir) //
'/.'
687 file_path = trim(t_step_dir) //
'/x_cb.dat'
689 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
690 write (2)
x_cb(-1:m);
close (2)
693 file_path = trim(t_step_dir) //
'/y_cb.dat'
695 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
696 write (2)
y_cb(-1:n);
close (2)
699 file_path = trim(t_step_dir) //
'/z_cb.dat'
701 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
702 write (2)
z_cb(-1:p);
close (2)
707 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/q_cons_vf', i,
'.dat'
709 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
711 write (2)
q_cons_vf(i)%sf(0:m,0:n,0:p);
close (2)
716 if (bubbles_lagrange)
then
717 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/q_cons_vf', sys_size + 1,
'.dat'
719 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
721 write (2) beta%sf(0:m,0:n,0:p);
close (2)
724 if (qbmm .and. .not. polytropic)
then
727 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/pb', sys_size + (i - 1)*
nnode + r,
'.dat'
729 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
731 write (2)
pb_ts(1)%sf(0:m,0:n,0:p,r, i);
close (2)
737 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/mv', sys_size + (i - 1)*
nnode + r,
'.dat'
739 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
741 write (2)
mv_ts(1)%sf(0:m,0:n,0:p,r, i);
close (2)
762 write (t_step_dir,
'(A,I0,A,I0)') trim(case_dir) //
'/D'
763 file_path = trim(t_step_dir) //
'/.'
765 inquire (file=trim(file_path), exist=file_exist)
769 if ((prim_vars_wrt .or. (n == 0 .and. p == 0)) .and. (.not. igr))
then
773# 407 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
774#if defined(MFC_OpenACC)
775# 407 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
777# 407 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
778#elif defined(MFC_OpenMP)
779# 407 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
781# 407 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
787 q_prim_vf(eqn_idx%bub%beg)%sf = 1._wp
791 if (n == 0 .and. p == 0)
then
794 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/prim.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
796 open (2, file=trim(file_path))
799 if (((i >= eqn_idx%adv%beg) .and. (i <= eqn_idx%adv%end)))
then
802 write (2, fmt)
x_cb(
j), q_prim_vf(i)%sf(
j, 0, 0)
810 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/cons.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
812 open (2, file=trim(file_path))
819 if (qbmm .and. .not. polytropic)
then
822 write (file_path,
'(A,I0,A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/pres.', i,
'.', r,
'.',
proc_rank, &
823 &
'.', t_step,
'.dat'
825 open (2, file=trim(file_path))
834 write (file_path,
'(A,I0,A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/mv.', i,
'.', r,
'.',
proc_rank, &
835 &
'.', t_step,
'.dat'
837 open (2, file=trim(file_path))
853 if ((n > 0) .and. (p == 0))
then
855 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/cons.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
856 open (2, file=trim(file_path))
866 if (
present(beta))
then
867 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/beta.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
868 open (2, file=trim(file_path))
878 if (qbmm .and. .not. polytropic)
then
881 write (file_path,
'(A,I0,A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/pres.', i,
'.', r,
'.',
proc_rank, &
882 &
'.', t_step,
'.dat'
884 open (2, file=trim(file_path))
895 write (file_path,
'(A,I0,A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/mv.', i,
'.', r,
'.',
proc_rank, &
896 &
'.', t_step,
'.dat'
898 open (2, file=trim(file_path))
909 if (prim_vars_wrt .and. (.not. igr))
then
911 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/prim.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
913 open (2, file=trim(file_path))
917 if (((i >= eqn_idx%cont%beg) .and. (i <= eqn_idx%cont%end)) .or. ((i >= eqn_idx%adv%beg) &
918 & .and. (i <= eqn_idx%adv%end)))
then
921 write (2, fmt)
x_cb(
j),
y_cb(
k), q_prim_vf(i)%sf(
j,
k, 0)
939 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/cons.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
940 open (2, file=trim(file_path))
953 if (
present(beta))
then
954 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/beta.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
955 open (2, file=trim(file_path))
968 if (qbmm .and. .not. polytropic)
then
971 write (file_path,
'(A,I0,A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/pres.', i,
'.', r,
'.',
proc_rank, &
972 &
'.', t_step,
'.dat'
974 open (2, file=trim(file_path))
987 write (file_path,
'(A,I0,A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/mv.', i,
'.', r,
'.',
proc_rank, &
988 &
'.', t_step,
'.dat'
990 open (2, file=trim(file_path))
1003 if (prim_vars_wrt .and. (.not. igr))
then
1005 write (file_path,
'(A,I0,A,I2.2,A,I6.6,A)') trim(t_step_dir) //
'/prim.', i,
'.',
proc_rank,
'.', t_step,
'.dat'
1007 open (2, file=trim(file_path))
1012 if (((i >= eqn_idx%cont%beg) .and. (i <= eqn_idx%cont%end)) .or. ((i >= eqn_idx%adv%beg) &
1013 & .and. (i <= eqn_idx%adv%end)) .or. ((i >= eqn_idx%species%beg) &
1014 & .and. (i <= eqn_idx%species%end)))
then
1035 integer,
intent(in) :: t_step
1037 type(
integer_field),
dimension(1:num_dims,-1:1),
intent(in) :: bc_type
1041 integer :: ifile, ierr, data_size
1042 integer,
dimension(MPI_STATUS_SIZE) :: status
1043 integer(kind=MPI_OFFSET_kind) :: disp
1044 integer(kind=MPI_OFFSET_kind) :: m_mok, n_mok, p_mok
1045 integer(kind=MPI_OFFSET_kind) :: wp_mok, var_mok, str_mok
1046 integer(kind=MPI_OFFSET_kind) :: nvars_mok
1047 integer(kind=MPI_OFFSET_kind) :: mok
1048 character(LEN=path_len + 2*name_len) :: file_loc
1049 logical :: file_exist, dir_check
1050 character(len=10) :: t_step_string
1054 integer :: m_ds, n_ds, p_ds
1055 integer :: m_glb_ds, n_glb_ds, p_glb_ds
1056 integer :: m_glb_save, n_glb_save, p_glb_save
1058 if (down_sample)
then
1062 if (
present(beta))
then
1063 alt_sys = sys_size + 1
1068 if (file_per_process)
then
1071 if (down_sample)
then
1082 file_loc = trim(case_dir) //
'/restart_data/lustre_' // trim(t_step_string)
1084 if (dir_check .neqv. .true.)
then
1089 call s_mpi_barrier()
1094 write (file_loc,
'(I0,A,i7.7,A)') t_step,
'_',
proc_rank,
'.dat'
1095 file_loc = trim(case_dir) //
'/restart_data/lustre_' // trim(t_step_string) // trim(mpiiofs) // trim(file_loc)
1096 inquire (file=trim(file_loc), exist=file_exist)
1097 if (file_exist .and.
proc_rank == 0)
then
1098 call mpi_file_delete(file_loc, mpi_info_int, ierr)
1100 call mpi_file_open(mpi_comm_self, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
1102 if (down_sample)
then
1103 data_size = (m_ds + 3)*(n_ds + 3)*(p_ds + 3)
1104 m_glb_save = m_glb_ds + 1
1105 n_glb_save = n_glb_ds + 1
1106 p_glb_save = p_glb_ds + 1
1108 data_size = (m + 1)*(n + 1)*(p + 1)
1109 m_glb_save =
m_glb + 1
1110 n_glb_save =
n_glb + 1
1111 p_glb_save =
p_glb + 1
1114 m_mok = int(m_glb_save + 1, mpi_offset_kind)
1115 n_mok = int(n_glb_save + 1, mpi_offset_kind)
1116 p_mok = int(p_glb_save + 1, mpi_offset_kind)
1117 wp_mok = int(storage_size(0._stp)/8, mpi_offset_kind)
1118 mok = int(1._wp, mpi_offset_kind)
1119 str_mok = int(
name_len, mpi_offset_kind)
1120 nvars_mok = int(sys_size, mpi_offset_kind)
1122 if (bubbles_euler)
then
1124 var_mok = int(i, mpi_offset_kind)
1126 call mpi_file_write_all(ifile,
mpi_io_data%var(i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1128 if (qbmm .and. .not. polytropic)
then
1129 do i = sys_size + 1, sys_size + 2*
nb*
nnode
1130 var_mok = int(i, mpi_offset_kind)
1132 call mpi_file_write_all(ifile,
mpi_io_data%var(i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1136 if (down_sample)
then
1138 var_mok = int(i, mpi_offset_kind)
1140 call mpi_file_write_all(ifile,
q_cons_temp_ds(i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1144 var_mok = int(i, mpi_offset_kind)
1146 call mpi_file_write_all(ifile,
mpi_io_data%var(i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1151 call mpi_file_close(ifile, ierr)
1159 else if (
present(beta))
then
1160 call s_initialize_mpi_data(
q_cons_vf, beta=beta)
1165 write (file_loc,
'(I0,A)') t_step,
'.dat'
1166 file_loc = trim(case_dir) //
'/restart_data' // trim(mpiiofs) // trim(file_loc)
1167 inquire (file=trim(file_loc), exist=file_exist)
1168 if (file_exist .and.
proc_rank == 0)
then
1169 call mpi_file_delete(file_loc, mpi_info_int, ierr)
1171 call mpi_file_open(mpi_comm_world, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
1173 data_size = (m + 1)*(n + 1)*(p + 1)
1175 m_mok = int(
m_glb + 1, mpi_offset_kind)
1176 n_mok = int(
n_glb + 1, mpi_offset_kind)
1177 p_mok = int(
p_glb + 1, mpi_offset_kind)
1178 wp_mok = int(storage_size(0._stp)/8, mpi_offset_kind)
1179 mok = int(1._wp, mpi_offset_kind)
1180 str_mok = int(
name_len, mpi_offset_kind)
1181 nvars_mok = int(alt_sys, mpi_offset_kind)
1183 if (bubbles_euler)
then
1185 var_mok = int(i, mpi_offset_kind)
1187 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
1189 call mpi_file_set_view(ifile, disp, mpi_p,
mpi_io_data%view(i),
'native', mpi_info_int, ierr)
1190 call mpi_file_write_all(ifile,
mpi_io_data%var(i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1192 if (qbmm .and. .not. polytropic)
then
1193 do i = sys_size + 1, sys_size + 2*
nb*
nnode
1194 var_mok = int(i, mpi_offset_kind)
1196 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
1198 call mpi_file_set_view(ifile, disp, mpi_p,
mpi_io_data%view(i),
'native', mpi_info_int, ierr)
1199 call mpi_file_write_all(ifile,
mpi_io_data%var(i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1204 var_mok = int(i, mpi_offset_kind)
1206 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
1208 call mpi_file_set_view(ifile, disp, mpi_p,
mpi_io_data%view(i),
'native', mpi_info_int, ierr)
1209 call mpi_file_write_all(ifile,
mpi_io_data%var(i)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1213 if (
present(beta))
then
1214 var_mok = int(sys_size + 1, mpi_offset_kind)
1216 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1)
1218 call mpi_file_set_view(ifile, disp, mpi_p,
mpi_io_data%view(sys_size + 1),
'native', mpi_info_int, ierr)
1219 call mpi_file_write_all(ifile,
mpi_io_data%var(sys_size + 1)%sf, data_size*mpi_io_type, mpi_io_p, status, ierr)
1222 call mpi_file_close(ifile, ierr)
1235 integer,
intent(in) :: time_step
1236 character(LEN=path_len + 2*name_len) :: file_path
1237 character(LEN=path_len + 2*name_len) :: t_step_dir
1239 write (t_step_dir,
'(A,I0,A,I0)') trim(case_dir) //
'/p_all'
1240 write (t_step_dir,
'(a,i0,a,i0)') trim(case_dir) //
'/p_all/p',
proc_rank,
'/', time_step
1241 write (file_path,
'(A,I0,A)') trim(t_step_dir) //
'/ib_data.dat'
1243 open (2, file=trim(file_path), form=
'unformatted', status=
'new')
1246# 870 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1247#if defined(MFC_OpenACC)
1248# 870 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1250# 870 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1251#elif defined(MFC_OpenMP)
1252# 870 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1254# 870 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1256 write (2)
ib_markers%sf(0:m,0:n,0:p);
close (2)
1263 integer,
intent(in) :: time_step
1266 character(LEN=path_len + 2*name_len) :: file_loc
1267 integer(kind=MPI_OFFSET_kind) :: disp
1268 integer(kind=MPI_OFFSET_kind) :: m_MOK, n_MOK, p_MOK
1269 integer(kind=MPI_OFFSET_kind) :: WP_MOK, var_MOK, MOK
1270 integer :: ifile, ierr, data_size
1271 integer,
dimension(MPI_STATUS_SIZE) :: status
1274# 888 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1275#if defined(MFC_OpenACC)
1276# 888 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1278# 888 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1279#elif defined(MFC_OpenMP)
1280# 888 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1282# 888 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1285 data_size = (m + 1)*(n + 1)*(p + 1)
1286 m_mok = int(
m_glb + 1, mpi_offset_kind)
1287 n_mok = int(
n_glb + 1, mpi_offset_kind)
1288 p_mok = int(
p_glb + 1, mpi_offset_kind)
1289 wp_mok = int(storage_size(0._stp)/8, mpi_offset_kind)
1290 mok = int(1._wp, mpi_offset_kind)
1292 write (file_loc,
'(A)')
'ib.dat'
1293 file_loc = trim(case_dir) //
'/restart_data' // trim(mpiiofs) // trim(file_loc)
1294 call mpi_file_open(mpi_comm_world, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
1296 var_mok = int(sys_size + 1, mpi_offset_kind)
1297 disp = m_mok*max(mok, n_mok)*max(mok, p_mok)*wp_mok*(var_mok - 1 + int(time_step/t_step_save))
1298 if (time_step == 0) disp = 0
1300 call mpi_file_set_view(ifile, disp, mpi_integer,
mpi_io_ib_data%view,
'native', mpi_info_int, ierr)
1301 call mpi_file_write_all(ifile,
mpi_io_ib_data%var%sf, data_size, mpi_integer, status, ierr)
1302 call mpi_file_close(ifile, ierr)
1310 integer,
intent(in) :: time_step
1313# 917 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1314#if defined(MFC_OpenACC)
1315# 917 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1317# 917 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1318#elif defined(MFC_OpenMP)
1319# 917 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1321# 917 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1324 if (parallel_io)
then
1335 integer,
intent(in) :: t_step
1338 character(LEN=path_len + 2*name_len) :: file_loc
1339 integer(kind=MPI_OFFSET_KIND) :: disp
1340 integer(kind=MPI_OFFSET_KIND) :: WP_MOK
1341 integer :: ifile, ierr
1342 integer,
dimension(MPI_STATUS_SIZE) :: status
1343 logical :: file_exist, dir_check
1344 integer :: i, ib_idx
1345 integer,
parameter :: NFIELDS_PER_IB = 20
1346 real(wp) :: ib_buf(NFIELDS_PER_IB)
1347 integer :: file_unit
1348 character(len=10) :: t_step_string
1351 integer :: ib_start, ib_end, nibs_per_rank, remainder
1353 wp_mok = int(storage_size(0._wp)/8, mpi_offset_kind)
1355 if (file_per_process)
then
1359 file_loc = trim(case_dir) //
'/restart_data/lustre_' // trim(t_step_string)
1362 call s_mpi_barrier()
1365 write (file_loc,
'(A,I0,A,i7.7,A)')
'ib_state_', t_step,
'_',
proc_rank,
'.dat'
1366 file_loc = trim(case_dir) //
'/restart_data/lustre_' // trim(t_step_string) //
'/' // trim(file_loc)
1368 inquire (file=trim(file_loc), exist=file_exist)
1369 if (file_exist)
then
1370 open (newunit=file_unit, file=trim(file_loc), form=
'unformatted', access=
'stream', status=
'replace')
1372 open (newunit=file_unit, file=trim(file_loc), form=
'unformatted', access=
'stream', status=
'new')
1379 ib_buf(2:4) = patch_ib(ib_idx)%force(1:3)
1380 ib_buf(5:7) = patch_ib(ib_idx)%torque(1:3)
1381 ib_buf(8:10) = patch_ib(ib_idx)%vel(1:3)
1382 ib_buf(11:13) = patch_ib(ib_idx)%angular_vel(1:3)
1383 ib_buf(14:16) = patch_ib(ib_idx)%angles(1:3)
1384 ib_buf(17) = patch_ib(ib_idx)%x_centroid
1385 ib_buf(18) = patch_ib(ib_idx)%y_centroid
1386 ib_buf(19) = patch_ib(ib_idx)%z_centroid
1387 ib_buf(20) = patch_ib(ib_idx)%radius
1389 write (file_unit) patch_ib(ib_idx)%gbl_patch_id
1390 write (file_unit) ib_buf
1398 call s_mpi_barrier()
1400 write (file_loc,
'(A,I0,A)')
'/restart_data/ib_state_', t_step,
'.dat'
1401 file_loc = trim(case_dir) // trim(file_loc)
1403 inquire (file=trim(file_loc), exist=file_exist)
1404 if (file_exist .and.
proc_rank == 0)
then
1405 call mpi_file_delete(file_loc, mpi_info_int, ierr)
1407 call s_mpi_barrier()
1409 call mpi_file_open(mpi_comm_world, file_loc, ior(mpi_mode_wronly, mpi_mode_create), mpi_info_int, ifile, ierr)
1414 ib_buf(2:4) = patch_ib(ib_idx)%force(1:3)
1415 ib_buf(5:7) = patch_ib(ib_idx)%torque(1:3)
1416 ib_buf(8:10) = patch_ib(ib_idx)%vel(1:3)
1417 ib_buf(11:13) = patch_ib(ib_idx)%angular_vel(1:3)
1418 ib_buf(14:16) = patch_ib(ib_idx)%angles(1:3)
1419 ib_buf(17) = patch_ib(ib_idx)%x_centroid
1420 ib_buf(18) = patch_ib(ib_idx)%y_centroid
1421 ib_buf(19) = patch_ib(ib_idx)%z_centroid
1422 ib_buf(20) = patch_ib(ib_idx)%radius
1425 disp = int(patch_ib(ib_idx)%gbl_patch_id - 1, mpi_offset_kind)*int(nfields_per_ib, mpi_offset_kind)*wp_mok
1427 call mpi_file_write_at(ifile, disp, ib_buf, nfields_per_ib, mpi_p, status, ierr)
1430 call mpi_file_close(ifile, ierr)
1439 integer,
intent(in) :: t_step
1440 character(LEN=path_len + 2*name_len) :: file_loc
1441 integer :: i, ios, file_unit
1442 integer,
parameter :: NFIELDS_PER_IB = 20
1443 real(wp) :: ib_buf(NFIELDS_PER_IB)
1447 write (file_loc,
'(A,I0,A)')
'/restart_data/ib_state_', t_step,
'.dat'
1448 file_loc = trim(case_dir) // trim(file_loc)
1450 open (newunit=file_unit, file=trim(file_loc), form=
'unformatted', access=
'stream', status=
'replace', iostat=ios)
1451 if (ios /= 0)
call s_mpi_abort(
'Cannot open IB state output file: ' // trim(file_loc))
1455 ib_buf(2:4) = patch_ib(i)%force(1:3)
1456 ib_buf(5:7) = patch_ib(i)%torque(1:3)
1457 ib_buf(8:10) = patch_ib(i)%vel(1:3)
1458 ib_buf(11:13) = patch_ib(i)%angular_vel(1:3)
1459 ib_buf(14:16) = patch_ib(i)%angles(1:3)
1460 ib_buf(17) = patch_ib(i)%x_centroid
1461 ib_buf(18) = patch_ib(i)%y_centroid
1462 ib_buf(19) = patch_ib(i)%z_centroid
1463 ib_buf(20) = patch_ib(i)%radius
1465 write (file_unit) ib_buf
1475 integer,
intent(in) :: time_step
1478# 1072 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1479#if defined(MFC_OpenACC)
1480# 1072 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1482# 1072 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1483#elif defined(MFC_OpenMP)
1484# 1072 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1486# 1072 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1489 if (parallel_io)
then
1500 integer,
intent(in) :: t_step
1501 real(wp),
dimension(num_fluids, 5),
intent(in) :: c_mass_in
1503 real(wp) :: nondim_time
1506 nondim_time = real(t_step + t_step_old, wp)*dt
1508 nondim_time = real(t_step, wp)*dt
1513 do i = 1, num_fluids
1514 write (i + 120,
'(6X,4F24.12)') nondim_time, c_mass_in(i, 1), c_mass_in(i, 2), c_mass_in(i, 5)
1516 else if (p == 0)
then
1517 do i = 1, num_fluids
1518 write (i + 120,
'(6X,5F24.12)') nondim_time, c_mass_in(i, 1), c_mass_in(i, 2), c_mass_in(i, 3), c_mass_in(i, 5)
1521 do i = 1, num_fluids
1522 write (i + 120,
'(6X,6F24.12)') nondim_time, c_mass_in(i, 1), c_mass_in(i, 2), c_mass_in(i, 3), c_mass_in(i, &
1523 & 4), c_mass_in(i, 5)
1533 integer,
intent(in) :: t_step
1535 real(wp),
dimension(0:m,0:n,0:p),
intent(in) :: accel_mag
1536 real(wp),
dimension(-1:m) :: distx
1537 real(wp),
dimension(-1:n) :: disty
1538 real(wp),
dimension(-1:p) :: distz
1542 real(wp) :: lit_gamma, nbub
1544 real(wp),
dimension(num_vels) :: vel
1550 real(wp),
dimension(num_fluids) :: alpha
1555 real(wp) :: m00, m10, m01, m20, m02
1556 real(wp) :: varr, varv
1557 real(wp),
dimension(Nb) :: nr, r, nrdot, rdot
1560 real(wp) :: int_pres
1561 real(wp) :: max_pres
1562 real(wp),
dimension(2) :: re
1563 real(wp),
dimension(6) :: tau_e
1565 real(wp) :: dyn_p, t
1566 real(wp) :: damage_state
1567 integer :: i,
j,
k,
l, s, d
1568 real(wp) :: nondim_time
1571 real(wp) :: rad, thickness
1573 real(wp) :: rhoyks(1:num_species)
1577 if (time_stepper == 23)
then
1581 nondim_time = real(t_step + t_step_old, wp)*dt
1583 nondim_time = real(t_step, wp)*dt
1587 do i = 1, num_probes
1598 nr = 0._wp; r = 0._wp
1599 nrdot = 0._wp; rdot = 0._wp
1606 varr = 0._wp; varv = 0._wp
1608 do s = 1, (num_dims*(num_dims + 1))/2
1611 damage_state = 0._wp
1614 if ((probe(i)%x >=
x_cb(-1)) .and. (probe(i)%x <=
x_cb(m)))
then
1616 distx(s) =
x_cb(s) - probe(i)%x
1617 if (distx(s) < 0._wp) distx(s) = 1000._wp
1619 j = minloc(distx, 1)
1625 do d = 1, num_species
1626 rhoyks(d) =
q_cons_vf(eqn_idx%species%beg + d - 1)%sf(
j - 2,
k,
l)
1631 if (elasticity)
then
1632 call s_convert_to_mixture_variables(
q_cons_vf,
j - 2,
k,
l, rho, gamma, pi_inf, qv, re, g_local, &
1638 vel(s) =
q_cons_vf(eqn_idx%cont%end + s)%sf(
j - 2,
k,
l)/rho
1641 dyn_p = 0.5_wp*rho*dot_product(vel, vel)
1643 if (elasticity)
then
1644 if (cont_damage)
then
1645 damage_state =
q_cons_vf(eqn_idx%damage)%sf(
j - 2,
k,
l)
1646 g_local = g_local*max((1._wp - damage_state), 0._wp)
1650 & pi_inf, gamma, rho, qv, rhoyks(:), pres, t, &
1655 & dyn_p, pi_inf, gamma, rho, qv, rhoyks, pres, t)
1660 else if (elasticity)
then
1661 tau_e(1) =
q_cons_vf(eqn_idx%stress%end)%sf(
j - 2,
k,
l)/rho
1664 if (bubbles_euler)
then
1666 if (num_fluids == 3)
then
1679 nr3 = nr3 +
weight(s)*(nr(s)**3._wp)
1682 nbub = sqrt((4._wp*
pi/3._wp)*nr3/alf)
1685 print *,
'In probe, nbub: ', nbub
1699 varr = m20 - m10**2._wp
1700 varv = m02 - m01**2._wp
1703 rdot(:) = nrdot(:)/nbub
1706 ptot = pres - ptilde
1713 accel = accel_mag(
j - 2,
k,
l)
1715 else if (p == 0)
then
1717 do d = 1, num_species
1718 rhoyks(d) =
q_cons_vf(eqn_idx%species%beg + d - 1)%sf(
j - 2,
k - 2,
l)
1722 if ((probe(i)%x >=
x_cb(-1)) .and. (probe(i)%x <=
x_cb(m)))
then
1723 if ((probe(i)%y >=
y_cb(-1)) .and. (probe(i)%y <=
y_cb(n)))
then
1725 distx(s) =
x_cb(s) - probe(i)%x
1726 if (distx(s) < 0._wp) distx(s) = 1000._wp
1729 disty(s) =
y_cb(s) - probe(i)%y
1730 if (disty(s) < 0._wp) disty(s) = 1000._wp
1732 j = minloc(distx, 1)
1733 k = minloc(disty, 1)
1739 call s_convert_to_mixture_variables(
q_cons_vf,
j - 2,
k - 2,
l, rho, gamma, pi_inf, qv, re, g_local, &
1742 vel(s) =
q_cons_vf(eqn_idx%cont%end + s)%sf(
j - 2,
k - 2,
l)/rho
1745 dyn_p = 0.5_wp*rho*dot_product(vel, vel)
1747 if (elasticity)
then
1748 if (cont_damage)
then
1749 damage_state =
q_cons_vf(eqn_idx%damage)%sf(
j - 2,
k - 2,
l)
1750 g_local = g_local*max((1._wp - damage_state), 0._wp)
1754 & dyn_p, pi_inf, gamma, rho, qv, rhoyks, pres, t, &
1756 &
q_cons_vf(eqn_idx%mom%beg)%sf(
j - 2,
k - 2,
l), g_local)
1759 &
k - 2,
l), dyn_p, pi_inf, gamma, rho, qv, rhoyks, pres, t)
1764 else if (elasticity)
then
1770 if (bubbles_euler)
then
1782 nr3 = nr3 +
weight(s)*(nr(s)**3._wp)
1785 nbub = sqrt((4._wp*
pi/3._wp)*nr3/alf)
1789 rdot(:) = nrdot(:)/nbub
1793 & 0._wp, 0._wp, c, qv)
1797 if ((probe(i)%x >=
x_cb(-1)) .and. (probe(i)%x <=
x_cb(m)))
then
1798 if ((probe(i)%y >=
y_cb(-1)) .and. (probe(i)%y <=
y_cb(n)))
then
1799 if ((probe(i)%z >=
z_cb(-1)) .and. (probe(i)%z <=
z_cb(p)))
then
1801 distx(s) =
x_cb(s) - probe(i)%x
1802 if (distx(s) < 0._wp) distx(s) = 1000._wp
1805 disty(s) =
y_cb(s) - probe(i)%y
1806 if (disty(s) < 0._wp) disty(s) = 1000._wp
1809 distz(s) =
z_cb(s) - probe(i)%z
1810 if (distz(s) < 0._wp) distz(s) = 1000._wp
1812 j = minloc(distx, 1)
1813 k = minloc(disty, 1)
1814 l = minloc(distz, 1)
1821 & g_local, fluid_pp(:)%G)
1823 vel(s) =
q_cons_vf(eqn_idx%cont%end + s)%sf(
j - 2,
k - 2,
l - 2)/rho
1826 dyn_p = 0.5_wp*rho*dot_product(vel, vel)
1829 do d = 1, num_species
1830 rhoyks(d) =
q_cons_vf(eqn_idx%species%beg + d - 1)%sf(
j - 2,
k - 2,
l - 2)
1834 if (elasticity)
then
1835 if (cont_damage)
then
1836 damage_state =
q_cons_vf(eqn_idx%damage)%sf(
j - 2,
k - 2,
l - 2)
1837 g_local = g_local*max((1._wp - damage_state), 0._wp)
1841 &
k - 2,
l - 2), dyn_p, pi_inf, gamma, rho, qv, rhoyks, pres, t, &
1842 &
q_cons_vf(eqn_idx%stress%beg)%sf(
j - 2,
k - 2,
l - 2), &
1843 &
q_cons_vf(eqn_idx%mom%beg)%sf(
j - 2,
k - 2,
l - 2), g_local)
1846 &
q_cons_vf(eqn_idx%alf)%sf(
j - 2,
k - 2,
l - 2), dyn_p, pi_inf, gamma, &
1847 & rho, qv, rhoyks, pres, t)
1852 & 0._wp, 0._wp, c, qv)
1854 accel = accel_mag(
j - 2,
k - 2,
l - 2)
1860# 1446 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1862 call s_mpi_allreduce_sum(tmp, rho)
1863# 1446 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1865 call s_mpi_allreduce_sum(tmp, pres)
1866# 1446 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1868 call s_mpi_allreduce_sum(tmp, gamma)
1869# 1446 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1871 call s_mpi_allreduce_sum(tmp, pi_inf)
1872# 1446 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1874 call s_mpi_allreduce_sum(tmp, qv)
1875# 1446 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1877 call s_mpi_allreduce_sum(tmp, c)
1878# 1446 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1880 call s_mpi_allreduce_sum(tmp, accel)
1881# 1449 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1885 call s_mpi_allreduce_sum(tmp, vel(s))
1888 if (bubbles_euler)
then
1889# 1457 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1891 call s_mpi_allreduce_sum(tmp, alf)
1892# 1457 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1894 call s_mpi_allreduce_sum(tmp, alfgr)
1895# 1457 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1897 call s_mpi_allreduce_sum(tmp, nbub)
1898# 1457 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1900 call s_mpi_allreduce_sum(tmp, nr(1))
1901# 1457 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1903 call s_mpi_allreduce_sum(tmp, nrdot(1))
1904# 1457 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1906 call s_mpi_allreduce_sum(tmp, m00)
1907# 1457 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1909 call s_mpi_allreduce_sum(tmp, r(1))
1910# 1457 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1912 call s_mpi_allreduce_sum(tmp, rdot(1))
1913# 1457 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1915 call s_mpi_allreduce_sum(tmp, ptilde)
1916# 1457 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1918 call s_mpi_allreduce_sum(tmp, ptot)
1919# 1460 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1922# 1463 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1924 call s_mpi_allreduce_sum(tmp, varr)
1925# 1463 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1927 call s_mpi_allreduce_sum(tmp, varv)
1928# 1463 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1930 call s_mpi_allreduce_sum(tmp, m10)
1931# 1463 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1933 call s_mpi_allreduce_sum(tmp, m01)
1934# 1463 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1936 call s_mpi_allreduce_sum(tmp, m20)
1937# 1463 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1939 call s_mpi_allreduce_sum(tmp, m02)
1940# 1466 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1944 if (elasticity)
then
1945 do s = 1, (num_dims*(num_dims + 1))/2
1947 call s_mpi_allreduce_sum(tmp, tau_e(s))
1951 if (cont_damage)
then
1953 call s_mpi_allreduce_sum(tmp, damage_state)
1958 if (bubbles_euler .and. (num_fluids <= 2))
then
1960 write (i + 30,
'(6x,f12.6,14f28.16)') nondim_time, rho, vel(1), pres, alf, r(1), rdot(1), nr(1), &
1961 & nrdot(1), varr, varv, m10, m01, m20, m02
1963 write (i + 30,
'(6x,f12.6,8f24.8)') nondim_time, rho, vel(1), pres, alf, r(1), rdot(1), nr(1), nrdot(1)
1966 else if (bubbles_euler .and. (num_fluids == 3))
then
1968 &
'(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)') &
1969 & nondim_time, rho, vel(1), pres, alf, alfgr, nr(1), nrdot(1), r(1), rdot(1), ptilde, ptot
1970 else if (bubbles_euler .and. num_fluids == 4)
then
1972 &
'(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)') &
1974 & 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), &
1976 &
q_cons_vf(10)%sf(
j - 2, 0, 0), nbub, r(1), rdot(1)
1978 write (i + 30,
'(6X,F12.6,F24.8,F24.8,F24.8)') nondim_time, rho, vel(1), pres
1980 else if (p == 0)
then
1981 if (bubbles_euler)
then
1982# 1508 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1983 write (i + 30,
'(6X,10F24.8)') nondim_time, rho, vel(1), vel(2), pres, alf, nr(1), nrdot(1), r(1), &
1985# 1511 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1986 else if (elasticity)
then
1987# 1513 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1988 write (i + 30,
'(6X,F12.6,F24.8,F24.8,F24.8,F24.8,' //
'F24.8,F24.8,F24.8)') nondim_time, rho, &
1989 & vel(1), vel(2), pres, tau_e(1), tau_e(2), tau_e(3)
1990# 1516 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1992 write (i + 30,
'(6X,F12.6,F24.8,F24.8,F24.8)') nondim_time, rho, vel(1), pres
1993 print *,
'time =', nondim_time,
'rho =', rho,
'pres =', pres
1996# 1522 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
1998 &
'(6X,F12.6,F24.8,F24.8,F24.8,F24.8,' //
'F24.8,F24.8,F24.8,F24.8,F24.8,' //
'F24.8)') &
1999 & nondim_time, rho, vel(1), vel(2), vel(3), pres, gamma, pi_inf, qv, c, accel
2000# 1526 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2005 if (integral_wrt .and. bubbles_euler)
then
2007 do i = 1, num_integrals
2023 if ((integral(i)%xmin <=
x_cb(
j)) .and. (integral(i)%xmax >=
x_cb(
j)))
then
2027 vel(s) =
q_cons_vf(eqn_idx%cont%end + s)%sf(
j,
k,
l)/rho
2031 &
l)**2._wp)/rho)/(1._wp -
q_cons_vf(eqn_idx%alf)%sf(
j,
k,
l)) - pi_inf - qv)/gamma
2032 int_pres = int_pres + (pres - 1._wp)**2._wp
2035 int_pres = sqrt(int_pres/(1._wp*npts))
2039 call s_mpi_allreduce_sum(tmp, int_pres)
2043 if (bubbles_euler .and. (num_fluids <= 2))
then
2044 write (i + 70,
'(6x,f12.6,f24.8)') nondim_time, int_pres
2048 else if (p == 0)
then
2049 if (num_integrals /= 3)
then
2050 call s_mpi_abort(
'Incorrect number of integrals')
2053 rad = integral(1)%xmax
2054 thickness = integral(1)%xmin
2056 do i = 1, num_integrals
2066 if (sqrt(
x_cb(
j)**2._wp +
y_cb(
k)**2._wp) < (rad - 0.5_wp*thickness)) trigger = .true.
2067 else if (i == 2)
then
2069 if (sqrt(
x_cb(
j)**2._wp +
y_cb(
k)**2._wp) > (rad - 0.5_wp*thickness) .and. sqrt(
x_cb(
j)**2._wp &
2070 & +
y_cb(
k)**2._wp) < (rad + 0.5_wp*thickness)) trigger = .true.
2071 else if (i == 3)
then
2073 if (sqrt(
x_cb(
j)**2._wp +
y_cb(
k)**2._wp) > (rad + 0.5_wp*thickness)) trigger = .true.
2090 vel(s) =
q_cons_vf(eqn_idx%cont%end + s)%sf(
j,
k,
l)/rho
2094 &
l)**2._wp)/rho)/(1._wp -
q_cons_vf(eqn_idx%alf)%sf(
j,
k,
l)) - pi_inf - qv)/gamma
2095 int_pres = int_pres + abs(pres - 1._wp)
2096 max_pres = max(max_pres, abs(pres - 1._wp))
2102 int_pres = int_pres/(1._wp*npts)
2109 call s_mpi_allreduce_sum(tmp, int_pres)
2112 call s_mpi_allreduce_max(tmp, max_pres)
2116 if (bubbles_euler .and. (num_fluids <= 2))
then
2117 write (i + 70,
'(6x,f12.6,f24.8,f24.8)') nondim_time, int_pres, max_pres
2129 real(wp) :: run_time
2131 write (3,
'(A)')
' '
2134 write (3,
'(A,F9.6)')
'ICFL Max: ',
icfl_max
2135 if (surface_tension)
write (3,
'(A,F9.6)')
'CCFL Max: ',
ccfl_max
2136 if (viscous)
write (3,
'(A,F9.6)')
'VCFL Max: ',
vcfl_max
2137 if (viscous)
write (3,
'(A,ES16.6)')
'Rc Min: ',
rc_min
2139 call cpu_time(run_time)
2142 write (3,
'(A,I0,A)')
'Run-time: ', int(anint(run_time)),
's'
2143 write (3,
'(A)')
' '
2153 do i = 1, num_fluids
2164 do i = 1, num_probes
2173 integer :: i, m_ds, n_ds, p_ds
2175 if (run_time_info)
then
2177 if (surface_tension)
then
2188# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2190# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2191 use iso_fortran_env,
only: output_unit
2192# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2194# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2195 print *,
'm_data_output.fpp:1712: ',
'@:ALLOCATE(c_mass(num_fluids,5))'
2196# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2198# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2199 call flush (output_unit)
2200# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2202# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2204# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2205 allocate (
c_mass(num_fluids,5))
2206# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2208# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2210# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2211#if defined(MFC_OpenACC)
2212# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2214# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2215#elif defined(MFC_OpenMP)
2216# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2218# 1712 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2222 if (down_sample)
then
2223 m_ds = int((m + 1)/3) - 1
2224 n_ds = int((n + 1)/3) - 1
2225 p_ds = int((p + 1)/3) - 1
2229 allocate (
q_cons_temp_ds(i)%sf(-1:m_ds + 1,-1:n_ds + 1,-1:p_ds + 1))
2242# 1734 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2244# 1734 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2245 use iso_fortran_env,
only: output_unit
2246# 1734 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2248# 1734 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2249 print *,
'm_data_output.fpp:1734: ',
'@:DEALLOCATE(c_mass)'
2250# 1734 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2252# 1734 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2253 call flush (output_unit)
2254# 1734 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2256# 1734 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2258# 1734 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2260# 1734 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2261#if defined(MFC_OpenACC)
2262# 1734 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2264# 1734 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2265#elif defined(MFC_OpenMP)
2266# 1734 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2268# 1734 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2270# 1734 "/home/runner/work/MFC/MFC/src/simulation/m_data_output.fpp"
2274 if (down_sample)
then
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_4eq
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.
real(wp), parameter sgm_eps
Segmentation tolerance.
integer, parameter nnode
Number of QBMM nodes.
integer, parameter precision_single
real(wp), parameter pi
Pi.
Writes solution data, run-time stability diagnostics (ICFL, VCFL, CCFL, Rc), and probe/center-of-mass...
real(wp), dimension(:,:), allocatable, public c_mass
impure subroutine, public s_open_probe_files
Open flow probe data files for writing.
real(wp) rc_min
Rc criterion maximum.
real(wp) vcfl_max
VCFL 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, public s_write_com_files(t_step, c_mass_in)
Write center-of-mass data at the current time step.
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.
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_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_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.
impure subroutine, public s_close_probe_files
Closes probe files.
impure subroutine, public s_close_com_files()
Closes communication 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.
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. Must be called only on rank 0.
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.
impure subroutine, public s_open_com_files()
Open center-of-mass data files for writing.
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 delayfileaccess(processrank)
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
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 qvs
real(wp), dimension(:), allocatable pi_infs
integer num_procs
Number of processors.
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 gammas
real(wp), dimension(:), allocatable gs_min
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
MPI halo exchange, domain decomposition, and buffer packing/unpacking for the simulation solver.
Simulation helper routines for enthalpy computation, CFL calculation, and stability checks.
subroutine, public s_compute_enthalpy(q_prim_vf, pres, rho, gamma, pi_inf, re, h, alpha, vel, vel_sum, qv, j, k, l)
Computes enthalpy.
subroutine, public s_compute_stability_from_dt(vel, c, rho, re_l, j, k, l, icfl, vcfl, rc, ccfl)
Computes stability criterion for a specified dt.
Conservative-to-primitive variable conversion, mixture property evaluation, and pressure computation.
subroutine s_compute_speed_of_sound(pres, rho, gamma, pi_inf, h, adv, vel_sum, c_c, c, qv)
Compute the speed of sound from thermodynamic state variables, supporting multiple equation-of-state ...
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.
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_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).