diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index 340dccabf67e502e7660839aaaf83b82952c612e..e783ae8124498467f5055bdfb7e05b27962d7ebb 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 7b4bf2295aa5e91f9c0c9130df9b7ad6bc01aefe..9045fc2ead3ceaed171d55139a69f3bcbb315154 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 410b439a16b9e757b32ed6085df9629abe385194..371ca55db551b4fd13421d2cd0e0cb25ebf23543 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 ede0fe8100b9d081b88d2c152fced891b18fc83c..84e1eab137745e13a08a81bb4b7929bbc91a5a42 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 94897f1d092726103f67e5e097de76dc352e9962..6dca60a3f305293bec0d9c5f14adba9e3c3c1d31 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