@@ -39,7 +39,7 @@ module m_data_output
3939
4040 implicit none
4141
42- private;
42+ private;
4343 public :: s_write_serial_data_files, &
4444 s_write_parallel_data_files, &
4545 s_write_data_files, &
@@ -602,13 +602,21 @@ contains
602602
603603 ! Generic loop iterators
604604 integer :: i, j, k, l
605+ real (wp) :: loc_violations, glb_violations
605606
606607 ! Downsample variables
607- integer :: m_ds, n_ds, p_ds, m_glb_ds, n_glb_ds, p_glb_ds
608+ integer :: m_ds, n_ds, p_ds
609+ integer :: m_glb_ds, n_glb_ds, p_glb_ds
610+ integer :: m_glb_save, n_glb_save, p_glb_save ! Size of array being saved
608611
609612 if (down_sample) then
610613 if ((mod (m + 1 , 3 ) > 0 ) .or. (mod (n + 1 , 3 ) > 0 ) .or. (mod (p + 1 , 3 ) > 0 )) then
611- print * , " WARNING: ATTEMPTING TO RUN DOWN SAMPLING WITH local problem size not divisible by 3"
614+ loc_violations = 1._wp
615+ end if
616+ call s_mpi_allreduce_sum(loc_violations, glb_violations)
617+ if (proc_rank == 0 .and. nint (glb_violations) > 0 ) then
618+ print * , " WARNING: Attempting to downsample data but there are" // &
619+ " processors with local problem sizes that are not divisible by 3."
612620 end if
613621 call s_populate_variables_buffers(bc_type, q_cons_vf)
614622 call s_downsample_data(q_cons_vf, q_cons_temp, &
@@ -657,29 +665,26 @@ contains
657665 if (down_sample) then
658666 ! Size of local arrays
659667 data_size = (m_ds + 3 )* (n_ds + 3 )* (p_ds + 3 )
660-
661- ! Resize some integers so MPI can write even the biggest files
662- m_MOK = int (m_glb_ds + 3 , MPI_OFFSET_KIND)
663- n_MOK = int (n_glb_ds + 3 , MPI_OFFSET_KIND)
664- p_MOK = int (p_glb_ds + 3 , MPI_OFFSET_KIND)
665- WP_MOK = int (8._wp , MPI_OFFSET_KIND)
666- MOK = int (1._wp , MPI_OFFSET_KIND)
667- str_MOK = int (name_len, MPI_OFFSET_KIND)
668- NVARS_MOK = int (sys_size, MPI_OFFSET_KIND)
668+ m_glb_save = m_glb_ds + 3
669+ n_glb_save = n_glb_ds + 3
670+ p_glb_save = p_glb_ds + 3
669671 else
670672 ! Size of local arrays
671673 data_size = (m + 1 )* (n + 1 )* (p + 1 )
672-
673- ! Resize some integers so MPI can write even the biggest files
674- m_MOK = int (m_glb + 1 , MPI_OFFSET_KIND)
675- n_MOK = int (n_glb + 1 , MPI_OFFSET_KIND)
676- p_MOK = int (p_glb + 1 , MPI_OFFSET_KIND)
677- WP_MOK = int (8._wp , MPI_OFFSET_KIND)
678- MOK = int (1._wp , MPI_OFFSET_KIND)
679- str_MOK = int (name_len, MPI_OFFSET_KIND)
680- NVARS_MOK = int (sys_size, MPI_OFFSET_KIND)
674+ m_glb_save = m_glb + 1
675+ n_glb_save = n_glb + 1
676+ p_glb_save = p_glb + 1
681677 end if
682678
679+ ! Resize some integers so MPI can write even the biggest files
680+ m_MOK = int (m_glb_save, MPI_OFFSET_KIND)
681+ n_MOK = int (n_glb_save, MPI_OFFSET_KIND)
682+ p_MOK = int (p_glb_save, MPI_OFFSET_KIND)
683+ WP_MOK = int (8._wp , MPI_OFFSET_KIND)
684+ MOK = int (1._wp , MPI_OFFSET_KIND)
685+ str_MOK = int (name_len, MPI_OFFSET_KIND)
686+ NVARS_MOK = int (sys_size, MPI_OFFSET_KIND)
687+
683688 ! Write the data for each variable
684689 if (bubbles_euler) then
685690 do i = 1 , sys_size! adv_idx%end
0 commit comments