From c41bd3262e6562d24edc92265b68c5cd907a670b Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 16 Nov 2017 11:30:00 +0100 Subject: [PATCH] Philippe 16/11/2017: IO: use IO_FILE_OPEN/CLOSE_ll everywhere instead of OPEN_ll/CLOSE_ll + creation of CHEMINPUT, CHEMTAB, GPS, METEO and TXT CTYPES for TFILEDATA --- src/LIB/SURCOUCHE/src/mode_fm.f90 | 94 ++++++++++-- .../SURCOUCHE/src/mode_io_manage_struct.f90 | 42 +++++- src/MNH/ch_aer_mod_init.f90 | 66 +++++---- src/MNH/ch_emission_flux0d.f90 | 15 +- src/MNH/ch_field_valuen.f90 | 23 ++- src/MNH/ch_init_constn.f90 | 25 ++-- src/MNH/ch_init_meteo.f90 | 20 +-- src/MNH/ch_open_input.f90 | 61 ++++---- src/MNH/ch_read_chem.f90 | 10 +- src/MNH/ch_read_meteo.f90 | 6 +- src/MNH/ch_surface0d.f90 | 14 +- src/MNH/close_file_mnh.f90 | 6 +- src/MNH/gps_zenith.f90 | 30 ++-- src/MNH/ini_aircraft_balloon.f90 | 4 +- src/MNH/mnh2lpdm.f90 | 64 ++++---- src/MNH/mnh2lpdm_ech.f90 | 56 +++---- src/MNH/mnh2lpdm_ini.f90 | 138 +++++++++--------- src/MNH/mnhclose_write_cover_tex.f90 | 22 ++- src/MNH/mnhopen_aux_io_surf.f90 | 6 +- src/MNH/mnhopen_write_cover_tex.f90 | 23 +-- src/MNH/modd_ch_model0d.f90 | 4 +- src/MNH/radar_scattering.f90 | 34 +++-- src/MNH/read_all_data_grib_case.f90 | 15 +- src/MNH/read_chem_data_netcdf_case.f90 | 14 +- src/MNH/resolved_elecn.f90 | 50 ++++--- src/MNH/write_lfifm1_for_diag.f90 | 21 ++- src/MNH/write_ts1d.f90 | 23 ++- 27 files changed, 564 insertions(+), 322 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index 23db54929..bc93c55a7 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -132,7 +132,7 @@ END IF END SUBROUTINE FMLOOK_ll -SUBROUTINE IO_FILE_OPEN_ll(TPFILE,KRESP,OPARALLELIO) +SUBROUTINE IO_FILE_OPEN_ll(TPFILE,KRESP,OPARALLELIO,HPOSITION,HSTATUS) ! USE MODD_CONF, ONLY: NMNHVERSION USE MODD_IO_ll, ONLY: ISP,LIOCDF4,LLFIOUT,LLFIREAD,TFILEDATA @@ -145,6 +145,8 @@ USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST,IO_FILE_FIND_BYNAME TYPE(TFILEDATA),POINTER,INTENT(INOUT) :: TPFILE ! File structure INTEGER, INTENT(OUT), OPTIONAL :: KRESP ! Return code LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO +CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: HPOSITION +CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: HSTATUS ! INTEGER :: IRESP,IRESP2 INTEGER :: IMASDEV,IBUGFIX @@ -172,16 +174,40 @@ CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME),TZFILE_DUMMY,IRESP) IF (IRESP/=0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_OPEN_ll','file '//TRIM(TPFILE%CNAME)//' not in filelist') ! 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) + + + !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) + + + !GPS files + CASE('GPS') + CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='FORMATTED', & + ACTION=TPFILE%CMODE,MODE='SPECIFIC',TPFILE=TPFILE) + + + !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) + + !Namelist files CASE('NML') CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & - DELIM='QUOTE',MODE='GLOBAL') + DELIM='QUOTE',MODE='GLOBAL',TPFILE=TPFILE) !OUTPUTLISTING files CASE('OUTPUTLISTING') CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,FORM='FORMATTED', & - ACTION=TPFILE%CMODE,MODE='GLOBAL') + ACTION=TPFILE%CMODE,MODE='GLOBAL',TPFILE=TPFILE) !SURFACE_DATA files @@ -189,15 +215,28 @@ SELECT CASE(TPFILE%CTYPE) IF (TPFILE%CFORM=='FORMATTED') THEN CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & FORM=TPFILE%CFORM, & - MODE='GLOBAL') + MODE='GLOBAL',TPFILE=TPFILE) 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') + MODE='GLOBAL',TPFILE=TPFILE) ELSE CALL OPEN_ll(UNIT=TPFILE%NLU,FILE=TPFILE%CNAME,IOSTAT=IRESP,ACTION=TPFILE%CMODE, & FORM=TPFILE%CFORM, & - MODE='GLOBAL') + MODE='GLOBAL',TPFILE=TPFILE) + 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) + 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) END IF @@ -207,7 +246,7 @@ SELECT CASE(TPFILE%CTYPE) 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) + & ='QUOTE',IOSTAT=IRESP,RECL=1024*8,OPARALLELIO=OPARALLELIO,TPFILE=TPFILE) TZFILE_DES%LOPENED = .TRUE. TZFILE_DES%NOPEN_CURRENT = TZFILE_DES%NOPEN_CURRENT + 1 TZFILE_DES%NOPEN = TZFILE_DES%NOPEN + 1 @@ -424,24 +463,26 @@ IF (ISP == TZFDLFI%OWNER) THEN !! Open NetCDF File for reading TZFDLFI%CDF => NEWIOCDF() CALL PRINT_MSG(NVERB_DEBUG,'IO','FMOPEN_ll','NF90_OPEN for '//TRIM(YFILEM)//'.nc') - INCERR = NF90_OPEN(ADJUSTL(TRIM(YFILEM))//".nc", NF90_NOWRITE, TZFDLFI%CDF%NCID) + INCERR = NF90_OPEN(ADJUSTL(TRIM(YFILEM))//".nc", NF90_NOWRITE, TPFILE%NNCID) IF (INCERR /= NF90_NOERR) THEN !PRINT *, 'FMOPEN_ll, NF90_OPEN error : ', NF90_STRERROR(INCERR) PRINT *, 'Error in opening (FMOPEN_ll/NF90_OPEN) ', TRIM(YFILEM)//'.nc', ' : ', NF90_STRERROR(INCERR) STOP END IF + TZFDLFI%CDF%NCID = TPFILE%NNCID END IF IF (YACTION == 'WRITE') THEN TZFDLFI%CDF => NEWIOCDF() CALL PRINT_MSG(NVERB_DEBUG,'IO','FMOPEN_ll','NF90_CREATE for '//TRIM(YFILEM)//'.nc') INCERR = NF90_CREATE(ADJUSTL(TRIM(YFILEM))//".nc", & - &IOR(NF90_CLOBBER,NF90_NETCDF4), TZFDLFI%CDF%NCID) + &IOR(NF90_CLOBBER,NF90_NETCDF4), TPFILE%NNCID) IF (INCERR /= NF90_NOERR) THEN !PRINT *, 'FMOPEN_ll, NF90_CREATE error : ', NF90_STRERROR(INCERR) PRINT *, 'Error in opening (FMOPEN_ll/NF90_CREATE) ', TRIM(YFILEM)//'.nc', ' : ', NF90_STRERROR(INCERR) STOP END IF + TZFDLFI%CDF%NCID = TPFILE%NNCID END IF END IF #endif @@ -535,6 +576,34 @@ IF (TPFILE%NOPEN_CURRENT>1) THEN END IF ! SELECT CASE(TPFILE%CTYPE) + !Chemistry input files + CASE('CHEMINPUT') + CALL CLOSE_ll(TPFILE%CNAME,IOSTAT=IRESP) + ! + TPFILE%NLU = -1 + + + !Chemistry tabulation files + CASE('CHEMTAB') + CALL CLOSE_ll(TPFILE%CNAME,IOSTAT=IRESP) + ! + TPFILE%NLU = -1 + + + !GPS files + CASE('GPS') + CALL CLOSE_ll(TPFILE%CNAME,IOSTAT=IRESP) + ! + TPFILE%NLU = -1 + + + !Meteo files + CASE('METEO') + CALL CLOSE_ll(TPFILE%CNAME,IOSTAT=IRESP) + ! + TPFILE%NLU = -1 + + !Namelist files CASE('NML') CALL CLOSE_ll(TPFILE%CNAME,IOSTAT=IRESP) @@ -556,6 +625,13 @@ SELECT CASE(TPFILE%CTYPE) TPFILE%NLU = -1 + !Text files + CASE('TXT') + CALL CLOSE_ll(TPFILE%CNAME,IOSTAT=IRESP) + ! + TPFILE%NLU = -1 + + CASE DEFAULT !Do not close (non-existing) '.des' file if OUTPUT IF(TPFILE%CTYPE/='OUTPUT') THEN diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 index 89bf44b9b..1c5f8a82a 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 @@ -663,7 +663,7 @@ ELSE ILFIVERB = -1 END IF ! -IF( PRESENT(KRECL) .AND. TRIM(HTYPE)/='SURFACE_DATA') & +IF( PRESENT(KRECL) .AND. TRIM(HTYPE)/='SURFACE_DATA' .AND. TRIM(HTYPE)/='TXT') & CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','optional argument KRECL is not used by '//TRIM(HTYPE)//' files') IF(.NOT.PRESENT(KRECL) .AND. TRIM(HTYPE)=='SURFACE_DATA') THEN IF(TRIM(HACCESS)=='DIRECT') & @@ -692,23 +692,51 @@ END IF TPFILE%CMODE = HMODE ! SELECT CASE(TPFILE%CTYPE) + !Chemistry input files + 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%CFORMAT = 'TEXT' + + + !Chemistry tabulation files + 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%CFORMAT = 'TEXT' + + + !GPS files + 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%CFORMAT = 'TEXT' + + + !Meteo files + 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%CFORMAT = 'BINARY' + + !Namelist files CASE('NML') - IF (TRIM(HMODE)/='READ') & + 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%CFORMAT = 'TEXT' !OUTPUTLISTING files CASE('OUTPUTLISTING') - IF (TRIM(HMODE)/='WRITE') & + 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%CFORMAT = 'TEXT' !SURFACE_DATA files CASE('SURFACE_DATA') - IF (TRIM(HMODE)/='READ') & + 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%CFORMAT = 'SURFACE_DATA' TPFILE%CFORM = HFORM @@ -716,6 +744,12 @@ SELECT CASE(TPFILE%CTYPE) IF(TRIM(HACCESS)=='DIRECT') TPFILE%NRECL = KRECL + !Text files + CASE('TXT') + TPFILE%CFORMAT = 'TEXT' + IF(PRESENT(KRECL)) TPFILE%NRECL = KRECL + + CASE DEFAULT IF (TRIM(HMODE)=='READ') THEN IF (LLFIREAD) THEN diff --git a/src/MNH/ch_aer_mod_init.f90 b/src/MNH/ch_aer_mod_init.f90 index 7b9bf947b..5879105d2 100644 --- a/src/MNH/ch_aer_mod_init.f90 +++ b/src/MNH/ch_aer_mod_init.f90 @@ -53,11 +53,13 @@ END MODULE MODI_CH_AER_MOD_INIT !! IMPLICIT ARGUMENTS !! ------------------ USE MODD_CH_AEROSOL -USE MODE_ll -USE MODE_IO_ll +USE MODD_GLO +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_UNIFACPARAM +! +USE MODE_FM, ONLY: IO_FILE_OPEN_ll,IO_FILE_CLOSE_ll +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST USE MODE_UNIFAC -USE MODD_GLO ! ! !* 0. DECLARATIONS @@ -73,6 +75,7 @@ INTEGER, PARAMETER :: nc=22, nh=16, nt=11 ! inorganic interpolation INTEGER :: JI, JJ, JK, JL, JM ! loop counter INTEGER :: IRESP ! return code in FM routines INTEGER :: ILU ! logical unit +TYPE(TFILEDATA),POINTER :: TZFILE ! !--------------------------------------------------------------------------- ! @@ -80,13 +83,14 @@ INTEGER :: ILU ! logical unit ! ! 1.1 initialisation ! +TZFILE => NULL() ! -! Initialize the mineral tablution +! Initialize the mineral tabulation IF (CMINERAL == 'NARES') THEN ! .. the file ares.w contains the weights of the model - CALL OPEN_ll(UNIT=ILU,FILE="ares1A.w",IOSTAT=IRESP,FORM='FORMATTED',ACTION='READ', & - MODE='GLOBAL') - !OPEN(1,FILE="ares1A.w",STATUS="OLD") + CALL IO_FILE_ADD2LIST(TZFILE,'ares1A.w','CHEMTAB','READ') + CALL IO_FILE_OPEN_ll(TZFILE) + ILU = TZFILE%NLU READ(ILU,*) I1IA,J1JA,K1KA DO JI=1,I1IA READ(ILU,*) X1MAXA(1,JI),X1MINA(1,JI),X1MODA(1,JI) @@ -100,12 +104,12 @@ IF (CMINERAL == 'NARES') THEN DO JJ=1,J1JA+1 READ(ILU,*) (W1JKA(JJ,JK),JK=1,K1KA) ENDDO - CALL CLOSE_ll("ares1A.w",IOSTAT=IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() ! - !OPEN(1,FILE="ares1C.w",STATUS="OLD") - CALL OPEN_ll(UNIT=ILU,FILE="ares1C.w",IOSTAT=IRESP,FORM='FORMATTED',ACTION='READ', & - MODE='GLOBAL') - + CALL IO_FILE_ADD2LIST(TZFILE,'ares1C.w','CHEMTAB','READ') + CALL IO_FILE_OPEN_ll(TZFILE) + ILU = TZFILE%NLU READ(ILU,*) I1IC,J1JC,K1KC DO JI=1,I1IC READ(ILU,*) X1MAXC(1,JI),X1MINC(1,JI),X1MODC(1,JI) @@ -119,11 +123,12 @@ IF (CMINERAL == 'NARES') THEN DO JJ=1,J1JC+1 READ(ILU,*) (W1JKC(JJ,JK),JK=1,K1KC) ENDDO - CALL CLOSE_ll("ares1C.w",IOSTAT=IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() ! - CALL OPEN_ll(UNIT=ILU,FILE="ares2A.w",IOSTAT=IRESP,FORM='FORMATTED',ACTION='READ', & - MODE='GLOBAL') - !OPEN(1,FILE="ares2A.w",STATUS="OLD") + CALL IO_FILE_ADD2LIST(TZFILE,'ares2A.w','CHEMTAB','READ') + CALL IO_FILE_OPEN_ll(TZFILE) + ILU = TZFILE%NLU READ(ILU,*) I2IA,J2JA,K2KA DO JI=1,I2IA READ(ILU,*) X2MAXA(1,JI),X2MINA(1,JI),X2MODA(1,JI) @@ -137,11 +142,12 @@ IF (CMINERAL == 'NARES') THEN DO JJ=1,J2JA+1 READ(ILU,*) (W2JKA(JJ,JK),JK=1,K2KA) ENDDO - CALL CLOSE_ll("ares2A.w",IOSTAT=IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() ! - CALL OPEN_ll(UNIT=ILU,FILE="ares2B.w",IOSTAT=IRESP,FORM='FORMATTED',ACTION='READ', & - MODE='GLOBAL') - !OPEN(1,FILE="ares2B.w",STATUS="OLD") + CALL IO_FILE_ADD2LIST(TZFILE,'ares2B.w','CHEMTAB','READ') + CALL IO_FILE_OPEN_ll(TZFILE) + ILU = TZFILE%NLU READ(ILU,*) I2IB,J2JB,K2KB DO JI=1,I2IB READ(ILU,*) X2MAXB(1,JI),X2MINB(1,JI),X2MODB(1,JI) @@ -155,11 +161,12 @@ IF (CMINERAL == 'NARES') THEN DO JJ=1,J2JB+1 READ(ILU,*) (W2JKB(JJ,JK),JK=1,K2KB) ENDDO - CALL CLOSE_ll("ares2B.w",IOSTAT=IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() ! - CALL OPEN_ll(UNIT=ILU,FILE="ares2C.w",IOSTAT=IRESP,FORM='FORMATTED',ACTION='READ', & - MODE='GLOBAL') - !OPEN(1,FILE="ares2C.w",STATUS="OLD") + CALL IO_FILE_ADD2LIST(TZFILE,'ares2C.w','CHEMTAB','READ') + CALL IO_FILE_OPEN_ll(TZFILE) + ILU = TZFILE%NLU READ(ILU,*) I2IC,J2JC,K2KC DO JI=1,I2IC READ(ILU,*) X2MAXC(1,JI),X2MINC(1,JI),X2MODC(1,JI) @@ -173,7 +180,8 @@ IF (CMINERAL == 'NARES') THEN DO JJ=1,J2JC+1 READ(ILU,*) (W2JKC(JJ,JK),JK=1,K2KC) ENDDO - CALL CLOSE_ll("ares2C.w",IOSTAT=IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() ! END IF ! @@ -184,8 +192,9 @@ IF (CMINERAL == 'TABUL') THEN IF(.NOT.ALLOCATED(znh)) ALLOCATE(znh(22)) IF(.NOT.ALLOCATED(zni)) ALLOCATE(zni(22)) IF(.NOT.ALLOCATED(zf)) ALLOCATE(zf(16,11,22,22,22,3)) - CALL OPEN_ll(UNIT=ILU,FILE="AEROMIN_NEW",IOSTAT=IRESP,FORM='FORMATTED',ACTION='READ', & - MODE='GLOBAL') + CALL IO_FILE_ADD2LIST(TZFILE,'AEROMIN_NEW','CHEMTAB','READ') + CALL IO_FILE_OPEN_ll(TZFILE) + ILU = TZFILE%NLU WRITE(*,*) 'LOADING MINERAL AEROSOL DATA ...' DO JI=1,nh @@ -215,7 +224,8 @@ IF (CMINERAL == 'TABUL') THEN ENDDO ENDDO WRITE(*,*) 'END LOADING' - CALL CLOSE_ll("AEROMIN_NEW",IOSTAT=IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() ENDIF IF(TRIM(CORGANIC).eq."MPMPO")THEN diff --git a/src/MNH/ch_emission_flux0d.f90 b/src/MNH/ch_emission_flux0d.f90 index 405f40324..c0eb26e43 100644 --- a/src/MNH/ch_emission_flux0d.f90 +++ b/src/MNH/ch_emission_flux0d.f90 @@ -77,8 +77,11 @@ END MODULE MODI_CH_EMISSION_FLUX0D !! !! EXTERNAL !! -------- -USE MODI_CH_OPEN_INPUT +USE MODD_IO_ll, ONLY: TFILEDATA +USE MODE_FM, ONLY: IO_FILE_CLOSE_ll USE MODE_IO_ll +! +USE MODI_CH_OPEN_INPUT !! !! IMPLICIT ARGUMENTS !! ------------------ @@ -120,6 +123,7 @@ CHARACTER(LEN=32), ALLOCATABLE, DIMENSION(:) :: YNAMEIN REAL, ALLOCATABLE, DIMENSION(:,:) :: ZFLUXIN ! fluxes as given in file: ! first index is the species,second index the time +TYPE(TFILEDATA),POINTER :: TZFILE ! !* 0.3 declaration of saved local variables ! @@ -135,19 +139,22 @@ REAL, SAVE, ALLOCATABLE, DIMENSION(:,:) :: ZSFLUX INTEGER, SAVE :: ISACT = 1 ! actual record (for interpolation) LOGICAL, SAVE :: LSFIRSTCALL = .TRUE. - ! flag to identify first call + ! flag to identify first call ! !------------------------------------------------------------------------------ ! !* EXECUTABLE STATEMENTS ! --------------------- ! +TZFILE => NULL() +! IF (LSFIRSTCALL) THEN ! !* 1. READ DATA ! -------------- ! - CALL CH_OPEN_INPUT(HINPUTFILE, "EMISDATA", IIO, KLUOUT, KVERB) + CALL CH_OPEN_INPUT(HINPUTFILE, "EMISDATA", TZFILE, KLUOUT, KVERB) + IIO = TZFILE%NLU ! ! read unit identifier READ(IIO,'(A3)') YUNIT @@ -196,7 +203,7 @@ IF (LSFIRSTCALL) THEN ! ! close file ! - CALL CLOSE_ll(HINPUTFILE,IOSTAT=IFAIL) + CALL IO_FILE_CLOSE_ll(TZFILE) ! !* 2. MAP DATA ONTO PROGNOSTIC VARIABLES ! --------------------------------------- diff --git a/src/MNH/ch_field_valuen.f90 b/src/MNH/ch_field_valuen.f90 index 17b759944..21906d4d3 100644 --- a/src/MNH/ch_field_valuen.f90 +++ b/src/MNH/ch_field_valuen.f90 @@ -78,7 +78,8 @@ END MODULE MODI_CH_FIELD_VALUE_n !! EXTERNAL !! -------- USE MODI_CH_OPEN_INPUT ! open general purpose ASCII input file -USE MODE_IO_ll +USE MODD_IO_ll, ONLY: TFILEDATA +USE MODE_FM, ONLY: IO_FILE_CLOSE_ll !! !! IMPLICIT ARGUMENTS !! ------------------ @@ -118,7 +119,9 @@ INTEGER :: IZINDEX ! lower index for interpolation ! REAL :: ZRETURN ! return value for function ! +TYPE(TFILEDATA),POINTER :: TZFILE !------------------------------------------------------------------------------- +TZFILE => NULL() ! !* 1. READ DATA FROM GENERAL PURPOSE INPUT FILE ! ----------------------------------------- @@ -137,7 +140,8 @@ firstcall: IF (GSFIRSTCALL) THEN ! ! open input file IF (KVERB >= 5) WRITE(KLUOUT,*) "CH_FIELD_VALUE_n: reading form-profiles" - CALL CH_OPEN_INPUT(CCHEM_INPUT_FILE, "FORMPROF", ICHANNEL, KLUOUT, KVERB) + CALL CH_OPEN_INPUT(CCHEM_INPUT_FILE, "FORMPROF", TZFILE, KLUOUT, KVERB) + ICHANNEL = TZFILE%NLU ! ! read number of profiles ISPROF and number of levels ISLEVEL READ(ICHANNEL,*) ISPROF, ISLEVEL @@ -169,7 +173,8 @@ firstcall: IF (GSFIRSTCALL) THEN END IF ! ! close file - CALL CLOSE_ll (CCHEM_INPUT_FILE, IOSTAT=IFAIL) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() ! ! check if Z-profile is given in increasing order, otherwise stop ZINF = ZSZPROF(1) ; IINF=1 @@ -191,7 +196,8 @@ firstcall: IF (GSFIRSTCALL) THEN ! open input file IF (KVERB >= 5) WRITE(KLUOUT,*) & "CH_FIELD_VALUE_n: reading species <--> form-profile association" - CALL CH_OPEN_INPUT(CCHEM_INPUT_FILE, "PROFASSO", ICHANNEL, KLUOUT, KVERB) + CALL CH_OPEN_INPUT(CCHEM_INPUT_FILE, "PROFASSO", TZFILE, KLUOUT, KVERB) + ICHANNEL = TZFILE%NLU ! ! read number of associations ISASSO READ(ICHANNEL, *) ISASSO @@ -212,14 +218,16 @@ firstcall: IF (GSFIRSTCALL) THEN ENDDO ! ! close file - CALL CLOSE_ll (CCHEM_INPUT_FILE, IOSTAT=IFAIL) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() ! ! !* 1.3 read norm-initial values ! ! open input file IF (KVERB >= 5) WRITE(KLUOUT,*) "CH_FIELD_VALUE_n:reading norm-initial values" - CALL CH_OPEN_INPUT(CCHEM_INPUT_FILE, "NORMINIT", ICHANNEL, KLUOUT, KVERB) + CALL CH_OPEN_INPUT(CCHEM_INPUT_FILE, "NORMINIT", TZFILE, KLUOUT, KVERB) + ICHANNEL = TZFILE%NLU ! ! read units for initial data (may be "CON" for molec./cm3 or "MIX" for ppp) READ(ICHANNEL,"(A)") HUNIT @@ -257,7 +265,8 @@ firstcall: IF (GSFIRSTCALL) THEN ENDDO ! ! close file - CALL CLOSE_ll (CCHEM_INPUT_FILE, IOSTAT=IFAIL) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() ! ENDIF firstcall ! diff --git a/src/MNH/ch_init_constn.f90 b/src/MNH/ch_init_constn.f90 index 0bf1a6b7f..f8af935b6 100644 --- a/src/MNH/ch_init_constn.f90 +++ b/src/MNH/ch_init_constn.f90 @@ -64,8 +64,9 @@ END MODULE MODI_CH_INIT_CONST_n !! EXTERNAL !! -------- -USE MODE_IO_ll USE MODI_CH_OPEN_INPUT ! open the general purpose ASCII input file +USE MODD_IO_ll, ONLY: TFILEDATA +USE MODE_FM, ONLY: IO_FILE_CLOSE_ll !! !! IMPLICIT ARGUMENTS @@ -114,13 +115,12 @@ CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE :: YHENRYNAME !species names REAL , DIMENSION(:,:), ALLOCATABLE :: ZHENRYVAL !chemical Henry constant value ! - INTEGER :: IFAIL ! return code from CLOSE_ll INTEGER :: JI, JN, JNREAL ! loop control variables INTEGER :: INACT ! array pointer - - +TYPE(TFILEDATA),POINTER :: TZFILE !------------------------------------------------------------------------------- +TZFILE => NULL() ! !* 1. ALLOCATE FIELD ! -------------- @@ -134,7 +134,8 @@ IF (.NOT. ASSOCIATED(XSREALHENRYVAL)) ALLOCATE( XSREALHENRYVAL(NEQ,2) ) ! open input file IF (KVERB >= 5) WRITE(KLUOUT,*) & "CH_INIT_CONST: reading molar mass" -CALL CH_OPEN_INPUT(CCHEM_INPUT_FILE, "MASS_MOL", ICHANNEL, KLUOUT, KVERB) +CALL CH_OPEN_INPUT(CCHEM_INPUT_FILE, "MASS_MOL", TZFILE, KLUOUT, KVERB) +ICHANNEL = TZFILE%NLU ! ! read number of molecular diffusivity IMASS READ(ICHANNEL, *) IMASS @@ -155,7 +156,8 @@ DO JI = 1, IMASS END DO ! ! close file -CALL CLOSE_ll(CCHEM_INPUT_FILE,IOSTAT=IFAIL) +CALL IO_FILE_CLOSE_ll(TZFILE) +TZFILE => NULL() ! ! IF (KVERB >= 10) THEN @@ -187,7 +189,8 @@ END DO ! open input file IF (KVERB >= 5) WRITE(KLUOUT,*) & "CH_INIT_CONST: reading reactivity factor " -CALL CH_OPEN_INPUT(CCHEM_INPUT_FILE, "REA_FACT", ICHANNEL, KLUOUT, KVERB) +CALL CH_OPEN_INPUT(CCHEM_INPUT_FILE, "REA_FACT", TZFILE, KLUOUT, KVERB) +ICHANNEL = TZFILE%NLU ! ! read number of molecular diffusivity IREACT READ(ICHANNEL, *) IREACT @@ -207,7 +210,8 @@ DO JI = 1, IREACT END DO ! ! close file -CALL CLOSE_ll(CCHEM_INPUT_FILE,IOSTAT=IFAIL) +CALL IO_FILE_CLOSE_ll(TZFILE) +TZFILE => NULL() ! ! IF (KVERB >= 10) THEN @@ -240,7 +244,7 @@ END DO IF (KVERB >= 5) WRITE(KLUOUT,*) & "CH_INIT_CONST: reading effective Henry constant", & " and its temperature correction " -CALL CH_OPEN_INPUT(CCHEM_INPUT_FILE, "HENRY_SP", ICHANNEL, KLUOUT, KVERB) +CALL CH_OPEN_INPUT(CCHEM_INPUT_FILE, "HENRY_SP", TZFILE, KLUOUT, KVERB) ! ! read number of molecular diffusivity IHENRY READ(ICHANNEL, *) IHENRY @@ -263,7 +267,8 @@ DO JNREAL = 1, IHENRY END DO ! ! close file -CALL CLOSE_ll(CCHEM_INPUT_FILE,IOSTAT=IFAIL) +CALL IO_FILE_CLOSE_ll(TZFILE) +TZFILE => NULL() ! IF (KVERB >= 10) THEN WRITE(KLUOUT,'(A)') '----------------------------------------------------' diff --git a/src/MNH/ch_init_meteo.f90 b/src/MNH/ch_init_meteo.f90 index 9a20af67c..5a0414197 100644 --- a/src/MNH/ch_init_meteo.f90 +++ b/src/MNH/ch_init_meteo.f90 @@ -62,11 +62,12 @@ END MODULE MODI_CH_INIT_METEO !! EXTERNAL !! -------- USE MODI_CH_OPEN_INPUT +USE MODE_FM, ONLY: IO_FILE_CLOSE_ll USE MODE_IO_ll !! !! IMPLICIT ARGUMENTS !! ------------------ -USE MODD_CH_MODEL0D, ONLY: CMETEOFILE, NMETEOIO, NVERB +USE MODD_CH_MODEL0D, ONLY: CMETEOFILE, NVERB, TMETEOFILE USE MODD_CH_M9_n, ONLY: NMETEOVARS, METEOTRANSTYPE USE MODD_CH_METEO, ONLY: NMETEORECS, XMETEOTIME, XMETEODATA !! @@ -86,20 +87,21 @@ INTEGER :: JI, JJ ! loop control CHARACTER*80 :: YCOMMENT ! comment line in meteo update file INTEGER :: IMETEOVARS ! number of meteovars to be read from file and ! checked against NMETEOVARS -INTEGER :: IFAIL ! return code from CLOSE_LL +INTEGER :: ILUMETEO ! !------------------------------------------------------------------------------ ! !* EXECUTABLE STATEMENTS ! --------------------- ! -CALL CH_OPEN_INPUT(CMETEOFILE, "METEOVAR", NMETEOIO, 6, NVERB) +CALL CH_OPEN_INPUT(CMETEOFILE, "METEOVAR", TMETEOFILE, 6, NVERB) +ILUMETEO = TMETEOFILE%NLU ! ! read number of variables NMETEOVARS -READ(NMETEOIO,*) IMETEOVARS +READ(ILUMETEO,*) IMETEOVARS ! ! read number of records -READ(NMETEOIO,*) NMETEORECS +READ(ILUMETEO,*) NMETEORECS ! ! check if number of meteovars in file corresponds to what the CCS expects IF (IMETEOVARS .NE. NMETEOVARS) THEN @@ -115,7 +117,7 @@ END IF ! read names for TPM%CMETEOVAR DO JI = 1, NMETEOVARS - READ(NMETEOIO,*) TPM%CMETEOVAR(JI) + READ(ILUMETEO,*) TPM%CMETEOVAR(JI) END DO ! ! print names of meteo variables @@ -134,12 +136,12 @@ ALLOCATE(XMETEOTIME(NMETEORECS)) ALLOCATE(XMETEODATA(NMETEOVARS,NMETEORECS)) ! DO JJ = 1, NMETEORECS - READ(NMETEOIO,*) XMETEOTIME(JJ) - READ(NMETEOIO,*) (XMETEODATA(JI,JJ), JI = 1, NMETEOVARS) + READ(ILUMETEO,*) XMETEOTIME(JJ) + READ(ILUMETEO,*) (XMETEODATA(JI,JJ), JI = 1, NMETEOVARS) END DO ! ! close file ! -CALL CLOSE_LL(CMETEOFILE, IOSTAT=IFAIL) +CALL IO_FILE_CLOSE_ll(TMETEOFILE) ! END SUBROUTINE CH_INIT_METEO diff --git a/src/MNH/ch_open_input.f90 b/src/MNH/ch_open_input.f90 index c3b9001fb..b602ea6f9 100644 --- a/src/MNH/ch_open_input.f90 +++ b/src/MNH/ch_open_input.f90 @@ -14,13 +14,17 @@ !! INTERFACE !! -SUBROUTINE CH_OPEN_INPUT(HCHEM_INPUT_FILE,HKEYWORD,KCHANNEL,KLUOUT,KVERB) +SUBROUTINE CH_OPEN_INPUT(HCHEM_INPUT_FILE,HKEYWORD,TPFILE,KLUOUT,KVERB) +! +USE MODD_IO_ll, ONLY: TFILEDATA +! IMPLICIT NONE -CHARACTER(LEN=*), INTENT(IN) :: HCHEM_INPUT_FILE ! general purpose input file -CHARACTER(LEN=*), INTENT(IN) :: HKEYWORD ! keyword for positioning -INTEGER , INTENT(OUT):: KCHANNEL ! I/O channel to choose -INTEGER, INTENT(IN) :: KLUOUT ! output listing channel -INTEGER, INTENT(IN) :: KVERB ! verbosity level +! +CHARACTER(LEN=*), INTENT(IN) :: HCHEM_INPUT_FILE ! general purpose input file +CHARACTER(LEN=*), INTENT(IN) :: HKEYWORD ! keyword for positioning +TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPFILE ! Newly opened file +INTEGER, INTENT(IN) :: KLUOUT ! output listing channel +INTEGER, INTENT(IN) :: KVERB ! verbosity level END SUBROUTINE CH_OPEN_INPUT !! END INTERFACE @@ -28,7 +32,7 @@ END INTERFACE END MODULE MODI_CH_OPEN_INPUT !! !! ######################################################################### - SUBROUTINE CH_OPEN_INPUT(HCHEM_INPUT_FILE,HKEYWORD,KCHANNEL,KLUOUT,KVERB) +SUBROUTINE CH_OPEN_INPUT(HCHEM_INPUT_FILE,HKEYWORD,TPFILE,KLUOUT,KVERB) !! ######################################################################### !! !!*** *CH_OPEN_INPUT* @@ -62,10 +66,6 @@ END MODULE MODI_CH_OPEN_INPUT !! 05/08/96 (K. Suhre) restructured !! 11/08/98 (N. Asencio) add parallel code !! -!! EXTERNAL -!! -------- -!! OPEN_ll ! attribute a free I/O unit -USE MODE_IO_ll !! !! IMPLICIT ARGUMENTS !! ------------------ @@ -76,34 +76,43 @@ USE MODE_IO_ll ! !* 0. DECLARATIONS ! ------------ +! +USE MODD_IO_ll, ONLY: TFILEDATA +! +USE MODE_FM, ONLY: IO_FILE_OPEN_ll +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST +! IMPLICIT NONE ! !* 0.1 declarations of arguments ! -CHARACTER(LEN=*), INTENT(IN) :: HCHEM_INPUT_FILE ! general purpose input file -CHARACTER(LEN=*), INTENT(IN) :: HKEYWORD ! keyword for positioning -INTEGER , INTENT(OUT):: KCHANNEL ! I/O channel to choose -INTEGER, INTENT(IN) :: KLUOUT ! output listing channel -INTEGER, INTENT(IN) :: KVERB ! verbosity level +CHARACTER(LEN=*), INTENT(IN) :: HCHEM_INPUT_FILE ! general purpose input file +CHARACTER(LEN=*), INTENT(IN) :: HKEYWORD ! keyword for positioning +TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPFILE ! Newly opened file +INTEGER, INTENT(IN) :: KLUOUT ! output listing channel +INTEGER, INTENT(IN) :: KVERB ! verbosity level ! !* 0.2 declarations of local variables ! CHARACTER(LEN=79) :: YIN ! character string for line-by-line read -INTEGER :: IFAIL ! return code from OPEN_ll +INTEGER :: ILU +INTEGER :: IRESP ! return code from OPEN_ll ! !------------------------------------------------------------------------------- ! +TPFILE => NULL() ! !* 1. FIND A FREE I/O CHANNEL ! ----------------------- ! IF (KVERB >= 5) WRITE(KLUOUT,*) "CH_OPEN_INPUT: opening file ", HCHEM_INPUT_FILE -CALL OPEN_ll(UNIT=KCHANNEL,FILE=HCHEM_INPUT_FILE,IOSTAT=IFAIL ,MODE='GLOBAL', & - POSITION='REWIND', ACTION='READ', STATUS='OLD', FORM='FORMATTED') +CALL IO_FILE_ADD2LIST(TPFILE,HCHEM_INPUT_FILE,'CHEMINPUT','READ',OOLD=.TRUE.) +CALL IO_FILE_OPEN_ll(TPFILE,KRESP=IRESP) +ILU = TPFILE%NLU ! -IF (IFAIL /= 0) THEN +IF (IRESP /= 0) THEN WRITE(KLUOUT,*) "CH_OPEN_INPUT ERROR: unable to open file", HCHEM_INPUT_FILE - WRITE(KLUOUT,*) " OPEN_ll return code is: ", IFAIL + WRITE(KLUOUT,*) " IO_FILE_OPEN_ll return code is: ", IRESP WRITE(KLUOUT,*) " the program will be stopped now" ! callabortstop CALL ABORT @@ -116,23 +125,23 @@ END IF ! -------------------------------------- ! ! open the input file -REWIND(KCHANNEL) -WRITE(KLUOUT,*) "CH_OPEN_INPUT: opened channel ", KCHANNEL, & +REWIND(ILU) +WRITE(KLUOUT,*) "CH_OPEN_INPUT: opened channel ", ILU, & " for file ", HCHEM_INPUT_FILE ! ! read general comment line and print it -READ(KCHANNEL,"(A)") YIN +READ(ILU,"(A)") YIN IF (KVERB >= 5) WRITE(KLUOUT, *) YIN ! search_key : DO - READ(KCHANNEL,"(A8)", END=100) YIN + READ(ILU,"(A8)", END=100) YIN IF (HKEYWORD(1:8) .EQ. YIN(1:8)) EXIT search_key ENDDO search_key ! ! read specific comment line and print it IF (KVERB >= 5) WRITE(KLUOUT,*) & "Keyword ", HKEYWORD(1:8), " has been found, the specific comment is:" -READ(KCHANNEL,"(A)") YIN +READ(ILU,"(A)") YIN IF (KVERB >= 5) WRITE(KLUOUT, *) YIN ! RETURN diff --git a/src/MNH/ch_read_chem.f90 b/src/MNH/ch_read_chem.f90 index edf49a458..b37d01f02 100644 --- a/src/MNH/ch_read_chem.f90 +++ b/src/MNH/ch_read_chem.f90 @@ -65,7 +65,8 @@ END MODULE MODI_CH_READ_CHEM !! -------- USE MODI_CH_OPEN_INPUT USE MODI_CH_READ_VECTOR -USE MODE_IO_ll +USE MODD_IO_ll, ONLY: TFILEDATA +USE MODE_FM, ONLY: IO_FILE_CLOSE_ll !! !! IMPLICIT ARGUMENTS !! ------------------ @@ -89,10 +90,12 @@ CHARACTER(LEN=80) :: YINPUT INTEGER :: JI, JJ, IIN REAL :: ZMD REAL, DIMENSION(NSP+NCARB+NSOA) :: ZMI ! aerosol molecular mass in g/mol +TYPE(TFILEDATA),POINTER :: TZFILE ! !* EXECUTABLE STATEMENTS ! --------------------- ! +TZFILE => NULL() ! ! if the namelist file is the input file, position file pointer after keyword ! @@ -102,12 +105,13 @@ IF (HFILE(1:14) .EQ. "CHCONTROL1.nam") THEN ! ! open the namelist file for input ! - CALL CH_OPEN_INPUT("CHCONTROL1.nam", "INITCHEM", IIN, 6, NVERB) + CALL CH_OPEN_INPUT("CHCONTROL1.nam", "INITCHEM", TZFILE, 6, NVERB) + IIN = TZFILE%NLU ! CALL CH_READ_VECTOR(NEQ, CNAMES, PCONC, 0.0, IIN, 6, NVERB) IF (LORILAM) CALL CH_READ_VECTOR(SIZE(PAERO,1), CAERONAMES, PAERO, 0.0, IIN, 6, NVERB) ! - CALL CLOSE_LL("CHCONTROL1.nam") + CALL IO_FILE_CLOSE_ll(TZFILE) ! ELSE ! diff --git a/src/MNH/ch_read_meteo.f90 b/src/MNH/ch_read_meteo.f90 index 845924b36..f0132c59c 100644 --- a/src/MNH/ch_read_meteo.f90 +++ b/src/MNH/ch_read_meteo.f90 @@ -47,7 +47,7 @@ END MODULE MODI_CH_READ_METEO !! !! IMPLICIT ARGUMENTS !! ------------------ -USE MODD_CH_MODEL0D, ONLY: NMETEOIO, XTNEXTMETEO, NVERB +USE MODD_CH_MODEL0D, ONLY: TMETEOFILE, XTNEXTMETEO, NVERB USE MODD_CH_M9_n, ONLY: NMETEOVARS, METEOTRANSTYPE !! !------------------------------------------------------------------------------ @@ -70,8 +70,8 @@ INTEGER :: JI ! loop control ! --------------------- ! ! read meteo variables and time of next update -READ(NMETEOIO,*) (TPM%XMETEOVAR(JI), JI = 1, NMETEOVARS) -READ(NMETEOIO,*) XTNEXTMETEO +READ(TMETEOFILE%NLU,*) (TPM%XMETEOVAR(JI), JI = 1, NMETEOVARS) +READ(TMETEOFILE%NLU,*) XTNEXTMETEO ! ! print what has been read IF (NVERB >= 7) THEN diff --git a/src/MNH/ch_surface0d.f90 b/src/MNH/ch_surface0d.f90 index 4a58b3e56..ca58d61ae 100644 --- a/src/MNH/ch_surface0d.f90 +++ b/src/MNH/ch_surface0d.f90 @@ -253,7 +253,10 @@ CONTAINS ! SUBROUTINE CH_SURFACE0D_SETPARAM ! -IMPLiCIT NONE +USE MODD_IO_ll, ONLY: TFILEDATA +USE MODE_FM, ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll +! +IMPLICIT NONE ! ! set the input parameters for CH_DEPOSITION_FLUX that are given ! in the 3-D model by MesoNH @@ -286,6 +289,7 @@ LOGICAL, SAVE :: LSFIRSTCALL = .TRUE. REAL, SAVE :: USTAR_PATCH, USTAR_SEA, USTAR_WATER, USTAR_TOWN,& RESA_SEA, RESA_WATER, RESA_TOWN, & HU_PATCH, PSN_PATCH +TYPE(TFILEDATA),POINTER,SAVE :: TZFILE => NULL() ! NAMELIST /NAM_SURF/ VMOD, RHODREF, RS, THT2D, PABST2D, CD, & CLAY, SAND, LAND, VEG, LAI, SST, TS, HU, & @@ -297,13 +301,17 @@ NAMELIST /NAM_SURF/ VMOD, RHODREF, RS, THT2D, PABST2D, CD, & IF (LSFIRSTCALL) THEN ! LSFIRSTCALL = .FALSE. - CALL CH_OPEN_INPUT("SURFACE.nam", "SURFDATA", ISURFIO, 6, NVERB) + CALL CH_OPEN_INPUT("SURFACE.nam", "SURFDATA", TZFILE, 6, NVERB) + ISURFIO = TZFILE%NLU + CALL IO_FILE_CLOSE_ll(TZFILE) ! END IF ! IF (PTSIMUL .GE. TNEXTUPDATE) THEN - PRINT *, "updating surface variables from file CHCONTROL1.nam" + PRINT *, "updating surface variables from file ",TRIM(TZFILE%CNAME) + CALL IO_FILE_OPEN_ll(TZFILE) READ(ISURFIO,NAM_SURF) + CALL IO_FILE_CLOSE_ll(TZFILE) ! PRINT *, "current setting is:" ! WRITE(*,NAM_SURF) TNEXTUPDATE = PTSIMUL + TVALID diff --git a/src/MNH/close_file_mnh.f90 b/src/MNH/close_file_mnh.f90 index 59b5f2c27..e3a76b891 100644 --- a/src/MNH/close_file_mnh.f90 +++ b/src/MNH/close_file_mnh.f90 @@ -58,6 +58,7 @@ END MODULE MODI_CLOSE_FILE_MNH ! ------------ ! USE MODD_CONF, ONLY: CPROGRAM +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_IO_NAM, ONLY: TFILE USE MODD_LUNIT, ONLY: CLUOUT0 ! @@ -83,6 +84,7 @@ INTEGER :: IRESP ! IRESP : return-code if a problem appears INTEGER :: IMI ! model index INTEGER :: ILUOUT ! output listing logical unit CHARACTER(LEN=16) :: YLUOUT ! output listing file name +TYPE(TFILEDATA),POINTER :: TZFILE !------------------------------------------------------------------------------- ! SELECT CASE(CPROGRAM) @@ -103,7 +105,9 @@ END SELECT CALL FMLOOK_ll(YLUOUT,YLUOUT,ILUOUT,IRESP) IF (ILUOUT==KUNIT) THEN CALL PRINT_MSG(NVERB_DEBUG,'IO','CLOSE_FILE_MNH','called for '//TRIM(YLUOUT)) - CALL CLOSE_ll(YLUOUT,IRESP) + TZFILE => NULL() + CALL IO_FILE_FIND_BYNAME(YLUOUT,TZFILE,IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE) RETURN END IF ! diff --git a/src/MNH/gps_zenith.f90 b/src/MNH/gps_zenith.f90 index 7bfd24d9c..7e2654538 100644 --- a/src/MNH/gps_zenith.f90 +++ b/src/MNH/gps_zenith.f90 @@ -77,20 +77,23 @@ END MODULE MODI_GPS_ZENITH ! ------------ ! ! -USE MODD_PARAMETERS -USE MODD_LUNIT USE MODD_CST -USE MODE_FM -USE MODD_GR_FIELD_n USE MODD_DIAG_FLAG -USE MODD_GRID, ONLY: XLONORI,XLATORI +USE MODD_GR_FIELD_n +USE MODD_GRID, ONLY: XLONORI,XLATORI USE MODD_GRID_n USE MODE_GRIDPROJ -USE MODE_IO_ll -USE MODE_ll +USE MODD_IO_ll, ONLY: TFILEDATA +USE MODD_LUNIT +USE MODD_PARAMETERS +! +USE MODE_FM, ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST +USE MODE_TOOLS_ll, ONLY: LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll ! USE MODI_INTERPOL_STATION ! +! IMPLICIT NONE ! ! @@ -150,13 +153,15 @@ REAL, DIMENSION(:), ALLOCATABLE ::ZXHAT_GPS, ZYHAT_GPS REAL, DIMENSION(:,:), ALLOCATABLE :: ZZ_STA REAL, DIMENSION(:),ALLOCATABLE :: ZGPS_ZTD, ZGPS_ZHD, ZGPS_ZWD REAL, DIMENSION(:),ALLOCATABLE :: ZE_STA, ZP_STA, ZT_STA, ZTV_STA -! +!--------- Misc -------------------------------------------------------------- +TYPE(TFILEDATA),POINTER :: TZFILE !------------------------------------------------------------------------------- ! !* 1. INTIALIZE DIMENSIONS AND ALLOCATE ARRAYS ! ---------------------------------------- ! -CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) +ILUOUT0 = TLUOUT0%NLU +TZFILE => NULL() CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) IIU = SIZE (PTEMP,1) IJU = SIZE (PTEMP,2) @@ -273,8 +278,9 @@ PRINT *,'Number of GPS STATIONS ', ISTATIONS ! IF (ISTATIONS >0 ) THEN ! - CALL OPEN_ll(UNIT=IFGRI,FILE=HFGRI,IOSTAT=IRESP,FORM='FORMATTED', & - ACTION='WRITE',MODE='SPECIFIC') + CALL IO_FILE_ADD2LIST(TZFILE,HFGRI,'GPS','WRITE') + CALL IO_FILE_OPEN_ll(TZFILE) + IFGRI = TZFILE%NLU PRINT *,'File ',TRIM(HFGRI),' opened with unit= ',IFGRI,' IRESP= ',IRESP WRITE(IFGRI,*,IOSTAT=IRESP) 'Number of STATIONS', ISTATIONS ! @@ -429,7 +435,7 @@ IF (ISTATIONS >0 ) THEN ! 1000 FORMAT('STATION ',A10,' ZHD: ',F8.5,' ZWD: ',F8.5,' ZTD: ',F8.5) ! - CALL CLOSE_ll(HFGRI,IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE,IRESP) PRINT *,'File ',TRIM(HFGRI),' closed, IRESP= ',IRESP ! DEALLOCATE(ZXHATM) diff --git a/src/MNH/ini_aircraft_balloon.f90 b/src/MNH/ini_aircraft_balloon.f90 index 2fb8a7241..c9cd97b66 100644 --- a/src/MNH/ini_aircraft_balloon.f90 +++ b/src/MNH/ini_aircraft_balloon.f90 @@ -620,9 +620,7 @@ IF (TPFLYER%SEG==0) THEN WRITE(ILUOUT,*) 'TPAIRCRAFT%SEG=',TPFLYER%SEG WRITE(ILUOUT,*) 'Check your INI_AIRCRAFT routine' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP + CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_FLIGHT','') END IF ! IF ( ANY(TPFLYER%SEGLAT(:)==XUNDEF) .OR. ANY(TPFLYER%SEGLON(:)==XUNDEF) ) THEN diff --git a/src/MNH/mnh2lpdm.f90 b/src/MNH/mnh2lpdm.f90 index 5222ada3e..16535735c 100644 --- a/src/MNH/mnh2lpdm.f90 +++ b/src/MNH/mnh2lpdm.f90 @@ -22,18 +22,18 @@ ! !* 0.1 Modules. ! +USE MODD_CONF, ONLY : CPROGRAM +USE MODD_IO_ll, ONLY : TFILEDATA,TPTR2FILE USE MODD_MNH2LPDM -USE MODD_CONF, ONLY : CPROGRAM -USE MODD_IO_ll,ONLY : TFILEDATA,TPTR2FILE ! -USE MODE_FM -USE MODE_IO_ll +USE MODE_FM, ONLY: IO_FILE_OPEN_ll,IO_FILE_CLOSE_ll +USE MODE_IO_ll, ONLY: INITIO_ll,SET_CONFIO_ll USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST USE MODE_MODELN_HANDLER USE MODE_POS ! -USE MODI_MNH2LPDM_INI USE MODI_MNH2LPDM_ECH +USE MODI_MNH2LPDM_INI ! USE MODN_CONFIO ! @@ -42,13 +42,19 @@ USE MODN_CONFIO ! IMPLICIT NONE ! -CHARACTER(LEN=28) :: YFNML,YFLOG ! Nom NAMELIST et LOG. -INTEGER :: IFNML,IFLOG ! Unite NAMELIST et LOG. -INTEGER :: IFMTO,IFGRI,IFDAT ! Unite METEO et GRILLE. -INTEGER :: IREP,IVERB,JFIC -LOGICAL :: GFOUND ! Return code when searching namelist +CHARACTER(LEN=*),PARAMETER :: YFLOG = 'METEO.log' ! Log filename +CHARACTER(LEN=*),PARAMETER :: YFNML = 'MNH2LPDM1.nam' ! Namelist filename +INTEGER, PARAMETER :: IVERB = 5 +! +INTEGER :: IFNML ! Unit of namelist +INTEGER :: JFIC +LOGICAL :: GFOUND ! Return code when searching namelist TYPE(TPTR2FILE),DIMENSION(JPMNHMAX) :: TZFMNH ! MesoNH files -TYPE(TFILEDATA),POINTER :: TZNMLFILE => NULL() ! Namelist file +TYPE(TFILEDATA),POINTER :: TZDATEFILE => NULL() ! Date file +TYPE(TFILEDATA),POINTER :: TZGRIDFILE => NULL() ! Grid file +TYPE(TFILEDATA),POINTER :: TZMETEOFILE => NULL() ! Meteo file +TYPE(TFILEDATA),POINTER :: TZLOGFILE => NULL() ! Log file +TYPE(TFILEDATA),POINTER :: TZNMLFILE => NULL() ! Namelist file ! ! ! @@ -61,10 +67,7 @@ CALL GOTO_MODEL(1) ! !* 1.1 Variables generales. ! -YFLOG = 'METEO.log' -YFNML = 'MNH2LPDM1.nam' -IVERB = 5 - CFMNH(:) = 'VIDE' + CFMNH(:) = '' ! ! !* 1.2 Initialisation routines LL. @@ -74,8 +77,8 @@ CALL INITIO_ll() ! !* 1.3 Ouverture du fichier log. ! -CALL OPEN_LL(UNIT=IFLOG,FILE=YFLOG,IOSTAT=IREP,FORM='FORMATTED', & - ACTION='WRITE',MODE='GLOBAL') +CALL IO_FILE_ADD2LIST(TZLOGFILE,YFLOG,'TXT','WRITE') +CALL IO_FILE_OPEN_ll(TZLOGFILE) ! ! !* 1.4 Lecture des namelists. @@ -101,7 +104,7 @@ CALL IO_FILE_CLOSE_ll(TZNMLFILE) ! !* 1.5 Comptage des FM a traiter. ! -IF (CFMNH(1).NE.'VIDE') THEN +IF (LEN_TRIM(CFMNH(1))>0) THEN NBMNH=1 CALL IO_FILE_ADD2LIST(TZFMNH(1)%TZFILE,TRIM(CFMNH(1)),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=IVERB) DO WHILE (CFMNH(NBMNH+1).NE.'VIDE') @@ -121,34 +124,35 @@ ENDIF ! !* 2.1 Ouverture des fichiers METEO et GRILLE et DATE. ! -CALL OPEN_LL(UNIT=IFGRI,FILE=CFGRI,IOSTAT=IREP,FORM='FORMATTED', & - ACTION='WRITE',MODE='GLOBAL') -CALL OPEN_LL(UNIT=IFDAT,FILE=CFDAT,IOSTAT=IREP,FORM='FORMATTED', & - ACTION='WRITE',MODE='GLOBAL') +CALL IO_FILE_ADD2LIST(TZGRIDFILE,CFGRI,'TXT','WRITE') +CALL IO_FILE_OPEN_ll(TZGRIDFILE) +CALL IO_FILE_ADD2LIST(TZDATEFILE,CFDAT,'TXT','WRITE') +CALL IO_FILE_OPEN_ll(TZDATEFILE) ! ! !* 2.2 Preparation du couplage. ! -CALL MNH2LPDM_INI(TZFMNH(1)%TZFILE,TZFMNH(NBMNH)%TZFILE,YFLOG,IFLOG,IFGRI,IFDAT) +CALL MNH2LPDM_INI(TZFMNH(1)%TZFILE,TZFMNH(NBMNH)%TZFILE,TZLOGFILE,TZGRIDFILE,TZDATEFILE) ! ! !* 2.3 Traitement des echeances. ! DO JFIC=1,NBMNH print*,"CFMTO(JFIC)=",CFMTO(JFIC) - CALL OPEN_LL(UNIT=IFMTO,FILE=CFMTO(JFIC),IOSTAT=IREP,FORM='UNFORMATTED', & - ACTION='WRITE',MODE='GLOBAL',RECL=100000000) - CALL MNH2LPDM_ECH(TZFMNH(JFIC)%TZFILE,IFMTO,YFLOG) + CALL IO_FILE_ADD2LIST(TZMETEOFILE,CFMTO(JFIC),'METEO','WRITE') + CALL IO_FILE_OPEN_ll(TZMETEOFILE) + CALL MNH2LPDM_ECH(TZFMNH(JFIC)%TZFILE,TZMETEOFILE) print*,"CLOSE_LL(CFMTO(JFIC)" - CALL CLOSE_LL(CFMTO(JFIC),IREP,'KEEP') + CALL IO_FILE_CLOSE_ll(TZMETEOFILE) + TZMETEOFILE => NULL() END DO ! ! !* 2.4 Fermeture des fichiers, METEO, GRILLE et LOG. ! -CALL CLOSE_LL(CFGRI,IREP,'KEEP') -CALL CLOSE_LL(CFDAT,IREP,'KEEP') -CALL CLOSE_LL(YFLOG,IREP,'KEEP') +CALL IO_FILE_CLOSE_ll(TZGRIDFILE) +CALL IO_FILE_CLOSE_ll(TZDATEFILE) +CALL IO_FILE_CLOSE_ll(TZLOGFILE) ! ! ! diff --git a/src/MNH/mnh2lpdm_ech.f90 b/src/MNH/mnh2lpdm_ech.f90 index 5e572edb5..d93a11bc7 100644 --- a/src/MNH/mnh2lpdm_ech.f90 +++ b/src/MNH/mnh2lpdm_ech.f90 @@ -3,7 +3,7 @@ !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. ! ######spl - SUBROUTINE MNH2LPDM_ECH(TPFILE,KFMTO,HFLOG) + SUBROUTINE MNH2LPDM_ECH(TPFILE,TPMETEOFILE) ! ################################################## !----------------------------------------------------------------------- !**** MNH2S2_ECH TRAITEMENT D'UNE ECHEANCE. @@ -30,9 +30,9 @@ USE MODD_TIME ! USE MODD_MNH2LPDM ! -USE MODE_FM +USE MODE_FM, ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll USE MODE_FMREAD -USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST ! USE MODI_INI_CST ! @@ -42,19 +42,19 @@ IMPLICIT NONE !* 0.2 Arguments. ! TYPE(TFILEDATA),POINTER,INTENT(INOUT) :: TPFILE -CHARACTER(LEN=*), INTENT(IN) :: HFLOG -INTEGER, INTENT(IN) :: KFMTO +TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPMETEOFILE ! ! !* 0.3 Variables locales. ! CHARACTER(LEN=100) :: YFTURB ! Stockage champs de turbulence. -INTEGER :: KFTURB -INTEGER :: IREP +INTEGER :: IFTURB +INTEGER :: IFMTO,IREP INTEGER :: ICURAA,ICURMM,ICURJJ ! Date courante. INTEGER :: ICURHH,ICURMN,ICURSS ! Heure courante. INTEGER :: JI,JJ,JK TYPE(DATE_TIME) :: TZDTCUR +TYPE(TFILEDATA),POINTER :: TZFILE ! ! ! @@ -64,6 +64,8 @@ TYPE(DATE_TIME) :: TZDTCUR ! !* 1.1 Blabla. ! +TZFILE => NULL() +IFMTO = TPMETEOFILE%NLU ! !* 2. LECTURE DES DONNEES MESO-NH DE BASE. ! ------------------------------------ @@ -370,29 +372,29 @@ XSSFV(:,:) = XSFV(NSIB:NSIE,NSJB:NSJE) ! IF (IGRILLE.EQ.2) THEN WRITE(YFTURB,'("TURB_LPDM",5I2.2)') ICURAA,ICURMM,ICURJJ,ICURHH,ICURMN - KFTURB=50 - CALL OPEN_LL(UNIT=KFTURB,FILE=YFTURB,IOSTAT=IREP,FORM='FORMATTED', & - ACTION='WRITE',MODE='GLOBAL') - WRITE(UNIT=KFTURB,FMT='(5A12)') "WSTAR ","USTAR ", & + CALL IO_FILE_ADD2LIST(TZFILE,YFTURB,'TXT','WRITE') + CALL IO_FILE_OPEN_ll(TZFILE) + IFTURB = TZFILE%NLU + WRITE(UNIT=IFTURB,FMT='(5A12)') "WSTAR ","USTAR ", & "HMIX ","LMO ", & "WPTHP" - WRITE(UNIT=KFTURB,FMT='(5F12.5)') XSWSTAR(15,15),XSUSTAR(15,15), & + WRITE(UNIT=IFTURB,FMT='(5F12.5)') XSWSTAR(15,15),XSUSTAR(15,15), & XSHMIX(15,15),XSLMO(15,15), & XSWPTHP(15,15,1) - WRITE(UNIT=KFTURB,FMT='(8A12)') "HAUT ","TKE ", & + WRITE(UNIT=IFTURB,FMT='(8A12)') "HAUT ","TKE ", & "DISS ","THETA ", & "SIGU ","SIGW ", & "TIMEU ","TIMEW " DO JK=1,NKMAX - WRITE(UNIT=KFTURB,FMT='(6F12.5,2F12.1)') XSHAUT(JK),XSTKE(15,15,JK), & + WRITE(UNIT=IFTURB,FMT='(6F12.5,2F12.1)') XSHAUT(JK),XSTKE(15,15,JK), & XSDISSIP(15,15,JK),XSTH(15,15,JK), & XSSIGU(15,15,JK),XSSIGW(15,15,JK), & XSTIMEU(15,15,JK),XSTIMEW(15,15,JK) ENDDO - CALL CLOSE_LL(YFTURB,IREP,'KEEP') + CALL IO_FILE_CLOSE_ll(TZFILE) ENDIF ! @@ -403,38 +405,38 @@ XSSFV(:,:) = XSFV(NSIB:NSIE,NSJB:NSJE) ! ! DO JK = 1,NKMAX -WRITE(KFMTO) XSU(:,:,JK) ! Composante zonale du vent. +WRITE(IFMTO) XSU(:,:,JK) ! Composante zonale du vent. ENDDO DO JK = 1,NKMAX -WRITE(KFMTO) XSV(:,:,JK) ! Composante meridienne du vent. +WRITE(IFMTO) XSV(:,:,JK) ! Composante meridienne du vent. ENDDO DO JK = 1,NKMAX -WRITE(KFMTO) XSW(:,:,JK) ! Vitesse verticale. +WRITE(IFMTO) XSW(:,:,JK) ! Vitesse verticale. ENDDO DO JK = 1,NKMAX -WRITE(KFMTO) XSTH(:,:,JK) ! Temperature potentielle. +WRITE(IFMTO) XSTH(:,:,JK) ! Temperature potentielle. ENDDO DO JK = 1,NKMAX -WRITE(KFMTO) XSTKE(:,:,JK) ! Energie cinetique Turbulence +WRITE(IFMTO) XSTKE(:,:,JK) ! Energie cinetique Turbulence ENDDO DO JK = 1,NKMAX -WRITE(KFMTO) (XSSIGU(:,:,JK))**2 ! SigmaU +WRITE(IFMTO) (XSSIGU(:,:,JK))**2 ! SigmaU ENDDO DO JK = 1,NKMAX -WRITE(KFMTO) (XSSIGU(:,:,JK))**2 ! SigmaV +WRITE(IFMTO) (XSSIGU(:,:,JK))**2 ! SigmaV ENDDO DO JK = 1,NKMAX -WRITE(KFMTO) (XSSIGW(:,:,JK))**2 ! SigmaW +WRITE(IFMTO) (XSSIGW(:,:,JK))**2 ! SigmaW ENDDO DO JK = 1,NKMAX -WRITE(KFMTO) XSTIMEU(:,:,JK) ! Temps lagrangien U +WRITE(IFMTO) XSTIMEU(:,:,JK) ! Temps lagrangien U ENDDO DO JK = 1,NKMAX -WRITE(KFMTO) XSTIMEU(:,:,JK) ! Temps lagrangien V +WRITE(IFMTO) XSTIMEU(:,:,JK) ! Temps lagrangien V ENDDO DO JK = 1,NKMAX -WRITE(KFMTO) XSTIMEW(:,:,JK) ! Dissipation de TKE +WRITE(IFMTO) XSTIMEW(:,:,JK) ! Dissipation de TKE ENDDO -WRITE(KFMTO) XSINRT +WRITE(IFMTO) XSINRT ! END SUBROUTINE MNH2LPDM_ECH diff --git a/src/MNH/mnh2lpdm_ini.f90 b/src/MNH/mnh2lpdm_ini.f90 index 2f559062e..d91ef88d9 100644 --- a/src/MNH/mnh2lpdm_ini.f90 +++ b/src/MNH/mnh2lpdm_ini.f90 @@ -3,7 +3,7 @@ !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. ! ######spl - SUBROUTINE MNH2LPDM_INI(TPFILE1,TPFILE2,HFLOG,KFLOG,KFGRI,KFDAT) + SUBROUTINE MNH2LPDM_INI(TPFILE1,TPFILE2,TPLOGFILE,TPGRIDFILE,TPDATEFILE) !-------------------------------------------------------------------------- !* MNH2S2_INI : INITIALISATION DU COUPLAGE MESO-NH / LPDM. ! @@ -13,11 +13,10 @@ ! ! Arguments explicites. ! --------------------- -! HFM1,HFM2 Nom du premier et du dernier Fichier FM à traiter. -! HFLOG Nom du fichier-log. -! KFLOG Unite logique du fichier-log. -! IFGRI Unite logique du fichier GRILLE. -! IFDAT Unite logique du fichier DATE +! TPFILE1,TPFILE2 First and last files to treat +! TPLOGFILE Log file +! TPGRIDFILE Grid file +! TPDATEFILE Date file ! !-------------------------------------------------------------------------- ! @@ -55,8 +54,9 @@ USE MODI_TEMPORAL_DIST IMPLICIT NONE ! TYPE(TFILEDATA),POINTER,INTENT(INOUT) :: TPFILE1,TPFILE2 -CHARACTER(LEN=*), INTENT(IN) :: HFLOG -INTEGER, INTENT(IN) :: KFLOG,KFGRI,KFDAT +TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPLOGFILE +TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPGRIDFILE +TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPDATEFILE ! ! !* 0.3 Variables locales. @@ -70,7 +70,6 @@ INTEGER :: IHHCUR1,IMNCUR1,ISSCUR1 INTEGER :: IHHCUR2,IMNCUR2,ISSCUR2 CHARACTER(LEN=14) :: YDATMDL,YDATCUR1,YDATCUR2 ! -INTEGER :: IREP REAL :: XLATOR,XLONOR,XPTLAT,XPTLON REAL :: XXPTSOMNH,XYPTSOMNH INTEGER :: JI,JJ,JK,a @@ -78,12 +77,17 @@ INTEGER :: b,c,I INTEGER, DIMENSION(:), ALLOCATABLE :: TAB1D INTEGER, DIMENSION(:,:), ALLOCATABLE :: TAB2D TYPE(DATE_TIME) :: TZDTCUR1,TZDTCUR2,TZDTEXP1 +INTEGER :: IFDAT,IFGRI,IFLOG ! ! ! !* 1. INITIALISATION. ! --------------- ! +IFDAT = TPDATEFILE%NLU +IFGRI = TPGRIDFILE%NLU +IFLOG = TPLOGFILE%NLU +! CALL INI_CST ! CALL GOTO_MODEL(1) @@ -163,7 +167,7 @@ NJE=NJU-JPHEXT !* 2.4 Nombre de niveaux-verticaux. ! CALL IO_READ_FIELD(TPFILE1,'KMAX',NKMAX) -!WRITE(KFLOG,*) '%%% MNH2S2_INI Lecture du nombre de niveau OK.' +!WRITE(IFLOG,*) '%%% MNH2S2_INI Lecture du nombre de niveau OK.' ! NKU = NKMAX+2*JPVEXT NKB = 1+JPVEXT @@ -225,36 +229,36 @@ NSJMAX = NSJE-NSJB+1 ! Domaine horizontal Meso-NH. !modif 12.2014 : passage a 1 seul domaine MesoNH ! --------------------------- -WRITE(KFLOG,'(I1,a12)') IGRILLE,' ngrid ' -!WRITE(KFLOG,'(a13)') '2 ngrids' -WRITE(KFLOG,'(a13)') '1 ngrids' -WRITE(KFLOG,'(i4,3x,a6)') NSIMAX,'nx ' -WRITE(KFLOG,'(i4,3x,a6)') NSJMAX,'ny ' -WRITE(KFLOG,'(i4,3x,a6)') NKU-2,'nz ' -WRITE(KFLOG,'(i4,3x,a6)') NKU-3,'nzg ' -WRITE(KFLOG,'(a13)') '12 npatch' -WRITE(KFLOG,'(a13)') '0 icloud' -WRITE(KFLOG,'(a11)') '0.0 wlon ' -WRITE(KFLOG,'(a11)') '45.0 rnlat ' -WRITE(KFLOG,'(f10.1,3x,a6)') XZHAT(NKE),'s ' -WRITE(KFLOG,'(f8.0,a8)') ZECHEANCE1,' time1 ' -WRITE(KFLOG,'(f8.0,a8)') ZECHEANCE2,' time2 ' -WRITE(KFLOG,'(a13)') '3600 dtmet ' -WRITE(KFLOG,'(a13)') 'm tunits' -WRITE(KFLOG,'(a13)') '12 nvout ' -WRITE(KFLOG,'(6x,a8,i4)') 'u ',1 -WRITE(KFLOG,'(6x,a8,i4)') 'v ',1 -WRITE(KFLOG,'(6x,a8,i4)') 'w ',1 -WRITE(KFLOG,'(6x,a8,i4)') 'tp ',1 -WRITE(KFLOG,'(6x,a8,i4)') 'tke ',1 -WRITE(KFLOG,'(6x,a8,i4)') 'uu ',1 -WRITE(KFLOG,'(6x,a8,i4)') 'vv ',1 -WRITE(KFLOG,'(6x,a8,i4)') 'ww ',1 -WRITE(KFLOG,'(6x,a8,i4)') 'tlx ',1 -WRITE(KFLOG,'(6x,a8,i4)') 'tly ',1 -WRITE(KFLOG,'(6x,a8,i4)') 'tlz ',1 -WRITE(KFLOG,'(6x,a8,i4)') 'intopr ',1 -WRITE(KFLOG,*) ' grid structure' +WRITE(IFLOG,'(I1,a12)') IGRILLE,' ngrid ' +!WRITE(IFLOG,'(a13)') '2 ngrids' +WRITE(IFLOG,'(a13)') '1 ngrids' +WRITE(IFLOG,'(i4,3x,a6)') NSIMAX,'nx ' +WRITE(IFLOG,'(i4,3x,a6)') NSJMAX,'ny ' +WRITE(IFLOG,'(i4,3x,a6)') NKU-2,'nz ' +WRITE(IFLOG,'(i4,3x,a6)') NKU-3,'nzg ' +WRITE(IFLOG,'(a13)') '12 npatch' +WRITE(IFLOG,'(a13)') '0 icloud' +WRITE(IFLOG,'(a11)') '0.0 wlon ' +WRITE(IFLOG,'(a11)') '45.0 rnlat ' +WRITE(IFLOG,'(f10.1,3x,a6)') XZHAT(NKE),'s ' +WRITE(IFLOG,'(f8.0,a8)') ZECHEANCE1,' time1 ' +WRITE(IFLOG,'(f8.0,a8)') ZECHEANCE2,' time2 ' +WRITE(IFLOG,'(a13)') '3600 dtmet ' +WRITE(IFLOG,'(a13)') 'm tunits' +WRITE(IFLOG,'(a13)') '12 nvout ' +WRITE(IFLOG,'(6x,a8,i4)') 'u ',1 +WRITE(IFLOG,'(6x,a8,i4)') 'v ',1 +WRITE(IFLOG,'(6x,a8,i4)') 'w ',1 +WRITE(IFLOG,'(6x,a8,i4)') 'tp ',1 +WRITE(IFLOG,'(6x,a8,i4)') 'tke ',1 +WRITE(IFLOG,'(6x,a8,i4)') 'uu ',1 +WRITE(IFLOG,'(6x,a8,i4)') 'vv ',1 +WRITE(IFLOG,'(6x,a8,i4)') 'ww ',1 +WRITE(IFLOG,'(6x,a8,i4)') 'tlx ',1 +WRITE(IFLOG,'(6x,a8,i4)') 'tly ',1 +WRITE(IFLOG,'(6x,a8,i4)') 'tlz ',1 +WRITE(IFLOG,'(6x,a8,i4)') 'intopr ',1 +WRITE(IFLOG,*) ' grid structure' ! !* 4. FICHIER METEO. ! -------------- @@ -341,9 +345,9 @@ print*,MINVAL(XSZ0),MAXVAL(XSZ0) !* 5 FICHIER DATES. ! ------------- ! -WRITE(KFDAT,'(A14)') YDATMDL -WRITE(KFDAT,'(A14)') YDATCUR1 -WRITE(KFDAT,'(A14)') YDATCUR2 +WRITE(IFDAT,'(A14)') YDATMDL +WRITE(IFDAT,'(A14)') YDATCUR1 +WRITE(IFDAT,'(A14)') YDATCUR2 ! !* 5. FICHIER GRILLE. ! -------------- @@ -351,21 +355,21 @@ WRITE(KFDAT,'(A14)') YDATCUR2 ! !* 5.1 Infos franchement utiles. ! -WRITE(KFGRI,'(F15.8,1X,A)') & +WRITE(IFGRI,'(F15.8,1X,A)') & XLON0, 'XLON0 Longitude reference (deg.deci.)' -WRITE(KFGRI,'(F15.8,1X,A)') & +WRITE(IFGRI,'(F15.8,1X,A)') & XLAT0, 'XLAT0 Latitude reference (deg.deci.)' -WRITE(KFGRI,'(F15.8,1X,A)') & +WRITE(IFGRI,'(F15.8,1X,A)') & XBETA, 'XBETA Rotation grille (deg.deci.)' -WRITE(KFGRI,'(F15.8,1X,A)') XRPK, 'XRPK Facteur de conicite' -WRITE(KFGRI,'(F15.8,1X,A)') & +WRITE(IFGRI,'(F15.8,1X,A)') XRPK, 'XRPK Facteur de conicite' +WRITE(IFGRI,'(F15.8,1X,A)') & XLONOR, 'XLONOR Longitude origine (deg.deci.)' -WRITE(KFGRI,'(F15.8,1X,A)') & +WRITE(IFGRI,'(F15.8,1X,A)') & XLATOR, 'XLATOR Latitude origine (deg.deci.)' -WRITE(KFGRI,'(F15.1,1X,A)') XXHAT(1),'XHAT(1) Coord. Cartesienne (m)' -WRITE(KFGRI,'(F15.1,1X,A)') XXHAT(2),'XHAT(2) Coord. Cartesienne (m)' -WRITE(KFGRI,'(F15.1,1X,A)') XYHAT(1),'YHAT(1) Coord. Cartesienne (m)' -WRITE(KFGRI,'(F15.1,1X,A)') XYHAT(2),'YHAT(2) Coord. Cartesienne (m)' +WRITE(IFGRI,'(F15.1,1X,A)') XXHAT(1),'XHAT(1) Coord. Cartesienne (m)' +WRITE(IFGRI,'(F15.1,1X,A)') XXHAT(2),'XHAT(2) Coord. Cartesienne (m)' +WRITE(IFGRI,'(F15.1,1X,A)') XYHAT(1),'YHAT(1) Coord. Cartesienne (m)' +WRITE(IFGRI,'(F15.1,1X,A)') XYHAT(2),'YHAT(2) Coord. Cartesienne (m)' ! print*,"GRILLE" print*,"LON0 : ",XLON0 @@ -377,19 +381,19 @@ print*,"LATOR: ",XLATOR ! !* 5.2 Points de grille x y z zg ! -WRITE(KFLOG,*)NSIMAX,' gridpoints in x direction' -WRITE(KFLOG,'(8f10.0)')XXHAT(NSIB:NSIE) -WRITE(KFLOG,*)NSJMAX,' gridpoints y direction' -WRITE(KFLOG,'(8f10.0)')XYHAT(NSJB:NSJE) -WRITE(KFLOG,*)NKMAX,' main gridpoints in z direction' -WRITE(KFLOG,'(8f10.2)')XSHAUT(1:NKMAX) -WRITE(KFLOG,'(i4,3x,a38)')NKU-2,'intermediate gridpoints in z direction' -WRITE(KFLOG,'(8f10.2)')XZHAT(2:NKU-1) -WRITE(KFLOG,*)' ==================================================' +WRITE(IFLOG,*)NSIMAX,' gridpoints in x direction' +WRITE(IFLOG,'(8f10.0)')XXHAT(NSIB:NSIE) +WRITE(IFLOG,*)NSJMAX,' gridpoints y direction' +WRITE(IFLOG,'(8f10.0)')XYHAT(NSJB:NSJE) +WRITE(IFLOG,*)NKMAX,' main gridpoints in z direction' +WRITE(IFLOG,'(8f10.2)')XSHAUT(1:NKMAX) +WRITE(IFLOG,'(i4,3x,a38)')NKU-2,'intermediate gridpoints in z direction' +WRITE(IFLOG,'(8f10.2)')XZHAT(2:NKU-1) +WRITE(IFLOG,*)' ==================================================' ! ! Topographie ! -WRITE(KFLOG,*) 'TERRAIN TOPOGRAPHY' +WRITE(IFLOG,*) 'TERRAIN TOPOGRAPHY' c=1 a=0 !modif 12/2014 : passage a une grille haute resolution MesoNH, on depasse 99 @@ -409,16 +413,16 @@ DO WHILE (c.lt.(NSIMAX+1)) DO b=NSJB,NSJE IF ((c+17).LT.(NSIMAX+1)) then a=NSJMAX-b+NSJB - WRITE(KFLOG,300) a,TAB2D(c:c+17,a) + WRITE(IFLOG,300) a,TAB2D(c:c+17,a) ELSE a=NSJMAX-b+NSJB - WRITE(KFLOG,300) a,TAB2D(c:NSIMAX,a) + WRITE(IFLOG,300) a,TAB2D(c:NSIMAX,a) ENDIF ENDDO IF ((c+17).LT.(NSIMAX+1)) then - WRITE(KFLOG,301) TAB1D(c:c+17) + WRITE(IFLOG,301) TAB1D(c:c+17) ELSE - WRITE(KFLOG,301) TAB1D(c:NSIMAX) + WRITE(IFLOG,301) TAB1D(c:NSIMAX) ENDIF c=c+18 diff --git a/src/MNH/mnhclose_write_cover_tex.f90 b/src/MNH/mnhclose_write_cover_tex.f90 index fd3671101..fd1903d5a 100644 --- a/src/MNH/mnhclose_write_cover_tex.f90 +++ b/src/MNH/mnhclose_write_cover_tex.f90 @@ -43,8 +43,12 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_CONF, ONLY : CPROGRAM -USE MODE_IO_ll +USE MODD_CONF, ONLY: CPROGRAM +USE MODD_IO_ll, ONLY: TFILEDATA +! +USE MODE_FM, ONLY: IO_FILE_CLOSE_ll +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME +! USE MODI_TRANSFER_FILE ! ! @@ -58,16 +62,20 @@ IMPLICIT NONE !* 0.2 Declarations of local variables ! ------------------------------- ! -CHARACTER(LEN=20) :: YTEX ! name of tex file +CHARACTER(LEN=*),PARAMETER :: YTEX = 'class_cover_data.tex' ! name of tex file +! +INTEGER :: IRESP +TYPE(TFILEDATA),POINTER :: TZFILE !------------------------------------------------------------------------------- ! !* 5. Prints of cover parameters in a tex file ! ---------------------------------------- ! -IF (CPROGRAM =='PGD ') THEN - YTEX='class_cover_data.tex' - ! - CALL CLOSE_ll(YTEX) +TZFILE => NULL() +! +IF (TRIM(CPROGRAM)=='PGD') THEN + CALL IO_FILE_FIND_BYNAME(YTEX,TZFILE,IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE) CALL TRANSFER_FILE('fujitransfer.x','NIL',YTEX) END IF !------------------------------------------------------------------------------- diff --git a/src/MNH/mnhopen_aux_io_surf.f90 b/src/MNH/mnhopen_aux_io_surf.f90 index 8ba814072..e8a9f1d2d 100644 --- a/src/MNH/mnhopen_aux_io_surf.f90 +++ b/src/MNH/mnhopen_aux_io_surf.f90 @@ -69,6 +69,7 @@ USE MODE_FM USE MODE_FMREAD USE MODE_IO_ll USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST,IO_FILE_FIND_BYNAME +USE MODE_MSG ! USE MODI_GET_1D_MASK USE MODI_MNH_SURF_GRID_IO_INIT @@ -147,10 +148,7 @@ IF ( IJPHEXT .NE. JPHEXT ) THEN WRITE(NLUOUT,FMT=*) ' MNHOPEN_AUX_IO : JPHEXT in PRE_PGD1.nam/NAM_CONF_PGD ( or default value )& & JPHEXT=',JPHEXT WRITE(NLUOUT,FMT=*) ' different from PGD files=',HFILE ,' value JPHEXT=',IJPHEXT - WRITE(NLUOUT,FMT=*) '-> JOB ABORTED' - CALL CLOSE_ll(COUT,IOSTAT=IRESP) - CALL ABORT - STOP + CALL PRINT_MSG(NVERB_FATAL,'IO','MNHOPEN_AUX_IO_SURF','') END IF ! NIU_ALL = (IIMAX+2*JPHEXT) diff --git a/src/MNH/mnhopen_write_cover_tex.f90 b/src/MNH/mnhopen_write_cover_tex.f90 index 0a7a89941..eca219526 100644 --- a/src/MNH/mnhopen_write_cover_tex.f90 +++ b/src/MNH/mnhopen_write_cover_tex.f90 @@ -43,9 +43,11 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODD_CONF, ONLY : CPROGRAM -USE MODE_ll -USE MODE_IO_ll +USE MODD_CONF, ONLY: CPROGRAM +USE MODD_IO_ll, ONLY: TFILEDATA +! +USE MODE_FM, ONLY: IO_FILE_OPEN_ll +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST ! ! IMPLICIT NONE @@ -58,17 +60,20 @@ INTEGER, INTENT(OUT) :: KTEX ! logical unit of Tex file !* 0.2 Declarations of local variables ! ------------------------------- ! -INTEGER :: IRESP -CHARACTER(LEN=20) :: YTEX ! name of tex file +CHARACTER(LEN=*),PARAMETER :: YTEX = 'class_cover_data.tex' ! name of tex file +! +TYPE(TFILEDATA),POINTER :: TZFILE !------------------------------------------------------------------------------- ! !* 5. Prints of cover parameters in a tex file ! ---------------------------------------- ! -IF (CPROGRAM =='PGD ') THEN - YTEX='class_cover_data.tex' - CALL OPEN_ll(unit=KTEX,file=YTEX,iostat=IRESP,action='WRITE', & - form='FORMATTED',position="REWIND",mode='GLOBAL') +TZFILE => NULL() +! +IF (TRIM(CPROGRAM)=='PGD') THEN + CALL IO_FILE_ADD2LIST(TZFILE,YTEX,'TXT','WRITE') + CALL IO_FILE_OPEN_ll(TZFILE,HPOSITION='REWIND') + KTEX = TZFILE%NLU ELSE KTEX=0 END IF diff --git a/src/MNH/modd_ch_model0d.f90 b/src/MNH/modd_ch_model0d.f90 index 6b5cdf84c..e688bd58e 100644 --- a/src/MNH/modd_ch_model0d.f90 +++ b/src/MNH/modd_ch_model0d.f90 @@ -46,6 +46,8 @@ !* 0. DECLARATIONS ! ----------------- ! +USE MODD_IO_ll, ONLY: TFILEDATA +! IMPLICIT NONE SAVE ! @@ -66,6 +68,7 @@ REAL :: XTNEXTMETEO ! time of next meteo update ! CHARACTER*128 :: CINITFILE = "CHCONTROL1.nam" ! name of initial value file CHARACTER*128 :: CMETEOFILE = "CHCONTROL1.nam" ! meteo update file +TYPE(TFILEDATA),POINTER :: TMETEOFILE => NULL() ! meteo update file ! CHARACTER*128 :: COUTFILE = "BOX.OUT" ! name of final output file CHARACTER*128 :: CRESULTFILE = "BOX.RESULT" ! regular output file @@ -76,7 +79,6 @@ CHARACTER*40 :: CRESULTFORMAT = "(5E16.8)" ! Format for results CHARACTER*40 :: CDIAGFORMAT = "(5E16.8)" ! Format for diagnostics ! INTEGER :: NFILEIO = 42 ! channel to be used for all intermediate file I/O -INTEGER :: NMETEOIO = 43 ! channel to be used for all meteo I/O INTEGER :: NRESULTIO = 44 ! channel to be used for all regular result file I/O INTEGER :: NDIAGIO = 45 ! channel to be used for all diagnostics file I/O ! diff --git a/src/MNH/radar_scattering.f90 b/src/MNH/radar_scattering.f90 index 0d9437165..6ea401981 100644 --- a/src/MNH/radar_scattering.f90 +++ b/src/MNH/radar_scattering.f90 @@ -104,6 +104,7 @@ END MODULE MODI_RADAR_SCATTERING ! ------------ ! USE MODD_CST +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_LUNIT USE MODD_PARAMETERS !!LIMA @@ -131,8 +132,9 @@ USE MODD_TMAT ! USE MODE_ARF USE MODE_FGAU , ONLY:GAULAG +USE MODE_FM, ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll USE MODE_FSCATTER -USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST USE MODE_MSG USE MODE_READTMAT ! @@ -274,10 +276,12 @@ REAL :: ZCCG,ZLBG,ZLBEXG,ZDG,ZALPHAG,ZNUG,ZAG,ZBG,ZCXG REAL :: ZLBI,ZLBEXI,ZDI,ZALPHAI,ZNUI,ZAI,ZBI REAL,DIMENSION(:),ALLOCATABLE :: ZRTMIN CHARACTER(LEN=100) :: YMSG +TYPE(TFILEDATA),POINTER :: TZFILE ! !* 1. INITIALISATION !-------------- ILUOUT0 = TLUOUT0%NLU +TZFILE => NULL() ! IF (PRESENT(PCR_RAY)) THEN GLIMA=.TRUE. @@ -625,7 +629,9 @@ DO JI=1,INBRAD E12.5,2X,E12.5,2X,E12.5,2X,E12.5,2X,E12.5) !rain - CALL OPEN_ll(UNIT=IUNIT,FILE=YFILE_COEFINT(1),FORM="FORMATTED",ACCESS="SEQUENTIAL",ACTION="READ",IOSTAT=IRESP,MODE='GLOBAL') + CALL IO_FILE_ADD2LIST(TZFILE,YFILE_COEFINT(1),'TXT','READ') + CALL IO_FILE_OPEN_ll(TZFILE,KRESP=IRESP) + IUNIT = TZFILE%NLU IF ( IRESP /= 0 ) THEN WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(1)) CALL PRINT_MSG(NVERB_FATAL,'GEN','RADAR_SCATTERING',YMSG) @@ -637,7 +643,8 @@ DO JI=1,INBRAD ZIM_S22S11_T_R(ILINE),ZRE_S22FMS11FT_T_R(ILINE),ZIM_S22FT_T_R(ILINE),ZIM_S11FT_T_R(ILINE) ILINE=ILINE+1 ENDDO - CALL CLOSE_ll(YFILE_COEFINT(1),IOSTAT=IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() WRITE(ILUOUT0,*) "NLIGNE rain",ILINE ILINE=2 WRITE(ILUOUT0,*) "ILINE=",ILINE @@ -649,7 +656,9 @@ DO JI=1,INBRAD ZIM_S22S11_T_R(ILINE),ZRE_S22FMS11FT_T_R(ILINE),ZIM_S22FT_T_R(ILINE),ZIM_S11FT_T_R(ILINE) !snow - CALL OPEN_ll(UNIT=IUNIT,FILE=YFILE_COEFINT(2),FORM="FORMATTED",ACCESS="SEQUENTIAL",ACTION="READ",IOSTAT=IRESP,MODE='GLOBAL') + CALL IO_FILE_ADD2LIST(TZFILE,YFILE_COEFINT(2),'TXT','READ') + CALL IO_FILE_OPEN_ll(TZFILE,KRESP=IRESP) + IUNIT = TZFILE%NLU IF ( IRESP /= 0 ) THEN WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(2)) CALL PRINT_MSG(NVERB_FATAL,'GEN','RADAR_SCATTERING',YMSG) @@ -661,7 +670,8 @@ DO JI=1,INBRAD ZIM_S22S11_T_S(ILINE),ZRE_S22FMS11FT_T_S(ILINE),ZIM_S22FT_T_S(ILINE),ZIM_S11FT_T_S(ILINE) ILINE=ILINE+1 ENDDO - CALL CLOSE_ll(YFILE_COEFINT(2),IOSTAT=IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() WRITE(ILUOUT0,*) "NLIGNE snow",ILINE ILINE=2 WRITE(ILUOUT0,*) "ILINE=",ILINE @@ -673,7 +683,9 @@ DO JI=1,INBRAD ZIM_S22S11_T_S(ILINE),ZRE_S22FMS11FT_T_S(ILINE),ZIM_S22FT_T_S(ILINE),ZIM_S11FT_T_S(ILINE) !graupel - CALL OPEN_ll(UNIT=IUNIT,FILE=YFILE_COEFINT(3),FORM="FORMATTED",ACCESS="SEQUENTIAL",ACTION="READ",IOSTAT=IRESP,MODE='GLOBAL') + CALL IO_FILE_ADD2LIST(TZFILE,YFILE_COEFINT(3),'TXT','READ') + CALL IO_FILE_OPEN_ll(TZFILE,KRESP=IRESP) + IUNIT = TZFILE%NLU IF ( IRESP /= 0 ) THEN WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(3)) CALL PRINT_MSG(NVERB_FATAL,'GEN','RADAR_SCATTERING',YMSG) @@ -685,7 +697,8 @@ DO JI=1,INBRAD ZIM_S22S11_T_G(ILINE),ZRE_S22FMS11FT_T_G(ILINE),ZIM_S22FT_T_G(ILINE),ZIM_S11FT_T_G(ILINE) ILINE=ILINE+1 ENDDO - CALL CLOSE_ll(YFILE_COEFINT(3),IOSTAT=IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() WRITE(ILUOUT0,*) "NLIGNE graupel",ILINE ILINE=2 WRITE(ILUOUT0,*) "ILINE=",ILINE @@ -697,7 +710,9 @@ DO JI=1,INBRAD ZIM_S22S11_T_G(ILINE),ZRE_S22FMS11FT_T_G(ILINE),ZIM_S22FT_T_G(ILINE),ZIM_S11FT_T_G(ILINE) !wet graupel - CALL OPEN_ll(UNIT=IUNIT,FILE=YFILE_COEFINT(4),FORM="FORMATTED",ACCESS="SEQUENTIAL",ACTION="READ",IOSTAT=IRESP,MODE='GLOBAL') + CALL IO_FILE_ADD2LIST(TZFILE,YFILE_COEFINT(4),'TXT','READ') + CALL IO_FILE_OPEN_ll(TZFILE,KRESP=IRESP) + IUNIT = TZFILE%NLU IF ( IRESP /= 0 ) THEN WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(4)) CALL PRINT_MSG(NVERB_FATAL,'GEN','RADAR_SCATTERING',YMSG) @@ -709,7 +724,8 @@ DO JI=1,INBRAD ZIM_S22S11_T_W(ILINE),ZRE_S22FMS11FT_T_W(ILINE),ZIM_S22FT_T_W(ILINE),ZIM_S11FT_T_W(ILINE) ILINE=ILINE+1 ENDDO - CALL CLOSE_ll(YFILE_COEFINT(4),IOSTAT=IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() WRITE(ILUOUT0,*) "NLIGNE wet graupel",ILINE ILINE=2 WRITE(ILUOUT0,*) "ILINE=",ILINE diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90 index 8065c2f60..8ff5fda92 100644 --- a/src/MNH/read_all_data_grib_case.f90 +++ b/src/MNH/read_all_data_grib_case.f90 @@ -318,9 +318,12 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZPV ! vertical level in grib file INTEGER :: IPVPRESENT ,IPV REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZR_DUM INTEGER :: IMI +TYPE(TFILEDATA),POINTER :: TZFILE ! !--------------------------------------------------------------------------------------- ! +TZFILE => NULL() +! IMI = GET_CURRENT_MODEL_INDEX() ! !* 1. READ PGD FILE @@ -1006,7 +1009,8 @@ IF (IMODEL==5) THEN !* 2.6.1 read mocage species ! ! open input file - CALL CH_OPEN_INPUT(YPRE_MOC, "MOC2MESONH", ICHANNEL, ILUOUT0, KVERB) + CALL CH_OPEN_INPUT(YPRE_MOC, "MOC2MESONH", TZFILE, ILUOUT0, KVERB) + ICHANNEL = TZFILE%NLU ! ! read number of mocage species to transfer into mesonh READ(ICHANNEL, *) IMOC @@ -1035,7 +1039,8 @@ IF (IMODEL==5) THEN ENDIF ! ! close file - CALL CLOSE_ll(YPRE_MOC,IOSTAT=IRET) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() ! !* 2.6.2 exchange mocage values onto prognostic variables XSV_LS ! @@ -1404,7 +1409,8 @@ IF (ODUMMY_REAL) THEN ! close file CALL IO_FILE_CLOSE_ll(TPPRE_REAL1) ! open input file - CALL CH_OPEN_INPUT(TPPRE_REAL1%CNAME, "DUMMY_2D", ICHANNEL, ILUOUT0, KVERB) + CALL CH_OPEN_INPUT(TPPRE_REAL1%CNAME, "DUMMY_2D", TZFILE, ILUOUT0, KVERB) + ICHANNEL = TZFILE%NLU ! ! read number of dummy 2D fields to transfer into mesonh READ(ICHANNEL, *) IMOC @@ -1468,6 +1474,9 @@ IF (ODUMMY_REAL) THEN ! END DO ! + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() + ! IF (NVERB>=10) THEN WRITE(ILUOUT0,*) CDUMMY_2D(1:IVAR) WRITE(ILUOUT0,*) INUMGRIB(1:IVAR) diff --git a/src/MNH/read_chem_data_netcdf_case.f90 b/src/MNH/read_chem_data_netcdf_case.f90 index 20537716f..b62c8eea5 100644 --- a/src/MNH/read_chem_data_netcdf_case.f90 +++ b/src/MNH/read_chem_data_netcdf_case.f90 @@ -184,6 +184,7 @@ end type TZMOZ type(TZMOZ), DIMENSION(:,:),ALLOCATABLE :: TZSTOC ! model indice INTEGER :: IMI +TYPE(TFILEDATA),POINTER :: TZFILE ! ! For netcdf ! @@ -210,6 +211,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: PSMOZ real ::a,b !---------------------------------------------------------------------- +TZFILE => NULL() ! IMI = GET_CURRENT_MODEL_INDEX() ! @@ -449,7 +451,8 @@ ALLOCATE(ZOUT1D(INO)) !* 2.6.1 read MOZART species from the file MOZ1.nam ! ! open input file -CALL CH_OPEN_INPUT(YMOZ,"MOZ2MESONH",ICHANNEL,ILUOUT0,KVERB) +CALL CH_OPEN_INPUT(YMOZ,"MOZ2MESONH",TZFILE,ILUOUT0,KVERB) +ICHANNEL = TZFILE%NLU ! !read number of mocage species to transfer into mesonh READ(ICHANNEL, *) IMOZ @@ -725,7 +728,7 @@ if (status /= nf90_noerr) call handle_err(status) ! close ! file -CALL CLOSE_ll(YMOZ,IOSTAT=IRET) +CALL IO_FILE_CLOSE_ll(TZFILE) !------------------------------------------------------------- @@ -774,6 +777,7 @@ CONTAINS ! ! Small routine used to store a linear array into a 2 dimension array ! +USE MODE_MSG IMPLICIT NONE INTEGER, INTENT(IN) :: KN1 REAL,DIMENSION(KN1), INTENT(IN) :: P1 @@ -785,11 +789,7 @@ INTEGER :: JLOOP2_A1T2 INTEGER :: JPOS_A1T2 ! IF (KN1 < KL1*KL2) THEN - WRITE (ILUOUT0,'(A)') ' | Error in "ARRAY_1D_TO_2D", sizes do not match - abort' - !callabortstop - CALL CLOSE_ll(CLUOUT0,IOSTAT=IRESP) - CALL ABORT - STOP + CALL PRINT_MSG(NVERB_FATAL,'GEN','ARRAY_1D_TO_2D','sizes do not match') END IF JPOS_A1T2 = 1 DO JLOOP2_A1T2 = 1, KL2 diff --git a/src/MNH/resolved_elecn.f90 b/src/MNH/resolved_elecn.f90 index f1bebd4ba..499776fdb 100644 --- a/src/MNH/resolved_elecn.f90 +++ b/src/MNH/resolved_elecn.f90 @@ -173,15 +173,16 @@ END MODULE MODI_RESOLVED_ELEC_n !* 0. DECLARATIONS ! ------------ ! -USE MODE_ll -USE MODE_FM USE MODE_ELEC_ll -USE MODE_IO_ll, ONLY : CLOSE_ll, OPEN_ll +USE MODE_FM, ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST,IO_FILE_FIND_BYNAME +USE MODE_ll ! USE MODD_METRICS_n, ONLY : XDXX, XDYY, XDZX, XDZY, XDZZ USE MODD_FIELD_n, ONLY : XRSVS USE MODD_CONF, ONLY : L1D, L2D, CEXP USE MODD_CST +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_PARAMETERS, ONLY : JPVEXT USE MODD_ELEC_DESCR USE MODD_ELEC_n @@ -342,8 +343,10 @@ CHARACTER (LEN=32) :: YASCFILE REAL :: ZTEMP_DIST CHARACTER (LEN=18) :: YNAME LOGICAL :: GLMA_FILE +TYPE(TFILEDATA),POINTER :: TZFILE ! NULLIFY(TZFIELDS_ll) +TZFILE => NULL() ! !------------------------------------------------------------------------------ ! @@ -836,9 +839,9 @@ ENDIF IF (KTCOUNT .EQ. 1) THEN IF (LFLASH_GEOM) THEN YASCFILE = CEXP//"_fgeom_diag.asc" - CALL OPEN_ll (FILE=YASCFILE, ACTION="WRITE", STATUS="NEW", & - FORM="FORMATTED", POSITION="APPEND", & - UNIT=NLU_fgeom_diag, IOSTAT= NIOSTAT_fgeom_diag ) + CALL IO_FILE_ADD2LIST(TZFILE,YASCFILE,'TXT','WRITE') + CALL IO_FILE_OPEN_ll(TZFILE,HPOSITION='APPEND',HSTATUS='NEW',KRESP=NIOSTAT_fgeom_diag) + NLU_fgeom_diag = TZFILE%NLU IF ( IPROC .EQ. 0) THEN WRITE (NLU_fgeom_diag, FMT='(A)') '--------------------------------------------------------' WRITE (NLU_fgeom_diag, FMT='(A)') '*FLASH CHARACTERISTICS FROM FLASH_GEOM_ELEC*' @@ -859,14 +862,15 @@ IF (KTCOUNT .EQ. 1) THEN WRITE (NLU_fgeom_diag, FMT='(A)') '--------------------------------------------' END IF ! - CALL CLOSE_ll (YASCFILE) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() CALL MPI_BCAST (NLU_fgeom_diag,1, MPI_INTEGER, 0, NMNH_COMM_WORLD, IERR) ! IF (LSAVE_COORD) THEN YASCFILE = CEXP//"_fgeom_coord.asc" - CALL OPEN_ll (FILE=YASCFILE, ACTION="WRITE", STATUS="NEW",& - FORM="FORMATTED", POSITION="APPEND", & - UNIT=NLU_fgeom_coord, IOSTAT= NIOSTAT_fgeom_coord ) + CALL IO_FILE_ADD2LIST(TZFILE,YASCFILE,'TXT','WRITE') + CALL IO_FILE_OPEN_ll(TZFILE,HPOSITION='APPEND',HSTATUS='NEW',KRESP=NIOSTAT_fgeom_coord) + NLU_fgeom_coord = TZFILE%NLU IF ( IPROC .EQ. 0) THEN WRITE (NLU_fgeom_coord,FMT='(A)') '------------------------------------------' WRITE (NLU_fgeom_coord,FMT='(A)') '*****FLASH COORD. FROM FLASH_GEOM_ELEC****' @@ -879,16 +883,17 @@ IF (KTCOUNT .EQ. 1) THEN WRITE (NLU_fgeom_coord,FMT='(A)') '------------------------------------------' END IF ! - CALL CLOSE_ll (YASCFILE) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() CALL MPI_BCAST (NLU_fgeom_coord,1, MPI_INTEGER, 0, NMNH_COMM_WORLD, IERR) END IF END IF ! IF (LSERIES_ELEC) THEN YASCFILE = CEXP//"_series_cloud_elec.asc" - CALL OPEN_ll (FILE=YASCFILE, ACTION="WRITE", STATUS="NEW", & - FORM="FORMATTED", POSITION="APPEND", & - UNIT=NLU_series_cloud_elec, IOSTAT= NIOSTAT_series_cloud_elec) + CALL IO_FILE_ADD2LIST(TZFILE,YASCFILE,'TXT','WRITE') + CALL IO_FILE_OPEN_ll(TZFILE,HPOSITION='APPEND',HSTATUS='NEW',KRESP=NIOSTAT_series_cloud_elec) + NLU_series_cloud_elec = TZFILE%NLU IF ( IPROC .EQ. 0) THEN WRITE (NLU_series_cloud_elec, FMT='(A)') '----------------------------------------------------' WRITE (NLU_series_cloud_elec, FMT='(A)') '********* RESULTS FROM of LSERIES_ELEC *************' @@ -915,7 +920,8 @@ IF (KTCOUNT .EQ. 1) THEN WRITE (NLU_series_cloud_elec, FMT='(A)') '----------------------------------------------------' END IF ! - CALL CLOSE_ll (YASCFILE) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() CALL MPI_BCAST (NLU_series_cloud_elec,1, MPI_INTEGER, 0, NMNH_COMM_WORLD, IERR) END IF END IF @@ -936,8 +942,10 @@ IF (LFLASH_GEOM .AND. LLMA) THEN END IF ! IF (GLMA_FILE) THEN - IF(CLMA_FILE(1:5) /= "BEGIN") THEN ! close preceeding file when existing - CALL CLOSE_ll (CLMA_FILE) + IF(CLMA_FILE(1:5) /= "BEGIN") THEN ! close previous file if exists + CALL IO_FILE_FIND_BYNAME(CLMA_FILE,TZFILE,IERR) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() ENDIF ! TDTLMA%TIME = TDTLMA%TIME - XDTLMA @@ -948,8 +956,9 @@ IF (LFLASH_GEOM .AND. LLMA) THEN TDTLMA%TIME = MOD(TDTLMA%TIME + XDTLMA,86400.) CLMA_FILE = CEXP//"_SIMLMA_"//YNAME//".dat" ! - CALL OPEN_ll (FILE=CLMA_FILE, ACTION="WRITE", FORM="FORMATTED", STATUS="NEW", & - UNIT=ILMA_UNIT, POSITION="APPEND", IOSTAT=ILMA_IOSTAT ) + CALL IO_FILE_ADD2LIST(TZFILE,CLMA_FILE,'TXT','WRITE') + CALL IO_FILE_OPEN_ll(TZFILE,HPOSITION='APPEND',HSTATUS='NEW',KRESP=ILMA_IOSTAT) + ILMA_UNIT = TZFILE%NLU IF ( IPROC .EQ. 0 ) THEN WRITE (UNIT=ILMA_UNIT,FMT='(A)') '----------------------------------------' WRITE (UNIT=ILMA_UNIT,FMT='(A)') '*** FLASH COORD. FROM LMA SIMULATOR ****' @@ -972,7 +981,8 @@ IF (LFLASH_GEOM .AND. LLMA) THEN WRITE (UNIT=ILMA_UNIT,FMT='(A)') '-- Column 17 : negative ions neut --' WRITE (UNIT=ILMA_UNIT,FMT='(A)') '----------------------------------------' END IF - CALL CLOSE_ll (CLMA_FILE) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() CALL MPI_BCAST (ILMA_UNIT,1, MPI_INTEGER, 0, NMNH_COMM_WORLD, IERR) END IF END IF diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90 index 600e0385a..74e07c987 100644 --- a/src/MNH/write_lfifm1_for_diag.f90 +++ b/src/MNH/write_lfifm1_for_diag.f90 @@ -234,6 +234,7 @@ USE MODE_FMWRIT USE MODE_GATHER_ll USE MODE_ll USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT,ONLY: IO_FILE_ADD2LIST USE MODE_THERMO USE MODE_MODELN_HANDLER USE MODI_LIDAR @@ -297,6 +298,7 @@ REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZRHOT, ZTMP ! work array !ECRITURE DANS UN FICHIER ASCII DE RESULTATS !INITIALISATION DU NOM DE FICHIER CREE EN PARALLELE AVEC CELUI LFI +TYPE(TFILEDATA),POINTER :: TZRSFILE INTEGER :: ILURS CHARACTER(LEN=32) :: YRS CHARACTER(LEN=3),DIMENSION(:),ALLOCATABLE :: YRAD @@ -329,9 +331,6 @@ REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZTMP1, ZTMP2, ZTMP3, ZTMP4 REAL,DIMENSION(:,:,:),ALLOCATABLE :: ZZZ_GRID1 REAL,DIMENSION(:,:),ALLOCATABLE :: ZTHVSOL,ZSHMIX REAL,DIMENSION(:,:,:),ALLOCATABLE :: ZZONWIND,ZMERWIND,ZFFWIND2,ZRIB - - ! - ! !------------------------------------------------------------------------------- ! @@ -345,6 +344,7 @@ IKE=IKU-JPVEXT IMI = GET_CURRENT_MODEL_INDEX() ILUOUT0 = TLUOUT0%NLU +TZRSFILE => NULL() !------------------------------------------------------------------------------- ! !* 1. WRITES IN THE LFI FILE @@ -3376,8 +3376,9 @@ IF(LRADAR .AND. LUSERR) THEN WRITE(YGRID_SIZE,'(I3.3)') 2*NMAX DO JJ=1,SIZE(ZWORK42(:,:,:,:,:),5) YRS=YRAD(JJ)//CNAME_RAD(JI)(1:3)//YELEV//YGRID_SIZE//TRIM(TPFILE%CNAME) - CALL OPEN_ll(UNIT=ILURS,FILE=YRS,IOSTAT=IRESP,STATUS="NEW",ACTION='WRITE', & - FORM="FORMATTED",RECL=8192) + CALL IO_FILE_ADD2LIST(TZRSFILE,YRS,'TXT','WRITE',KRECL=8192) + CALL IO_FILE_OPEN_ll(TZRSFILE,HSTATUS='NEW') + ILURS = TZRSFILE%NLU WRITE(ILURS,'(A,4F12.6,2I5)') '**domaine LATLON ',ZWORK43(JI,1,1),ZWORK43(JI,4*NMAX-1,2*NMAX), & ZWORK43(JI,2,1),ZWORK43(JI,4*NMAX,2*NMAX),2*NMAX,2*NMAX !! HEADER DO JV=2*NMAX,1,-1 @@ -3390,7 +3391,8 @@ IF(LRADAR .AND. LUSERR) THEN DO JV=2*NMAX,1,-1 WRITE(ILURS,*) CLATLON(JV) END DO - CALL CLOSE_ll(HFILE=YRS) + CALL IO_FILE_CLOSE_ll(TZRSFILE) + TZRSFILE => NULL() END DO END DO DEALLOCATE(CLATLON) @@ -3404,13 +3406,16 @@ IF(LRADAR .AND. LUSERR) THEN INT(ANINT(10.*XELEV(JI,JEL))-10*INT(XELEV(JI,JEL))) DO JJ=1,SIZE(ZWORK42(:,:,:,:,:),5) YRS="P"//YRAD(JJ)//CNAME_RAD(JI)(1:3)//YELEV//TRIM(TPFILE%CNAME) - CALL OPEN_ll(UNIT=ILURS,FILE=YRS,IOSTAT=IRESP,ACTION='WRITE',MODE='GLOBAL') + CALL IO_FILE_ADD2LIST(TZRSFILE,YRS,'TXT','WRITE') + CALL IO_FILE_OPEN_ll(TZRSFILE) + ILURS = TZRSFILE%NLU DO JH=1,NBAZIM DO JV=1,NBSTEPMAX+1 WRITE(ILURS,"(F15.7)") ZWORK42_BIS(JI,JEL,JH,JV,JJ) END DO END DO - CALL CLOSE_ll(HFILE=YRS) + CALL IO_FILE_CLOSE_ll(TZRSFILE) + TZRSFILE => NULL() END DO END DO END DO diff --git a/src/MNH/write_ts1d.f90 b/src/MNH/write_ts1d.f90 index 51b1d2945..4bf731346 100644 --- a/src/MNH/write_ts1d.f90 +++ b/src/MNH/write_ts1d.f90 @@ -79,6 +79,8 @@ !! IMPLICIT ARGUMENTS !! ------------------ +USE MODE_FM, ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll +USE MODE_IO_MANAGE_STRUCT,ONLY: IO_FILE_ADD2LIST USE MODE_IO_ll USE MODE_GRIDPROJ USE MODE_ll @@ -88,6 +90,7 @@ USE MODD_NSV, ONLY: NSV,NSV_CHEMBEG,NSV_CHEMEND, & USE MODD_CH_AEROSOL, ONLY: CAERONAMES, LORILAM USE MODD_DYN_n, ONLY: XTSTEP ! time-step of the model USE MODD_DIM_n, ONLY: NKMAX ! # of points in Z of the physical grid +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_PARAMETERS, ONLY: JPVEXT ! vertical external points number USE MODD_GRID, ONLY: XLATORI,XLONORI USE MODD_GRID_n, ONLY: XXHAT,XYHAT,XZZ @@ -132,7 +135,6 @@ IMPLICIT NONE REAL :: ZTIME LOGICAL, SAVE :: GSFIRSTCALL = .TRUE. INTEGER, SAVE :: ISIO1D ! IO-channel -INTEGER :: IFAIL ! return code from OPEN_ll CHARACTER(LEN=80), SAVE :: YSIO1DDEF ! name of def-file CHARACTER(LEN=80), SAVE :: YSIO1DDAT ! name of dat-file CHARACTER(LEN=40) :: YFORM = "(E15.8)" ! data output format @@ -146,7 +148,7 @@ INTEGER :: IINDEX, JINDEX ! index of each profile REAL :: ZXINDEX, ZYINDEX ! distance from origin of each profile REAL :: ZX, ZY ! poisition of each profile REAL, DIMENSION(SIZE(XCHEMLAT)) :: ZLAT, ZLON - +TYPE(TFILEDATA),POINTER,SAVE :: TZFILE ! CHARACTER*8 :: YDATE ! for retrieval of date and time CHARACTER*10 :: YTIME ! dito @@ -160,6 +162,7 @@ CHARACTER*5 :: YCTIME ! current time !! EXECUTABLE STATEMENTS !! --------------------- ! +TZFILE => NULL() NBPROF = 0 CALL TEMPORAL_DIST ( TDTCUR%TDATE%YEAR,TDTCUR%TDATE%MONTH, & @@ -235,8 +238,9 @@ DO JN=1,NBPROF (JINDEX >= 1).AND.(JINDEX <= IJU)) THEN ! write picasso def-file IF (GSFIRSTCALL) THEN - CALL OPEN_ll(UNIT=ISIO1D,FILE=YSIO1DDEF,IOSTAT=IFAIL ,MODE='GLOBAL', & - POSITION='REWIND',ACTION='WRITE',STATUS='NEW',FORM='FORMATTED') + CALL IO_FILE_ADD2LIST(TZFILE,YSIO1DDEF,'TXT','WRITE') + CALL IO_FILE_OPEN_ll(TZFILE,HPOSITION='REWIND',HSTATUS='NEW') + ISIO1D = TZFILE%NLU ! write comment CALL DATE_AND_TIME(YDATE, YTIME) @@ -278,12 +282,14 @@ DO JN=1,NBPROF END IF END DO - CALL CLOSE_ll(YSIO1DDEF) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() CALL TRANSFER_FILE('fujitransfer.x','NIL',YSIO1DDEF) ! open picasso dat-file - CALL OPEN_ll(UNIT=ISIO1D,FILE=YSIO1DDAT,IOSTAT=IFAIL ,MODE='GLOBAL', & - POSITION='REWIND',ACTION='WRITE',STATUS='NEW',FORM='FORMATTED') + CALL IO_FILE_ADD2LIST(TZFILE,YSIO1DDAT,'TXT','WRITE') + CALL IO_FILE_OPEN_ll(TZFILE,HPOSITION='REWIND',HSTATUS='NEW') + ISIO1D = TZFILE%NLU ! calculate ISSKIP IF (L1D) THEN @@ -390,7 +396,8 @@ DO JN=1,NBPROF ENDDO IF ((CPROGRAM =='DIAG ').AND.(LCHEMDIAG)) THEN - CALL CLOSE_ll(YSIO1DDAT) + CALL IO_FILE_CLOSE_ll(TZFILE) + TZFILE => NULL() CALL TRANSFER_FILE('fujitransfer.x','NIL',YSIO1DDAT) END IF -- GitLab