From 220484c6953cc27797fb9bd8574e4592d2e30a06 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 27 Jul 2017 15:33:14 +0200 Subject: [PATCH] Philippe 27/07/2017: IO: * added IO_FILE_ADD2LIST subroutine and use it * IO_FILE_OPEN now requires the file to be in the file list * IO_FILE_FIND_BYNAME: added optional argument useful when checking that a file does not yet exist + bug correction when filelist is empty * added IO_FILE_PRINT_LIST subroutine (only for debugging) * added TPTR2FILE structure to allow construction of arrays of pointers to files * use IO_READ_FIELD for some 3D float arrays (in read_field.f90) * OPEN_ll: added UPDATE_METADATA internal subroutines to treat file metadata --- src/LIB/SURCOUCHE/src/modd_io.f90 | 5 + src/LIB/SURCOUCHE/src/mode_fm.f90 | 61 ++-- src/LIB/SURCOUCHE/src/mode_io.f90 | 86 ++++-- .../SURCOUCHE/src/mode_io_manage_struct.f90 | 187 ++++++++++-- src/MNH/diag.f90 | 45 +-- src/MNH/ini_modeln.f90 | 40 +-- src/MNH/ini_segn.f90 | 30 +- src/MNH/init_mnh.f90 | 20 +- src/MNH/modd_lunitn.f90 | 2 +- src/MNH/open_nestpgd_files.f90 | 79 ++---- src/MNH/prep_ideal_case.f90 | 46 +-- src/MNH/prep_nest_pgd.f90 | 68 ++--- src/MNH/prep_pgd.f90 | 23 +- src/MNH/prep_real_case.f90 | 27 +- src/MNH/prep_surfex.f90 | 25 +- src/MNH/read_field.f90 | 265 ++++++++---------- src/MNH/spawn_model2.f90 | 26 +- src/MNH/zoom_pgd.f90 | 24 +- 18 files changed, 525 insertions(+), 534 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index d2eb939e0..809e1e089 100644 --- a/src/LIB/SURCOUCHE/src/modd_io.f90 +++ b/src/LIB/SURCOUCHE/src/modd_io.f90 @@ -92,6 +92,11 @@ TYPE TFILEDATA TYPE(TFILEDATA),POINTER :: TFILE_NEXT => NULL() END TYPE TFILEDATA +!Structure containing a pointer to a file (useful to create arrays of pointers to files) +TYPE TPTR2FILE + TYPE(TFILEDATA),POINTER :: TZFILE => NULL() +END TYPE + TYPE(TFILEDATA),POINTER,SAVE :: TFILE_FIRST => NULL() TYPE(TFILEDATA),POINTER,SAVE :: TFILE_LAST => NULL() diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index 9f478552d..04104bcc1 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -134,7 +134,7 @@ END SUBROUTINE FMLOOK_ll SUBROUTINE IO_FILE_OPEN_ll(TPFILE,HFIPRI,KRESP,OPARALLELIO) ! -USE MODD_IO_ll, ONLY: ISP,LIOCDF4,TFILEDATA +USE MODD_IO_ll, ONLY: ISP,LIOCDF4,LLFIOUT,LLFIREAD,TFILEDATA USE MODE_FD_ll, ONLY: FD_ll,GETFD USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME ! @@ -144,10 +144,9 @@ INTEGER, INTENT(OUT) :: KRESP ! Return code LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO ! INTEGER :: ININAR ! Number of articles present in LFI file (unused here) -INTEGER :: JI,IRESP -CHARACTER (LEN=3) :: YNUMBER ! Character string for Z-level -TYPE(FD_ll), POINTER :: TZFDLFI,TZFD_IOZ -TYPE(TFILEDATA),POINTER :: TZFILE_IOZ +INTEGER :: IRESP +TYPE(FD_ll), POINTER :: TZFDLFI +TYPE(TFILEDATA),POINTER :: TZFILE ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_OPEN_ll','opening '//TRIM(TPFILE%CNAME)//' for '//TRIM(TPFILE%CMODE)) ! @@ -156,33 +155,37 @@ IF (TPFILE%LOPENED) THEN RETURN END IF ! -IF (.NOT.PRESENT(OPARALLELIO)) THEN - CALL FMOPEN_ll(TPFILE%CNAME,TPFILE%CMODE,HFIPRI,TPFILE%NLFINPRAR,TPFILE%NLFITYPE,TPFILE%NLFIVERB,ININAR,KRESP,TPFILE=TPFILE) -ELSE - CALL FMOPEN_ll(TPFILE%CNAME,TPFILE%CMODE,HFIPRI,TPFILE%NLFINPRAR,TPFILE%NLFITYPE,TPFILE%NLFIVERB,ININAR,KRESP,& - TPFILE=TPFILE,OPARALLELIO=OPARALLELIO) -END IF +!Check if file is in filelist +CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME),TZFILE,IRESP) +IF (IRESP/=0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_OPEN_ll','file '//TRIM(TPFILE%CNAME)//' not in filelist') +! +CALL FMOPEN_ll(TPFILE%CNAME,TPFILE%CMODE,HFIPRI,TPFILE%NLFINPRAR,TPFILE%NLFITYPE,TPFILE%NLFIVERB,ININAR,KRESP,& + TPFILE=TPFILE,OPARALLELIO=OPARALLELIO) ! TPFILE%LOPENED = .TRUE. TPFILE%NOPEN = TPFILE%NOPEN + 1 ! TZFDLFI=>GETFD(ADJUSTL(TRIM(TPFILE%CNAME)//'.lfi')) !TZFDLFI%CDF exists only if ISP == TZFDLFI%OWNER -IF (ISP == TZFDLFI%OWNER .AND. LIOCDF4) TPFILE%NNCID = TZFDLFI%CDF%NCID -! -IF (TZFDLFI%NB_PROCIO>1) THEN - DO JI = 1,TZFDLFI%NB_PROCIO - WRITE (YNUMBER,FMT="(I3.3)") JI - TZFD_IOZ => GETFD(TRIM(TPFILE%CNAME)//'.Z'//YNUMBER//'.lfi') - IF (ISP == TZFD_IOZ%OWNER .AND. LIOCDF4) THEN - CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//'.Z'//YNUMBER,TZFILE_IOZ,IRESP) - IF (IRESP/=0) & - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','file '//TRIM(TRIM(TPFILE%CNAME)//'.Z'//YNUMBER)//' not found in list') - TZFILE_IOZ%NNCID = TZFD_IOZ%CDF%NCID - TZFILE_IOZ%LOPENED = .TRUE. - TZFILE_IOZ%NOPEN = TZFILE_IOZ%NOPEN + 1 - END IF - END DO +IF (TRIM(TPFILE%CMODE) == 'READ' .AND. ISP == TZFDLFI%OWNER) THEN + IF (LIOCDF4 .AND. .NOT.LLFIREAD) THEN + TPFILE%NNCID = TZFDLFI%CDF%NCID + IF (TPFILE%NNCID<0) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','invalid NNCID for '//TRIM(TPFILE%CNAME)) + ELSE + TPFILE%NLFIFLU = TZFDLFI%FLU + IF (TPFILE%NLFIFLU<0) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','invalid NLFIFLU for '//TRIM(TPFILE%CNAME)) + ENDIF +ELSE IF (TRIM(TPFILE%CMODE) == 'WRITE' .AND. ISP == TZFDLFI%OWNER) THEN + IF (LIOCDF4) THEN + TPFILE%NNCID = TZFDLFI%CDF%NCID + IF (TPFILE%NNCID<0) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','invalid NNCID for '//TRIM(TPFILE%CNAME)) + END IF + IF (.NOT.LIOCDF4 .OR. LLFIOUT) THEN + TPFILE%NLFIFLU = TZFDLFI%FLU + IF (TPFILE%NLFIFLU<0) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','invalid NLFIFLU for '//TRIM(TPFILE%CNAME)) + END IF +ELSE IF (TRIM(TPFILE%CMODE) /= 'READ' .AND. TRIM(TPFILE%CMODE) /= 'WRITE') THEN + CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','unknown opening mode ('//TRIM(TPFILE%CMODE)//') for '//TRIM(TPFILE%CNAME)) END IF ! END SUBROUTINE IO_FILE_OPEN_ll @@ -213,7 +216,7 @@ INTEGER, INTENT(OUT)::KNINAR ! number of articles INTEGER, INTENT(OUT)::KRESP ! return-code if a problem ! araised. LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO -TYPE(TFILEDATA), INTENT(IN), OPTIONAL :: TPFILE ! File structure +TYPE(TFILEDATA), INTENT(INOUT), OPTIONAL :: TPFILE ! File structure ! ! Local variable ! @@ -238,6 +241,7 @@ INTEGER(KIND=IDCDF_KIND) :: INCERR CHARACTER(LEN=13) :: YTYPE CALL PRINT_MSG(NVERB_DEBUG,'IO','FMOPEN_ll','opening '//TRIM(HFILEM)//' for '//TRIM(HACTION)) + IF ( PRESENT(TPFILE) ) THEN YTYPE = TPFILE%CTYPE ELSE @@ -291,7 +295,7 @@ ENDIF IF(YTYPE/='OUTPUT') THEN YFNDES=ADJUSTL(TRIM(HFILEM)//'.des') CALL OPEN_ll(UNIT=INUMBR,FILE=YFNDES,FORM='FORMATTED',ACTION=HACTION,DELIM& - & ='QUOTE',IOSTAT=IRESP,RECL=1024*8,OPARALLELIO=GPARALLELIO,TPFILE=TPFILE) + & ='QUOTE',IOSTAT=IRESP,RECL=1024*8,OPARALLELIO=GPARALLELIO) ENDIF IF (IRESP /= 0) GOTO 1000 @@ -505,6 +509,7 @@ LOGICAL :: GPARALLELIO CHARACTER(LEN=13) :: YTYPE CALL PRINT_MSG(NVERB_DEBUG,'IO','FMCLOS_ll','closing '//TRIM(HFILEM)) + IF ( PRESENT(TPFILE) ) THEN YTYPE = TPFILE%CTYPE ELSE diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90 index 25fe5b610..b80650bc7 100644 --- a/src/LIB/SURCOUCHE/src/mode_io.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io.f90 @@ -232,6 +232,8 @@ CONTAINS USE MODE_NETCDF #endif USE MODD_IO_ll + USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST, IO_FILE_FIND_BYNAME + INTEGER, INTENT(OUT) :: UNIT !! Different from fortran OPEN CHARACTER(len=*),INTENT(IN), OPTIONAL :: FILE CHARACTER(len=*),INTENT(IN), OPTIONAL :: MODE @@ -252,7 +254,7 @@ CONTAINS INTEGER(KIND=LFI_INT), INTENT(IN), OPTIONAL :: KMELEV LOGICAL, INTENT(IN), OPTIONAL :: OPARALLELIO !JUANZ - TYPE(TFILEDATA), INTENT(IN), OPTIONAL :: TPFILE + TYPE(TFILEDATA), INTENT(INOUT), OPTIONAL :: TPFILE ! ! local var ! @@ -280,7 +282,7 @@ CONTAINS #endif CHARACTER(len=20) :: YACTION CHARACTER(len=20) :: YMODE - INTEGER :: IOS,IERR + INTEGER :: IOS,IERR,IRESP INTEGER(KIND=IDCDF_KIND) :: IOSCDF INTEGER :: ICOMM INTEGER :: ICMPRES @@ -292,6 +294,7 @@ CONTAINS !JUAN SX5 : probleme function retournant un pointer TYPE(FD_ll), POINTER :: TZJUAN LOGICAL :: GPARALLELIO + TYPE(TFILEDATA),POINTER :: TZSPLITFILE IF ( PRESENT(FILE) ) THEN CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','opening '//TRIM(FILE)//' for '//TRIM(ACTION)) @@ -534,7 +537,7 @@ CONTAINS ELSE !! NON I/O processors case IOS = 0 - TZFD%FLU = JPFNULL + TZFD%FLU = JPFNULL END IF CASE('SPECIFIC') @@ -655,7 +658,8 @@ CONTAINS TZFD%FLU = -1 END IF IF (TZFD%NB_PROCIO .GT. 1 ) THEN - IF (.NOT.PRESENT(TPFILE)) CALL PRINT_MSG(NVERB_FATAL,'IO','INI_MODEL_n','TPFILE not provided for IO_ZSPLIT case') + IF (.NOT.PRESENT(TPFILE)) CALL PRINT_MSG(NVERB_WARNING,'IO','OPEN_ll','TPFILE not provided for IO_ZSPLIT case for file '& + //TRIM(FILE)) DO ifile=0,TZFD%NB_PROCIO-1 irank_procio = 1 + io_rank(ifile,ISNPROC,TZFD%NB_PROCIO) write(cfile ,'(".Z",i3.3)') ifile+1 @@ -669,21 +673,14 @@ CONTAINS TZFD_IOZ%FLU = -1 TZFD_IOZ%PARAM =>LFIPAR - ALLOCATE(TFILE_LAST%TFILE_NEXT) - TFILE_LAST%TFILE_NEXT%TFILE_PREV => TFILE_LAST - TFILE_LAST => TFILE_LAST%TFILE_NEXT - ! Copy values from 'main' (non-splitted) file - TFILE_LAST%CNAME = TRIM(TPFILE%CNAME)//TRIM(CFILE) - TFILE_LAST%CTYPE = TPFILE%CTYPE - TFILE_LAST%CFORMAT = TPFILE%CFORMAT - TFILE_LAST%CMODE = TPFILE%CMODE - ! - TFILE_LAST%NLFITYPE = TPFILE%NLFITYPE - TFILE_LAST%NLFIVERB = TPFILE%NLFIVERB - ! - TFILE_LAST%LNCREDUCE_FLOAT_PRECISION = TPFILE%LNCREDUCE_FLOAT_PRECISION - TFILE_LAST%LNCCOMPRESS = TPFILE%LNCCOMPRESS - TFILE_LAST%NNCCOMPRESS_LEVEL = TPFILE%NNCCOMPRESS_LEVEL + IF (PRESENT(TPFILE)) THEN + CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//TRIM(CFILE),TZSPLITFILE,IRESP,OOLD=.FALSE.) + + 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) + END IF + END IF IF ( irank_procio .EQ. ISP ) THEN #if defined(MNH_IOCDF4) @@ -750,6 +747,9 @@ CONTAINS ININAR8) !KNINAR = ININAR8 END IF + + IF (PRESENT(TPFILE)) CALL UPDATE_METADATA(TZSPLITFILE) + ENDIF ENDDO END IF @@ -757,6 +757,8 @@ CONTAINS END SELECT +! CALL UPDATE_METADATA(TPFILE) + ! Recherche d'un communicateur a reutiliser ! TZFD is the first element @@ -794,6 +796,52 @@ CONTAINS END FUNCTION SUFFIX + SUBROUTINE UPDATE_METADATA(TPFILEMD) + TYPE(TFILEDATA), INTENT(INOUT), OPTIONAL :: TPFILEMD + + TYPE(FD_ll), POINTER :: TZFDLFI + + IF(.NOT.PRESENT(TPFILEMD)) RETURN + + TPFILEMD%LOPENED = .TRUE. + TPFILEMD%NOPEN = TPFILEMD%NOPEN + 1 + + NULLIFY(TZFDLFI) + + TZFDLFI=>GETFD(ADJUSTL(TRIM(TPFILEMD%CNAME)//'.lfi')) + + IF(.NOT.ASSOCIATED(TZFDLFI)) & + CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll::UPDATE_METADATA','TZFDLFI not found for '& + //TRIM(TPFILEMD%CNAME)) + + !TZFDLFI%CDF exists only if ISP == TZFDLFI%OWNER + IF (TRIM(TPFILEMD%CMODE) == 'READ' .AND. ISP == TZFDLFI%OWNER) THEN + IF (LIOCDF4 .AND. .NOT.LLFIREAD) THEN + TPFILEMD%NNCID = TZFDLFI%CDF%NCID + IF (TPFILEMD%NNCID<0) CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll::UPDATE_METADATA','invalid NNCID for '& + //TRIM(TPFILEMD%CNAME)) + ELSE + TPFILEMD%NLFIFLU = TZFDLFI%FLU + IF (TPFILEMD%NLFIFLU<0) CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll::UPDATE_METADATA','invalid NLFIFLU for '& + //TRIM(TPFILEMD%CNAME)) + ENDIF + ELSE IF (TRIM(TPFILEMD%CMODE) == 'WRITE' .AND. ISP == TZFDLFI%OWNER) THEN + IF (LIOCDF4) THEN + TPFILEMD%NNCID = TZFDLFI%CDF%NCID + IF (TPFILEMD%NNCID<0) CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll::UPDATE_METADATA','invalid NNCID for '& + //TRIM(TPFILEMD%CNAME)) + END IF + IF (.NOT.LIOCDF4 .OR. LLFIOUT) THEN + TPFILEMD%NLFIFLU = TZFDLFI%FLU + IF (TPFILEMD%NLFIFLU<0) CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll::UPDATE_METADATA','invalid NLFIFLU for '& + //TRIM(TPFILEMD%CNAME)) + END IF + ELSE IF (TRIM(TPFILEMD%CMODE) /= 'READ' .AND. TRIM(TPFILEMD%CMODE) /= 'WRITE') THEN + CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll::UPDATE_METADATA','unknown opening mode ('//TRIM(TPFILEMD%CMODE)//') for '& + //TRIM(TPFILEMD%CNAME)) + END IF + + END SUBROUTINE UPDATE_METADATA END SUBROUTINE OPEN_ll SUBROUTINE CLOSE_ll(HFILE,IOSTAT,STATUS,OPARALLELIO) diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 index bd3fd3145..af5188262 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 @@ -487,7 +487,7 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN) TPBAKOUTN(IPOS)%TFILE%CTYPE=HFILETYPE TPBAKOUTN(IPOS)%TFILE%CMODE="WRITE" WRITE (YNUMBER,FMT="(I3.3)") IPOS - IF (HFILETYPE=='OUTPUT') THEN + IF (TRIM(HFILETYPE)=='OUTPUT') THEN ! Add a "OUT" suffix for output files TPBAKOUTN(IPOS)%TFILE%CNAME=ADJUSTL(ADJUSTR(IO_SURF_MNH_MODEL(IMI)%COUTFILE)//'.OUT.'//YNUMBER) !Reduce the float precision if asked @@ -500,7 +500,7 @@ 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) - ELSE IF (HFILETYPE=='BACKUP') THEN + ELSE IF (TRIM(HFILETYPE)=='BACKUP') THEN TPBAKOUTN(IPOS)%TFILE%CNAME=ADJUSTL(ADJUSTR(IO_SURF_MNH_MODEL(IMI)%COUTFILE)//'.'//YNUMBER) ELSE CALL PRINT_MSG(NVERB_FATAL,'IO','POPULATE_STRUCT','unknown filetype ('//TRIM(HFILETYPE)//')') @@ -513,11 +513,11 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN) TPBAKOUTN(IPOS)%TFILE%CFORMAT='NETCDF4' ELSE TPBAKOUTN(IPOS)%TFILE%CFORMAT='LFICDF4' - IF (HFILETYPE=='BACKUP') TPBAKOUTN(IPOS)%TFILE%NLFINPRAR= 22+2*(4+NRR+NSV) + IF (TRIM(HFILETYPE)=='BACKUP') TPBAKOUTN(IPOS)%TFILE%NLFINPRAR= 22+2*(4+NRR+NSV) END IF ELSE IF (LLFIOUT) THEN TPBAKOUTN(IPOS)%TFILE%CFORMAT='LFI' - IF (HFILETYPE=='BACKUP') TPBAKOUTN(IPOS)%TFILE%NLFINPRAR= 22+2*(4+NRR+NSV) + IF (TRIM(HFILETYPE)=='BACKUP') TPBAKOUTN(IPOS)%TFILE%NLFINPRAR= 22+2*(4+NRR+NSV) ELSE CALL PRINT_MSG(NVERB_FATAL,'IO','POPULATE_STRUCT','unknown backup/output fileformat') ENDIF @@ -537,7 +537,7 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN) TPBAKOUTN(IPOS)%TFILE_IOZ(JI)%TFILE%CMODE="WRITE" WRITE (YNUMBER,FMT="(I3.3)") JI TPBAKOUTN(IPOS)%TFILE_IOZ(JI)%TFILE%CNAME = TRIM(TPBAKOUTN(IPOS)%TFILE%CNAME)//'.Z'//YNUMBER - IF (HFILETYPE=='OUTPUT') THEN + IF (TRIM(HFILETYPE)=='OUTPUT') THEN !Reduce the float precision if asked TPBAKOUTN(IPOS)%TFILE_IOZ(JI)%TFILE%LNCREDUCE_FLOAT_PRECISION = LOUT_REDUCE_FLOAT_PRECISION(IMI) !Set compression if asked @@ -572,32 +572,160 @@ END SUBROUTINE POPULATE_STRUCT ! END SUBROUTINE IO_PREPARE_BAKOUT_STRUCT ! -SUBROUTINE IO_FILE_FIND_BYNAME(HNAME,TPFILE,KRESP) +SUBROUTINE IO_FILE_ADD2LIST(TPFILE,HNAME,HTYPE,HMODE,KLFINPRAR,KLFITYPE,KLFIVERB,TPDADFILE) +! +USE MODD_FMOUT, ONLY : LOUT_COMPRESS,LOUT_REDUCE_FLOAT_PRECISION,NOUT_COMPRESS_LEVEL +USE MODE_MODELN_HANDLER, ONLY : GET_CURRENT_MODEL_INDEX +! +TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPFILE !File structure to return +CHARACTER(LEN=*), INTENT(IN) :: HNAME !Filename +CHARACTER(LEN=*), INTENT(IN) :: HTYPE !Filetype (backup, output, prepidealcase...) +CHARACTER(LEN=*), INTENT(IN) :: HMODE !Opening mode (read, write...) +INTEGER, 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 +TYPE(TFILEDATA),POINTER,OPTIONAL,INTENT(IN) :: TPDADFILE !Corresponding dad file +! +INTEGER :: IMI,IRESP +INTEGER :: ILFINPRAR +INTEGER :: ILFITYPE +INTEGER :: ILFIVERB +TYPE(TFILEDATA),POINTER :: TZFILE_DUMMY +! +CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_ADD2LIST','called for '//TRIM(HNAME)) +! +IF (ASSOCIATED(TPFILE)) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already associated') +! +CALL IO_FILE_FIND_BYNAME(HNAME,TZFILE_DUMMY,IRESP,OOLD=.FALSE.) +IF (IRESP==0) THEN + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already in filelist') + RETURN +END IF +! +IMI = GET_CURRENT_MODEL_INDEX() +! +IF(PRESENT(KLFINPRAR)) THEN + ILFINPRAR = KLFINPRAR +ELSE + ILFINPRAR = 0 +END IF +! +IF(PRESENT(KLFITYPE)) THEN + ILFITYPE = KLFITYPE +ELSE + ILFITYPE = -1 +END IF +! +IF(PRESENT(KLFIVERB)) THEN + ILFIVERB = KLFIVERB +ELSE + ILFIVERB = -1 +END IF +! +IF (.NOT.ASSOCIATED(TFILE_LAST)) THEN + ALLOCATE(TFILE_LAST) + TFILE_FIRST => TFILE_LAST +ELSE + ALLOCATE(TFILE_LAST%TFILE_NEXT) + TFILE_LAST%TFILE_NEXT%TFILE_PREV => TFILE_LAST + TFILE_LAST => TFILE_LAST%TFILE_NEXT +END IF +! +TPFILE => TFILE_LAST +! +TPFILE%CNAME = HNAME +TPFILE%CTYPE = HTYPE +! +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 +! +TPFILE%CMODE = HMODE +! +IF (TRIM(HMODE)=='READ') THEN + IF (LLFIREAD) THEN + TPFILE%CFORMAT = 'LFI' + TPFILE%NLFINPRAR = ILFINPRAR + ELSE IF (LIOCDF4) THEN + TPFILE%CFORMAT = 'NETCDF4' + ELSE + CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','invalid format for file '//TRIM(HNAME)) + END IF +ELSE IF (TRIM(HMODE)=='WRITE') THEN + IF (LLFIOUT .AND. LIOCDF4) THEN + TPFILE%CFORMAT = 'LFICDF4' + TPFILE%NLFINPRAR = ILFINPRAR + ELSE IF (LIOCDF4) THEN + TPFILE%CFORMAT = 'NETCDF4' + ELSE IF (LLFIOUT) THEN + TPFILE%CFORMAT = 'LFI' + TPFILE%NLFINPRAR = ILFINPRAR + ELSE + CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','invalid format for file '//TRIM(HNAME)) + END IF +END IF +! +TPFILE%LOPENED = .FALSE. +TPFILE%NOPEN = 0 +TPFILE%NCLOSE = 0 +! +TPFILE%NLFITYPE = ILFITYPE +TPFILE%NLFIVERB = ILFIVERB +! +IF (TRIM(HTYPE)=='OUTPUT') THEN + TPFILE%LNCREDUCE_FLOAT_PRECISION = LOUT_REDUCE_FLOAT_PRECISION(IMI) + TPFILE%LNCCOMPRESS = LOUT_COMPRESS(IMI) + TPFILE%NNCCOMPRESS_LEVEL = NOUT_COMPRESS_LEVEL(IMI) +END IF +! +IF(PRESENT(TPDADFILE)) THEN + IF (.NOT.ASSOCIATED(TPDADFILE)) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','TPDADFILE provided but not associated') + TPFILE%TDADFILE => TPDADFILE +ELSE + TPFILE%TDADFILE => NULL() +END IF +! +END SUBROUTINE IO_FILE_ADD2LIST +! +SUBROUTINE IO_FILE_FIND_BYNAME(HNAME,TPFILE,KRESP,OOLD) ! CHARACTER(LEN=*), INTENT(IN) :: HNAME ! Name of the file to find TYPE(TFILEDATA),POINTER,INTENT(OUT) :: TPFILE ! File structure to return INTEGER, INTENT(OUT) :: KRESP ! Return value +LOGICAL, OPTIONAL, INTENT(IN) :: OOLD ! FALSE if new file (should not be found) ! TYPE(TFILEDATA),POINTER :: TZFILE ! File structure +LOGICAL :: GOLD ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_FIND_BYNAME','looking for: '//TRIM(HNAME)) ! NULLIFY(TPFILE) KRESP = 0 ! -TZFILE => TFILE_FIRST +IF (PRESENT(OOLD)) THEN + GOLD = OOLD +ELSE + GOLD = .TRUE. +END IF ! -DO - IF (TRIM(TZFILE%CNAME) == TRIM(HNAME) ) THEN - TPFILE => TZFILE - EXIT - END IF - IF (.NOT.ASSOCIATED(TZFILE%TFILE_NEXT)) EXIT - TZFILE => TZFILE%TFILE_NEXT -END DO +IF (.NOT.ASSOCIATED(TFILE_FIRST)) THEN + IF (GOLD) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_FIND_BYNAME','filelist is empty') +ELSE + ! + TZFILE => TFILE_FIRST + ! + DO + IF (TRIM(TZFILE%CNAME) == TRIM(HNAME) ) THEN + TPFILE => TZFILE + EXIT + END IF + IF (.NOT.ASSOCIATED(TZFILE%TFILE_NEXT)) EXIT + TZFILE => TZFILE%TFILE_NEXT + END DO +END IF ! IF (.NOT.ASSOCIATED(TPFILE)) THEN - CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_FIND_BYNAME','file '//TRIM(HNAME)//' not found in list') + IF (GOLD) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_FIND_BYNAME','file '//TRIM(HNAME)//' not found in list') KRESP = -1 !File not found ELSE CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_FIND_BYNAME',TRIM(HNAME)//' was found') @@ -605,4 +733,31 @@ END IF ! END SUBROUTINE IO_FILE_FIND_BYNAME ! +SUBROUTINE IO_FILE_PRINT_LIST(TPFILE_FIRST) +! +TYPE(TFILEDATA),POINTER,OPTIONAL,INTENT(IN) :: TPFILE_FIRST +! +TYPE(TFILEDATA),POINTER :: TZFILE ! File structure +! +CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_PRINT_LIST','called') +! +IF (PRESENT(TPFILE_FIRST)) THEN + IF (.NOT.ASSOCIATED(TPFILE_FIRST)) RETURN + TZFILE => TPFILE_FIRST +ELSE + IF (.NOT.ASSOCIATED(TFILE_FIRST)) RETURN + TZFILE => TFILE_FIRST +END IF +! +WRITE (*,'(A28," ",A13," ",A7," ",A7," ",L1," ",I6," ",I6," ",I3," ",I3)' ) TZFILE%CNAME,TZFILE%CTYPE,TZFILE%CFORMAT,& + TZFILE%CMODE,TZFILE%LOPENED,TZFILE%NLFIFLU,TZFILE%NNCID,TZFILE%NOPEN,TZFILE%NCLOSE +! +DO WHILE (ASSOCIATED(TZFILE%TFILE_NEXT)) + TZFILE => TZFILE%TFILE_NEXT + WRITE (*,'(A28," ",A13," ",A7," ",A7," ",L1," ",I6," ",I6," ",I3," ",I3)' ) TZFILE%CNAME,TZFILE%CTYPE,TZFILE%CFORMAT,& + TZFILE%CMODE,TZFILE%LOPENED,TZFILE%NLFIFLU,TZFILE%NNCID,TZFILE%NOPEN,TZFILE%NCLOSE +END DO +! +END SUBROUTINE IO_FILE_PRINT_LIST +! END MODULE MODE_IO_MANAGE_STRUCT diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90 index 380d8d698..12b94a11d 100644 --- a/src/MNH/diag.f90 +++ b/src/MNH/diag.f90 @@ -141,6 +141,7 @@ USE MODE_TIME USE MODE_FM USE MODE_FMWRIT, ONLY : IO_WRITE_HEADER USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST USE MODE_ll USE MODE_MODELN_HANDLER USE MODE_MSG @@ -198,8 +199,8 @@ INTEGER :: IIU, IJU, IKU INTEGER :: IINFO_ll ! return code for _ll routines REAL, DIMENSION(:,:),ALLOCATABLE :: ZSEA,ZTOWN ! -TYPE(TFILEDATA),TARGET :: TZFILE -TYPE(TFILEDATA) :: TZDIACFILE +TYPE(TFILEDATA),POINTER :: TZFILE +TYPE(TFILEDATA),POINTER :: TZDIACFILE ! NAMELIST/NAM_DIAG/ CISO, LVAR_RS, LVAR_LS, & NCONV_KF, NRAD_3D, CRAD_SAT, NRTTOVINFO, LRAD_SUBG_COND, & @@ -233,6 +234,8 @@ NAMELIST/NAM_CONF_DIAG/JPHEXT, NHALO !* 0.0 Initializations ! --------------- ! +TZFILE => NULL() +TZDIACFILE => NULL() ! CALL GOTO_MODEL(1) ! @@ -448,24 +451,7 @@ ENDIF INPRAR = 24 +2*(4+NRR+NSV) COUTFMFILE=TRIM(CINIFILE)//YSUFFIX ! -TZFILE%CNAME = TRIM(CINIFILE)//YSUFFIX -TZFILE%CTYPE = 'DIAG' -IF (LIOCDF4) THEN - IF (.NOT.LLFIOUT) THEN - TZFILE%CFORMAT='NETCDF4' - ELSE - TZFILE%CFORMAT='LFICDF4' - TZFILE%NLFINPRAR= INPRAR - END IF -ELSE IF (LLFIOUT) THEN - TZFILE%CFORMAT='LFI' - TZFILE%NLFINPRAR= INPRAR -ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','DIAG','unknown backup/output fileformat') -ENDIF -TZFILE%CMODE = 'WRITE' -TZFILE%NLFITYPE = 1 -TZFILE%NLFIVERB = NVERB +CALL IO_FILE_ADD2LIST(TZFILE,TRIM(CINIFILE)//YSUFFIX,'DIAG','WRITE',KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB) ! CALL IO_FILE_OPEN_ll(TZFILE,CLUOUT,IRESP) ! @@ -530,24 +516,7 @@ ZTIME1=ZTIME2 ! IF ( LAIRCRAFT_BALLOON ) THEN ! - TZDIACFILE%CNAME = TRIM(CINIFILE)//'BAL' - TZDIACFILE%CTYPE = 'DIACHRONIC' - IF (LIOCDF4) THEN - IF (.NOT.LLFIOUT) THEN - TZDIACFILE%CFORMAT = 'NETCDF4' - ELSE - TZDIACFILE%CFORMAT = 'LFICDF4' - TZDIACFILE%NLFINPRAR = INPRAR - END IF - ELSE IF (LLFIOUT) THEN - TZDIACFILE%CFORMAT = 'LFI' - TZDIACFILE%NLFINPRAR = INPRAR - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','DIAG','unknown backup/output fileformat') - ENDIF - TZDIACFILE%CMODE = 'WRITE' - TZDIACFILE%NLFITYPE = 1 - TZDIACFILE%NLFIVERB = NVERB + CALL IO_FILE_ADD2LIST(TZDIACFILE,TRIM(CINIFILE)//'BAL','DIACHRONIC','WRITE',KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB) ! CALL IO_FILE_OPEN_ll(TZDIACFILE,CLUOUT,IRESP) ! diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index 0027d610f..0f4b2d272 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -282,6 +282,7 @@ END MODULE MODI_INI_MODEL_n USE MODE_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST USE MODE_FM USE MODE_FMREAD USE MODE_MSG @@ -450,11 +451,7 @@ INTEGER :: IRESP ! Return code of FM routines INTEGER :: ININAR ! File management variable INTEGER :: IMASDEV ! version of MESONH in the input file INTEGER :: ILUOUT ! Logical unit number of output-listing -CHARACTER(LEN=2) :: YDIR ! Type of the data field in LFIFM file -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file -CHARACTER (LEN=100) :: YCOMMENT!comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file +CHARACTER(LEN=28) :: YNAME INTEGER :: IIU ! Upper dimension in x direction (local) INTEGER :: IJU ! Upper dimension in y direction (local) INTEGER :: IIU_ll ! Upper dimension in x direction (global) @@ -1535,33 +1532,14 @@ CALL INI_BIKHARDT_n (NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),KMI) IF (KMI == 1) THEN DO IMI = 1 , NMODEL WRITE(IO_SURF_MNH_MODEL(IMI)%COUTFILE,'(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG)) - WRITE(LUNIT_MODEL(IMI)%TDIAFILE%CNAME, '(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG))//'.000' - LUNIT_MODEL(IMI)%TDIAFILE%CTYPE = 'DIACHRONIC' - IF (LIOCDF4) THEN - IF (.NOT.LLFIOUT) THEN - LUNIT_MODEL(IMI)%TDIAFILE%CFORMAT = 'NETCDF4' - ELSE - LUNIT_MODEL(IMI)%TDIAFILE%CFORMAT = 'LFICDF4' - LUNIT_MODEL(IMI)%TDIAFILE%NLFINPRAR = 50 - END IF - ELSE IF (LLFIOUT) THEN - LUNIT_MODEL(IMI)%TDIAFILE%CFORMAT = 'LFI' - LUNIT_MODEL(IMI)%TDIAFILE%NLFINPRAR = 50 - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','INI_MODEL_n','unknown backup/output fileformat') - ENDIF - LUNIT_MODEL(IMI)%TDIAFILE%CMODE = 'WRITE' - LUNIT_MODEL(IMI)%TDIAFILE%NLFITYPE = 1 - LUNIT_MODEL(IMI)%TDIAFILE%NLFIVERB = NVERB - LUNIT_MODEL(IMI)%TDIAFILE%TDADFILE => LUNIT_MODEL(NDAD(IMI))%TDIAFILE - IF (.NOT.ASSOCIATED(TFILE_FIRST)) THEN - TFILE_FIRST => LUNIT_MODEL(IMI)%TDIAFILE - ELSE - LUNIT_MODEL(IMI)%TDIAFILE%TFILE_PREV => TFILE_LAST - END IF - TFILE_LAST => LUNIT_MODEL(IMI)%TDIAFILE + WRITE(YNAME, '(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG))//'.000' + CALL IO_FILE_ADD2LIST(LUNIT_MODEL(IMI)%TDIAFILE,YNAME,'DIACHRONIC','WRITE', & + KLFINPRAR=50,KLFITYPE=1,KLFIVERB=NVERB, & + TPDADFILE=LUNIT_MODEL(NDAD(IMI))%TDIAFILE ) END DO ! + TDIAFILE => LUNIT_MODEL(KMI)%TDIAFILE !Necessary because no call to GOTO_MODEL before needing it + ! IF (CPROGRAM=='MESONH') THEN IF ( NDAD(KMI) == 1) CDAD_NAME(KMI) = CEXP//'.1.'//CSEG IF ( NDAD(KMI) == 2) CDAD_NAME(KMI) = CEXP//'.2.'//CSEG @@ -1638,7 +1616,7 @@ IF (CCLOUD=='LIMA') CALL INIT_AEROSOL_PROPERTIES ! -------------------------------- ! CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-before read_field::XUT",PRECISION) -CALL READ_FIELD(TPINIFILE%CNAME,HLUOUT,IMASDEV, IIU,IJU,IKU,XTSTEP, & +CALL READ_FIELD(TPINIFILE,HLUOUT,IMASDEV, IIU,IJU,IKU,XTSTEP, & CGETTKET,CGETRVT,CGETRCT,CGETRRT,CGETRIT,CGETCIT, & CGETRST,CGETRGT,CGETRHT,CGETSVT,CGETSRCT,CGETSIGS,CGETCLDFR, & CGETBL_DEPTH,CGETSBL_DEPTH,CGETPHC,CGETPHR,CUVW_ADV_SCHEME, & diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90 index 68c6209b1..72794550f 100644 --- a/src/MNH/ini_segn.f90 +++ b/src/MNH/ini_segn.f90 @@ -18,11 +18,11 @@ SUBROUTINE INI_SEG_n(KMI,HLUOUT,TPINIFILE,HINIFILEPGD,PTSTEP_ALL) ! USE MODD_IO_ll, ONLY : TFILEDATA ! -INTEGER, INTENT(IN) :: KMI !Model index -CHARACTER (LEN=*), INTENT(OUT) :: HLUOUT !Name for output-listing of nested models -TYPE(TFILEDATA), INTENT(OUT) :: TPINIFILE !Initial file -CHARACTER (LEN=28), INTENT(OUT) :: HINIFILEPGD -REAL,DIMENSION(:), INTENT(INOUT) :: PTSTEP_ALL ! Time STEP of ALL models +INTEGER, INTENT(IN) :: KMI !Model index +CHARACTER (LEN=*), INTENT(OUT) :: HLUOUT !Name for output-listing of nested models +TYPE(TFILEDATA), POINTER, INTENT(OUT) :: TPINIFILE !Initial file +CHARACTER (LEN=28), INTENT(OUT) :: HINIFILEPGD +REAL,DIMENSION(:), INTENT(INOUT) :: PTSTEP_ALL ! Time STEP of ALL models ! END SUBROUTINE INI_SEG_n ! @@ -186,6 +186,7 @@ USE MODE_FIELD USE MODE_FMREAD USE MODE_FM USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST USE MODE_MSG USE MODE_POS ! @@ -201,11 +202,11 @@ IMPLICIT NONE ! !* 0.1 declarations of arguments ! -INTEGER, INTENT(IN) :: KMI !Model index -CHARACTER (LEN=*), INTENT(OUT) :: HLUOUT !Name for output-listing of nested models -TYPE(TFILEDATA), INTENT(OUT) :: TPINIFILE !Initial file -CHARACTER (LEN=28), INTENT(OUT) :: HINIFILEPGD -REAL,DIMENSION(:), INTENT(INOUT) :: PTSTEP_ALL ! Time STEP of ALL models +INTEGER, INTENT(IN) :: KMI !Model index +CHARACTER (LEN=*), INTENT(OUT) :: HLUOUT !Name for output-listing of nested models +TYPE(TFILEDATA), POINTER, INTENT(OUT) :: TPINIFILE !Initial file +CHARACTER (LEN=28), INTENT(OUT) :: HINIFILEPGD +REAL,DIMENSION(:), INTENT(INOUT) :: PTSTEP_ALL ! Time STEP of ALL models ! !* 0.1 declarations of local variables ! @@ -255,6 +256,7 @@ CHARACTER (LEN=4) :: YELEC CHARACTER (LEN=3) :: YEQNSYS TYPE(FD_ll), POINTER :: TZFD ! +TPINIFILE => NULL() !------------------------------------------------------------------------------- ! !* 1. OPEN OUPTUT-LISTING FILE AND EXSEG FILE @@ -342,7 +344,10 @@ IF (CPROGRAM=='MESONH') THEN END IF HINIFILEPGD=CINIFILEPGD_n YINIFILE=CINIFILE_n - CALL FMOPEN_ll(YINIFILE,'READ',HLUOUT,0,2,NVERB,ININAR,IRESP) + + CALL IO_FILE_ADD2LIST(TPINIFILE,TRIM(YINIFILE),'PREPIDEALCASE','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=NVERB) + + CALL IO_FILE_OPEN_ll(TPINIFILE,HLUOUT,IRESP) END IF ! !------------------------------------------------------------------------------- @@ -385,6 +390,9 @@ END IF !* 6. READ in the LFI file SOME VARIABLES of MODD_CONF ! ------------------------------------------------ ! +NULLIFY(TPINIFILE) +ALLOCATE(TPINIFILE) !TODO: deallocate it +! TPINIFILE%CNAME = YINIFILE !TPINIFILE%CTYPE = '' CALL PRINT_MSG(NVERB_WARNING,'IO','INI_SEG_n','filetype not (yet) set') diff --git a/src/MNH/init_mnh.f90 b/src/MNH/init_mnh.f90 index 8f09d9f73..cfaf842a0 100644 --- a/src/MNH/init_mnh.f90 +++ b/src/MNH/init_mnh.f90 @@ -82,7 +82,7 @@ ! ------------ USE MODD_CONF USE MODD_DYN_n, ONLY: CPRESOPT,NITR ! only for spawning purpose -USE MODD_IO_ll, ONLY: TFILEDATA +USE MODD_IO_ll, ONLY: TPTR2FILE USE MODD_LBC_n, ONLY: CLBCX,CLBCY ! only for spawning purpose USE MODD_LUNIT USE MODD_PARAMETERS @@ -113,10 +113,10 @@ IMPLICIT NONE !* 0.1 Local variables ! INTEGER :: JMI ! Loop index -CHARACTER(LEN=16), DIMENSION(JPMODELMAX) :: YLUOUT ! Name for output-listing +CHARACTER(LEN=16), DIMENSION(JPMODELMAX) :: YLUOUT ! Name for output-listing ! of nested models -TYPE(TFILEDATA), DIMENSION(JPMODELMAX) :: TZINIFILE ! Initial files -CHARACTER (LEN=28),DIMENSION(JPMODELMAX) :: YINIFILEPGD +TYPE(TPTR2FILE), DIMENSION(JPMODELMAX) :: TZINIFILE ! Initial files +CHARACTER(LEN=28),DIMENSION(JPMODELMAX) :: YINIFILEPGD INTEGER :: ILUOUT0,IRESP ! Logical unit number for ! output-listing common ! to all models and return @@ -174,11 +174,11 @@ IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='DIAG ' .OR. CPROGRAM=='SPEC ' .OR. CPRO END IF ! CALL GOTO_MODEL(1) -CALL INI_SEG_n(1,YLUOUT(1),TZINIFILE(1),YINIFILEPGD(1),ZTSTEP_ALL) +CALL INI_SEG_n(1,YLUOUT(1),TZINIFILE(1)%TZFILE,YINIFILEPGD(1),ZTSTEP_ALL) ! DO JMI=2,NMODEL CALL GOTO_MODEL(JMI) - CALL INI_SEG_n(JMI,YLUOUT(JMI),TZINIFILE(JMI),YINIFILEPGD(JMI),ZTSTEP_ALL) + CALL INI_SEG_n(JMI,YLUOUT(JMI),TZINIFILE(JMI)%TZFILE,YINIFILEPGD(JMI),ZTSTEP_ALL) END DO ! IF (CPROGRAM=='SPAWN ') THEN @@ -196,14 +196,14 @@ IF (CPROGRAM=='DIAG') CALL RESET_EXSEG(YLUOUT(1)) ! DO JMI=1,NMODEL CALL GOTO_MODEL(JMI) - CALL INI_SIZE_n(JMI,YLUOUT(JMI),TZINIFILE(JMI),YINIFILEPGD(JMI)) + CALL INI_SIZE_n(JMI,YLUOUT(JMI),TZINIFILE(JMI)%TZFILE,YINIFILEPGD(JMI)) END DO ! IF (CPROGRAM=='SPAWN ') THEN DPTR_CLBCX=>CLBCX DPTR_CLBCY=>CLBCY CALL INI_PARAZ_ll(IINFO_ll) - CALL INI_SIZE_SPAWN(DPTR_CLBCX,DPTR_CLBCY,CPRESOPT,NITR,TZINIFILE(1)%CNAME) + CALL INI_SIZE_SPAWN(DPTR_CLBCX,DPTR_CLBCY,CPRESOPT,NITR,TZINIFILE(1)%TZFILE%CNAME) END IF ! ! INITIALIZE data structures of ComLib @@ -237,11 +237,11 @@ DO JMI=1,NMODEL CALL GO_TOMODEL_ll(JMI,IINFO_ll) CALL GOTO_MODEL(JMI) IF (CPROGRAM/='SPEC ') THEN - CALL INI_MODEL_n(JMI,YLUOUT(JMI),TZINIFILE(JMI),YINIFILEPGD(JMI)) + CALL INI_MODEL_n(JMI,YLUOUT(JMI),TZINIFILE(JMI)%TZFILE,YINIFILEPGD(JMI)) !Call necessary to update the TFIELDLIST pointers to the data CALL FIELDLIST_GOTO_MODEL(JMI,JMI) ELSE - CALL INI_SPECTRE_n(JMI,YLUOUT(JMI),TZINIFILE(JMI)) + CALL INI_SPECTRE_n(JMI,YLUOUT(JMI),TZINIFILE(JMI)%TZFILE) END IF END DO ! diff --git a/src/MNH/modd_lunitn.f90 b/src/MNH/modd_lunitn.f90 index af4559b63..0b8a5724d 100644 --- a/src/MNH/modd_lunitn.f90 +++ b/src/MNH/modd_lunitn.f90 @@ -55,7 +55,7 @@ TYPE LUNIT_t CHARACTER(LEN=28) :: CINIFILE ! Name of the input FM-file CHARACTER(LEN=28) :: CINIFILEPGD ! Name of the PGD associated to input FM-file CHARACTER(LEN=24) :: COUTFILE ! Generic name of the output FM-files - TYPE(TFILEDATA) :: TDIAFILE ! diachronic output file + TYPE(TFILEDATA),POINTER :: TDIAFILE => NULL() ! diachronic output file ! CHARACTER(LEN=16) :: CLUOUT ! Name of output_listing file !JUAN diff --git a/src/MNH/open_nestpgd_files.f90 b/src/MNH/open_nestpgd_files.f90 index 67c4420e5..8f75b0cf3 100644 --- a/src/MNH/open_nestpgd_files.f90 +++ b/src/MNH/open_nestpgd_files.f90 @@ -14,10 +14,10 @@ MODULE MODI_OPEN_NESTPGD_FILES INTERFACE SUBROUTINE OPEN_NESTPGD_FILES(TPFILEPGD,TPFILENESTPGD) ! -USE MODD_IO_ll, ONLY : TFILEDATA +USE MODD_IO_ll, ONLY : TPTR2FILE ! -TYPE(TFILEDATA),DIMENSION(:),ALLOCATABLE,INTENT(OUT) :: TPFILEPGD ! Input PGD files -TYPE(TFILEDATA),DIMENSION(:),ALLOCATABLE,INTENT(OUT) :: TPFILENESTPGD ! Output PGD files +TYPE(TPTR2FILE),DIMENSION(:),ALLOCATABLE, INTENT(OUT) :: TPFILEPGD ! Input PGD files +TYPE(TPTR2FILE),DIMENSION(:),ALLOCATABLE,TARGET,INTENT(OUT) :: TPFILENESTPGD ! Output PGD files ! END SUBROUTINE OPEN_NESTPGD_FILES END INTERFACE @@ -81,12 +81,13 @@ USE MODD_LUNIT USE MODD_CONF USE MODD_NESTING USE MODD_PARAMETERS -USE MODD_IO_ll, ONLY : LIOCDF4,LLFIOUT,TFILEDATA +USE MODD_IO_ll, ONLY : LIOCDF4,LLFIOUT,TFILEDATA,TPTR2FILE ! USE MODI_OPEN_LUOUTn ! USE MODE_FIELD, ONLY : INI_FIELD_LIST USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST USE MODE_FM USE MODE_POS USE MODE_MSG @@ -104,8 +105,8 @@ IMPLICIT NONE !* 0.1 Declaration of arguments ! ------------------------ ! -TYPE(TFILEDATA),DIMENSION(:),ALLOCATABLE, INTENT(OUT) :: TPFILEPGD ! Input PGD files -TYPE(TFILEDATA),DIMENSION(:),ALLOCATABLE,TARGET,INTENT(OUT) :: TPFILENESTPGD ! Output PGD files +TYPE(TPTR2FILE),DIMENSION(:),ALLOCATABLE, INTENT(OUT) :: TPFILEPGD ! Input PGD files +TYPE(TPTR2FILE),DIMENSION(:),ALLOCATABLE,TARGET,INTENT(OUT) :: TPFILENESTPGD ! Output PGD files ! !* 0.2 Declaration of local variables ! ------------------------------ @@ -117,7 +118,7 @@ LOGICAL :: GFOUND ! Return code when searching namelist CHARACTER(LEN=28) :: HPRE_NEST_PGD ! name of namelist file INTEGER :: IPRE_NEST_PGD ! logical unit of namelist file ! -CHARACTER(LEN=28) :: YPGD ! name of the pgd file for each model +CHARACTER(LEN=28),DIMENSION(JPMODELMAX) :: YPGD ! name of the pgd file for each model CHARACTER(LEN=28) :: YLUOUT ! name of output listing file for each model CHARACTER(LEN=2) :: YNEST ! to define the output pgd file names CHARACTER(LEN=28) :: YPGD1, YPGD2, YPGD3, YPGD4, & @@ -130,6 +131,7 @@ LOGICAL :: GADD ! INTEGER :: NHALO_MNH ! INTEGER :: ILUOUT ! Logical unit number for the EXSPA file +TYPE(TFILEDATA),POINTER :: TZDADFILE ! !* 0.3 Declaration of namelists ! ------------------------ @@ -232,16 +234,16 @@ DO JPGD=1,JPMODELMAX IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_PGD8) END IF ! - IF (JPGD==1) YPGD=YPGD1 - IF (JPGD==2) YPGD=YPGD2 - IF (JPGD==3) YPGD=YPGD3 - IF (JPGD==4) YPGD=YPGD4 - IF (JPGD==5) YPGD=YPGD5 - IF (JPGD==6) YPGD=YPGD6 - IF (JPGD==7) YPGD=YPGD7 - IF (JPGD==8) YPGD=YPGD8 + IF (JPGD==1) YPGD(1)=YPGD1 + IF (JPGD==2) YPGD(2)=YPGD2 + IF (JPGD==3) YPGD(3)=YPGD3 + IF (JPGD==4) YPGD(4)=YPGD4 + IF (JPGD==5) YPGD(5)=YPGD5 + IF (JPGD==6) YPGD(6)=YPGD6 + IF (JPGD==7) YPGD(7)=YPGD7 + IF (JPGD==8) YPGD(8)=YPGD8 ! - IF (LEN_TRIM(YPGD) == 0) THEN + IF (LEN_TRIM(YPGD(JPGD)) == 0) THEN IF (JPGD==1) THEN WRITE(ILUOUT0,*) 'No pgd file was present for model 1 in namelist NAM_PGD1' !callabortstop @@ -293,47 +295,18 @@ CALL SET_CONFIO_ll() ALLOCATE(TPFILEPGD (NMODEL)) ALLOCATE(TPFILENESTPGD(NMODEL)) ! -IF (NMODEL>=1) TPFILEPGD(1)%CNAME = TRIM(YPGD1) -IF (NMODEL>=2) TPFILEPGD(2)%CNAME = TRIM(YPGD2) -IF (NMODEL>=3) TPFILEPGD(3)%CNAME = TRIM(YPGD3) -IF (NMODEL>=4) TPFILEPGD(4)%CNAME = TRIM(YPGD4) -IF (NMODEL>=5) TPFILEPGD(5)%CNAME = TRIM(YPGD5) -IF (NMODEL>=6) TPFILEPGD(6)%CNAME = TRIM(YPGD6) -IF (NMODEL>=7) TPFILEPGD(7)%CNAME = TRIM(YPGD7) -IF (NMODEL>=8) TPFILEPGD(8)%CNAME = TRIM(YPGD8) -! DO JPGD=1,NMODEL - TPFILENESTPGD(JPGD)%CNAME = TRIM(TPFILEPGD(JPGD)%CNAME)//'.nest'//ADJUSTL(YNEST) + CALL IO_FILE_ADD2LIST(TPFILEPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD)),'PREPPGD','READ',KLFITYPE=2,KLFIVERB=NVERB) + ! IF (NDAD(JPGD)>=1) THEN - TPFILENESTPGD(JPGD)%TDADFILE => TPFILENESTPGD(NDAD(JPGD)) + TZDADFILE => TPFILENESTPGD(NDAD(JPGD))%TZFILE ELSE - NULLIFY(TPFILENESTPGD(JPGD)%TDADFILE) + NULLIFY(TZDADFILE) END IF + CALL IO_FILE_ADD2LIST(TPFILENESTPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD))//'.nest'//ADJUSTL(YNEST),'PREPNESTPGD', & + 'WRITE',KLFITYPE=1,KLFIVERB=NVERB,TPDADFILE=TZDADFILE) END DO ! -TPFILEPGD(:) %CTYPE = 'PREPPGD' -TPFILENESTPGD(:)%CTYPE = 'PREPNESTPGD' -IF (LIOCDF4) THEN - IF (.NOT.LLFIOUT) THEN - TPFILEPGD(:) %CFORMAT = 'NETCDF4' - TPFILENESTPGD(:)%CFORMAT = 'NETCDF4' - ELSE - TPFILEPGD(:) %CFORMAT = 'LFICDF4' - TPFILENESTPGD(:)%CFORMAT = 'LFICDF4' - END IF -ELSE IF (LLFIOUT) THEN - TPFILEPGD(:) %CFORMAT = 'LFI' - TPFILENESTPGD(:)%CFORMAT = 'LFI' -ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_NESTPGD_FILES','unknown backup/output fileformat') -ENDIF -TPFILEPGD(:) %CMODE = 'READ' -TPFILENESTPGD(:)%CMODE = 'WRITE' -TPFILEPGD(:) %NLFITYPE = 2 -TPFILENESTPGD(:)%NLFITYPE = 1 -TPFILEPGD(:) %NLFIVERB = NVERB -TPFILENESTPGD(:)%NLFIVERB = NVERB -! !------------------------------------------------------------------------------- CALL CLOSE_ll(HPRE_NEST_PGD) !------------------------------------------------------------------------------- @@ -342,8 +315,8 @@ CALL CLOSE_ll(HPRE_NEST_PGD) ! ------------------------------------- ! DO JPGD=1,NMODEL - CALL IO_FILE_OPEN_ll(TPFILEPGD(JPGD), CLUOUT0,IRESP,OPARALLELIO=.FALSE.) - CALL IO_FILE_OPEN_ll(TPFILENESTPGD(JPGD),CLUOUT0,IRESP,OPARALLELIO=.FALSE.) + CALL IO_FILE_OPEN_ll(TPFILEPGD(JPGD) %TZFILE,CLUOUT0,IRESP,OPARALLELIO=.FALSE.) + CALL IO_FILE_OPEN_ll(TPFILENESTPGD(JPGD)%TZFILE,CLUOUT0,IRESP,OPARALLELIO=.FALSE.) END DO ! !------------------------------------------------------------------------------- diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90 index 98a4bf971..6c0b614cf 100644 --- a/src/MNH/prep_ideal_case.f90 +++ b/src/MNH/prep_ideal_case.f90 @@ -358,6 +358,7 @@ USE MODE_GRIDPROJ USE MODE_FM USE MODE_FMREAD USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST USE MODE_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll USE MODE_MODELN_HANDLER @@ -575,8 +576,8 @@ REAL :: XHSLOP=1.2 ! if LHSLOP filtering of slopes higher REAL :: ZZS_MAX, ZZS_MAX_ll INTEGER :: IJPHEXT ! -TYPE(TFILEDATA),TARGET :: TZFILE -TYPE(TFILEDATA),TARGET :: TZINIFILEPGD +TYPE(TFILEDATA),POINTER :: TZFILE +TYPE(TFILEDATA),POINTER :: TZINIFILEPGD ! ! !* 0.2 Namelist declarations @@ -620,6 +621,9 @@ NAMELIST/NAM_AERO_PRE/ LORILAM, LINITPM, XINIRADIUSI, XINIRADIUSJ, & ! -------- CALL MPPDB_INIT() ! +TZFILE => NULL() +TZINIFILEPGD => NULL() +! CALL GOTO_MODEL(1) ! CALL INITIO_ll() @@ -1761,24 +1765,7 @@ NNPRAR = 22 + 2*(NRR+NSV) & ! 22 = number of grid variables + reference NTYPE=1 CDESFM=ADJUSTL(ADJUSTR(CINIFILE)//'.des') ! -TZFILE%CNAME = CINIFILE -TZFILE%CTYPE = 'PREPIDEALCASE' -IF (LIOCDF4) THEN - IF (.NOT.LLFIOUT) THEN - TZFILE%CFORMAT='NETCDF4' - ELSE - TZFILE%CFORMAT='LFICDF4' - TZFILE%NLFINPRAR= NNPRAR - END IF -ELSE IF (LLFIOUT) THEN - TZFILE%CFORMAT='LFI' - TZFILE%NLFINPRAR= NNPRAR -ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','PREP_IDEAL_CASE','unknown backup/output fileformat') -ENDIF -TZFILE%CMODE = 'WRITE' -TZFILE%NLFITYPE = NTYPE -TZFILE%NLFIVERB = NVERB +CALL IO_FILE_ADD2LIST(TZFILE,TRIM(CINIFILE),'PREPIDEALCASE','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB) ! CALL IO_FILE_OPEN_ll(TZFILE,CLUOUT,NRESP) ! @@ -1841,24 +1828,7 @@ IF (CSURF =='EXTE') THEN CSTORAGE_TYPE='PG' COUTFMFILE = CINIFILEPGD ! - TZINIFILEPGD%CNAME = CINIFILEPGD - TZINIFILEPGD%CTYPE = 'PREPIDEALCASE' - IF (LIOCDF4) THEN - IF (.NOT.LLFIOUT) THEN - TZINIFILEPGD%CFORMAT='NETCDF4' - ELSE - TZINIFILEPGD%CFORMAT='LFICDF4' - TZINIFILEPGD%NLFINPRAR= NNPRAR - END IF - ELSE IF (LLFIOUT) THEN - TZINIFILEPGD%CFORMAT='LFI' - TZINIFILEPGD%NLFINPRAR= NNPRAR - ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','PREP_IDEAL_CASE','unknown backup/output fileformat') - ENDIF - TZINIFILEPGD%CMODE = 'WRITE' - TZINIFILEPGD%NLFITYPE = NTYPE - TZINIFILEPGD%NLFIVERB = NVERB + CALL IO_FILE_ADD2LIST(TZINIFILEPGD,TRIM(CINIFILEPGD),'PREPIDEALCASE','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB) ! CALL IO_FILE_OPEN_ll(TZINIFILEPGD,CLUOUT,NRESP) ! diff --git a/src/MNH/prep_nest_pgd.f90 b/src/MNH/prep_nest_pgd.f90 index 96cc35116..ea77ead1e 100644 --- a/src/MNH/prep_nest_pgd.f90 +++ b/src/MNH/prep_nest_pgd.f90 @@ -106,7 +106,7 @@ USE MODD_GRID_n, ONLY : XZSMT USE MODD_LUNIT USE MODD_NESTING USE MODD_CONF_n -USE MODD_IO_ll, ONLY : TFILEDATA, TFILE_SURFEX +USE MODD_IO_ll, ONLY : TFILE_SURFEX, TPTR2FILE ! USE MODI_OPEN_NESTPGD_FILES USE MODI_RETRIEVE1_NEST_INFO_n @@ -164,8 +164,8 @@ INTEGER :: IDAD INTEGER :: II LOGICAL :: GISINIT ! -TYPE(TFILEDATA),DIMENSION(:),ALLOCATABLE :: TZFILEPGD ! Input PGD files -TYPE(TFILEDATA),DIMENSION(:),ALLOCATABLE,TARGET :: TZFILENESTPGD ! Output PGD files +TYPE(TPTR2FILE),DIMENSION(:),ALLOCATABLE :: TZFILEPGD ! Input PGD files +TYPE(TPTR2FILE),DIMENSION(:),ALLOCATABLE,TARGET :: TZFILENESTPGD ! Output PGD files ! !------------------------------------------------------------------------------- ! @@ -218,14 +218,14 @@ CALL MPI_COMM_SIZE(NMNH_COMM_WORLD, NPROC, IINFO_ll) CALL SET_DAD0_ll() DO JPGD=1,NMODEL ! read and set dimensions and ratios of model JPGD - CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'IMAX',CLUOUT0,'--',IIMAX,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'JMAX',CLUOUT0,'--',IJMAX,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'DXRATIO',CLUOUT0,'--',NDXRATIO_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'DYRATIO',CLUOUT0,'--',NDYRATIO_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'XSIZE',CLUOUT0,'--',NXSIZE(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'YSIZE',CLUOUT0,'--',NYSIZE(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'XOR',CLUOUT0,'--',NXOR_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'YOR',CLUOUT0,'--',NYOR_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'IMAX',CLUOUT0,'--',IIMAX,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'JMAX',CLUOUT0,'--',IJMAX,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'DXRATIO',CLUOUT0,'--',NDXRATIO_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'DYRATIO',CLUOUT0,'--',NDYRATIO_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'XSIZE',CLUOUT0,'--',NXSIZE(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'YSIZE',CLUOUT0,'--',NYSIZE(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'XOR',CLUOUT0,'--',NXOR_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'YOR',CLUOUT0,'--',NYOR_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) CALL SET_DIM_ll(IIMAX, IJMAX, 1) ! compute origin and end of local subdomain of model JPGD ! initialize variables from MODD_NESTING, origin and end of global model JPGD in coordinates of its father @@ -262,11 +262,11 @@ DO JPGD=1,NMODEL CALL GOTO_MODEL(JPGD) CALL GO_TOMODEL_ll(JPGD,IINFO_ll) CALL GOTO_SURFEX(JPGD) - CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'L1D ',CLUOUT0,'--',L1D_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'L2D ',CLUOUT0,'--',L2D_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%CNAME,'PACK ',CLUOUT0,'--',LPACK_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'L1D ',CLUOUT0,'--',L1D_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'L2D ',CLUOUT0,'--',L2D_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'PACK ',CLUOUT0,'--',LPACK_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) CALL SET_FMPACK_ll(L1D_ALL(JPGD),L2D_ALL(JPGD),LPACK_ALL(JPGD)) - CALL READ_HGRID(JPGD,TZFILEPGD(JPGD)%CNAME,YMY_NAME,YDAD_NAME,YSTORAGE_TYPE) + CALL READ_HGRID(JPGD,TZFILEPGD(JPGD)%TZFILE%CNAME,YMY_NAME,YDAD_NAME,YSTORAGE_TYPE) CSTORAGE_TYPE='PG' END DO CALL INI_PARAZ_ll(IINFO_ll) @@ -317,9 +317,9 @@ END DO ! ---------------------- ! DO JPGD=1,NMODEL - IF (LEN_TRIM(TZFILEPGD(JPGD)%CNAME)>0) THEN + IF (LEN_TRIM(TZFILEPGD(JPGD)%TZFILE%CNAME)>0) THEN CALL GO_TOMODEL_ll(JPGD,IINFO_ll) - CPGDFILE = TZFILEPGD(JPGD)%CNAME + CPGDFILE = TZFILEPGD(JPGD)%TZFILE%CNAME CALL GOTO_MODEL(JPGD) CALL GOTO_SURFEX(JPGD) CALL INIT_PGD_SURF_ATM(YSURF_CUR,'MESONH','PGD', & @@ -347,14 +347,14 @@ END DO ! DO JPGD=1,NMODEL CALL GO_TOMODEL_ll(JPGD,IINFO_ll) - CPGDFILE = TZFILEPGD(JPGD)%CNAME - COUTFMFILE = TZFILENESTPGD(JPGD)%CNAME + CPGDFILE = TZFILEPGD(JPGD)%TZFILE%CNAME + COUTFMFILE = TZFILENESTPGD(JPGD)%TZFILE%CNAME CALL GOTO_MODEL(JPGD) CALL GOTO_SURFEX(JPGD) - TFILE_SURFEX => TZFILENESTPGD(JPGD) + TFILE_SURFEX => TZFILENESTPGD(JPGD)%TZFILE CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH') NULLIFY(TFILE_SURFEX) - CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'ZSMT',XZSMT) + CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'ZSMT',XZSMT) END DO ! !------------------------------------------------------------------------------- @@ -364,18 +364,18 @@ END DO ! ! DO JPGD=1,NMODEL - CALL IO_WRITE_HEADER(TZFILENESTPGD(JPGD)) - IF ( ASSOCIATED(TZFILENESTPGD(JPGD)%TDADFILE) ) THEN - CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'DXRATIO',NDXRATIO_ALL(JPGD)) - CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'DYRATIO',NDYRATIO_ALL(JPGD)) - CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'XOR', NXOR_ALL(JPGD)) - CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'YOR', NYOR_ALL(JPGD)) + CALL IO_WRITE_HEADER(TZFILENESTPGD(JPGD)%TZFILE) + IF ( ASSOCIATED(TZFILENESTPGD(JPGD)%TZFILE%TDADFILE) ) THEN + CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'DXRATIO',NDXRATIO_ALL(JPGD)) + CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'DYRATIO',NDYRATIO_ALL(JPGD)) + CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'XOR', NXOR_ALL(JPGD)) + CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'YOR', NYOR_ALL(JPGD)) END IF - CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'SURF', 'EXTE') - CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'L1D', L1D_ALL(JPGD)) - CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'L2D', L2D_ALL(JPGD)) - CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'PACK', LPACK_ALL(JPGD)) - CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD),'JPHEXT',JPHEXT) + CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'SURF', 'EXTE') + CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'L1D', L1D_ALL(JPGD)) + CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'L2D', L2D_ALL(JPGD)) + CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'PACK', LPACK_ALL(JPGD)) + CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'JPHEXT',JPHEXT) END DO ! !------------------------------------------------------------------------------- @@ -384,8 +384,8 @@ END DO ! -------------------- ! DO JPGD=1,NMODEL - CALL IO_FILE_CLOSE_ll(TZFILEPGD(JPGD), CLUOUT0,IRESP,OPARALLELIO=.FALSE.) - CALL IO_FILE_CLOSE_ll(TZFILENESTPGD(JPGD),CLUOUT0,IRESP,OPARALLELIO=.FALSE.) + CALL IO_FILE_CLOSE_ll(TZFILEPGD(JPGD)%TZFILE, CLUOUT0,IRESP,OPARALLELIO=.FALSE.) + CALL IO_FILE_CLOSE_ll(TZFILENESTPGD(JPGD)%TZFILE,CLUOUT0,IRESP,OPARALLELIO=.FALSE.) END DO ! !* loop to spare enough time to transfer commands before end of program diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90 index 09025286d..b86f18296 100644 --- a/src/MNH/prep_pgd.f90 +++ b/src/MNH/prep_pgd.f90 @@ -86,6 +86,7 @@ USE MODD_SPAWN, ONLY : NDXRATIO,NDYRATIO,NXSIZE,NYSIZE,NXOR,NYOR USE MODE_POS USE MODE_FMWRIT USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST USE MODE_FM USE MODE_MODELN_HANDLER USE MODE_MSG @@ -140,7 +141,7 @@ INTEGER :: ILENCH ! length of comment string CHARACTER(LEN=100):: YCOMMENT ! comment string INTEGER :: IIMAX, IJMAX INTEGER :: NHALO_MNH -TYPE(TFILEDATA),TARGET :: TZFILE +TYPE(TFILEDATA),POINTER :: TZFILE ! NAMELIST/NAM_PGDFILE/CPGDFILE, NHALO NAMELIST/NAM_ZSFILTER/NZSFILTER,LHSLOP,XHSLOP @@ -152,6 +153,7 @@ CALL MPPDB_INIT() ! CPROGRAM='PGD ' ! +TZFILE => NULL() ! CALL MPPDB_INIT() !* 1. Set default names and parallelized I/O @@ -238,24 +240,7 @@ CALL PGD_SURF_ATM(YSURF_CUR,'MESONH',' ',' ',.FA !* 3. Writes the physiographic fields ! ------------------------------- ! -TZFILE%CNAME = CPGDFILE -TZFILE%CTYPE = 'PREPPGD' -IF (LIOCDF4) THEN - IF (.NOT.LLFIOUT) THEN - TZFILE%CFORMAT= 'NETCDF4' - ELSE - TZFILE%CFORMAT= 'LFICDF4' - TZFILE%NLFINPRAR= 1 - END IF -ELSE IF (LLFIOUT) THEN - TZFILE%CFORMAT = 'LFI' - TZFILE%NLFINPRAR= 1 -ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','PREP_PGD','unknown backup/output fileformat') -ENDIF -TZFILE%CMODE = 'WRITE' -TZFILE%NLFITYPE = 1 -TZFILE%NLFIVERB = 5 +CALL IO_FILE_ADD2LIST(TZFILE,CPGDFILE,'PREPPGD','WRITE',KLFINPRAR=1,KLFITYPE=1,KLFIVERB=5) ! CALL IO_FILE_OPEN_ll(TZFILE,CLUOUT0,IRESP,OPARALLELIO=.FALSE.) ! diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90 index 930329005..61bc3c37b 100644 --- a/src/MNH/prep_real_case.f90 +++ b/src/MNH/prep_real_case.f90 @@ -393,6 +393,7 @@ USE MODE_POS USE MODE_FM USE MODE_FMWRIT, ONLY : IO_WRITE_HEADER USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST USE MODE_ll USE MODE_MODELN_HANDLER USE MODE_FMREAD @@ -447,7 +448,7 @@ USE MODD_CH_AEROSOL, ONLY: LORILAM, LINITPM, XINIRADIUSI, XINIRADIUSJ,& XINISIGI, XINISIGJ, XN0IMIN, XN0JMIN, CRGUNIT USE MODD_DUST, ONLY: LDUST, NMODE_DST, CRGUNITD, XINISIG, XINIRADIUS, XN0MIN USE MODD_SALT, ONLY: LSALT, NMODE_SLT, CRGUNITS, XINISIG_SLT, XINIRADIUS_SLT, XN0MIN_SLT -USE MODD_IO_ll, ONLY : GSMONOPROC,TFILEDATA,LIOCDF4,LLFIOUT, TFILE_SURFEX +USE MODD_IO_ll, ONLY : GSMONOPROC,TFILEDATA,LIOCDF4,LLFIOUT,TFILE_SURFEX USE MODD_PREP_REAL USE MODD_CH_MNHC_n, ONLY: LUSECHAQ_n=>LUSECHAQ,LUSECHIC_n=>LUSECHIC, LUSECHEM_n=>LUSECHEM USE MODI_READ_VER_GRID @@ -513,7 +514,7 @@ LOGICAL :: LUSECHAQ LOGICAL :: LUSECHIC LOGICAL :: LUSECHEM ! -TYPE(TFILEDATA),TARGET :: TZFILE +TYPE(TFILEDATA),POINTER :: TZFILE ! ! !* 0.3 Declaration of namelists @@ -552,6 +553,8 @@ ZHORI = 0. ZSURF = 0. ZTIME1 = ZSTART ! +TZFILE => NULL() +! !* 1. SET DEFAULT VALUES ! ------------------ ! @@ -577,24 +580,8 @@ CALL OPEN_PRC_FILES(YPRE_REAL1,YATMFILE, YATMFILETYPE & CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) ! CPGDFILE = YPGDFILE -TZFILE%CNAME = CINIFILE -TZFILE%CTYPE = 'PREPREALCASE' -IF (LIOCDF4) THEN - IF (.NOT.LLFIOUT) THEN - TZFILE%CFORMAT='NETCDF4' - ELSE - TZFILE%CFORMAT='LFICDF4' - TZFILE%NLFINPRAR= 0 - END IF -ELSE IF (LLFIOUT) THEN - TZFILE%CFORMAT='LFI' - TZFILE%NLFINPRAR= 0 -ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','PREP_REAL_CASE','unknown backup/output fileformat') -ENDIF -TZFILE%CMODE = 'WRITE' -TZFILE%NLFITYPE = 1 -TZFILE%NLFIVERB = NVERB +! +CALL IO_FILE_ADD2LIST(TZFILE,CINIFILE,'PREPREALCASE','WRITE',KLFINPRAR=0,KLFITYPE=1,KLFIVERB=NVERB) ! CALL IO_FILE_OPEN_ll(TZFILE,CLUOUT0,IRESP) ! diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90 index cfa262431..c7e405b23 100644 --- a/src/MNH/prep_surfex.f90 +++ b/src/MNH/prep_surfex.f90 @@ -50,6 +50,7 @@ USE MODE_FM USE MODE_FMREAD USE MODE_FMWRIT USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST USE MODE_ll USE MODE_MODELN_HANDLER USE MODE_SPLITTINGZ_ll @@ -85,7 +86,7 @@ INTEGER :: IINFO_ll ! return code of // routines CHARACTER (LEN=100) :: HCOMMENT INTEGER :: II, IJ, IGRID, ILENGTH ! -TYPE(TFILEDATA),TARGET :: TZFILE +TYPE(TFILEDATA),POINTER :: TZFILE ! !------------------------------------------------------------------------------- ! @@ -93,6 +94,8 @@ TYPE(TFILEDATA),TARGET :: TZFILE !* 1. SET DEFAULT VALUES ! ------------------ ! +TZFILE => NULL() +! CALL GOTO_MODEL(1) ! CALL VERSION @@ -113,25 +116,7 @@ CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) ! CPGDFILE = YPGDFILE ! -TZFILE%CNAME = CINIFILE -TZFILE%CTYPE = 'PREPSURFEX' -print *,'PW: LIOCDF4=',LIOCDF4 -IF (LIOCDF4) THEN - IF (.NOT.LLFIOUT) THEN - TZFILE%CFORMAT='NETCDF4' - ELSE - TZFILE%CFORMAT='LFICDF4' - TZFILE%NLFINPRAR= 0 - END IF -ELSE IF (LLFIOUT) THEN - TZFILE%CFORMAT='LFI' - TZFILE%NLFINPRAR= 0 -ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','PREP_REAL_CASE','unknown backup/output fileformat') -ENDIF -TZFILE%CMODE = 'WRITE' -TZFILE%NLFITYPE = 1 -TZFILE%NLFIVERB = 1 +CALL IO_FILE_ADD2LIST(TZFILE,TRIM(CINIFILE),'PREPSURFEX','WRITE',KLFINPRAR=0,KLFITYPE=1,KLFIVERB=1) ! CALL IO_FILE_OPEN_ll(TZFILE,CLUOUT0,IRESP) ! diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90 index f9d403154..6b35ee155 100644 --- a/src/MNH/read_field.f90 +++ b/src/MNH/read_field.f90 @@ -8,16 +8,16 @@ ! INTERFACE ! - SUBROUTINE READ_FIELD(HINIFILE,HLUOUT,KMASDEV,KIU,KJU,KKU,PTSTEP, & + SUBROUTINE READ_FIELD(TPINIFILE,HLUOUT,KMASDEV,KIU,KJU,KKU,PTSTEP, & HGETTKET,HGETRVT,HGETRCT,HGETRRT,HGETRIT,HGETCIT, & HGETRST,HGETRGT,HGETRHT,HGETSVT,HGETSRCT,HGETSIGS,HGETCLDFR, & HGETBL_DEPTH,HGETSBL_DEPTH,HGETPHC,HGETPHR,HUVW_ADV_SCHEME, & - HTEMP_SCHEME,KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll, & + HTEMP_SCHEME,KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll, & KSIZELBXTKE_ll,KSIZELBYTKE_ll, & KSIZELBXR_ll,KSIZELBYR_ll,KSIZELBXSV_ll,KSIZELBYSV_ll, & - PUM,PVM,PWM,PDUM,PDVM,PDWM, & + PUM,PVM,PWM,PDUM,PDVM,PDWM, & PUT,PVT,PWT,PTHT,PPABST,PPABSM,PTKET,PRTKEMS, & - PRT,PSVT,PCIT,PDRYMASST, & + PRT,PSVT,PCIT,PDRYMASST, & PSIGS,PSRCT,PCLDFR,PBL_DEPTH,PSBL_DEPTH,PWTHVMF,PPHC,PPHR, & PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM, & PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM, & @@ -29,11 +29,11 @@ INTERFACE PVTH_FLUX_M,PWTH_FLUX_M,PVU_FLUX_M, & PRUS_PRES,PRVS_PRES,PRWS_PRES,PRTHS_CLD,PRRS_CLD,PRSVS_CLD ) ! +USE MODD_IO_ll, ONLY : TFILEDATA USE MODD_TIME ! for type DATE_TIME ! ! -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE - ! name of the initial file +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE !Initial file CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing of nested models INTEGER, INTENT(IN) :: KMASDEV @@ -125,16 +125,16 @@ END INTERFACE ! END MODULE MODI_READ_FIELD ! ######spl - SUBROUTINE READ_FIELD(HINIFILE,HLUOUT,KMASDEV,KIU,KJU,KKU,PTSTEP, & + SUBROUTINE READ_FIELD(TPINIFILE,HLUOUT,KMASDEV,KIU,KJU,KKU,PTSTEP, & HGETTKET,HGETRVT,HGETRCT,HGETRRT,HGETRIT,HGETCIT, & HGETRST,HGETRGT,HGETRHT,HGETSVT,HGETSRCT,HGETSIGS,HGETCLDFR, & HGETBL_DEPTH,HGETSBL_DEPTH,HGETPHC,HGETPHR,HUVW_ADV_SCHEME, & - HTEMP_SCHEME,KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll, & + HTEMP_SCHEME,KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll, & KSIZELBXTKE_ll,KSIZELBYTKE_ll, & KSIZELBXR_ll,KSIZELBYR_ll,KSIZELBXSV_ll,KSIZELBYSV_ll, & - PUM,PVM,PWM,PDUM,PDVM,PDWM, & + PUM,PVM,PWM,PDUM,PDVM,PDWM, & PUT,PVT,PWT,PTHT,PPABST,PPABSM,PTKET,PRTKEMS, & - PRT,PSVT,PCIT,PDRYMASST, & + PRT,PSVT,PCIT,PDRYMASST, & PSIGS,PSRCT,PCLDFR,PBL_DEPTH,PSBL_DEPTH,PWTHVMF,PPHC,PPHR, & PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM, & PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM, & @@ -144,7 +144,7 @@ END MODULE MODI_READ_FIELD KADVFRC,TPDTADVFRC,PDTHFRC,PDRVFRC, & KRELFRC,TPDTRELFRC, PTHREL, PRVREL, & PVTH_FLUX_M,PWTH_FLUX_M,PVU_FLUX_M, & - PRUS_PRES,PRVS_PRES,PRWS_PRES,PRTHS_CLD,PRRS_CLD, PRSVS_CLD ) + PRUS_PRES,PRVS_PRES,PRWS_PRES,PRTHS_CLD,PRRS_CLD,PRSVS_CLD ) ! ######################################################################## ! !!**** *READ_FIELD* - routine to read prognostic and surface fields @@ -241,7 +241,9 @@ END MODULE MODI_READ_FIELD USE MODE_FM USE MODE_IO_ll, ONLY : UPCASE ! +USE MODD_IO_ll, ONLY : TFILEDATA USE MODD_CONF +USE MODD_CONF_n USE MODD_TIME ! for type DATE_TIME USE MODD_CST USE MODD_CTURB @@ -279,8 +281,7 @@ IMPLICIT NONE ! ! ! -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE - ! name of the initial file +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE !Initial file CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing of nested models INTEGER, INTENT(IN) :: KMASDEV @@ -384,7 +385,6 @@ INTEGER :: ILUOUT ! Unit number for prints INTEGER :: JSV ! Loop index for additional ! scalar variables INTEGER :: ISV ! total number of scalar variables -INTEGER :: IRR ! counter for moist variables INTEGER :: JKLOOP,JRR ! Loop indexes INTEGER :: IIUP,IJUP ! size of working ! window arrays @@ -413,9 +413,6 @@ GLSOURCE=.FALSE. Z3D = 0.0 ZWORK = 0.0 ! -YRECFM='STORAGE_TYPE' -YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,YSTORAGE_TYPE,IGRID,ILENCH,YCOMMENT,IRESP) IF (IRESP /= 0) YSTORAGE_TYPE='TT' ! !------------------------------------------------------------------------------- @@ -430,40 +427,35 @@ IF (KMASDEV<50) THEN ELSE YRECFM = 'UT' ENDIF -YDIR='XY' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PUT,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,YRECFM,PUT) ! IF (KMASDEV<50) THEN YRECFM = 'VM' ELSE YRECFM = 'VT' END IF -YDIR='XY' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PVT,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,YRECFM,PVT) ! IF (KMASDEV<50) THEN YRECFM = 'WM' ELSE YRECFM = 'WT' END IF -YDIR='XY' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PWT,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,YRECFM,PWT) ! IF (KMASDEV<50) THEN YRECFM = 'THM' ELSE YRECFM = 'THT' END IF -YDIR='XY' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PTHT,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,YRECFM,PTHT) ! IF (KMASDEV<50) THEN YRECFM = 'PABSM' ELSE YRECFM = 'PABST' END IF -YDIR='XY' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PPABST,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,YRECFM,PPABST) PPABSM = PPABST ! SELECT CASE(HGETTKET) @@ -474,136 +466,99 @@ SELECT CASE(HGETTKET) YRECFM = 'TKET' END IF YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PTKET,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PTKET,IGRID,ILENCH,YCOMMENT,IRESP) IF (KMASDEV>50 .AND. (CCONF == 'RESTA')) THEN YRECFM = 'TKEMS' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PRTKEMS,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PRTKEMS,IGRID,ILENCH,YCOMMENT,IRESP) END IF CASE('INIT') PTKET(:,:,:)=XTKEMIN PRTKEMS(:,:,:)=0. END SELECT ! -IRR=0 -! SELECT CASE(HGETRVT) ! vapor CASE('READ') - IRR=IRR+1 IF (KMASDEV<50) THEN YRECFM = 'RVM' ELSE YRECFM='RVT' END IF - YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRT(:,:,:,IRR)=Z3D(:,:,:) + CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRT(:,:,:,IDX_RVT)) CASE('INIT') - IRR=IRR+1 - PRT(:,:,:,IRR)=0. + PRT(:,:,:,IDX_RVT)=0. END SELECT ! SELECT CASE(HGETRCT) ! cloud CASE('READ') - IRR=IRR+1 IF (KMASDEV<50) THEN YRECFM = 'RCM' ELSE YRECFM='RCT' END IF - YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRT(:,:,:,IRR)=Z3D(:,:,:) + CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRT(:,:,:,IDX_RCT)) CASE('INIT') - IRR=IRR+1 - PRT(:,:,:,IRR) = 0. + PRT(:,:,:,IDX_RCT) = 0. END SELECT ! SELECT CASE(HGETRRT) ! rain CASE('READ') - IRR=IRR+1 IF (KMASDEV<50) THEN YRECFM = 'RRM' ELSE YRECFM ='RRT' END IF - YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRT(:,:,:,IRR)=Z3D(:,:,:) + CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRT(:,:,:,IDX_RRT)) CASE('INIT') - IRR=IRR+1 - PRT(:,:,:,IRR) = 0. + PRT(:,:,:,IDX_RRT) = 0. END SELECT ! SELECT CASE(HGETRIT) ! cloud ice CASE('READ') - IRR=IRR+1 IF (KMASDEV<50) THEN YRECFM = 'RIM' ELSE YRECFM ='RIT' END IF - YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRT(:,:,:,IRR)=Z3D(:,:,:) + CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRT(:,:,:,IDX_RIT)) CASE('INIT') - IRR=IRR+1 - PRT(:,:,:,IRR)=0. + PRT(:,:,:,IDX_RIT)=0. END SELECT ! SELECT CASE(HGETRST) ! snow CASE('READ') - IRR=IRR+1 IF (KMASDEV<50) THEN YRECFM = 'RSM' ELSE YRECFM ='RST' END IF - YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRT(:,:,:,IRR)=Z3D(:,:,:) + CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRT(:,:,:,IDX_RST)) CASE('INIT') - IRR=IRR+1 - PRT(:,:,:,IRR)=0. + PRT(:,:,:,IDX_RST)=0. END SELECT ! SELECT CASE(HGETRGT) ! graupel CASE('READ') - IRR=IRR+1 IF (KMASDEV<50) THEN YRECFM = 'RGM' ELSE YRECFM ='RGT' END IF - YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRT(:,:,:,IRR)=Z3D(:,:,:) + CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRT(:,:,:,IDX_RGT)) CASE('INIT') - IRR=IRR+1 - PRT(:,:,:,IRR)=0. + PRT(:,:,:,IDX_RGT)=0. END SELECT ! SELECT CASE(HGETRHT) ! hail CASE('READ') - IRR=IRR+1 IF (KMASDEV<50) THEN YRECFM = 'RHM' ELSE YRECFM ='RHT' END IF - YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRT(:,:,:,IRR)=Z3D(:,:,:) + CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRT(:,:,:,IDX_RHT)) CASE('INIT') - IRR=IRR+1 - PRT(:,:,:,IRR)=0. + PRT(:,:,:,IDX_RHT)=0. END SELECT ! SELECT CASE(HGETCIT) ! ice concentration @@ -611,7 +566,7 @@ SELECT CASE(HGETCIT) ! ice concentration YRECFM='CIT' YDIR='XY' IF (SIZE(PCIT) /= 0 ) & - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PCIT,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PCIT,IGRID,ILENCH, & YCOMMENT,IRESP) CASE('INIT') PCIT(:,:,:)=0. @@ -626,7 +581,7 @@ DO JSV = 1, NSV_USER ! initialize according to the get indicators SELECT CASE(HGETSVT(JSV)) CASE ('READ') WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -638,7 +593,7 @@ DO JSV = NSV_C2R2BEG,NSV_C2R2END SELECT CASE(HGETSVT(JSV)) CASE ('READ') YRECFM=TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -659,7 +614,7 @@ DO JSV = NSV_C1R3BEG,NSV_C1R3END SELECT CASE(HGETSVT(JSV)) CASE ('READ') YRECFM=TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -720,7 +675,7 @@ DO JSV = NSV_LIMA_BEG,NSV_LIMA_END YRECFM=TRIM(CLIMA_COLD_NAMES(5))//'T' END IF ! - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH,YCOMMENT,IRESP) ! PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -732,7 +687,7 @@ DO JSV = NSV_ELECBEG,NSV_ELECEND SELECT CASE(HGETSVT(JSV)) CASE ('READ') YRECFM=TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -745,7 +700,7 @@ DO JSV = NSV_CHGSBEG,NSV_CHGSEND CASE ('READ') CNAMES(JSV-NSV_CHGSBEG+1) = UPCASE(CNAMES(JSV-NSV_CHGSBEG+1)) YRECFM=TRIM(CNAMES(JSV-NSV_CHGSBEG+1))//'T' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -758,7 +713,7 @@ DO JSV = NSV_CHACBEG,NSV_CHACEND CASE ('READ') CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1) = UPCASE(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1)) YRECFM=TRIM(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))//'T' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -771,7 +726,7 @@ DO JSV = NSV_CHICBEG,NSV_CHICEND CASE ('READ') CICNAMES(JSV-NSV_CHICBEG+1) = UPCASE(CICNAMES(JSV-NSV_CHICBEG+1)) YRECFM=TRIM(CICNAMES(JSV-NSV_CHICBEG+1))//'T' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -783,7 +738,7 @@ DO JSV = NSV_SLTBEG,NSV_SLTEND SELECT CASE(HGETSVT(JSV)) CASE ('READ') YRECFM=TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -795,7 +750,7 @@ DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND SELECT CASE(HGETSVT(JSV)) CASE ('READ') YRECFM=TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -807,7 +762,7 @@ DO JSV = NSV_DSTBEG,NSV_DSTEND SELECT CASE(HGETSVT(JSV)) CASE ('READ') YRECFM=TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -819,7 +774,7 @@ DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND SELECT CASE(HGETSVT(JSV)) CASE ('READ') YRECFM=TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -831,7 +786,7 @@ DO JSV = NSV_AERBEG,NSV_AEREND SELECT CASE(HGETSVT(JSV)) CASE ('READ') YRECFM=TRIM(CAERONAMES(JSV-NSV_AERBEG+1))//'T' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -843,7 +798,7 @@ DO JSV = NSV_AERDEPBEG,NSV_AERDEPEND SELECT CASE(HGETSVT(JSV)) CASE ('READ') YRECFM=TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -855,7 +810,7 @@ DO JSV = NSV_LGBEG,NSV_LGEND SELECT CASE(HGETSVT(JSV)) CASE ('READ') YRECFM=TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -867,7 +822,7 @@ DO JSV = NSV_PPBEG,NSV_PPEND SELECT CASE(HGETSVT(JSV)) CASE ('READ') WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF ( IRESP ==0 ) THEN PSVT(:,:,:,JSV) = Z3D(:,:,:) @@ -875,7 +830,7 @@ DO JSV = NSV_PPBEG,NSV_PPEND PSVT(:,:,:,JSV) = 0. END IF WRITE(YRECFM,'(A3,I3.3)')'ATC',JSV - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH,YCOMMENT,IRESP) IF (IRESP == 0) THEN PATC(:,:,:,JSV-NSV_PPBEG+1) = Z3D(:,:,:) ELSE @@ -892,7 +847,7 @@ DO JSV = NSV_FFBEG,NSV_FFEND SELECT CASE(HGETSVT(JSV)) CASE ('READ') WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF (IRESP == 0) THEN PSVT(:,:,:,JSV) = Z3D(:,:,:) @@ -909,7 +864,7 @@ DO JSV = NSV_CSBEG,NSV_CSEND SELECT CASE(HGETSVT(JSV)) CASE ('READ') WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF ( IRESP ==0 ) THEN PSVT(:,:,:,JSV) = Z3D(:,:,:) @@ -925,7 +880,7 @@ DO JSV = NSV_LNOXBEG,NSV_LNOXEND SELECT CASE(HGETSVT(JSV)) CASE ('READ') YRECFM='LINOXT' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -936,56 +891,56 @@ END DO IF (CCONF == 'RESTA') THEN YRECFM = 'US_PRES' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PRUS_PRES,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PRUS_PRES,IGRID,ILENCH,YCOMMENT,IRESP) YRECFM = 'VS_PRES' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PRVS_PRES,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PRVS_PRES,IGRID,ILENCH,YCOMMENT,IRESP) YRECFM = 'WS_PRES' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PRWS_PRES,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PRWS_PRES,IGRID,ILENCH,YCOMMENT,IRESP) YRECFM = 'THS_CLD' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PRTHS_CLD,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PRTHS_CLD,IGRID,ILENCH,YCOMMENT,IRESP) DO JRR = 1, SIZE(PRT,4) IF (JRR == 1 ) THEN YRECFM='RVS_CLD' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PRRS_CLD(:,:,:,JRR) = Z3D(:,:,:) END IF IF (JRR == 2 ) THEN YRECFM='RCS_CLD' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PRRS_CLD(:,:,:,JRR) = Z3D(:,:,:) END IF IF (JRR == 3 ) THEN YRECFM='RRS_CLD' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PRRS_CLD(:,:,:,JRR) = Z3D(:,:,:) END IF IF (JRR == 4 ) THEN YRECFM='RIS_CLD' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PRRS_CLD(:,:,:,JRR) = Z3D(:,:,:) END IF IF (JRR == 5 ) THEN YRECFM='RSS_CLD' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PRRS_CLD(:,:,:,JRR) = Z3D(:,:,:) END IF IF (JRR == 6 ) THEN YRECFM='RGS_CLD' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PRRS_CLD(:,:,:,JRR) = Z3D(:,:,:) END IF IF (JRR == 7 ) THEN YRECFM='RHS_CLD' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PRRS_CLD(:,:,:,JRR) = Z3D(:,:,:) END IF @@ -993,13 +948,13 @@ IF (CCONF == 'RESTA') THEN DO JSV = NSV_C2R2BEG,NSV_C2R2END IF (JSV == NSV_C2R2BEG ) THEN YRECFM='RSVS_CLD1' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PRSVS_CLD(:,:,:,JSV) = Z3D(:,:,:) END IF IF (JSV == NSV_C2R2BEG ) THEN YRECFM='RSVS_CLD2' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) PRSVS_CLD(:,:,:,JSV) = Z3D(:,:,:) END IF @@ -1013,27 +968,27 @@ IF (CPROGRAM=='MESONH' .AND. HUVW_ADV_SCHEME(1:3)=='CEN' .AND. & IF (CCONF=='RESTA') THEN YRECFM = 'UM' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PUM,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PUM,IGRID,ILENCH,YCOMMENT,IRESP) ! YRECFM = 'VM' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PVM,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PVM,IGRID,ILENCH,YCOMMENT,IRESP) ! YRECFM = 'WM' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PWM,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PWM,IGRID,ILENCH,YCOMMENT,IRESP) ! YRECFM = 'DUM' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PDUM,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PDUM,IGRID,ILENCH,YCOMMENT,IRESP) ! YRECFM = 'DVM' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PDVM,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PDVM,IGRID,ILENCH,YCOMMENT,IRESP) ! YRECFM = 'DWM' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PDWM,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PDWM,IGRID,ILENCH,YCOMMENT,IRESP) ELSE PUM = PUT PVM = PVT @@ -1044,38 +999,38 @@ END IF !* 2.2a 3D LS fields ! ! -CALL INI_LS(HINIFILE,HLUOUT,HGETRVT,GLSOURCE,PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM) +CALL INI_LS(TPINIFILE%CNAME,HLUOUT,HGETRVT,GLSOURCE,PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM) ! ! !* 2.2b 2D "surfacic" LB fields ! ! -CALL INI_LB(HINIFILE,HLUOUT,GLSOURCE,ISV, & +CALL INI_LB(TPINIFILE%CNAME,HLUOUT,GLSOURCE,ISV, & KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll, & KSIZELBXTKE_ll,KSIZELBYTKE_ll, & KSIZELBXR_ll,KSIZELBYR_ll,KSIZELBXSV_ll,KSIZELBYSV_ll, & HGETTKET,HGETRVT,HGETRCT,HGETRRT,HGETRIT,HGETRST, & HGETRGT,HGETRHT,HGETSVT, & PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM, & - PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM ) + PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM ) ! ! !* 2.3 Some special variables: ! YRECFM = 'DRYMASST' ! dry mass YDIR='--' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PDRYMASST,IGRID,ILENCH,YCOMMENT,IRESP) +CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PDRYMASST,IGRID,ILENCH,YCOMMENT,IRESP) ! SELECT CASE(HGETSRCT) ! turbulent flux SRC at time t CASE('READ') YRECFM='SRCT' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF( IRESP /= 0 ) THEN YRECFM='SRC' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & YCOMMENT,IRESP) END IF PSRCT(:,:,:)=Z3D(:,:,:) @@ -1087,7 +1042,7 @@ SELECT CASE(HGETSIGS) ! subgrid condensation CASE('READ') YRECFM='SIGS' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PSIGS,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PSIGS,IGRID,ILENCH, & YCOMMENT,IRESP) CASE('INIT') PSIGS(:,:,:)=0. @@ -1097,7 +1052,7 @@ SELECT CASE(HGETPHC) ! pH in cloud water CASE('READ') YRECFM='PHC' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PPHC,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PPHC,IGRID,ILENCH, & YCOMMENT,IRESP) CASE('INIT') PPHC(:,:,:)=0. @@ -1107,7 +1062,7 @@ SELECT CASE(HGETPHR) ! pH in rainwater CASE('READ') YRECFM='PHR' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PPHR,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PPHR,IGRID,ILENCH, & YCOMMENT,IRESP) CASE('INIT') PPHR(:,:,:)=0. @@ -1117,7 +1072,7 @@ IRESP=0 IF(HGETCLDFR=='READ') THEN ! cloud fraction YRECFM='CLDFR' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PCLDFR,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PCLDFR,IGRID,ILENCH, & YCOMMENT,IRESP) ENDIF IF(HGETCLDFR=='INIT' .OR. IRESP /= 0) THEN @@ -1141,7 +1096,7 @@ ENDIF IF (HGETBL_DEPTH=='READ') THEN YRECFM = 'BL_DEPTH' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PBL_DEPTH,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PBL_DEPTH,IGRID,ILENCH,YCOMMENT,IRESP) ELSE PBL_DEPTH(:,:)=XUNDEF END IF @@ -1151,7 +1106,7 @@ END IF IF (HGETSBL_DEPTH=='READ') THEN YRECFM = 'SBL_DEPTH' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PSBL_DEPTH,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PSBL_DEPTH,IGRID,ILENCH,YCOMMENT,IRESP) ELSE PSBL_DEPTH(:,:)=0. END IF @@ -1162,7 +1117,7 @@ SELECT CASE(HGETTKET) CASE('READ') YRECFM = 'WTHVMF' YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PWTHVMF,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PWTHVMF,IGRID,ILENCH,YCOMMENT,IRESP) CASE('INIT') PWTHVMF(:,:,:)=0. END SELECT @@ -1178,63 +1133,63 @@ IF ( LFORCING ) THEN WRITE (YFRC,'(I3.3)') JT YRECFM='DTFRC'//YFRC//'%TDATE' ! array of rank 3 for date YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP) TPDTFRC(JT)%TDATE%YEAR = ITDATE(1) TPDTFRC(JT)%TDATE%MONTH = ITDATE(2) TPDTFRC(JT)%TDATE%DAY = ITDATE(3) YRECFM='DTFRC'//YFRC//'%TIME' YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,TPDTFRC(JT)%TIME,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,TPDTFRC(JT)%TIME,IGRID,ILENCH, & YCOMMENT,IRESP) ! YRECFM='UFRC'//YFRC YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) PUFRC(:,JT)=Z1D(:) ! YRECFM='VFRC'//YFRC YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) PVFRC(:,JT)=Z1D(:) ! YRECFM='WFRC'//YFRC YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) PWFRC(:,JT)=Z1D(:) ! YRECFM='THFRC'//YFRC YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) PTHFRC(:,JT)=Z1D(:) ! YRECFM='RVFRC'//YFRC YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) PRVFRC(:,JT)=Z1D(:) ! YRECFM='TENDTHFRC'//YFRC YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) PTENDTHFRC(:,JT)=Z1D(:) ! YRECFM='TENDRVFRC'//YFRC YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) PTENDRVFRC(:,JT)=Z1D(:) ! YRECFM='GXTHFRC'//YFRC YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) PGXTHFRC(:,JT)=Z1D(:) ! YRECFM='GYTHFRC'//YFRC YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z1D,IGRID,ILENCH,YCOMMENT,IRESP) PGYTHFRC(:,JT)=Z1D(:) ! YRECFM='PGROUNDFRC'//YFRC YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PPGROUNDFRC(JT),IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PPGROUNDFRC(JT),IGRID,ILENCH,YCOMMENT,IRESP) ! END DO END IF @@ -1247,24 +1202,24 @@ IF (L2D_ADV_FRC) THEN WRITE (YFRC,'(I3.3)') JT YRECFM='DTADV'//YFRC//'%TDATE' ! array of rank 3 for date YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP) TPDTADVFRC(JT)%TDATE%YEAR = ITDATE(1) TPDTADVFRC(JT)%TDATE%MONTH = ITDATE(2) TPDTADVFRC(JT)%TDATE%DAY = ITDATE(3) ! YRECFM='DTADV'//YFRC//'%TIME' YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,TPDTADVFRC(JT)%TIME,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,TPDTADVFRC(JT)%TIME,IGRID,ILENCH, & YCOMMENT,IRESP) YRECFM='TH_ADV'//YFRC YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XDTH3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,XDTH3D,IGRID,ILENCH, & YCOMMENT,IRESP) PDTHFRC(:,:,:,JT)=XDTH3D(:,:,:) ! YRECFM='Q_ADV'//YFRC YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XDRV3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,XDRV3D,IGRID,ILENCH, & YCOMMENT,IRESP) PDRVFRC(:,:,:,JT)=XDRV3D(:,:,:) @@ -1278,7 +1233,7 @@ IF (L2D_REL_FRC) THEN WRITE (YFRC,'(I3.3)') JT YRECFM='DTREL'//YFRC//'%TDATE' ! array of rank 3 for date YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,ITDATE,IGRID,ILENCH,YCOMMENT,IRESP) TPDTRELFRC(JT)%TDATE%YEAR = ITDATE(1) TPDTRELFRC(JT)%TDATE%MONTH = ITDATE(2) TPDTRELFRC(JT)%TDATE%DAY = ITDATE(3) @@ -1287,14 +1242,14 @@ IF (L2D_REL_FRC) THEN YRECFM='TH_REL'//YFRC YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XDTH3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,XDTH3D,IGRID,ILENCH, & YCOMMENT,IRESP) PTHREL(:,:,:,JT)=XDTH3D(:,:,:) ! YRECFM='Q_REL'//YFRC YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,XDRV3D,IGRID,ILENCH, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,XDRV3D,IGRID,ILENCH, & YCOMMENT,IRESP) PRVREL(:,:,:,JT)=XDRV3D(:,:,:) @@ -1308,7 +1263,7 @@ IF (LUV_FLX) THEN IF ( CCONF /= 'START' .OR. CPROGRAM=='SPAWN ' ) THEN YRECFM='VU_FLX' YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PVU_FLUX_M,IGRID, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PVU_FLUX_M,IGRID, & ILENCH,YCOMMENT,IRESP) ELSE IF (CCONF == 'START') THEN PVU_FLUX_M(:,:,:)=0. @@ -1319,11 +1274,11 @@ IF (LTH_FLX) THEN IF ( CCONF /= 'START' .OR. CPROGRAM=='SPAWN ' ) THEN YRECFM='VT_FLX' YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PVTH_FLUX_M,IGRID, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PVTH_FLUX_M,IGRID, & ILENCH,YCOMMENT,IRESP) YRECFM='WT_FLX' YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,PWTH_FLUX_M,IGRID, & + CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PWTH_FLUX_M,IGRID, & ILENCH,YCOMMENT,IRESP) ELSE IF (CCONF == 'START') THEN PWTH_FLUX_M(:,:,:)=0. diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90 index c2607e6b5..86c9c24bb 100644 --- a/src/MNH/spawn_model2.f90 +++ b/src/MNH/spawn_model2.f90 @@ -259,6 +259,7 @@ USE MODI_UPDATE_METRICS USE MODE_FM USE MODE_FMWRIT, ONLY : IO_WRITE_HEADER USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST USE MODE_MODELN_HANDLER USE MODE_FMREAD USE MODE_MPPDB @@ -315,7 +316,6 @@ INTEGER :: IRESP ! Return codes in FM routines INTEGER :: ILUOUT ! Logical unit number for the output listing INTEGER :: INPRAR ! Number of articles predicted in the LFIFM file INTEGER :: ININAR ! Number of articles present in the LFIFM file -INTEGER :: ITYPE ! Type of file (cpio or not) INTEGER :: IGRID,ILENCH ! File management CHARACTER (LEN=100) :: YCOMMENT ! variables ! @@ -390,7 +390,7 @@ INTEGER,DIMENSION(:,:),ALLOCATABLE :: IJCOUNT ! REAL :: ZZS_MAX, ZZS_MAX_ll ! -TYPE(TFILEDATA),TARGET :: TZFILE +TYPE(TFILEDATA),POINTER :: TZFILE !------------------------------------------------------------------------------- ! ! Save model index and switch to model 2 variables @@ -431,6 +431,7 @@ ZTIME1 = ZSTART CALL DEALLOCATE_MODEL1(1) CALL DEALLOCATE_MODEL1(2) ! +TZFILE => NULL() !------------------------------------------------------------------------------- ! ! @@ -1443,8 +1444,6 @@ INPRAR = 22 + 2*(4+NRR+NSV) ! 22 = number of grid variables + reference state ! variables +dimension variables ! 2*(4+NRR+NSV) = number of prognostic variables ! at time t and t-dt -ITYPE=1 -! IF ( ( LEN_TRIM(HSPAFILE) /= 0 ) .AND. ( ADJUSTL(HSPAFILE) /= ADJUSTL(CINIFILE) ) ) THEN CMY_NAME(2)=HSPAFILE ELSE @@ -1453,24 +1452,7 @@ ELSE CMY_NAME(2)=ADJUSTL(ADJUSTR(CINIFILE)//'.spr'//ADJUSTL(HSPANBR)) END IF ! -TZFILE%CNAME = CMY_NAME(2) -TZFILE%CTYPE = 'SPAWNING' -IF (LIOCDF4) THEN - IF (.NOT.LLFIOUT) THEN - TZFILE%CFORMAT='NETCDF4' - ELSE - TZFILE%CFORMAT='LFICDF4' - TZFILE%NLFINPRAR= INPRAR - END IF -ELSE IF (LLFIOUT) THEN - TZFILE%CFORMAT='LFI' - TZFILE%NLFINPRAR= INPRAR -ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','SPAWN_MODEL2','unknown backup/output fileformat') -ENDIF -TZFILE%CMODE = 'WRITE' -TZFILE%NLFITYPE = ITYPE -TZFILE%NLFIVERB = NVERB +CALL IO_FILE_ADD2LIST(TZFILE,CMY_NAME(2),'SPAWNING','WRITE',KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB) ! CALL IO_FILE_OPEN_ll(TZFILE,CLUOUT,IRESP) ! diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90 index a288452c6..0a4335a41 100644 --- a/src/MNH/zoom_pgd.f90 +++ b/src/MNH/zoom_pgd.f90 @@ -64,6 +64,7 @@ USE MODE_FM USE MODE_FMWRIT USE MODE_FMREAD USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST USE MODE_ll USE MODE_MSG USE MODE_MODELN_HANDLER @@ -108,13 +109,15 @@ LOGICAL :: GFOUND INTEGER :: IXOR_DAD,IYOR_DAD ! compared to Dad file, if any INTEGER :: IXOR,IYOR ! given or computed INTEGER :: IDXRATIO,IDYRATIO -TYPE(TFILEDATA) :: TZZOOMFILE +TYPE(TFILEDATA),POINTER :: TZZOOMFILE ! REAL, DIMENSION(:,:), ALLOCATABLE :: ZZS1,ZZSMT1,ZZS2,ZZSMT2 ! NAMELIST/NAM_PGDFILE/CPGDFILE,YZOOMFILE,YZOOMNBR !------------------------------------------------------------------------------ ! +TZZOOMFILE => NULL() +! CALL GOTO_MODEL(1) CALL VERSION CPROGRAM='ZOOMPG' @@ -201,24 +204,7 @@ IF ( (LEN_TRIM(YZOOMFILE) == 0) .OR. (ADJUSTL(YZOOMFILE) == ADJUSTL(CPGDFILE)) ) YZOOMFILE=ADJUSTL(ADJUSTR(CPGDFILE)//'.z'//ADJUSTL(YZOOMNBR)) END IF ! -TZZOOMFILE%CNAME = YZOOMFILE -TZZOOMFILE%CTYPE = 'ZOOMPGD' -IF (LIOCDF4) THEN - IF (.NOT.LLFIOUT) THEN - TZZOOMFILE%CFORMAT='NETCDF4' - ELSE - TZZOOMFILE%CFORMAT='LFICDF4' - TZZOOMFILE%NLFINPRAR= 1 - END IF -ELSE IF (LLFIOUT) THEN - TZZOOMFILE%CFORMAT='LFI' - TZZOOMFILE%NLFINPRAR= 1 -ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','ZOOM_PGD','unknown backup/output fileformat') -ENDIF -TZZOOMFILE%CMODE = 'WRITE' -TZZOOMFILE%NLFITYPE = 1 -TZZOOMFILE%NLFIVERB = 5 +CALL IO_FILE_ADD2LIST(TZZOOMFILE,TRIM(YZOOMFILE),'ZOOMPGD','WRITE',KLFINPRAR=1,KLFITYPE=1,KLFIVERB=5) !PW: TODO: points to dad file (if existing) ! TZZOOMFILE%TDADFILE => ! CALL IO_FILE_OPEN_ll(TZZOOMFILE,CLUOUT0,IRESP) -- GitLab