From 8077673d354eeb9fb4736f94211f4e8f53111f46 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Wed, 6 Feb 2019 13:56:23 +0100 Subject: [PATCH] Philippe 06/02/2019: IO: simplify OPEN_ll and do somme assignments at a more logical place --- src/LIB/SURCOUCHE/src/modd_io.f90 | 2 +- src/LIB/SURCOUCHE/src/mode_fm.f90 | 40 +++--- src/LIB/SURCOUCHE/src/mode_io.f90 | 132 +++++------------- .../SURCOUCHE/src/mode_io_manage_struct.f90 | 28 +++- 4 files changed, 77 insertions(+), 125 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index 62a02bf94..48a8f51fb 100644 --- a/src/LIB/SURCOUCHE/src/modd_io.f90 +++ b/src/LIB/SURCOUCHE/src/modd_io.f90 @@ -112,7 +112,7 @@ TYPE TFILEDATA INTEGER :: NLU = -1 !Logical unit number INTEGER :: NRECL = -1 !Fortran RECL (record length) CHARACTER(LEN=11) :: CFORM = "UNKNOWN" !Fortran FORM (FORMATTED/UNFORMATTED) - CHARACTER(LEN=10) :: CACCESS = "UNKNOWN" !Fortran ACCESS (DIRECT/SEQUENTIAL) + CHARACTER(LEN=10) :: CACCESS = "UNKNOWN" !Fortran ACCESS (DIRECT/SEQUENTIAL/STREAM) ! TYPE(TFILEDATA),POINTER :: TDADFILE => NULL() !Corresponding dad file TYPE(TFILEDATA),POINTER :: TDESFILE => NULL() !Corresponding .des file diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index aad356646..f8d071b9f 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -13,6 +13,8 @@ ! of NNCID and NLFIFLU to the nc4 and lfi subroutines ! Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll ! to allow to disable writes (for bench purposes) +! P. Wautelet 06/02/2019: simplify OPEN_ll and do somme assignments at a more logical place +! P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST !----------------------------------------------------------------- MODULE MODE_FM @@ -95,22 +97,22 @@ 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,IOSTAT=IRESP,FORM='FORMATTED',POSITION='REWIND',STATUS='OLD',MODE='GLOBAL') + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,POSITION='REWIND',STATUS='OLD',MODE='GLOBAL') !Chemistry tabulation files CASE('CHEMTAB') - CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',MODE='GLOBAL') + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,MODE='GLOBAL') !GPS files CASE('GPS') - CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',MODE='SPECIFIC') + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,MODE='SPECIFIC') !Meteo files CASE('METEO') - CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='UNFORMATTED',MODE='GLOBAL',RECL=100000000) + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,MODE='GLOBAL') !Namelist files @@ -120,27 +122,17 @@ SELECT CASE(TPFILE%CTYPE) !OUTPUTLISTING files CASE('OUTPUTLISTING') - CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',MODE='GLOBAL') + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,MODE='GLOBAL') !SURFACE_DATA files CASE('SURFACE_DATA') - IF (TPFILE%CFORM=='FORMATTED') THEN - CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM=TPFILE%CFORM,MODE='GLOBAL') - ELSE IF (TPFILE%CACCESS=='DIRECT') THEN - CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM=TPFILE%CFORM,ACCESS=TPFILE%CACCESS,RECL=TPFILE%NRECL,MODE='GLOBAL') - ELSE - CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM=TPFILE%CFORM,MODE='GLOBAL') - END IF + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,MODE='GLOBAL') !Text files CASE('TXT') - IF(TPFILE%NRECL>0) THEN - CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',POSITION=HPOSITION,STATUS=HSTATUS,RECL=TPFILE%NRECL,MODE='GLOBAL') - ELSE - CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',POSITION=HPOSITION,STATUS=HSTATUS,MODE='GLOBAL') - END IF + CALL OPEN_ll(TPFILE,IOSTAT=IRESP,POSITION=HPOSITION,STATUS=HSTATUS,MODE='GLOBAL') CASE DEFAULT @@ -148,7 +140,7 @@ SELECT CASE(TPFILE%CTYPE) IF(TPFILE%CTYPE/='OUTPUT' .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,FORM='FORMATTED',DELIM='QUOTE',IOSTAT=IRESP,RECL=1024*8,OPARALLELIO=OPARALLELIO) + CALL OPEN_ll(TZFILE_DES,IOSTAT=IRESP,DELIM='QUOTE',OPARALLELIO=OPARALLELIO) TZFILE_DES%LOPENED = .TRUE. TZFILE_DES%NOPEN_CURRENT = TZFILE_DES%NOPEN_CURRENT + 1 TZFILE_DES%NOPEN = TZFILE_DES%NOPEN + 1 @@ -221,7 +213,8 @@ ENDIF CASE('WRITE') INB_PROCIO = NB_PROCIO_W END SELECT -CALL OPEN_ll(TPFILE,STATUS="UNKNOWN",MODE='IO_ZSPLIT',IOSTAT=IRESP, & + +CALL OPEN_ll(TPFILE,IOSTAT=IRESP,MODE='IO_ZSPLIT', & KNB_PROCIO=INB_PROCIO,OPARALLELIO=GPARALLELIO,HPROGRAM_ORIG=HPROGRAM_ORIG) IF (IRESP /= 0) GOTO 1000 @@ -459,7 +452,7 @@ USE MODI_SYSTEM_MNH use mode_io_write_nc4, only: io_write_coordvar_nc4 #endif TYPE(TFILEDATA), INTENT(INOUT) :: TPFILE ! File structure -INTEGER, INTENT(OUT), OPTIONAL :: KRESP ! return-code if problems araised +INTEGER, INTENT(OUT) :: KRESP ! return-code if problems araised LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program @@ -523,16 +516,15 @@ IF (TPFILE%LMASTER) THEN CASE(1) YCPIO='MESONH' CASE(2) - PRINT *,'FILE ',YFILEM,' NOT TRANSFERED' + CALL PRINT_MSG(NVERB_INFO,'IO','FMCLOS_ll','file '//TRIM(YFILEM)//' not transferred') GOTO 500 CASE(3:) IRESP=-66 GOTO 500 END SELECT -! WRITE (YCOMMAND,*) YTRANS,' ',YCPIO,' ',YFILEM ICPT=ICPT+1 WRITE (YCOMMAND,'(A," ",A," ",A," >> OUTPUT_TRANSFER",I3.3," 2>&1 &")') TRIM(YTRANS),TRIM(YCPIO),TRIM(YFILEM),ICPT - PRINT *,'YCOMMAND =',YCOMMAND + CALL PRINT_MSG(NVERB_INFO,'IO','FMCLOS_ll','YCOMMAND='//TRIM(YCOMMAND)) CALL SYSTEM_MNH(YCOMMAND) END IF END IF @@ -549,7 +541,7 @@ IF (IRESP.NE.0) THEN CALL PRINT_MSG(NVERB_ERROR,'IO','FMCLOS_ll',TRIM(YFILEM)//': exit with IRESP='//TRIM(YRESP)) END IF -IF (PRESENT(KRESP)) KRESP=IRESP +KRESP=IRESP END SUBROUTINE FMCLOS_ll diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90 index 8c6f81e38..56fa4322e 100644 --- a/src/LIB/SURCOUCHE/src/mode_io.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io.f90 @@ -25,6 +25,7 @@ ! Philippe Wautelet: 10/01/2019: bug: modify some metadata before open calls ! Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll to allow ! to disable writes (for bench purposes) +! P. Wautelet 06/02/2019: simplify OPEN_ll and do somme assignments at a more logical place ! MODULE MODE_IO_ll @@ -142,17 +143,11 @@ CONTAINS SUBROUTINE OPEN_ll(& TPFILE, & + IOSTAT, & MODE, & - COMM, & STATUS, & - ACCESS, & - IOSTAT, & - FORM, & - RECL, & - BLANK, & POSITION,& DELIM, & - PAD, & KNB_PROCIO,& OPARALLELIO, & HPROGRAM_ORIG) @@ -167,17 +162,11 @@ CONTAINS use mode_io_tools, only: io_rank TYPE(TFILEDATA), INTENT(INOUT) :: TPFILE + INTEGER, INTENT(OUT) :: IOSTAT CHARACTER(len=*),INTENT(IN), OPTIONAL :: MODE CHARACTER(len=*),INTENT(IN), OPTIONAL :: STATUS - CHARACTER(len=*),INTENT(IN), OPTIONAL :: ACCESS - INTEGER, INTENT(OUT) :: IOSTAT - CHARACTER(len=*),INTENT(IN), OPTIONAL :: FORM - INTEGER, INTENT(IN), OPTIONAL :: RECL - CHARACTER(len=*),INTENT(IN), OPTIONAL :: BLANK CHARACTER(len=*),INTENT(IN), OPTIONAL :: POSITION CHARACTER(len=*),INTENT(IN), OPTIONAL :: DELIM - CHARACTER(len=*),INTENT(IN), OPTIONAL :: PAD - INTEGER, INTENT(IN), OPTIONAL :: COMM INTEGER, INTENT(IN), OPTIONAL :: KNB_PROCIO LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO CHARACTER(LEN=*),INTENT(IN), OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program @@ -187,19 +176,14 @@ CONTAINS CHARACTER(len=5) :: CFILE INTEGER :: IFILE, IRANK_PROCIO CHARACTER(len=20) :: YSTATUS - CHARACTER(len=20) :: YACCESS - CHARACTER(len=20) :: YFORM INTEGER :: YRECL INTEGER ,PARAMETER :: RECL_DEF = 10000 - CHARACTER(len=20) :: YBLANK CHARACTER(len=20) :: YPOSITION CHARACTER(len=20) :: YDELIM - CHARACTER(len=20) :: YPAD CHARACTER(len=20) :: YACTION CHARACTER(len=20) :: YMODE CHARACTER(LEN=256) :: YIOERRMSG INTEGER :: IOS,IRESP - INTEGER :: ICOMM LOGICAL :: GPARALLELIO TYPE(TFILEDATA),POINTER :: TZSPLITFILE CHARACTER(LEN=:),ALLOCATABLE :: YPREFILENAME !To store the directory + filename @@ -214,11 +198,6 @@ CONTAINS ENDIF IOS = 0 - IF (PRESENT(COMM)) THEN - ICOMM = COMM - ELSE - ICOMM = NMNH_COMM_WORLD ! Default communicator - END IF IF (PRESENT(MODE)) THEN YMODE = MODE @@ -236,7 +215,7 @@ CONTAINS RETURN END IF - IF (.NOT. ANY(YMODE == (/'GLOBAL ','SPECIFIC ','DISTRIBUTED' , 'IO_ZSPLIT '/))) THEN + IF (.NOT. ANY(YMODE == (/'GLOBAL ','SPECIFIC ', 'IO_ZSPLIT '/))) THEN IOSTAT = 99 TPFILE%NLU = -1 CALL PRINT_MSG(NVERB_ERROR,'IO','OPEN_ll','ymode='//TRIM(YMODE)//' not supported') @@ -248,26 +227,13 @@ CONTAINS ELSE YSTATUS='UNKNOWN' ENDIF - IF (PRESENT(ACCESS)) THEN - YACCESS=ACCESS - ELSE - YACCESS='SEQUENTIAL' - ENDIF - IF (PRESENT(FORM)) THEN - YFORM=FORM - ELSE - YFORM='FORMATTED' - ENDIF - IF (PRESENT(RECL)) THEN - YRECL=RECL - ELSE - YRECL=RECL_DEF - ENDIF - IF (PRESENT(BLANK)) THEN - YBLANK=BLANK + + IF (TPFILE%NRECL == -1) THEN + YRECL = RECL_DEF ELSE - YBLANK='NULL' - ENDIF + YRECL = TPFILE%NRECL + END IF + IF (PRESENT(POSITION)) THEN YPOSITION=POSITION ELSE @@ -278,11 +244,6 @@ CONTAINS ELSE YDELIM='NONE' ENDIF - IF (PRESENT(PAD)) THEN - YPAD=PAD - ELSE - YPAD='YES' - ENDIF IF (ALLOCATED(TPFILE%CDIRNAME)) THEN IF(LEN_TRIM(TPFILE%CDIRNAME)>0) THEN @@ -323,64 +284,60 @@ CONTAINS IF (TPFILE%LMASTER) THEN !! I/O processor case !JUAN : 31/03/2000 modif pour acces direct - IF (YACCESS=='STREAM') THEN + IF (TPFILE%CACCESS=='STREAM') THEN OPEN(NEWUNIT=TPFILE%NLU, & FILE=TRIM(YPREFILENAME),& STATUS=YSTATUS, & - ACCESS=YACCESS, & + ACCESS=TPFILE%CACCESS, & IOSTAT=IOS, & IOMSG=YIOERRMSG, & - FORM=YFORM, & + FORM=TPFILE%CFORM, & ACTION=YACTION) - ELSEIF (YACCESS=='DIRECT') THEN + ELSEIF (TPFILE%CACCESS=='DIRECT') THEN OPEN(NEWUNIT=TPFILE%NLU, & FILE=TRIM(YPREFILENAME),& STATUS=YSTATUS, & - ACCESS=YACCESS, & + ACCESS=TPFILE%CACCESS, & IOSTAT=IOS, & IOMSG=YIOERRMSG, & - FORM=YFORM, & + FORM=TPFILE%CFORM, & RECL=YRECL, & ACTION=YACTION) ELSE - IF (YFORM=="FORMATTED") THEN + IF (TPFILE%CFORM=="FORMATTED") THEN IF (YACTION=='READ') THEN OPEN(NEWUNIT=TPFILE%NLU, & FILE=TRIM(YPREFILENAME),& STATUS=YSTATUS, & - ACCESS=YACCESS, & + ACCESS=TPFILE%CACCESS, & IOSTAT=IOS, & IOMSG=YIOERRMSG, & - FORM=YFORM, & + FORM=TPFILE%CFORM, & RECL=YRECL, & - BLANK=YBLANK, & POSITION=YPOSITION, & - ACTION=YACTION, & + ACTION=YACTION) !DELIM=YDELIM, & !Philippe: commented because bug with GCC 5.X - PAD=YPAD) ELSE OPEN(NEWUNIT=TPFILE%NLU, & FILE=TRIM(YPREFILENAME),& STATUS=YSTATUS, & - ACCESS=YACCESS, & + ACCESS=TPFILE%CACCESS, & IOSTAT=IOS, & IOMSG=YIOERRMSG, & - FORM=YFORM, & + FORM=TPFILE%CFORM, & RECL=YRECL, & - BLANK=YBLANK, & POSITION=YPOSITION, & ACTION=YACTION, & - DELIM=YDELIM, & - PAD=YPAD) + DELIM=YDELIM) ENDIF ELSE OPEN(NEWUNIT=TPFILE%NLU, & FILE=TRIM(YPREFILENAME),& STATUS=YSTATUS, & - ACCESS=YACCESS, & + ACCESS=TPFILE%CACCESS, & IOSTAT=IOS, & IOMSG=YIOERRMSG, & - FORM=YFORM, & + FORM=TPFILE%CFORM, & RECL=YRECL, & POSITION=YPOSITION, & ACTION=YACTION) @@ -401,14 +358,14 @@ CONTAINS TPFILE%LMULTIMASTERS = .TRUE. TPFILE%NSUBFILES_IOZ = 0 - IF (ACCESS=='DIRECT') THEN + IF (TPFILE%CACCESS=='DIRECT') THEN OPEN(NEWUNIT=TPFILE%NLU, & FILE=TRIM(YPREFILENAME)//SUFFIX(".P"), & STATUS=YSTATUS, & - ACCESS=YACCESS, & + ACCESS=TPFILE%CACCESS, & IOSTAT=IOS, & IOMSG=YIOERRMSG, & - FORM=YFORM, & + FORM=TPFILE%CFORM, & RECL=YRECL, & ACTION=YACTION) ELSE @@ -416,30 +373,26 @@ CONTAINS OPEN(NEWUNIT=TPFILE%NLU, & FILE=TRIM(YPREFILENAME)//SUFFIX(".P"), & STATUS=YSTATUS, & - ACCESS=YACCESS, & + ACCESS=TPFILE%CACCESS, & IOSTAT=IOS, & IOMSG=YIOERRMSG, & - FORM=YFORM, & + FORM=TPFILE%CFORM, & RECL=YRECL, & - BLANK=YBLANK, & POSITION=YPOSITION, & - ACTION=YACTION, & + ACTION=YACTION) !DELIM=YDELIM, & !Philippe: commented because bug with GCC 5.X - PAD=YPAD) ELSE OPEN(NEWUNIT=TPFILE%NLU, & FILE=TRIM(YPREFILENAME)//SUFFIX(".P"), & STATUS=YSTATUS, & - ACCESS=YACCESS, & + ACCESS=TPFILE%CACCESS, & IOSTAT=IOS, & IOMSG=YIOERRMSG, & - FORM=YFORM, & + FORM=TPFILE%CFORM, & RECL=YRECL, & - BLANK=YBLANK, & POSITION=YPOSITION, & ACTION=YACTION, & - DELIM=YDELIM, & - PAD=YPAD) + DELIM=YDELIM) ENDIF ENDIF @@ -447,19 +400,6 @@ CONTAINS - CASE('DISTRIBUTED') - TPFILE%NMASTER_RANK = ISIOP - TPFILE%LMASTER = (ISP == ISIOP) - TPFILE%LMULTIMASTERS = .FALSE. - TPFILE%NSUBFILES_IOZ = 0 - - IF (.NOT.TPFILE%LMASTER) THEN - !! NON I/O processors case - IOS = 0 - END IF - - - CASE('IO_ZSPLIT') TPFILE%NMASTER_RANK = ISIOP TPFILE%LMASTER = (ISP == ISIOP) @@ -518,7 +458,7 @@ CONTAINS TPFILE%TFILES_IOZ(IFILE)%TFILE => TZSPLITFILE !Done outside of the previous IF to prevent problems with .OUT files - TZSPLITFILE%NMPICOMM = ICOMM + TZSPLITFILE%NMPICOMM = NMNH_COMM_WORLD TZSPLITFILE%NMASTER_RANK = IRANK_PROCIO TZSPLITFILE%LMASTER = (ISP == IRANK_PROCIO) TZSPLITFILE%LMULTIMASTERS = .FALSE. @@ -559,7 +499,7 @@ CONTAINS END SELECT - TPFILE%NMPICOMM = ICOMM + TPFILE%NMPICOMM = NMNH_COMM_WORLD IOSTAT = IOS diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 index 8745773f0..fcaa58292 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 @@ -11,6 +11,8 @@ ! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O ! Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll ! to allow to disable writes (for bench purposes) +! P. Wautelet 06/02/2019: simplify OPEN_ll and do somme assignments at a more logical place +! P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST !----------------------------------------------------------------- MODULE MODE_IO_MANAGE_STRUCT ! @@ -642,7 +644,7 @@ CHARACTER(LEN=*), INTENT(IN) :: HNAME !Filename CHARACTER(LEN=*), INTENT(IN) :: HTYPE !Filetype (backup, output, prepidealcase...) CHARACTER(LEN=*), INTENT(IN) :: HMODE !Opening mode (read, write...) CHARACTER(LEN=*), OPTIONAL,INTENT(IN) :: HFORM !Formatted/unformatted -CHARACTER(LEN=*), OPTIONAL,INTENT(IN) :: HACCESS !Direct/sequential +CHARACTER(LEN=*), OPTIONAL,INTENT(IN) :: HACCESS !Direct/sequential/stream CHARACTER(LEN=*), OPTIONAL,INTENT(IN) :: HFORMAT !Fileformat (NETCDF4, LFI, LFICDF4...) CHARACTER(LEN=*), OPTIONAL,INTENT(IN) :: HDIRNAME !File directory INTEGER(KIND=LFI_INT), OPTIONAL,INTENT(IN) :: KLFINPRAR !Number of predicted articles of the LFI file (non crucial) @@ -713,8 +715,8 @@ IF( PRESENT(HACCESS) .AND. TRIM(HTYPE)/='SURFACE_DATA') & IF(.NOT.PRESENT(HACCESS) .AND. TRIM(HTYPE)=='SURFACE_DATA') & CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','optional argument HACCESS is necessary for '//TRIM(HTYPE)//' files') IF(PRESENT(HACCESS)) THEN - IF(HACCESS/='DIRECT' .AND. HACCESS/='SEQUENTIAL') & - CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','HACCESS should be DIRECT or SEQUENTIAL and not '//TRIM(HACCESS)) + IF(HACCESS/='DIRECT' .AND. HACCESS/='SEQUENTIAL' .AND. HACCESS/='STREAM') & + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','HACCESS should be DIRECT, SEQUENTIAL or STREAM and not '//TRIM(HACCESS)) END IF ! IF (PRESENT(HFORMAT)) THEN @@ -785,6 +787,8 @@ SELECT CASE(TPFILE%CTYPE) CASE('CHEMINPUT') IF (TRIM(HMODE)/='READ') & !Invalid because not (yet) necessary CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME)) + TPFILE%CACCESS = 'SEQUENTIAL' + TPFILE%CFORM = 'FORMATTED' TPFILE%CFORMAT = 'TEXT' @@ -792,12 +796,17 @@ SELECT CASE(TPFILE%CTYPE) CASE('CHEMTAB') IF (TRIM(HMODE)/='READ') & !Invalid because not (yet) necessary CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME)) + TPFILE%CACCESS = 'SEQUENTIAL' + TPFILE%CFORM = 'FORMATTED' TPFILE%CFORMAT = 'TEXT' !DES files CASE('DES') + TPFILE%CACCESS = 'SEQUENTIAL' + TPFILE%CFORM = 'FORMATTED' TPFILE%CFORMAT = 'TEXT' + TPFILE%NRECL = 8*1024 IF (.NOT.PRESENT(TPDATAFILE)) THEN CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','missing TPDATAFILE argument for DES file '//TRIM(HNAME)) ELSE @@ -815,6 +824,8 @@ SELECT CASE(TPFILE%CTYPE) CASE('GPS') IF (TRIM(HMODE)/='WRITE') & !Invalid because not (yet) necessary CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME)) + TPFILE%CACCESS = 'SEQUENTIAL' + TPFILE%CFORM = 'FORMATTED' TPFILE%CFORMAT = 'TEXT' @@ -822,13 +833,18 @@ SELECT CASE(TPFILE%CTYPE) CASE('METEO') IF (TRIM(HMODE)/='WRITE') & !Invalid because not (yet) necessary CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME)) + TPFILE%CACCESS = 'SEQUENTIAL' + TPFILE%CFORM = 'UNFORMATTED' TPFILE%CFORMAT = 'BINARY' + TPFILE%NRECL = 100000000 !Namelist files CASE('NML') IF (TRIM(HMODE)/='READ') & !Invalid because not (yet) necessary CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME)) + TPFILE%CACCESS = 'SEQUENTIAL' + TPFILE%CFORM = 'FORMATTED' TPFILE%CFORMAT = 'TEXT' @@ -836,6 +852,8 @@ SELECT CASE(TPFILE%CTYPE) CASE('OUTPUTLISTING') IF (TRIM(HMODE)/='WRITE') & !Invalid because not (yet) necessary CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME)) + TPFILE%CACCESS = 'SEQUENTIAL' + TPFILE%CFORM = 'FORMATTED' TPFILE%CFORMAT = 'TEXT' @@ -846,11 +864,13 @@ SELECT CASE(TPFILE%CTYPE) TPFILE%CFORMAT = 'SURFACE_DATA' TPFILE%CFORM = HFORM TPFILE%CACCESS = HACCESS - IF(TRIM(HACCESS)=='DIRECT') TPFILE%NRECL = KRECL + IF(TRIM(HACCESS)=='DIRECT') TPFILE%NRECL = KRECL !Text files CASE('TXT') + TPFILE%CACCESS = 'SEQUENTIAL' + TPFILE%CFORM = 'FORMATTED' TPFILE%CFORMAT = 'TEXT' IF(PRESENT(KRECL)) TPFILE%NRECL = KRECL -- GitLab