diff --git a/src/MNH/close_file_mnh.f90 b/src/MNH/close_file_mnh.f90 index 486db2897e554412c51a18e434d402e164c7be4c..bc39e66afb614f1a93c426d724f2d6011fbd2279 100644 --- a/src/MNH/close_file_mnh.f90 +++ b/src/MNH/close_file_mnh.f90 @@ -57,15 +57,17 @@ END MODULE MODI_CLOSE_FILE_MNH !* 0. DECLARATIONS ! ------------ ! -USE MODE_ll +USE MODD_CONF, ONLY : CPROGRAM +USE MODD_IO_ll, ONLY : TFILEDATA +USE MODD_IO_NAM, ONLY : CFILE +USE MODD_LUNIT, ONLY : CLUOUT0 +! USE MODE_FM USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME +USE MODE_ll USE MODE_MSG ! -USE MODD_LUNIT, ONLY : CLUOUT0 -USE MODD_CONF, ONLY : CPROGRAM -USE MODD_IO_NAM, ONLY : CFILE -! IMPLICIT NONE ! !* 0.1 Declarations of arguments @@ -84,10 +86,11 @@ INTEGER :: INAM ! logical unit of namelist INTEGER :: IMI ! model index INTEGER :: ILUOUT ! output listing logical unit CHARACTER(LEN=16) :: YLUOUT ! output listing file name +TYPE(TFILEDATA),POINTER :: TZFILE !------------------------------------------------------------------------------- ! SELECT CASE(CPROGRAM) - CASE('REAL ','IDEAL ','DIAG ') + CASE('REAL ','IDEAL ','DIAG ','PGD ') YLUOUT = CLUOUT0 CASE('MESONH','SPAWN ') CALL GET_MODEL_NUMBER_ll (IMI) @@ -103,6 +106,7 @@ END SELECT ! CALL FMLOOK_ll(YLUOUT,YLUOUT,ILUOUT,IRESP) IF (ILUOUT==KUNIT) THEN + CALL PRINT_MSG(NVERB_DEBUG,'IO','CLOSE_FILE_MNH','called for '//TRIM(YLUOUT)) CALL CLOSE_ll(YLUOUT,IRESP) RETURN END IF @@ -112,9 +116,14 @@ END IF !* closes the namelist ! ------------------- ! +CALL PRINT_MSG(NVERB_DEBUG,'IO','CLOSE_FILE_MNH','called for '//TRIM(CFILE)) +! +TZFILE => NULL() +CALL IO_FILE_FIND_BYNAME(TRIM(CFILE),TZFILE,IRESP) +! CALL FMLOOK_ll(CFILE,YLUOUT,INAM,IRESP) IF (INAM==KUNIT) THEN - CALL CLOSE_ll(CFILE,IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE) CFILE = " " ELSE WRITE(ILUOUT,*) 'Error for closing a file: ' diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90 index aace54650b4018634d1698a7c30db794431ec847..8847d6397cb38159c677d5e5e330166dec527152 100644 --- a/src/MNH/diag.f90 +++ b/src/MNH/diag.f90 @@ -190,7 +190,6 @@ LOGICAL :: GCLOSE_OUT = .FALSE. ! conditional closure of the OUTPUT FM-file INTEGER :: ISTEPBAL ! loop indice for balloons and aircraft INTEGER :: ILUNAM ! Logical unit numbers for the namelist file ! and for output_listing file -CHARACTER (LEN=9) :: YNAM ! name of the namelist file INTEGER :: JF =0 ! loop index LOGICAL :: GFOUND ! Return code when searching namelist LOGICAL, DIMENSION(:,:),ALLOCATABLE :: GMASKkids ! kids domains mask @@ -202,7 +201,8 @@ INTEGER :: IINFO_ll ! return code for _ll routines REAL, DIMENSION(:,:),ALLOCATABLE :: ZSEA,ZTOWN REAL, DIMENSION(:,:,:,:),ALLOCATABLE :: ZWETDEPAER ! -TYPE(TFILEDATA),POINTER :: TZDIACFILE +TYPE(TFILEDATA),POINTER :: TZDIACFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZNMLFILE => NULL() !Namelist file ! NAMELIST/NAM_DIAG/ CISO, LVAR_RS, LVAR_LS, & NCONV_KF, NRAD_3D, CRAD_SAT, NRTTOVINFO, LRAD_SUBG_COND, & @@ -236,8 +236,6 @@ NAMELIST/NAM_CONF_DIAG/JPHEXT, NHALO !* 0.0 Initializations ! --------------- ! -TZDIACFILE => NULL() -! CALL GOTO_MODEL(1) ! CALL VERSION @@ -376,9 +374,9 @@ XISOTH(:)=0. !* 1.0 Namelist reading ! ---------------- ! -YNAM = 'DIAG1.nam' -CALL OPEN_ll (UNIT=ILUNAM,FILE=YNAM,IOSTAT=IRESP,STATUS="OLD",ACTION='READ', & - FORM="FORMATTED",POSITION="REWIND",MODE='GLOBAL') +CALL IO_FILE_ADD2LIST(TZNMLFILE,'DIAG1.nam','NML','READ') +CALL IO_FILE_OPEN_ll(TZNMLFILE) +ILUNAM = TZNMLFILE%NLU ! ! CALL POSNAM(ILUNAM,'NAM_DIAG',GFOUND) @@ -410,7 +408,7 @@ IF (GFOUND) THEN END IF CALL SET_CONFIO_ll() ! -CALL CLOSE_ll(YNAM) +CALL IO_FILE_CLOSE_ll(TZNMLFILE) ! CINIFILE = YINIFILE(1) CINIFILEPGD = YINIFILEPGD(1) diff --git a/src/MNH/fill_zsmtn.f90 b/src/MNH/fill_zsmtn.f90 index a9594686aa8a04fc516c3ee908dac03d670af521..cf64fb3d152390c0af9f52c500a1e61f82251a13 100644 --- a/src/MNH/fill_zsmtn.f90 +++ b/src/MNH/fill_zsmtn.f90 @@ -66,7 +66,6 @@ END MODULE MODI_FILL_ZSMTn !* 0. DECLARATIONS ! USE MODD_GRID_n, ONLY : XZSMT -USE MODD_LUNIT_n, ONLY : CLUOUT USE MODD_LBC_n, ONLY : CLBCX,CLBCY USE MODD_NESTING USE MODD_PARAMETERS @@ -143,7 +142,7 @@ DPTR_CLBCY=>CLBCY DPTR_XZSMT=>XZSMT CALL SPAWN_ZS(NXOR_ALL(KSON),NXEND_ALL(KSON),NYOR_ALL(KSON),NYEND_ALL(KSON), & NDXRATIO_ALL(KSON),NDYRATIO_ALL(KSON),IDIMX,IDIMY,DPTR_CLBCX,DPTR_CLBCY, & - CLUOUT,PFIELD,DPTR_XZSMT,HFIELD ) + PFIELD,DPTR_XZSMT,HFIELD ) !------------------------------------------------------------------------------- ! CALL GOTO_MODEL(IMI) diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90 index 042e91eb741c8014e0a98752465dab47a5efefa3..6dd30005fe55d8a7316ec818e286651fca2ad0ce 100644 --- a/src/MNH/ini_segn.f90 +++ b/src/MNH/ini_segn.f90 @@ -253,8 +253,10 @@ CHARACTER (LEN=4) :: YSCONV CHARACTER (LEN=4) :: YCLOUD CHARACTER (LEN=4) :: YELEC CHARACTER (LEN=3) :: YEQNSYS +TYPE(TFILEDATA),POINTER :: TZFILE_DES ! -TPINIFILE => NULL() +TPINIFILE => NULL() +TZFILE_DES => NULL() !------------------------------------------------------------------------------- ! !* 1. OPEN OUPTUT-LISTING FILE AND EXSEG FILE @@ -276,9 +278,9 @@ WRITE(UNIT=ILUOUT,FMT='(50("*"),/,"*",17X,"MODEL ",I1," LISTING",16X,"*",/, & ! IF (CPROGRAM=='MESONH') THEN YEXSEG='EXSEG'//TRIM(ADJUSTL(YMI))//'.nam' - - CALL OPEN_ll(UNIT=ILUSEG,FILE=YEXSEG,IOSTAT=IRESP,ACTION='READ', & - DELIM='QUOTE',MODE='GLOBAL') + CALL IO_FILE_ADD2LIST(TZFILE_DES,TRIM(YEXSEG),'NML','READ') + CALL IO_FILE_OPEN_ll(TZFILE_DES) + ILUSEG=TZFILE_DES%NLU ! !* 1.3 SPAWNING or SPEC or REAL program case ! --------------------- @@ -475,7 +477,7 @@ END IF !* 7. CLOSE FILES ! ------------ ! -IF (CPROGRAM=='MESONH') CALL CLOSE_ll(YEXSEG,IOSTAT=IRESP) +IF (CPROGRAM=='MESONH') CALL IO_FILE_CLOSE_ll(TZFILE_DES) ! !------------------------------------------------------------------------------- 9002 FORMAT(/,'FATAL ERROR IN INI_SEG_n: pb to read ',A16,' IRESP=',I3) diff --git a/src/MNH/latlon_to_xy.f90 b/src/MNH/latlon_to_xy.f90 index 2f9223c5d24262eaa74c0f1ea72ba101facc358d..31890a4b901caa6c40945235c6d2af157259fe42 100644 --- a/src/MNH/latlon_to_xy.f90 +++ b/src/MNH/latlon_to_xy.f90 @@ -103,7 +103,8 @@ REAL :: ZXHAT ! output conformal coodinate x REAL :: ZYHAT ! output conformal coodinate y INTEGER :: II,IJ ! indexes of the point REAL :: ZI,ZJ ! fractionnal indexes of the point -TYPE(TFILEDATA),POINTER :: TZINIFILE +TYPE(TFILEDATA),POINTER :: TZINIFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZNMLFILE => NULL() ! !* 0.3 Declaration of namelists ! ------------------------ @@ -127,13 +128,14 @@ CALL INI_CST ! CALL INITIO_ll() ! -CALL OPEN_ll(UNIT=INAM,FILE='LATLON2XY1.nam',IOSTAT=IRESP,ACTION='READ', & - DELIM='QUOTE',MODE='GLOBAL') +CALL IO_FILE_ADD2LIST(TZNMLFILE,'LATLON2XY1.nam','NML','READ') +CALL IO_FILE_OPEN_ll(TZNMLFILE) +INAM=TZNMLFILE%NLU READ(INAM,NAM_INIFILE) ! READ(INAM,NAM_CONFIO) CALL SET_CONFIO_ll() -CALL CLOSE_ll('LATLON2XY1.nam',IOSTAT=IRESP) +CALL IO_FILE_CLOSE_ll(TZNMLFILE) ! !* 1. Opening of MESONH file ! ---------------------- diff --git a/src/MNH/mnh2lpdm.f90 b/src/MNH/mnh2lpdm.f90 index 49e7aac215ba5237d813f5ab214eeb6f051252b5..5222ada3eea5e5fd900530e3bb0030e00bd6bb3d 100644 --- a/src/MNH/mnh2lpdm.f90 +++ b/src/MNH/mnh2lpdm.f90 @@ -24,7 +24,7 @@ ! USE MODD_MNH2LPDM USE MODD_CONF, ONLY : CPROGRAM -USE MODD_IO_ll,ONLY : TPTR2FILE +USE MODD_IO_ll,ONLY : TFILEDATA,TPTR2FILE ! USE MODE_FM USE MODE_IO_ll @@ -48,6 +48,7 @@ INTEGER :: IFMTO,IFGRI,IFDAT ! Unite METEO et GRILLE. INTEGER :: IREP,IVERB,JFIC LOGICAL :: GFOUND ! Return code when searching namelist TYPE(TPTR2FILE),DIMENSION(JPMNHMAX) :: TZFMNH ! MesoNH files +TYPE(TFILEDATA),POINTER :: TZNMLFILE => NULL() ! Namelist file ! ! ! @@ -79,9 +80,10 @@ CALL OPEN_LL(UNIT=IFLOG,FILE=YFLOG,IOSTAT=IREP,FORM='FORMATTED', & ! !* 1.4 Lecture des namelists. ! -CALL OPEN_LL(UNIT=IFNML,FILE=YFNML,IOSTAT=IREP,FORM='FORMATTED', & - ACTION='READ',MODE='GLOBAL') -print *,'Ouverture fichier Namlist OK' +CALL IO_FILE_ADD2LIST(TZNMLFILE,YFNML,'NML','READ') +CALL IO_FILE_OPEN_ll(TZNMLFILE) +IFNML = TZNMLFILE%NLU + READ(UNIT=IFNML,NML=NAM_TURB) READ(UNIT=IFNML,NML=NAM_FIC) print *,'Lecture de NAM_FIC OK.' @@ -94,7 +96,7 @@ LCDF4 = .FALSE. LLFIOUT = .FALSE. LLFIREAD = .FALSE. CALL SET_CONFIO_ll() -CALL CLOSE_LL(YFNML,IREP,'KEEP') +CALL IO_FILE_CLOSE_ll(TZNMLFILE) ! ! !* 1.5 Comptage des FM a traiter. diff --git a/src/MNH/mnhclose_namelist.f90 b/src/MNH/mnhclose_namelist.f90 index aa52de069b03901d2843bcb05dd09bb59c2a008b..e52b209242d0159530f9b496ac11b9a082635784 100644 --- a/src/MNH/mnhclose_namelist.f90 +++ b/src/MNH/mnhclose_namelist.f90 @@ -57,15 +57,17 @@ END MODULE MODI_MNHCLOSE_NAMELIST !* 0. DECLARATIONS ! ------------ ! -USE MODE_ll +USE MODD_CONF, ONLY : CPROGRAM +USE MODD_IO_ll, ONLY : TFILEDATA +USE MODD_IO_NAM, ONLY : CNAM +USE MODD_LUNIT, ONLY : CLUOUT0 +! USE MODE_FM USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME +USE MODE_ll USE MODE_MSG ! -USE MODD_LUNIT, ONLY : CLUOUT0 -USE MODD_CONF, ONLY : CPROGRAM -USE MODD_IO_NAM, ONLY : CNAM -! IMPLICIT NONE ! !* 0.1 Declarations of arguments @@ -84,8 +86,11 @@ INTEGER :: INAM ! logical unit of namelist INTEGER :: IMI ! model index INTEGER :: ILUOUT ! output listing logical unit CHARACTER(LEN=16) :: YLUOUT ! output listing file name +TYPE(TFILEDATA),POINTER :: TZFILE !------------------------------------------------------------------------------- ! +CALL PRINT_MSG(NVERB_DEBUG,'IO','MNHCLOSE_NAMELIST','called for '//TRIM(CNAM)) +! SELECT CASE(CPROGRAM) CASE('REAL ','IDEAL ','DIAG ') YLUOUT = CLUOUT0 @@ -99,9 +104,12 @@ END SELECT !* closes the namelist ! ------------------- ! +TZFILE => NULL() +CALL IO_FILE_FIND_BYNAME(TRIM(CNAM),TZFILE,IRESP) +! CALL FMLOOK_ll(CNAM,YLUOUT,INAM,IRESP) IF (INAM==KLUNAM) THEN - CALL CLOSE_ll(CNAM,IRESP) + CALL IO_FILE_CLOSE_ll(TZFILE) CNAM = " " ELSE CALL FMLOOK_ll(YLUOUT,YLUOUT,ILUOUT,IRESP) diff --git a/src/MNH/mnhget_desfmn.f90 b/src/MNH/mnhget_desfmn.f90 index e282ced5bb5c4317b68ff5e6f10506942d52d779..68e10f405c5f002da98164a9b56bdd9ab199f21b 100644 --- a/src/MNH/mnhget_desfmn.f90 +++ b/src/MNH/mnhget_desfmn.f90 @@ -78,7 +78,6 @@ INTEGER, INTENT(OUT) :: KLUDES ! logical unit of .des file !* 0.2 Declarations of local variables ! ------------------------------- ! -INTEGER :: ILUOUT ! INTEGER :: IRESP ! IRESP : return-code if a problem appears ! at the open of the file in LFI routines INTEGER :: IMI ! model index @@ -92,7 +91,7 @@ CHARACTER(LEN=32) :: YDESFM ! .des file name !* 1. initialisation of logical unit of output listing ! SELECT CASE(CPROGRAM) - CASE('REAL ','IDEAL ','DIAG ') + CASE('REAL ','IDEAL ','DIAG ','PGD ') YLUOUT = CLUOUT0 CASE('MESONH','SPAWN ') IMI = GET_CURRENT_MODEL_INDEX() @@ -101,8 +100,6 @@ SELECT CASE(CPROGRAM) YLUOUT = '' END SELECT ! -CALL FMLOOK_ll(YLUOUT,YLUOUT,ILUOUT,IRESP) -! !* 2. initialisation of logical units of .des files ! YDESFM =' ' diff --git a/src/MNH/mnhopen_namelist.f90 b/src/MNH/mnhopen_namelist.f90 index 130b16abf531856aeca38806d366993b0ea3f1ab..fa2675d38ddce0f74219330f805a9eae98ac7b9f 100644 --- a/src/MNH/mnhopen_namelist.f90 +++ b/src/MNH/mnhopen_namelist.f90 @@ -58,12 +58,17 @@ END MODULE MODI_MNHOPEN_NAMELIST !* 0. DECLARATIONS ! ------------ ! -USE MODE_ll -USE MODE_IO_ll -USE MODE_FM USE MODD_CONF, ONLY : CPROGRAM -USE MODD_LUNIT, ONLY : CLUOUT0 +USE MODD_IO_ll, ONLY : TFILEDATA USE MODD_IO_NAM, ONLY : CNAM +USE MODD_LUNIT, ONLY : CLUOUT0 +! +USE MODE_FM +USE MODE_IO_ll +USE MODE_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST +USE MODE_MSG +USE MODE_IO_MANAGE_STRUCT, ONLY : io_file_print_list ! IMPLICIT NONE ! @@ -81,18 +86,10 @@ INTEGER :: IRESP ! IRESP : return-code if a problem appears ! at the open of the file in LFI routines INTEGER :: IMI ! model index ! -INTEGER :: ILUOUT ! output listing logical unit -CHARACTER(LEN=16) :: YLUOUT ! output listing file name +TYPE(TFILEDATA),POINTER :: TZFILE !------------------------------------------------------------------------------- ! -SELECT CASE(CPROGRAM) - CASE('MESONH','SPAWN ') - CALL GET_MODEL_NUMBER_ll (IMI) - WRITE(YLUOUT,FMT='(A14,I1,A1)') 'OUTPUT_LISTING',IMI,' ' - CASE DEFAULT - YLUOUT = CLUOUT0 -END SELECT -! +TZFILE => NULL() !------------------------------------------------------------------------------- ! !* reading of namelist @@ -109,6 +106,7 @@ ELSE CASE('IDEAL ') CNAM='PRE_IDEA1.nam' CASE('MESONH') + CALL GET_MODEL_NUMBER_ll(IMI) WRITE(CNAM,FMT='(A5,I1,A22)') 'EXSEG',IMI,'.nam ' CASE('DIAG ') CNAM='DIAG1.nam ' @@ -121,13 +119,16 @@ ELSE CASE('SPEC ') CNAM='SPEC1.nam' CASE DEFAULT - print*,"MNHOPEN_NAMELIST :: CPROGRAM=", CPROGRAM,"####" - STOP "MNHOPEN_NAMELIST : CPROGRAM NOT ALLOWED " + CALL PRINT_MSG(NVERB_FATAL,'IO','MNHOPEN_NAMELIST','CPROGRAM '//TRIM(CPROGRAM)//' not allowed') END SELECT END IF ! -CALL OPEN_ll(KLUNAM,FILE=CNAM,IOSTAT=IRESP,ACTION='READ', & - FORM="FORMATTED",POSITION="REWIND",MODE='GLOBAL') +CALL PRINT_MSG(NVERB_DEBUG,'IO','MNHOPEN_NAMELIST','called for '//TRIM(CNAM)) +! +CALL IO_FILE_ADD2LIST(TZFILE,TRIM(CNAM),'NML','READ',OOLD=.TRUE.) !OOLD=T because the file may already be in list +CALL IO_FILE_OPEN_ll(TZFILE) +! +KLUNAM = TZFILE%NLU ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/open_file_mnh.f90 b/src/MNH/open_file_mnh.f90 index 9f4589ecd82fad6e5735c88bd11287d227309be7..d35e50203a73add16ec868130b34b48a2e71b568 100644 --- a/src/MNH/open_file_mnh.f90 +++ b/src/MNH/open_file_mnh.f90 @@ -61,9 +61,14 @@ END MODULE MODI_OPEN_FILE_MNH !* 0. DECLARATIONS ! ------------ ! -USE MODE_IO_ll +USE MODD_IO_ll, ONLY : TFILEDATA USE MODD_IO_NAM, ONLY : CFILE ! +USE MODE_FM, ONLY : IO_FILE_OPEN_ll +USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST +USE MODE_MSG +! IMPLICIT NONE ! !* 0.1 Declarations of arguments @@ -80,24 +85,22 @@ INTEGER, INTENT(IN) :: KRECL ! record length ! ------------------------------- ! INTEGER :: IRESP +TYPE(TFILEDATA),POINTER :: TZFILE ! !------------------------------------------------------------------------------- ! +CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_FILE_MNH','called for '//TRIM(HFILE)) +! +TZFILE => NULL() +! CFILE = HFILE ! -IF (HFORM=='FORMATTED') THEN - CALL OPEN_ll(UNIT=KUNIT,FILE=HFILE,IOSTAT=IRESP,ACTION=HACTION, & - FORM=HFORM, MODE='GLOBAL' ) -ELSE - IF (HACCESS=='DIRECT') THEN - CALL OPEN_ll(UNIT=KUNIT,FILE=HFILE,IOSTAT=IRESP,ACTION=HACTION, & - FORM=HFORM,ACCESS=HACCESS,RECL=KRECL, & - MODE='GLOBAL' ) - ELSE - CALL OPEN_ll(UNIT=KUNIT,FILE=HFILE,IOSTAT=IRESP,ACTION=HACTION, & - FORM=HFORM, MODE='GLOBAL' ) - END IF -END IF +CALL IO_FILE_ADD2LIST(TZFILE,TRIM(HFILE),'SURFACE_DATA',HACTION, & + HFORM=HFORM,HACCESS=HACCESS,KRECL=KRECL, & + OOLD=.TRUE.) !OOLD=T because the file may already be in list +CALL IO_FILE_OPEN_ll(TZFILE) +! +KUNIT = TZFILE%NLU ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/open_nestpgd_files.f90 b/src/MNH/open_nestpgd_files.f90 index c34b9dbb9b191e6f1336dbb8823320bc95235929..8fc74d0b33041bb818e9322436ce2c3893c9b267 100644 --- a/src/MNH/open_nestpgd_files.f90 +++ b/src/MNH/open_nestpgd_files.f90 @@ -129,6 +129,7 @@ INTEGER :: NHALO_MNH ! INTEGER :: ILUOUT ! Logical unit number for the EXSPA file TYPE(TFILEDATA),POINTER :: TZDADFILE +TYPE(TFILEDATA),POINTER :: TZPRE_NEST_PGD ! !* 0.3 Declaration of namelists ! ------------------------ @@ -145,6 +146,9 @@ NAMELIST/NAM_NEST_PGD/ YNEST NAMELIST/NAM_CONF_NEST/JPHEXT, NHALO_MNH !------------------------------------------------------------------------------- ! +TZDADFILE => NULL() +TZPRE_NEST_PGD => NULL() +! !* 1. SET DEFAULT NAMES ! ----------------- ! @@ -168,8 +172,9 @@ ILUOUT0=TLUOUT0%NLU !* 3. OPENNING OF PRE_NEST_PGD1.nam ! ----------------------------- ! -CALL OPEN_ll(UNIT=IPRE_NEST_PGD,FILE=HPRE_NEST_PGD,IOSTAT=IRESP,FORM='FORMATTED',ACTION='READ', & - MODE='GLOBAL') +CALL IO_FILE_ADD2LIST(TZPRE_NEST_PGD,TRIM(HPRE_NEST_PGD),'NML','READ') +CALL IO_FILE_OPEN_ll(TZPRE_NEST_PGD) +IPRE_NEST_PGD = TZPRE_NEST_PGD%NLU !reading of NAM_CONFZ CALL FMLOOK_ll(HPRE_NEST_PGD,HPRE_NEST_PGD,ILUOUT,IRESP) CALL POSNAM(IPRE_NEST_PGD,'NAM_CONFZ',GFOUND) @@ -313,8 +318,7 @@ DO JPGD=1,NMODEL 'WRITE',KLFITYPE=1,KLFIVERB=NVERB,TPDADFILE=TZDADFILE) END DO ! -!------------------------------------------------------------------------------- -CALL CLOSE_ll(HPRE_NEST_PGD) +CALL IO_FILE_CLOSE_ll(TZPRE_NEST_PGD) !------------------------------------------------------------------------------- ! !* 7. OPENING OF INPUT AND OUTPUT PGD FILES diff --git a/src/MNH/open_prc_files.f90 b/src/MNH/open_prc_files.f90 index 61fad6ff4e857a984ea1f8d4af7d1351919a9a42..d8219d640e3a54e9ca7c9e537da4cb3c6beae48d 100644 --- a/src/MNH/open_prc_files.f90 +++ b/src/MNH/open_prc_files.f90 @@ -12,16 +12,17 @@ ! ########################## ! INTERFACE - SUBROUTINE OPEN_PRC_FILES(HPRE_REAL1,HATMFILE,HATMFILETYPE, & - HCHEMFILE,HCHEMFILETYPE, & - HSURFFILE,HSURFFILETYPE, & - HPGDFILE,TPPGDFILE) + SUBROUTINE OPEN_PRC_FILES(TPPRE_REAL1FILE,HATMFILE,HATMFILETYPE,TPATMFILE, & + HCHEMFILE,HCHEMFILETYPE, & + HSURFFILE,HSURFFILETYPE, & + HPGDFILE,TPPGDFILE) ! USE MODD_IO_ll, ONLY: TFILEDATA ! -CHARACTER(LEN=28), INTENT(OUT) :: HPRE_REAL1 ! name of the PRE_REAL1 file +TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPPRE_REAL1FILE ! PRE_REAL1 file CHARACTER(LEN=28), INTENT(OUT) :: HATMFILE ! name of the input atmospheric file CHARACTER(LEN=6), INTENT(OUT) :: HATMFILETYPE ! type of the input atmospheric file +TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPATMFILE ! physiographic data file CHARACTER(LEN=28), INTENT(OUT) :: HCHEMFILE ! name of the input chemical file CHARACTER(LEN=6), INTENT(OUT) :: HCHEMFILETYPE! type of the input chemical file CHARACTER(LEN=28), INTENT(OUT) :: HSURFFILE ! name of the input surface file @@ -34,10 +35,10 @@ END INTERFACE END MODULE MODI_OPEN_PRC_FILES ! ! ############################################################### - SUBROUTINE OPEN_PRC_FILES(HPRE_REAL1,HATMFILE,HATMFILETYPE, & - HCHEMFILE,HCHEMFILETYPE, & - HSURFFILE,HSURFFILETYPE, & - HPGDFILE,TPPGDFILE) + SUBROUTINE OPEN_PRC_FILES(TPPRE_REAL1FILE,HATMFILE,HATMFILETYPE,TPATMFILE, & + HCHEMFILE,HCHEMFILETYPE, & + HSURFFILE,HSURFFILETYPE, & + HPGDFILE,TPPGDFILE) ! ############################################################### ! !!**** *OPEN_PRC_FILES* - openning of the files used in PREP_REAL_CASE @@ -123,9 +124,10 @@ IMPLICIT NONE !* 0.1 Declaration of arguments ! ------------------------ ! -CHARACTER(LEN=28), INTENT(OUT) :: HPRE_REAL1 ! name of the PRE_REAL1 file +TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPPRE_REAL1FILE ! PRE_REAL1 file CHARACTER(LEN=28), INTENT(OUT) :: HATMFILE ! name of the input atmospheric file CHARACTER(LEN=6), INTENT(OUT) :: HATMFILETYPE ! type of the input atmospheric file +TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPATMFILE ! physiographic data file CHARACTER(LEN=28), INTENT(OUT) :: HCHEMFILE ! name of the input chemical file CHARACTER(LEN=6), INTENT(OUT) :: HCHEMFILETYPE! type of the input chemical file CHARACTER(LEN=28), INTENT(OUT) :: HSURFFILE ! name of the input surface file @@ -137,7 +139,7 @@ TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPPGDFILE ! physiographic data file ! ------------------------------ ! INTEGER :: IRESP ! return-code if problems eraised -INTEGER :: IPRE_REAL1 ! logical unit for file HPRE_REAL1 +INTEGER :: IPRE_REAL1 ! logical unit for file PRE_REAL1 INTEGER :: ILUOUT0 ! logical unit for listing file INTEGER :: ININAR ! number of articles initially present in a FM file LOGICAL :: GFOUND ! Return code when searching namelist @@ -162,7 +164,6 @@ HCHEMFILE=' ' HCHEMFILETYPE='MESONH' HSURFFILE=' ' HSURFFILETYPE='MESONH' -HPRE_REAL1='PRE_REAL1.nam ' CLUOUT0 ='OUTPUT_LISTING0 ' CLUOUT = CLUOUT0 ! @@ -184,8 +185,9 @@ IF (NVERB>=5) WRITE(ILUOUT0,*) 'Routine OPEN_PRC_FILES started' !* 3. OPENNING OF PRE_REAL1.nam ! ------------------------- ! -CALL OPEN_ll(UNIT=IPRE_REAL1,FILE=HPRE_REAL1,IOSTAT=IRESP,ACTION='READ', & - DELIM='QUOTE',MODE='GLOBAL',STATUS='OLD') +CALL IO_FILE_ADD2LIST(TPPRE_REAL1FILE,'PRE_REAL1.nam','NML','READ') +CALL IO_FILE_OPEN_ll(TPPRE_REAL1FILE,KRESP=IRESP) +IPRE_REAL1=TPPRE_REAL1FILE%NLU IF (IRESP.NE.0 ) THEN !callabortstop CALL PRINT_MSG(NVERB_FATAL,'GEN','OPEN_PRC_FILES','file PRE_REAL1.nam not found') diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90 index 509ad5ba2ad931ec8f20f62cad5ee89fbc599dab..40df2ddbc9e9982bfb57c9e181f6b1cc35198a09 100644 --- a/src/MNH/prep_ideal_case.f90 +++ b/src/MNH/prep_ideal_case.f90 @@ -575,6 +575,7 @@ REAL :: XHSLOP=1.2 ! if LHSLOP filtering of slopes higher REAL :: ZZS_MAX, ZZS_MAX_ll INTEGER :: IJPHEXT ! +TYPE(TFILEDATA),POINTER :: TZEXPREFILE => NULL() TYPE(TFILEDATA),POINTER :: TZFILE => NULL() TYPE(TFILEDATA),POINTER :: TZFILEDUMMY => NULL() TYPE(TFILEDATA),POINTER :: TZINIFILEPGD => NULL() @@ -682,8 +683,9 @@ NLUOUT = TLUOUT0%NLU TLUOUT => TLUOUT0 TFILE_OUTPUTLISTING => TLUOUT0 ! -CALL OPEN_ll(UNIT=NLUPRE,FILE=CEXPRE,IOSTAT=NRESP,ACTION='READ', & - DELIM='QUOTE',MODE='GLOBAL') +CALL IO_FILE_ADD2LIST(TZEXPREFILE,TRIM(CEXPRE),'NML','READ') +CALL IO_FILE_OPEN_ll(TZEXPREFILE) +NLUPRE=TZEXPREFILE%NLU ! !* 3.2 read in NLUPRE the namelist informations ! @@ -907,7 +909,7 @@ IF(.NOT. L1D) LHORELAX_SV(1:NSV)=.TRUE. ! !* 4.1 Vertical Spatial grid ! -CALL READ_VER_GRID(CEXPRE) +CALL READ_VER_GRID(TZEXPREFILE) ! !* 4.2 Initialize parallel variables and compute array's dimensions ! @@ -1722,7 +1724,7 @@ END IF ! before calling chemistry CCONF = 'START' CSTORAGE_TYPE='TT' -CALL CLOSE_ll(CEXPRE,IOSTAT=NRESP) ! Close the EXPRE file +CALL IO_FILE_CLOSE_ll(TZEXPREFILE) ! Close the EXPRE file ! IF ( LCH_INIT_FIELD ) CALL CH_INIT_FIELD_n(1, NLUOUT, NVERB) ! diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90 index 86b617a1e1d72dc17512c56cc1e6f4f4052c31bf..23e5dae77545e103ce01329992d63ebed316c856 100644 --- a/src/MNH/prep_pgd.f90 +++ b/src/MNH/prep_pgd.f90 @@ -139,7 +139,8 @@ REAL, DIMENSION(:,:),ALLOCATABLE :: ZWORK_LAT ! work array for lat and lon res REAL, DIMENSION(:,:),ALLOCATABLE :: ZWORK_LON ! work array for lat and lon reshape INTEGER :: IIMAX, IJMAX INTEGER :: NHALO_MNH -TYPE(TFILEDATA),POINTER :: TZFILE +TYPE(TFILEDATA),POINTER :: TZFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZNMLFILE => NULL() ! Namelist file ! NAMELIST/NAM_PGDFILE/CPGDFILE, NHALO NAMELIST/NAM_ZSFILTER/NZSFILTER,LHSLOP,XHSLOP @@ -151,8 +152,6 @@ CALL MPPDB_INIT() ! CPROGRAM='PGD ' ! -TZFILE => NULL() -! !* 1. Set default names and parallelized I/O ! -------------------------------------- ! @@ -171,8 +170,9 @@ LUNIT_MODEL(1)%TLUOUT => TLUOUT0 ILUOUT0=TLUOUT0%NLU ! !JUAN -CALL OPEN_ll(UNIT=ILUNAM,FILE='PRE_PGD1.nam',IOSTAT=IRESP, & - FORM='FORMATTED',ACTION='READ',STATUS='OLD',MODE='GLOBAL') +CALL IO_FILE_ADD2LIST(TZNMLFILE,'PRE_PGD1.nam','NML','READ') +CALL IO_FILE_OPEN_ll(TZNMLFILE,KRESP=IRESP) +ILUNAM = TZNMLFILE%NLU IF (IRESP.NE.0 ) THEN WRITE(YMSG,*) 'file PRE_PGD1.nam not found, IRESP=', IRESP !callabortstop @@ -200,7 +200,7 @@ CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND) IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFIO) CALL SET_CONFIO_ll() ! -CALL CLOSE_ll('PRE_PGD1.nam') +CALL IO_FILE_CLOSE_ll(TZNMLFILE) ! ! CALL SURFEX_ALLOC_LIST(1) diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90 index 19e1f6d578365185edc3e155d9b938d58506bff3..0b3eb434a93e0f87ea30a0d3bd975d472084eee4 100644 --- a/src/MNH/prep_real_case.f90 +++ b/src/MNH/prep_real_case.f90 @@ -476,7 +476,6 @@ IMPLICIT NONE !* 0.1 Declaration of local variables ! ------------------------------ ! -CHARACTER(LEN=28) :: YPRE_REAL1 ! name of the PRE_REAL1 file CHARACTER(LEN=28) :: YATMFILE ! name of the Atmospheric file CHARACTER(LEN=6) :: YATMFILETYPE! type of the Atmospheric file CHARACTER(LEN=28) :: YCHEMFILE ! name of the Chemical file @@ -521,6 +520,7 @@ LOGICAL :: LUSECHEM ! TYPE(TFILEDATA),POINTER :: TZATMFILE => NULL() TYPE(TFILEDATA),POINTER :: TZPGDFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZPRE_REAL1FILE => NULL() ! ! !* 0.3 Declaration of namelists @@ -577,10 +577,10 @@ IDX_RVT = 1 ! --------------------- CALL INITIO_ll() ! -CALL OPEN_PRC_FILES(YPRE_REAL1,YATMFILE, YATMFILETYPE & - ,YCHEMFILE,YCHEMFILETYPE & - ,YSURFFILE,YSURFFILETYPE & - ,YPGDFILE,TZPGDFILE) +CALL OPEN_PRC_FILES(TZPRE_REAL1FILE,YATMFILE, YATMFILETYPE,TZATMFILE & + ,YCHEMFILE,YCHEMFILETYPE & + ,YSURFFILE,YSURFFILETYPE & + ,YPGDFILE,TZPGDFILE) ILUOUT0 = TLUOUT0%NLU TLUOUT => TLUOUT0 ! @@ -621,7 +621,7 @@ CALL INI_CST ! !* 4.1 reading of configuration variables ! -CALL FMLOOK_ll(YPRE_REAL1,CLUOUT0,IPRE_REAL1,IRESP) +IPRE_REAL1 = TZPRE_REAL1FILE%NLU ! CALL INIT_NMLVAR CALL POSNAM(IPRE_REAL1,'NAM_REAL_CONF',GFOUND,ILUOUT0) @@ -641,7 +641,7 @@ IF (YATMFILETYPE == 'GRIBEX') THEN !* 4.1 Vertical Spatial grid ! CALL INIT_NMLVAR() -CALL READ_VER_GRID(YPRE_REAL1) +CALL READ_VER_GRID(TZPRE_REAL1FILE) ! CALL IO_READ_FIELD(TZPGDFILE,'IMAX',NIMAX) CALL IO_READ_FIELD(TZPGDFILE,'JMAX',NJMAX) @@ -723,12 +723,12 @@ ZMISC = ZTIME2 - ZTIME1 ZTIME1 = ZTIME2 ! IF (YATMFILETYPE=='MESONH') THEN - CALL READ_ALL_DATA_MESONH_CASE(YPRE_REAL1,YATMFILE,TZPGDFILE,YDAD_NAME) + CALL READ_ALL_DATA_MESONH_CASE(TZPRE_REAL1FILE,YATMFILE,TZPGDFILE,YDAD_NAME) ELSE IF (YATMFILETYPE=='GRIBEX') THEN IF(LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='GRIBEX')THEN - CALL READ_ALL_DATA_GRIB_CASE('ATM1',YPRE_REAL1,YATMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL) + CALL READ_ALL_DATA_GRIB_CASE('ATM1',TZPRE_REAL1FILE,YATMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL) ELSE - CALL READ_ALL_DATA_GRIB_CASE('ATM0',YPRE_REAL1,YATMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL) + CALL READ_ALL_DATA_GRIB_CASE('ATM0',TZPRE_REAL1FILE,YATMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL) END IF ! YDAD_NAME=' ' @@ -752,12 +752,12 @@ IF(LEN_TRIM(YCHEMFILE)>0)THEN CALL POSNAM(IPRE_REAL1,'NAM_AERO_CONF',GFOUND,ILUOUT0) IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF) IF(YCHEMFILETYPE=='GRIBEX') & - CALL READ_ALL_DATA_GRIB_CASE('CHEM',YPRE_REAL1,YCHEMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL) + CALL READ_ALL_DATA_GRIB_CASE('CHEM',TZPRE_REAL1FILE,YCHEMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL) IF (YCHEMFILETYPE=='NETCDF') & - CALL READ_CHEM_DATA_NETCDF_CASE(YPRE_REAL1,YCHEMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL) + CALL READ_CHEM_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YCHEMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL) END IF ! -CALL CLOSE_ll(YPRE_REAL1, IOSTAT=IRESP) +CALL IO_FILE_CLOSE_ll(TZPRE_REAL1FILE) ! CALL SECOND_MNH(ZTIME2) ZREAD = ZTIME2 - ZTIME1 - ZHORI diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90 index 03686b9f72209884557f5bb2da5217809d1830fe..11feb97529863f153478e63d2e45a29f3dfa3646 100644 --- a/src/MNH/prep_surfex.f90 +++ b/src/MNH/prep_surfex.f90 @@ -65,7 +65,6 @@ IMPLICIT NONE !* 0.1 Declaration of local variables ! ------------------------------ ! -CHARACTER(LEN=28) :: YPRE_REAL1 ! name of the PRE_REAL1 file CHARACTER(LEN=28) :: YATMFILE ! name of the Atmospheric file CHARACTER(LEN=6) :: YATMFILETYPE ! type of the Atmospheric file CHARACTER(LEN=28) :: YCHEMFILE ! name of the Chemical file (not used) @@ -78,7 +77,6 @@ CHARACTER(LEN=28) :: YPGDFILE ! name of the physiographic data !* file management variables and counters ! INTEGER :: ILUOUT0 ! logical unit for listing file -INTEGER :: IPRE_REAL1 ! logical unit for namelist file INTEGER :: IRESP ! return code in FM routines INTEGER :: ININAR ! number of articles initially ! present in a FM file @@ -90,6 +88,7 @@ INTEGER :: II, IJ, IGRID, ILENGTH TYPE(TFILEDATA),POINTER :: TZFILE => NULL() TYPE(TFILEDATA),POINTER :: TZATMFILE => NULL() TYPE(TFILEDATA),POINTER :: TZPGDFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZPRE_REAL1FILE => NULL() ! !------------------------------------------------------------------------------- ! @@ -109,10 +108,10 @@ CSTORAGE_TYPE='SU' ! --------------------- CALL INITIO_ll() ! -CALL OPEN_PRC_FILES(YPRE_REAL1,YATMFILE, YATMFILETYPE & - ,YCHEMFILE,YCHEMFILETYPE & - ,YSURFFILE,YSURFFILETYPE & - ,YPGDFILE,TZPGDFILE) +CALL OPEN_PRC_FILES(TZPRE_REAL1FILE,YATMFILE, YATMFILETYPE,TZATMFILE & + ,YCHEMFILE,YCHEMFILETYPE & + ,YSURFFILE,YSURFFILETYPE & + ,YPGDFILE,TZPGDFILE) ILUOUT0 = TLUOUT0%NLU ! CPGDFILE = YPGDFILE @@ -135,10 +134,8 @@ CALL INI_CST ! !* 4.1 reading of configuration variables ! -CALL FMLOOK_ll(YPRE_REAL1,CLUOUT0,IPRE_REAL1,IRESP) +CALL IO_FILE_CLOSE_ll(TZPRE_REAL1FILE) ! -CALL CLOSE_ll(YPRE_REAL1, IOSTAT=IRESP) - !* 4.2 reading of values of some configuration variables in namelist ! CALL INI_FIELD_LIST(1) diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90 index 71d7cee6a99c06d5efbe078d955490ecc04cbdee..8065c2f606d91cc0d2137f1303c0d31276229225 100644 --- a/src/MNH/read_all_data_grib_case.f90 +++ b/src/MNH/read_all_data_grib_case.f90 @@ -12,13 +12,13 @@ MODULE MODI_READ_ALL_DATA_GRIB_CASE ! ################################# INTERFACE -SUBROUTINE READ_ALL_DATA_GRIB_CASE(HFILE,HPRE_REAL1,HGRIB,TPPGDFILE, & +SUBROUTINE READ_ALL_DATA_GRIB_CASE(HFILE,TPPRE_REAL1,HGRIB,TPPGDFILE, & PTIME_HORI,KVERB,ODUMMY_REAL ) ! USE MODD_IO_ll, ONLY: TFILEDATA ! CHARACTER(LEN=4), INTENT(IN) :: HFILE ! which file ('ATM0','ATM1' or 'CHEM') -CHARACTER(LEN=28), INTENT(IN) :: HPRE_REAL1 ! name of the PRE_REAL1 file +TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1 ! PRE_REAL1 file CHARACTER(LEN=28), INTENT(IN) :: HGRIB ! name of the GRIB file TYPE(TFILEDATA), INTENT(IN) :: TPPGDFILE ! physiographic data file INTEGER, INTENT(IN) :: KVERB ! verbosity level @@ -30,7 +30,7 @@ END SUBROUTINE READ_ALL_DATA_GRIB_CASE END INTERFACE END MODULE MODI_READ_ALL_DATA_GRIB_CASE ! ########################################################################## - SUBROUTINE READ_ALL_DATA_GRIB_CASE(HFILE,HPRE_REAL1,HGRIB,TPPGDFILE, & + SUBROUTINE READ_ALL_DATA_GRIB_CASE(HFILE,TPPRE_REAL1,HGRIB,TPPGDFILE, & PTIME_HORI,KVERB,ODUMMY_REAL ) ! ########################################################################## ! @@ -182,7 +182,7 @@ IMPLICIT NONE ! ------------------------ ! CHARACTER(LEN=4), INTENT(IN) :: HFILE ! which file ('ATM0','ATM1' or 'CHEM') -CHARACTER(LEN=28), INTENT(IN) :: HPRE_REAL1 ! name of the PRE_REAL1 file +TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1! PRE_REAL1 file CHARACTER(LEN=28), INTENT(IN) :: HGRIB ! name of the GRIB file TYPE(TFILEDATA), INTENT(IN) :: TPPGDFILE ! physiographic data file INTEGER, INTENT(IN) :: KVERB ! verbosity level @@ -1402,9 +1402,9 @@ IF (ODUMMY_REAL) THEN !* 2.10.1 read 2D dummy fields ! ! close file - CALL CLOSE_ll(HPRE_REAL1,IOSTAT=IRET) + CALL IO_FILE_CLOSE_ll(TPPRE_REAL1) ! open input file - CALL CH_OPEN_INPUT(HPRE_REAL1, "DUMMY_2D", ICHANNEL, ILUOUT0, KVERB) + CALL CH_OPEN_INPUT(TPPRE_REAL1%CNAME, "DUMMY_2D", ICHANNEL, ILUOUT0, KVERB) ! ! read number of dummy 2D fields to transfer into mesonh READ(ICHANNEL, *) IMOC @@ -1518,7 +1518,7 @@ ENDIF ! IF (HFILE(1:3)=='ATM') THEN WRITE (ILUOUT0,'(A)') ' | Reading of vertical grid in progress' - CALL READ_VER_GRID(HPRE_REAL1) + CALL READ_VER_GRID(TPPRE_REAL1) END IF ! diff --git a/src/MNH/read_all_data_mesonh_case.f90 b/src/MNH/read_all_data_mesonh_case.f90 index 70c1d45337b93ba36fa4a97bbb2873779cf57971..2850e89015043d36178ee51d8c1df1bddc90239a 100644 --- a/src/MNH/read_all_data_mesonh_case.f90 +++ b/src/MNH/read_all_data_mesonh_case.f90 @@ -12,12 +12,12 @@ MODULE MODI_READ_ALL_DATA_MESONH_CASE !#################################### INTERFACE - SUBROUTINE READ_ALL_DATA_MESONH_CASE(HPRE_REAL1,HFMFILE,TPPGDFILE, & - HDAD_NAME ) + SUBROUTINE READ_ALL_DATA_MESONH_CASE(TZPRE_REAL1,HFMFILE,TPPGDFILE, & + HDAD_NAME ) ! USE MODD_IO_ll, ONLY: TFILEDATA ! -CHARACTER(LEN=28), INTENT(IN) :: HPRE_REAL1 ! name of the PRE_REAL1 file +TYPE(TFILEDATA),POINTER, INTENT(INOUT) :: TZPRE_REAL1 !PRE_REAL1 file CHARACTER(LEN=28), INTENT(IN) :: HFMFILE ! name of the Mesonh input file TYPE(TFILEDATA), INTENT(IN) :: TPPGDFILE ! physiographic data file CHARACTER(LEN=*), INTENT(INOUT) :: HDAD_NAME ! true name of the Mesonh input file @@ -28,10 +28,10 @@ END INTERFACE ! END MODULE MODI_READ_ALL_DATA_MESONH_CASE ! -! #################################################################### - SUBROUTINE READ_ALL_DATA_MESONH_CASE(HPRE_REAL1,HFMFILE,TPPGDFILE, & - HDAD_NAME ) -! #################################################################### +! ##################################################################### + SUBROUTINE READ_ALL_DATA_MESONH_CASE(TZPRE_REAL1,HFMFILE,TPPGDFILE, & + HDAD_NAME ) +! ##################################################################### ! !!**** *READ_ALL_DATA_MESONH_CASE* - reads data for the initialization of real cases. !! @@ -117,8 +117,9 @@ END MODULE MODI_READ_ALL_DATA_MESONH_CASE !* 0. DECLARATIONS ! ------------ ! -USE MODE_IO_ll +USE MODE_FM USE MODE_FMREAD +USE MODE_IO_ll USE MODE_MSG ! USE MODI_READ_GRID_TIME_MESONH_CASE ! interface modules @@ -163,7 +164,7 @@ IMPLICIT NONE !* 0.1 Declaration of arguments ! ------------------------ ! -CHARACTER(LEN=28), INTENT(IN) :: HPRE_REAL1 ! name of the PRE_REAL1 file +TYPE(TFILEDATA),POINTER, INTENT(INOUT) :: TZPRE_REAL1 !PRE_REAL1 file CHARACTER(LEN=28), INTENT(IN) :: HFMFILE ! name of the Mesonh input file TYPE(TFILEDATA), INTENT(IN) :: TPPGDFILE ! physiographic data file CHARACTER(LEN=*), INTENT(INOUT) :: HDAD_NAME ! true name of the Mesonh input file @@ -228,10 +229,9 @@ ZRES = XRES YOUTFILE=CINIFILE CINIFILE=HFMFILE ! -CALL CLOSE_ll(HPRE_REAL1, IOSTAT=IRESP) +CALL IO_FILE_CLOSE_ll(TZPRE_REAL1) CALL INIT_MNH -CALL OPEN_ll(UNIT=IPRE_REAL1,FILE=HPRE_REAL1,IOSTAT=IRESP,ACTION='READ', & - DELIM='QUOTE',MODE='GLOBAL',STATUS='OLD') +CALL IO_FILE_OPEN_ll(TZPRE_REAL1) ! CINIFILE=YOUTFILE ! @@ -267,7 +267,7 @@ IJSUP_LS = NJMAX + 2* JPHEXT !* 5. Reading of vertical grid ! ------------------------ ! -CALL READ_VER_GRID(HPRE_REAL1,XZHAT_LS,LSLEVE_LS,XLEN1_LS,XLEN2_LS) +CALL READ_VER_GRID(TZPRE_REAL1,XZHAT_LS,LSLEVE_LS,XLEN1_LS,XLEN2_LS) ! !* 6. Add a bogus vortex from observations (radar, satellite,...) ! ----------------------------------------------------------- diff --git a/src/MNH/read_chem_data_netcdf_case.f90 b/src/MNH/read_chem_data_netcdf_case.f90 index b115be48d4de07aee11b6f86f49d43b9c9b2309f..20537716fd8da854cb934a219e2a60537d3d5bfb 100644 --- a/src/MNH/read_chem_data_netcdf_case.f90 +++ b/src/MNH/read_chem_data_netcdf_case.f90 @@ -2,12 +2,12 @@ MODULE MODI_READ_CHEM_DATA_NETCDF_CASE ! ################################# INTERFACE -SUBROUTINE READ_CHEM_DATA_NETCDF_CASE(HPRE_REAL1,HFILE,TPPGDFILE, & +SUBROUTINE READ_CHEM_DATA_NETCDF_CASE(TPPRE_REAL1,HFILE,TPPGDFILE, & PTIME_HORI,KVERB,ODUMMY_REAL ) ! USE MODD_IO_ll, ONLY: TFILEDATA ! -CHARACTER(LEN=28), INTENT(IN) :: HPRE_REAL1 ! name of the PRE_REAL1 file +TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1 ! PRE_REAL1 file CHARACTER(LEN=28), INTENT(IN) :: HFILE ! name of the NETCDF file TYPE(TFILEDATA), INTENT(IN) :: TPPGDFILE ! physiographic data file REAL, INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations @@ -18,7 +18,7 @@ END SUBROUTINE READ_CHEM_DATA_NETCDF_CASE END INTERFACE END MODULE MODI_READ_CHEM_DATA_NETCDF_CASE ! #################################################################### - SUBROUTINE READ_CHEM_DATA_NETCDF_CASE(HPRE_REAL1,HFILE,TPPGDFILE, & + SUBROUTINE READ_CHEM_DATA_NETCDF_CASE(TPPRE_REAL1,HFILE,TPPGDFILE, & PTIME_HORI,KVERB,ODUMMY_REAL ) ! #################################################################### ! @@ -131,7 +131,7 @@ IMPLICIT NONE !* 0.1. Declaration of arguments ! ------------------------ ! -CHARACTER(LEN=28), INTENT(IN) :: HPRE_REAL1 ! name of the PRE_REAL1 file +TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1 ! PRE_REAL1 file CHARACTER(LEN=28), INTENT(IN) :: HFILE ! name of the NETCDF file TYPE(TFILEDATA), INTENT(IN) :: TPPGDFILE ! physiographic data file REAL, INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations @@ -735,7 +735,7 @@ CALL CLOSE_ll(YMOZ,IOSTAT=IRET) !* 4.1 Read VERTICAL GRID ! WRITE (ILUOUT0,'(A)') ' | Reading of vertical grid in progress' -CALL READ_VER_GRID(HPRE_REAL1) +CALL READ_VER_GRID(TPPRE_REAL1) ! !-------------------------------------------------------------- ! diff --git a/src/MNH/read_exspa.f90 b/src/MNH/read_exspa.f90 index 0cec68dfa8019854ed779f949f34af7b86f4e26b..eecbe662a9a69e169aa72c6b398fbf987fbe6c6e 100644 --- a/src/MNH/read_exspa.f90 +++ b/src/MNH/read_exspa.f90 @@ -105,11 +105,11 @@ END MODULE MODI_READ_EXSPA ! ------------ ! USE MODD_CONF -USE MODD_IO_ll, ONLY : TFILE_OUTPUTLISTING +USE MODD_IO_ll, ONLY : TFILEDATA,TFILE_OUTPUTLISTING USE MODD_LUNIT_n, ONLY : LUNIT_MODEL USE MODD_PARAMETERS ! -USE MODE_FM, ONLY : IO_FILE_OPEN_ll +USE MODE_FM, ONLY : IO_FILE_OPEN_ll,IO_FILE_CLOSE_ll USE MODE_IO_ll USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST USE MODE_POS @@ -150,7 +150,6 @@ LOGICAL, INTENT(OUT) :: OBAL_ONLY ! compute anelastique balance INTEGER :: IRESP ! Return codes in FM routines INTEGER :: ILUOUT ! Logical unit number for the output listing INTEGER :: ILUSPA ! Logical unit number for the EXSPA file -CHARACTER (LEN=32) :: YEXSPA ! Name of the EXSPA file LOGICAL :: GFOUND ! Return code when searching namelist ! !* prefixes in the namelists are such because of code history @@ -171,6 +170,7 @@ CHARACTER(LEN=28) :: CINIFILE ! re-declaration because of namelist CHARACTER(LEN=28) :: CINIFILEPGD ! re-declaration because of namelist CHARACTER (LEN=28) :: YSONFILE = ' ' ! Name of SON input file +TYPE(TFILEDATA),POINTER :: TZNMLFILE ! Namelist file ! !* 0.3 Namelist declarations ! @@ -197,6 +197,8 @@ NAMELIST/NAM_LUNIT2_SPA/ CINIFILE, &! In file name (model 1) ! !* 1. initialize logical unit number of the EXSPA file : ! +TZNMLFILE => NULL() +! YDOMAIN = ' ' YSPAFILE = ' ' YSPANBR = '00' @@ -212,9 +214,9 @@ TFILE_OUTPUTLISTING => LUNIT_MODEL(2)%TLUOUT ! ILUOUT=LUNIT_MODEL(2)%TLUOUT%NLU ! -YEXSPA = 'SPAWN1.nam' -CALL OPEN_ll(unit=ILUSPA,FILE=YEXSPA,iostat=IRESP,status="OLD",action='READ', & - form='FORMATTED',position="REWIND",mode='GLOBAL') +CALL IO_FILE_ADD2LIST(TZNMLFILE,'SPAWN1.nam','NML','READ') +CALL IO_FILE_OPEN_ll(TZNMLFILE) +ILUSPA = TZNMLFILE%NLU ! ! !* 2. read the EXSPA file : @@ -242,7 +244,7 @@ CALL POSNAM(ILUSPA,'NAM_CONFIO',GFOUND,ILUOUT) IF (GFOUND) READ(ILUSPA,NAM_CONFIO) ! CALL SET_CONFIO_ll() -CALL CLOSE_ll(YEXSPA) +CALL IO_FILE_CLOSE_ll(TZNMLFILE) ! ! !* 3. model 1 and SON1 FM file name (passed as arguments) diff --git a/src/MNH/read_ver_grid.f90 b/src/MNH/read_ver_grid.f90 index ec7e6bb775cb0fc1ccd1f0dce945d9e0dd2cddfb..0bb587beb87a96e72da5ed5bb746edb19fc4f04e 100644 --- a/src/MNH/read_ver_grid.f90 +++ b/src/MNH/read_ver_grid.f90 @@ -12,9 +12,11 @@ MODULE MODI_READ_VER_GRID ! ######################### INTERFACE - SUBROUTINE READ_VER_GRID(HPRE_REAL1,PZHAT,OSLEVE,PLEN1,PLEN2) + SUBROUTINE READ_VER_GRID(TPPRE_REAL1,PZHAT,OSLEVE,PLEN1,PLEN2) ! -CHARACTER(LEN=*), INTENT(IN) :: HPRE_REAL1 ! name of the namelist file +USE MODD_IO_ll, ONLY : TFILEDATA +! +TYPE(TFILEDATA),POINTER, INTENT(IN) :: TPPRE_REAL1! namelist file REAL, DIMENSION(:), OPTIONAL, INTENT(IN) :: PZHAT ! vertival grid of input fmfile LOGICAL, OPTIONAL, INTENT(IN) :: OSLEVE ! flag for SLEVE coordinate REAL, OPTIONAL, INTENT(IN) :: PLEN1 ! Decay scale for smooth topography @@ -24,9 +26,9 @@ END SUBROUTINE READ_VER_GRID END INTERFACE END MODULE MODI_READ_VER_GRID ! -! ########################################## - SUBROUTINE READ_VER_GRID(HPRE_REAL1,PZHAT,OSLEVE,PLEN1,PLEN2) -! ########################################## +! ############################################################## + SUBROUTINE READ_VER_GRID(TPPRE_REAL1,PZHAT,OSLEVE,PLEN1,PLEN2) +! ############################################################## ! !!**** *READ_VER_GRID* - reads namelist data in file PRE_REAL1 for the !! initialization of the vertical grid for real cases. @@ -67,10 +69,6 @@ END MODULE MODI_READ_VER_GRID !! The NKMAX+1 levels are read in * format after the namelists, from !! ground level to rigid top level !! -!! EXTERNAL -!! -------- -!! function FMLOOK :to retrieve a logical unit number associated with a file -!! !! IMPLICIT ARGUMENTS !! ------------------ !! @@ -107,25 +105,26 @@ END MODULE MODI_READ_VER_GRID !* 0. DECLARATIONS ! ------------ ! +USE MODD_CONF ! declaration modules +USE MODD_DIM_n, NKMAX_n=>NKMAX +USE MODD_GRID_n, LSLEVE_n=>LSLEVE, XLEN1_n=>XLEN1, XLEN2_n=>XLEN2 +USE MODD_IO_ll, ONLY : TFILEDATA +USE MODD_LUNIT +USE MODD_PARAMETERS +! USE MODE_FM USE MODE_MSG USE MODE_POS ! USE MODI_DEFAULT_SLEVE ! -USE MODD_CONF ! declaration modules -USE MODD_LUNIT -USE MODD_GRID_n, LSLEVE_n=>LSLEVE, XLEN1_n=>XLEN1, XLEN2_n=>XLEN2 -USE MODD_DIM_n, NKMAX_n=>NKMAX -USE MODD_PARAMETERS -USE MODD_CONF, ONLY : CCONF USE MODN_BLANK ! IMPLICIT NONE ! !* 0.1 Declaration of arguments ! ------------------------ -CHARACTER(LEN=*), INTENT(IN) :: HPRE_REAL1 ! name of the namelist file +TYPE(TFILEDATA),POINTER, INTENT(IN) :: TPPRE_REAL1! namelist file LOGICAL, OPTIONAL, INTENT(IN) :: OSLEVE ! flag for SLEVE coordinate REAL, OPTIONAL, INTENT(IN) :: PLEN1 ! Decay scale for smooth topography REAL, OPTIONAL, INTENT(IN) :: PLEN2 ! Decay scale for small-scale topography deviation @@ -166,7 +165,7 @@ NAMELIST/NAM_VER_GRID/ LTHINSHELL,NKMAX,YZGRID_TYPE,ZDZGRD,ZDZTOP,ZZMAX_STRGRD,Z !* 1. READING OF THE NAMELIST IN FILE HPRE_REAL1 : ! ------------------------------------------ ILUOUT0 = TLUOUT0%NLU -CALL FMLOOK_ll(HPRE_REAL1,CLUOUT0,IPRE_REAL1,IRESP) +IPRE_REAL1 = TPPRE_REAL1%NLU ! !* 1.1 Vertical grid default value ! --------------------------- diff --git a/src/MNH/reset_exseg.f90 b/src/MNH/reset_exseg.f90 index d7da3f6da6a5faae4d331686cf36f02e2a02179e..62ab1131c7eb407a3cd3b15aa5c3611152903168 100644 --- a/src/MNH/reset_exseg.f90 +++ b/src/MNH/reset_exseg.f90 @@ -64,14 +64,17 @@ END MODULE MODI_RESET_EXSEG ! !* 0. DECLARATIONS ! ------------ -USE MODE_POS -USE MODE_IO_ll +USE MODE_FM, ONLY : IO_FILE_OPEN_ll,IO_FILE_CLOSE_ll USE MODE_FMREAD +USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME +USE MODE_POS ! USE MODD_DIAG_FLAG USE MODD_CH_MNHC_n, ONLY: LUSECHEM USE MODD_CONF_n, ONLY: LUSERV USE MODD_GET_n +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_PARAM_n, ONLY: CDCONV, CRAD USE MODN_PARAM_KAFR_n USE MODN_PARAM_RAD_n @@ -85,21 +88,23 @@ CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! Name for output listing ! !* 0.2 declarations of local variables ! -CHARACTER (LEN=9) :: YNAM ! name of the namelist file INTEGER :: IRESP,ILUNAM ! return code of FMLOOK and logical unit number LOGICAL :: GFOUND ! Return code when searching namelist CHARACTER(LEN=100):: YCOMMENT ! Comment string INTEGER :: IGRID ! IGRID : grid indicator INTEGER :: ILENCH ! ILENCH : length of comment string +TYPE(TFILEDATA),POINTER :: TZNMLFILE! Namelist file ! !------------------------------------------------------------------------------- ! !* 1. OPENING NAMELIST FILE ! --------------------- ! -YNAM = 'DIAG1.nam' -CALL OPEN_ll (UNIT=ILUNAM,FILE=YNAM,IOSTAT=IRESP,STATUS="OLD",ACTION='READ', & - FORM="FORMATTED",POSITION="REWIND",MODE='GLOBAL') +TZNMLFILE => NULL() +! +CALL IO_FILE_FIND_BYNAME('DIAG1.nam',TZNMLFILE,IRESP) +CALL IO_FILE_OPEN_ll(TZNMLFILE) +ILUNAM = TZNMLFILE%NLU ! !------------------------------------------------------------------------------- ! @@ -177,6 +182,6 @@ PRINT*,' ' ! !------------------------------------------------------------------------------- ! -CALL CLOSE_ll(YNAM) +CALL IO_FILE_CLOSE_ll(TZNMLFILE) ! END SUBROUTINE RESET_EXSEG diff --git a/src/MNH/set_subdomain.f90 b/src/MNH/set_subdomain.f90 index d5212659a497cc39871587153ec9742716429663..458c0dda94d6954e7a879a10296de5202a343ddf 100644 --- a/src/MNH/set_subdomain.f90 +++ b/src/MNH/set_subdomain.f90 @@ -12,12 +12,12 @@ MODULE MODI_SET_SUBDOMAIN ! ######################### INTERFACE - SUBROUTINE SET_SUBDOMAIN(HNAMELIST,TPATMFILE,KXOR_DAD,KYOR_DAD, & + SUBROUTINE SET_SUBDOMAIN(TPNMLFILE,TPATMFILE,KXOR_DAD,KYOR_DAD, & KXOR,KYOR,KDXRATIO,KDYRATIO ) ! USE MODD_IO_ll, ONLY : TFILEDATA ! -CHARACTER(LEN=28), INTENT(IN) :: HNAMELIST ! name of the namelist file +TYPE(TFILEDATA), INTENT(IN) :: TPNMLFILE ! namelist file TYPE(TFILEDATA), INTENT(IN) :: TPATMFILE ! atmospheric MNH file INTEGER, INTENT(OUT):: KXOR_DAD ! XOR compared to Dad file, if any INTEGER, INTENT(OUT):: KYOR_DAD ! YOR compared to Dad file, if any @@ -31,7 +31,7 @@ END INTERFACE END MODULE MODI_SET_SUBDOMAIN ! ! ################################################################# - SUBROUTINE SET_SUBDOMAIN(HNAMELIST,TPATMFILE,KXOR_DAD,KYOR_DAD, & + SUBROUTINE SET_SUBDOMAIN(TPNMLFILE,TPATMFILE,KXOR_DAD,KYOR_DAD, & KXOR,KYOR,KDXRATIO,KDYRATIO ) ! ################################################################# ! @@ -112,7 +112,7 @@ IMPLICIT NONE !* 0.1 Declaration of arguments ! ------------------------ ! -CHARACTER(LEN=28), INTENT(IN) :: HNAMELIST ! name of the namelist file +TYPE(TFILEDATA), INTENT(IN) :: TPNMLFILE ! namelist file TYPE(TFILEDATA), INTENT(IN) :: TPATMFILE ! atmospheric MNH file INTEGER, INTENT(OUT):: KXOR_DAD ! XOR compared to Dad file, if any INTEGER, INTENT(OUT):: KYOR_DAD ! YOR compared to Dad file, if any @@ -181,15 +181,13 @@ NYOR=NUNDEF !* 2.2 Reading of the namelist file (or given as dummy argument) ! ---------------------------- ! -CALL OPEN_ll(UNIT=ILUNAM,FILE=HNAMELIST,IOSTAT=IRESP, & - FORM='FORMATTED',ACTION='READ',MODE='GLOBAL') +ILUNAM = TPNMLFILE%NLU CALL POSNAM(ILUNAM,'NAM_MESONH_DOM',GFOUND,ILUOUT0) IF (GFOUND) THEN NIMAX=NIMAX_n ; NJMAX=NJMAX_n READ(UNIT=ILUNAM,NML=NAM_MESONH_DOM) NIMAX_n=NIMAX ; NJMAX_n=NJMAX END IF -CALL CLOSE_ll(HNAMELIST,IOSTAT=IRESP) ! !* 2.3 Default values if none was given in namelist: domain is centered ! ---------------------------- --------------- diff --git a/src/MNH/spawn_grid2.f90 b/src/MNH/spawn_grid2.f90 index 440b0ca5ce1fc49d782ef4b98ee48e0f245c0e13..8fbfb9263c86072eb0ea8f04ad1d5106c951629d 100644 --- a/src/MNH/spawn_grid2.f90 +++ b/src/MNH/spawn_grid2.f90 @@ -496,10 +496,10 @@ PLATOR = XLATORI ! !* 3. INITIALIZATION OF ZS and ZSMT: ! ------------------------------ -CALL SPAWN_ZS(IXOR_F,IXEND_F,IYOR_F,IYEND_F,KDXRATIO,KDYRATIO,IDIMX_C,IDIMY_C,LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,CLUOUT, & - XZS1, PZS, 'ZS ',PZS_LS) -CALL SPAWN_ZS(IXOR_F,IXEND_F,IYOR_F,IYEND_F,KDXRATIO,KDYRATIO,IDIMX_C,IDIMY_C,LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,CLUOUT, & - XZSMT1,PZSMT,'ZSMT ',PZSMT_LS) +CALL SPAWN_ZS(IXOR_F,IXEND_F,IYOR_F,IYEND_F,KDXRATIO,KDYRATIO,IDIMX_C,IDIMY_C, & + LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,XZS1, PZS, 'ZS ',PZS_LS) +CALL SPAWN_ZS(IXOR_F,IXEND_F,IYOR_F,IYEND_F,KDXRATIO,KDYRATIO,IDIMX_C,IDIMY_C, & + LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,XZSMT1,PZSMT,'ZSMT ',PZSMT_LS) ! CALL MPPDB_CHECK2D(PZS,"SPAWN_GRID2:PZS",PRECISION) CALL MPPDB_CHECK2D(PZSMT,"SPAWN_GRID2:PZSMT",PRECISION) diff --git a/src/MNH/spawn_zs.f90 b/src/MNH/spawn_zs.f90 index efce8381ded06c241bf52cc3f793ec54c7217277..45794282e071a852a717bbdfdf7bf4ec84212612 100644 --- a/src/MNH/spawn_zs.f90 +++ b/src/MNH/spawn_zs.f90 @@ -13,8 +13,8 @@ MODULE MODI_SPAWN_ZS ! INTERFACE ! - SUBROUTINE SPAWN_ZS (KXOR,KXEND,KYOR,KYEND,KDXRATIO,KDYRATIO,KDIMX_C,KDIMY_C,HLBCX,HLBCY,& - HLUOUT,PZS1_F,PZS2_C,HFIELD,PZS2_LS ) + SUBROUTINE SPAWN_ZS (KXOR,KXEND,KYOR,KYEND,KDXRATIO,KDYRATIO,KDIMX_C,KDIMY_C,& + HLBCX,HLBCY,PZS1_F,PZS2_C,HFIELD,PZS2_LS ) ! INTEGER, INTENT(IN) :: KXOR,KXEND ! horizontal position (i,j) of the ORigin and END INTEGER, INTENT(IN) :: KYOR,KYEND ! of the model 2 domain, relative to model 1 @@ -23,7 +23,6 @@ INTEGER, INTENT(IN) :: KDYRATIO ! between model 2 and model 1 INTEGER, INTENT(IN) :: KDIMX_C ! dimension (X dir) of local son subdomain in father grid INTEGER, INTENT(IN) :: KDIMY_C ! dimension (Y dir) of local son subdomain in father grid CHARACTER(LEN=4),DIMENSION(2),INTENT(IN):: HLBCX, HLBCY ! X- and Y-direc LBC -CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! output-listing file REAL, DIMENSION(:,:), INTENT(IN) :: PZS1_F ! model 1 orography REAL, DIMENSION(:,:), INTENT(OUT) :: PZS2_C ! interpolated orography with iterative correction CHARACTER(LEN=6), INTENT(IN) :: HFIELD ! name of the field to nest @@ -36,10 +35,10 @@ END INTERFACE END MODULE MODI_SPAWN_ZS ! ! -! ######################################################################### - SUBROUTINE SPAWN_ZS (KXOR,KXEND,KYOR,KYEND,KDXRATIO,KDYRATIO,KDIMX_C,KDIMY_C,HLBCX,HLBCY,& - HLUOUT,PZS1_F,PZS2_C,HFIELD,PZS2_LS ) -! ######################################################################### +! ############################################################################# + SUBROUTINE SPAWN_ZS (KXOR,KXEND,KYOR,KYEND,KDXRATIO,KDYRATIO,KDIMX_C,KDIMY_C,& + HLBCX,HLBCY,PZS1_F,PZS2_C,HFIELD,PZS2_LS ) +! ############################################################################# ! !!**** *SPAWN_ZS * - subroutine to spawn zs field !! @@ -110,6 +109,7 @@ END MODULE MODI_SPAWN_ZS ! USE MODD_PARAMETERS, ONLY : JPHEXT ! Declarative modules USE MODD_CONF, ONLY : NVERB +USE MODD_LUNIT_n, ONLY: TLUOUT ! USE MODD_BIKHARDT_n ! @@ -147,7 +147,6 @@ INTEGER, INTENT(IN) :: KDYRATIO ! between model 2 and model 1 INTEGER, INTENT(IN) :: KDIMX_C ! dimension (X dir) of local son subdomain in father grid INTEGER, INTENT(IN) :: KDIMY_C ! dimension (Y dir) of local son subdomain in father grid CHARACTER(LEN=4),DIMENSION(2),INTENT(IN):: HLBCX, HLBCY ! X- and Y-direc LBC -CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! output-listing file REAL, DIMENSION(:,:), INTENT(IN) :: PZS1_F ! model 1 orography REAL, DIMENSION(:,:), INTENT(OUT) :: PZS2_C ! interpolated orography with iterative correction CHARACTER(LEN=6), INTENT(IN) :: HFIELD ! name of the field to nest @@ -240,7 +239,7 @@ CALL GOTO_MODEL(IMI) ! !* 1.2 recovers logical unit number of output listing ! -CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP) +ILUOUT = TLUOUT%NLU ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90 index 0accb8acce2d68ea76c01ea1e13f8f82dbe16167..a0e5d65c6916d6680c638be7230db5469eba2d86 100644 --- a/src/MNH/spawning.f90 +++ b/src/MNH/spawning.f90 @@ -142,14 +142,15 @@ CHARACTER (LEN=28) :: YSPAFILE = ' ' ! possible name of the output FM-file CHARACTER (LEN= 2) :: YSPANBR = '00' ! NumBeR associated to the SPAwned file INTEGER :: IINFO_ll ! return code of // routines INTEGER :: IRESP ! Return codes in FM routines -INTEGER :: ILUSPA,ILUOUT ! Logical unit number for the EXSPA file -CHARACTER (LEN=32) :: YEXSPA ! Name of the EXSPA file +INTEGER :: ILUSPA ! Logical unit number for the EXSPA file LOGICAL :: GFOUND ! Return code when searching namelist ! LOGICAL :: LSPAWN_SURF = .TRUE. ! .TRUE. : surface fields are spawned LOGICAL :: LRES REAL :: XRES -TYPE(TFILEDATA),POINTER :: TZINIFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZINIFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZEXPAFILE => NULL() +! NAMELIST/NAM_SPAWN_SURF/LSPAWN_SURF, LRES, XRES NAMELIST/NAM_CONF_SPAWN/JPHEXT, NHALO ! @@ -179,9 +180,9 @@ CALL READ_EXSPA(CINIFILE,CINIFILEPGD,& !* 2. NAM_BLANK, NAM_SPAWN_SURF and NAM_CONFZ READING AND EXSPA file CLOSURE ! ---------------------------------------- ! -YEXSPA = 'SPAWN1.nam' -CALL OPEN_ll(unit=ILUSPA,FILE=YEXSPA,iostat=IRESP,status="OLD",action='READ', & - form='FORMATTED',position="REWIND",mode='GLOBAL') +CALL IO_FILE_FIND_BYNAME('SPAWN1.nam',TZEXPAFILE,IRESP) +CALL IO_FILE_OPEN_ll(TZEXPAFILE) +ILUSPA = TZEXPAFILE%NLU ! CALL INIT_NMLVAR CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND) @@ -193,7 +194,7 @@ CALL POSNAM(ILUSPA,'NAM_CONFZ',GFOUND) IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONFZ) CALL POSNAM(ILUSPA,'NAM_CONF_SPAWN',GFOUND) IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONF_SPAWN) -CALL CLOSE_ll(YEXSPA) +CALL IO_FILE_CLOSE_ll(TZEXPAFILE) ! !------------------------------------------------------------------------------- ! @@ -225,18 +226,17 @@ CALL MPPDB_CHECK3D(XUT,"SPAWNING-after boundaries::XUT",PRECISION) !* 5. SPAWNING OF MODEL 2 FROM MODEL 1 ! -------------------------------- ! -CALL OPEN_ll(unit=ILUSPA,FILE=YEXSPA,iostat=IRESP,status="OLD",action='READ', & - form='FORMATTED',position="REWIND",mode='GLOBAL') -ILUOUT = TLUOUT%NLU +CALL IO_FILE_OPEN_ll(TZEXPAFILE) +ILUSPA = TZEXPAFILE%NLU +! CALL SET_POINTERS_TO_MODEL1() CALL GOTO_MODEL(2) -ILUOUT = TLUOUT%NLU CALL INIT_NMLVAR CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND) IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_SPAWN_SURF) CALL UPDATE_MODD_FROM_NMLVAR CALL GOTO_MODEL(1) -CALL CLOSE_ll(YEXSPA) +CALL IO_FILE_CLOSE_ll(TZEXPAFILE) ! CALL GO_TOMODEL_ll(2,IINFO_ll) ! diff --git a/src/MNH/spectre.f90 b/src/MNH/spectre.f90 index fa05c7f654ce452c5e569393ecb30c15cdfc4178..d3f31de6056cb87f3ec4fcb5198f8dce6decb31d 100644 --- a/src/MNH/spectre.f90 +++ b/src/MNH/spectre.f90 @@ -22,7 +22,7 @@ ! ! USE MODD_CONF -USE MODD_IO_ll, ONLY: NIO_VERB,NVERB_DEBUG +USE MODD_IO_ll, ONLY: NIO_VERB,NVERB_DEBUG,TFILEDATA USE MODD_LUNIT USE MODD_LUNIT_n USE MODD_TIME_n @@ -35,7 +35,7 @@ USE MODI_SPECTRE_AROME USE MODE_MSG USE MODE_POS USE MODE_IO_ll -USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_PRINT_LIST +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST,IO_FILE_PRINT_LIST USE MODE_MODELN_HANDLER USE MODE_FM !USE MODD_TYPE_DATE @@ -54,7 +54,6 @@ INTEGER :: IRESP ! return code in FM routines INTEGER :: ILUOUT0 ! Logical unit number for the output listing INTEGER :: ILUNAM ! Logical unit numbers for the namelist file ! and for output_listing file -CHARACTER (LEN=9) :: YNAM ! name of the namelist file LOGICAL :: GFOUND ! Return code when searching namelist ! INTEGER :: IINFO_ll ! return code for _ll routines @@ -63,9 +62,7 @@ REAL,DIMENSION(:,:,:),ALLOCATABLE:: ZWORK ! work array REAL,DIMENSION(:,:,:),ALLOCATABLE:: ZWORKAROME ! work array INTEGER :: NI,NJ,NK REAL ::XDELTAX,XDELTAY - - - +TYPE(TFILEDATA),POINTER :: TZNMLFILE => NULL() ! NAMELIST/NAM_SPECTRE/ LSPECTRE_U,LSPECTRE_V,LSPECTRE_W,LSPECTRE_TH,LSPECTRE_RV,& LSPECTRE_LSU,LSPECTRE_LSV,LSPECTRE_LSW,LSPECTRE_LSTH,LSPECTRE_LSRV,LSMOOTH @@ -121,9 +118,9 @@ PRINT*, '*********************************************************************' PRINT*, '*********************************************************************' PRINT*, ' ' ! -YNAM = 'SPEC1.nam' -CALL OPEN_ll (UNIT=ILUNAM,FILE=YNAM,IOSTAT=IRESP,STATUS="OLD",ACTION='READ', & - FORM="FORMATTED",POSITION="REWIND",MODE='GLOBAL') +CALL IO_FILE_ADD2LIST(TZNMLFILE,'SPEC1.nam','NML','READ') +CALL IO_FILE_OPEN_ll(TZNMLFILE) +ILUNAM = TZNMLFILE%NLU ! PRINT*, 'READ THE SPEC1.NAM FILE' ! @@ -165,7 +162,7 @@ IF (GFOUND) THEN END IF CALL SET_CONFIO_ll() ! -CALL CLOSE_ll(YNAM) +CALL IO_FILE_CLOSE_ll(TZNMLFILE) ! CINIFILE = YINIFILE(1) ! diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90 index ed97ea0ae9d854a889a11a402a9da8b5d74552ed..d0356b05f209a6991cb36eaf0961acd6a57bb6fb 100644 --- a/src/MNH/write_diachro.f90 +++ b/src/MNH/write_diachro.f90 @@ -117,7 +117,7 @@ CHARACTER(LEN=20) :: YCOMMENT CHARACTER(LEN=3) :: YJ INTEGER :: ILENG, ILENTITRE, ILENUNITE, ILENCOMMENT, IRESP INTEGER :: ILUOUTDIA -INTEGER :: II, IJ, IK, IT, IN, IP, INUM, J, JJ +INTEGER :: II, IJ, IK, IT, IN, IP, J, JJ INTEGER :: INTRAJT, IKTRAJX, IKTRAJY, IKTRAJZ INTEGER :: ITTRAJX, ITTRAJY, ITTRAJZ INTEGER :: INTRAJX, INTRAJY, INTRAJZ @@ -221,7 +221,6 @@ IF (NVERB>=5) THEN WRITE(ILUOUTDIA,*)' WRITE_DIACHRO: ',TRIM(HLUOUTDIA),' IRESP=',IRESP ENDIF ! -CALL FMLOOK_ll(TRIM(TPDIAFILE%CNAME)//'.lfi',HLUOUTDIA,INUM,IRESP) IF (NVERB>=5) THEN WRITE(ILUOUTDIA,*)' WRITE_DIACHRO: ',TRIM(TPDIAFILE%CNAME)//'.lfi',' IRESP=',IRESP ENDIF diff --git a/src/MNH/xy_to_latlon.f90 b/src/MNH/xy_to_latlon.f90 index 0437b2d63cf4ac3ebb223090617fcd9e063361eb..5803210fff780ebd3e31609d4b44c2a1d5aaf0f1 100644 --- a/src/MNH/xy_to_latlon.f90 +++ b/src/MNH/xy_to_latlon.f90 @@ -104,6 +104,7 @@ REAL :: ZYHAT ! output conformal coodinate y REAL :: ZLAT ! output latitude REAL :: ZLON ! output longitude TYPE(TFILEDATA),POINTER :: TZINIFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZNMLFILE => NULL() ! !* 0.3 Declaration of namelists ! ------------------------ @@ -126,12 +127,13 @@ CALL INI_CST ! ------------------------ CALL INITIO_ll() ! -CALL OPEN_ll(UNIT=INAM,FILE='XY2LATLON1.nam',IOSTAT=IRESP,ACTION='READ', & - DELIM='QUOTE',MODE='GLOBAL') +CALL IO_FILE_ADD2LIST(TZNMLFILE,'XY2LATLON1.nam','NML','READ') +CALL IO_FILE_OPEN_ll(TZNMLFILE) +INAM=TZNMLFILE%NLU READ(INAM,NAM_INIFILE) READ(INAM,NAM_CONFIO) CALL SET_CONFIO_ll() -CALL CLOSE_ll('XY2LATLON1.nam',IOSTAT=IRESP) +CALL IO_FILE_CLOSE_ll(TZNMLFILE) ! !* 1. Opening of MESONH file ! ---------------------- diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90 index 41a9f76f0144f34992db0349851ffd247124ea5b..1252f83bd57d238f7877056ed1c75e6f3d128cc0 100644 --- a/src/MNH/zoom_pgd.f90 +++ b/src/MNH/zoom_pgd.f90 @@ -99,20 +99,19 @@ CHARACTER(LEN=2) :: YZOOMNBR CHARACTER(LEN=28) :: YMY_NAME,YDAD_NAME CHARACTER(LEN=28) :: YPGDFILE CHARACTER(LEN=2) :: YSTORAGE_TYPE -CHARACTER(LEN=28) :: YNAMELIST LOGICAL :: GFOUND INTEGER :: IXOR_DAD,IYOR_DAD ! compared to Dad file, if any INTEGER :: IXOR,IYOR ! given or computed INTEGER :: IDXRATIO,IDYRATIO -TYPE(TFILEDATA),POINTER :: TZZOOMFILE,TZPGDFILE +TYPE(TFILEDATA),POINTER :: TZNMLFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZPGDFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZZOOMFILE => NULL() ! REAL, DIMENSION(:,:), ALLOCATABLE :: ZZS1,ZZSMT1,ZZS2,ZZSMT2 ! NAMELIST/NAM_PGDFILE/CPGDFILE,YZOOMFILE,YZOOMNBR !------------------------------------------------------------------------------ ! -TZZOOMFILE => NULL() -! CALL GOTO_MODEL(1) CALL VERSION CPROGRAM='ZOOMPG' @@ -132,10 +131,9 @@ CALL IO_FILE_OPEN_ll(TLUOUT0) TFILE_OUTPUTLISTING => TLUOUT0 ILUOUT0=TLUOUT0%NLU ! -YNAMELIST = 'PRE_ZOOM1.nam' ! name of the namelist file - -CALL OPEN_ll(UNIT=ILUNAM,FILE=YNAMELIST,IOSTAT=IRESP, & - FORM='FORMATTED',ACTION='READ',MODE='GLOBAL') +CALL IO_FILE_ADD2LIST(TZNMLFILE,'PRE_ZOOM1.nam','NML','READ') +CALL IO_FILE_OPEN_ll(TZNMLFILE) +ILUNAM = TZNMLFILE%NLU ! CPGDFILE = 'PGDFILE' ! name of the input file YZOOMFILE = '' @@ -146,8 +144,6 @@ CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND,ILUOUT0) IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFIO) CALL SET_CONFIO_ll() ! -CALL CLOSE_ll(YNAMELIST,IOSTAT=IRESP) -! !------------------------------------------------------------------------------ ! !* 2. ZOOM OF PGD DOMAIN @@ -173,7 +169,10 @@ CALL IO_READ_FIELD(TZPGDFILE,'ZSMT',ZZSMT1) !* 2.3 Define subdomain ! ---------------- ! -CALL SET_SUBDOMAIN(YNAMELIST,TZPGDFILE,IXOR_DAD,IYOR_DAD,IXOR,IYOR,IDXRATIO,IDYRATIO) +CALL SET_SUBDOMAIN(TZNMLFILE,TZPGDFILE,IXOR_DAD,IYOR_DAD,IXOR,IYOR,IDXRATIO,IDYRATIO) +! +CALL IO_FILE_CLOSE_ll(TZNMLFILE) +! ! NIMAX, NJMAX: size of output domain ! CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT)