diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index 47e3f7ddd27a9e5750ca02b987d745792d143bd5..41dd6cc85ec00a24796fa250a966441f1df783b8 100644 --- a/src/LIB/SURCOUCHE/src/modd_io.f90 +++ b/src/LIB/SURCOUCHE/src/modd_io.f90 @@ -49,8 +49,19 @@ END TYPE TOUTBAK !Structure describing the characteristics of a file TYPE TFILEDATA - CHARACTER(LEN=28) :: CFILENAME !Filename - CHARACTER(LEN=7) :: CFILETYPE = "UNKNOWN" !Filetype (backup, output...) + CHARACTER(LEN=28) :: CNAME !Filename + CHARACTER(LEN=7) :: CTYPE = "UNKNOWN" !Filetype (backup, output...) + CHARACTER(LEN=7) :: CFORMAT = "UNKNOWN" !Fileformat (NETCDF4, LFI...) + CHARACTER(LEN=7) :: CMODE = "UNKNOWN" !Opening mode (read, write...) + LOGICAL :: LOPENED = .FALSE. !Is the file opened + INTEGER :: NOPEN = 0 !Number of times the file has been opened (during the current execution) + ! + ! Fields for LFI files + INTEGER :: NLFINPRAR = 0 !Number of predicted articles of the LFI file (non crucial) + INTEGER :: NLFININAR = -1 !Number of articles present at opening of the LFI file + INTEGER :: NLFITYPE = -1 !Type of the file (used to generate list of files to transfers) + INTEGER :: NLFIVERB = 1 !LFI verbosity level + ! TYPE(TFILEDATA),POINTER :: TFILE_PREV => NULL() TYPE(TFILEDATA),POINTER :: TFILE_NEXT => NULL() END TYPE TFILEDATA diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index 1ac060212d6e6eb7cb180f9e37bfdaaf08c0ef50..7788c184895b1f1241ad2f056213ba531270e8eb 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -278,6 +278,7 @@ USE MODD_LUNIT USE MODD_GRID, ONLY: XLONORI,XLATORI USE MODD_SERIES, ONLY: LSERIES USE MODD_TURB_CLOUD, ONLY: NMODEL_CLOUD,CTURBLEN_CLOUD,XCEI +USE MODD_IO_ll, ONLY: TFILEDATA ! USE MODD_SUB_MODEL_n USE MODD_GET_n @@ -428,6 +429,7 @@ INTEGER :: INPRAR ! number of articles predicted in INTEGER :: ININAR ! number of articles present in ! the LFIFM file INTEGER :: ITYPE ! type of file (cpio or not) +INTEGER :: IVERB ! LFI verbosity level LOGICAL :: GSTEADY_DMASS ! conditional call to mass computation ! ! for computing time analysis @@ -525,6 +527,8 @@ REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZTMP TYPE(LIST_ll), POINTER :: TZFIELDC_ll ! list of fields to exchange TYPE(HALO2LIST_ll), POINTER :: TZHALO2C_ll ! list of fields to exchange ! +TYPE(TFILEDATA),POINTER :: TZFILE +CHARACTER(LEN=:),ALLOCATABLE :: YMODE !------------------------------------------------------------------------------- ! !* 0. MICROPHYSICAL SCHEME @@ -906,12 +910,21 @@ IF (IOUT < NOUT_NUMB ) THEN IF (KTCOUNT == TOUTBAKN(IOUT+1)%NSTEP) THEN IOUT=IOUT+1 GCLOSE_OUT=.TRUE. - INPRAR = 22 +2*(4+NRR+NSV) ! - YFMFILE = TOUTBAKN(IOUT)%TFILE%CFILENAME + TZFILE => TOUTBAKN(IOUT)%TFILE + YFMFILE = TZFILE%CNAME YDADFILE = TOUTBAKN(IOUT)%CDADFILENAME + YMODE = TZFILE%CMODE + INPRAR = TZFILE%NLFINPRAR + ITYPE = TZFILE%NLFITYPE + IVERB = TZFILE%NLFIVERB + ! + CALL FMOPEN_ll(YFMFILE,YMODE,CLUOUT,INPRAR,ITYPE,IVERB,ININAR,IRESP) + ! + TZFILE%NLFININAR = ININAR + TZFILE%LOPENED = .TRUE. + TZFILE%NOPEN = TZFILE%NOPEN + 1 ! - CALL FMOPEN_ll(YFMFILE,'WRITE',CLUOUT,INPRAR,ITYPE,NVERB,ININAR,IRESP) YDESFM=ADJUSTL(ADJUSTR(YFMFILE)//'.des') ! CALL WRITE_DESFM_n(IMI,YDESFM,CLUOUT) @@ -923,12 +936,12 @@ IF (IOUT < NOUT_NUMB ) THEN CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.) END IF ! - ! Reinitialize Lagragian variables at every model output + ! Reinitialize Lagragian variables at every model backup IF (LLG .AND. LINIT_LG .AND. CINIT_LG=='FMOUT') THEN CALL INI_LG(XXHAT,XYHAT,XZZ,XSVT,XLBXSVM,XLBYSVM) - IF (NVERB>=5) THEN + IF (IVERB>=5) THEN WRITE(UNIT=ILUOUT,FMT=*) '************************************' - WRITE(UNIT=ILUOUT,FMT=*) '*** Lagrangian variables refreshed after ',TRIM(YFMFILE),' output' + WRITE(UNIT=ILUOUT,FMT=*) '*** Lagrangian variables refreshed after ',TRIM(YFMFILE),' backup' WRITE(UNIT=ILUOUT,FMT=*) '************************************' END IF END IF @@ -1900,6 +1913,7 @@ XT_STEP_BUD = XT_STEP_BUD + ZTIME2 - ZTIME1 + XTIME_BU IF (GCLOSE_OUT) THEN GCLOSE_OUT=.FALSE. CALL FMCLOS_ll(YFMFILE,'KEEP',CLUOUT,IRESP) + TZFILE%LOPENED = .FALSE. END IF ! !------------------------------------------------------------------------------- diff --git a/src/MNH/set_grid.f90 b/src/MNH/set_grid.f90 index 57f978c3c24dcf4b27b0494ec66ab77470ae2935..824b4c0ec5271a5817e8acde9d607b92dfb1309e 100644 --- a/src/MNH/set_grid.f90 +++ b/src/MNH/set_grid.f90 @@ -243,6 +243,7 @@ USE MODD_BUDGET USE MODD_DYN USE MODD_FMOUT USE MODD_NESTING +USE MODD_NSV, ONLY: NSV ! USE MODE_GRIDCART USE MODE_GRIDPROJ @@ -717,9 +718,26 @@ DO IMI = 1, NMODEL TFILE_LAST => TFILE_LAST%TFILE_NEXT ENDIF OUT_MODEL(IMI)%TOUTBAKN(IPOS)%TFILE => TFILE_LAST - OUT_MODEL(IMI)%TOUTBAKN(IPOS)%TFILE%CFILETYPE="BACKUP" + OUT_MODEL(IMI)%TOUTBAKN(IPOS)%TFILE%CTYPE="BACKUP" + OUT_MODEL(IMI)%TOUTBAKN(IPOS)%TFILE%CMODE="WRITE" WRITE (YNUMBER,FMT="('.',I3.3)") IPOS - OUT_MODEL(IMI)%TOUTBAKN(IPOS)%TFILE%CFILENAME=ADJUSTL(ADJUSTR(IO_SURF_MNH_MODEL(IMI)%COUTFILE)//YNUMBER) + OUT_MODEL(IMI)%TOUTBAKN(IPOS)%TFILE%CNAME=ADJUSTL(ADJUSTR(IO_SURF_MNH_MODEL(IMI)%COUTFILE)//YNUMBER) + OUT_MODEL(IMI)%TOUTBAKN(IPOS)%TFILE%NLFITYPE=1 !1: to be transfered +!PW: TODO: set NLFIVERB only when useful (only if LFI file...) + OUT_MODEL(IMI)%TOUTBAKN(IPOS)%TFILE%NLFIVERB=NVERB + IF (LIOCDF4) THEN + OUT_MODEL(IMI)%TOUTBAKN(IPOS)%TFILE%CTYPE='NETCDF4' + IF (LLFIOUT) THEN + PRINT *,'Warning: LLFIOUT + LIOCDF4 = .TRUE. not yet implemented with new IO data structures' + OUT_MODEL(IMI)%TOUTBAKN(IPOS)%TFILE%NLFINPRAR= 22+2*(4+NRR+NSV) + END IF + ELSE IF (LLFIOUT) THEN + OUT_MODEL(IMI)%TOUTBAKN(IPOS)%TFILE%CTYPE='LFI' + OUT_MODEL(IMI)%TOUTBAKN(IPOS)%TFILE%NLFINPRAR= 22+2*(4+NRR+NSV) + ELSE + PRINT *,'Error: unknown backup fileformat' + CALL ABORT + ENDIF END IF END DO ! @@ -733,7 +751,7 @@ DO IMI = 1, NMODEL IF (NDAD(IMI) == IMI .OR. IMI == 1) THEN OUT_MODEL(IMI)%TOUTBAKN(:)%NOUTDAD = 0 !Check IPOS>0 because TOUTBAKN(0) does not exist (IPOS=0 only if no backups) - IF(IPOS>0) OUT_MODEL(IMI)%TOUTBAKN(IPOS)%CDADFILENAME = OUT_MODEL(IMI)%TOUTBAKN(IPOS)%TFILE%CFILENAME + IF(IPOS>0) OUT_MODEL(IMI)%TOUTBAKN(IPOS)%CDADFILENAME = OUT_MODEL(IMI)%TOUTBAKN(IPOS)%TFILE%CNAME ELSE DO IPOS = 1,OUT_MODEL(IMI)%NOUT_NUMB IDX = 0 diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90 index ae506e4692c42f305bb34fa117354f76691e8904..f71aacaba15f0fcb3aa375b97eb79a3f95437f20 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -376,7 +376,7 @@ YCOMMENT=' ' IGRID=0 ILENCH=LEN(YCOMMENT) IF (PRESENT(TPFILE)) THEN - CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,TPFILE%CFILETYPE,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,TPFILE%CTYPE,IGRID,ILENCH,YCOMMENT,IRESP) ELSE CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,YDIR,"UNKNOWN",IGRID,ILENCH,YCOMMENT,IRESP) ENDIF