1# 1 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
7# 1 "/home/runner/work/MFC/MFC/src/common/include/case.fpp" 1
13# 8 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
16# 12 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
17# 7 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp" 2
18# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
19# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
20# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
21# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
23# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
25# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
27# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
29# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
31# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
32# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
35# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
36# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
37# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
39# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
40# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
42# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
44# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
46# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
48# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
50# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
52# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
54# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
56# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
58# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
59# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
60# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
61# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
62# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
63# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
64# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
65# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
67# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
68# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
69# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
71# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
72# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
75# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
76# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
77# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
79# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
80# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
82# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
84# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
86# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
88# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
90# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
92# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
94# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
96# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
98# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
100# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
102# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
104# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
106# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
108# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
110# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
112# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122# 95 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124# 100 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126# 105 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128# 110 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130# 115 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132# 120 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134# 125 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136# 130 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138# 135 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
140# 165 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
142# 219 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
144# 233 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
146# 258 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
148# 269 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
150# 271 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
151# 282 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
153# 332 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
155# 342 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
157# 352 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
159# 361 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
161# 378 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
163# 388 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
165# 395 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
167# 401 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
169# 407 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
171# 413 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
173# 419 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
175# 425 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
177# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
178# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
179# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
180# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
181# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
182# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
183# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
184# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
186# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
187# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
188# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
190# 12 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
191# 1 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp" 1
194# 4 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
195# 5 "/home/runner/work/MFC/MFC/src/common/include/defaults/thermochem.fpp"
196# 13 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 2
198# 16 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
199# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
201# 24 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
203# 53 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
205# 65 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
207# 75 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
209# 105 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
211# 117 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
213# 127 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
215# 174 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
217# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
219# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
223# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
225# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
227# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
229# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
231# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
233# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
235# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
237# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
239# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
241# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
243# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
245# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
247# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
249# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
251# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
253# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
255# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
257# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
259# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
261# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
263# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
265# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
267# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
269# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
271# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
273# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
275# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
278# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
281# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
287# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
293# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
296# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
299# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
302# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
305# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
308# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
311# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
314# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
317# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
320# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
323# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
326# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
329# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
332# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
334# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
335# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
337# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
339# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
344# 52 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
347# 72 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
350# 80 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
353# 104 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
356# 120 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
359# 145 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
361# 151 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
363# 158 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
365# 8 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp" 2
389 type(
integer_field),
dimension(1:num_dims,1:2),
intent(in) :: bc_type
393 integer,
dimension(3) :: sf_start_idx, sf_extents_loc
398 sf_start_idx = (/0, 0, 0/)
399 sf_extents_loc = shape(bc_type(dir, loc)%sf)
401 call mpi_type_create_subarray(num_dims, sf_extents_loc, sf_extents_loc, sf_start_idx, mpi_order_fortran, &
409 sf_start_idx = (/0, 0, 0/)
410 sf_extents_loc = shape(
bc_buffers(dir, loc)%sf)
412 call mpi_type_create_subarray(num_dims, sf_extents_loc*mpi_io_type, sf_extents_loc*mpi_io_type, sf_start_idx, &
424 type(
scalar_field),
dimension(sys_size),
intent(in) :: q_prim_vf
425 type(
integer_field),
dimension(1:num_dims,1:2),
intent(in) :: bc_type
426 logical,
intent(in) :: old_grid_in
427 character(LEN=*),
intent(in) :: step_dirpath
429 character(len=path_len) :: file_path
430 character(len=10) :: status
433 if (old_grid_in)
then
441 file_path = trim(step_dirpath) //
'/bc_type.dat'
442 open (1, file=trim(file_path), form=
'unformatted', status=status)
445 write (1) bc_type(dir, loc)%sf
450 file_path = trim(step_dirpath) //
'/bc_buffers.dat'
451 open (1, file=trim(file_path), form=
'unformatted', status=status)
464 type(
scalar_field),
dimension(sys_size),
intent(in) :: q_prim_vf
465 type(
integer_field),
dimension(1:num_dims,1:2),
intent(in) :: bc_type
467 character(len=path_len) :: file_loc, file_path
473 character(len=7) :: proc_rank_str
480 file_loc = trim(case_dir) //
'/restart_data/boundary_conditions'
483 if (dir_check .neqv. .true.)
then
487 open (newunit=unit, file=trim(file_loc) //
'/decomposition.dat', status=
'replace')
488 write (unit,
'(4(I0,1X))')
num_procs, num_procs_x, num_procs_y, num_procs_z
498 write (proc_rank_str,
'(I7.7)')
proc_rank
499 file_path = trim(file_loc) //
'/bc_' // trim(proc_rank_str) //
'.dat'
500 call mpi_file_open(mpi_comm_self, trim(file_path), mpi_mode_create + mpi_mode_wronly, mpi_info_null, file_id, ierr)
501 call s_check_mpi_file_open(ierr, file_path)
506#ifdef MFC_MIXED_PRECISION
507 nelements = sizeof(bc_type(dir, loc)%sf)
508 call mpi_file_write_all(file_id, bc_type(dir, loc)%sf, nelements, mpi_byte, mpi_status_ignore, ierr)
510 nelements = sizeof(bc_type(dir, loc)%sf)/4
511 call mpi_file_write_all(file_id, bc_type(dir, loc)%sf, nelements, mpi_integer, mpi_status_ignore, ierr)
519 nelements = sizeof(
bc_buffers(dir, loc)%sf)*mpi_io_type/stp
520 call mpi_file_write_all(file_id,
bc_buffers(dir, loc)%sf, nelements, mpi_io_p, mpi_status_ignore, ierr)
524 call mpi_file_close(file_id, ierr)
532 character(LEN=*),
intent(in) :: step_dirpath
533 type(
integer_field),
dimension(1:num_dims,1:2),
intent(inout) :: bc_type
535 logical :: file_exist
536 character(len=path_len) :: file_path
540 file_path = trim(step_dirpath) //
'/bc_type.dat'
541 inquire (file=trim(file_path), exist=file_exist)
542 if (.not. file_exist)
then
543 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
546 open (1, file=trim(file_path), form=
'unformatted', status=
'unknown')
549 read (1) bc_type(dir, loc)%sf
551# 192 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
552#if defined(MFC_OpenACC)
553# 192 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
555# 192 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
556#elif defined(MFC_OpenMP)
557# 192 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
559# 192 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
561# 193 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
567 file_path = trim(step_dirpath) //
'/bc_buffers.dat'
568 inquire (file=trim(file_path), exist=file_exist)
569 if (.not. file_exist)
then
570 call s_mpi_abort(trim(file_path) //
' is missing. Exiting.')
573 open (1, file=trim(file_path), form=
'unformatted', status=
'unknown')
578# 208 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
579#if defined(MFC_OpenACC)
580# 208 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
582# 208 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
583#elif defined(MFC_OpenMP)
584# 208 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
586# 208 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
588# 209 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
598 type(
integer_field),
dimension(1:num_dims,1:2),
intent(inout) :: bc_type
599 logical,
intent(in),
optional :: strict
601 character(len=path_len) :: file_loc, file_path
606 character(len=7) :: proc_rank_str
609 logical :: strict_loc
611 file_loc = trim(case_dir) //
'/restart_data/boundary_conditions'
615 if (dir_check .neqv. .true.)
then
616 call s_mpi_abort(trim(file_loc) //
' is missing. Exiting.')
619 if (
present(strict)) strict_loc = strict
629 write (proc_rank_str,
'(I7.7)')
proc_rank
630 file_path = trim(file_loc) //
'/bc_' // trim(proc_rank_str) //
'.dat'
631 call mpi_file_open(mpi_comm_self, trim(file_path), mpi_mode_rdonly, mpi_info_null, file_id, ierr)
632 call s_check_mpi_file_open(ierr, file_path)
637#ifdef MFC_MIXED_PRECISION
638 nelements = sizeof(bc_type(dir, loc)%sf)
639 call mpi_file_read_all(file_id, bc_type(dir, loc)%sf, nelements, mpi_byte, mpi_status_ignore, ierr)
641 nelements = sizeof(bc_type(dir, loc)%sf)/4
642 call mpi_file_read_all(file_id, bc_type(dir, loc)%sf, nelements, mpi_integer, mpi_status_ignore, ierr)
645# 264 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
646#if defined(MFC_OpenACC)
647# 264 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
649# 264 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
650#elif defined(MFC_OpenMP)
651# 264 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
653# 264 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
655# 265 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
662 nelements = sizeof(
bc_buffers(dir, loc)%sf)*mpi_io_type/stp
663 call mpi_file_read_all(file_id,
bc_buffers(dir, loc)%sf, nelements, mpi_io_p, mpi_status_ignore, ierr)
665# 273 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
666#if defined(MFC_OpenACC)
667# 273 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
669# 273 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
670#elif defined(MFC_OpenMP)
671# 273 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
673# 273 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
675# 274 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
679 call mpi_file_close(file_id, ierr)
689 character(len=*),
intent(in) :: file_loc
690 logical,
intent(in) :: strict
693 logical :: file_exist
694 character(len=64) :: written, running
696 inquire (file=trim(file_loc) //
'/decomposition.dat', exist=file_exist)
697 if (.not. file_exist)
return
699 open (newunit=unit, file=trim(file_loc) //
'/decomposition.dat', status=
'old', action=
'read', iostat=ios)
701 read (unit, *, iostat=ios) decomp
706 call s_mpi_abort(trim(file_loc) //
'/decomposition.dat is unreadable. Exiting.')
708 print
'(A)',
'WARNING: ' // trim(file_loc) //
'/decomposition.dat is unreadable; rank count not checked.'
713 if (any(decomp /= [
num_procs, num_procs_x, num_procs_y, num_procs_z]))
then
714 write (written,
'(I0," ranks (",I0,"x",I0,"x",I0,")")') decomp
715 write (running,
'(I0," ranks (",I0,"x",I0,"x",I0,")")')
num_procs, num_procs_x, num_procs_y, num_procs_z
717 call s_mpi_abort(trim(file_loc) //
' was written for ' // trim(written) //
' but this run uses ' // trim(running) &
718 & //
'. These per-rank boundary files only work on the decomposition that ' &
719 & //
'wrote them: run on that rank count, or rerun pre_process on this one.')
722 &
'WARNING: ' // trim(file_loc) //
' was written for ' // trim(written) &
723 & //
' but this run uses ' // trim(running) &
724 & //
'; boundary ghost values will be wrong. Use the pre_process rank count.'
733 type(
scalar_field),
dimension(sys_size),
intent(in) :: q_prim_vf
740 bc_buffers(1, 1)%sf(i, j, k) = q_prim_vf(i)%sf(0, j, k)
741 bc_buffers(1, 2)%sf(i, j, k) = q_prim_vf(i)%sf(m, j, k)
743 if ((chemistry .or. heat_conduction) .and.
present(q_t_sf))
then
744 bc_buffers(1, 1)%sf(sys_size + 1, j, k) = q_t_sf%sf(0, j, k)
745 bc_buffers(1, 2)%sf(sys_size + 1, j, k) = q_t_sf%sf(m, j, k)
750# 349 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
755 bc_buffers(2, 1)%sf(i, j, k) = q_prim_vf(j)%sf(i, 0, k)
756 bc_buffers(2, 2)%sf(i, j, k) = q_prim_vf(j)%sf(i, n, k)
759 if ((chemistry .or. heat_conduction) .and.
present(q_t_sf))
then
761 bc_buffers(2, 1)%sf(i, sys_size + 1, k) = q_t_sf%sf(i, 0, k)
762 bc_buffers(2, 2)%sf(i, sys_size + 1, k) = q_t_sf%sf(i, n, k)
767# 366 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
772 bc_buffers(3, 1)%sf(i, j, k) = q_prim_vf(k)%sf(i, j, 0)
773 bc_buffers(3, 2)%sf(i, j, k) = q_prim_vf(k)%sf(i, j, p)
777 if ((chemistry .or. heat_conduction) .and.
present(q_t_sf))
then
780 bc_buffers(3, 1)%sf(i, j, sys_size + 1) = q_t_sf%sf(i, j, 0)
781 bc_buffers(3, 2)%sf(i, j, sys_size + 1) = q_t_sf%sf(i, j, p)
786# 385 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
788# 387 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
795 type(
integer_field),
dimension(1:num_dims,1:2),
intent(in) :: bc_type
797 bc_type(1, 1)%sf(:,:,:) = int(min(
bc_x%beg, 0), kind=1)
798 bc_type(1, 2)%sf(:,:,:) = int(min(
bc_x%end, 0), kind=1)
800# 397 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
801#if defined(MFC_OpenACC)
802# 397 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
804# 397 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
805#elif defined(MFC_OpenMP)
806# 397 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
808# 397 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
810# 398 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
812# 400 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
814 bc_type(2, 1)%sf(:,:,:) = int(min(
bc_y%beg, 0), kind=1)
815 bc_type(2, 2)%sf(:,:,:) = int(min(
bc_y%end, 0), kind=1)
817# 403 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
818#if defined(MFC_OpenACC)
819# 403 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
821# 403 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
822#elif defined(MFC_OpenMP)
823# 403 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
825# 403 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
827# 404 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
828# 405 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
830 bc_type(3, 1)%sf(:,:,:) = int(min(
bc_z%beg, 0), kind=1)
831 bc_type(3, 2)%sf(:,:,:) = int(min(
bc_z%end, 0), kind=1)
833# 408 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
834#if defined(MFC_OpenACC)
835# 408 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
837# 408 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
838#elif defined(MFC_OpenMP)
839# 408 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
841# 408 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
843# 409 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
845# 411 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
847# 413 "/home/runner/work/MFC/MFC/src/common/m_boundary_io.fpp"
Boundary condition restart I/O, capillary/IGR buffer population, and grid-variable buffers.
integer, dimension(1:3, 1:2) mpi_bc_type_type
subroutine s_write_parallel_boundary_condition_files(q_prim_vf, bc_type, q_t_sf)
Write boundary condition type and buffer data to per-rank parallel files using MPI I/O.
integer, dimension(1:3, 1:2) mpi_bc_buffer_type
subroutine s_assign_default_bc_type(bc_type)
Initialize the per-cell boundary condition type arrays with the global default BC values.
subroutine s_read_serial_boundary_condition_files(step_dirpath, bc_type)
Read boundary condition type and buffer data from serial (unformatted) restart files.
impure subroutine s_create_mpi_types(bc_type)
Create MPI derived datatypes for boundary condition type arrays and buffer arrays used in parallel I/...
subroutine s_pack_boundary_condition_buffers(q_prim_vf, q_t_sf)
Pack primitive variable boundary slices into bc_buffers arrays for serialization.
subroutine s_read_parallel_boundary_condition_files(bc_type, strict)
Read boundary condition type and buffer data from per-rank parallel files using MPI I/O.
impure subroutine s_check_bc_decomposition(file_loc, strict)
Check that the per-rank boundary files in file_loc were written for this run's decomposition: abort i...
subroutine s_write_serial_boundary_condition_files(q_prim_vf, bc_type, step_dirpath, old_grid_in, q_t_sf)
Write boundary condition type and buffer data to serial (unformatted) restart files.
Per-cell noncharacteristic boundary condition primitives applied in the ghost cells.
type(scalar_field), dimension(:,:), allocatable bc_buffers
Platform-specific file and directory operations: create, delete, inquire, getcwd, and basename.
impure subroutine my_inquire(fileloc, dircheck)
Inquire on the existence of a directory or file.
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.
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...
type(int_bounds_info) bc_z
integer proc_rank
Rank of the local processor.
type(int_bounds_info) bc_y
type(int_bounds_info) bc_x
integer num_procs
Number of processors.
MPI halo exchange, domain decomposition, and buffer packing/unpacking for the simulation solver.
Derived type annexing an integer scalar field (SF).
Derived type annexing a scalar field (SF).