From 3e81e9a00b95915b8bbe5ef9864e5cedf5266565 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Fri, 9 Feb 2018 13:01:48 +0100 Subject: [PATCH] Philippe 09/03/2018: IO/LFI: add NFILENAMELGTMAXLFI parameter and use it to force size in LFI file of MY_NAME and DAD_NAME This is done for backward compatibility. --- src/LIB/SURCOUCHE/src/fmreadwrit.f90 | 21 +++++++++++++++++++++ src/LIB/SURCOUCHE/src/fmwrit_ll.f90 | 16 +++++++++++----- src/MNH/modd_nesting.f90 | 2 +- src/MNH/modd_parameters.f90 | 4 +++- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/fmreadwrit.f90 b/src/LIB/SURCOUCHE/src/fmreadwrit.f90 index 9a208a115..abdabfc4e 100644 --- a/src/LIB/SURCOUCHE/src/fmreadwrit.f90 +++ b/src/LIB/SURCOUCHE/src/fmreadwrit.f90 @@ -492,6 +492,9 @@ END SUBROUTINE IO_READ_FIELD_LFI_L1 ! ! SUBROUTINE IO_READ_FIELD_LFI_C0(TPFILE,TPFIELD,HFIELD,KRESP) +! +USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAXLFI +! USE MODE_MSG ! IMPLICIT NONE @@ -514,6 +517,14 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_C0',TRIM(TPFILE%CNAME)//': re ! ILENG = LEN(HFIELD) ! +!Special treatment for MY_NAME and DAD_NAME fields (for backward compatibility) +IF (TPFIELD%CMNHNAME=='MY_NAME' .OR. TPFIELD%CMNHNAME=='DAD_NAME') THEN + ILENG = NFILENAMELGTMAXLFI + IF (LEN(HFIELD)<NFILENAMELGTMAXLFI) & + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_LFI_C0',TRIM(TPFILE%CNAME)// & + ': LEN(HFIELD)<NFILENAMELGTMAXLFI') +END IF +! CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD) ! IF (GGOOD) THEN @@ -1269,6 +1280,8 @@ END SUBROUTINE IO_WRITE_FIELD_LFI_L1 ! SUBROUTINE IO_WRITE_FIELD_LFI_C0(TPFILE,TPFIELD,HFIELD,KRESP) ! +USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAXLFI +! IMPLICIT NONE ! !* 0.1 Declarations of arguments @@ -1290,6 +1303,14 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_C0','writing '//TRIM(TPFIELD ILENG=LEN(HFIELD) IF (ILENG==0) ILENG=1 ! +!Special treatment for MY_NAME and DAD_NAME fields (for backward compatibility) +IF (TPFIELD%CMNHNAME=='MY_NAME' .OR. TPFIELD%CMNHNAME=='DAD_NAME') THEN + ILENG = NFILENAMELGTMAXLFI + IF (LEN_TRIM(HFIELD)>ILENG) & + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_C0',TRIM(TPFILE%CNAME)// & + ': MY_NAME was truncated from '//TRIM(HFIELD)//' to '//HFIELD(1:NFILENAMELGTMAXLFI)) +END IF +! CALL WRITE_PREPARE(TPFIELD,ILENG,IWORK,ITOTAL,IRESP) ! IF (IRESP==0) THEN diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 index 6f2588b11..1376f0608 100644 --- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 @@ -297,12 +297,13 @@ CONTAINS SUBROUTINE IO_WRITE_HEADER(TPFILE,HDAD_NAME) ! USE MODD_CONF - USE MODD_CONF_n, ONLY : CSTORAGE_TYPE + USE MODD_CONF_n, ONLY: CSTORAGE_TYPE + USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAXLFI ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! File structure CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: HDAD_NAME ! - CHARACTER(LEN=28) :: YDAD_NAME !Necessary to use a character string of the right length for LFI files + CHARACTER(LEN=:),ALLOCATABLE :: YDAD_NAME ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER','called for file '//TRIM(TPFILE%CNAME)) ! @@ -321,16 +322,21 @@ CONTAINS CALL IO_WRITE_FIELD(TPFILE,'PROGRAM', CPROGRAM) CALL IO_WRITE_FIELD(TPFILE,'STORAGE_TYPE',CSTORAGE_TYPE) CALL IO_WRITE_FIELD(TPFILE,'MY_NAME', TPFILE%CNAME) + ! IF ( ASSOCIATED(TPFILE%TDADFILE) ) THEN - YDAD_NAME = TPFILE%TDADFILE%CNAME + ALLOCATE(CHARACTER(LEN=MAX(NFILENAMELGTMAXLFI,LEN_TRIM(TPFILE%TDADFILE%CNAME))) :: YDAD_NAME) + YDAD_NAME(:) = TPFILE%TDADFILE%CNAME ELSE IF (PRESENT(HDAD_NAME)) THEN - YDAD_NAME = HDAD_NAME + ALLOCATE(CHARACTER(LEN=MAX(NFILENAMELGTMAXLFI,LEN_TRIM(HDAD_NAME))) :: YDAD_NAME) + YDAD_NAME(:) = HDAD_NAME ELSE CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER',TRIM(TPFILE%CNAME)// & ': TPFILE%TDADFILE not associated and HDAD_NAME not provided') - YDAD_NAME = ' ' + ALLOCATE(CHARACTER(LEN=NFILENAMELGTMAXLFI) :: YDAD_NAME) + YDAD_NAME(:) = ' ' ENDIF CALL IO_WRITE_FIELD(TPFILE,'DAD_NAME',YDAD_NAME) + DEALLOCATE(YDAD_NAME) ! END SUBROUTINE IO_WRITE_HEADER diff --git a/src/MNH/modd_nesting.f90 b/src/MNH/modd_nesting.f90 index edb8b45ed..36db23618 100644 --- a/src/MNH/modd_nesting.f90 +++ b/src/MNH/modd_nesting.f90 @@ -68,7 +68,7 @@ INTEGER,SAVE, DIMENSION(JPMODELMAX,JPMODELMAX) :: NMSG_END ! timestep END ! MeSsaGes concerning INTEGER,SAVE, DIMENSION(JPMODELMAX,JPMODELMAX) :: NMSG_AVR_END ! AVeRage END ! -CHARACTER(LEN=28),SAVE, DIMENSION(JPMODELMAX) :: CMY_NAME,CDAD_NAME +CHARACTER(LEN=NFILENAMELGTMAX),SAVE, DIMENSION(JPMODELMAX) :: CMY_NAME,CDAD_NAME ! names of the initial FM-Files ! then generic names of output FM-Files ! of each model "m" diff --git a/src/MNH/modd_parameters.f90 b/src/MNH/modd_parameters.f90 index 19ecd626f..7970cb145 100644 --- a/src/MNH/modd_parameters.f90 +++ b/src/MNH/modd_parameters.f90 @@ -83,7 +83,9 @@ INTEGER, PARAMETER :: JPOUTVARMAX = 192 ! Maximum allowed number of variables in INTEGER, PARAMETER :: NMNHNAMELGTMAX = 32 ! Maximum length of a MNH variable name INTEGER, PARAMETER :: NSTDNAMELGTMAX = 64 ! Maximum length of the standard name of a variable (CF convention) ! -INTEGER, PARAMETER :: NFILENAMELGTMAX = 32 ! Maximum length of a file name +INTEGER, PARAMETER :: NFILENAMELGTMAX = 32 ! Maximum length of a file name (must be at least NFILENAMELGTMAXLFI) +INTEGER, PARAMETER :: NFILENAMELGTMAXLFI = 28 ! Maximum length of a file name in LFI file (this is necessary + ! to keep backward compatibility), MUST BE 28 ! INTEGER, PARAMETER :: JPLIMACCNMAX = 10 ! Maximum allowed number of CCN modes in LIMA INTEGER, PARAMETER :: JPLIMAIFNMAX = 10 ! Maximum allowed number of IFN modes in LIMA -- GitLab