From 977ce63f0b0e029ead52781557f4bb762f8fdb0f Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 29 Sep 2016 17:29:02 +0200 Subject: [PATCH] Philippe 29/09/2016: added new fields (and renamed 2 of them) to TFILEDATA datatype and began to use them --- src/LIB/SURCOUCHE/src/modd_io.f90 | 15 +++++++++++++-- src/MNH/modeln.f90 | 26 ++++++++++++++++++++------ src/MNH/set_grid.f90 | 24 +++++++++++++++++++++--- src/MNH/write_lfin.f90 | 2 +- 4 files changed, 55 insertions(+), 12 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index 47e3f7ddd..41dd6cc85 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 1ac060212..7788c1848 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 57f978c3c..824b4c0ec 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 ae506e469..f71aacaba 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 -- GitLab