From cc05f89a7cf8363629de52ce60badf09b876e02e Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Wed, 27 Feb 2019 16:49:38 +0100 Subject: [PATCH] Philippe 27/02/2019: IO: use recursive calls to open/close DES files --- src/LIB/SURCOUCHE/src/mode_fm.f90 | 44 ++++++++++++++++--------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index 53c1fe8ea..2292f92d1 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -20,6 +20,7 @@ ! P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines ! (nsubfiles_ioz is now determined in IO_FILE_ADD2LIST) ! P. Wautelet 19/02/2019: simplification/restructuration/cleaning of open/close subroutines (TBCto be continued) +! P. Wautelet 27/02/2019: use recursive calls to open/close DES files !----------------------------------------------------------------- MODULE MODE_FM @@ -50,12 +51,12 @@ IF ( IP == 1 ) PRINT *,'INIT L1D,L2D,LPACK = ',L1D,L2D,LPACK END SUBROUTINE SET_FMPACK_ll -SUBROUTINE IO_FILE_OPEN_ll(TPFILE,KRESP,HPOSITION,HSTATUS,HPROGRAM_ORIG) +recursive SUBROUTINE IO_FILE_OPEN_ll(TPFILE,KRESP,HPOSITION,HSTATUS,HPROGRAM_ORIG) ! USE MODD_CONF, ONLY: CPROGRAM USE MODD_IO_ll, ONLY: LIO_NO_WRITE, TFILEDATA ! -USE MODE_IO_ll, ONLY: OPEN_ll +USE MODE_IO_ll, ONLY: GCONFIO, OPEN_ll USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST, IO_FILE_FIND_BYNAME ! TYPE(TFILEDATA), POINTER, INTENT(INOUT) :: TPFILE ! File structure @@ -74,7 +75,8 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_OPEN_ll','opening '//TRIM(TPFILE%CNAME) IF (.NOT.ASSOCIATED(TPFILE)) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','TPFILE is not associated') ! IF ( LIO_NO_WRITE .AND. TPFILE%CMODE == 'WRITE' .AND. TPFILE%CTYPE/='OUTPUTLISTING') THEN - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_OPEN_ll','opening file '//TRIM(TPFILE%CNAME)//' in write mode but LIO_NO_WRITE is set') + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_OPEN_ll','opening file '//TRIM(TPFILE%CNAME)// & + ' in write mode but LIO_NO_WRITE is set') END IF ! TZFILE_DES => NULL() @@ -105,6 +107,11 @@ SELECT CASE(TPFILE%CTYPE) CALL OPEN_ll(TPFILE,IRESP,HMODE='GLOBAL') + !DES files + CASE('DES') + CALL OPEN_ll(TPFILE,IRESP,HDELIM='QUOTE') + + !GPS files CASE('GPS') CALL OPEN_ll(TPFILE,IRESP,HMODE='SPECIFIC') @@ -135,19 +142,22 @@ SELECT CASE(TPFILE%CTYPE) CALL OPEN_ll(TPFILE,IRESP,HPOSITION=HPOSITION,HSTATUS=HSTATUS,HMODE='GLOBAL') - CASE DEFAULT + !MesoNH files + !Remark: 'MNH' is more general than MNHBACKUP and could be in fact a MNHBACKUP file + CASE ('MNH', 'MNHBACKUP', 'MNHDIACHRONIC', 'MNHDIAG', 'MNHOUTPUT', 'PGD') + if (.not.GCONFIO) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','SET_CONFIO_ll must be called before IO_FILE_OPEN_ll') !Do not open '.des' file if OUTPUT IF(TPFILE%CTYPE/='MNHOUTPUT' .AND. CPROGRAM/='LFICDF') THEN - CALL IO_FILE_ADD2LIST(TZFILE_DES,TRIM(TPFILE%CNAME)//'.des','DES',TPFILE%CMODE,TPDATAFILE=TPFILE,OOLD=.TRUE.) !OOLD=T because the file may already be in the list - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_OPEN_ll','OPEN_ll for '//TRIM(TPFILE%CNAME)//'.des') - CALL OPEN_ll(TZFILE_DES,IRESP,HDELIM='QUOTE') - TZFILE_DES%LOPENED = .TRUE. - TZFILE_DES%NOPEN_CURRENT = TZFILE_DES%NOPEN_CURRENT + 1 - TZFILE_DES%NOPEN = TZFILE_DES%NOPEN + 1 + !OOLD=T because the file may already be in the list + CALL IO_FILE_ADD2LIST(TZFILE_DES,TRIM(TPFILE%CNAME)//'.des','DES',TPFILE%CMODE,TPDATAFILE=TPFILE,OOLD=.TRUE.) + CALL IO_FILE_OPEN_ll(TZFILE_DES,HPROGRAM_ORIG=HPROGRAM_ORIG) ENDIF ! CALL FMOPEN_ll(TPFILE,IRESP,HPROGRAM_ORIG=HPROGRAM_ORIG) + + CASE DEFAULT + call print_msg(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','invalid type '//trim(tpfile%ctype)//' for file '//trim(tpfile%cname)) END SELECT ! IF (PRESENT(KRESP)) KRESP = IRESP @@ -266,7 +276,7 @@ KRESP=IRESP END SUBROUTINE FMOPEN_ll -SUBROUTINE IO_FILE_CLOSE_ll(TPFILE,KRESP,HPROGRAM_ORIG) +recursive SUBROUTINE IO_FILE_CLOSE_ll(TPFILE,KRESP,HPROGRAM_ORIG) ! USE MODD_CONF, ONLY: CPROGRAM USE MODD_IO_ll, ONLY: TFILEDATA @@ -310,7 +320,7 @@ IF (TPFILE%NOPEN_CURRENT>1) THEN END IF ! SELECT CASE(TPFILE%CTYPE) - CASE('CHEMINPUT','CHEMTAB','GPS','METEO','NML','OUTPUTLISTING','SURFACE_DATA','TXT') + CASE('CHEMINPUT','CHEMTAB','DES','GPS','METEO','NML','OUTPUTLISTING','SURFACE_DATA','TXT') CALL CLOSE_ll(TPFILE,IRESP) ! TPFILE%NLU = -1 @@ -320,15 +330,7 @@ SELECT CASE(TPFILE%CTYPE) IF(TPFILE%CTYPE/='OUTPUT' .AND. CPROGRAM/='LFICDF') THEN CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//'.des',TZFILE_DES,IRESP) IF (IRESP/=0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_CLOSE_ll','file '//TRIM(TPFILE%CNAME)//'.des not in filelist') - ! - TZFILE_DES%NOPEN_CURRENT = TZFILE_DES%NOPEN_CURRENT - 1 - TZFILE_DES%NCLOSE = TZFILE_DES%NCLOSE + 1 - ! - IF (TZFILE_DES%NOPEN_CURRENT==0) THEN - CALL CLOSE_ll(TZFILE_DES,IRESP) - TZFILE_DES%LOPENED = .FALSE. - TZFILE_DES%NLU = -1 - END IF + CALL IO_FILE_CLOSE_ll(TZFILE_DES,KRESP=IRESP,HPROGRAM_ORIG=HPROGRAM_ORIG) ENDIF ! #if defined(MNH_IOCDF4) -- GitLab