diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90 index d3aa1359900ebdcc35b05d51755574630e34f206..f3f7f4f7b057d7cb89d4cb234c36acb5a7f15274 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 3a5bc9b961897dc249a1e3091b46627ca8e77f74..2f2ff77825c8e7aebee2e425436a8cf39293adfc 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 44e18762db746d9d5819f9716e3d6176e2fa49db..03d3bc3d2586349cecaa9987183263378ca70c97 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 1545a64d670890a702d963be1d00e5c72a57a402..b8fa5f5db3c042769cebd30362b5ad15d193d25c 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 59375f20cbd8e416da9051a0d160952e82c43f3a..ff854ef1592d10e1ebd413ef1cdea67ccf2e3cd3 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 97ea0b1434b45f10ea2e9d63c0408a39276047b4..c6633090e17720f4ad31e3403d1e04a0b05b258d 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 55fbf54b34866062d46f5aaa5321226427a7f1a7..a49e987af733d39587960424fda6c20150fecb6f 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 eaef806eaffaad80bc22edaa108a3cba01ea4a34..a3fe2ae9c44cfcfac1d4dd4687c04a4f73de4715 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 b8040166047f76a154c11ef3b4e465589946e80f..e2bbb87cd3063665ea0ab0c6fff083d57939f7df 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 fe5d95a7e4cc887f1e7a09c1914403fd6f3ee2fc..075ccbe3d3f3ebe2b8dc151dc83264a0c50aea41 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 cd25880819d09943df57dd9dc4499e401f8d6ac0..8562c486c8dd4f6cbafbdb9acef08be50eb25862 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 14779a7f527dcdfb1455706d8252eb88319957a4..4eca7fe7c04ebb38fdcbec80f8eed0b82f071f65 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 17bcb859b1b548e5d0e84a89c19eb5247813e046..7b004bd8e40e06268b75692bdc0adf97f0f928a8 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)