From 485f288206db4b7e1953f43ec9d54ec61da25179 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Wed, 7 Feb 2024 14:52:13 +0100 Subject: [PATCH] Philippe 07/02/2024: IO: add LBAK_REDUCE_FLOAT_PRECISION and LIO_ALLOW_REDUCED_PRECISION_BACKUP to allow reduced float precision for backups (use with caution) --- src/LIB/SURCOUCHE/src/modd_io.f90 | 2 ++ .../SURCOUCHE/src/mode_io_manage_struct.f90 | 20 +++++++++++++++++-- src/LIB/SURCOUCHE/src/modn_confio.f90 | 4 +++- src/MNH/modd_bakout.f90 | 5 +++-- src/MNH/modn_backup.f90 | 3 ++- 5 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index 340dccabf..e783ae812 100644 --- a/src/LIB/SURCOUCHE/src/modd_io.f90 +++ b/src/LIB/SURCOUCHE/src/modd_io.f90 @@ -65,6 +65,8 @@ CHARACTER(LEN=NDIRNAMELGTMAX) :: CIO_DIR = '' ! Directory for IO LOGICAL :: LIO_ALLOW_NO_BACKUP = .FALSE. ! Allow to have no valid backup time (useful for some tests) LOGICAL :: LIO_NO_WRITE = .FALSE. ! Disable file writes (useful for benchs) +LOGICAL :: LIO_ALLOW_REDUCED_PRECISION_BACKUP = .FALSE. ! Allow read/write of backup files with a reduced precision + LOGICAL :: LIO_COMPRESS = .FALSE. ! Compress (float) arrays (for netCDF) INTEGER :: NIO_COMPRESS_LEVEL = 4 ! Compression level (for netCDF) diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 index 7b4bf2295..9045fc2ea 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 @@ -913,8 +913,8 @@ SUBROUTINE IO_File_add2list( TPFILE, HNAME, HTYPE, HMODE, USE NETCDF, ONLY: NF90_QUANTIZE_BITGROOM, NF90_QUANTIZE_BITROUND, NF90_QUANTIZE_GRANULARBR ! #endif -USE MODD_BAKOUT, ONLY: LBAK_COMPRESS, LOUT_COMPRESS, LOUT_REDUCE_FLOAT_PRECISION, & - NBAK_COMPRESS_LEVEL, NOUT_COMPRESS_LEVEL, & +USE MODD_BAKOUT, ONLY: LBAK_COMPRESS, NBAK_COMPRESS_LEVEL, LBAK_REDUCE_FLOAT_PRECISION, & + LOUT_COMPRESS, NOUT_COMPRESS_LEVEL, LOUT_REDUCE_FLOAT_PRECISION, & COUT_COMPRESS_LOSSY_ALGO, LOUT_COMPRESS_LOSSY, NOUT_COMPRESS_LOSSY_NSD USE MODD_CONF, ONLY: CPROGRAM USE MODD_CONFZ, ONLY: NB_PROCIO_R, NB_PROCIO_W @@ -1354,6 +1354,22 @@ SELECT CASE(TPFILE%CTYPE) END IF #endif ELSE IF (TRIM(HTYPE)=='MNHBACKUP' .OR. TRIM(HTYPE)=='MNHDIACHRONIC') THEN + TPFILE%LNCREDUCE_FLOAT_PRECISION = LBAK_REDUCE_FLOAT_PRECISION(IMI) + IF ( LBAK_REDUCE_FLOAT_PRECISION(IMI) ) THEN + IF ( .NOT. LIO_ALLOW_REDUCED_PRECISION_BACKUP ) THEN + cmnhmsg(1) = 'LBAK_REDUCE_FLOAT_PRECISION=T is dangerous' + cmnhmsg(2) = 'if needed, it must be forced with LIO_ALLOW_REDUCED_PRECISION_BACKUP=T in NAM_CONFIO' + CALL PRINT_MSG( NVERB_ERROR, 'IO', 'IO_File_add2list' ) + TPFILE%LNCREDUCE_FLOAT_PRECISION = .FALSE. + ELSE + IF ( .NOT. ASSOCIATED( TPFILE%TMAINFILE ) ) THEN + ! Do not print warning for subfiles + CALL PRINT_MSG( NVERB_WARNING, 'IO', 'IO_File_add2list', trim(tpfile%cname) // & + ' LBAK_REDUCE_FLOAT_PRECISION=T dangerous (forced by LIO_ALLOW_REDUCED_PRECISION_BACKUP=T)' ) + END IF + END IF + END IF + ! Apply compression to backup files if not already forced for all IF ( .NOT. LIO_COMPRESS ) THEN TPFILE%LNCCOMPRESS = LBAK_COMPRESS(IMI) diff --git a/src/LIB/SURCOUCHE/src/modn_confio.f90 b/src/LIB/SURCOUCHE/src/modn_confio.f90 index 410b439a1..371ca55db 100644 --- a/src/LIB/SURCOUCHE/src/modn_confio.f90 +++ b/src/LIB/SURCOUCHE/src/modn_confio.f90 @@ -41,7 +41,8 @@ USE MODD_IO, ONLY : LVERB_OUTLST, LVERB_STDOUT, LVERB_ALLPRC, & NBUD_VERB, NBUD_ABORT_LEVEL, NIO_VERB, NIO_ABORT_LEVEL, NGEN_VERB, NGEN_ABORT_LEVEL, & LIO_COMPRESS, NIO_COMPRESS_LEVEL, & - CIO_DIR, LIO_ALLOW_NO_BACKUP, LIO_NO_WRITE, NFILE_NUM_MAX + CIO_DIR, LIO_ALLOW_NO_BACKUP, LIO_NO_WRITE, LIO_ALLOW_REDUCED_PRECISION_BACKUP, & + NFILE_NUM_MAX ! IMPLICIT NONE ! @@ -57,6 +58,7 @@ NAMELIST/NAM_CONFIO/LCDF4, LLFIOUT, LLFIREAD, & NGEN_VERB, NGEN_ABORT_LEVEL, CIO_DIR, & LIO_COMPRESS, NIO_COMPRESS_LEVEL, & LIO_ALLOW_NO_BACKUP, LIO_NO_WRITE, & + LIO_ALLOW_REDUCED_PRECISION_BACKUP, & NFILE_NUM_MAX ! END MODULE MODN_CONFIO diff --git a/src/MNH/modd_bakout.f90 b/src/MNH/modd_bakout.f90 index ede0fe810..84e1eab13 100644 --- a/src/MNH/modd_bakout.f90 +++ b/src/MNH/modd_bakout.f90 @@ -56,8 +56,9 @@ LOGICAL :: LBAK_END = .FALSE. ! Force a backup/output at the last timestep LOGICAL :: LOUT_END = .FALSE. ! of the segment for all models ! Compression -LOGICAL, DIMENSION(JPMODELMAX) :: LOUT_REDUCE_FLOAT_PRECISION = .FALSE. -! Reduce the precision of floats to single precision instead of double precision (for netCDF) + +LOGICAL, DIMENSION(JPMODELMAX) :: LBAK_REDUCE_FLOAT_PRECISION = .FALSE. ! Reduce the precision of floats to single precision +LOGICAL, DIMENSION(JPMODELMAX) :: LOUT_REDUCE_FLOAT_PRECISION = .FALSE. ! instead of double precision (for netCDF) LOGICAL, DIMENSION(JPMODELMAX) :: LBAK_COMPRESS = .FALSE. ! Compress (float) arrays (for netCDF) LOGICAL, DIMENSION(JPMODELMAX) :: LOUT_COMPRESS = .FALSE. ! Compress (float) arrays (for netCDF) INTEGER, DIMENSION(JPMODELMAX) :: NBAK_COMPRESS_LEVEL = 4 ! Compression level (for netCDF) diff --git a/src/MNH/modn_backup.f90 b/src/MNH/modn_backup.f90 index 94897f1d0..6dca60a3f 100644 --- a/src/MNH/modn_backup.f90 +++ b/src/MNH/modn_backup.f90 @@ -47,7 +47,8 @@ NAMELIST/NAM_BACKUP/LBAK_BEG,LBAK_END,& XBAK_TIME,NBAK_STEP,& NBAK_STEP_FREQ,NBAK_STEP_FREQ_FIRST,& XBAK_TIME_FREQ,XBAK_TIME_FREQ_FIRST,& - LBAK_COMPRESS, NBAK_COMPRESS_LEVEL,& + LBAK_REDUCE_FLOAT_PRECISION, & + LBAK_COMPRESS, NBAK_COMPRESS_LEVEL, & CBAK_DIR ! END MODULE MODN_BACKUP -- GitLab