From 3b4531989f9e93019c63fba8d683dfa01efc0fcf Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Tue, 5 Dec 2017 16:16:23 +0100 Subject: [PATCH] Philippe 05/12/2017: IO: added TDESFILE and TDATAFILE fields to TFILEDATA structure + use them --- src/LIB/SURCOUCHE/src/modd_io.f90 | 2 + src/LIB/SURCOUCHE/src/mode_fm.f90 | 2 +- .../SURCOUCHE/src/mode_io_manage_struct.f90 | 20 ++++++++- src/MNH/ini_prog_var.f90 | 23 ++++------- src/MNH/ini_segn.f90 | 41 ++++++++----------- src/MNH/modeln.f90 | 4 +- src/MNH/prep_ideal_case.f90 | 4 +- src/MNH/prep_real_case.f90 | 4 +- src/MNH/read_desfmn.f90 | 30 ++++++++------ src/MNH/read_exsegn.f90 | 23 +++++------ src/MNH/read_surf_mnh.f90 | 5 +-- src/MNH/spawn_model2.f90 | 6 +-- src/MNH/write_desfmn.f90 | 33 +++++++++------ 13 files changed, 104 insertions(+), 93 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index d3aa13599..f3f7f4f7b 100644 --- a/src/LIB/SURCOUCHE/src/modd_io.f90 +++ b/src/LIB/SURCOUCHE/src/modd_io.f90 @@ -105,6 +105,8 @@ TYPE TFILEDATA CHARACTER(LEN=10) :: CACCESS = "UNKNOWN" !Fortran ACCESS (DIRECT/SEQUENTIAL) ! TYPE(TFILEDATA),POINTER :: TDADFILE => NULL() !Corresponding dad file + TYPE(TFILEDATA),POINTER :: TDESFILE => NULL() !Corresponding .des file + TYPE(TFILEDATA),POINTER :: TDATAFILE => NULL() !Corresponding data file (if .des file) TYPE(TFILEDATA),POINTER :: TFILE_PREV => NULL() TYPE(TFILEDATA),POINTER :: TFILE_NEXT => NULL() END TYPE TFILEDATA diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90 index 3a5bc9b96..2f2ff7782 100644 --- a/src/LIB/SURCOUCHE/src/mode_fm.f90 +++ b/src/LIB/SURCOUCHE/src/mode_fm.f90 @@ -181,7 +181,7 @@ SELECT CASE(TPFILE%CTYPE) CASE DEFAULT !Do not open '.des' file if OUTPUT IF(TPFILE%CTYPE/='OUTPUT') THEN - CALL IO_FILE_ADD2LIST(TZFILE_DES,TRIM(TPFILE%CNAME)//'.des','DES',TPFILE%CMODE,OOLD=.TRUE.) !OOLD=T because the file may already be in the list + CALL IO_FILE_ADD2LIST(TZFILE_DES,TRIM(TPFILE%CNAME)//'.des','DES',TPFILE%CMODE,TPDATAFILE=TPFILE,OOLD=.TRUE.) !OOLD=T because the file may already be in the list CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_OPEN_ll','OPEN_ll for '//TRIM(TPFILE%CNAME)//'.des') CALL OPEN_ll(TZFILE_DES,FORM='FORMATTED',DELIM='QUOTE',IOSTAT=IRESP,RECL=1024*8,OPARALLELIO=OPARALLELIO) TZFILE_DES%LOPENED = .TRUE. diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 index 44e18762d..03d3bc3d2 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 @@ -573,7 +573,8 @@ END SUBROUTINE POPULATE_STRUCT ! END SUBROUTINE IO_PREPARE_BAKOUT_STRUCT ! -SUBROUTINE IO_FILE_ADD2LIST(TPFILE,HNAME,HTYPE,HMODE,HFORM,HACCESS,KLFINPRAR,KLFITYPE,KLFIVERB,KRECL,TPDADFILE,OOLD) +SUBROUTINE IO_FILE_ADD2LIST(TPFILE,HNAME,HTYPE,HMODE, & + HFORM,HACCESS,KLFINPRAR,KLFITYPE,KLFIVERB,KRECL,TPDADFILE,TPDATAFILE,OOLD) ! USE MODD_BAKOUT, ONLY : LOUT_COMPRESS,LOUT_REDUCE_FLOAT_PRECISION,NOUT_COMPRESS_LEVEL USE MODE_MODELN_HANDLER, ONLY : GET_CURRENT_MODEL_INDEX @@ -589,6 +590,7 @@ INTEGER, OPTIONAL,INTENT(IN) :: KLFITYPE !Type of the file (u INTEGER, OPTIONAL,INTENT(IN) :: KLFIVERB !LFI verbosity level INTEGER, OPTIONAL,INTENT(IN) :: KRECL !Record length TYPE(TFILEDATA),POINTER,OPTIONAL,INTENT(IN) :: TPDADFILE !Corresponding dad file +TYPE(TFILEDATA),POINTER,OPTIONAL,INTENT(IN) :: TPDATAFILE!Corresponding data file (used only for DES files) LOGICAL, OPTIONAL,INTENT(IN) :: OOLD !FALSE if new file (should not be found) !TRUE if the file could already be in the list ! (add it only if not yet present) @@ -672,6 +674,9 @@ IF(.NOT.PRESENT(KRECL) .AND. TRIM(HTYPE)=='SURFACE_DATA') THEN ' files in DIRECT access') END IF ! +IF (PRESENT(TPDATAFILE) .AND. TRIM(HTYPE)/='DES') & + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','optional argument TPDATAFILE is not used by '//TRIM(HTYPE)//' files') +! IF (.NOT.ASSOCIATED(TFILE_LAST)) THEN ALLOCATE(TFILE_LAST) TFILE_FIRST => TFILE_LAST @@ -707,6 +712,19 @@ SELECT CASE(TPFILE%CTYPE) TPFILE%CFORMAT = 'TEXT' + !DES files + CASE('DES') + TPFILE%CFORMAT = 'TEXT' + IF (.NOT.PRESENT(TPDATAFILE)) THEN + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','missing TPDATAFILE argument for DES file '//TRIM(HNAME)) + ELSE + IF (.NOT.ASSOCIATED(TPDATAFILE)) & + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','TPDATAFILE is not associated for DES file '//TRIM(HNAME)) + TPFILE%TDATAFILE => TPDATAFILE + TPDATAFILE%TDESFILE => TPFILE + END IF + + !GPS files CASE('GPS') IF (TRIM(HMODE)/='WRITE') & !Invalid because not (yet) necessary diff --git a/src/MNH/ini_prog_var.f90 b/src/MNH/ini_prog_var.f90 index 1545a64d6..b8fa5f5db 100644 --- a/src/MNH/ini_prog_var.f90 +++ b/src/MNH/ini_prog_var.f90 @@ -104,18 +104,18 @@ END MODULE MODI_INI_PROG_VAR ! ! USE MODD_CH_AEROSOL -USE MODD_CH_M9_n, ONLY : NEQ, CNAMES -USE MODD_CH_MNHC_n, ONLY : LUSECHEM, LUSECHAQ, LUSECHIC, LCH_PH +USE MODD_CH_M9_n, ONLY: NEQ, CNAMES +USE MODD_CH_MNHC_n, ONLY: LUSECHEM, LUSECHAQ, LUSECHIC, LCH_PH USE MODD_CONF USE MODD_CONF_n USE MODD_DIM_n USE MODD_DUST USE MODD_DYN_n USE MODD_FIELD_n -USE MODD_IO_ll, ONLY: TFILEDATA +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_LSFIELD_n USE MODD_LUNIT -USE MODD_LUNIT_n, ONLY: TLUOUT +USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_NSV USE MODD_PARAM_n USE MODD_PARAMETERS @@ -123,9 +123,9 @@ USE MODD_SALT USE MODD_TURB_n ! USE MODE_IO_ll -USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST -USE MODE_FIELD, ONLY : TFIELDDATA,TYPEREAL -USE MODE_FM +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL +USE MODE_FM, ONLY: IO_FILE_CLOSE_ll, IO_FILE_OPEN_ll USE MODE_FMREAD USE MODE_MODELN_HANDLER USE MODE_MSG @@ -153,7 +153,6 @@ CHARACTER(LEN=*), INTENT(IN),OPTIONAL :: HCHEMFILE ! Name of the chem fil INTEGER :: ILUOUT ! Logical unit number ! associated with HLUOUT INTEGER :: IRESP -CHARACTER(LEN=32) :: YDESFM ! INTEGER :: IIMAX,IJMAX,IKMAX ! Dimensions of the chem file INTEGER :: IMI ! model number @@ -223,6 +222,8 @@ IF(PRESENT(HCHEMFILE)) THEN CALL IO_FILE_ADD2LIST(TZCHEMFILE,TRIM(HCHEMFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB) CALL IO_FILE_OPEN_ll(TZCHEMFILE) ! + ILUDES = TZCHEMFILE%TDESFILE%NLU + ! CALL IO_READ_FIELD(TZCHEMFILE,'IMAX',IIMAX,IRESP) IF (IRESP/=0) THEN !callabortstop @@ -256,24 +257,18 @@ IF(PRESENT(HCHEMFILE)) THEN LUSECHEM = .TRUE. END IF IF (LORILAM) THEN - YDESFM=TRIM(ADJUSTL(HCHEMFILE))//'.des' - CALL FMLOOK_ll(YDESFM,HLUOUT,ILUDES,IRESP) CALL POSNAM(ILUDES,'NAM_CH_ORILAM',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_CH_ORILAM) ENDIF IF (LDUST) THEN LDSTINIT=.TRUE. LDSTPRES=.FALSE. - YDESFM=TRIM(ADJUSTL(HCHEMFILE))//'.des' - CALL FMLOOK_ll(YDESFM,HLUOUT,ILUDES,IRESP) CALL POSNAM(ILUDES,'NAM_DUST',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_DUST) ENDIF IF (LSALT) THEN LSLTINIT=.TRUE. LSLTPRES=.FALSE. - YDESFM=TRIM(ADJUSTL(HCHEMFILE))//'.des' - CALL FMLOOK_ll(YDESFM,HLUOUT,ILUDES,IRESP) CALL POSNAM(ILUDES,'NAM_SALT',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_SALT) ! initialise NSV_* variables diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90 index 59375f20c..ff854ef15 100644 --- a/src/MNH/ini_segn.f90 +++ b/src/MNH/ini_segn.f90 @@ -171,21 +171,21 @@ END MODULE MODI_INI_SEG_n !* 0. DECLARATIONS ! ------------ USE MODD_CONF -USE MODD_CONF_n, ONLY : CSTORAGE_TYPE +USE MODD_CONF_n, ONLY: CSTORAGE_TYPE USE MODN_CONFZ USE MODD_DYN -USE MODD_IO_ll, ONLY : ISP,LIOCDF4,LLFIREAD,NVERB_FATAL,NVERB_WARNING,TFILE_OUTPUTLISTING,TFILEDATA +USE MODD_IO_ll, ONLY: ISP,LIOCDF4,LLFIREAD,NVERB_FATAL,NVERB_WARNING,TFILE_OUTPUTLISTING,TFILEDATA USE MODD_LUNIT -USE MODD_LUNIT_n, ONLY : CINIFILE_n=> CINIFILE, TINIFILE_n => TINIFILE, CINIFILEPGD_n=> CINIFILEPGD, TLUOUT, LUNIT_MODEL -USE MODD_PARAM_n, ONLY : CSURF +USE MODD_LUNIT_n, ONLY: CINIFILE_n=> CINIFILE, TINIFILE_n => TINIFILE, CINIFILEPGD_n=> CINIFILEPGD, TLUOUT, LUNIT_MODEL +USE MODD_PARAM_n, ONLY: CSURF USE MODD_PARAMETERS -USE MODD_REF, ONLY : LBOUSS +USE MODD_REF, ONLY: LBOUSS ! USE MODE_FIELD USE MODE_FMREAD -USE MODE_FM +USE MODE_FM, ONLY: IO_FILE_CLOSE_ll, IO_FILE_OPEN_ll USE MODE_IO_ll -USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST USE MODE_MSG USE MODE_POS ! @@ -194,7 +194,7 @@ USE MODI_READ_DESFM_n USE MODI_READ_EXSEG_n USE MODI_WRITE_DESFM_n ! -USE MODN_CONFIO, ONLY : NAM_CONFIO +USE MODN_CONFIO, ONLY: NAM_CONFIO USE MODN_LUNIT_n ! IMPLICIT NONE @@ -210,7 +210,6 @@ REAL,DIMENSION(:), INTENT(INOUT) :: PTSTEP_ALL ! Time STEP of ALL mod !* 0.1 declarations of local variables ! LOGICAL :: GFOUND ! Return code when searching namelist -CHARACTER (LEN=32) :: YEXSEG,YDESFM ! name of descriptor files CHARACTER (LEN=28) :: YINIFILE ! name of initial file CHARACTER (LEN=2) :: YMI ! string for model index INTEGER :: IMASDEV ! version of MESOHN file @@ -277,10 +276,8 @@ WRITE(UNIT=ILUOUT,FMT='(50("*"),/,"*",17X,"MODEL ",I1," LISTING",16X,"*",/, & & 50("*"))') KMI ! IF (CPROGRAM=='MESONH') THEN - YEXSEG='EXSEG'//TRIM(ADJUSTL(YMI))//'.nam' - CALL IO_FILE_ADD2LIST(TZFILE_DES,TRIM(YEXSEG),'NML','READ') + CALL IO_FILE_ADD2LIST(TZFILE_DES,'EXSEG'//TRIM(ADJUSTL(YMI))//'.nam','NML','READ') CALL IO_FILE_OPEN_ll(TZFILE_DES) - ILUSEG=TZFILE_DES%NLU ! !* 1.3 SPAWNING or SPEC or REAL program case ! --------------------- @@ -288,20 +285,18 @@ IF (CPROGRAM=='MESONH') THEN ELSE IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL '.OR. CPROGRAM=='SPEC ') THEN YINIFILE = CINIFILE_n HINIFILEPGD = CINIFILEPGD_n - YEXSEG=TRIM(ADJUSTL(CINIFILE_n))//'.des' CALL IO_FILE_ADD2LIST(TPINIFILE,TRIM(YINIFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB) CALL IO_FILE_OPEN_ll(TPINIFILE) - CALL FMLOOK_ll(YEXSEG,CLUOUT0,ILUSEG,IRESP) + TZFILE_DES => TPINIFILE%TDESFILE ! !* 1.3bis DIAG program case ! ELSE IF (CPROGRAM=='DIAG ') THEN YINIFILE = CINIFILE_n HINIFILEPGD = CINIFILEPGD_n - YEXSEG=TRIM(ADJUSTL(CINIFILE_n))//'.des' CALL IO_FILE_ADD2LIST(TPINIFILE,TRIM(YINIFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB) CALL IO_FILE_OPEN_ll(TPINIFILE) - CALL FMLOOK_ll(YEXSEG,CLUOUT0,ILUSEG,IRESP) + TZFILE_DES => TPINIFILE%TDESFILE ! !* 1.4 Other program cases ! ------------------- @@ -311,6 +306,8 @@ ELSE CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SEG_n','should not be called for CPROGRAM='//TRIM(CPROGRAM)) ENDIF ! +ILUSEG = TZFILE_DES%NLU +! !------------------------------------------------------------------------------- ! !* 2. SET DEFAULT VALUES @@ -355,18 +352,16 @@ END IF !* 4. READ DESFM FILE ! --------------- ! -YDESFM=TRIM(ADJUSTL(YINIFILE))//'.des' -! -CALL READ_DESFM_n(KMI,YDESFM,YCONF,GFLAT,GUSERV,GUSERC, & +CALL READ_DESFM_n(KMI,TPINIFILE,YCONF,GFLAT,GUSERV,GUSERC, & GUSERR,GUSERI,GUSECI,GUSERS,GUSERG,GUSERH,GUSECHEM,GUSECHAQ,& GUSECHIC,GCH_PH,GCH_CONV_LINOX,GSALT,GDEPOS_SLT,GDUST, & GDEPOS_DST, GCHTRANS, GORILAM, & - GDEPOS_AER, GLG, GPASPOL, & + GDEPOS_AER, GLG, GPASPOL, & #ifdef MNH_FOREFIRE - GFOREFIRE, & + GFOREFIRE, & #endif GLNOX_EXPLICIT, & - GCONDSAMP, IRIMX,IRIMY,ISV, & + GCONDSAMP, IRIMX,IRIMY,ISV, & YTURB,YTOM,GRMC01,YRAD,YDCONV,YSCONV,YCLOUD,YELEC,YEQNSYS ) ! !------------------------------------------------------------------------------- @@ -447,7 +442,7 @@ END IF ! routine which read related informations in the EXSEG descriptor in order to ! check coherence between both informations. ! -CALL READ_EXSEG_n(KMI,YEXSEG,YCONF,GFLAT,GUSERV,GUSERC, & +CALL READ_EXSEG_n(KMI,TZFILE_DES,YCONF,GFLAT,GUSERV,GUSERC, & GUSERR,GUSERI,GUSECI,GUSERS,GUSERG,GUSERH,GUSECHEM, & GUSECHAQ,GUSECHIC,GCH_PH, & GCH_CONV_LINOX,GSALT,GDEPOS_SLT,GDUST,GDEPOS_DST,GCHTRANS, & diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index 97ea0b143..c6633090e 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -614,7 +614,7 @@ IF (KTCOUNT == 1) THEN CALL IO_FILE_OPEN_ll(TDIAFILE) ! CALL IO_WRITE_HEADER(TDIAFILE) - CALL WRITE_DESFM_n(IMI,TRIM(TDIAFILE%CNAME)//'.des') + CALL WRITE_DESFM_n(IMI,TDIAFILE) CALL WRITE_LFIFMN_FORDIACHRO_n(TDIAFILE) ! !* 1.4 Initialization of the list of fields for the halo updates @@ -922,7 +922,7 @@ IF (IBAK < NBAK_NUMB ) THEN ! CALL IO_FILE_OPEN_ll(TZBAKFILE) ! - CALL WRITE_DESFM_n(IMI,TRIM(TZBAKFILE%CNAME)//'.des') + CALL WRITE_DESFM_n(IMI,TZBAKFILE) CALL IO_WRITE_HEADER(TBACKUPN(IBAK)%TFILE) CALL WRITE_LFIFM_n(TBACKUPN(IBAK)%TFILE,TBACKUPN(IBAK)%TFILE%TDADFILE%CNAME) COUTFMFILE = TZBAKFILE%CNAME diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90 index 55fbf54b3..a49e987af 100644 --- a/src/MNH/prep_ideal_case.f90 +++ b/src/MNH/prep_ideal_case.f90 @@ -459,7 +459,6 @@ INTEGER :: JLOOP,JILOOP,JJLOOP ! Loop indexes INTEGER :: NIB,NJB,NKB ! Begining useful area in x,y,z directions INTEGER :: NIE,NJE ! Ending useful area in x,y directions INTEGER :: NIU,NJU,NKU ! Upper bounds in x,y,z directions -CHARACTER (LEN=32) :: CDESFM ! Name of DESFM file CHARACTER(LEN=4) :: CIDEAL ='CSTN' ! kind of idealized fields ! 'CSTN' : Nv=cste case ! 'RSOU' : radiosounding case @@ -1738,7 +1737,6 @@ NNPRAR = 22 + 2*(NRR+NSV) & ! 22 = number of grid variables + reference ! 2*(8+NRR+NSV) + 1 = number of prognostic ! variables at time t and t-dt NTYPE=1 -CDESFM=ADJUSTL(ADJUSTR(CINIFILE)//'.des') ! CALL IO_FILE_ADD2LIST(TINIFILE,TRIM(CINIFILE),'PREPIDEALCASE','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB) ! @@ -1746,7 +1744,7 @@ CALL IO_FILE_OPEN_ll(TINIFILE) ! CALL IO_WRITE_HEADER(TINIFILE) ! -CALL WRITE_DESFM_n(1,CDESFM) +CALL WRITE_DESFM_n(1,TINIFILE) ! CALL WRITE_LFIFM_n(TINIFILE,'') ! There is no DAD model for PREP_IDEAL_CASE ! diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90 index eaef806ea..a3fe2ae9c 100644 --- a/src/MNH/prep_real_case.f90 +++ b/src/MNH/prep_real_case.f90 @@ -493,7 +493,6 @@ REAL,DIMENSION(:,:,:), ALLOCATABLE:: ZJ ! Jacobian ! !* file management variables and counters ! -CHARACTER (LEN=32) :: YDESFM ! Name of DESFM file INTEGER :: ILUOUT0 ! logical unit for listing file INTEGER :: IPRE_REAL1 ! logical unit for namelist file INTEGER :: IRESP ! return code in FM routines @@ -1061,8 +1060,7 @@ IF (YATMFILETYPE=='GRIBEX') THEN END DO END IF ! -YDESFM=TRIM(TINIFILE%CNAME)//'.des' -CALL WRITE_DESFM_n(1,YDESFM) +CALL WRITE_DESFM_n(1,TINIFILE) CALL IO_WRITE_HEADER(TINIFILE,HDAD_NAME=YDAD_NAME) CALL WRITE_LFIFM_n(TINIFILE,YDAD_NAME) ! diff --git a/src/MNH/read_desfmn.f90 b/src/MNH/read_desfmn.f90 index b80401660..e2bbb87cd 100644 --- a/src/MNH/read_desfmn.f90 +++ b/src/MNH/read_desfmn.f90 @@ -13,7 +13,7 @@ ! INTERFACE ! - SUBROUTINE READ_DESFM_n(KMI,HDESFM,HCONF,OFLAT,OUSERV, & + SUBROUTINE READ_DESFM_n(KMI,TPDATAFILE,HCONF,OFLAT,OUSERV, & OUSERC,OUSERR,OUSERI,OUSECI,OUSERS,OUSERG,OUSERH, & OUSECHEM,OUSECHAQ,OUSECHIC,OCH_PH,OCH_CONV_LINOX,OSALT, & ODEPOS_SLT,ODUST,ODEPOS_DST, OCHTRANS, & @@ -25,9 +25,12 @@ INTERFACE OCONDSAMP, & KRIMX,KRIMY,KSV_USER, & HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC,HEQNSYS ) +! +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_PARAMETERS +! INTEGER, INTENT(IN) :: KMI ! Model index -CHARACTER (LEN=32), INTENT(IN) :: HDESFM ! name of the DESFM file +TYPE(TFILEDATA), INTENT(IN) :: TPDATAFILE ! Datafile CHARACTER (LEN=5), INTENT(OUT) :: HCONF ! configuration var. linked to FMfile LOGICAL, INTENT(OUT) :: OFLAT ! Logical for zero orography LOGICAL, INTENT(OUT) :: OUSERV ! use Rv mixing ratio @@ -77,7 +80,7 @@ END INTERFACE ! END MODULE MODI_READ_DESFM_n ! ######################################################################### - SUBROUTINE READ_DESFM_n(KMI,HDESFM,HCONF,OFLAT,OUSERV, & + SUBROUTINE READ_DESFM_n(KMI,TPDATAFILE,HCONF,OFLAT,OUSERV, & OUSERC,OUSERR,OUSERI,OUSECI,OUSERS,OUSERG,OUSERH, & OUSECHEM,OUSECHAQ,OUSECHIC,OCH_PH,OCH_CONV_LINOX,OSALT, & ODEPOS_SLT,ODUST,ODEPOS_DST, OCHTRANS, & @@ -101,8 +104,7 @@ END MODULE MODI_READ_DESFM_n !! !!** METHOD !! ------ -!! Logical unit number of DESFM file is retrieved by calling FMLOOK. -!! Then, the descriptor file is read. Namelists (NAMXXXn) which contain +!! The descriptor file is read. Namelists (NAMXXXn) which contain !! informations linked to one nested model are at the beginning of the file. !! Namelists (NAMXXX) which contain variables common to all models !! are at the end of the file. When the model index is different from 1, @@ -129,7 +131,6 @@ END MODULE MODI_READ_DESFM_n !! !! EXTERNAL !! -------- -!! FMLOOK : to retrieve the logical unit number of descriptor or LFI files !! !! !! IMPLICIT ARGUMENTS @@ -195,7 +196,7 @@ END MODULE MODI_READ_DESFM_n ! !* 0. DECLARATIONS ! ------------ -USE MODD_IO_ll, ONLY: NVERB_FATAL +USE MODD_IO_ll, ONLY: NVERB_FATAL, TFILEDATA USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_PARAMETERS ! @@ -259,7 +260,6 @@ USE MODN_PARAM_LIMA ! USE MODE_MSG USE MODE_POS -USE MODE_FM ! IMPLICIT NONE ! @@ -268,7 +268,7 @@ IMPLICIT NONE ! ! INTEGER, INTENT(IN) :: KMI ! Model index -CHARACTER (LEN=32), INTENT(IN) :: HDESFM ! name of the DESFM file +TYPE(TFILEDATA), INTENT(IN) :: TPDATAFILE ! Datafile CHARACTER (LEN=5), INTENT(OUT) :: HCONF ! configuration var. linked to FMfile LOGICAL, INTENT(OUT) :: OFLAT ! Logical for zero orography LOGICAL, INTENT(OUT) :: OUSERV ! use Rv mixing ratio @@ -316,8 +316,8 @@ LOGICAL,DIMENSION(JPMODELMAX),INTENT(OUT) :: ODEPOS_AER ! Aerosols Wet Deposi ! !* 0.2 declarations of local variables ! -INTEGER :: IRESP,ILUDES, & ! return code of FMLOOK and logical unit numbers of - ILUOUT ! DESFM file and output listing +INTEGER :: ILUDES, & ! logical unit numbers of + ILUOUT ! DESFM file and output listing LOGICAL :: GFOUND ! Return code when searching namelist LOGICAL,DIMENSION(JPMODELMAX),SAVE :: LTEMPDEPOS_DST ! Dust Moist flag LOGICAL,DIMENSION(JPMODELMAX),SAVE :: LTEMPDEPOS_SLT ! Sea Salt Moist flag @@ -328,9 +328,13 @@ LOGICAL,DIMENSION(JPMODELMAX),SAVE :: LTEMPDEPOS_AER ! Orilam Moist flag !* 1. READ DESFM FILE ! --------------- ! -CALL FMLOOK_ll(HDESFM,TLUOUT%CNAME,ILUDES,IRESP) -ILUOUT = TLUOUT%NLU +CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_DESFM_n','called for '//TRIM(TPDATAFILE%CNAME)) ! +IF (.NOT.ASSOCIATED(TPDATAFILE%TDESFILE)) & + CALL PRINT_MSG(NVERB_FATAL,'IO','READ_DESFM_n','TDESFILE not associated for '//TRIM(TPDATAFILE%CNAME)) +! +ILUDES = TPDATAFILE%TDESFILE%NLU +ILUOUT = TLUOUT%NLU ! CALL POSNAM(ILUDES,'NAM_LUNITN',GFOUND) CALL INIT_NAM_LUNITN diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90 index fe5d95a7e..075ccbe3d 100644 --- a/src/MNH/read_exsegn.f90 +++ b/src/MNH/read_exsegn.f90 @@ -14,7 +14,7 @@ ! INTERFACE ! - SUBROUTINE READ_EXSEG_n(KMI,HEXSEG,HCONF,OFLAT,OUSERV, & + SUBROUTINE READ_EXSEG_n(KMI,TPEXSEGFILE,HCONF,OFLAT,OUSERV, & OUSERC,OUSERR,OUSERI,OUSECI,OUSERS,OUSERG,OUSERH, & OUSECHEM,OUSECHAQ,OUSECHIC,OCH_PH,OCH_CONV_LINOX,OSALT, & ODEPOS_SLT, ODUST,ODEPOS_DST, OCHTRANS, & @@ -27,8 +27,11 @@ INTERFACE KRIMX,KRIMY, KSV_USER, & HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC, & HEQNSYS,PTSTEP_ALL,HSTORAGE_TYPE,HINIFILEPGD ) +! +USE MODD_IO_ll, ONLY: TFILEDATA +! INTEGER, INTENT(IN) :: KMI ! Model index -CHARACTER (LEN=*), INTENT(IN) :: HEXSEG ! name of the EXSEG file +TYPE(TFILEDATA), INTENT(IN) :: TPEXSEGFILE ! EXSEG file ! The following variables are read by READ_DESFM in DESFM descriptor : CHARACTER (LEN=*), INTENT(IN) :: HCONF ! configuration var. linked to FMfile LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero orography @@ -83,7 +86,7 @@ END MODULE MODI_READ_EXSEG_n ! ! ! ######################################################################### - SUBROUTINE READ_EXSEG_n(KMI,HEXSEG,HCONF,OFLAT,OUSERV, & + SUBROUTINE READ_EXSEG_n(KMI,TPEXSEGFILE,HCONF,OFLAT,OUSERV, & OUSERC,OUSERR,OUSERI,OUSECI,OUSERS,OUSERG,OUSERH, & OUSECHEM,OUSECHAQ,OUSECHIC,OCH_PH,OCH_CONV_LINOX,OSALT, & ODEPOS_SLT, ODUST,ODEPOS_DST, OCHTRANS, & @@ -160,8 +163,6 @@ END MODULE MODI_READ_EXSEG_n !! !! EXTERNAL !! -------- -!! FMLOOK : to retrieve the logical unit number of descriptor -!! or LFI files !! !! IMPLICIT ARGUMENTS !! ------------------ @@ -297,7 +298,7 @@ USE MODD_PARAMETERS USE MODD_CONF USE MODD_CONFZ USE MODD_CONF_n, ONLY: CSTORAGE_TYPE -USE MODD_IO_ll, ONLY: NVERB_FATAL +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_VAR_ll, ONLY: NPROC ! @@ -348,7 +349,6 @@ USE MODD_GET_n USE MODD_GR_FIELD_n ! USE MODE_POS -USE MODE_FM USE MODE_IO_ll USE MODE_MSG ! @@ -379,7 +379,7 @@ IMPLICIT NONE ! ! INTEGER, INTENT(IN) :: KMI ! Model index -CHARACTER (LEN=*), INTENT(IN) :: HEXSEG ! name of the EXSEG file +TYPE(TFILEDATA), INTENT(IN) :: TPEXSEGFILE ! EXSEG file ! The following variables are read by READ_DESFM in DESFM descriptor : CHARACTER (LEN=*), INTENT(IN) :: HCONF ! configuration var. linked to FMfile LOGICAL, INTENT(IN) :: OFLAT ! Logical for zero orography @@ -428,8 +428,7 @@ CHARACTER (LEN=*), INTENT(IN) :: HINIFILEPGD ! name of PGD file ! !* 0.2 declarations of local variables ! -INTEGER :: IRESP,ILUSEG,ILUOUT ! return code of FMLOOK and logical unit numbers - ! of EXSEG file and outputlisting +INTEGER :: ILUSEG,ILUOUT ! logical unit numbers of EXSEG file and outputlisting INTEGER :: JS,JCI,JI,JSV ! Loop indexes LOGICAL :: GRELAX LOGICAL :: GFOUND ! Return code when searching namelist @@ -441,9 +440,9 @@ INTEGER :: IMOMENTS, JMODE, IMODEIDX, JMOM, JSV_NAME, JMOD, I !* 1. READ EXSEG FILE ! --------------- ! -CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_EXSEG_n','called for '//TRIM(HEXSEG)) +CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_EXSEG_n','called for '//TRIM(TPEXSEGFILE%CNAME)) ! -CALL FMLOOK_ll(HEXSEG,TLUOUT%CNAME,ILUSEG,IRESP) +ILUSEG = TPEXSEGFILE%NLU ILUOUT = TLUOUT%NLU ! CALL INIT_NAM_LUNITN diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90 index cd2588081..8562c486c 100644 --- a/src/MNH/read_surf_mnh.f90 +++ b/src/MNH/read_surf_mnh.f90 @@ -1286,7 +1286,6 @@ END SUBROUTINE READ_SURFN1_MNH ! USE MODE_ll USE MODE_FIELD, ONLY : TFIELDDATA,TYPECHAR -USE MODE_FM USE MODE_FMREAD USE MODE_MSG USE MODE_POS @@ -1314,7 +1313,6 @@ INTEGER :: ILUOUT ! INTEGER :: IMASDEV ! mesonh version of the input file INTEGER :: ILUDES ! .des file logical unit -CHARACTER(LEN=32) :: YDESFM ! .des file ! LOGICAL :: GFOUND CHARACTER(LEN=4) :: CTURB,CRAD,CGROUND,CCLOUD,CDCONV,CELEC @@ -1357,8 +1355,7 @@ ELSE IF ( (HREC=='NATURE'.OR.HREC=='SEA '.OR.HREC=='WATER ' & CGROUND='ISBA' ELSE CGROUND='NONE' - YDESFM=ADJUSTL(ADJUSTR(TPINFILE%CNAME)//'.des') - CALL FMLOOK_ll(YDESFM,TOUT%CNAME,ILUDES,IRESP) + ILUDES = TPINFILE%TDESFILE%NLU CALL POSNAM(ILUDES,'NAM_PARAMN',GFOUND,ILUOUT) IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_PARAMn) END IF diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90 index 14779a7f5..4eca7fe7c 100644 --- a/src/MNH/spawn_model2.f90 +++ b/src/MNH/spawn_model2.f90 @@ -314,8 +314,6 @@ LOGICAL, INTENT(IN) :: OSPAWN_SURF ! flag to spawn surface fields INTEGER :: ILUOUT ! Logical unit number for the output listing INTEGER(KIND=LFI_INT) :: INPRAR ! Number of articles predicted in the LFIFM file ! -CHARACTER (LEN=32) :: YDESFM ! Name of the desfm part of the FM-file -! ! INTEGER :: IIU ! Upper dimension in x direction INTEGER :: IJU ! Upper dimension in y direction @@ -1441,9 +1439,7 @@ CALL IO_FILE_ADD2LIST(TZFILE,CMY_NAME(2),'SPAWNING','WRITE',KLFINPRAR=INPRAR,KLF ! CALL IO_FILE_OPEN_ll(TZFILE) ! -YDESFM=ADJUSTL(ADJUSTR(CMY_NAME(2))//'.des') -! -CALL WRITE_DESFM_n(2,YDESFM) +CALL WRITE_DESFM_n(2,TZFILE) ! IF (LBAL_ONLY) THEN ! same relation with its DAD for model2 and for model1 NDXRATIO_ALL(2) = NDXRATIO_ALL(1) diff --git a/src/MNH/write_desfmn.f90 b/src/MNH/write_desfmn.f90 index 17bcb859b..7b004bd8e 100644 --- a/src/MNH/write_desfmn.f90 +++ b/src/MNH/write_desfmn.f90 @@ -13,9 +13,13 @@ ! INTERFACE ! -SUBROUTINE WRITE_DESFM_n(KMI,HDESFM) -INTEGER, INTENT(IN) :: KMI ! Model index -CHARACTER (LEN=*), INTENT(IN) :: HDESFM ! name of the DESFM file +SUBROUTINE WRITE_DESFM_n(KMI,TPDATAFILE) +! +USE MODD_IO_ll, ONLY: TFILEDATA +! +INTEGER, INTENT(IN) :: KMI ! Model index +TYPE(TFILEDATA), INTENT(IN) :: TPDATAFILE ! Datafile +! END SUBROUTINE WRITE_DESFM_n ! END INTERFACE @@ -24,7 +28,7 @@ END MODULE MODI_WRITE_DESFM_n ! ! ! ################################################### - SUBROUTINE WRITE_DESFM_n(KMI,HDESFM) + SUBROUTINE WRITE_DESFM_n(KMI,TPDATAFILE) ! ################################################### ! !!**** *WRITE_DESFM_n * - routine to write a descriptor file ( DESFM ) @@ -146,12 +150,13 @@ END MODULE MODI_WRITE_DESFM_n ! !* 0. DECLARATIONS ! ------------ -USE MODE_FM -! -USE MODD_PARAMETERS USE MODD_CONF -USE MODD_DYN_n, ONLY : LHORELAX_SVLIMA -USE MODD_LUNIT_n, ONLY : TLUOUT +USE MODD_DYN_n, ONLY: LHORELAX_SVLIMA +USE MODD_IO_ll, ONLY: TFILEDATA +USE MODD_LUNIT_n, ONLY: TLUOUT +USE MODD_PARAMETERS +! +USE MODE_MSG ! USE MODN_BACKUP USE MODN_CONF @@ -200,8 +205,8 @@ IMPLICIT NONE ! !* 0.1 declarations of arguments ! -INTEGER, INTENT(IN) :: KMI ! Model index -CHARACTER (LEN=*), INTENT(IN) :: HDESFM ! name of the DESFM part +INTEGER, INTENT(IN) :: KMI ! Model index +TYPE(TFILEDATA), INTENT(IN) :: TPDATAFILE ! Datafile ! !* 0.2 declarations of local variables ! @@ -227,8 +232,12 @@ LOGICAL, DIMENSION(JPSVMAX) :: GHORELAX_SV !* 1. UPDATE DESFM FILE ! ----------------- ! -CALL FMLOOK_ll(HDESFM,TLUOUT%CNAME,ILUSEG,IRESP) +CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_DESFM_n','called for '//TRIM(TPDATAFILE%CNAME)) +! +IF (.NOT.ASSOCIATED(TPDATAFILE%TDESFILE)) & + CALL PRINT_MSG(NVERB_FATAL,'IO','WRITE_DESFM_n','TDESFILE not associated for '//TRIM(TPDATAFILE%CNAME)) ! +ILUSEG = TPDATAFILE%TDESFILE%NLU ! CALL INIT_NAM_LUNITn WRITE(UNIT=ILUSEG,NML=NAM_LUNITn) -- GitLab