diff --git a/src/LIB/SURCOUCHE/src/fmreadwrit.f90 b/src/LIB/SURCOUCHE/src/fmreadwrit.f90 index 9a208a115ffc550e6e59f58b7b45e0aa6bd854ed..abdabfc4eaa17b2f821a6c4a70cd4330ceef7c51 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 6f2588b1149edea6743ed12103d007a361ed7982..1376f06080cbe071d47db0fe1f6bcae632ef4bbf 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 edb8b45ed0b4c06eed8c5ce2b4f58bbdaf3ac8ef..36db2361845cac3491967686dc1f5a3715cffccb 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 19ecd626f5f13720a0e9a27b6db511053c737f52..7970cb1450cefd2de714c24ed6b1474e38a33295 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