diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index d309cb9c157cfe295dcc8d6c038abe39abed3f7b..7740ed8aa007416ee15e215c7061d9ec88ce26f4 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -176,62 +176,51 @@ 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(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='FORMATTED', & - POSITION='REWIND',STATUS='OLD',ACTION=TPFILE%CMODE,MODE='GLOBAL') + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',POSITION='REWIND',STATUS='OLD',MODE='GLOBAL') !Chemistry tabulation files CASE('CHEMTAB') - CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='FORMATTED', & - ACTION=TPFILE%CMODE,MODE='GLOBAL') + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',MODE='GLOBAL') !GPS files CASE('GPS') - CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='FORMATTED', & - ACTION=TPFILE%CMODE,MODE='SPECIFIC') + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',MODE='SPECIFIC') !Meteo files CASE('METEO') - CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='UNFORMATTED', & - ACTION=TPFILE%CMODE,MODE='GLOBAL',RECL=100000000) + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='UNFORMATTED',MODE='GLOBAL',RECL=100000000) !Namelist files CASE('NML') - CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & - DELIM='QUOTE',MODE='GLOBAL') + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,DELIM='QUOTE',MODE='GLOBAL') !OUTPUTLISTING files CASE('OUTPUTLISTING') - CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='FORMATTED', & - ACTION=TPFILE%CMODE,MODE='GLOBAL') + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',MODE='GLOBAL') !SURFACE_DATA files CASE('SURFACE_DATA') IF (TPFILE%CFORM=='FORMATTED') THEN - CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & - FORM=TPFILE%CFORM,MODE='GLOBAL') + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM=TPFILE%CFORM,MODE='GLOBAL') ELSE IF (TPFILE%CACCESS=='DIRECT') THEN - 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') + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM=TPFILE%CFORM,ACCESS=TPFILE%CACCESS,RECL=TPFILE%NRECL,MODE='GLOBAL') ELSE - CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & - FORM=TPFILE%CFORM,MODE='GLOBAL') + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM=TPFILE%CFORM,MODE='GLOBAL') END IF !Text files CASE('TXT') IF(TPFILE%NRECL>0) THEN - 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') + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',POSITION=HPOSITION,STATUS=HSTATUS,RECL=TPFILE%NRECL,MODE='GLOBAL') ELSE - CALL OPEN_ll(TPFILE,UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & - FORM='FORMATTED',POSITION=HPOSITION,STATUS=HSTATUS,MODE='GLOBAL') + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',POSITION=HPOSITION,STATUS=HSTATUS,MODE='GLOBAL') END IF @@ -240,8 +229,7 @@ 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(TZFILE_DES,UNIT=TZFILE_DES%NLU,FILE=TRIM(TPFILE%CNAME)//'.des',FORM='FORMATTED',ACTION=TZFILE_DES%CMODE, & - DELIM='QUOTE',IOSTAT=IRESP,RECL=1024*8,OPARALLELIO=OPARALLELIO) + CALL OPEN_ll(TZFILE_DES,FORM='FORMATTED',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 @@ -355,7 +343,7 @@ LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO ! Local variables ! INTEGER :: IFTYPE ! type of FM-file -INTEGER :: IROWF,IRESP,INUMBR,IFMFNL +INTEGER :: IROWF,IRESP,IFMFNL CHARACTER(LEN=7) :: YACTION ! Action upon the file ('READ' or 'WRITE') CHARACTER(LEN=28) :: YFILEM ! name of the file CHARACTER(LEN=JPFINL) :: YFNDES,YFNLFI @@ -429,18 +417,14 @@ YFNLFI=ADJUSTL(TRIM(YFILEM)//'.lfi') ALLOCATE(TZPARA) TZPARA%FITYP = TPFILE%NLFITYPE -!!$CALL OPEN_ll(UNIT=INUMBR,FILE=YFNLFI,STATUS="UNKNOWN",MODE& -!!$ & ='DISTRIBUTED', LFIPAR=TZPARA, ACTION=YACTION, IOSTAT=IRESP) - SELECT CASE (YACTION) CASE('READ') INB_PROCIO = NB_PROCIO_R CASE('WRITE') INB_PROCIO = NB_PROCIO_W END SELECT -CALL OPEN_ll(UNIT=INUMBR,FILE=YFILEM,STATUS="UNKNOWN",MODE& - & ='IO_ZSPLIT', LFIPAR=TZPARA, ACTION=YACTION, IOSTAT=IRESP,KNB_PROCIO=INB_PROCIO,KMELEV=IMELEV,OPARALLELIO=GPARALLELIO,& - TPFILE=TPFILE) +CALL OPEN_ll(TPFILE,STATUS="UNKNOWN",MODE='IO_ZSPLIT',LFIPAR=TZPARA,IOSTAT=IRESP, & + KNB_PROCIO=INB_PROCIO,KMELEV=IMELEV,OPARALLELIO=GPARALLELIO) IF (IRESP /= 0) GOTO 1000 @@ -489,7 +473,7 @@ IF (ISP == TZFDLFI%OWNER) THEN GNAMFI = .TRUE. GFATER = .TRUE. ! - INUMBR8 = INUMBR + INUMBR8 = TPFILE%NLU GNAMFI8 = GNAMFI GFATER8 = GFATER GSTATS8 = GSTATS diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90 index 154e337602b72990a17eee944237f13fa171de32..1a87a52f1c2da368af4e5d7d4e94951408930754 100644 --- a/src/LIB/SURCOUCHE/src/mode_io.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io.f90 @@ -205,8 +205,6 @@ CONTAINS SUBROUTINE OPEN_ll(& TPFILE, & - UNIT, & - FILE, & MODE, & LFIPAR, & COMM, & @@ -217,7 +215,6 @@ CONTAINS RECL, & BLANK, & POSITION,& - ACTION, & DELIM, & PAD, & KNB_PROCIO,& @@ -231,8 +228,6 @@ CONTAINS 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 TYPE(LFIPARAM), POINTER, OPTIONAL :: LFIPAR CHARACTER(len=*),INTENT(IN), OPTIONAL :: STATUS @@ -242,7 +237,6 @@ CONTAINS INTEGER, INTENT(IN), OPTIONAL :: RECL CHARACTER(len=*),INTENT(IN), OPTIONAL :: BLANK CHARACTER(len=*),INTENT(IN), OPTIONAL :: POSITION - CHARACTER(len=*),INTENT(IN) :: ACTION CHARACTER(len=*),INTENT(IN), OPTIONAL :: DELIM CHARACTER(len=*),INTENT(IN), OPTIONAL :: PAD INTEGER, INTENT(IN), OPTIONAL :: COMM @@ -292,11 +286,7 @@ CONTAINS LOGICAL :: GPARALLELIO TYPE(TFILEDATA),POINTER :: TZSPLITFILE - IF ( PRESENT(FILE) ) THEN - CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','opening '//TRIM(FILE)//' for '//TRIM(ACTION)) - ELSE - CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','called for '//TRIM(ACTION)//' (filename not provided)') - ENDIF + CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','opening '//TRIM(TPFILE%CNAME)//' for '//TRIM(TPFILE%CMODE)) ! IF ( PRESENT(OPARALLELIO) ) THEN GPARALLELIO = OPARALLELIO @@ -328,25 +318,25 @@ CONTAINS YMODE = 'GLOBAL' ! Default Mode END IF - YACTION = ACTION + YACTION = TPFILE%CMODE YACTION = UPCASE(TRIM(ADJUSTL(YACTION))) IF (YACTION /= "READ" .AND. YACTION /= "WRITE") THEN IOSTAT = 99 - UNIT = -1 + TPFILE%NLU = -1 WRITE(ISTDERR,*) 'Erreur OPEN_ll : ACTION=',YACTION,' non supportee' RETURN END IF IF (.NOT. ANY(YMODE == (/'GLOBAL ','SPECIFIC ','DISTRIBUTED' , 'IO_ZSPLIT '/))) THEN IOSTAT = 99 - UNIT = -1 + TPFILE%NLU = -1 WRITE(ISTDERR,*) 'OPEN_ll error : MODE UNKNOWN' RETURN END IF !JUAN SX5 : probleme function retournant un pointer - !IF (.NOT. ASSOCIATED(GETFD(FILE))) THEN - TZJUAN=>GETFD(FILE) + !IF (.NOT. ASSOCIATED(GETFD(TPFILE%CNAME))) THEN + TZJUAN=>GETFD(TPFILE%CNAME) IF (.NOT. ASSOCIATED(TZJUAN)) THEN !JUAN SX5 : probleme function retournant un pointer !! File is not already opened : GOOD @@ -355,8 +345,8 @@ CONTAINS ELSE !! Error : File already opened IOSTAT = 99 - UNIT = -1 - WRITE(ISTDERR,*) 'OPEN_ll error : File', FILE, 'already opened' + TPFILE%NLU = -1 + WRITE(ISTDERR,*) 'OPEN_ll error : File', TPFILE%CNAME, 'already opened' RETURN END IF @@ -364,13 +354,13 @@ CONTAINS !!$ & ICOMM, IERR) !!$ IF (IGLOBALERR /= NOERROR) THEN !!$ IOSTAT = GLOBALERR -!!$ UNIT = -1 +!!$ TPFILE%NLU = -1 !!$ RETURN !!$ END IF - TZFD%NAME = FILE + TZFD%NAME = TPFILE%CNAME TZFD%MODE = YMODE NULLIFY(TZFD%PARAM) @@ -459,7 +449,7 @@ CONTAINS ACTION=YACTION) ELSE IF (YFORM=="FORMATTED") THEN - IF (ACTION=='READ') THEN + IF (YACTION=='READ') THEN OPEN(UNIT=TZFD%FLU, & FILE=TRIM(TZFD%NAME),& STATUS=YSTATUS, & @@ -566,7 +556,7 @@ CONTAINS RECL=YRECL, & ACTION=YACTION) ELSE - IF (ACTION=='READ') THEN + IF (YACTION=='READ') THEN OPEN(UNIT=TZFD%FLU, & FILE=TRIM(TZFD%NAME)//SUFFIX(".P"), & STATUS=YSTATUS, & @@ -630,7 +620,7 @@ CONTAINS CASE('IO_ZSPLIT') TZFD%OWNER = ISIOP - TZFD%NAME = TRIM(FILE)//".lfi" + TZFD%NAME = TRIM(TPFILE%CNAME)//".lfi" IF (PRESENT(KNB_PROCIO)) THEN TZFD%NB_PROCIO = KNB_PROCIO ELSE @@ -657,7 +647,7 @@ CONTAINS DO ifile=0,TZFD%NB_PROCIO-1 irank_procio = 1 + io_rank(ifile,ISNPROC,TZFD%NB_PROCIO) write(cfile ,'(".Z",i3.3)') ifile+1 - YFILE_IOZ = TRIM(FILE)//cfile//".lfi" + YFILE_IOZ = TRIM(TPFILE%CNAME)//cfile//".lfi" TZFD_IOZ =>NEWFD() TZFD_IOZ%NAME = YFILE_IOZ TZFD_IOZ%MODE = 'IO_ZSPLIT' @@ -680,10 +670,10 @@ CONTAINS IF (YACTION == 'READ' .AND. .NOT. LLFIREAD) THEN ! Open NetCDF File for reading TZFD_IOZ%CDF => NEWIOCDF() - CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','NF90_OPEN(IO_ZSPLIT) for '//TRIM(FILE)//cfile//'.nc') - IOSCDF = NF90_OPEN(TRIM(FILE)//cfile//".nc", NF90_NOWRITE, TZFD_IOZ%CDF%NCID) + CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','NF90_OPEN(IO_ZSPLIT) for '//TRIM(TPFILE%CNAME)//cfile//'.nc') + IOSCDF = NF90_OPEN(TRIM(TPFILE%CNAME)//cfile//".nc", NF90_NOWRITE, TZFD_IOZ%CDF%NCID) IF (IOSCDF /= NF90_NOERR) THEN - PRINT *, 'Error in opening (NF90_OPEN) ', TRIM(FILE)//cfile//'.nc', ' : ', NF90_STRERROR(IOSCDF) + PRINT *, 'Error in opening (NF90_OPEN) ', TRIM(TPFILE%CNAME)//cfile//'.nc', ' : ', NF90_STRERROR(IOSCDF) STOP ELSE IOS = 0 @@ -694,11 +684,11 @@ CONTAINS ! YACTION == 'WRITE' ! Create NetCDF File for writing TZFD_IOZ%CDF => NEWIOCDF() - CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','NF90_CREATE(IO_ZSPLIT) for '//TRIM(FILE)//cfile//'.nc') - IOSCDF = NF90_CREATE(TRIM(FILE)//cfile//".nc", & + CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','NF90_CREATE(IO_ZSPLIT) for '//TRIM(TPFILE%CNAME)//cfile//'.nc') + IOSCDF = NF90_CREATE(TRIM(TPFILE%CNAME)//cfile//".nc", & &IOR(NF90_CLOBBER,NF90_NETCDF4), TZFD_IOZ%CDF%NCID) IF (IOSCDF /= NF90_NOERR) THEN - PRINT *, 'Error in opening (NF90_CREATE) ', TRIM(FILE)//cfile//'.nc', ' : ', NF90_STRERROR(IOSCDF) + PRINT *, 'Error in opening (NF90_CREATE) ', TRIM(TPFILE%CNAME)//cfile//'.nc', ' : ', NF90_STRERROR(IOSCDF) STOP ELSE IOS = 0 @@ -778,7 +768,7 @@ print *,'PW: TPFILE%CNAME=',TPFILE%CNAME,'master,multimasters=',TPFILE%LMASTER,T !!$ END IF IOSTAT = IOS - UNIT = TZFD%FLU + TPFILE%NLU = TZFD%FLU CONTAINS FUNCTION SUFFIX(HEXT)