From 64610af7489249c3baba3f2ef88e7c52817a33e6 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@cnrs.fr> Date: Wed, 23 Oct 2024 15:21:23 +0200 Subject: [PATCH] Philippe 23/10/2024: OUTPUTS: add compression parameters per variable in namelist NAM_OUTPUT (not yet exploited) --- src/MNH/modd_bakout.f90 | 13 ++++++++++++- src/MNH/modn_output.f90 | 29 ++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/MNH/modd_bakout.f90 b/src/MNH/modd_bakout.f90 index 8f5d12b87..533d235d8 100644 --- a/src/MNH/modd_bakout.f90 +++ b/src/MNH/modd_bakout.f90 @@ -38,6 +38,7 @@ ! P. Wautelet 14/12/2023: add lossy compression for output files ! P. Wautelet 07/02/2024: add compression for backup files ! P. Wautelet 20/03/2024: add boxes for output files +! P. Wautelet 23/10/2024: add compression parameters per variable !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -58,18 +59,22 @@ 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) :: 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) INTEGER, DIMENSION(JPMODELMAX) :: NOUT_COMPRESS_LEVEL = 4 ! Compression level (for netCDF) +! Compression per variable (supersede previous parameters) +INTEGER, DIMENSION(:,:), ALLOCATABLE :: NOUT_VAR_COMPRESS_LEVEL ! Compression level per variable (set to 0 if no compression) ! Lossy compression LOGICAL, DIMENSION(JPMODELMAX) :: LOUT_COMPRESS_LOSSY = .FALSE. ! Lossy compression of (float) arrays (for netCDF) CHARACTER(LEN=NCOMPRNAMELGTMAX), DIMENSION(JPMODELMAX) :: COUT_COMPRESS_LOSSY_ALGO = 'GRANULARBR' ! Quantization algorithm INTEGER, DIMENSION(JPMODELMAX) :: NOUT_COMPRESS_LOSSY_NSD = 3 ! Number of Significant Digits (or Bits) +! Lossy compression per variable (supersede previous parameters) +CHARACTER(LEN=NCOMPRNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE :: COUT_VAR_COMPRESS_LOSSY_ALGO ! Quantization algorithm +INTEGER, DIMENSION(:,:), ALLOCATABLE :: NOUT_VAR_COMPRESS_LOSSY_NSD ! Number of Significant Digits (or Bits) REAL, ALLOCATABLE, DIMENSION(:,:) :: XBAK_TIME, XOUT_TIME ! XBAK_TIME(m,i) / XOUT_TIME(m,i) array of @@ -117,6 +122,12 @@ INTEGER, DIMENSION(:,:), ALLOCATABLE :: NOUT_BOX_JSUP INTEGER, DIMENSION(:,:), ALLOCATABLE :: NOUT_BOX_KINF INTEGER, DIMENSION(:,:), ALLOCATABLE :: NOUT_BOX_KSUP +! Compression parameters per variable in boxes +INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: NOUT_BOX_VAR_COMPRESS_LEVEL ! Compression level +CHARACTER(LEN=NCOMPRNAMELGTMAX), DIMENSION(:,:,:), ALLOCATABLE :: COUT_BOX_VAR_COMPRESS_LOSSY_ALGO ! Quantization algorithm +INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: NOUT_BOX_VAR_COMPRESS_LOSSY_NSD ! Number of Significant Digits (or Bits) + + ! Flag to disable output file splitting (supersedes NB_PROCIO_W option from NAM_CONFZ) LOGICAL, DIMENSION(JPMODELMAX) :: LOUT_FILESPLIT_DISABLE = .FALSE. END MODULE MODD_BAKOUT diff --git a/src/MNH/modn_output.f90 b/src/MNH/modn_output.f90 index 12ff83c1e..5ff3fc265 100644 --- a/src/MNH/modn_output.f90 +++ b/src/MNH/modn_output.f90 @@ -36,6 +36,7 @@ ! P. Wautelet 02/10/2017: split NAM_OUTPUT in NAM_BACKUP and NAM_OUTPUT ! P. Wautelet 14/12/2023: add lossy compression for output files ! P. Wautelet 20/03/2024: add boxes for output files +! P. Wautelet 23/10/2024: add compression parameters per variable !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -51,8 +52,9 @@ NAMELIST/NAM_OUTPUT/LOUT_BEG,LOUT_END,& XOUT_TIME_FREQ,XOUT_TIME_FREQ_FIRST, & COUT_VAR, & LOUT_REDUCE_FLOAT_PRECISION, & - LOUT_COMPRESS, NOUT_COMPRESS_LEVEL,& + LOUT_COMPRESS, NOUT_COMPRESS_LEVEL, NOUT_VAR_COMPRESS_LEVEL, & LOUT_COMPRESS_LOSSY, COUT_COMPRESS_LOSSY_ALGO, NOUT_COMPRESS_LOSSY_NSD, & + COUT_VAR_COMPRESS_LOSSY_ALGO, NOUT_VAR_COMPRESS_LOSSY_NSD, & COUT_DIR, & NOUT_BOXES, COUT_BOX_NAME, COUT_BOX_VAR_SUPP, & LOUT_MAINDOMAIN_WRITE, & @@ -60,6 +62,7 @@ NAMELIST/NAM_OUTPUT/LOUT_BEG,LOUT_END,& LOUT_UNPHYSICAL_HOR_CELLS_REMOVE, LOUT_UNPHYSICAL_VER_CELLS_REMOVE, & LOUT_PHYSICAL_SIMPLIFIED, & NOUT_BOX_IINF, NOUT_BOX_ISUP, NOUT_BOX_JINF, NOUT_BOX_JSUP, NOUT_BOX_KINF, NOUT_BOX_KSUP, & + NOUT_BOX_VAR_COMPRESS_LEVEL, COUT_BOX_VAR_COMPRESS_LOSSY_ALGO, NOUT_BOX_VAR_COMPRESS_LOSSY_NSD, & LOUT_FILESPLIT_DISABLE LOGICAL, SAVE, PRIVATE :: LOUTPUT_NML_ALLOCATED = .FALSE. @@ -84,6 +87,10 @@ SUBROUTINE OUTPUT_NML_ALLOCATE( ) ALLOCATE( NOUT_STEP(NMODEL, NFILE_NUM_MAX) ) ALLOCATE( COUT_VAR(NMODEL, JPOUTVARMAX) ) + ALLOCATE( NOUT_VAR_COMPRESS_LEVEL (NMODEL, JPOUTVARMAX) ) + ALLOCATE( COUT_VAR_COMPRESS_LOSSY_ALGO(NMODEL, JPOUTVARMAX) ) + ALLOCATE( NOUT_VAR_COMPRESS_LOSSY_NSD (NMODEL, JPOUTVARMAX) ) + ALLOCATE( COUT_BOX_NAME(NMODEL, NOUT_BOXMAX) ) ALLOCATE( COUT_BOX_VAR_SUPP(NMODEL, NOUT_BOXMAX, JPOUTVARMAX ) ) @@ -95,10 +102,18 @@ SUBROUTINE OUTPUT_NML_ALLOCATE( ) ALLOCATE( NOUT_BOX_KINF(NMODEL, NOUT_BOXMAX) ) ALLOCATE( NOUT_BOX_KSUP(NMODEL, NOUT_BOXMAX) ) + ALLOCATE( NOUT_BOX_VAR_COMPRESS_LEVEL (NMODEL, NOUT_BOXMAX, JPOUTVARMAX ) ) + ALLOCATE( COUT_BOX_VAR_COMPRESS_LOSSY_ALGO(NMODEL, NOUT_BOXMAX, JPOUTVARMAX ) ) + ALLOCATE( NOUT_BOX_VAR_COMPRESS_LOSSY_NSD (NMODEL, NOUT_BOXMAX, JPOUTVARMAX ) ) + XOUT_TIME(:,:) = XNEGUNDEF NOUT_STEP(:,:) = NNEGUNDEF COUT_VAR(:,:) = '' + NOUT_VAR_COMPRESS_LEVEL(:,:) = NNEGUNDEF + COUT_VAR_COMPRESS_LOSSY_ALGO(:,:) = 'NOT_SET' + NOUT_VAR_COMPRESS_LOSSY_NSD(:,:) = NNEGUNDEF + COUT_BOX_NAME(:,:) = '' COUT_BOX_VAR_SUPP(:,:,:) = '' @@ -110,6 +125,10 @@ SUBROUTINE OUTPUT_NML_ALLOCATE( ) NOUT_BOX_KINF(:,:) = NNEGUNDEF NOUT_BOX_KSUP(:,:) = NNEGUNDEF + NOUT_BOX_VAR_COMPRESS_LEVEL(:,:,:) = NNEGUNDEF + COUT_BOX_VAR_COMPRESS_LOSSY_ALGO(:,:,:) = 'NOT_SET' + NOUT_BOX_VAR_COMPRESS_LOSSY_NSD(:,:,:) = NNEGUNDEF + LOUTPUT_NML_ALLOCATED = .TRUE. END SUBROUTINE OUTPUT_NML_ALLOCATE @@ -127,6 +146,10 @@ SUBROUTINE OUTPUT_NML_DEALLOCATE( ) DEALLOCATE( NOUT_STEP ) DEALLOCATE( COUT_VAR ) + DEALLOCATE( NOUT_VAR_COMPRESS_LEVEL ) + DEALLOCATE( COUT_VAR_COMPRESS_LOSSY_ALGO ) + DEALLOCATE( NOUT_VAR_COMPRESS_LOSSY_NSD ) + DEALLOCATE( COUT_BOX_NAME ) DEALLOCATE( COUT_BOX_VAR_SUPP ) @@ -138,6 +161,10 @@ SUBROUTINE OUTPUT_NML_DEALLOCATE( ) DEALLOCATE( NOUT_BOX_KINF ) DEALLOCATE( NOUT_BOX_KSUP ) + DEALLOCATE( NOUT_BOX_VAR_COMPRESS_LEVEL ) + DEALLOCATE( COUT_BOX_VAR_COMPRESS_LOSSY_ALGO ) + DEALLOCATE( NOUT_BOX_VAR_COMPRESS_LOSSY_NSD ) + LOUTPUT_NML_ALLOCATED = .FALSE. END SUBROUTINE OUTPUT_NML_DEALLOCATE -- GitLab