HELPERS: Add functions to enable/disable I/O flush and sync.

This change introduces the logical flag 'noflush' to control the flushing
and synchronization of I/O buffers. Subsequently, subroutines
'enable_flush_and_sync' and 'disable_flush_and_sync' were added to enable
and disable the flushing and synchronization, respectively.

The 'flush_and_sync' subroutine was modified to respect the noflush flag.

Additionally, this change updates 'statistics.F90' to read
the 'enable_io_flush' parameter and call the appropriate subroutine
('enable_flush_and_sync' or 'disable_flush_and_sync') based on its value.

Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
This commit is contained in:
Grzegorz Kowal 2024-07-19 10:00:18 -03:00
parent 94ecb53bc4
commit 29f1e94e9c
2 changed files with 59 additions and 2 deletions

View File

@ -49,11 +49,13 @@ module helpers
module procedure print_message_msg
end interface
logical :: noflush = .true.
private
public :: print_welcome, print_section, print_parameter, print_message
public :: uppercase, lowercase
public :: flush_and_sync
public :: enable_flush_and_sync, disable_flush_and_sync, flush_and_sync
!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
!
@ -551,10 +553,53 @@ module helpers
!
!===============================================================================
!
! subroutine ENABLE_FLUSH_AND_SYNC:
! --------------------------------
!
! This function enables flushing and synchronization of I/O buffers.
!
!===============================================================================
!
subroutine enable_flush_and_sync()
implicit none
!-------------------------------------------------------------------------------
!
noflush = .false.
!-------------------------------------------------------------------------------
!
end subroutine enable_flush_and_sync
!
!===============================================================================
!
! subroutine DISABLE_FLUSH_AND_SYNC:
! ---------------------------------
!
! This function disables flushing and synchronization of I/O buffers.
!
!===============================================================================
!
subroutine disable_flush_and_sync()
implicit none
!-------------------------------------------------------------------------------
!
noflush = .true.
!-------------------------------------------------------------------------------
!
end subroutine disable_flush_and_sync
!
!===============================================================================
!
! subroutine FLUSH_AND_SYNC:
! -------------------------
!
! Function flushes and fsyncs the I/O buffers.
! This function performs a flush of the I/O buffers and ensures that all
! changes are synchronized to the storage device using fsync.
!
! Arguments:
!
@ -584,6 +629,8 @@ module helpers
!-------------------------------------------------------------------------------
!
if (noflush) return
call flush(iounit)
#ifdef __GFORTRAN__

View File

@ -104,6 +104,7 @@ module statistics
use equations , only : pvars, nf
use evolution , only : error_control
use forcing , only : forcing_enabled
use helpers , only : enable_flush_and_sync, disable_flush_and_sync
use mpitools , only : master
#ifdef MPI
use mpitools , only : nprocs
@ -124,6 +125,15 @@ module statistics
!
status = 0
stmp = "off"
call get_parameter("enable_io_flush", stmp)
select case(trim(stmp))
case ("on", "ON", "t", "T", "y", "Y", "true", "TRUE", "yes", "YES")
call enable_flush_and_sync
case default
call disable_flush_and_sync
end select
stmp = "on"
call get_parameter("enable_conservation", stmp)
select case(trim(stmp))