From 38dd000fe0c2e36900dbc813fa1be4c5653e3f58 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 19 Apr 2018 11:22:16 +0200 Subject: [PATCH] Philippe 19/04/2018: IO: add possibility to choose directory for outputs, backups and diachronic files --- src/LIB/SURCOUCHE/src/modd_io.f90 | 5 +- src/LIB/SURCOUCHE/src/mode_fm.f90 | 17 +++- src/LIB/SURCOUCHE/src/mode_io.f90 | 77 +++++++++++++------ .../SURCOUCHE/src/mode_io_manage_struct.f90 | 27 ++++++- src/LIB/SURCOUCHE/src/modn_confio.f90 | 5 +- src/MNH/diag.f90 | 5 +- src/MNH/ini_modeln.f90 | 3 +- src/MNH/modd_bakout.f90 | 2 + src/MNH/modd_parameters.f90 | 1 + src/MNH/modn_backup.f90 | 3 +- src/MNH/modn_output.f90 | 3 +- src/MNH/set_mask.f90 | 1 - 12 files changed, 108 insertions(+), 41 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index 5c8643728..21521c70c 100644 --- a/src/LIB/SURCOUCHE/src/modd_io.f90 +++ b/src/LIB/SURCOUCHE/src/modd_io.f90 @@ -10,7 +10,7 @@ MODULE MODD_IO_ll ! USE MODD_NETCDF, ONLY: IDCDF_KIND, IOCDF -USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAX +USE MODD_PARAMETERS, ONLY: NDIRNAMELGTMAX, NFILENAMELGTMAX ! IMPLICIT NONE ! @@ -42,6 +42,8 @@ INTEGER, SAVE :: NIO_ABORT_LEVEL = NVERB_ERROR ! Level of IO error necessary t INTEGER, SAVE :: NGEN_VERB = NVERB_WARNING ! Verbosity level for 'GEN' (generic) messages INTEGER, SAVE :: NGEN_ABORT_LEVEL = NVERB_ERROR ! Level of 'GEN' error necessary to force stop of application +CHARACTER(LEN=NDIRNAMELGTMAX) :: CIO_DIR = '' ! Directory for IO + !Structure containing one pointer to a file !Useful to create arrays of pointers to files TYPE TFILE_ELT @@ -62,6 +64,7 @@ END TYPE TOUTBAK !Structure describing the characteristics of a file TYPE TFILEDATA CHARACTER(LEN=NFILENAMELGTMAX) :: CNAME = '' !Filename + CHARACTER(LEN=:),ALLOCATABLE :: CDIRNAME !Directory name CHARACTER(LEN=13) :: CTYPE = "UNKNOWN" !Filetype (backup, output, prepidealcase...) CHARACTER(LEN=7) :: CFORMAT = "UNKNOWN" !Fileformat (NETCDF4, LFI, LFICDF4...) CHARACTER(LEN=7) :: CMODE = "UNKNOWN" !Opening mode (read, write...) diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index bbe135b02..434009ccf 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -240,7 +240,7 @@ CHARACTER(LEN=*),INTENT(IN), OPTIONAL :: HPROGRAM_ORIG !To emulate a file comin INTEGER :: IFTYPE ! type of FM-file INTEGER :: IROWF,IRESP CHARACTER(LEN=7) :: YACTION ! Action upon the file ('READ' or 'WRITE') -CHARACTER(LEN=28) :: YFILEM ! name of the file +CHARACTER(LEN=:),ALLOCATABLE :: YFILEM ! name of the file CHARACTER(LEN=8) :: YRESP LOGICAL :: GSTATS LOGICAL, SAVE :: GSFIRST=.TRUE. @@ -259,9 +259,18 @@ INTEGER(KIND=IDCDF_KIND) :: INCERR #endif YACTION = TPFILE%CMODE -YFILEM = TPFILE%CNAME -CALL PRINT_MSG(NVERB_DEBUG,'IO','FMOPEN_ll','opening '//TRIM(YFILEM)//' for '//TRIM(YACTION)) +CALL PRINT_MSG(NVERB_DEBUG,'IO','FMOPEN_ll','opening '//TRIM(TPFILE%CNAME)//' for '//TRIM(YACTION)) + +IF (ALLOCATED(TPFILE%CDIRNAME)) THEN + IF(LEN_TRIM(TPFILE%CDIRNAME)>0) THEN + YFILEM = TRIM(TPFILE%CDIRNAME)//'/'//TRIM(TPFILE%CNAME) + ELSE + YFILEM = TRIM(TPFILE%CNAME) + END IF +ELSE + YFILEM = TRIM(TPFILE%CNAME) +END IF IF ( PRESENT(OPARALLELIO) ) THEN GPARALLELIO = OPARALLELIO @@ -295,7 +304,7 @@ CASE(10:) IMELEV=2 END SELECT -IROWF=LEN_TRIM(YFILEM) +IROWF=LEN_TRIM(TPFILE%CNAME) IF (IROWF.EQ.0) THEN IRESP=-45 diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90 index f98e29509..d33461393 100644 --- a/src/LIB/SURCOUCHE/src/mode_io.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io.f90 @@ -235,7 +235,6 @@ CONTAINS !JUANZ CHARACTER(len=5) :: CFILE INTEGER :: IFILE, IRANK_PROCIO - CHARACTER(len=128) :: YFILE_IOZ INTEGER(KIND=LFI_INT) :: IRESOU,IMELEV,INPRAR INTEGER(KIND=LFI_INT) :: ININAR8 LOGICAL(KIND=LFI_INT) :: GNAMFI8,GFATER8,GSTATS8 @@ -265,6 +264,7 @@ CONTAINS ! didier LOGICAL :: GPARALLELIO TYPE(TFILEDATA),POINTER :: TZSPLITFILE + CHARACTER(LEN=:),ALLOCATABLE :: YPREFILENAME !To store the directory + filename CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','opening '//TRIM(TPFILE%CNAME)//' for '//TRIM(TPFILE%CMODE)) ! @@ -358,6 +358,16 @@ CONTAINS ENDIF #endif + IF (ALLOCATED(TPFILE%CDIRNAME)) THEN + IF(LEN_TRIM(TPFILE%CDIRNAME)>0) THEN + YPREFILENAME = TRIM(TPFILE%CDIRNAME)//'/'//TRIM(TPFILE%CNAME) + ELSE + YPREFILENAME = TRIM(TPFILE%CNAME) + END IF + ELSE + YPREFILENAME = TRIM(TPFILE%CNAME) + END IF + SELECT CASE(YMODE) CASE('GLOBAL') @@ -384,7 +394,7 @@ CONTAINS TPFILE%NLU = IONEWFLU() #ifdef MNH_VPP OPEN(UNIT=TPFILE%NLU, & - FILE=TRIM(TPFILE%CNAME),& + FILE=TRIM(YPREFILENAME),& STATUS=STATUS, & ACCESS=ACCESS, & IOSTAT=IOS, & @@ -401,7 +411,7 @@ CONTAINS !JUAN : 31/03/2000 modif pour acces direct IF (YACCESS=='STREAM') THEN OPEN(UNIT=TPFILE%NLU, & - FILE=TRIM(TPFILE%CNAME),& + FILE=TRIM(YPREFILENAME),& STATUS=YSTATUS, & ACCESS=YACCESS, & IOSTAT=IOS, & @@ -409,7 +419,7 @@ CONTAINS ACTION=YACTION) ELSEIF (YACCESS=='DIRECT') THEN OPEN(UNIT=TPFILE%NLU, & - FILE=TRIM(TPFILE%CNAME),& + FILE=TRIM(YPREFILENAME),& STATUS=YSTATUS, & ACCESS=YACCESS, & IOSTAT=IOS, & @@ -420,7 +430,7 @@ CONTAINS IF (YFORM=="FORMATTED") THEN IF (YACTION=='READ') THEN OPEN(UNIT=TPFILE%NLU, & - FILE=TRIM(TPFILE%CNAME),& + FILE=TRIM(YPREFILENAME),& STATUS=YSTATUS, & ACCESS=YACCESS, & IOSTAT=IOS, & @@ -433,7 +443,7 @@ CONTAINS PAD=YPAD) ELSE OPEN(UNIT=TPFILE%NLU, & - FILE=TRIM(TPFILE%CNAME),& + FILE=TRIM(YPREFILENAME),& STATUS=YSTATUS, & ACCESS=YACCESS, & IOSTAT=IOS, & @@ -447,7 +457,7 @@ CONTAINS ENDIF ELSE OPEN(UNIT=TPFILE%NLU, & - FILE=TRIM(TPFILE%CNAME),& + FILE=TRIM(YPREFILENAME),& STATUS=YSTATUS, & ACCESS=YACCESS, & IOSTAT=IOS, & @@ -461,7 +471,7 @@ CONTAINS !print*,' OPEN_ll' !print*,' OPEN(UNIT=',TPFILE%NLU - !print*,' FILE=',TRIM(TPFILE%CNAME) + !print*,' FILE=',TRIM(YPREFILENAME) !print*,' STATUS=',YSTATUS !print*,' ACCESS=',YACCESS !print*,' IOSTAT=',IOS @@ -474,7 +484,7 @@ CONTAINS !print*,' PAD=',YPAD #else OPEN(UNIT=TPFILE%NLU, & - FILE=TRIM(TPFILE%CNAME),& + FILE=TRIM(YPREFILENAME),& STATUS=STATUS, & ACCESS=ACCESS, & IOSTAT=IOS, & @@ -505,7 +515,7 @@ CONTAINS #ifdef MNH_VPP OPEN(UNIT=TPFILE%NLU, & - FILE=TRIM(TPFILE%CNAME)//SUFFIX(".P"), & + FILE=TRIM(YPREFILENAME)//SUFFIX(".P"), & STATUS=STATUS, & ACCESS=ACCESS, & IOSTAT=IOS, & @@ -521,7 +531,7 @@ CONTAINS #if defined(MNH_SX5) || defined(MNH_SP4) || defined(NAGf95) || defined(MNH_LINUX) IF (ACCESS=='DIRECT') THEN OPEN(UNIT=TPFILE%NLU, & - FILE=TRIM(TPFILE%CNAME)//SUFFIX(".P"), & + FILE=TRIM(YPREFILENAME)//SUFFIX(".P"), & STATUS=YSTATUS, & ACCESS=YACCESS, & IOSTAT=IOS, & @@ -531,7 +541,7 @@ CONTAINS ELSE IF (YACTION=='READ') THEN OPEN(UNIT=TPFILE%NLU, & - FILE=TRIM(TPFILE%CNAME)//SUFFIX(".P"), & + FILE=TRIM(YPREFILENAME)//SUFFIX(".P"), & STATUS=YSTATUS, & ACCESS=YACCESS, & IOSTAT=IOS, & @@ -544,7 +554,7 @@ CONTAINS PAD=YPAD) ELSE OPEN(UNIT=TPFILE%NLU, & - FILE=TRIM(TPFILE%CNAME)//SUFFIX(".P"), & + FILE=TRIM(YPREFILENAME)//SUFFIX(".P"), & STATUS=YSTATUS, & ACCESS=YACCESS, & IOSTAT=IOS, & @@ -559,7 +569,7 @@ CONTAINS ENDIF #else OPEN(UNIT=TPFILE%NLU, & - FILE=TRIM(TPFILE%CNAME)//SUFFIX(".P"), & + FILE=TRIM(YPREFILENAME)//SUFFIX(".P"), & STATUS=STATUS, & ACCESS=ACCESS, & IOSTAT=IOS, & @@ -624,15 +634,32 @@ CONTAINS DO IFILE=1,TPFILE%NSUBFILES_IOZ IRANK_PROCIO = 1 + IO_RANK(IFILE-1,ISNPROC,TPFILE%NSUBFILES_IOZ) WRITE(CFILE ,'(".Z",i3.3)') IFILE - YFILE_IOZ = TRIM(TPFILE%CNAME)//CFILE//".lfi" CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//TRIM(CFILE),TZSPLITFILE,IRESP) IF (IRESP/=0) THEN !File not yet in filelist => add it (nothing to do if already in list) - CALL IO_FILE_ADD2LIST(TZSPLITFILE,TRIM(TPFILE%CNAME)//TRIM(CFILE),TPFILE%CTYPE,TPFILE%CMODE, & - KLFINPRAR=TPFILE%NLFINPRAR,KLFITYPE=TPFILE%NLFITYPE,KLFIVERB=TPFILE%NLFIVERB, & - HFORMAT=TPFILE%CFORMAT) + IF (ALLOCATED(TPFILE%CDIRNAME)) THEN + CALL IO_FILE_ADD2LIST(TZSPLITFILE,TRIM(TPFILE%CNAME)//TRIM(CFILE),TPFILE%CTYPE,TPFILE%CMODE, & + HDIRNAME=TPFILE%CDIRNAME, & + KLFINPRAR=TPFILE%NLFINPRAR,KLFITYPE=TPFILE%NLFITYPE,KLFIVERB=TPFILE%NLFIVERB, & + HFORMAT=TPFILE%CFORMAT) + ELSE + CALL IO_FILE_ADD2LIST(TZSPLITFILE,TRIM(TPFILE%CNAME)//TRIM(CFILE),TPFILE%CTYPE,TPFILE%CMODE, & + KLFINPRAR=TPFILE%NLFINPRAR,KLFITYPE=TPFILE%NLFITYPE,KLFIVERB=TPFILE%NLFIVERB, & + HFORMAT=TPFILE%CFORMAT) + END IF END IF + + IF (ALLOCATED(TPFILE%CDIRNAME)) THEN + IF (LEN_TRIM(TZSPLITFILE%CDIRNAME)>0) THEN + YPREFILENAME = TRIM(TZSPLITFILE%CDIRNAME)//'/'//TRIM(TZSPLITFILE%CNAME) + ELSE + YPREFILENAME = TRIM(TZSPLITFILE%CNAME) + END IF + ELSE + YPREFILENAME = TRIM(TZSPLITFILE%CNAME) + END IF + TPFILE%TFILES_IOZ(IFILE)%TFILE => TZSPLITFILE !Done outside of the previous IF to prevent problems with .OUT files TZSPLITFILE%NMPICOMM = ICOMM @@ -647,10 +674,10 @@ CONTAINS IF (YACTION == 'READ') THEN ! Open NetCDF File for reading TZSPLITFILE%TNCDIMS => NEWIOCDF() - CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','NF90_OPEN(IO_ZSPLIT) for '//TRIM(TPFILE%CNAME)//CFILE//'.nc') - IOSCDF = NF90_OPEN(TRIM(TPFILE%CNAME)//CFILE//".nc", NF90_NOWRITE, TZSPLITFILE%NNCID) + CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','NF90_OPEN(IO_ZSPLIT) for '//TRIM(TZSPLITFILE%CNAME)//'.nc') + IOSCDF = NF90_OPEN(TRIM(YPREFILENAME)//".nc", NF90_NOWRITE, TZSPLITFILE%NNCID) IF (IOSCDF /= NF90_NOERR) THEN - CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll','NF90_OPEN for '//TRIM(TPFILE%CNAME)//CFILE//'.nc: '// & + CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll','NF90_OPEN for '//TRIM(TZSPLITFILE%CNAME)//'.nc: '// & NF90_STRERROR(IOSCDF)) ELSE IOS = 0 @@ -666,11 +693,11 @@ CONTAINS ! YACTION == 'WRITE' ! Create NetCDF File for writing TZSPLITFILE%TNCDIMS => NEWIOCDF() - CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','NF90_CREATE(IO_ZSPLIT) for '//TRIM(TPFILE%CNAME)//CFILE//'.nc') - IOSCDF = NF90_CREATE(TRIM(TPFILE%CNAME)//CFILE//".nc", & + CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','NF90_CREATE(IO_ZSPLIT) for '//TRIM(TZSPLITFILE%CNAME)//'.nc') + IOSCDF = NF90_CREATE(TRIM(YPREFILENAME)//".nc", & &IOR(NF90_CLOBBER,NF90_NETCDF4), TZSPLITFILE%NNCID) IF (IOSCDF /= NF90_NOERR) THEN - CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll','NF90_CREATE for '//TRIM(TPFILE%CNAME)//CFILE//'.nc: '// & + CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll','NF90_CREATE for '//TRIM(TZSPLITFILE%CNAME)//'.nc: '// & NF90_STRERROR(IOSCDF)) ELSE IOS = 0 @@ -701,7 +728,7 @@ CONTAINS CALL LFIOUV(IRESOU, & TZSPLITFILE%NLFIFLU, & GNAMFI8, & - TRIM(TZSPLITFILE%CNAME)//'.lfi', & + TRIM(YPREFILENAME)//'.lfi', & "UNKNOWN", & GFATER8, & GSTATS8, & diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 index a7332d359..e717d2017 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 @@ -501,8 +501,18 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN) NOUT_COMPRESS_LEVEL(IMI) = 4 END IF TPBAKOUTN(IPOS)%TFILE%NNCCOMPRESS_LEVEL = NOUT_COMPRESS_LEVEL(IMI) + IF (LEN_TRIM(COUT_DIR)>0) THEN + TPBAKOUTN(IPOS)%TFILE%CDIRNAME=TRIM(COUT_DIR) + ELSE IF (LEN_TRIM(CIO_DIR)>0) THEN + TPBAKOUTN(IPOS)%TFILE%CDIRNAME=TRIM(CIO_DIR) + END IF ELSE IF (TRIM(HFILETYPE)=='BACKUP') THEN TPBAKOUTN(IPOS)%TFILE%CNAME=ADJUSTL(ADJUSTR(IO_SURF_MNH_MODEL(IMI)%COUTFILE)//'.'//YNUMBER) + IF (LEN_TRIM(CBAK_DIR)>0) THEN + TPBAKOUTN(IPOS)%TFILE%CDIRNAME=TRIM(CBAK_DIR) + ELSE IF (LEN_TRIM(CIO_DIR)>0) THEN + TPBAKOUTN(IPOS)%TFILE%CDIRNAME=TRIM(CIO_DIR) + END IF ELSE CALL PRINT_MSG(NVERB_FATAL,'IO','POPULATE_STRUCT','unknown filetype ('//TRIM(HFILETYPE)//')') ENDIF @@ -539,6 +549,8 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN) TPBAKOUTN(IPOS)%TFILE%TFILES_IOZ(JI)%TFILE%CMODE="WRITE" WRITE (YNUMBER,FMT="(I3.3)") JI TPBAKOUTN(IPOS)%TFILE%TFILES_IOZ(JI)%TFILE%CNAME = TRIM(TPBAKOUTN(IPOS)%TFILE%CNAME)//'.Z'//YNUMBER + IF(ALLOCATED(TPBAKOUTN(IPOS)%TFILE%CDIRNAME)) & + TPBAKOUTN(IPOS)%TFILE%TFILES_IOZ(JI)%TFILE%CDIRNAME = TRIM(TPBAKOUTN(IPOS)%TFILE%CDIRNAME) IF (TRIM(HFILETYPE)=='OUTPUT') THEN !Reduce the float precision if asked TPBAKOUTN(IPOS)%TFILE%TFILES_IOZ(JI)%TFILE%LNCREDUCE_FLOAT_PRECISION = LOUT_REDUCE_FLOAT_PRECISION(IMI) @@ -574,9 +586,10 @@ END SUBROUTINE POPULATE_STRUCT ! END SUBROUTINE IO_PREPARE_BAKOUT_STRUCT ! -SUBROUTINE IO_FILE_ADD2LIST(TPFILE,HNAME,HTYPE,HMODE, & - HFORM,HACCESS,HFORMAT,KLFINPRAR,KLFITYPE,KLFIVERB,KRECL, & - KMODEL,TPDADFILE,TPDATAFILE,OOLD) +SUBROUTINE IO_FILE_ADD2LIST(TPFILE,HNAME,HTYPE,HMODE, & + HFORM,HACCESS,HFORMAT,HDIRNAME, & + KLFINPRAR,KLFITYPE,KLFIVERB,KRECL,KMODEL, & + TPDADFILE,TPDATAFILE,OOLD) ! USE MODD_BAKOUT, ONLY: LOUT_COMPRESS,LOUT_REDUCE_FLOAT_PRECISION,NOUT_COMPRESS_LEVEL USE MODD_CONF, ONLY: CPROGRAM @@ -590,6 +603,7 @@ CHARACTER(LEN=*), INTENT(IN) :: HMODE !Opening mode (read, CHARACTER(LEN=*), OPTIONAL,INTENT(IN) :: HFORM !Formatted/unformatted CHARACTER(LEN=*), OPTIONAL,INTENT(IN) :: HACCESS !Direct/sequential 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) INTEGER, OPTIONAL,INTENT(IN) :: KLFITYPE !Type of the file (used to generate list of files to transfers) INTEGER, OPTIONAL,INTENT(IN) :: KLFIVERB !LFI verbosity level @@ -715,6 +729,10 @@ TPFILE => TFILE_LAST TPFILE%CNAME = HNAME TPFILE%CTYPE = HTYPE ! +IF (PRESENT(HDIRNAME)) THEN + IF (LEN_TRIM(HDIRNAME)>0) TPFILE%CDIRNAME=TRIM(HDIRNAME) +END IF +! IF (TRIM(HMODE)/='READ' .AND. TRIM(HMODE)/='WRITE') THEN CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','unknown mode ('//TRIM(HMODE)//') for file '//TRIM(HNAME)) END IF @@ -746,6 +764,9 @@ SELECT CASE(TPFILE%CTYPE) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','TPDATAFILE is not associated for DES file '//TRIM(HNAME)) TPFILE%TDATAFILE => TPDATAFILE TPDATAFILE%TDESFILE => TPFILE + IF (PRESENT(HDIRNAME)) & + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','HDIRNAME argument ignored for DES file '//TRIM(HNAME)) + IF (ALLOCATED(TPDATAFILE%CDIRNAME)) TPFILE%CDIRNAME = TPDATAFILE%CDIRNAME END IF diff --git a/src/LIB/SURCOUCHE/src/modn_confio.f90 b/src/LIB/SURCOUCHE/src/modn_confio.f90 index 3f41d09f3..a9c647314 100644 --- a/src/LIB/SURCOUCHE/src/modn_confio.f90 +++ b/src/LIB/SURCOUCHE/src/modn_confio.f90 @@ -36,7 +36,8 @@ ! ------------ ! USE MODD_IO_ll, ONLY : LVERB_OUTLST, LVERB_STDOUT, LVERB_ALLPRC, & - NIO_VERB, NIO_ABORT_LEVEL, NGEN_VERB, NGEN_ABORT_LEVEL + NIO_VERB, NIO_ABORT_LEVEL, NGEN_VERB, NGEN_ABORT_LEVEL, & + CIO_DIR ! IMPLICIT NONE ! @@ -48,7 +49,7 @@ LOGICAL,SAVE :: LLFIREAD = .FALSE. ! TRUE : enable LFI reading (disable NetCDF4 NAMELIST/NAM_CONFIO/LCDF4, LLFIOUT, LLFIREAD, & LVERB_OUTLST, LVERB_STDOUT, LVERB_ALLPRC, & NIO_VERB, NIO_ABORT_LEVEL, & - NGEN_VERB, NGEN_ABORT_LEVEL + NGEN_VERB, NGEN_ABORT_LEVEL, CIO_DIR ! END MODULE MODN_CONFIO diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90 index e8a868dba..632b7c6ea 100644 --- a/src/MNH/diag.f90 +++ b/src/MNH/diag.f90 @@ -105,7 +105,7 @@ USE MODD_FIELD_n USE MODD_GR_FIELD_n USE MODD_GRID, ONLY: XLONORI,XLATORI USE MODD_GRID_n -USE MODD_IO_ll, ONLY: NIO_VERB,NVERB_DEBUG,TFILEDATA,TFILE_SURFEX +USE MODD_IO_ll, ONLY: CIO_DIR,NIO_VERB,NVERB_DEBUG,TFILEDATA,TFILE_SURFEX USE MODD_LBC_n USE MODD_LES USE MODD_LES_BUDGET @@ -514,7 +514,8 @@ ZTIME1=ZTIME2 ! IF ( LAIRCRAFT_BALLOON ) THEN ! - CALL IO_FILE_ADD2LIST(TZDIACFILE,TRIM(CINIFILE)//'BAL','DIACHRONIC','WRITE',KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB) + CALL IO_FILE_ADD2LIST(TZDIACFILE,TRIM(CINIFILE)//'BAL','DIACHRONIC','WRITE', & + HDIRNAME=CIO_DIR,KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB) ! CALL IO_FILE_OPEN_ll(TZDIACFILE) ! diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index 7f2e2fac7..8591f8e3b 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -418,7 +418,7 @@ USE MODD_ADVFRC_n USE MODD_RELFRC_n USE MODD_2D_FRC USE MODD_IO_SURF_MNH, ONLY : IO_SURF_MNH_MODEL -USE MODD_IO_ll, ONLY : TFILEDATA,TFILE_FIRST,TFILE_LAST +USE MODD_IO_ll, ONLY : CIO_DIR,TFILEDATA,TFILE_FIRST,TFILE_LAST ! USE MODD_CH_PRODLOSSTOT_n USE MODI_CH_INIT_PRODLOSSTOT_n @@ -1530,6 +1530,7 @@ IF (KMI == 1) THEN WRITE(IO_SURF_MNH_MODEL(IMI)%COUTFILE,'(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG)) WRITE(YNAME, '(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG))//'.000' CALL IO_FILE_ADD2LIST(LUNIT_MODEL(IMI)%TDIAFILE,YNAME,'DIACHRONIC','WRITE', & + HDIRNAME=CIO_DIR, & KLFINPRAR=INT(50,KIND=LFI_INT),KLFITYPE=1,KLFIVERB=NVERB, & TPDADFILE=LUNIT_MODEL(NDAD(IMI))%TDIAFILE ) END DO diff --git a/src/MNH/modd_bakout.f90 b/src/MNH/modd_bakout.f90 index 79e3d137d..487cd4426 100644 --- a/src/MNH/modd_bakout.f90 +++ b/src/MNH/modd_bakout.f90 @@ -70,5 +70,7 @@ REAL,SAVE,DIMENSION(JPMODELMAX) :: XBAK_TIME_FREQ_FIRST = 0., XOUT_TIME_FREQ_FIR ! Time for first backup/output for each model (if XBAK/OUT_TIME_FREQ is set) CHARACTER(LEN=NMNHNAMELGTMAX),SAVE,ALLOCATABLE,DIMENSION(:,:) :: COUT_VAR ! Name of the fields to output ! +!Directory names for backups/outputs +CHARACTER(LEN=NDIRNAMELGTMAX) :: CBAK_DIR='', COUT_DIR='' ! END MODULE MODD_BAKOUT diff --git a/src/MNH/modd_parameters.f90 b/src/MNH/modd_parameters.f90 index 18c76d4c9..b24a62e89 100644 --- a/src/MNH/modd_parameters.f90 +++ b/src/MNH/modd_parameters.f90 @@ -80,6 +80,7 @@ INTEGER, PARAMETER :: JPOUTVARMAX = 192 ! Maximum allowed number of variables in INTEGER, PARAMETER :: NMNHNAMELGTMAX = 32 ! Maximum length of a MNH variable name INTEGER, PARAMETER :: NSTDNAMELGTMAX = 64 ! Maximum length of the standard name of a variable (CF convention) ! +INTEGER, PARAMETER :: NDIRNAMELGTMAX = 512 ! Maximum length of a directory name INTEGER, PARAMETER :: NFILENAMELGTMAX = 32 ! Maximum length of a file name (must be at least NFILENAMELGTMAXLFI) INTEGER, PARAMETER :: NFILENAMELGTMAXLFI = 28 ! Maximum length of a file name in LFI file (this is necessary ! to keep backward compatibility), MUST BE 28 diff --git a/src/MNH/modn_backup.f90 b/src/MNH/modn_backup.f90 index 5d681ce14..1a0e842a5 100644 --- a/src/MNH/modn_backup.f90 +++ b/src/MNH/modn_backup.f90 @@ -45,6 +45,7 @@ IMPLICIT NONE NAMELIST/NAM_BACKUP/LBAK_BEG,LBAK_END,& XBAK_TIME,NBAK_STEP,& NBAK_STEP_FREQ,NBAK_STEP_FREQ_FIRST,& - XBAK_TIME_FREQ,XBAK_TIME_FREQ_FIRST + XBAK_TIME_FREQ,XBAK_TIME_FREQ_FIRST,& + CBAK_DIR ! END MODULE MODN_BACKUP diff --git a/src/MNH/modn_output.f90 b/src/MNH/modn_output.f90 index 268632de0..0ac56ebdd 100644 --- a/src/MNH/modn_output.f90 +++ b/src/MNH/modn_output.f90 @@ -49,6 +49,7 @@ NAMELIST/NAM_OUTPUT/LOUT_BEG,LOUT_END,& XOUT_TIME_FREQ,XOUT_TIME_FREQ_FIRST, & COUT_VAR, & LOUT_REDUCE_FLOAT_PRECISION, & - LOUT_COMPRESS, NOUT_COMPRESS_LEVEL + LOUT_COMPRESS, NOUT_COMPRESS_LEVEL,& + COUT_DIR ! END MODULE MODN_OUTPUT diff --git a/src/MNH/set_mask.f90 b/src/MNH/set_mask.f90 index 3a7f61314..81f58e13a 100644 --- a/src/MNH/set_mask.f90 +++ b/src/MNH/set_mask.f90 @@ -77,7 +77,6 @@ INTEGER :: IIB,IJB ! Lower bounds of the physical ! sub-domain in x and y directions INTEGER :: IIE,IJE ! Upper bounds of the physical ! sub-domain in x and y directions -INTEGER :: IID, IRESP !------------------------------------------------------------------------------- ! !* 1. COMPUTES THE PHYSICAL SUBDOMAIN BOUNDS -- GitLab