diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 index 7707fe94d801ab640abbf1d3b7624d2fee1ee597..48f87468966a926dd37e5728d1cdd5e998da2590 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 @@ -574,10 +574,12 @@ END SUBROUTINE POPULATE_STRUCT END SUBROUTINE IO_PREPARE_BAKOUT_STRUCT ! SUBROUTINE IO_FILE_ADD2LIST(TPFILE,HNAME,HTYPE,HMODE, & - HFORM,HACCESS,KLFINPRAR,KLFITYPE,KLFIVERB,KRECL,TPDADFILE,TPDATAFILE,OOLD) + HFORM,HACCESS,HFORMAT,KLFINPRAR,KLFITYPE,KLFIVERB,KRECL,TPDADFILE,TPDATAFILE,OOLD) ! -USE MODD_BAKOUT, ONLY : LOUT_COMPRESS,LOUT_REDUCE_FLOAT_PRECISION,NOUT_COMPRESS_LEVEL -USE MODE_MODELN_HANDLER, ONLY : GET_CURRENT_MODEL_INDEX +USE MODD_BAKOUT, ONLY: LOUT_COMPRESS,LOUT_REDUCE_FLOAT_PRECISION,NOUT_COMPRESS_LEVEL +USE MODD_CONF, ONLY: CPROGRAM +! +USE MODE_MODELN_HANDLER, ONLY: GET_CURRENT_MODEL_INDEX ! TYPE(TFILEDATA),POINTER, INTENT(INOUT) :: TPFILE !File structure to return CHARACTER(LEN=*), INTENT(IN) :: HNAME !Filename @@ -585,6 +587,7 @@ CHARACTER(LEN=*), INTENT(IN) :: HTYPE !Filetype (backup, o CHARACTER(LEN=*), INTENT(IN) :: HMODE !Opening mode (read, write...) CHARACTER(LEN=*), OPTIONAL,INTENT(IN) :: HFORM !Formatted/unformatted CHARACTER(LEN=*), OPTIONAL,INTENT(IN) :: HACCESS !Direct/sequential +CHARACTER(LEN=*), OPTIONAL,INTENT(IN) :: HFORMAT !Fileformat (NETCDF4, LFI, LFICDF4...) INTEGER(KIND=LFI_INT), OPTIONAL,INTENT(IN) :: KLFINPRAR !Number of predicted articles of the LFI file (non crucial) INTEGER, OPTIONAL,INTENT(IN) :: KLFITYPE !Type of the file (used to generate list of files to transfers) INTEGER, OPTIONAL,INTENT(IN) :: KLFIVERB !LFI verbosity level @@ -648,6 +651,18 @@ IF(PRESENT(HACCESS)) THEN CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','HACCESS should be DIRECT or SEQUENTIAL and not '//TRIM(HACCESS)) END IF ! +IF (PRESENT(HFORMAT)) THEN + IF(CPROGRAM=='LFICDF') THEN + IF (HFORMAT/='LFI' .AND. HFORMAT/='NETCDF4') & + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid HFORMAT ('//TRIM(HFORMAT)//')') + ELSE + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','optional argument HFORMAT not tested for CPROGRAM='//TRIM(CPROGRAM)) + END IF +ELSE + IF(CPROGRAM=='LFICDF') & + CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','optional argument HFORMAT is necessary for CPROGRAM='//TRIM(CPROGRAM)) +END IF +! IF(PRESENT(KLFINPRAR)) THEN ILFINPRAR = KLFINPRAR ELSE @@ -771,7 +786,9 @@ SELECT CASE(TPFILE%CTYPE) CASE DEFAULT IF (TRIM(HMODE)=='READ') THEN - IF (LLFIREAD) THEN + IF (PRESENT(HFORMAT)) THEN + TPFILE%CFORMAT = TRIM(HFORMAT) + ELSE IF (LLFIREAD) THEN TPFILE%CFORMAT = 'LFI' TPFILE%NLFINPRAR = ILFINPRAR ELSE IF (LIOCDF4) THEN @@ -780,7 +797,9 @@ SELECT CASE(TPFILE%CTYPE) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','invalid format for file '//TRIM(HNAME)) END IF ELSE IF (TRIM(HMODE)=='WRITE') THEN - IF (LLFIOUT .AND. LIOCDF4) THEN + IF (PRESENT(HFORMAT)) THEN + TPFILE%CFORMAT = TRIM(HFORMAT) + ELSE IF (LLFIOUT .AND. LIOCDF4) THEN TPFILE%CFORMAT = 'LFICDF4' TPFILE%NLFINPRAR = ILFINPRAR ELSE IF (LIOCDF4) THEN