From e8f31bffdaa9134b12bd39a7936c78803114ceaa Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 16 Nov 2017 14:12:41 +0100 Subject: [PATCH] Philippe 16/11/2017: IO: TPFILE is now a mandatory argument for OPEN_ll --- src/LIB/SURCOUCHE/src/mode_fm.f90 | 53 ++++++++++++++----------------- src/LIB/SURCOUCHE/src/mode_io.f90 | 24 +++++++------- 2 files changed, 35 insertions(+), 42 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index bc93c55a7..452f26a95 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -176,67 +176,62 @@ IF (IRESP/=0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_OPEN_ll','file '//TRIM(TP SELECT CASE(TPFILE%CTYPE) !Chemistry input files CASE('CHEMINPUT') - CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='FORMATTED', & - POSITION='REWIND',STATUS='OLD',ACTION=TPFILE%CMODE,MODE='GLOBAL',TPFILE=TPFILE) + CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='FORMATTED', & + POSITION='REWIND',STATUS='OLD',ACTION=TPFILE%CMODE,MODE='GLOBAL') !Chemistry tabulation files CASE('CHEMTAB') - CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='FORMATTED', & - ACTION=TPFILE%CMODE,MODE='GLOBAL',TPFILE=TPFILE) + CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='FORMATTED', & + ACTION=TPFILE%CMODE,MODE='GLOBAL') !GPS files CASE('GPS') - CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='FORMATTED', & - ACTION=TPFILE%CMODE,MODE='SPECIFIC',TPFILE=TPFILE) + CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='FORMATTED', & + ACTION=TPFILE%CMODE,MODE='SPECIFIC') !Meteo files CASE('METEO') - CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='UNFORMATTED', & - ACTION=TPFILE%CMODE,MODE='GLOBAL',RECL=100000000,TPFILE=TPFILE) + CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='UNFORMATTED', & + ACTION=TPFILE%CMODE,MODE='GLOBAL',RECL=100000000) !Namelist files CASE('NML') - CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & - DELIM='QUOTE',MODE='GLOBAL',TPFILE=TPFILE) + CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & + DELIM='QUOTE',MODE='GLOBAL') !OUTPUTLISTING files CASE('OUTPUTLISTING') - CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='FORMATTED', & - ACTION=TPFILE%CMODE,MODE='GLOBAL',TPFILE=TPFILE) + CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='FORMATTED', & + ACTION=TPFILE%CMODE,MODE='GLOBAL') !SURFACE_DATA files CASE('SURFACE_DATA') IF (TPFILE%CFORM=='FORMATTED') THEN - CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & - FORM=TPFILE%CFORM, & - MODE='GLOBAL',TPFILE=TPFILE) + CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & + FORM=TPFILE%CFORM,MODE='GLOBAL') ELSE IF (TPFILE%CACCESS=='DIRECT') THEN - CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & - FORM=TPFILE%CFORM,ACCESS=TPFILE%CACCESS,RECL=TPFILE%NRECL, & - MODE='GLOBAL',TPFILE=TPFILE) + CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & + FORM=TPFILE%CFORM,ACCESS=TPFILE%CACCESS,RECL=TPFILE%NRECL,MODE='GLOBAL') ELSE - CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & - FORM=TPFILE%CFORM, & - MODE='GLOBAL',TPFILE=TPFILE) + CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & + FORM=TPFILE%CFORM,MODE='GLOBAL') END IF !Text files CASE('TXT') IF(TPFILE%NRECL>0) THEN - CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & - FORM='FORMATTED',POSITION=HPOSITION,STATUS=HSTATUS, & - RECL=TPFILE%NRECL,MODE='GLOBAL',TPFILE=TPFILE) + CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & + FORM='FORMATTED',POSITION=HPOSITION,STATUS=HSTATUS,RECL=TPFILE%NRECL,MODE='GLOBAL') ELSE - CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & - FORM='FORMATTED',POSITION=HPOSITION,STATUS=HSTATUS, & - MODE='GLOBAL',TPFILE=TPFILE) + CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & + FORM='FORMATTED',POSITION=HPOSITION,STATUS=HSTATUS,MODE='GLOBAL') END IF @@ -245,8 +240,8 @@ SELECT CASE(TPFILE%CTYPE) IF(TPFILE%CTYPE/='OUTPUT') THEN CALL IO_FILE_ADD2LIST(TZFILE_DES,TRIM(TPFILE%CNAME)//'.des','DES',TPFILE%CMODE,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(UNIT=TZFILE_DES%NLU,FILE=TRIM(TPFILE%CNAME)//'.des',FORM='FORMATTED',ACTION=TPFILE%CMODE,DELIM& - & ='QUOTE',IOSTAT=IRESP,RECL=1024*8,OPARALLELIO=OPARALLELIO,TPFILE=TPFILE) + CALL OPEN_ll(TPFILE,UNIT=TZFILE_DES%NLU,FILE=TRIM(TPFILE%CNAME)//'.des',FORM='FORMATTED',ACTION=TPFILE%CMODE, & + DELIM='QUOTE',IOSTAT=IRESP,RECL=1024*8,OPARALLELIO=OPARALLELIO) TZFILE_DES%LOPENED = .TRUE. TZFILE_DES%NOPEN_CURRENT = TZFILE_DES%NOPEN_CURRENT + 1 TZFILE_DES%NOPEN = TZFILE_DES%NOPEN + 1 diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90 index 50829cae7..154e33760 100644 --- a/src/LIB/SURCOUCHE/src/mode_io.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io.f90 @@ -203,7 +203,9 @@ CONTAINS END SUBROUTINE INITIO_ll - SUBROUTINE OPEN_ll(UNIT, & + SUBROUTINE OPEN_ll(& + TPFILE, & + UNIT, & FILE, & MODE, & LFIPAR, & @@ -220,8 +222,7 @@ CONTAINS PAD, & KNB_PROCIO,& KMELEV,& - OPARALLELIO,& - TPFILE) + OPARALLELIO) #if defined(MNH_IOCDF4) USE MODD_NETCDF, ONLY:IDCDF_KIND USE MODE_NETCDF @@ -229,6 +230,7 @@ CONTAINS USE MODD_IO_ll USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST, IO_FILE_FIND_BYNAME + TYPE(TFILEDATA), INTENT(INOUT) :: TPFILE INTEGER, INTENT(OUT) :: UNIT !! Different from fortran OPEN CHARACTER(len=*),INTENT(IN), OPTIONAL :: FILE CHARACTER(len=*),INTENT(IN), OPTIONAL :: MODE @@ -249,7 +251,6 @@ CONTAINS INTEGER(KIND=LFI_INT), INTENT(IN), OPTIONAL :: KMELEV LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO !JUANZ - TYPE(TFILEDATA), INTENT(INOUT), OPTIONAL :: TPFILE ! ! local var ! @@ -653,8 +654,6 @@ CONTAINS TZFD%FLU = -1 END IF IF (TZFD%NB_PROCIO .GT. 1 ) THEN - IF (.NOT.PRESENT(TPFILE)) CALL PRINT_MSG(NVERB_WARNING,'IO','OPEN_ll','TPFILE not provided for IO_ZSPLIT case for file '& - //TRIM(FILE)) DO ifile=0,TZFD%NB_PROCIO-1 irank_procio = 1 + io_rank(ifile,ISNPROC,TZFD%NB_PROCIO) write(cfile ,'(".Z",i3.3)') ifile+1 @@ -668,13 +667,11 @@ CONTAINS TZFD_IOZ%FLU = -1 TZFD_IOZ%PARAM =>LFIPAR - IF (PRESENT(TPFILE)) THEN - CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//TRIM(CFILE),TZSPLITFILE,IRESP,OOLD=.FALSE.) + CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//TRIM(CFILE),TZSPLITFILE,IRESP,OOLD=.FALSE.) - IF (IRESP/=0) THEN !File not yet in filelist => add it (nothing to do if already in list) - CALL IO_FILE_ADD2LIST(TZSPLITFILE,TRIM(TPFILE%CNAME)//TRIM(CFILE),TPFILE%CTYPE,TPFILE%CMODE, & - KLFINPRAR=TPFILE%NLFINPRAR,KLFITYPE=TPFILE%NLFITYPE,KLFIVERB=TPFILE%NLFIVERB) - END IF + IF (IRESP/=0) THEN !File not yet in filelist => add it (nothing to do if already in list) + CALL IO_FILE_ADD2LIST(TZSPLITFILE,TRIM(TPFILE%CNAME)//TRIM(CFILE),TPFILE%CTYPE,TPFILE%CMODE, & + KLFINPRAR=TPFILE%NLFINPRAR,KLFITYPE=TPFILE%NLFITYPE,KLFIVERB=TPFILE%NLFIVERB) END IF IF ( irank_procio .EQ. ISP ) THEN @@ -743,7 +740,7 @@ CONTAINS !KNINAR = ININAR8 END IF - IF (PRESENT(TPFILE)) CALL UPDATE_METADATA(TZSPLITFILE) + CALL UPDATE_METADATA(TZSPLITFILE) ENDIF ENDDO @@ -751,6 +748,7 @@ CONTAINS END SELECT +print *,'PW: TPFILE%CNAME=',TPFILE%CNAME,'master,multimasters=',TPFILE%LMASTER,TPFILE%LMULTIMASTERS !PW: not done here because TZFDLFI%CDF not yet set ! CALL UPDATE_METADATA(TPFILE) -- GitLab