From aede1160bdb5158e9facd5cab28cf61d8aab136d Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Fri, 18 Aug 2017 15:37:54 +0200 Subject: [PATCH] Philippe 18/08/2017: IO: use IO_READ_FIELD for several fields, IO_FILE_OPEN and IO_FILE_CLOSE for several files --- src/LIB/SURCOUCHE/src/mode_field.f90 | 24 ++ src/MNH/get_nb_procio_read_mnh.f90 | 6 +- src/MNH/ini_elecn.f90 | 46 +-- src/MNH/ini_lb.f90 | 80 ++-- src/MNH/ini_micron.f90 | 22 +- src/MNH/ini_modeln.f90 | 18 +- src/MNH/ini_radiations.f90 | 107 ++---- src/MNH/ini_segn.f90 | 9 +- src/MNH/ini_size_spawn.f90 | 157 +++----- src/MNH/init_mnh.f90 | 2 +- src/MNH/latlon_to_xy.f90 | 15 +- src/MNH/mnh2lpdm_ini.f90 | 41 +- src/MNH/mnhclose_aux_io_surf.f90 | 4 +- src/MNH/mnhend_io_surfn.f90 | 3 +- src/MNH/mnhinit_io_surfn.f90 | 12 +- src/MNH/mnhopen_aux_io_surf.f90 | 27 +- src/MNH/mnhread_zs_dummyn.f90 | 65 ++-- src/MNH/modd_io_surf_mnh.f90 | 5 +- src/MNH/modd_lunitn.f90 | 3 + src/MNH/open_prc_files.f90 | 44 ++- src/MNH/prep_ideal_case.f90 | 32 +- src/MNH/prep_nest_pgd.f90 | 26 +- src/MNH/prep_real_case.f90 | 21 +- src/MNH/prep_surf_mnh.f90 | 4 +- src/MNH/prep_surfex.f90 | 7 +- src/MNH/read_all_data_grib_case.f90 | 46 +-- src/MNH/read_all_data_mesonh_case.f90 | 41 +- src/MNH/read_dummy_gr_fieldn.f90 | 121 +++--- src/MNH/read_field.f90 | 116 +++--- src/MNH/read_grid_time_mesonh_case.f90 | 21 +- src/MNH/read_hgrid.f90 | 86 ++--- src/MNH/read_hgridn.f90 | 101 ++--- src/MNH/read_precip_field.f90 | 211 ++++++----- src/MNH/read_surf_mnh.f90 | 498 +++++++++++++++++-------- src/MNH/spawn_model2.f90 | 19 +- src/MNH/spawn_surf2_rain.f90 | 74 ++-- src/MNH/spawning.f90 | 2 +- src/MNH/write_surf_mnh.f90 | 5 +- src/MNH/xy_to_latlon.f90 | 14 +- src/MNH/zoom_pgd.f90 | 9 +- src/MNH/zsmt_pgd.f90 | 11 +- 41 files changed, 1142 insertions(+), 1013 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90 index 6f96aad63..97a59426a 100644 --- a/src/LIB/SURCOUCHE/src/mode_field.f90 +++ b/src/LIB/SURCOUCHE/src/mode_field.f90 @@ -168,6 +168,30 @@ TFIELDLIST(IDX)%NDIMS = 0 IDX = IDX+1 ! IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'VERSION' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'SURFEX version (without BUG)' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = '--' +TFIELDLIST(IDX)%CCOMMENT = '' +TFIELDLIST(IDX)%NGRID = 0 +TFIELDLIST(IDX)%NTYPE = TYPEINT +TFIELDLIST(IDX)%NDIMS = 0 +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() +TFIELDLIST(IDX)%CMNHNAME = 'BUG' +TFIELDLIST(IDX)%CSTDNAME = '' +TFIELDLIST(IDX)%CLONGNAME = 'SURFEX bugfix number' +TFIELDLIST(IDX)%CUNITS = '' +TFIELDLIST(IDX)%CDIR = '' +TFIELDLIST(IDX)%CCOMMENT = '' +TFIELDLIST(IDX)%NGRID = 0 +TFIELDLIST(IDX)%NTYPE = TYPEINT +TFIELDLIST(IDX)%NDIMS = 0 +IDX = IDX+1 +! +IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST() TFIELDLIST(IDX)%CMNHNAME = 'PROGRAM' TFIELDLIST(IDX)%CSTDNAME = '' TFIELDLIST(IDX)%CLONGNAME = 'MesoNH family: used program' diff --git a/src/MNH/get_nb_procio_read_mnh.f90 b/src/MNH/get_nb_procio_read_mnh.f90 index 0d5cec1c4..ea9fa17af 100644 --- a/src/MNH/get_nb_procio_read_mnh.f90 +++ b/src/MNH/get_nb_procio_read_mnh.f90 @@ -37,7 +37,7 @@ !------------------------------------------------------------------------------- ! USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_ll -USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE +USE MODD_IO_SURF_MNH, ONLY : COUT, TPINFILE ! IMPLICIT NONE ! @@ -61,7 +61,7 @@ INTEGER :: ILUPRI !* 1. get the number of processes used for IO ! IRESP = 0 -YFNLFI=TRIM(ADJUSTL(CFILE))//'.lfi' +YFNLFI=TRIM(ADJUSTL(TPINFILE%CNAME))//'.lfi' ! TZFD=>GETFD(YFNLFI) IF (ASSOCIATED(TZFD)) THEN @@ -74,7 +74,7 @@ END IF IF (IRESP.NE.0) THEN CALL FMLOOK_ll(COUT,COUT,ILUPRI,IRESP) WRITE (ILUPRI,*) ' exit from GET_NB_PROCIO_READ_MNH with RESP:',IRESP - WRITE (ILUPRI,*) ' | CFILE = ',CFILE + WRITE (ILUPRI,*) ' | TPINFILE%CNAME = ',TRIM(ADJUSTL(TPINFILE%CNAME)) END IF KRESP = IRESP ! diff --git a/src/MNH/ini_elecn.f90 b/src/MNH/ini_elecn.f90 index eaddafac3..f9f3e40c5 100644 --- a/src/MNH/ini_elecn.f90 +++ b/src/MNH/ini_elecn.f90 @@ -12,17 +12,19 @@ ! ###################### ! INTERFACE - SUBROUTINE INI_ELEC_n (KLUOUT, HELEC, HCLOUD, HLUOUT, HINIFILE, & - PTSTEP, PZZ, & - PDXX, PDYY, PDZZ, PDZX, PDZY ) + SUBROUTINE INI_ELEC_n (KLUOUT, HELEC, HCLOUD, HLUOUT, TPINIFILE, & + PTSTEP, PZZ, & + PDXX, PDYY, PDZZ, PDZX, PDZY ) +! +USE MODD_IO_ll, ONLY : TFILEDATA ! INTEGER, INTENT(IN) :: KLUOUT ! Logical unit number for prints CHARACTER (LEN=4), INTENT(IN) :: HELEC ! atmospheric electricity scheme CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! microphysics scheme CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing ! of nested models -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! name of the initial file -REAL, INTENT(IN) :: PTSTEP ! Time STEP +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE! Initial file +REAL, INTENT(IN) :: PTSTEP ! Time STEP ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! height z REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! metric coefficient dxx @@ -35,11 +37,11 @@ END SUBROUTINE INI_ELEC_n END INTERFACE END MODULE MODI_INI_ELEC_n ! -! ################################################################ - SUBROUTINE INI_ELEC_n(KLUOUT, HELEC, HCLOUD, HLUOUT, HINIFILE, & - PTSTEP, PZZ, & - PDXX, PDYY, PDZZ, PDZX, PDZY ) -! ################################################################ +! ################################################################# + SUBROUTINE INI_ELEC_n(KLUOUT, HELEC, HCLOUD, HLUOUT, TPINIFILE, & + PTSTEP, PZZ, & + PDXX, PDYY, PDZZ, PDZX, PDZY ) +! ################################################################# ! !! PURPOSE !! ------- @@ -91,6 +93,7 @@ USE MODD_DIM_n, ONLY : NIMAX_ll, NJMAX_ll USE MODD_ELEC_DESCR USE MODD_ELEC_n, ONLY : XRHOM_E, XAF_E, XCF_E, XBFY_E, XBFB_E, XBF_SXP2_YP1_Z_E USE MODD_CONF_n, ONLY : NRR +USE MODD_IO_ll, ONLY : TFILEDATA USE MODD_PARAMETERS, ONLY : JPVEXT, JPHEXT USE MODD_CST USE MODD_CONF, ONLY : CEQNSYS,CCONF,CPROGRAM @@ -126,13 +129,13 @@ IMPLICIT NONE ! !* 0.1 declarations of dummy arguments ! -INTEGER, INTENT(IN) :: KLUOUT ! Logical unit number for prints -CHARACTER (LEN=4), INTENT(IN) :: HELEC ! atmospheric electricity scheme -CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! microphysics scheme -CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing - ! of nested models -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! name of the initial file -REAL, INTENT(IN) :: PTSTEP ! Time STEP +INTEGER, INTENT(IN) :: KLUOUT ! Logical unit number for prints +CHARACTER (LEN=4), INTENT(IN) :: HELEC ! atmospheric electricity scheme +CHARACTER (LEN=4), INTENT(IN) :: HCLOUD ! microphysics scheme +CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing + ! of nested models +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE! Initial file +REAL, INTENT(IN) :: PTSTEP ! Time STEP ! REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ ! height z REAL, DIMENSION(:,:,:), INTENT(IN) :: PDXX ! metric coefficient dxx @@ -141,7 +144,6 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZZ ! metric coefficient dzz REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZX ! metric coefficient dzx REAL, DIMENSION(:,:,:), INTENT(IN) :: PDZY ! metric coefficient dzy ! -! !* 0.2 declarations of local variables ! INTEGER :: IRESP ! Return code of FM routines @@ -228,9 +230,9 @@ IF(SIZE(XINPRR) == 0) RETURN !* 2. Initialize MODD_PRECIP_n variables ! ----------------------------------- ! -CALL READ_PRECIP_FIELD (HINIFILE, HLUOUT, CPROGRAM, CCONF, & - CGETINPRC,CGETINPRR,CGETINPRS,CGETINPRG,CGETINPRH, & - XINPRC,XACPRC,XINDEP,XACDEP,XINPRR,XINPRR3D,XEVAP3D, & +CALL READ_PRECIP_FIELD (TPINIFILE, HLUOUT, CPROGRAM, CCONF, & + CGETINPRC,CGETINPRR,CGETINPRS,CGETINPRG,CGETINPRH, & + XINPRC,XACPRC,XINDEP,XACDEP,XINPRR,XINPRR3D,XEVAP3D, & XACPRR, XINPRS, XACPRS, XINPRG, XACPRG, XINPRH, XACPRH) ! ! @@ -270,7 +272,7 @@ IF (HELEC(1:3) == 'ELE') THEN ! ZRHO00 = XP00 / (XRD * XTHVREFZ(IKB)) ! - CALL INI_PARAM_ELEC (HINIFILE, HLUOUT, CGETSVT, ZRHO00, NRR, IINTVL, & + CALL INI_PARAM_ELEC (TPINIFILE%CNAME, HLUOUT, CGETSVT, ZRHO00, NRR, IINTVL, & ZFDINFTY, IIU, IJU, IKU) ! ! diff --git a/src/MNH/ini_lb.f90 b/src/MNH/ini_lb.f90 index fe105644b..fd2dc11d6 100644 --- a/src/MNH/ini_lb.f90 +++ b/src/MNH/ini_lb.f90 @@ -338,9 +338,7 @@ CASE('READ') STOP ENDIF ELSE - YRECFM = 'HORELAX_TKE' - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,GHORELAX_TKE,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'HORELAX_TKE',GHORELAX_TKE) IF (GHORELAX_TKE) THEN IRIMX=(KSIZELBXTKE_ll-2*JPHEXT)/2 IRIMY=(KSIZELBYTKE_ll-2*JPHEXT)/2 @@ -353,18 +351,12 @@ CASE('READ') IL3DY=2*JPHEXT ! 2 ENDIF ! - YRECFM='LBXTKEM' - IF (KSIZELBXTKE_ll /= 0) THEN - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXTKEM,IRIMX,IL3DX,IGRID,& - & ILENCH,YCOMMENT,IRESP) + IF (KSIZELBXTKE_ll /= 0) THEN + CALL IO_READ_FIELD_LB(TPINIFILE,'LBXTKEM',IL3DX,IRIMX,PLBXTKEM) END IF ! - YRECFM='LBYTKEM' IF (KSIZELBYTKE_ll /= 0) THEN - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYTKEM,IRIMY,IL3DY,IGRID,& - & ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD_LB(TPINIFILE,'LBYTKEM',IL3DY,IRIMY,PLBYTKEM) END IF ENDIF CASE('INIT') @@ -494,9 +486,17 @@ END IF ! IF (KSV > 0) THEN IF (ANY(HGETSVM(1:KSV)=='READ')) THEN - YRECFM = 'HORELAX_SV' - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,GHORELAX_SV,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'HORELAX_SV' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: HORELAX_SV' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%CLBTYPE = 'NONE' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPELOG + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,GHORELAX_SV) IF ( GHORELAX_SV ) THEN IRIMX=(KSIZELBXSV_ll-2*JPHEXT)/2 IRIMY=(KSIZELBYSV_ll-2*JPHEXT)/2 @@ -667,12 +667,20 @@ IF (CCLOUD=='LIMA' ) THEN DO JSV = NSV_LIMA_CCN_FREE,NSV_LIMA_CCN_FREE+NMOD_CCN-1 SELECT CASE(HGETSVM(JSV)) CASE ('READ') + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1) IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM = 'LBX_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE) - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP) IF ( SIZE(PLBXSVM,1) /= 0 ) THEN IF (IRESP/=0) THEN IF (PRESENT(PLBXSVMM)) THEN @@ -690,10 +698,11 @@ IF (CCLOUD=='LIMA' ) THEN END IF ! IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM = 'LBY_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE) - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CLIMA_WARM_NAMES(3))//INDICE) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP) IF ( SIZE(PLBYSVM,1) /= 0 ) THEN IF (IRESP/=0) THEN IF (PRESENT(PLBYSVMM)) THEN @@ -717,12 +726,20 @@ IF (CCLOUD=='LIMA' ) THEN DO JSV = NSV_LIMA_IFN_FREE,NSV_LIMA_IFN_FREE+NMOD_IFN-1 SELECT CASE(HGETSVM(JSV)) CASE ('READ') + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1) IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM = 'LBX_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE) - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBX' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV + CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP) IF ( SIZE(PLBXSVM,1) /= 0 ) THEN IF (IRESP/=0) THEN IF (PRESENT(PLBXSVMM)) THEN @@ -740,10 +757,11 @@ IF (CCLOUD=='LIMA' ) THEN END IF ! IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM = 'LBY_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE) - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CLIMA_COLD_NAMES(2))//INDICE) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CLBTYPE = 'LBY' + WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV + CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP) IF ( SIZE(PLBYSVM,1) /= 0 ) THEN IF (IRESP/=0) THEN IF (PRESENT(PLBYSVMM)) THEN diff --git a/src/MNH/ini_micron.f90 b/src/MNH/ini_micron.f90 index 17154b38c..ae6dfbb6c 100644 --- a/src/MNH/ini_micron.f90 +++ b/src/MNH/ini_micron.f90 @@ -13,18 +13,21 @@ ! ######################## ! INTERFACE - SUBROUTINE INI_MICRO_n ( KLUOUT ) + SUBROUTINE INI_MICRO_n ( TPINIFILE,KLUOUT ) ! -INTEGER, INTENT(IN) :: KLUOUT ! Logical unit number for prints +USE MODD_IO_ll, ONLY : TFILEDATA +! +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file +INTEGER, INTENT(IN) :: KLUOUT ! Logical unit number for prints ! END SUBROUTINE INI_MICRO_n ! END INTERFACE ! END MODULE MODI_INI_MICRO_n -! ################################## - SUBROUTINE INI_MICRO_n ( KLUOUT ) -! ################################## +! ############################################ + SUBROUTINE INI_MICRO_n ( TPINIFILE,KLUOUT ) +! ############################################ ! ! !!**** *INI_MICRO_n* allocates and fills MODD_PRECIP_n variables @@ -60,7 +63,8 @@ END MODULE MODI_INI_MICRO_n ! ! USE MODD_CONF, ONLY : CCONF,CPROGRAM -USE MODD_LUNIT_n, ONLY : CINIFILE,CLUOUT +USE MODD_IO_ll, ONLY : TFILEDATA +USE MODD_LUNIT_n, ONLY : CLUOUT USE MODD_GET_n, ONLY : CGETRCT,CGETRRT, CGETRST, CGETRGT, CGETRHT, CGETCLOUD USE MODD_DIM_n, ONLY : NIMAX_ll, NJMAX_ll USE MODD_PARAMETERS, ONLY : JPVEXT, JPHEXT @@ -111,8 +115,8 @@ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! -INTEGER, INTENT(IN) :: KLUOUT ! Logical unit number for prints -! +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file +INTEGER, INTENT(IN) :: KLUOUT ! Logical unit number for prints ! ! 0.2 declaration of local variables ! @@ -238,7 +242,7 @@ END IF !* 3. INITIALIZE MODD_PRECIP_n variables ! ---------------------------------- ! -CALL READ_PRECIP_FIELD(CINIFILE,CLUOUT,CPROGRAM,CCONF, & +CALL READ_PRECIP_FIELD(TPINIFILE,CLUOUT,CPROGRAM,CCONF, & CGETRCT,CGETRRT,CGETRST,CGETRGT,CGETRHT, & XINPRC,XACPRC,XINDEP,XACDEP,XINPRR,XINPRR3D,XEVAP3D,& XACPRR,XINPRS,XACPRS,XINPRG,XACPRG, XINPRH,XACPRH ) diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index dddf34dde..df4fff5cc 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -1686,7 +1686,7 @@ END IF ! ---------------------------- ! IF (CELEC == 'NONE') THEN - CALL INI_MICRO_n(ILUOUT) + CALL INI_MICRO_n(TPINIFILE,ILUOUT) ! !------------------------------------------------------------------------------- ! @@ -1694,9 +1694,9 @@ IF (CELEC == 'NONE') THEN ! -------------------------------------- ! ELSE - CALL INI_ELEC_n(ILUOUT, CELEC, CCLOUD, HLUOUT, CINIFILE, & - XTSTEP, XZZ, & - XDXX, XDYY, XDZZ, XDZX, XDZY ) + CALL INI_ELEC_n(ILUOUT, CELEC, CCLOUD, HLUOUT, TPINIFILE, & + XTSTEP, XZZ, & + XDXX, XDYY, XDZZ, XDZX, XDZY ) ! WRITE (UNIT=ILUOUT,& FMT='(/,"ELECTRIC VARIABLES ARE BETWEEN INDEX",I2," AND ",I2)')& @@ -1883,7 +1883,7 @@ IF (CRAD /= 'NONE') THEN ELSE GINIRAD =.FALSE. END IF - CALL INI_RADIATIONS(TPINIFILE%CNAME,HLUOUT,GINIRAD,TDTCUR,TDTEXP,XZZ, & + CALL INI_RADIATIONS(TPINIFILE,HLUOUT,GINIRAD,TDTCUR,TDTEXP,XZZ, & XDXX, XDYY, & XSINDEL,XCOSDEL,XTSIDER,XCORSOL, & XSLOPANG,XSLOPAZI, & @@ -1949,7 +1949,8 @@ END IF IF (CSURF=='EXTE' .AND. (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG ')) THEN ! ouverture du fichier PGD IF ( LEN_TRIM(CINIFILEPGD) > 0 ) THEN - CALL FMOPEN_ll(CINIFILEPGD,'READ',HLUOUT,0,2,NVERB,ININAR,IRESP,OPARALLELIO=.FALSE.) + CALL IO_FILE_ADD2LIST(TINIFILEPGD,TRIM(CINIFILEPGD),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB) + CALL IO_FILE_OPEN_ll(TINIFILEPGD,HLUOUT,IRESP,OPARALLELIO=.FALSE.) IF (IRESP/=0) THEN WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR TO OPEN THE FILE CINIFILEPGD=",CINIFILEPGD WRITE(ILUOUT,FMT=*) "CHECK YOUR NAMELIST NAM_LUNITn" @@ -1988,7 +1989,8 @@ ELSE END IF IF (CSURF=='EXTE' .AND. (CPROGRAM=='SPAWN ')) THEN ! ouverture du fichier PGD - CALL FMOPEN_ll(CINIFILEPGD,'READ',HLUOUT,0,2,NVERB,ININAR,IRESP,OPARALLELIO=.FALSE.) + CALL IO_FILE_ADD2LIST(TINIFILEPGD,TRIM(CINIFILEPGD),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB) + CALL IO_FILE_OPEN_ll(TINIFILEPGD,HLUOUT,IRESP,OPARALLELIO=.FALSE.) IF (IRESP/=0) THEN WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR TO OPEN THE FILE CINIFILEPGD=",CINIFILEPGD WRITE(ILUOUT,FMT=*) "CHECK YOUR NAMELIST NAM_LUNIT2_SPA" @@ -2020,7 +2022,7 @@ END IF !* 17.3 Mesonh fields ! ------------- ! -IF (CPROGRAM/='REAL ') CALL MNHREAD_ZS_DUMMY_n(CINIFILEPGD) +IF (CPROGRAM/='REAL ') CALL MNHREAD_ZS_DUMMY_n(TINIFILEPGD) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/ini_radiations.f90 b/src/MNH/ini_radiations.f90 index 27926cdf6..8c7253c77 100644 --- a/src/MNH/ini_radiations.f90 +++ b/src/MNH/ini_radiations.f90 @@ -13,18 +13,19 @@ ! INTERFACE ! - SUBROUTINE INI_RADIATIONS(HINIFILE,HLUOUT,OINIRAD,TPDTCUR,TPDTEXP,PZZ, & - PDXX,PDYY, & + SUBROUTINE INI_RADIATIONS(TPINIFILE,HLUOUT,OINIRAD,TPDTCUR,TPDTEXP,& + PZZ,PDXX,PDYY, & PSINDEL,PCOSDEL,PTSIDER,PCORSOL,PSLOPANG,PSLOPAZI, & PDTHRAD,PDIRFLASWD,PSCAFLASWD, & PFLALWD,PDIRSRFSWD,KCLEARCOL_TM1, & PZENITH, PAZIM, TPDTRAD_FULL,TPDTRAD_CLONLY,TPINITHALO2D_ll, & - PRADEFF,PSWU,PSWD,PLWU,PLWD,PDTHRADSW,PDTHRADLW ) + PRADEFF,PSWU,PSWD,PLWU,PLWD,PDTHRADSW,PDTHRADLW ) ! USE MODD_ARGSLIST_ll, ONLY : LIST_ll +USE MODD_IO_ll, ONLY : TFILEDATA USE MODD_TYPE_DATE ! -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! Name of the initial file +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing ! of nested models LOGICAL, INTENT(IN) :: OINIRAD ! switch to initialize or read @@ -71,15 +72,15 @@ END INTERFACE END MODULE MODI_INI_RADIATIONS ! ! -! ####################################################################### - SUBROUTINE INI_RADIATIONS(HINIFILE,HLUOUT,OINIRAD,TPDTCUR,TPDTEXP,PZZ, & - PDXX,PDYY, & - PSINDEL,PCOSDEL,PTSIDER,PCORSOL,PSLOPANG,PSLOPAZI, & - PDTHRAD,PDIRFLASWD,PSCAFLASWD, & - PFLALWD,PDIRSRFSWD,KCLEARCOL_TM1, & - PZENITH,PAZIM, TPDTRAD_FULL,TPDTRAD_CLONLY,TPINITHALO2D_ll,& - PRADEFF,PSWU,PSWD,PLWU,PLWD,PDTHRADSW,PDTHRADLW ) -! ####################################################################### +! #################################################################### + SUBROUTINE INI_RADIATIONS(TPINIFILE,HLUOUT,OINIRAD,TPDTCUR,TPDTEXP,& + PZZ,PDXX,PDYY, & + PSINDEL,PCOSDEL,PTSIDER,PCORSOL,PSLOPANG,PSLOPAZI, & + PDTHRAD,PDIRFLASWD,PSCAFLASWD, & + PFLALWD,PDIRSRFSWD,KCLEARCOL_TM1, & + PZENITH, PAZIM, TPDTRAD_FULL,TPDTRAD_CLONLY,TPINITHALO2D_ll, & + PRADEFF,PSWU,PSWD,PLWU,PLWD,PDTHRADSW,PDTHRADLW ) +! #################################################################### ! !!**** *INI_RADIATION_TIME * - initialisation for radiation scheme in the MesoNH framework !! @@ -119,23 +120,24 @@ END MODULE MODI_INI_RADIATIONS !MESO-NH modules ! USE MODD_ARGSLIST_ll, ONLY : LIST_ll -USE MODD_TYPE_DATE USE MODD_CST, ONLY : XPI USE MODD_CONF, ONLY : LFLAT, L2D -USE MODD_PARAMETERS, ONLY : JPVEXT +USE MODD_IO_ll, ONLY : TFILEDATA USE MODD_LES -USE MODD_PARAM_RAD_n, ONLY: LFIX_DAT +USE MODD_PARAMETERS, ONLY : JPVEXT +USE MODD_PARAM_RAD_n, ONLY : LFIX_DAT +USE MODD_TYPE_DATE ! USE MODE_FMREAD -USE MODI_SHUMAN USE MODE_ll ! +USE MODI_SHUMAN ! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! Name of the initial file +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing ! of nested models LOGICAL, INTENT(IN) :: OINIRAD ! switch to initialize or read @@ -176,10 +178,6 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRADEFF ! effective radius ! !* 0.2 declarations of local variables ! -INTEGER :: IGRID,ILENCH,IRESP ! File -CHARACTER (LEN=16) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables -! INTEGER, DIMENSION(0:11) :: IBIS, INOBIS ! Cumulative number of days per month ! for bissextile and regular years REAL :: ZDATE ! Julian day of the year @@ -316,61 +314,16 @@ IF ( OINIRAD ) THEN PDIRSRFSWD(:,:,:)= 0. KCLEARCOL_TM1 = 0 ELSE - YRECFM='DTRAD_FULL' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'--',TPDTRAD_FULL,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM='DTRAD_CLLY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'--',TPDTRAD_CLONLY,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM = 'ZENITH' - YCOMMENT = 'X_Y_ZENITH (RAD)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PZENITH,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM = 'AZIM' - YCOMMENT = 'X_Y_AZIM (RAD)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PAZIM,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM = 'DTHRAD' - YCOMMENT = 'X_Y_Z_DTHRAD (K/S)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDTHRAD,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM = 'FLALWD' - YCOMMENT = 'X_Y_FLALWD (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PFLALWD,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM = 'DIRFLASWD' - YCOMMENT = 'X_Y_DIRFLASWD (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDIRFLASWD,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM = 'SCAFLASWD' - YCOMMENT = 'X_Y_SCAFLASWD (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PSCAFLASWD,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM = 'DIRSRFSWD' - YCOMMENT = 'X_Y_DIRSRFSWD (W/M2)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDIRSRFSWD,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM = 'CLEARCOL_TM1' - YCOMMENT = 'TRACE OF CLOUD' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',KCLEARCOL_TM1,IGRID,ILENCH,YCOMMENT,IRESP) - ! -! + CALL IO_READ_FIELD(TPINIFILE,'DTRAD_FULL', TPDTRAD_FULL) + CALL IO_READ_FIELD(TPINIFILE,'DTRAD_CLLY', TPDTRAD_CLONLY) + CALL IO_READ_FIELD(TPINIFILE,'DTHRAD', PDTHRAD) + CALL IO_READ_FIELD(TPINIFILE,'FLALWD', PFLALWD) + CALL IO_READ_FIELD(TPINIFILE,'DIRFLASWD', PDIRFLASWD) + CALL IO_READ_FIELD(TPINIFILE,'SCAFLASWD', PSCAFLASWD) + CALL IO_READ_FIELD(TPINIFILE,'DIRSRFSWD', PDIRSRFSWD) + CALL IO_READ_FIELD(TPINIFILE,'CLEARCOL_TM1',KCLEARCOL_TM1) + CALL IO_READ_FIELD(TPINIFILE,'ZENITH', PZENITH) + CALL IO_READ_FIELD(TPINIFILE,'AZIM', PAZIM) END IF !------------------------------------------------------------------------------- ! diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90 index 72794550f..d470cf68a 100644 --- a/src/MNH/ini_segn.f90 +++ b/src/MNH/ini_segn.f90 @@ -292,7 +292,8 @@ ELSE IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL '.OR. CPROGRAM=='SPEC ') THEN ELSE IF (CPROGRAM=='DIAG ') THEN YINIFILE = CINIFILE_n YEXSEG=TRIM(ADJUSTL(CINIFILE_n))//'.des' - CALL FMOPEN_ll(CINIFILE_n,'READ',HLUOUT,0,2,NVERB,ININAR,IRESP) + CALL IO_FILE_ADD2LIST(TPINIFILE,TRIM(YINIFILE),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=NVERB) + CALL IO_FILE_OPEN_ll(TPINIFILE,CLUOUT0,IRESP) CALL FMLOOK_ll(YEXSEG,CLUOUT0,ILUSEG,IRESP) HINIFILEPGD=CINIFILEPGD_n ! @@ -443,13 +444,13 @@ IF (KMI == 1) THEN CALL IO_READ_FIELD(TPINIFILE,'THINSHELL',LTHINSHELL) ! IF (IMASDEV>=46) THEN - CALL IO_READ_FIELD(TPINIFILE,'L1D',L1D) + CALL IO_READ_FIELD(TPINIFILE,'L1D',L1D,IRESP) IF (IRESP/=0) L1D=.FALSE. ! - CALL IO_READ_FIELD(TPINIFILE,'L2D',L2D) + CALL IO_READ_FIELD(TPINIFILE,'L2D',L2D,IRESP) IF (IRESP/=0) L2D=.FALSE. ! - CALL IO_READ_FIELD(TPINIFILE,'PACK',LPACK) + CALL IO_READ_FIELD(TPINIFILE,'PACK',LPACK,IRESP) IF (IRESP/=0) LPACK=.TRUE. ELSE L1D=.FALSE. diff --git a/src/MNH/ini_size_spawn.f90 b/src/MNH/ini_size_spawn.f90 index b0a17124a..6de91c868 100644 --- a/src/MNH/ini_size_spawn.f90 +++ b/src/MNH/ini_size_spawn.f90 @@ -13,12 +13,14 @@ MODULE MODI_INI_SIZE_SPAWN ! INTERFACE ! -SUBROUTINE INI_SIZE_SPAWN(HLBCX,HLBCY,HPRESOPT,KITR,HINIFILE) +SUBROUTINE INI_SIZE_SPAWN(HLBCX,HLBCY,HPRESOPT,KITR,TPINIFILE) ! -CHARACTER (LEN=4),DIMENSION(2), INTENT(IN) :: HLBCX,HLBCY ! LBC types for model1 -CHARACTER (LEN=5), INTENT(IN) :: HPRESOPT ! Pressure solver option of model1 -INTEGER, INTENT(IN) :: KITR ! Iterations of pressure solver of model1 -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! name of the model 1 file +USE MODD_IO_ll, ONLY : TFILEDATA +! +CHARACTER (LEN=4),DIMENSION(2), INTENT(IN) :: HLBCX,HLBCY ! LBC types for model1 +CHARACTER (LEN=5), INTENT(IN) :: HPRESOPT ! Pressure solver option of model1 +INTEGER, INTENT(IN) :: KITR ! Iterations of pressure solver of model1 +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Model 1 file ! END SUBROUTINE INI_SIZE_SPAWN ! @@ -27,9 +29,9 @@ END INTERFACE END MODULE MODI_INI_SIZE_SPAWN ! ! -! ############################################################# - SUBROUTINE INI_SIZE_SPAWN(HLBCX,HLBCY,HPRESOPT,KITR,HINIFILE) -! ############################################################# +! ############################################################## + SUBROUTINE INI_SIZE_SPAWN(HLBCX,HLBCY,HPRESOPT,KITR,TPINIFILE) +! ############################################################## ! !!**** *INI_SIZE_SPAWN * - subroutine to compute dimensions and position of model 2, !! initialize its LBC and call the // initialisation routines @@ -74,50 +76,42 @@ END MODULE MODI_INI_SIZE_SPAWN !* 0. DECLARATIONS ! ------------ ! -USE MODD_SPAWN -USE MODD_PARAMETERS USE MODD_CONF +USE MODD_DIM_n, ONLY : DIM_MODEL +USE MODD_DYN_n, ONLY : CPRESOPT, NITR USE MODD_GRID -USE MODD_PGDGRID +USE MODD_GRID_n +USE MODD_IO_ll, ONLY : ISNPROC, ISP, TFILEDATA +USE MODD_LBC_n +USE MODD_LUNIT_n +USE MODD_PARAMETERS USE MODD_PGDDIM +USE MODD_PGDGRID +USE MODD_SPAWN +USE MODD_VAR_ll, ONLY : YSPLITTING ! USE MODE_ll -USE MODE_IO_ll USE MODE_FM USE MODE_FMREAD USE MODE_GRIDPROJ +USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST +USE MODE_MODELN_HANDLER +USE MODE_SPLITTINGZ_ll ! -USE MODD_DIM_n, ONLY : DIM_MODEL -! -USE MODD_DYN_n, ONLY : CPRESOPT, NITR -USE MODD_LBC_n -USE MODD_GRID_n -USE MODD_LUNIT_n -! +USE MODI_COMPARE_DAD USE MODI_DEFAULT_DESFM_n ! Only for model 2 USE MODI_READ_HGRID USE MODI_RETRIEVE1_NEST_INFO_n -USE MODI_COMPARE_DAD -USE MODE_MODELN_HANDLER -! -!$20140602 for NPROC -!USE MODD_VAR_ll -USE MODD_IO_ll, ONLY : ISNPROC, ISP -!20140602 for INI_PARAZ_ll -USE MODE_SPLITTINGZ_ll ! -USE MODE_SPLITTING_ll, ONLY : SPLIT2 -USE MODD_VAR_ll, ONLY : YSPLITTING, NMNH_COMM_WORLD -USE MODD_STRUCTURE_ll, ONLY : ZONE_ll -!$ IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! -CHARACTER (LEN=4),DIMENSION(2), INTENT(IN) :: HLBCX,HLBCY ! LBC types for model1 -CHARACTER (LEN=5), INTENT(IN) :: HPRESOPT ! Pressure solver option of model1 -INTEGER, INTENT(IN) :: KITR ! Iterations of pressure solver of model1 -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! name of the model 1 file +CHARACTER (LEN=4),DIMENSION(2), INTENT(IN) :: HLBCX,HLBCY ! LBC types for model1 +CHARACTER (LEN=5), INTENT(IN) :: HPRESOPT ! Pressure solver option of model1 +INTEGER, INTENT(IN) :: KITR ! Iterations of pressure solver of model1 +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Model 1 file ! !* 0.2 Declarations of local variables : ! @@ -132,9 +126,6 @@ CHARACTER (LEN=5) :: YPRESOPT ! Pressure solver option of model 1 INTEGER :: IITR ! Iterations of pressure solver of model 1 CHARACTER (LEN=28) :: YMY_NAME, YDAD_NAME CHARACTER (LEN=2) :: YSTORAGE_TYPE -CHARACTER (LEN=16) :: YRECFM -INTEGER :: ILENCH, IGRID -CHARACTER (LEN=100):: YCOMMENT INTEGER :: IMI ! !$20140602 @@ -147,11 +138,9 @@ LOGICAL, DIMENSION(JPMODELMAX) :: L2D_ALL ! Flag for 2D conf. for each PGD LOGICAL, DIMENSION(JPMODELMAX) :: LPACK_ALL! Flag for packing conf. for each PGD INTEGER :: IDIMX, IDIMY, IIB, IJB, IIE, IJE !$ -!------------------------------------------------------------------------------- REAL :: ZLATOR, ZLONOR, ZXHATM, ZYHATM INTEGER :: IIMAX_ll,IJMAX_ll -TYPE(ZONE_ll), DIMENSION(:), ALLOCATABLE :: TZSPLITTING -!------------------------------------------------------------------------------- +TYPE(TFILEDATA),POINTER :: TZDOMAIN => NULL() ! ! IMI = GET_CURRENT_MODEL_INDEX() @@ -205,9 +194,7 @@ IF (LBAL_ONLY) THEN CALL ABORT STOP ELSE - YRECFM='DAD_NAME' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,CLUOUT,YDIR,YDAD_NAME,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'DAD_NAME',YDAD_NAME) IF (ADJUSTL(ADJUSTR(YDAD_NAME)) .NE. ADJUSTL(ADJUSTR(CDADINIFILE))) THEN WRITE(ILUOUT,*) 'ERROR in INI_SIZE_SPAWN: YDADINIFILE is NOT the DAD of model 1' WRITE(ILUOUT,*) ' YDADINIFILE='//TRIM(CDADINIFILE) @@ -237,29 +224,12 @@ ENDIF ! IF (LEN_TRIM(CDOMAIN)>0) THEN ! - YRECFM='LON0' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,CLUOUT,YDIR,XLON0,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM='LAT0' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,CLUOUT,YDIR,XLAT0,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM='BETA' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,CLUOUT,YDIR,XBETA,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM='RPK' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,CLUOUT,YDIR,XRPK,IGRID,ILENCH,YCOMMENT,IRESP) -! - YRECFM='LONORI' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,CLUOUT,YDIR,XPGDLONOR,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM='LATORI' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,CLUOUT,YDIR,XPGDLATOR,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'LAT0', XLAT0) + CALL IO_READ_FIELD(TPINIFILE,'LON0', XLON0) + CALL IO_READ_FIELD(TPINIFILE,'RPK', XRPK) + CALL IO_READ_FIELD(TPINIFILE,'BETA', XBETA) + CALL IO_READ_FIELD(TPINIFILE,'LATORI',XPGDLATOR) + CALL IO_READ_FIELD(TPINIFILE,'LONORI',XPGDLONOR) ! !$20140602 INSERT BIG MODIF JUAN May27 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -269,16 +239,15 @@ IF (LEN_TRIM(CDOMAIN)>0) THEN ! initialize grid2 dims, xor, xend and ratio so to initialize in INI_CHILD ! structures TCRRT_COMDATA%T_CHILDREN%T_SPLITB and TCRRT_PROCONF%T_CHILDREN !$20140602 add condition on npproc - CALL FMOPEN_ll(CDOMAIN,'READ',CLUOUT,0,2,NVERB,ININAR,IRESP,OPARALLELIO=.FALSE.) + CALL IO_FILE_ADD2LIST(TZDOMAIN,TRIM(CDOMAIN),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=NVERB) + CALL IO_FILE_OPEN_ll(TZDOMAIN,CLUOUT,IRESP,OPARALLELIO=.FALSE.) ! - YDIR='--' - CALL FMREAD(CDOMAIN,'DXRATIO',CLUOUT,YDIR,NDXRATIO,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CDOMAIN,'DYRATIO',CLUOUT,YDIR,NDYRATIO,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CDOMAIN,'XOR',CLUOUT,YDIR,NXOR,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CDOMAIN,'YOR',CLUOUT,YDIR,NYOR,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CDOMAIN,'IMAX',CLUOUT,YDIR,IIMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CDOMAIN,'JMAX',CLUOUT,YDIR,IJMAX_ll,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMCLOS_ll(CDOMAIN,'KEEP',CLUOUT,IRESP,OPARALLELIO=.FALSE.) + CALL IO_READ_FIELD(TZDOMAIN,'DXRATIO',NDXRATIO) + CALL IO_READ_FIELD(TZDOMAIN,'DYRATIO',NDYRATIO) + CALL IO_READ_FIELD(TZDOMAIN,'XOR', NXOR) + CALL IO_READ_FIELD(TZDOMAIN,'YOR', NYOR) + CALL IO_READ_FIELD(TZDOMAIN,'IMAX', IIMAX_ll) + CALL IO_READ_FIELD(TZDOMAIN,'JMAX', IJMAX_ll) NXEND=NXOR+IIMAX_ll/NDXRATIO+2*JPHEXT-1 NYEND=NYOR+IJMAX_ll/NDYRATIO+2*JPHEXT-1 ! @@ -301,37 +270,16 @@ IF (LEN_TRIM(CDOMAIN)>0) THEN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !$ ALLOCATE(XPGDXHAT(DIM_MODEL(1)%NIMAX+2*JPHEXT)) - !ALLOCATE(XPGDXHAT(15+2*JPHEXT)) - YRECFM='XHAT' - !$20140505 test '--' - !YDIR='XX' - !YDIR='--' - !$20140520 retour a 'XX' - !$then np1 works, but np4 stops here - !$20140602 use NPROC - IF (ISNPROC.EQ.1) YDIR='XX' - IF (ISNPROC.GT.1) YDIR='XX'!'--' - !$ - CALL FMREAD(HINIFILE,YRECFM,CLUOUT,YDIR,XPGDXHAT,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'XHAT',XPGDXHAT) ! ALLOCATE(XPGDYHAT(DIM_MODEL(1)%NJMAX+2*JPHEXT)) - YRECFM='YHAT' - !$20140506 test '--' - !YDIR='YY' - !YDIR='--' - !$20140520 retour a 'YY' - !$20140602 use NPROC - IF (ISNPROC.EQ.1) YDIR='YY' - IF (ISNPROC.GT.1) YDIR='YY'!'--' - CALL FMREAD(HINIFILE,YRECFM,CLUOUT,YDIR,XPGDYHAT,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'YHAT',XPGDYHAT) ! - YRECFM='MASDEV' - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,CLUOUT,YDIR,IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'MASDEV',IMASDEV) ! IF (IMASDEV<=45) THEN - CALL FMREAD(HINIFILE,'LATOR',CLUOUT,'--',XPGDLATOR,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(HINIFILE,'LONOR',CLUOUT,'--',XPGDLONOR,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZDOMAIN,'LATOR',XPGDLATOR) + CALL IO_READ_FIELD(TZDOMAIN,'LONOR',XPGDLONOR) ZXHATM = - 0.5 * (XPGDXHAT(1)+XPGDXHAT(2)) ZYHATM = - 0.5 * (XPGDYHAT(1)+XPGDYHAT(2)) CALL SM_LATLON(XPGDLATOR,XPGDLONOR,ZXHATM,ZYHATM,ZLATOR,ZLONOR) @@ -342,9 +290,8 @@ IF (LEN_TRIM(CDOMAIN)>0) THEN ! !* 1.4 read grid in file CDOMAIN if available : ! - CALL FMOPEN_ll(CDOMAIN,'READ',CLUOUT,0,2,NVERB,ININAR,IRESP,OPARALLELIO=.FALSE.) - CALL READ_HGRID(2,CDOMAIN,YMY_NAME,YDAD_NAME,YSTORAGE_TYPE) - CALL FMCLOS_ll(CDOMAIN,'KEEP',CLUOUT,IRESP,OPARALLELIO=.FALSE.) + CALL READ_HGRID(2,TZDOMAIN,YMY_NAME,YDAD_NAME,YSTORAGE_TYPE) + CALL IO_FILE_CLOSE_ll(TZDOMAIN,CLUOUT,IRESP,OPARALLELIO=.FALSE.) CALL RETRIEVE1_NEST_INFO_n(1,2,NXOR,NYOR,NXSIZE,NYSIZE,NDXRATIO,NDYRATIO) DEALLOCATE(XZS,XZSMT,XXHAT,XYHAT) ! diff --git a/src/MNH/init_mnh.f90 b/src/MNH/init_mnh.f90 index cfaf842a0..15ac5c8b6 100644 --- a/src/MNH/init_mnh.f90 +++ b/src/MNH/init_mnh.f90 @@ -203,7 +203,7 @@ IF (CPROGRAM=='SPAWN ') THEN DPTR_CLBCX=>CLBCX DPTR_CLBCY=>CLBCY CALL INI_PARAZ_ll(IINFO_ll) - CALL INI_SIZE_SPAWN(DPTR_CLBCX,DPTR_CLBCY,CPRESOPT,NITR,TZINIFILE(1)%TZFILE%CNAME) + CALL INI_SIZE_SPAWN(DPTR_CLBCX,DPTR_CLBCY,CPRESOPT,NITR,TZINIFILE(1)%TZFILE) END IF ! ! INITIALIZE data structures of ComLib diff --git a/src/MNH/latlon_to_xy.f90 b/src/MNH/latlon_to_xy.f90 index bedc9f900..d4d7576cb 100644 --- a/src/MNH/latlon_to_xy.f90 +++ b/src/MNH/latlon_to_xy.f90 @@ -67,16 +67,17 @@ !* 0. DECLARATION ! ----------- ! -USE MODE_FM -USE MODE_IO_ll -! USE MODD_GRID +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_PGDDIM USE MODD_PGDGRID USE MODD_PARAMETERS USE MODD_LUNIT ! +USE MODE_FM USE MODE_GRIDPROJ +USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST ! USE MODI_INI_CST USE MODI_READ_HGRID @@ -102,6 +103,7 @@ 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 ! !* 0.3 Declaration of namelists ! ------------------------ @@ -136,17 +138,18 @@ CALL CLOSE_ll('LATLON2XY1.nam',IOSTAT=IRESP) !* 1. Opening of MESONH file ! ---------------------- ! -CALL FMOPEN_ll(YINIFILE,'READ',CLUOUT0,0,2,2,ININAR,IRESP) +CALL IO_FILE_ADD2LIST(TZINIFILE,TRIM(YINIFILE),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=2) +CALL IO_FILE_OPEN_ll(TZINIFILE,CLUOUT0,IRESP) ! !* 2. Reading of MESONH file ! ---------------------- ! -CALL READ_HGRID(0,YINIFILE,YNAME,YDAD,YSTORAGE_TYPE) +CALL READ_HGRID(0,TZINIFILE,YNAME,YDAD,YSTORAGE_TYPE) ! !* 3. Closing of MESONH file ! ---------------------- ! -CALL FMCLOS_ll(YINIFILE,'KEEP',CLUOUT0,IRESP) +CALL IO_FILE_CLOSE_ll(TZINIFILE,CLUOUT0,IRESP) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/mnh2lpdm_ini.f90 b/src/MNH/mnh2lpdm_ini.f90 index 3c4c2771d..d9784ea91 100644 --- a/src/MNH/mnh2lpdm_ini.f90 +++ b/src/MNH/mnh2lpdm_ini.f90 @@ -29,28 +29,27 @@ ! !* 0.1 Modules. ! -USE MODE_MODELN_HANDLER -USE MODD_MNH2LPDM -! -USE MODE_FM -USE MODE_IO_ll -! USE MODD_CST -USE MODD_TIME -USE MODD_PARAMETERS -USE MODD_GRID USE MODD_DIM_n +USE MODD_GRID USE MODD_GRID_n -USE MODD_TIME_n +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_LUNIT +USE MODD_MNH2LPDM +USE MODD_PARAMETERS +USE MODD_TIME +USE MODD_TIME_n ! -USE MODI_INI_CST -USE MODI_READ_HGRID -USE MODI_FMREAD_LL -! +USE MODE_FM USE MODE_GRIDPROJ +USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST +USE MODE_MODELN_HANDLER USE MODI_XYTOLATLON ! +USE MODI_FMREAD_LL +USE MODI_INI_CST +USE MODI_READ_HGRID USE MODI_TEMPORAL_DIST ! !* 0.2 Arguments. @@ -82,6 +81,8 @@ INTEGER :: JI,JJ,JK,a INTEGER :: b,c,I INTEGER, DIMENSION(:,:), ALLOCATABLE :: TAB2D INTEGER, DIMENSION(:), ALLOCATABLE :: TAB1D +TYPE(TFILEDATA),POINTER :: TZFM1 => NULL() +TYPE(TFILEDATA),POINTER :: TZFM2 => NULL() ! ! ! @@ -98,8 +99,10 @@ CALL GOTO_MODEL(1) ! !* 2.1 Ouverture du fichier Meso-NH. ! -CALL FMOPEN_LL(HFM1,'READ',HFLOG,0,2,KVERB,INBART,IREP) -CALL FMOPEN_LL(HFM2,'READ',HFLOG,0,2,KVERB,INBART,IREP) +CALL IO_FILE_ADD2LIST(TZFM1,TRIM(HFM1),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=KVERB) +CALL IO_FILE_ADD2LIST(TZFM2,TRIM(HFM2),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=KVERB) +CALL IO_FILE_OPEN_ll(TZFM1,HFLOG,IREP) +CALL IO_FILE_OPEN_ll(TZFM2,HFLOG,IREP) ! ! !* 2.2 Date et heure du modele. @@ -149,7 +152,7 @@ NMDLMN =NMDLMN-NMDLHH*60 ! !* 2.3 Grille horizontale. ! -CALL READ_HGRID(1,HFM1,YNAME,YDAD,YSTORAGE) +CALL READ_HGRID(1,TZFM1,YNAME,YDAD,YSTORAGE) IF (YNAME == YDAD) THEN IGRILLE=1 ELSE @@ -432,8 +435,8 @@ DEALLOCATE(XZHAT) ! ! Fermeture du fichier Meso-NH. ! -CALL FMCLOS_LL(HFM1,'KEEP',HFLOG,IREP) -CALL FMCLOS_LL(HFM2,'KEEP',HFLOG,IREP) +CALL IO_FILE_CLOSE_ll(TZFM1,HFLOG,IREP) +CALL IO_FILE_CLOSE_ll(TZFM2,HFLOG,IREP) ! ! !-------------------------------------------' diff --git a/src/MNH/mnhclose_aux_io_surf.f90 b/src/MNH/mnhclose_aux_io_surf.f90 index c1f9963aa..4d97ba51d 100644 --- a/src/MNH/mnhclose_aux_io_surf.f90 +++ b/src/MNH/mnhclose_aux_io_surf.f90 @@ -63,7 +63,7 @@ USE MODE_ll USE MODE_FM USE MODE_IO_ll -USE MODD_IO_SURF_MNH, ONLY : COUT, CACTION, NMASK_ALL, NMASK +USE MODD_IO_SURF_MNH, ONLY : COUT, TPINFILE, CACTION, NMASK_ALL, NMASK ! IMPLICIT NONE ! @@ -82,7 +82,7 @@ INTEGER :: IRESP ! return-code if a problem appears !------------------------------------------------------------------------------- ! IF (CACTION=='OPEN ') THEN - CALL FMCLOS_ll(HFILE,'KEEP',COUT,IRESP,OPARALLELIO=.FALSE.) + CALL IO_FILE_CLOSE_ll(TPINFILE,COUT,IRESP,OPARALLELIO=.FALSE.) CACTION=' ' END IF ! diff --git a/src/MNH/mnhend_io_surfn.f90 b/src/MNH/mnhend_io_surfn.f90 index d416cd8f5..aa0847a4c 100644 --- a/src/MNH/mnhend_io_surfn.f90 +++ b/src/MNH/mnhend_io_surfn.f90 @@ -60,7 +60,7 @@ USE MODE_ll USE MODE_FM USE MODE_IO_ll -USE MODD_IO_SURF_MNH, ONLY : CACTION, CFILE, COUTFILE, NMASK, NMASK_ALL +USE MODD_IO_SURF_MNH, ONLY : CACTION, CFILE, TPINFILE, COUTFILE, NMASK, NMASK_ALL ! IMPLICIT NONE ! @@ -80,6 +80,7 @@ CACTION=' ' ! CFILE = ' ' COUTFILE = ' ' +TPINFILE => NULL() ! DEALLOCATE(NMASK) DEALLOCATE(NMASK_ALL) diff --git a/src/MNH/mnhinit_io_surfn.f90 b/src/MNH/mnhinit_io_surfn.f90 index f3740b99c..ba0a0f843 100644 --- a/src/MNH/mnhinit_io_surfn.f90 +++ b/src/MNH/mnhinit_io_surfn.f90 @@ -60,9 +60,9 @@ END MODULE MODI_MNHINIT_IO_SURF_n ! ------------ ! ! -USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE,COUTFILE, NLUOUT, & - NMASK, CMASK, NIU, NJU, NIB, NJB, NIE, NJE, CACTION,& - NMASK_ALL, NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL, & +USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, TPINFILE, COUTFILE, NLUOUT, & + NMASK, CMASK, NIU, NJU, NIB, NJB, NIE, NJE, CACTION, & + NMASK_ALL, NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL, & NIE_ALL, NJE_ALL, NHALO ! USE MODD_CONF, ONLY : CPROGRAM @@ -72,9 +72,10 @@ USE MODD_LUNIT, ONLY : CLUOUT0, COUTFMFILE, CPGDFILE USE MODD_DIM_n, ONLY : NIMAX, NJMAX, NIMAX_ll, NJMAX_ll USE MODD_PARAMETERS, ONLY : JPHEXT ! +USE MODE_ll USE MODE_FM USE MODE_IO_ll -USE MODE_ll +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME USE MODE_MODELN_HANDLER ! USE MODI_GET_1D_MASK @@ -129,11 +130,14 @@ IF (HACTION=='READ ') THEN CASE('MESONH','DIAG ') IF(CMASK_SURFEX=="PGD") THEN CFILE=CINIFILEPGD + CALL IO_FILE_FIND_BYNAME(TRIM(CINIFILEPGD),TPINFILE,IRESP) ELSE CFILE=CINIFILE + CALL IO_FILE_FIND_BYNAME(TRIM(CINIFILE),TPINFILE,IRESP) ENDIF CASE('REAL ','IDEAL ','NESPGD','SPAWN ','ZOOMPG') CFILE=CPGDFILE + CALL IO_FILE_FIND_BYNAME(TRIM(CPGDFILE),TPINFILE,IRESP) END SELECT ELSE IF (HACTION=='WRITE') THEN COUTFILE=COUTFMFILE diff --git a/src/MNH/mnhopen_aux_io_surf.f90 b/src/MNH/mnhopen_aux_io_surf.f90 index a2b4c4f3d..20bd56411 100644 --- a/src/MNH/mnhopen_aux_io_surf.f90 +++ b/src/MNH/mnhopen_aux_io_surf.f90 @@ -57,7 +57,7 @@ END MODULE MODI_MNHOPEN_AUX_IO_SURF ! ------------ ! ! -USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, COUTFILE, NLUOUT, & +USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, TPINFILE, COUTFILE, NLUOUT, & NMASK_ALL, CMASK, NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL, NIE_ALL, NJE_ALL, CACTION, & NMASK, NIU, NJU, NIB, NJB, NIE, NJE ! @@ -68,6 +68,7 @@ USE MODD_LUNIT, ONLY : CLUOUT0, COUTFMFILE, CPGDFILE USE MODE_FM USE MODE_FMREAD USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST,IO_FILE_FIND_BYNAME ! USE MODI_GET_1D_MASK USE MODI_MNH_SURF_GRID_IO_INIT @@ -84,12 +85,8 @@ CHARACTER(LEN=6), INTENT(IN) :: HMASK !* 0.2 Declarations of local variables ! ------------------------------- ! -INTEGER :: IRESP,ININAR ! IRESP : return-code if a problem appears - ! at the open of the file in LFI routines +INTEGER :: IRESP INTEGER :: IMI ! model index -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string -CHARACTER(LEN=100):: YCOMMENT ! Comment string INTEGER :: IIMAX ! number of points in X direction INTEGER :: IJMAX ! number of points in Y direction ! @@ -123,12 +120,16 @@ IF (LEN_TRIM(CACTION)>0) THEN END IF ! IF (HFILE/=COUTFMFILE .AND. HFILE/=CPGDFILE) THEN - CALL FMOPEN_ll(HFILE,'READ',COUT,0,2,5,ININAR,IRESP,OPARALLELIO=.FALSE.) + CALL IO_FILE_ADD2LIST(TPINFILE,TRIM(HFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=5,OOLD=.TRUE.) + CALL IO_FILE_OPEN_ll(TPINFILE,COUT,IRESP,OPARALLELIO=.FALSE.) + ! IF (IRESP .NE. 0) THEN - PRINT*," /!\ MNHOPEN_AUX_IO_SURF :: FATAL PROBLEM OPENING INPUT/READ FILES =", HFILE - STOP '/!\ MNHOPEN_AUX_IO_SURF :: FATAL PROBLEM OPENING INPUT/READ FILES , CHECK OUTPUT_LISTING* !!!' + PRINT*," /!\ MNHOPEN_AUX_IO_SURF :: FATAL PROBLEM OPENING INPUT/READ FILES =", HFILE + STOP '/!\ MNHOPEN_AUX_IO_SURF :: FATAL PROBLEM OPENING INPUT/READ FILES , CHECK OUTPUT_LISTING* !!!' ENDIF CACTION = 'OPEN ' +ELSE + CALL IO_FILE_FIND_BYNAME(TRIM(HFILE),TPINFILE,IRESP) END IF ! CFILE = HFILE @@ -136,12 +137,12 @@ COUTFILE = HFILE ! ! !* 3. initialisation of 2D arrays for entire physical field -! -CALL FMREAD(HFILE,'IMAX',COUT,'--',IIMAX,IGRID,ILENCH,YCOMMENT,IRESP) -CALL FMREAD(HFILE,'JMAX',COUT,'--',IJMAX,IGRID,ILENCH,YCOMMENT,IRESP) +! +CALL IO_READ_FIELD(TPINFILE,'IMAX',IIMAX) +CALL IO_READ_FIELD(TPINFILE,'JMAX',IJMAX) CALL MNH_SURF_GRID_IO_INIT(IIMAX,IJMAX) IJPHEXT= 1 -CALL FMREAD(HFILE,'JPHEXT',COUT,'--',IJPHEXT,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINFILE,'JPHEXT',IJPHEXT) IF ( IJPHEXT .NE. JPHEXT ) THEN WRITE(NLUOUT,FMT=*) ' MNHOPEN_AUX_IO : JPHEXT in PRE_PGD1.nam/NAM_CONF_PGD ( or default value )& & JPHEXT=',JPHEXT diff --git a/src/MNH/mnhread_zs_dummyn.f90 b/src/MNH/mnhread_zs_dummyn.f90 index 4f554c98b..cd9e6339a 100644 --- a/src/MNH/mnhread_zs_dummyn.f90 +++ b/src/MNH/mnhread_zs_dummyn.f90 @@ -12,10 +12,11 @@ MODULE MODI_MNHREAD_ZS_DUMMY_n ! ########################## INTERFACE - SUBROUTINE MNHREAD_ZS_DUMMY_n(HINIFILE) + SUBROUTINE MNHREAD_ZS_DUMMY_n(TPINIFILE) ! -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! name of - ! the initial file +USE MODD_IO_ll, ONLY : TFILEDATA +! +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE !Initial file ! END SUBROUTINE MNHREAD_ZS_DUMMY_n ! @@ -24,7 +25,7 @@ END INTERFACE END MODULE MODI_MNHREAD_ZS_DUMMY_n ! ! ########################################################################## - SUBROUTINE MNHREAD_ZS_DUMMY_n(HINIFILE) + SUBROUTINE MNHREAD_ZS_DUMMY_n(TPINIFILE) ! ########################################################################## ! !!**** *MNHREAD_ZS_DUMMY_n* - reads zs and dummy surface fields @@ -60,10 +61,11 @@ END MODULE MODI_MNHREAD_ZS_DUMMY_n !* 0. DECLARATIONS ! ------------ ! -USE MODD_LUNIT_n, ONLY : CLUOUT USE MODD_GRID_n, ONLY : XZS USE MODD_GR_FIELD_n, ONLY : XSSO_STDEV, XSSO_ANISOTROPY, XSSO_DIRECTION, XSSO_SLOPE, & XAVG_ZS, XSIL_ZS, XMIN_ZS, XMAX_ZS +USE MODD_IO_ll, ONLY : TFILEDATA +USE MODD_LUNIT_n, ONLY : CLUOUT USE MODD_PARAM_n, ONLY : CSURF ! USE MODI_READ_DUMMY_GR_FIELD_n @@ -75,22 +77,12 @@ IMPLICIT NONE ! !* 0.1 Declarations of arguments ! ------------------------- -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! name of - ! the initial file ! - +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE !Initial file ! !* 0.2 Declarations of local variables ! ------------------------------- ! -INTEGER :: IRESP ! IRESP : return-code if a problem appears - ! at the open of the file in LFI routines -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string -! -CHARACTER(LEN=16) :: YRECFM ! Name of the article to be read -CHARACTER(LEN=100):: YCOMMENT ! Comment string -! INTEGER :: IIU ! X array size INTEGER :: IJU ! Y array size ! @@ -112,10 +104,9 @@ CALL GET_DIM_EXT_ll('B',IIU,IJU) ! !* 1.3 Orography : ! --------- -YRECFM='ZS' IF (.NOT.(ASSOCIATED(XZS))) THEN ALLOCATE(XZS(IIU,IJU)) - CALL FMREAD(HINIFILE,YRECFM,CLUOUT,'XY',XZS,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'ZS',XZS) END IF ! IF (CSURF /='EXTE') RETURN @@ -126,44 +117,36 @@ IF (CSURF /='EXTE') RETURN !* 2.1 Orographic characteristics : ! -------------------------- ! -YRECFM='SSO_STDEV' -IF (.NOT.(ASSOCIATED(XSSO_STDEV))) ALLOCATE(XSSO_STDEV(IIU,IJU)) -CALL FMREAD(HINIFILE,YRECFM,CLUOUT,'XY',XSSO_STDEV(:,:),IGRID,ILENCH,YCOMMENT,IRESP) +IF (.NOT.(ASSOCIATED(XSSO_ANISOTROPY))) ALLOCATE(XSSO_ANISOTROPY(IIU,IJU)) +CALL IO_READ_FIELD(TPINIFILE,'SSO_ANIS',XSSO_ANISOTROPY(:,:)) +! +IF (.NOT.(ASSOCIATED(XSSO_SLOPE))) ALLOCATE(XSSO_SLOPE(IIU,IJU)) +CALL IO_READ_FIELD(TPINIFILE,'SSO_SLOPE',XSSO_SLOPE(:,:)) +! +IF (.NOT.(ASSOCIATED(XSSO_DIRECTION))) ALLOCATE(XSSO_DIRECTION(IIU,IJU)) +CALL IO_READ_FIELD(TPINIFILE,'SSO_DIR',XSSO_DIRECTION(:,:)) ! -YRECFM='AVG_ZS' IF (.NOT.(ASSOCIATED(XAVG_ZS))) ALLOCATE(XAVG_ZS(IIU,IJU)) -CALL FMREAD(HINIFILE,YRECFM,CLUOUT,'XY',XAVG_ZS(:,:),IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'AVG_ZS',XAVG_ZS(:,:)) ! -YRECFM='SIL_ZS' IF (.NOT.(ASSOCIATED(XSIL_ZS))) ALLOCATE(XSIL_ZS(IIU,IJU)) -CALL FMREAD(HINIFILE,YRECFM,CLUOUT,'XY',XSIL_ZS(:,:),IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'SIL_ZS',XSIL_ZS(:,:)) ! -YRECFM='MAX_ZS' IF (.NOT.(ASSOCIATED(XMAX_ZS))) ALLOCATE(XMAX_ZS(IIU,IJU)) -CALL FMREAD(HINIFILE,YRECFM,CLUOUT,'XY',XMAX_ZS(:,:),IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'MAX_ZS',XMAX_ZS(:,:)) ! -YRECFM='MIN_ZS' IF (.NOT.(ASSOCIATED(XMIN_ZS))) ALLOCATE(XMIN_ZS(IIU,IJU)) -CALL FMREAD(HINIFILE,YRECFM,CLUOUT,'XY',XMIN_ZS(:,:),IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='SSO_ANIS' -IF (.NOT.(ASSOCIATED(XSSO_ANISOTROPY))) ALLOCATE(XSSO_ANISOTROPY(IIU,IJU)) -CALL FMREAD(HINIFILE,YRECFM,CLUOUT,'XY',XSSO_ANISOTROPY(:,:),IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'MIN_ZS',XMIN_ZS(:,:)) ! -YRECFM='SSO_SLOPE' -IF (.NOT.(ASSOCIATED(XSSO_SLOPE))) ALLOCATE(XSSO_SLOPE(IIU,IJU)) -CALL FMREAD(HINIFILE,YRECFM,CLUOUT,'XY',XSSO_SLOPE(:,:),IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='SSO_DIR' -IF (.NOT.(ASSOCIATED(XSSO_DIRECTION))) ALLOCATE(XSSO_DIRECTION(IIU,IJU)) -CALL FMREAD(HINIFILE,YRECFM,CLUOUT,'XY',XSSO_DIRECTION(:,:),IGRID,ILENCH,YCOMMENT,IRESP) +IF (.NOT.(ASSOCIATED(XSSO_STDEV))) ALLOCATE(XSSO_STDEV(IIU,IJU)) +CALL IO_READ_FIELD(TPINIFILE,'SSO_STDEV',XSSO_STDEV(:,:)) ! !------------------------------------------------------------------------------- ! !* 3. Dummy fields ! ------------ ! -CALL READ_DUMMY_GR_FIELD_n(HINIFILE,CLUOUT,1,IIU,1,IJU,.TRUE.) +CALL READ_DUMMY_GR_FIELD_n(TPINIFILE,CLUOUT,1,IIU,1,IJU,.TRUE.) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/modd_io_surf_mnh.f90 b/src/MNH/modd_io_surf_mnh.f90 index 98f4ac86c..830660da8 100644 --- a/src/MNH/modd_io_surf_mnh.f90 +++ b/src/MNH/modd_io_surf_mnh.f90 @@ -36,7 +36,7 @@ ! !* 0. DECLARATIONS ! -!$20140403 +USE MODD_IO_ll, ONLY : TFILEDATA USE MODD_PARAMETERS, ONLY: JPMODELMAX IMPLICIT NONE @@ -53,6 +53,7 @@ TYPE IO_SURF_MNH_t !INTEGER :: NLUOUT ! output listing logical unit !CHARACTER(LEN=6),SAVE :: CMASK CHARACTER(LEN=28) :: CFILE ! Name of the input FM-file +TYPE(TFILEDATA),POINTER :: TPINFILE => NULL() ! Input FM-file CHARACTER(LEN=28) :: COUTFILE ! Name of the output FM-file CHARACTER(LEN=28) :: COUT ! Name of output_listing file INTEGER :: NLUOUT ! output listing logical unit @@ -85,6 +86,7 @@ TYPE(IO_SURF_MNH_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: IO_SURF_MNH_MODEL !!!!!!!!!!!!!!!!!!!! LOCAL VARIABLE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! CHARACTER(LEN=28) ,POINTER :: CFILE =>NULL() ! Name of the input FM-file +TYPE(TFILEDATA) ,POINTER :: TPINFILE => NULL() ! Input FM-file CHARACTER(LEN=28) ,POINTER :: COUTFILE =>NULL() ! Name of the output FM-file CHARACTER(LEN=28) ,POINTER :: COUT =>NULL() ! Name of output_listing file INTEGER ,POINTER :: NLUOUT =>NULL() ! output listing logical unit @@ -119,6 +121,7 @@ IO_SURF_MNH_MODEL(KFROM)%NMASK_ALL=>NMASK_ALL ! current model is set for model KTO CFILE=>IO_SURF_MNH_MODEL(KTO)%CFILE +TPINFILE=>IO_SURF_MNH_MODEL(KTO)%TPINFILE COUTFILE=>IO_SURF_MNH_MODEL(KTO)%COUTFILE COUT=>IO_SURF_MNH_MODEL(KTO)%COUT NLUOUT=>IO_SURF_MNH_MODEL(KTO)%NLUOUT diff --git a/src/MNH/modd_lunitn.f90 b/src/MNH/modd_lunitn.f90 index d67979cae..82ccd39db 100644 --- a/src/MNH/modd_lunitn.f90 +++ b/src/MNH/modd_lunitn.f90 @@ -54,6 +54,7 @@ TYPE LUNIT_t ! CHARACTER(LEN=28) :: CINIFILE ! Name of the input FM-file CHARACTER(LEN=28) :: CINIFILEPGD ! Name of the PGD associated to input FM-file + TYPE(TFILEDATA),POINTER :: TINIFILEPGD => NULL() ! PGD associated to input FM-file CHARACTER(LEN=24) :: COUTFILE ! Generic name of the output FM-files TYPE(TFILEDATA),POINTER :: TDIAFILE => NULL() ! diachronic output file ! @@ -72,6 +73,7 @@ CHARACTER(LEN=4),SAVE :: CMASK_SURFEX='PREP' ! CHARACTER(LEN=28), POINTER :: CINIFILE=>NULL() CHARACTER(LEN=28), POINTER :: CINIFILEPGD=>NULL() +TYPE(TFILEDATA), POINTER :: TINIFILEPGD => NULL() CHARACTER(LEN=24), POINTER :: COUTFILE=>NULL() TYPE(TFILEDATA), POINTER :: TDIAFILE=>NULL() CHARACTER(LEN=16), POINTER :: CLUOUT=>NULL() @@ -96,6 +98,7 @@ ENDIF ! Current model is set to model KTO CINIFILE=>LUNIT_MODEL(KTO)%CINIFILE CINIFILEPGD=>LUNIT_MODEL(KTO)%CINIFILEPGD +TINIFILEPGD=>LUNIT_MODEL(KTO)%TINIFILEPGD COUTFILE=>LUNIT_MODEL(KTO)%COUTFILE TDIAFILE=>LUNIT_MODEL(KTO)%TDIAFILE CLUOUT=>LUNIT_MODEL(KTO)%CLUOUT diff --git a/src/MNH/open_prc_files.f90 b/src/MNH/open_prc_files.f90 index 0b37a6c07..e08d9c08e 100644 --- a/src/MNH/open_prc_files.f90 +++ b/src/MNH/open_prc_files.f90 @@ -12,9 +12,12 @@ ! ########################## ! INTERFACE - SUBROUTINE OPEN_PRC_FILES(HPRE_REAL1,HATMFILE,HATMFILETYPE & - ,HCHEMFILE,HCHEMFILETYPE & - ,HSURFFILE,HSURFFILETYPE,HPGDFILE) + SUBROUTINE OPEN_PRC_FILES(HPRE_REAL1,HATMFILE,HATMFILETYPE, & + 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 CHARACTER(LEN=28), INTENT(OUT) :: HATMFILE ! name of the input atmospheric file @@ -24,15 +27,18 @@ CHARACTER(LEN=6), INTENT(OUT) :: HCHEMFILETYPE! type of the input chemical file CHARACTER(LEN=28), INTENT(OUT) :: HSURFFILE ! name of the input surface file CHARACTER(LEN=6), INTENT(OUT) :: HSURFFILETYPE! type of the input surface file CHARACTER(LEN=28), INTENT(OUT) :: HPGDFILE ! name of the physiographic data file +TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPPGDFILE ! physiographic data file +! END SUBROUTINE OPEN_PRC_FILES END INTERFACE END MODULE MODI_OPEN_PRC_FILES ! -! ###################################################################### - SUBROUTINE OPEN_PRC_FILES(HPRE_REAL1,HATMFILE,HATMFILETYPE & - ,HCHEMFILE,HCHEMFILETYPE & - ,HSURFFILE,HSURFFILETYPE,HPGDFILE) -! ###################################################################### +! ############################################################### + SUBROUTINE OPEN_PRC_FILES(HPRE_REAL1,HATMFILE,HATMFILETYPE, & + HCHEMFILE,HCHEMFILETYPE, & + HSURFFILE,HSURFFILETYPE, & + HPGDFILE,TPPGDFILE) +! ############################################################### ! !!**** *OPEN_PRC_FILES* - openning of the files used in PREP_REAL_CASE !! @@ -97,20 +103,22 @@ END MODULE MODI_OPEN_PRC_FILES USE MODD_CONF ! declaration modules USE MODD_CONF_n !JUAN Z_SPLITTING -USE MODD_CONFZ +!USE MODD_CONFZ !JUAN Z_SPLITTING +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_LUNIT USE MODD_LUNIT_n, CINIFILE_n=>CINIFILE , CINIFILEPGD_n=>CINIFILEPGD ! -!JUAN Z_SPLITTING -USE MODN_CONFZ -!JUAN Z_SPLITTING ! +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST USE MODE_POS USE MODE_FM USE MODE_IO_ll ! USE MODN_CONFIO, ONLY : NAM_CONFIO +!JUAN Z_SPLITTING +USE MODN_CONFZ +!JUAN Z_SPLITTING ! IMPLICIT NONE ! @@ -125,6 +133,7 @@ CHARACTER(LEN=6), INTENT(OUT) :: HCHEMFILETYPE! type of the input chemical file CHARACTER(LEN=28), INTENT(OUT) :: HSURFFILE ! name of the input surface file CHARACTER(LEN=6), INTENT(OUT) :: HSURFFILETYPE! type of the input surface file CHARACTER(LEN=28), INTENT(OUT) :: HPGDFILE ! name of the physiographic data file +TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPPGDFILE ! physiographic data file ! !* 0.2 Declaration of local variables ! ------------------------------ @@ -261,10 +270,11 @@ IF (LEN_TRIM(HPGDFILE)==0) THEN ELSE !------------------------------------------------------------------------------- ! -!* 5. OPENNING THE PHYSIOGRAPHIC DATA FILE -! ------------------------------------ +!* 5. OPENING THE PHYSIOGRAPHIC DATA FILE +! ----------------------------------- ! - CALL FMOPEN_ll(HPGDFILE,'READ',CLUOUT0,0,2,NVERB,ININAR,IRESP,OPARALLELIO=.FALSE.) + CALL IO_FILE_ADD2LIST(TPPGDFILE,TRIM(HPGDFILE),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=NVERB) + CALL IO_FILE_OPEN_ll(TPPGDFILE,CLUOUT0,IRESP,OPARALLELIO=.FALSE.) IF (IRESP/=0) THEN WRITE(ILUOUT0,*) 'STOP: problem during opening of PGD file ',HPGDFILE !callabortstop @@ -285,8 +295,8 @@ WRITE(ILUOUT0,*) 'HPGDFILE= ', HPGDFILE ! ! because of new parallel IO, FMATTR must be called just before opening the Aladin file ! -!* 6.2 OPENNING INPUT MESONH FILE -! -------------------------- +!* 6.2 OPENING INPUT MESONH FILE +! ------------------------- ! ! done during INIT ! diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90 index 4d68f8e56..b3b7f1546 100644 --- a/src/MNH/prep_ideal_case.f90 +++ b/src/MNH/prep_ideal_case.f90 @@ -576,9 +576,10 @@ REAL :: XHSLOP=1.2 ! if LHSLOP filtering of slopes higher REAL :: ZZS_MAX, ZZS_MAX_ll INTEGER :: IJPHEXT ! -TYPE(TFILEDATA),POINTER :: TZFILE -TYPE(TFILEDATA),POINTER :: TZFILEDUMMY => NULL() -TYPE(TFILEDATA),POINTER :: TZINIFILEPGD +TYPE(TFILEDATA),POINTER :: TZFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZFILEDUMMY => NULL() +TYPE(TFILEDATA),POINTER :: TZINIFILEPGD => NULL() +TYPE(TFILEDATA),POINTER :: TZPGDFILE => NULL() ! ! !* 0.2 Namelist declarations @@ -622,9 +623,6 @@ NAMELIST/NAM_AERO_PRE/ LORILAM, LINITPM, XINIRADIUSI, XINIRADIUSJ, & ! -------- CALL MPPDB_INIT() ! -TZFILE => NULL() -TZINIFILEPGD => NULL() -! CALL GOTO_MODEL(1) ! CALL INITIO_ll() @@ -711,13 +709,19 @@ CALL READ_PRE_IDEA_NAM_n(NLUPRE,NLUOUT) CALL POSNAM(NLUPRE,'NAM_AERO_PRE',GFOUND,NLUOUT) IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_AERO_PRE) ! +CALL INI_FIELD_LIST() +! +CALL INI_FIELD_SCALARS() +! IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN ! open the PGD_FILE - CALL FMOPEN_ll(CPGD_FILE,'READ',CLUOUT,NNPRAR,2,NVERB,NNINAR,NRESP) + CALL IO_FILE_ADD2LIST(TZPGDFILE,TRIM(CPGD_FILE),'UNKNOWN','READ',KLFINPRAR=NNPRAR,KLFITYPE=2,KLFIVERB=NVERB) + CALL IO_FILE_OPEN_ll(TZPGDFILE,CLUOUT,NRESP) + ! read the grid in the PGD file - CALL FMREAD(CPGD_FILE,'IMAX',CLUOUT,'--',NIMAX,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CPGD_FILE,'JMAX',CLUOUT,'--',NJMAX,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CPGD_FILE,'JPHEXT',CLUOUT,'--',IJPHEXT,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZPGDFILE,'IMAX', NIMAX) + CALL IO_READ_FIELD(TZPGDFILE,'JMAX', NJMAX) + CALL IO_READ_FIELD(TZPGDFILE,'JPHEXT',IJPHEXT) IF ( CPGD_FILE /= CINIFILEPGD) THEN WRITE(NLUOUT,FMT=*) ' WARNING : in PRE_IDEA1.nam, in NAM_LUNITn you& @@ -898,10 +902,6 @@ CALL INI_NSV(1) LHORELAX_SV(:)=.FALSE. IF(.NOT. L1D) LHORELAX_SV(1:NSV)=.TRUE. ! -CALL INI_FIELD_LIST() -! -CALL INI_FIELD_SCALARS() -! !------------------------------------------------------------------------------- ! !* 4. ALLOCATE MEMORY FOR ARRAYS : @@ -1211,7 +1211,7 @@ IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN !-------------------------------------------------------- ! the MESONH horizontal grid will be read in the PGD_FILE !-------------------------------------------------------- - CALL READ_HGRID(1,CPGD_FILE,YPGD_NAME,YPGD_DAD_NAME,YPGD_TYPE) + CALL READ_HGRID(1,TZPGDFILE,YPGD_NAME,YPGD_DAD_NAME,YPGD_TYPE) ! control the cartesian option IF( LCARTESIAN ) THEN WRITE(NLUOUT,FMT=*) 'PREP_IDEAL_CASE : IN GENERAL, THE USE OF A PGD_FILE & @@ -1867,7 +1867,7 @@ IF (CSURF =='EXTE' .AND. (LEN_TRIM(CPGD_FILE)==0 .OR. .NOT. LREAD_GROUND_PARAM)) ENDIF CALL IO_FILE_CLOSE_ll(TZFILE,CLUOUT,NRESP) IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN - CALL FMCLOS_ll(CPGD_FILE,'KEEP',CLUOUT,NRESP) + CALL IO_FILE_CLOSE_ll(TZPGDFILE,CLUOUT,NRESP) ENDIF ! ! diff --git a/src/MNH/prep_nest_pgd.f90 b/src/MNH/prep_nest_pgd.f90 index ea77ead1e..0db388877 100644 --- a/src/MNH/prep_nest_pgd.f90 +++ b/src/MNH/prep_nest_pgd.f90 @@ -151,8 +151,6 @@ INTEGER :: IINFO_ll ! return code of // routines INTEGER :: JPGD ! loop control CHARACTER(LEN=28) :: YMY_NAME,YDAD_NAME CHARACTER(LEN=2) :: YSTORAGE_TYPE -CHARACTER(LEN=100) :: YCOMMENT -INTEGER :: IGRID, ILENCH LOGICAL, DIMENSION(JPMODELMAX) :: L1D_ALL ! Flag for 1D conf. for each PGD LOGICAL, DIMENSION(JPMODELMAX) :: L2D_ALL ! Flag for 2D conf. for each PGD LOGICAL, DIMENSION(JPMODELMAX) :: LPACK_ALL! Flag for packing conf. for each PGD @@ -218,14 +216,14 @@ CALL MPI_COMM_SIZE(NMNH_COMM_WORLD, NPROC, IINFO_ll) CALL SET_DAD0_ll() DO JPGD=1,NMODEL ! read and set dimensions and ratios of model JPGD - CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'IMAX',CLUOUT0,'--',IIMAX,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'JMAX',CLUOUT0,'--',IJMAX,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'DXRATIO',CLUOUT0,'--',NDXRATIO_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'DYRATIO',CLUOUT0,'--',NDYRATIO_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'XSIZE',CLUOUT0,'--',NXSIZE(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'YSIZE',CLUOUT0,'--',NYSIZE(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'XOR',CLUOUT0,'--',NXOR_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'YOR',CLUOUT0,'--',NYOR_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'IMAX', IIMAX) + CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'JMAX', IJMAX) + CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'DXRATIO',NDXRATIO_ALL(JPGD)) + CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'DYRATIO',NDYRATIO_ALL(JPGD)) + CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'XSIZE', NXSIZE(JPGD)) + CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'YSIZE', NYSIZE(JPGD)) + CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'XOR', NXOR_ALL(JPGD)) + CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'YOR', NYOR_ALL(JPGD)) CALL SET_DIM_ll(IIMAX, IJMAX, 1) ! compute origin and end of local subdomain of model JPGD ! initialize variables from MODD_NESTING, origin and end of global model JPGD in coordinates of its father @@ -262,11 +260,11 @@ DO JPGD=1,NMODEL CALL GOTO_MODEL(JPGD) CALL GO_TOMODEL_ll(JPGD,IINFO_ll) CALL GOTO_SURFEX(JPGD) - CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'L1D ',CLUOUT0,'--',L1D_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'L2D ',CLUOUT0,'--',L2D_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(TZFILEPGD(JPGD)%TZFILE%CNAME,'PACK ',CLUOUT0,'--',LPACK_ALL(JPGD),IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'L1D', L1D_ALL(JPGD)) + CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'L2D', L2D_ALL(JPGD)) + CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'PACK',LPACK_ALL(JPGD)) CALL SET_FMPACK_ll(L1D_ALL(JPGD),L2D_ALL(JPGD),LPACK_ALL(JPGD)) - CALL READ_HGRID(JPGD,TZFILEPGD(JPGD)%TZFILE%CNAME,YMY_NAME,YDAD_NAME,YSTORAGE_TYPE) + CALL READ_HGRID(JPGD,TZFILEPGD(JPGD)%TZFILE,YMY_NAME,YDAD_NAME,YSTORAGE_TYPE) CSTORAGE_TYPE='PG' END DO CALL INI_PARAZ_ll(IINFO_ll) diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90 index 61bc3c37b..0cf14b1cd 100644 --- a/src/MNH/prep_real_case.f90 +++ b/src/MNH/prep_real_case.f90 @@ -514,7 +514,8 @@ LOGICAL :: LUSECHAQ LOGICAL :: LUSECHIC LOGICAL :: LUSECHEM ! -TYPE(TFILEDATA),POINTER :: TZFILE +TYPE(TFILEDATA),POINTER :: TZFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZPGDFILE => NULL() ! ! !* 0.3 Declaration of namelists @@ -553,8 +554,6 @@ ZHORI = 0. ZSURF = 0. ZTIME1 = ZSTART ! -TZFILE => NULL() -! !* 1. SET DEFAULT VALUES ! ------------------ ! @@ -576,7 +575,7 @@ CALL INITIO_ll() CALL OPEN_PRC_FILES(YPRE_REAL1,YATMFILE, YATMFILETYPE & ,YCHEMFILE,YCHEMFILETYPE & ,YSURFFILE,YSURFFILETYPE & - ,YPGDFILE) + ,YPGDFILE,TZPGDFILE) CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) ! CPGDFILE = YPGDFILE @@ -640,8 +639,8 @@ IF (YATMFILETYPE == 'GRIBEX') THEN CALL INIT_NMLVAR() CALL READ_VER_GRID(YPRE_REAL1) ! -CALL FMREAD(CPGDFILE,'IMAX',CLUOUT0,'--',NIMAX,IGRID,ILENGTH,HCOMMENT,IRESP) -CALL FMREAD(CPGDFILE,'JMAX',CLUOUT0,'--',NJMAX,IGRID,ILENGTH,HCOMMENT,IRESP) +CALL IO_READ_FIELD(TZPGDFILE,'IMAX',NIMAX) +CALL IO_READ_FIELD(TZPGDFILE,'JMAX',NJMAX) ! NIMAX_ll=NIMAX !! _ll variables are global variables NJMAX_ll=NJMAX !! but the old names are kept in PRE_IDEA1.nam file @@ -720,12 +719,12 @@ ZMISC = ZTIME2 - ZTIME1 ZTIME1 = ZTIME2 ! IF (YATMFILETYPE=='MESONH') THEN - CALL READ_ALL_DATA_MESONH_CASE(YPRE_REAL1,YATMFILE,YPGDFILE,YDAD_NAME) + CALL READ_ALL_DATA_MESONH_CASE(YPRE_REAL1,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,YPGDFILE,ZHORI,NVERB,LDUMMY_REAL) + CALL READ_ALL_DATA_GRIB_CASE('ATM1',YPRE_REAL1,YATMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL) ELSE - CALL READ_ALL_DATA_GRIB_CASE('ATM0',YPRE_REAL1,YATMFILE,YPGDFILE,ZHORI,NVERB,LDUMMY_REAL) + CALL READ_ALL_DATA_GRIB_CASE('ATM0',YPRE_REAL1,YATMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL) END IF ! YDAD_NAME=' ' @@ -749,7 +748,7 @@ 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,YPGDFILE,ZHORI,NVERB,LDUMMY_REAL) + CALL READ_ALL_DATA_GRIB_CASE('CHEM',YPRE_REAL1,YCHEMFILE,TZPGDFILE,ZHORI,NVERB,LDUMMY_REAL) END IF ! CALL CLOSE_ll(YPRE_REAL1, IOSTAT=IRESP) @@ -1068,7 +1067,7 @@ ZWRITE = ZTIME2 - ZTIME1 ! !* reading in the PGD file ! -CALL MNHREAD_ZS_DUMMY_n(YPGDFILE) +CALL MNHREAD_ZS_DUMMY_n(TZPGDFILE) ! !* writing in the output file ! diff --git a/src/MNH/prep_surf_mnh.f90 b/src/MNH/prep_surf_mnh.f90 index d19845c7b..47067da09 100644 --- a/src/MNH/prep_surf_mnh.f90 +++ b/src/MNH/prep_surf_mnh.f90 @@ -53,8 +53,8 @@ END MODULE MODI_PREP_SURF_MNH ! USE MODD_LUNIT_n, ONLY : CINIFILE USE MODD_TIME_n, ONLY : TDTCUR -USE MODD_LUNIT, ONLY : CLUOUT0, COUTFMFILE, CPGDFILE -USE MODD_IO_SURF_MNH, ONLY : COUTFILE, CFILE +USE MODD_LUNIT, ONLY : CLUOUT0, COUTFMFILE +USE MODD_IO_SURF_MNH, ONLY : COUTFILE USE MODE_FM ! USE MODI_INIT_PGD_SURF_ATM diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90 index c7e405b23..181104754 100644 --- a/src/MNH/prep_surfex.f90 +++ b/src/MNH/prep_surfex.f90 @@ -86,7 +86,8 @@ INTEGER :: IINFO_ll ! return code of // routines CHARACTER (LEN=100) :: HCOMMENT INTEGER :: II, IJ, IGRID, ILENGTH ! -TYPE(TFILEDATA),POINTER :: TZFILE +TYPE(TFILEDATA),POINTER :: TZFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZPGDFILE => NULL() ! !------------------------------------------------------------------------------- ! @@ -94,8 +95,6 @@ TYPE(TFILEDATA),POINTER :: TZFILE !* 1. SET DEFAULT VALUES ! ------------------ ! -TZFILE => NULL() -! CALL GOTO_MODEL(1) ! CALL VERSION @@ -111,7 +110,7 @@ CALL INITIO_ll() CALL OPEN_PRC_FILES(YPRE_REAL1,YATMFILE, YATMFILETYPE & ,YCHEMFILE,YCHEMFILETYPE & ,YSURFFILE,YSURFFILETYPE & - ,YPGDFILE) + ,YPGDFILE,TZPGDFILE) CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) ! CPGDFILE = YPGDFILE diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90 index 91d0ac3d3..68f698ab1 100644 --- a/src/MNH/read_all_data_grib_case.f90 +++ b/src/MNH/read_all_data_grib_case.f90 @@ -12,22 +12,25 @@ MODULE MODI_READ_ALL_DATA_GRIB_CASE ! ################################# INTERFACE -SUBROUTINE READ_ALL_DATA_GRIB_CASE(HFILE,HPRE_REAL1,HGRIB,HPGDFILE, & +SUBROUTINE READ_ALL_DATA_GRIB_CASE(HFILE,HPRE_REAL1,HGRIB,TPPGDFILE, & PTIME_HORI,KVERB,ODUMMY_REAL ) ! -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 -CHARACTER(LEN=28), INTENT(IN) :: HGRIB ! name of the GRIB file -CHARACTER(LEN=28), INTENT(IN) :: HPGDFILE ! name of the physiographic data file -INTEGER, INTENT(IN) :: KVERB ! verbosity level -LOGICAL, INTENT(IN) :: ODUMMY_REAL! flag to interpolate dummy fields -REAL, INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations +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 +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 +LOGICAL, INTENT(IN) :: ODUMMY_REAL ! flag to interpolate dummy fields +REAL, INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations +! 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,HPGDFILE, & + SUBROUTINE READ_ALL_DATA_GRIB_CASE(HFILE,HPRE_REAL1,HGRIB,TPPGDFILE, & PTIME_HORI,KVERB,ODUMMY_REAL ) ! ########################################################################## ! @@ -135,6 +138,7 @@ END MODULE MODI_READ_ALL_DATA_GRIB_CASE USE MODE_FM USE MODE_IO_ll USE MODE_TIME +USE MODE_THERMO ! USE MODI_ADD_FORECAST_TO_DATE USE MODI_READ_HGRID_n @@ -147,7 +151,9 @@ USE MODI_REMOVAL_VORTEX USE MODI_CH_INIT_CCS USE MODI_CH_AER_INIT_SOA USE MODI_INI_CTURB +USE MODI_CH_OPEN_INPUT ! +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_CONF USE MODD_CONF_n USE MODD_CST @@ -170,23 +176,21 @@ USE MODE_MODELN_HANDLER !JUAN REALZ USE MODE_MPPDB !JUAN REALZ +! USE GRIB_API -USE MODI_CH_OPEN_INPUT -USE MODE_THERMO - ! IMPLICIT NONE ! !* 0.1. Declaration of arguments ! ------------------------ ! -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 -CHARACTER(LEN=28), INTENT(IN) :: HGRIB ! name of the GRIB file -CHARACTER(LEN=28), INTENT(IN) :: HPGDFILE ! name of the physiographic data file -INTEGER, INTENT(IN) :: KVERB ! verbosity level -LOGICAL, INTENT(IN) :: ODUMMY_REAL! flag to interpolate dummy fields -REAL, INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations +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 +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 +LOGICAL, INTENT(IN) :: ODUMMY_REAL ! flag to interpolate dummy fields +REAL, INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolations ! !* 0.2 Declaration of local variables ! ------------------------------ @@ -194,7 +198,7 @@ REAL, INTENT(INOUT) :: PTIME_HORI ! time spent in hor. interpolat INTEGER :: ILUOUT0 ! Unit used for output msg. INTEGER :: IRESP ! Return code of FM-routines INTEGER :: IRET ! Return code from subroutines -INTEGER(KIND=kindOfInt) :: IRET_GRIB ! Return code from subroutines +INTEGER(KIND=kindOfInt) :: IRET_GRIB ! Return code from subroutines REAL :: ZA,ZB,ZC ! Dummy variables REAL :: ZD,ZE,ZF ! | REAL :: ZTEMP ! | @@ -325,7 +329,7 @@ IMI = GET_CURRENT_MODEL_INDEX() ! ------------- ! CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRET) -CALL READ_HGRID_n(HPGDFILE,YPGD_NAME,YPGD_DAD_NAME,YPGD_TYPE) +CALL READ_HGRID_n(TPPGDFILE,YPGD_NAME,YPGD_DAD_NAME,YPGD_TYPE) ! ! 1.1 Domain restriction ! diff --git a/src/MNH/read_all_data_mesonh_case.f90 b/src/MNH/read_all_data_mesonh_case.f90 index 57054d46a..cc369a623 100644 --- a/src/MNH/read_all_data_mesonh_case.f90 +++ b/src/MNH/read_all_data_mesonh_case.f90 @@ -12,13 +12,15 @@ MODULE MODI_READ_ALL_DATA_MESONH_CASE !#################################### INTERFACE - SUBROUTINE READ_ALL_DATA_MESONH_CASE(HPRE_REAL1,HFMFILE,HPGDFILE, & - HDAD_NAME ) - -CHARACTER(LEN=28), INTENT(IN) :: HPRE_REAL1 ! name of the PRE_REAL1 file -CHARACTER(LEN=28), INTENT(IN) :: HFMFILE ! name of the Mesonh input file -CHARACTER(LEN=28), INTENT(IN) :: HPGDFILE ! name of the physiographic data file -CHARACTER(LEN=*), INTENT(INOUT) :: HDAD_NAME! true name of the Mesonh input file + SUBROUTINE READ_ALL_DATA_MESONH_CASE(HPRE_REAL1,HFMFILE,TPPGDFILE, & + HDAD_NAME ) +! +USE MODD_IO_ll, ONLY: TFILEDATA +! +CHARACTER(LEN=28), INTENT(IN) :: HPRE_REAL1 ! name of the 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 ! END SUBROUTINE READ_ALL_DATA_MESONH_CASE ! @@ -26,10 +28,10 @@ END INTERFACE ! END MODULE MODI_READ_ALL_DATA_MESONH_CASE ! -! ######################################################################### - SUBROUTINE READ_ALL_DATA_MESONH_CASE(HPRE_REAL1,HFMFILE,HPGDFILE, & - HDAD_NAME ) -! ######################################################################### +! #################################################################### + SUBROUTINE READ_ALL_DATA_MESONH_CASE(HPRE_REAL1,HFMFILE,TPPGDFILE, & + HDAD_NAME ) +! #################################################################### ! !!**** *READ_ALL_DATA_MESONH_CASE* - reads data for the initialization of real cases. !! @@ -131,6 +133,7 @@ USE MODI_ZS_BOUNDARY ! USE MODD_CONF ! declaration modules USE MODD_CONF_n +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_PARAM_n USE MODD_LUNIT USE MODD_LUNIT_n @@ -160,10 +163,10 @@ IMPLICIT NONE !* 0.1 Declaration of arguments ! ------------------------ ! -CHARACTER(LEN=28), INTENT(IN) :: HPRE_REAL1 ! name of the PRE_REAL1 file -CHARACTER(LEN=28), INTENT(IN) :: HFMFILE ! name of the Mesonh input file -CHARACTER(LEN=28), INTENT(IN) :: HPGDFILE ! name of the physiographic data file -CHARACTER(LEN=*), INTENT(INOUT) :: HDAD_NAME! true name of the Mesonh input file +CHARACTER(LEN=28), INTENT(IN) :: HPRE_REAL1 ! name of the 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 ! ! !* 0.2 Declaration of local variables @@ -247,7 +250,7 @@ XRES = ZRES !* 2. Reading of physiographic data domain ! ------------------------------------ ! -CALL READ_HGRID(0,HPGDFILE,YPGD_NAME,YPGD_DAD_NAME,YPGD_TYPE) +CALL READ_HGRID(0,TPPGDFILE,YPGD_NAME,YPGD_DAD_NAME,YPGD_TYPE) ! !* 3. Reading of large-scale grid and time ! ------------------------------------ @@ -323,15 +326,15 @@ CALL READ_PRC_FMFILE(IIINF_LS,IISUP_LS,IJINF_LS,IJSUP_LS ) ! --------- ! ALLOCATE(XZS(IISUP_LS-IIINF_LS+1,IJSUP_LS-IJINF_LS+1)) -CALL FMREAD(HPGDFILE,'ZS',CLUOUT,'XY',XZS,IGRID,ILENCH,YCOMMENT,IRESP) +CALL FMREAD(TPPGDFILE%CNAME,'ZS',CLUOUT,'XY',XZS,IGRID,ILENCH,YCOMMENT,IRESP) CALL ZS_BOUNDARY(XZS,XZS_LS) ! ALLOCATE(XZSMT(IISUP_LS-IIINF_LS+1,IJSUP_LS-IJINF_LS+1)) -CALL FMREAD(HPGDFILE,'MASDEV',CLUOUT,'XY',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) +CALL FMREAD(TPPGDFILE%CNAME,'MASDEV',CLUOUT,'XY',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) IF (IMASDEV<=46) THEN XZSMT = XZS ELSE - CALL FMREAD(HPGDFILE,'ZSMT',CLUOUT,'XY',XZSMT,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPPGDFILE%CNAME,'ZSMT',CLUOUT,'XY',XZSMT,IGRID,ILENCH,YCOMMENT,IRESP) END IF CALL ZS_BOUNDARY(XZSMT,XZSMT_LS) ! diff --git a/src/MNH/read_dummy_gr_fieldn.f90 b/src/MNH/read_dummy_gr_fieldn.f90 index 0a733a324..5732f8fba 100644 --- a/src/MNH/read_dummy_gr_fieldn.f90 +++ b/src/MNH/read_dummy_gr_fieldn.f90 @@ -14,31 +14,19 @@ MODULE MODI_READ_DUMMY_GR_FIELD_n ! INTERFACE ! - SUBROUTINE READ_DUMMY_GR_FIELD_n(HINIFILE,HLUOUT, & + SUBROUTINE READ_DUMMY_GR_FIELD_n(TPINIFILE,HLUOUT, & KIINF,KISUP,KJINF,KJSUP, & OREAD_ALL ) ! +USE MODD_IO_ll, ONLY : TFILEDATA ! !* 0.1 declarations of arguments ! -! -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! name of the - ! initial file -CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for - ! output-listing - ! of nested models -INTEGER, INTENT(IN) :: KIINF,KISUP ! Lower and upper - ! dimensions in x - ! direction for - ! working window -INTEGER, INTENT(IN) :: KJINF,KJSUP ! Lower and upper - ! dimensions in y - ! direction for - ! working window -LOGICAL, INTENT(IN) :: OREAD_ALL ! flag to read the -! ! entire 2D fields -! ! in the file. -! +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file +CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! Name for output-listing of nested models +INTEGER, INTENT(IN) :: KIINF,KISUP ! Lower and upper Dimensions in x direction for working window +INTEGER, INTENT(IN) :: KJINF,KJSUP ! Lower and upper dimensions in y direction for working window +LOGICAL, INTENT(IN) :: OREAD_ALL ! Flag to read the entire 2D fields in the file. ! END SUBROUTINE READ_DUMMY_GR_FIELD_n ! @@ -53,7 +41,7 @@ END MODULE MODI_READ_DUMMY_GR_FIELD_n ! ! ! ####################################################################### - SUBROUTINE READ_DUMMY_GR_FIELD_n(HINIFILE,HLUOUT, & + SUBROUTINE READ_DUMMY_GR_FIELD_n(TPINIFILE,HLUOUT, & KIINF,KISUP,KJINF,KJSUP, & OREAD_ALL ) ! ####################################################################### @@ -94,9 +82,11 @@ END MODULE MODI_READ_DUMMY_GR_FIELD_n ! !* 0. DECLARATIONS ! -USE MODD_PARAMETERS -USE MODD_GRID_n USE MODD_DUMMY_GR_FIELD_n +USE MODE_FIELD, ONLY : TFIELDDATA,TYPEINT,TYPEREAL +USE MODD_GRID_n +USE MODD_IO_ll, ONLY : TFILEDATA +USE MODD_PARAMETERS ! USE MODE_FMREAD USE MODE_FM @@ -106,32 +96,20 @@ IMPLICIT NONE ! !* 0.1 declarations of arguments ! -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! name of the - ! initial file -CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for - ! output-listing - ! of nested models -INTEGER, INTENT(IN) :: KIINF,KISUP ! Lower and upper - ! dimensions in x - ! direction for - ! working window -INTEGER, INTENT(IN) :: KJINF,KJSUP ! Lower and upper - ! dimensions in y - ! direction for - ! working window -LOGICAL, INTENT(IN) :: OREAD_ALL ! flag to read the -! ! entire 2D fields -! ! in the file. +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file +CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! Name for output-listing of nested models +INTEGER, INTENT(IN) :: KIINF,KISUP ! Lower and upper Dimensions in x direction for working window +INTEGER, INTENT(IN) :: KJINF,KJSUP ! Lower and upper dimensions in y direction for working window +LOGICAL, INTENT(IN) :: OREAD_ALL ! Flag to read the entire 2D fields in the file. ! !* 0.2 declarations of local variables ! -INTEGER :: IGRID,ILENCH,IRESP ! File -CHARACTER (LEN=16) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables -CHARACTER (LEN=20 ) :: YSTRING20 ! string -CHARACTER (LEN=3 ) :: YSTRING03 ! string -INTEGER :: ILUOUT ! Unit number for prints -INTEGER :: JDUMMY ! Loop index for cover data +INTEGER :: IRESP ! File management +CHARACTER (LEN=16) :: YRECFM ! variables +CHARACTER (LEN=20 ) :: YSTRING20 ! string +CHARACTER (LEN=3 ) :: YSTRING03 ! string +INTEGER :: ILUOUT ! Unit number for prints +INTEGER :: JDUMMY ! Loop index for cover data ! INTEGER :: IMASDEV ! masdev used for creation of input FM file ! @@ -142,6 +120,7 @@ INTEGER :: IIINF ! lower I index INTEGER :: IISUP ! upper I index INTEGER :: IJINF ! lower J index INTEGER :: IJSUP ! upper J index +TYPE(TFIELDDATA) :: TZFIELD ! !------------------------------------------------------------------------------- ! @@ -150,8 +129,7 @@ CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP) !* 1.. TEST MASDEV VERSION OF INPUT FILE ! --------------------------------- ! -YRECFM = 'MASDEV' -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'--',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'MASDEV',IMASDEV,IRESP) IF (IRESP /= 0) IMASDEV=33 ! !------------------------------------------------------------------------------- @@ -180,11 +158,8 @@ ELSE IJINF = KJINF IJSUP = KJSUP ! - YRECFM='IMAX' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'--',IIWORK,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM='JMAX' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'--',IJWORK,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'IMAX',IIWORK) + CALL IO_READ_FIELD(TPINIFILE,'JMAX',IJWORK) ! ALLOCATE(ZWORK(IIWORK+2*JPHEXT,IJWORK+2*JPHEXT)) END IF @@ -196,10 +171,20 @@ END IF ! ! IF (IMASDEV>=40) THEN - CALL FMREAD(HINIFILE,'DUMMY_GR_NBR',HLUOUT,'--', & - NDUMMY_GR_NBR,IGRID,ILENCH,YCOMMENT,IRESP) - IF (IRESP/=0) THEN - !callabortstop + TZFIELD%CMNHNAME = 'DUMMY_GR_NBR' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: DUMMY_GR_NBR' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'number of dummy pgd fields chosen by user' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEINT + TZFIELD%NDIMS = 0 + ! + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,NDUMMY_GR_NBR,IRESP) + ! + IF (IRESP/=0 .AND. IRESP/=-111) THEN + !callabortstop CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) CALL ABORT STOP @@ -216,18 +201,30 @@ ALLOCATE(XDUMMY_GR_FIELDS(SIZE(XXHAT),SIZE(XYHAT),NDUMMY_GR_NBR)) ! DO JDUMMY=1,NDUMMY_GR_NBR WRITE(YRECFM,'(A8,I3.3,A5)') 'DUMMY_GR',JDUMMY,' ' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY', & - ZWORK(:,:),IGRID,ILENCH,YCOMMENT,IRESP) - IF (IRESP/=0) THEN - !callabortstop + TZFIELD%CMNHNAME = TRIM(YRECFM) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(YRECFM) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + ! Expected comment is not known but is in the following form: + ! 'X_Y_'//YRECFM//YSTRING20//YSTRING03 + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + ! + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,ZWORK(:,:)) + ! + IF (IRESP/=0 .AND. IRESP/=-111) THEN + !callabortstop CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) CALL ABORT STOP ENDIF XDUMMY_GR_FIELDS(:,:,JDUMMY) = ZWORK(IIINF:IISUP,IJINF:IJSUP) ! - YSTRING20=YCOMMENT(21:40) - YSTRING03=YCOMMENT(41:43) + YSTRING20=TZFIELD%CCOMMENT( 4+LEN(YRECFM)+1 : 4+LEN(YRECFM)+LEN(YSTRING20) ) + YSTRING03=TZFIELD%CCOMMENT( 4+LEN(YRECFM)+LEN(YSTRING20)+1 : 4+LEN(YRECFM)+LEN(YSTRING20)+LEN(YSTRING03) ) ! CDUMMY_GR_NAME(JDUMMY) = YSTRING20 CDUMMY_GR_AREA(JDUMMY) = YSTRING03 diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90 index a5be8e716..13017f631 100644 --- a/src/MNH/read_field.f90 +++ b/src/MNH/read_field.f90 @@ -238,42 +238,42 @@ END MODULE MODI_READ_FIELD ! !* 0. DECLARATIONS ! ------------ -USE MODE_FM -USE MODE_IO_ll, ONLY : UPCASE ! -USE MODD_IO_ll, ONLY : TFILEDATA +USE MODD_2D_FRC +USE MODD_CH_AEROSOL +USE MODD_CH_M9_n, ONLY: CNAMES, CICNAMES USE MODD_CONF USE MODD_CONF_n -USE MODD_TIME ! for type DATE_TIME USE MODD_CST USE MODD_CTURB -USE MODD_NSV USE MODD_DUST -USE MODD_SALT -USE MODD_PASPOL +USE MODD_ELEC_DESCR, ONLY: CELECNAMES #ifdef MNH_FOREFIRE USE MODD_FOREFIRE #endif -USE MODD_CH_AEROSOL -! -USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES USE MODD_ICE_C1R3_DESCR, ONLY: C1R3NAMES -USE MODD_CH_M9_n, ONLY: CNAMES, CICNAMES +USE MODD_IO_ll, ONLY: TFILEDATA +USE MODD_NSV +USE MODD_LATZ_EDFLX USE MODD_LG, ONLY: CLGNAMES -USE MODD_ELEC_DESCR, ONLY: CELECNAMES USE MODD_PARAM_C2R2, ONLY: LSUPSAT ! USE MODD_PARAM_LIMA , ONLY: NMOD_CCN, LSCAV, LAERO_MASS, & NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM, LHHONI -USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES +USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS +USE MODD_PASPOL +USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES +USE MODD_SALT +USE MODD_TIME ! for type DATE_TIME ! +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL +USE MODE_FM USE MODE_FMREAD -USE MODI_INI_LS -USE MODI_INI_LB +USE MODE_IO_ll, ONLY: UPCASE ! -USE MODD_LATZ_EDFLX -USE MODD_2D_FRC +USE MODI_INI_LB +USE MODI_INI_LS ! IMPLICIT NONE ! @@ -403,6 +403,7 @@ REAL, DIMENSION(KIU,KJU,KKU):: XDTH3D,XDRV3D ! CHARACTER(LEN=2) :: INDICE INTEGER :: I +TYPE(TFIELDDATA) :: TZFIELD ! !------------------------------------------------------------------------------- ! @@ -465,12 +466,9 @@ SELECT CASE(HGETTKET) ELSE YRECFM = 'TKET' END IF - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PTKET,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,YRECFM,PTKET) IF (KMASDEV>50 .AND. (CCONF == 'RESTA')) THEN - YRECFM = 'TKEMS' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PRTKEMS,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,YRECFM,PRTKEMS) END IF CASE('INIT') PTKET(:,:,:)=XTKEMIN @@ -627,55 +625,64 @@ END DO DO JSV = NSV_LIMA_BEG,NSV_LIMA_END SELECT CASE(HGETSVT(JSV)) CASE ('READ') + TZFIELD%CSTDNAME = '' + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + TZFIELD%CDIR = 'XY' + TZFIELD%CUNITS = 'kg-1' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 ! Nc IF (JSV .EQ. NSV_LIMA_NC) THEN - YRECFM=TRIM(CLIMA_WARM_NAMES(1))//'T' + TZFIELD%CMNHNAME = TRIM(CLIMA_WARM_NAMES(1))//'T' END IF ! Nr IF (JSV .EQ. NSV_LIMA_NR) THEN - YRECFM=TRIM(CLIMA_WARM_NAMES(2))//'T' + TZFIELD%CMNHNAME = TRIM(CLIMA_WARM_NAMES(2))//'T' END IF ! N CCN free IF (JSV .GE. NSV_LIMA_CCN_FREE .AND. JSV .LT. NSV_LIMA_CCN_ACTI) THEN WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1) - YRECFM=TRIM(CLIMA_WARM_NAMES(3))//INDICE//'T' + TZFIELD%CMNHNAME = TRIM(CLIMA_WARM_NAMES(3))//INDICE//'T' END IF ! N CCN acti IF (JSV .GE. NSV_LIMA_CCN_ACTI .AND. JSV .LT. NSV_LIMA_CCN_ACTI + NMOD_CCN) THEN WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_ACTI + 1) - YRECFM=TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T' + TZFIELD%CMNHNAME = TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T' END IF ! Scavenging IF (JSV .EQ. NSV_LIMA_SCAVMASS) THEN - YRECFM=TRIM(CAERO_MASS(1))//'T' + TZFIELD%CMNHNAME = TRIM(CAERO_MASS(1))//'T' + TZFIELD%CUNITS = 'kg kg-1' END IF ! Ni IF (JSV .EQ. NSV_LIMA_NI) THEN - YRECFM=TRIM(CLIMA_COLD_NAMES(1))//'T' + TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(1))//'T' END IF ! N IFN free IF (JSV .GE. NSV_LIMA_IFN_FREE .AND. JSV .LT. NSV_LIMA_IFN_NUCL) THEN WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1) - YRECFM=TRIM(CLIMA_COLD_NAMES(2))//INDICE//'T' + TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(2))//INDICE//'T' END IF ! N IFN nucl IF (JSV .GE. NSV_LIMA_IFN_NUCL .AND. JSV .LT. NSV_LIMA_IFN_NUCL + NMOD_IFN) THEN WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_NUCL + 1) - YRECFM=TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T' + TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T' END IF ! N IMM nucl I = 0 IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN I = I + 1 WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(I)) - YRECFM=TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T' + TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T' END IF ! Hom. freez. of CCN IF (JSV .EQ. NSV_LIMA_HOM_HAZE) THEN - YRECFM=TRIM(CLIMA_COLD_NAMES(5))//'T' + TZFIELD%CMNHNAME = TRIM(CLIMA_COLD_NAMES(5))//'T' END IF ! - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z3D) ! PSVT(:,:,:,JSV) = Z3D(:,:,:) CASE ('INIT') @@ -1021,16 +1028,7 @@ CALL IO_READ_FIELD(TPINIFILE,'DRYMASST',PDRYMASST) ! dry mass ! SELECT CASE(HGETSRCT) ! turbulent flux SRC at time t CASE('READ') - YRECFM='SRCT' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - IF( IRESP /= 0 ) THEN - YRECFM='SRC' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - END IF + CALL IO_READ_FIELD(TPINIFILE,'SRCT',Z3D) PSRCT(:,:,:)=Z3D(:,:,:) CASE('INIT') PSRCT(:,:,:)=0. @@ -1038,40 +1036,28 @@ END SELECT ! SELECT CASE(HGETSIGS) ! subgrid condensation CASE('READ') - YRECFM='SIGS' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PSIGS,IGRID,ILENCH, & - YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'SIGS',PSIGS) CASE('INIT') PSIGS(:,:,:)=0. END SELECT ! SELECT CASE(HGETPHC) ! pH in cloud water CASE('READ') - YRECFM='PHC' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PPHC,IGRID,ILENCH, & - YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'PHC',PPHC) CASE('INIT') PPHC(:,:,:)=0. END SELECT ! SELECT CASE(HGETPHR) ! pH in rainwater CASE('READ') - YRECFM='PHR' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PPHR,IGRID,ILENCH, & - YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'PHR',PPHR) CASE('INIT') PPHR(:,:,:)=0. END SELECT ! IRESP=0 IF(HGETCLDFR=='READ') THEN ! cloud fraction - YRECFM='CLDFR' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PCLDFR,IGRID,ILENCH, & - YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'CLDFR',PCLDFR) ENDIF IF(HGETCLDFR=='INIT' .OR. IRESP /= 0) THEN IF(SIZE(PRT,4) > 3) THEN @@ -1092,9 +1078,7 @@ ENDIF !* boundary layer depth ! IF (HGETBL_DEPTH=='READ') THEN - YRECFM = 'BL_DEPTH' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PBL_DEPTH,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'BL_DEPTH',PBL_DEPTH) ELSE PBL_DEPTH(:,:)=XUNDEF END IF @@ -1102,9 +1086,7 @@ END IF !* surface boundary layer depth ! IF (HGETSBL_DEPTH=='READ') THEN - YRECFM = 'SBL_DEPTH' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PSBL_DEPTH,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'SBL_DEPTH',PSBL_DEPTH) ELSE PSBL_DEPTH(:,:)=0. END IF @@ -1113,9 +1095,7 @@ END IF ! SELECT CASE(HGETTKET) CASE('READ') - YRECFM = 'WTHVMF' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PWTHVMF,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'WTHVMF',PWTHVMF) CASE('INIT') PWTHVMF(:,:,:)=0. END SELECT diff --git a/src/MNH/read_grid_time_mesonh_case.f90 b/src/MNH/read_grid_time_mesonh_case.f90 index 268b5fdf8..2c99639d3 100644 --- a/src/MNH/read_grid_time_mesonh_case.f90 +++ b/src/MNH/read_grid_time_mesonh_case.f90 @@ -94,20 +94,22 @@ END MODULE MODI_READ_GRID_TIME_MESONH_CASE ! ------------ ! USE MODD_CONF ! declaration modules -USE MODD_LUNIT USE MODD_GRID -USE MODD_TIME_n -USE MODD_TIME -USE MODD_PARAMETERS USE MODD_GRID_n +USE MODD_IO_ll, ONLY: TFILEDATA +USE MODD_LUNIT +USE MODD_PARAMETERS USE MODD_PREP_REAL +USE MODD_TIME +USE MODD_TIME_n ! USE MODE_FM USE MODE_FMREAD +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_FIND_BYNAME ! -USE MODI_RETRIEVE2_NEST_INFO_n -USE MODI_READ_HGRID USE MODI_DEFAULT_SLEVE +USE MODI_READ_HGRID +USE MODI_RETRIEVE2_NEST_INFO_n ! IMPLICIT NONE ! @@ -151,6 +153,8 @@ INTEGER :: IYSIZE ! Y-direction size of atm. file INTEGER :: IDXRATIO ! X-direction grid mesh ratios, MUST be 1 INTEGER :: IDYRATIO ! Y-direction grid mesh ratios, MUST be 1 ! +! +TYPE(TFILEDATA),POINTER :: TZFMFILE => NULL() !------------------------------------------------------------------------------- ! !* 1. INITIALIZATIONS @@ -208,7 +212,10 @@ END IF !* 2.2 Horizontal grid: ! --------------- ! -CALL READ_HGRID(1,HFMFILE,YMY_NAME,YDAD_NAME,YTYPE) +!PW: TODO: temporary: look for file from its name +! TPFMFILE should be passed in arguments +CALL IO_FILE_FIND_BYNAME(HFMFILE,TZFMFILE,IRESP) +CALL READ_HGRID(1,TZFMFILE,YMY_NAME,YDAD_NAME,YTYPE) CALL RETRIEVE2_NEST_INFO_n(1,0,KXOR_LS,KYOR_LS,IXSIZE,IYSIZE,IDXRATIO,IDYRATIO) ! IF (IDXRATIO/=1 .OR. IDYRATIO/=1) THEN diff --git a/src/MNH/read_hgrid.f90 b/src/MNH/read_hgrid.f90 index aff3b67d5..8c8ae603e 100644 --- a/src/MNH/read_hgrid.f90 +++ b/src/MNH/read_hgrid.f90 @@ -12,10 +12,12 @@ MODULE MODI_READ_HGRID ! ###################### INTERFACE - SUBROUTINE READ_HGRID(KMI,HFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE) + SUBROUTINE READ_HGRID(KMI,TPFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE) +! +USE MODD_IO_ll, ONLY: TFILEDATA ! INTEGER, INTENT(IN) :: KMI ! model index -CHARACTER (LEN=*), INTENT(IN) :: HFMFILE ! name of the file n +TYPE(TFILEDATA), INTENT(IN) :: TPFMFILE ! file n CHARACTER(LEN=28), INTENT(OUT) :: HMY_NAME ! True Name of FM-file CHARACTER(LEN=28), INTENT(OUT) :: HDAD_NAME ! Name of father CHARACTER(LEN=2) , INTENT(OUT) :: HSTORAGE_TYPE @@ -25,7 +27,7 @@ END INTERFACE END MODULE MODI_READ_HGRID ! ! #################################################################### - SUBROUTINE READ_HGRID(KMI,HFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE) + SUBROUTINE READ_HGRID(KMI,TPFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE) ! #################################################################### ! !!**** *READ_HGRID* - to read grid information in FM file into PGD modules @@ -83,26 +85,27 @@ END MODULE MODI_READ_HGRID ! !* 0. DECLARATIONS ! -USE MODE_MODELN_HANDLER -USE MODI_READ_HGRID_n -! -USE MODD_PGDDIM -USE MODD_PGDGRID +USE MODD_CONF, ONLY : CPROGRAM USE MODD_GRID -USE MODD_PARAMETERS +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_LUNIT +USE MODD_PARAMETERS +USE MODD_PGDDIM +USE MODD_PGDGRID ! USE MODE_FMREAD USE MODE_GRIDPROJ USE MODE_IO_ll -USE MODD_CONF, ONLY : CPROGRAM +USE MODE_MODELN_HANDLER +! +USE MODI_READ_HGRID_n ! IMPLICIT NONE ! !* 0.1 declarations of arguments ! INTEGER, INTENT(IN) :: KMI ! model index -CHARACTER (LEN=*), INTENT(IN) :: HFMFILE ! name of the file n +TYPE(TFILEDATA), INTENT(IN) :: TPFMFILE ! file n CHARACTER(LEN=28), INTENT(OUT) :: HMY_NAME ! True Name of FM-file CHARACTER(LEN=28), INTENT(OUT) :: HDAD_NAME ! Name of father CHARACTER(LEN=2) , INTENT(OUT) :: HSTORAGE_TYPE @@ -110,9 +113,7 @@ CHARACTER(LEN=2) , INTENT(OUT) :: HSTORAGE_TYPE ! !* 0.2 declarations of local variables ! -CHARACTER(LEN=16) :: YRECFM -INTEGER :: IGRID,ILENCH,IRESP -CHARACTER(LEN=100) :: YCOMMENT +INTEGER :: IRESP INTEGER :: IMASDEV INTEGER :: IMI LOGICAL :: G1D,G2D,GPACK @@ -135,7 +136,7 @@ IF (KMI/=0) THEN IMI = GET_CURRENT_MODEL_INDEX() CALL GOTO_MODEL(KMI) CALL GO_TOMODEL_ll(KMI, IINFO_ll) - CALL READ_HGRID_n(HFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE) + CALL READ_HGRID_n(TPFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE) CALL GO_TOMODEL_ll(IMI, IINFO_ll) CALL GOTO_MODEL(IMI) RETURN @@ -147,27 +148,10 @@ END IF !* 2.1 General information : ! ------------------- ! -YRECFM='MY_NAME' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',HMY_NAME,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='DAD_NAME' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',HDAD_NAME,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='STORAGE_TYPE' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',HSTORAGE_TYPE,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='MASDEV' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) -! +CALL IO_READ_FIELD(TPFMFILE,'MY_NAME', HMY_NAME) +CALL IO_READ_FIELD(TPFMFILE,'DAD_NAME', HDAD_NAME) +CALL IO_READ_FIELD(TPFMFILE,'STORAGE_TYPE',HSTORAGE_TYPE) +CALL IO_READ_FIELD(TPFMFILE,'MASDEV', IMASDEV) ! !* 2.2 Grid information : ! ---------------- @@ -176,14 +160,14 @@ CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) !GET_DIM_PHYS_ll impact => 1st one no visible impact CALL GET_DIM_PHYS_ll ( 'B',NPGDIMAX,NPGDJMAX) ! -CALL FMREAD(HFMFILE,'LAT0',CLUOUT0,'--',XLAT0,IGRID,ILENCH,YCOMMENT,IRESP) -CALL FMREAD(HFMFILE,'LON0',CLUOUT0,'--',XLON0,IGRID,ILENCH,YCOMMENT,IRESP) -CALL FMREAD(HFMFILE,'RPK',CLUOUT0,'--',XRPK,IGRID,ILENCH,YCOMMENT,IRESP) -CALL FMREAD(HFMFILE,'BETA',CLUOUT0,'--',XBETA,IGRID,ILENCH,YCOMMENT,IRESP) -CALL FMREAD(HFMFILE,'LATORI',CLUOUT0,'--',XPGDLATOR,IGRID,ILENCH,YCOMMENT,IRESP) -CALL FMREAD(HFMFILE,'LONORI',CLUOUT0,'--',XPGDLONOR,IGRID,ILENCH,YCOMMENT,IRESP) -CALL FMREAD(HFMFILE,'IMAX',CLUOUT0,'--',NPGDIMAX,IGRID,ILENCH,YCOMMENT,IRESP) -CALL FMREAD(HFMFILE,'JMAX',CLUOUT0,'--',NPGDJMAX,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPFMFILE,'LAT0', XLAT0) +CALL IO_READ_FIELD(TPFMFILE,'LON0', XLON0) +CALL IO_READ_FIELD(TPFMFILE,'RPK', XRPK) +CALL IO_READ_FIELD(TPFMFILE,'BETA', XBETA) +CALL IO_READ_FIELD(TPFMFILE,'LATORI',XPGDLATOR) +CALL IO_READ_FIELD(TPFMFILE,'LONORI',XPGDLONOR) +CALL IO_READ_FIELD(TPFMFILE,'IMAX', NPGDIMAX) +CALL IO_READ_FIELD(TPFMFILE,'JMAX', NPGDJMAX) ! !20131010 recompute properly NPGDIMAX NPGDJMAX !GET_DIM_PHYS_ll impact 2nd one => prevent run failures @@ -192,31 +176,31 @@ CALL GET_DIM_PHYS_ll ( 'B',NPGDIMAX,NPGDJMAX) IF (.NOT.(ALLOCATED(XPGDXHAT))) ALLOCATE(XPGDXHAT(NPGDIMAX+2*JPHEXT)) IF (.NOT.(ALLOCATED(XPGDYHAT))) ALLOCATE(XPGDYHAT(NPGDJMAX+2*JPHEXT)) !20131023 change FMREAD option '--' -> 'XX' ou 'YY' for // reading -CALL FMREAD(HFMFILE,'XHAT',CLUOUT0,'XX',XPGDXHAT,IGRID,ILENCH,YCOMMENT,IRESP) -CALL FMREAD(HFMFILE,'YHAT',CLUOUT0,'YY',XPGDYHAT,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPFMFILE,'XHAT',XPGDXHAT) +CALL IO_READ_FIELD(TPFMFILE,'YHAT',XPGDYHAT) ! !* 3. Read the configuration (MODD_CONF) ! -CALL FMREAD(HFMFILE,'L1D',CLUOUT0,'--',G1D,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPFMFILE,'L1D',G1D) IF (IRESP/=0) THEN G1D=.FALSE. IF( (NPGDIMAX == 1).AND.(NPGDJMAX == 1) ) G1D=.TRUE. ENDIF ! -CALL FMREAD(HFMFILE,'L2D',CLUOUT0,'--',G2D,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPFMFILE,'L2D',G2D) IF (IRESP/=0) THEN G2D=.FALSE. IF( (NPGDIMAX /= 1).AND.(NPGDJMAX == 1) ) G2D=.TRUE. ENDIF ! -CALL FMREAD(HFMFILE,'PACK',CLUOUT0,'--',GPACK,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPFMFILE,'PACK',GPACK) IF (IRESP/=0) GPACK=.TRUE. ! CALL SET_FMPACK_ll(G1D,G2D,GPACK) !------------------------------------------------------------------------------- IF (IMASDEV<=45) THEN - CALL FMREAD(HFMFILE,'LATOR',CLUOUT0,'--',XPGDLATOR,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(HFMFILE,'LONOR',CLUOUT0,'--',XPGDLONOR,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPFMFILE,'LATOR',XPGDLATOR) + CALL IO_READ_FIELD(TPFMFILE,'LONOR',XPGDLONOR) ZXHATM = - 0.5 * (XPGDXHAT(1)+XPGDXHAT(2)) ZYHATM = - 0.5 * (XPGDYHAT(1)+XPGDYHAT(2)) CALL SM_LATLON(XPGDLATOR,XPGDLONOR,ZXHATM,ZYHATM,ZLATOR,ZLONOR) diff --git a/src/MNH/read_hgridn.f90 b/src/MNH/read_hgridn.f90 index 91e0c6711..983d599e0 100644 --- a/src/MNH/read_hgridn.f90 +++ b/src/MNH/read_hgridn.f90 @@ -12,9 +12,11 @@ ! ####################### ! INTERFACE - SUBROUTINE READ_HGRID_n(HFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE) + SUBROUTINE READ_HGRID_n(TPFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE) ! -CHARACTER (LEN=*), INTENT(IN) :: HFMFILE ! name of the file n +USE MODD_IO_ll, ONLY: TFILEDATA +! +TYPE(TFILEDATA), INTENT(IN) :: TPFMFILE ! file n CHARACTER(LEN=28), INTENT(OUT) :: HMY_NAME ! True Name of FM-file CHARACTER(LEN=28), INTENT(OUT) :: HDAD_NAME ! Name of father CHARACTER(LEN=2) , INTENT(OUT) :: HSTORAGE_TYPE @@ -25,7 +27,7 @@ END INTERFACE END MODULE MODI_READ_HGRID_n ! ! ################################################################# - SUBROUTINE READ_HGRID_n(HFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE) + SUBROUTINE READ_HGRID_n(TPFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE) ! ################################################################# ! !!**** *READ_HGRID_n* - to read grid information in FM file of model $n @@ -79,25 +81,25 @@ END MODULE MODI_READ_HGRID_n ! !* 0. DECLARATIONS ! -USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT, JPMODELMAX +USE MODD_CONF +USE MODD_DIM_n USE MODD_GRID USE MODD_GRID_n -USE MODD_DIM_n +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_LUNIT_n -USE MODD_CONF +USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT, JPMODELMAX ! USE MODE_FM USE MODE_FMREAD -USE MODE_MODELN_HANDLER -USE MODE_IO_ll -! USE MODE_GRIDPROJ +USE MODE_IO_ll +USE MODE_MODELN_HANDLER ! IMPLICIT NONE ! !* 0.1 declarations of arguments ! -CHARACTER (LEN=*), INTENT(IN) :: HFMFILE ! name of the file n +TYPE(TFILEDATA), INTENT(IN) :: TPFMFILE ! file n CHARACTER(LEN=28), INTENT(OUT) :: HMY_NAME ! True Name of FM-file CHARACTER(LEN=28), INTENT(OUT) :: HDAD_NAME ! Name of father CHARACTER(LEN=2) , INTENT(OUT) :: HSTORAGE_TYPE @@ -105,23 +107,17 @@ CHARACTER(LEN=2) , INTENT(OUT) :: HSTORAGE_TYPE !* 0.2 declarations of local variables ! INTEGER :: ILUOUT -CHARACTER (LEN=16) :: YRECFM -INTEGER :: ILENCH, IGRID, IRESP -CHARACTER (LEN=100) :: YCOMMENT +INTEGER :: IRESP REAL :: ZLAT0,ZLON0,ZRPK,ZBETA REAL :: ZEPS = 1.E-10 INTEGER :: IMASDEV INTEGER :: IMI -!$20140506 add YDIR for FMREAD -CHARACTER(LEN=2) :: YDIR - ! !------------------------------------------------------------------------------- REAL :: ZLATOR, ZLONOR, ZXHATM, ZYHATM !------------------------------------------------------------------------------- !JUAN REALZ INTEGER :: IIU,IJU -INTEGER :: NIMAX2,NJMAX2 !JUAN REALZ INTEGER :: IXOR, IYOR, IXEND, IYEND INTEGER :: IJPHEXT @@ -131,26 +127,10 @@ CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP) !* 1. General information : ! ------------------- ! -YRECFM='MY_NAME' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMREAD(HFMFILE,YRECFM,CLUOUT,'--',HMY_NAME,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='DAD_NAME' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMREAD(HFMFILE,YRECFM,CLUOUT,'--',HDAD_NAME,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='STORAGE_TYPE' -YCOMMENT=' ' -IGRID=0 -ILENCH=LEN(YCOMMENT) -CALL FMREAD(HFMFILE,YRECFM,CLUOUT,'--',HSTORAGE_TYPE,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='MASDEV' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT,'--',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPFMFILE,'MY_NAME', HMY_NAME) +CALL IO_READ_FIELD(TPFMFILE,'DAD_NAME', HDAD_NAME) +CALL IO_READ_FIELD(TPFMFILE,'STORAGE_TYPE',HSTORAGE_TYPE) +CALL IO_READ_FIELD(TPFMFILE,'MASDEV', IMASDEV) ! !* 2. Grid information : ! ---------------- @@ -158,16 +138,16 @@ CALL FMREAD(HFMFILE,YRECFM,CLUOUT,'--',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) IF(IMASDEV<=45 .AND. HSTORAGE_TYPE == 'PG') THEN LCARTESIAN=.FALSE. ELSE - CALL FMREAD(HFMFILE,'CARTESIAN',CLUOUT,'--',LCARTESIAN,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPFMFILE,'CARTESIAN',LCARTESIAN) ENDIF -CALL FMREAD(HFMFILE,'LAT0',CLUOUT,'--',ZLAT0,IGRID,ILENCH,YCOMMENT,IRESP) -CALL FMREAD(HFMFILE,'LON0',CLUOUT,'--',ZLON0,IGRID,ILENCH,YCOMMENT,IRESP) -CALL FMREAD(HFMFILE,'BETA',CLUOUT,'--',ZBETA,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPFMFILE,'LAT0',ZLAT0) +CALL IO_READ_FIELD(TPFMFILE,'LON0',ZLON0) +CALL IO_READ_FIELD(TPFMFILE,'BETA',ZBETA) IF(IRESP/=0) ZBETA=0. IF (.NOT.LCARTESIAN ) THEN - CALL FMREAD(HFMFILE,'RPK',CLUOUT,'--',ZRPK,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(HFMFILE,'LATORI',CLUOUT,'--',XLATORI,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(HFMFILE,'LONORI',CLUOUT,'--',XLONORI,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPFMFILE,'RPK', ZRPK) + CALL IO_READ_FIELD(TPFMFILE,'LATORI',XLATORI) + CALL IO_READ_FIELD(TPFMFILE,'LONORI',XLONORI) ENDIF ! IMI = GET_CURRENT_MODEL_INDEX() @@ -210,9 +190,9 @@ IF (CPROGRAM/='IDEAL ') THEN ! b) and arrays XXHAT, XYHAT, XZS, XZSMT are deallocated after this ! routine (as in ini_size_spawn.f90) !$20140506 try 'XX','YY' it is FMREADN0_LL scalar reading so leave '--' - CALL FMREAD(HFMFILE,'IMAX',CLUOUT,'--',NIMAX,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(HFMFILE,'JMAX',CLUOUT,'--',NJMAX,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(HFMFILE,'JPHEXT',CLUOUT,'--',IJPHEXT,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPFMFILE,'IMAX', NIMAX) + CALL IO_READ_FIELD(TPFMFILE,'JMAX', NJMAX) + CALL IO_READ_FIELD(TPFMFILE,'JPHEXT',IJPHEXT) IF ( IJPHEXT .NE. JPHEXT ) THEN IF (CPROGRAM == 'REAL' ) THEN WRITE(ILUOUT,FMT=*) ' READ_HGRID_N : JPHEXT in PRE_REAL1.nam/NAM_REAL_CONF ( or default value )& @@ -222,7 +202,7 @@ IF (CPROGRAM/='IDEAL ') THEN & JPHEXT=',JPHEXT END IF - WRITE(ILUOUT,FMT=*) ' different from PGD files=',HFMFILE ,' value JPHEXT=',IJPHEXT + WRITE(ILUOUT,FMT=*) ' different from PGD files=',TPFMFILE%CNAME ,' value JPHEXT=',IJPHEXT WRITE(ILUOUT,FMT=*) '-> JOB ABORTED' CALL CLOSE_ll(CLUOUT,IOSTAT=IRESP) CALL ABORT @@ -233,19 +213,19 @@ END IF !* 2.1 Read the configuration (MODD_CONF) ! IF (IMI == 1) THEN - CALL FMREAD(HFMFILE,'L1D',CLUOUT,'--',L1D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPFMFILE,'L1D',L1D) IF (IRESP/=0) THEN L1D=.FALSE. IF( (NIMAX == 1).AND.(NJMAX == 1) ) L1D=.TRUE. ENDIF ! - CALL FMREAD(HFMFILE,'L2D',CLUOUT,'--',L2D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPFMFILE,'L2D',L2D) IF (IRESP/=0) THEN L2D=.FALSE. IF( (NIMAX /= 1).AND.(NJMAX == 1) ) L2D=.TRUE. ENDIF ! - CALL FMREAD(HFMFILE,'PACK',CLUOUT,'--',LPACK,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPFMFILE,'PACK',LPACK) IF (IRESP/=0) LPACK=.TRUE. ! CALL SET_FMPACK_ll(L1D,L2D,LPACK) END IF @@ -274,11 +254,8 @@ ELSE ENDIF !JUAN REALZ -YDIR='XX' -CALL FMREAD(HFMFILE,'XHAT',CLUOUT,YDIR,XXHAT,IGRID,ILENCH,YCOMMENT,IRESP) -! -YDIR='YY' -CALL FMREAD(HFMFILE,'YHAT',CLUOUT,YDIR,XYHAT,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPFMFILE,'XHAT',XXHAT) +CALL IO_READ_FIELD(TPFMFILE,'YHAT',XYHAT) ! !JUAN REALZ IF ( CPROGRAM .EQ. "REAL " ) THEN @@ -288,9 +265,7 @@ IF (.NOT. (ASSOCIATED(XZS))) ALLOCATE(XZS(NIMAX+2*JPHEXT,NJMAX+2*JPHEXT)) ENDIF !JUAN REALZ -!$20140506 replace 'XY' by YDIR !! -YDIR='XY' -CALL FMREAD(HFMFILE,'ZS',CLUOUT,YDIR,XZS,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPFMFILE,'ZS',XZS) ! !JUAN REALZ IF ( CPROGRAM .EQ. "REAL " ) THEN @@ -303,16 +278,14 @@ ENDIF IF (IMASDEV<=46) THEN XZSMT = XZS ELSE -!$20140506 replace 'XY' by YDIR !! -YDIR='XY' - CALL FMREAD(HFMFILE,'ZSMT',CLUOUT,YDIR,XZSMT,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPFMFILE,'ZSMT',XZSMT) ! END IF ! !------------------------------------------------------------------------------- IF (IMASDEV<=45) THEN - CALL FMREAD(HFMFILE,'LATOR',CLUOUT,'--',XLATORI,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(HFMFILE,'LONOR',CLUOUT,'--',XLONORI,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPFMFILE,'LATOR',XLATORI) + CALL IO_READ_FIELD(TPFMFILE,'LONOR',XLONORI) ZXHATM = - 0.5 * (XXHAT(1)+XXHAT(2)) ZYHATM = - 0.5 * (XYHAT(1)+XYHAT(2)) CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR) diff --git a/src/MNH/read_precip_field.f90 b/src/MNH/read_precip_field.f90 index a1dd9add8..b05915238 100644 --- a/src/MNH/read_precip_field.f90 +++ b/src/MNH/read_precip_field.f90 @@ -16,37 +16,37 @@ ! INTERFACE ! - SUBROUTINE READ_PRECIP_FIELD(HINIFILE,HLUOUT,HPROGRAM,HCONF, & - HGETRCT,HGETRRT,HGETRST,HGETRGT,HGETRHT, & - PINPRC,PACPRC,PINDEP,PACDEP,PINPRR,PINPRR3D,PEVAP3D, & - PACPRR,PINPRS,PACPRS,PINPRG,PACPRG,PINPRH,PACPRH ) + SUBROUTINE READ_PRECIP_FIELD(TPINIFILE,HLUOUT,HPROGRAM,HCONF, & + HGETRCT,HGETRRT,HGETRST,HGETRGT,HGETRHT, & + PINPRC,PACPRC,PINDEP,PACDEP,PINPRR,PINPRR3D,PEVAP3D, & + PACPRR,PINPRS,PACPRS,PINPRG,PACPRG,PINPRH,PACPRH ) ! +USE MODD_IO_ll, ONLY : TFILEDATA ! !* 0.1 declarations of arguments ! -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! name of the initial file -CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing - ! of nested models -CHARACTER (LEN=*), INTENT(IN) :: HPROGRAM ! -CHARACTER (LEN=*), INTENT(IN) :: HCONF ! +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file +CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing of nested models +CHARACTER (LEN=*), INTENT(IN) :: HPROGRAM ! +CHARACTER (LEN=*), INTENT(IN) :: HCONF ! ! -CHARACTER (LEN=*), INTENT(IN) :: HGETRCT, HGETRRT, HGETRST, HGETRGT, HGETRHT - ! Get indicator RCT,RRT,RST,RGT,RHT -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC! Droplet instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRC! Droplet accumulated precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINDEP! Droplet instant deposition -REAL, DIMENSION(:,:), INTENT(INOUT) :: PACDEP! Droplet accumulated dep -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRR! Rain instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRR3D! Rain precipitation flux 3D -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D! Rain evaporation flux 3D -REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRR! Rain accumulated precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS! Snow instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRS! Snow accumulated precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG! Graupel instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRG! Graupel accumulated precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH! Hail instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRH! Hail accumulated precip +CHARACTER (LEN=*), INTENT(IN) :: HGETRCT, HGETRRT, HGETRST, HGETRGT, HGETRHT + ! Get indicator RCT,RRT,RST,RGT,RHT +! +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC ! Droplet instant precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRC ! Droplet accumulated precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINDEP ! Droplet instant deposition +REAL, DIMENSION(:,:), INTENT(INOUT) :: PACDEP ! Droplet accumulated dep +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRR ! Rain instant precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRR3D ! Rain precipitation flux 3D +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D ! Rain evaporation flux 3D +REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRR ! Rain accumulated precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS ! Snow instant precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRS ! Snow accumulated precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG ! Graupel instant precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRG ! Graupel accumulated precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH ! Hail instant precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRH ! Hail accumulated precip ! END SUBROUTINE READ_PRECIP_FIELD ! @@ -54,12 +54,12 @@ END INTERFACE ! END MODULE MODI_READ_PRECIP_FIELD ! -! ################################################################################ - SUBROUTINE READ_PRECIP_FIELD(HINIFILE,HLUOUT,HPROGRAM,HCONF, & - HGETRCT,HGETRRT,HGETRST,HGETRGT,HGETRHT, & - PINPRC,PACPRC,PINDEP,PACDEP,PINPRR,PINPRR3D,PEVAP3D, & - PACPRR,PINPRS,PACPRS,PINPRG,PACPRG,PINPRH,PACPRH ) -! ################################################################################ +! ############################################################################## + SUBROUTINE READ_PRECIP_FIELD(TPINIFILE,HLUOUT,HPROGRAM,HCONF, & + HGETRCT,HGETRRT,HGETRST,HGETRGT,HGETRHT, & + PINPRC,PACPRC,PINDEP,PACDEP,PINPRR,PINPRR3D,PEVAP3D, & + PACPRR,PINPRS,PACPRS,PINPRG,PACPRG,PINPRH,PACPRH ) +! ############################################################################## ! !!**** *READ_PRECIP_FIELD* - routine to read precipitation surface fields !! @@ -101,61 +101,56 @@ END MODULE MODI_READ_PRECIP_FIELD !----------------------------------------------------------------------------- ! !* 0. DECLARATIONS -USE MODE_FM -USE MODD_PARAM_ICE , ONLY : LDEPOSC +USE MODD_IO_ll, ONLY : TFILEDATA +USE MODD_PARAM_ICE, ONLY : LDEPOSC USE MODD_PARAM_C2R2, ONLY : LDEPOC ! +USE MODE_FIELD, ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME +USE MODE_FM USE MODE_FMREAD ! IMPLICIT NONE ! !* 0.1 declarations of arguments ! -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! name of the initial file -CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing - ! of nested models +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file +CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing of nested models +CHARACTER (LEN=*), INTENT(IN) :: HPROGRAM ! +CHARACTER (LEN=*), INTENT(IN) :: HCONF ! ! -CHARACTER (LEN=*), INTENT(IN) :: HGETRCT,HGETRRT, HGETRST, HGETRGT, HGETRHT - ! Get indicator RRT,RST,RGT,RHT -CHARACTER (LEN=*), INTENT(IN) :: HPROGRAM ! -CHARACTER (LEN=*), INTENT(IN) :: HCONF ! -! -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC! Droplet instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRC! Droplet accumulated precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINDEP! Droplet instant deposition -REAL, DIMENSION(:,:), INTENT(INOUT) :: PACDEP! Droplet accumulated dep -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRR! Rain instant precip -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRR3D! Rain precipitation flux 3D -REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D! Rain evaporation flux 3D -REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRR! Rain accumulated precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS! Snow instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRS! Snow accumulated precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG! Graupel instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRG! Graupel accumulated precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH! Hail instant precip -REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRH! Hail accumulated precip +CHARACTER (LEN=*), INTENT(IN) :: HGETRCT, HGETRRT, HGETRST, HGETRGT, HGETRHT + ! Get indicator RCT,RRT,RST,RGT,RHT +! +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC ! Droplet instant precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRC ! Droplet accumulated precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINDEP ! Droplet instant deposition +REAL, DIMENSION(:,:), INTENT(INOUT) :: PACDEP ! Droplet accumulated dep +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRR ! Rain instant precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRR3D ! Rain precipitation flux 3D +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D ! Rain evaporation flux 3D +REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRR ! Rain accumulated precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS ! Snow instant precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRS ! Snow accumulated precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG ! Graupel instant precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRG ! Graupel accumulated precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH ! Hail instant precip +REAL, DIMENSION(:,:), INTENT(INOUT) :: PACPRH ! Hail accumulated precip ! !* 0.2 declarations of local variables ! REAL, DIMENSION(SIZE(PINPRR,1),SIZE(PINPRR,2)) :: Z2D ! 2D array to read data REAL, DIMENSION(SIZE(PINPRR3D,1),SIZE(PINPRR3D,2),SIZE(PINPRR3D,3)) :: Z3D ! 3D array to read data ! in initial file -INTEGER :: IGRID,ILENCH,IRESP ! File -CHARACTER (LEN=16) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables -CHARACTER(LEN=2) :: YDIR +INTEGER :: IID +INTEGER :: IRESP CHARACTER(LEN=4) :: YGETRCT,YGETRRT,YGETRST,YGETRGT,YGETRHT -INTEGER :: ILUOUT ! Unit number for prints +TYPE(TFIELDDATA) :: TZFIELD ! !------------------------------------------------------------------------------- ! !* 1.. INITIALIZATION ! ---------------- ! -CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP) -! -YDIR='XY' -! IF ((HPROGRAM == 'MESONH') .AND. (HCONF == 'START')) THEN YGETRCT = 'INIT' YGETRRT = 'INIT' @@ -177,11 +172,16 @@ END IF IF (SIZE(PINPRC) /= 0 ) THEN SELECT CASE(YGETRCT) CASE ('READ') - YRECFM = 'INPRC' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z2D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FIND_FIELD_ID_FROM_MNHNAME('INPRC',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm hour-1' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP) IF (IRESP == 0) PINPRC(:,:)=Z2D(:,:)/(1000.*3600.) - YRECFM = 'ACPRC' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z2D,IGRID,ILENCH,YCOMMENT,IRESP) + ! + CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRC',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP) IF (IRESP == 0) PACPRC(:,:)=Z2D(:,:)/(1000.) CASE ('INIT') PINPRC(:,:) = 0.0 @@ -192,11 +192,16 @@ END IF IF (SIZE(PINPRC) /= 0 .AND. (LDEPOSC .OR. LDEPOC) ) THEN SELECT CASE(YGETRCT) CASE ('READ') - YRECFM = 'INDEP' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z2D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FIND_FIELD_ID_FROM_MNHNAME('INDEP',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm hour-1' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP) IF (IRESP == 0) PINDEP(:,:)=Z2D(:,:)/(1000.*3600.) - YRECFM = 'ACPRC' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z2D,IGRID,ILENCH,YCOMMENT,IRESP) + ! + CALL FIND_FIELD_ID_FROM_MNHNAME('ACDEP',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP) IF (IRESP == 0) PACDEP(:,:)=Z2D(:,:)/(1000.) CASE ('INIT') PINDEP(:,:) = 0.0 @@ -207,17 +212,22 @@ END IF IF (SIZE(PINPRR) /= 0 ) THEN SELECT CASE(YGETRRT) CASE ('READ') - YRECFM = 'INPRR' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z2D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FIND_FIELD_ID_FROM_MNHNAME('INPRR',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm hour-1' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP) IF (IRESP == 0) PINPRR(:,:)=Z2D(:,:)/(1000.*3600.) - YRECFM = 'INPRR3D' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH,YCOMMENT,IRESP) + ! + CALL IO_READ_FIELD(TPINIFILE,'INPRR3D',Z3D,IRESP) IF (IRESP == 0) PINPRR3D(:,:,:)=Z3D(:,:,:) - YRECFM = 'EVAP3D' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH,YCOMMENT,IRESP) + ! + CALL IO_READ_FIELD(TPINIFILE,'EVAP3D',Z3D,IRESP) IF (IRESP == 0) PEVAP3D(:,:,:)=Z3D(:,:,:) - YRECFM = 'ACPRR' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z2D,IGRID,ILENCH,YCOMMENT,IRESP) + ! + CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP) IF (IRESP == 0) PACPRR(:,:)=Z2D(:,:)/(1000.) CASE ('INIT') PINPRR(:,:) = 0.0 @@ -230,11 +240,16 @@ END IF IF (SIZE(PINPRS) /= 0 ) THEN SELECT CASE(YGETRST) CASE ('READ') - YRECFM = 'INPRS' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z2D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FIND_FIELD_ID_FROM_MNHNAME('INPRS',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm hour-1' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP) IF (IRESP == 0) PINPRS(:,:)=Z2D(:,:)/(1000.*3600.) - YRECFM = 'ACPRS' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z2D,IGRID,ILENCH,YCOMMENT,IRESP) + ! + CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRS',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP) IF (IRESP == 0) PACPRS(:,:)=Z2D(:,:)/(1000.) CASE ('INIT') PINPRS(:,:) = 0.0 @@ -245,11 +260,16 @@ END IF IF (SIZE(PINPRG) /= 0 ) THEN SELECT CASE(YGETRGT) CASE ('READ') - YRECFM = 'INPRG' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z2D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FIND_FIELD_ID_FROM_MNHNAME('INPRG',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm hour-1' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP) IF (IRESP == 0) PINPRG(:,:)=Z2D(:,:)/(1000.*3600.) - YRECFM = 'ACPRG' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z2D,IGRID,ILENCH,YCOMMENT,IRESP) + ! + CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRG',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP) IF (IRESP == 0) PACPRG(:,:)=Z2D(:,:)/(1000.) CASE ('INIT') PINPRG(:,:) = 0.0 @@ -260,11 +280,16 @@ END IF IF (SIZE(PINPRH) /= 0 ) THEN SELECT CASE(YGETRHT) CASE ('READ') - YRECFM = 'INPRH' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z2D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FIND_FIELD_ID_FROM_MNHNAME('INPRH',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm hour-1' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP) IF (IRESP == 0) PINPRH(:,:)=Z2D(:,:)/(1000.*3600.) - YRECFM = 'ACPRH' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z2D,IGRID,ILENCH,YCOMMENT,IRESP) + ! + CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRH',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP) IF (IRESP == 0) PACPRH(:,:)=Z2D(:,:)/(1000.) CASE ('INIT') PINPRH(:,:) = 0.0 diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90 index 74917206e..ed021d611 100644 --- a/src/MNH/read_surf_mnh.f90 +++ b/src/MNH/read_surf_mnh.f90 @@ -48,11 +48,12 @@ USE MODD_CONF, ONLY : CPROGRAM USE MODD_GRID, ONLY: XRPK,XBETA,XLAT0,XLON0 USE MODD_PARAMETERS, ONLY: JPHEXT, XUNDEF ! +USE MODE_FIELD, ONLY : TFIELDDATA,TYPEREAL USE MODE_FM USE MODE_FMREAD USE MODE_GRIDPROJ ! -USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, NLUOUT +USE MODD_IO_SURF_MNH, ONLY : COUT, TPINFILE, NLUOUT ! USE MODI_GET_SURF_UNDEF ! @@ -77,10 +78,11 @@ REAL,DIMENSION(:), ALLOCATABLE :: ZXHAT,ZYHAT REAL :: ZLATOR,ZLONOR,ZXHATM,ZYHATM,ZLATORI,ZLONORI REAL :: ZRPK, ZBETA, ZLAT0, ZLON0 CHARACTER(LEN=100):: YCOMMENT ! comment +TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------- ! IF (HREC=='LONORI' .OR. HREC=='LATORI') THEN - CALL FMREAD(CFILE,'MASDEV',COUT,'--',IMASDEV,IGRID,ILENCH,HCOMMENT,KRESP) + CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV) IF (IMASDEV<=45) THEN ZLATORI = XUNDEF ZLONORI = XUNDEF @@ -90,18 +92,18 @@ IF (HREC=='LONORI' .OR. HREC=='LATORI') THEN ZRPK = XRPK ZBETA = XBETA !* reads projection and grid data in the file - CALL FMREAD(CFILE,'LAT0',COUT,'--',XLAT0,IGRID,ILENCH,HCOMMENT,KRESP) - CALL FMREAD(CFILE,'LON0',COUT,'--',XLON0,IGRID,ILENCH,HCOMMENT,KRESP) - CALL FMREAD(CFILE,'RPK',COUT,'--',XRPK,IGRID,ILENCH,HCOMMENT,KRESP) - CALL FMREAD(CFILE,'BETA',COUT,'--',XBETA,IGRID,ILENCH,HCOMMENT,KRESP) + CALL IO_READ_FIELD(TPINFILE,'LAT0',XLAT0) + CALL IO_READ_FIELD(TPINFILE,'LON0',XLON0) + CALL IO_READ_FIELD(TPINFILE,'RPK', XRPK) + CALL IO_READ_FIELD(TPINFILE,'BETA',XBETA) ! - CALL FMREAD(CFILE,'IMAX',COUT,'--',IIMAX,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CFILE,'JMAX',COUT,'--',IJMAX,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINFILE,'IMAX',IIMAX) + CALL IO_READ_FIELD(TPINFILE,'JMAX',IJMAX) ALLOCATE(ZXHAT(IIMAX+2*JPHEXT),ZYHAT(IJMAX+2*JPHEXT)) - CALL FMREAD(CFILE,'XHAT',COUT,'--',ZXHAT,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CFILE,'YHAT',COUT,'--',ZYHAT,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CFILE,'LATOR',COUT,'--',ZLATOR,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(CFILE,'LONOR',COUT,'--',ZLONOR,IGRID,ILENCH,HCOMMENT,KRESP) + CALL IO_READ_FIELD(TPINFILE,'XHAT',ZXHAT) + CALL IO_READ_FIELD(TPINFILE,'YHAT',ZYHAT) + CALL IO_READ_FIELD(TPINFILE,'LATOR',ZLATOR) + CALL IO_READ_FIELD(TPINFILE,'LONOR',ZLONOR) ZXHATM = - 0.5 * (ZXHAT(1)+ZXHAT(2)) ZYHATM = - 0.5 * (ZYHAT(1)+ZYHAT(2)) DEALLOCATE(ZXHAT,ZYHAT) @@ -120,9 +122,23 @@ END IF !------------------------------------------------------------------------------- -CALL FMREAD(CFILE,HREC,COUT,'--',PFIELD,IGRID,ILENCH,HCOMMENT,KRESP) +IF ( HREC=='LAT0' .OR. HREC=='LON0' .OR. HREC=='RPK' .OR. HREC=='BETA' & + .OR. HREC=='LATORI'.OR. HREC=='LONORI' ) THEN + CALL IO_READ_FIELD(TPINFILE,HREC,PFIELD,KRESP) +ELSE + TZFIELD%CMNHNAME = TRIM(HREC) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(HREC) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' !Expected comment is not known + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,PFIELD,KRESP) +END IF -IF (KRESP /=0) THEN +IF (KRESP /=0 .AND. KRESP/=-111) THEN WRITE(NLUOUT,*) 'WARNING' WRITE(NLUOUT,*) '-------' WRITE(NLUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP @@ -173,6 +189,7 @@ END SUBROUTINE READ_SURFX0_MNH !* 0. DECLARATIONS ! ------------ ! +USE MODE_FIELD, ONLY : TFIELDDATA,TYPEREAL USE MODE_FM USE MODE_FMREAD USE MODE_ll @@ -180,7 +197,7 @@ USE MODE_IO_ll ! USE MODD_CST, ONLY : XPI ! -USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE , NLUOUT, NMASK, & +USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, TPINFILE, NLUOUT, NMASK, & NIU, NJU, NIB, NJB, NIE, NJE, & NIU_ALL, NJU_ALL, NIB_ALL, & NJB_ALL, NIE_ALL, NJE_ALL, & @@ -223,6 +240,7 @@ CHARACTER(LEN=2) :: YSTORAGE_TYPE INTEGER :: IIU, IJU, IIB, IJB, IIE, IJE ! dimensions of horizontal fields INTEGER, DIMENSION(:), ALLOCATABLE :: IMASK ! mask for packing REAL :: ZUNDEF ! undefined value in SURFEX +TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------- ! KRESP = 0 @@ -251,12 +269,12 @@ END IF ! IF (HREC=='LAT') THEN - CALL FMREAD(CFILE,'LAT0',COUT,'--',ZW,IGRID,ILENCH,HCOMMENT,KRESP) + CALL IO_READ_FIELD(TPINFILE,'LAT0',ZW,KRESP) PFIELD(:) = ZW ELSE IF (HREC=='LON') THEN - CALL FMREAD(CFILE,'LON0',COUT,'--',ZW,IGRID,ILENCH,HCOMMENT,KRESP) + CALL IO_READ_FIELD(TPINFILE,'LON0',ZW,KRESP) PFIELD(:) = ZW ELSE IF (HREC=='MESH_SIZE') THEN @@ -269,11 +287,20 @@ ELSE IF (HREC=='XX') THEN ALLOCATE(ZWORK1D(IIU)) ALLOCATE(ZWORK (IIU,IJU)) ZWORK(:,:) = 0. + TZFIELD%CMNHNAME = 'XHAT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: XHAT' + TZFIELD%CUNITS = '' + TZFIELD%CCOMMENT = '' !Expected comment is not known + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 1 IF (HDIR/='A') THEN - CALL FMREAD(CFILE,'XHAT',COUT,'XX',ZWORK1D,IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CDIR = 'XX' ELSE - CALL FMREAD(CFILE,'XHAT',COUT,'--',ZWORK1D,IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CDIR = '--' END IF + CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP) DO JJ = 1,IJU ZWORK(IIB:IIE,JJ) = 0.5 * ZWORK1D(IIB:IIE) + 0.5 * ZWORK1D(IIB+1:IIE+1) END DO @@ -285,11 +312,20 @@ ELSE IF (HREC=='DX') THEN ALLOCATE(ZWORK1D(IIU)) ALLOCATE(ZWORK (IIU,IJU)) ZWORK(:,:) = 0. + TZFIELD%CMNHNAME = 'XHAT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: XHAT' + TZFIELD%CUNITS = '' + TZFIELD%CCOMMENT = '' !Expected comment is not known + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 1 IF (HDIR/='A') THEN - CALL FMREAD(CFILE,'XHAT',COUT,'XX',ZWORK1D,IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CDIR = 'XX' ELSE - CALL FMREAD(CFILE,'XHAT',COUT,'--',ZWORK1D,IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CDIR = '--' END IF + CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP) DO JJ = 1,IJU ZWORK(IIB:IIE,JJ) = - ZWORK1D(IIB:IIE) + ZWORK1D(IIB+1:IIE+1) END DO @@ -301,11 +337,20 @@ ELSE IF (HREC=='YY') THEN ALLOCATE(ZWORK1D(IJU)) ALLOCATE(ZWORK (IIU,IJU)) ZWORK(:,:) = 0. + TZFIELD%CMNHNAME = 'YHAT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: YHAT' + TZFIELD%CUNITS = '' + TZFIELD%CCOMMENT = '' !Expected comment is not known + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 1 IF (HDIR/='A') THEN - CALL FMREAD(CFILE,'YHAT',COUT,'YY',ZWORK1D,IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CDIR = 'YY' ELSE - CALL FMREAD(CFILE,'YHAT',COUT,'--',ZWORK1D,IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CDIR = '--' END IF + CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP) DO JI = 1,IIU ZWORK(JI,IJB:IJE) = 0.5 * ZWORK1D(IJB:IJE) + 0.5 * ZWORK1D(IJB+1:IJE+1) END DO @@ -317,11 +362,20 @@ ELSE IF (HREC=='DY') THEN ALLOCATE(ZWORK1D(IJU)) ALLOCATE(ZWORK (IIU,IJU)) ZWORK(:,:) = 0. + TZFIELD%CMNHNAME = 'YHAT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: YHAT' + TZFIELD%CUNITS = '' + TZFIELD%CCOMMENT = '' !Expected comment is not known + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 1 IF (HDIR/='A') THEN - CALL FMREAD(CFILE,'YHAT',COUT,'YY',ZWORK1D,IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CDIR = 'YY' ELSE - CALL FMREAD(CFILE,'YHAT',COUT,'--',ZWORK1D,IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CDIR = '--' END IF + CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP) DO JI = 1,IIU ZWORK(JI,IJB:IJE) = - ZWORK1D(IJB:IJE) + ZWORK1D(IJB+1:IJE+1) END DO @@ -336,9 +390,9 @@ ELSE YREC = ' ' YREC(1:LEN(HREC)) = HREC IF (HREC(1:8)=='Q_CANYON') THEN - CALL FMREAD(CFILE,'MASDEV',COUT,'--',IMASDEV,IGRID,ILENCH,HCOMMENT,KRESP) + CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV) IF (IMASDEV<=45) THEN - CALL FMREAD(CFILE,'STORAGE_TYPE',COUT,'--',YSTORAGE_TYPE,IGRID,ILENCH,HCOMMENT,KRESP) + CALL IO_READ_FIELD(TPINFILE,'STORAGE_TYPE',YSTORAGE_TYPE) IF (YSTORAGE_TYPE=='TT') THEN PFIELD = 0. DEALLOCATE(IMASK) @@ -349,29 +403,42 @@ ELSE END IF END IF IF (HREC(1:8)=='T_CANYON') THEN - CALL FMREAD(CFILE,'MASDEV',COUT,'--',IMASDEV,IGRID,ILENCH,HCOMMENT,KRESP) + CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV) IF (IMASDEV<=45) THEN - CALL FMREAD(CFILE,'STORAGE_TYPE',COUT,'--',YSTORAGE_TYPE,IGRID,ILENCH,HCOMMENT,KRESP) + CALL IO_READ_FIELD(TPINFILE,'STORAGE_TYPE',YSTORAGE_TYPE) IF (YSTORAGE_TYPE=='TT') YREC = 'T_ROAD1 ' END IF END IF IF (HREC(1:7)=='SSO_DIR') THEN - CALL FMREAD(CFILE,'MASDEV',COUT,'--',IMASDEV,IGRID,ILENCH,HCOMMENT,KRESP) + CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV) IF (IMASDEV<=45) YREC = 'SSO_DIRECTION ' END IF ! ALLOCATE(ZWORK(IIU,IJU)) ! + TZFIELD%CMNHNAME = TRIM(YREC) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(YREC) + TZFIELD%CUNITS = '' + TZFIELD%CCOMMENT = '' !Expected comment is not known + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL IF (HDIR=='H') THEN - CALL FMREAD(CFILE,YREC,COUT,'XY',ZWORK(:,:),IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CDIR = 'XY' + TZFIELD%NDIMS = 2 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP) ELSEIF (HDIR=='A') THEN - CALL FMREAD(CFILE,YREC,COUT,'--',ZWORK(:,:),IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CDIR = '--' + TZFIELD%NDIMS = 2 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP) ELSE - CALL FMREAD(CFILE,YREC,COUT,'--',PFIELD(:),IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CDIR = '--' + TZFIELD%NDIMS = 1 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,PFIELD,KRESP) END IF ! - IF (KRESP /=0) THEN + IF (KRESP /=0 .AND. KRESP/=-111) THEN WRITE(NLUOUT,*) 'WARNING' WRITE(NLUOUT,*) '-------' WRITE(NLUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP @@ -441,12 +508,13 @@ END SUBROUTINE READ_SURFX1_MNH !* 0. DECLARATIONS ! ------------ ! +USE MODE_ll +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL USE MODE_FM USE MODE_FMREAD -USE MODE_ll USE MODE_IO_ll ! -USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE , NLUOUT, NMASK, NIU, NJU, NIB, NJB, NIE, NJE, & +USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE , NLUOUT, TPINFILE, NMASK, NIU, NJU, NIB, NJB, NIE, NJE, & NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL, NIE_ALL, NJE_ALL, NMASK_ALL USE MODD_PARAMETERS, ONLY: XUNDEF ! @@ -478,7 +546,7 @@ INTEGER :: JP ! loop index REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZWORK ! work array read in the file REAL :: ZUNDEF ! undefined value in SURFEX - +TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------- ! ! @@ -490,17 +558,30 @@ REAL :: ZUNDEF ! undefined value in SURFEX ! ! ! +TZFIELD%CMNHNAME = TRIM(HREC) +TZFIELD%CSTDNAME = '' +TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(HREC) +TZFIELD%CUNITS = '' +TZFIELD%CCOMMENT = '' !Expected comment is not known +TZFIELD%NGRID = 4 +TZFIELD%NTYPE = TYPEREAL IF (HDIR=='H') THEN ALLOCATE(ZWORK(NIU,NJU,SIZE(PFIELD,2))) - CALL FMREAD(CFILE,HREC,COUT,'XY',ZWORK(:,:,:),IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CDIR = 'XY' + TZFIELD%NDIMS = 3 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP) ELSEIF (HDIR=='A') THEN ALLOCATE(ZWORK(NIU_ALL,NJU_ALL,SIZE(PFIELD,2))) - CALL FMREAD(CFILE,HREC,COUT,'--',ZWORK(:,:,:),IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CDIR = '--' + TZFIELD%NDIMS = 3 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP) ELSE - CALL FMREAD(CFILE,HREC,COUT,'--',PFIELD(:,:),IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CDIR = '--' + TZFIELD%NDIMS = 2 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,PFIELD,KRESP) END IF ! - IF (KRESP /=0) THEN + IF (KRESP /=0 .AND. KRESP/=-111) THEN WRITE(NLUOUT,*) 'WARNING' WRITE(NLUOUT,*) '-------' WRITE(NLUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP @@ -567,15 +648,16 @@ END SUBROUTINE READ_SURFX2_MNH !* 0. DECLARATIONS ! ------------ ! +USE MODE_ll +USE MODE_FIELD, ONLY: TFIELDDATA,TYPELOG,TYPEREAL USE MODE_FM USE MODE_FMREAD -USE MODE_ll USE MODE_IO_ll ! USE MODD_DATA_COVER_PAR, ONLY : JPCOVER USE MODD_CST, ONLY : XPI ! -USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE , NLUOUT, NMASK, & +USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, TPINFILE, NLUOUT, NMASK, & NIU, NJU, NIB, NJB, NIE, NJE, & NIU_ALL, NJU_ALL, NIB_ALL, & NJB_ALL, NIE_ALL, NJE_ALL, & @@ -604,7 +686,6 @@ CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : INTEGER :: IGRID ! IGRID : grid indicator INTEGER :: ILENCH ! ILENCH : length of comment string -INTEGER :: IMASDEV CHARACTER(LEN=20) :: YREC CHARACTER(LEN=2) :: YDIR CHARACTER(LEN=2) :: YSTORAGE_TYPE @@ -615,11 +696,14 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: IMASK ! mask for packing INTEGER :: NCOVER,ICOVER,JL2 REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZWORK3D !JUANZ +INTEGER :: IRESP INTEGER :: IVERSION, IBUGFIX LOGICAL :: GCOVER_PACKED ! .T. if COVER are all packed into one field +TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------- ! KRESP = 0 +IRESP = 0 ! IF (HDIR=='A') THEN YDIR="--" @@ -650,32 +734,57 @@ NCOVER=COUNT(OFLAG) ALLOCATE (ZWORK3D(IIU,IJU,NCOVER)) ZWORK3D(:,:,:) = 0.0 ! - -CALL FMREAD(CFILE,'VERSION',COUT,'--',IVERSION,IGRID,ILENCH,HCOMMENT,KRESP) -!GAELLE CALL FMREAD(CFILE,'BUGFIX',COUT,'--',IBUGFIX,IGRID,ILENCH,HCOMMENT,KRESP) -CALL FMREAD(CFILE,'BUG ',COUT,'--',IBUGFIX,IGRID,ILENCH,HCOMMENT,KRESP) +CALL IO_READ_FIELD(TPINFILE,'VERSION',IVERSION) +CALL IO_READ_FIELD(TPINFILE,'BUG', IBUGFIX) IF (IVERSION<7 .OR. (IVERSION==7 .AND. IBUGFIX==0)) THEN GCOVER_PACKED = .FALSE. ELSE - CALL FMREAD(CFILE,'COVER_PACKED',COUT,'--',GCOVER_PACKED,IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CMNHNAME = 'COVER_PACKED' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: COVER_PACKED' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPELOG + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,GCOVER_PACKED) END IF ! IF (.NOT. GCOVER_PACKED) THEN - ICOVER=0 - DO JL2=1,SIZE(OFLAG) - WRITE(YREC,'(A5,I3.3)') 'COVER',JL2 - IF (OFLAG(JL2)) THEN - ICOVER=ICOVER+1 - CALL FMREAD(CFILE,YREC,COUT,YDIR,ZWORK3D(:,:,ICOVER),IGRID,ILENCH,HCOMMENT,KRESP) - END IF - END DO - + ICOVER=0 + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = '' + TZFIELD%CCOMMENT = '' !Expected comment is not known + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + DO JL2=1,SIZE(OFLAG) + WRITE(YREC,'(A5,I3.3)') 'COVER',JL2 + TZFIELD%CMNHNAME = TRIM(YREC) + TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(YREC) + TZFIELD%CDIR = YDIR + IF (OFLAG(JL2)) THEN + ICOVER=ICOVER+1 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK3D(:,:,ICOVER),IRESP) + END IF + IF (IRESP/=0 .AND. IRESP/=-111) KRESP=IRESP + END DO ELSE - CALL FMREAD(CFILE,HREC,COUT,YDIR,ZWORK3D(:,:,:),IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CMNHNAME = TRIM(HREC) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(HREC) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = YDIR + TZFIELD%CCOMMENT = '' !Expected comment is not known + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK3D(:,:,:),KRESP) END IF ! -IF (KRESP /=0) THEN +IF (KRESP /=0 .AND. KRESP/=-111) THEN WRITE(NLUOUT,*) 'WARNING' WRITE(NLUOUT,*) '-------' WRITE(NLUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP @@ -688,8 +797,7 @@ ELSE IF (HDIR=='H' .OR. HDIR=='A') THEN END IF ! DEALLOCATE(ZWORK3D) - - +! DEALLOCATE(IMASK) !------------------------------------------------------------------------------- END SUBROUTINE READ_SURFX2COV_MNH @@ -736,6 +844,7 @@ END SUBROUTINE READ_SURFX2COV_MNH !* 0. DECLARATIONS ! ------------ ! +USE MODE_FIELD, ONLY: TFIELDDATA,TYPELOG,TYPEREAL USE MODE_FM USE MODE_FMREAD USE MODE_ll @@ -743,7 +852,7 @@ USE MODE_IO_ll ! USE MODD_CST, ONLY : XPI ! -USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE , NLUOUT, NMASK, & +USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, TPINFILE, NLUOUT, NMASK, & NIU, NJU, NIB, NJB, NIE, NJE, & NIU_ALL, NJU_ALL, NIB_ALL, & NJB_ALL, NIE_ALL, NJE_ALL, & @@ -772,7 +881,6 @@ CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : INTEGER :: IGRID ! IGRID : grid indicator INTEGER :: ILENCH ! ILENCH : length of comment string -INTEGER :: IMASDEV CHARACTER(LEN=20) :: YREC CHARACTER(LEN=2) :: YDIR CHARACTER(LEN=2) :: YSTORAGE_TYPE @@ -785,7 +893,8 @@ REAL,DIMENSION(:,:), ALLOCATABLE :: ZWORK2D !JUANZ INTEGER :: IVERSION, IBUGFIX LOGICAL :: GCOVER_PACKED ! .T. if COVER are all packed into one field - CHARACTER(LEN=1) :: YDIR1 +CHARACTER(LEN=1) :: YDIR1 +TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------- ! KRESP = 0 @@ -821,30 +930,45 @@ END IF ALLOCATE (ZWORK2D(IIU,IJU)) ZWORK2D(:,:) = 0.0 ! - -CALL FMREAD(CFILE,'VERSION',COUT,'--',IVERSION,IGRID,ILENCH,HCOMMENT,KRESP) -!GAELLE CALL FMREAD(CFILE,'BUGFIX',COUT,'--',IBUGFIX,IGRID,ILENCH,HCOMMENT,KRESP) -CALL FMREAD(CFILE,'BUG ',COUT,'--',IBUGFIX,IGRID,ILENCH,HCOMMENT,KRESP) +CALL IO_READ_FIELD(TPINFILE,'VERSION',IVERSION) +CALL IO_READ_FIELD(TPINFILE,'BUG', IBUGFIX) IF (IVERSION<7 .OR. (IVERSION==7 .AND. IBUGFIX==0)) THEN GCOVER_PACKED = .FALSE. ELSE - CALL FMREAD(CFILE,'COVER_PACKED',COUT,'--',GCOVER_PACKED,IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CMNHNAME = 'COVER_PACKED' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: COVER_PACKED' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPELOG + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,GCOVER_PACKED,KRESP) END IF ! IF (.NOT. GCOVER_PACKED) THEN WRITE(YREC,'(A5,I3.3)') 'COVER',KCOVER - CALL FMREAD(CFILE,YREC,COUT,YDIR1,ZWORK2D(:,:),IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CMNHNAME = TRIM(YREC) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(YREC) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = YDIR1 + TZFIELD%CCOMMENT = '' !Expected comment is not known + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 2 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK2D,KRESP) ELSE WRITE(NLUOUT,*) 'WARNING' WRITE(NLUOUT,*) '-------' WRITE(NLUOUT,*) 'error : GCOVER_PACKED = ', GCOVER_PACKED, ' and we try to read the covers one by one ' WRITE(NLUOUT,*) ' ' CALL ABORT -! CALL FMREAD(CFILE,HREC,COUT,YDIR,ZWORK2D(:,:,:),IGRID,ILENCH,HCOMMENT,KRESP) END IF ! -IF (KRESP /=0) THEN +IF (KRESP/=0 .AND. KRESP/=-111) THEN WRITE(NLUOUT,*) 'WARNING' WRITE(NLUOUT,*) '-------' WRITE(NLUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP @@ -902,10 +1026,11 @@ END SUBROUTINE READ_SURFX2COV_1COV_MNH ! ------------ ! USE MODE_ll +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEINT USE MODE_FM USE MODE_FMREAD ! -USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE , NLUOUT, NMASK, & +USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, TPINFILE, NLUOUT, NMASK, & NIU, NJU, NIB, NJB, NIE, NJE USE MODD_CONF, ONLY : CPROGRAM ! @@ -940,11 +1065,14 @@ CHARACTER(LEN=16) :: YRECFM INTEGER :: NCOVER,ICOVER,IKL2 REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZWORK3D !JUANZ +TYPE(TFIELDDATA) :: TZFIELD ! !------------------------------------------------------------------------------- ! -CALL FMREAD(CFILE,'MASDEV',COUT,'--',IMASDEV,IGRID,ILENCH,HCOMMENT,KRESP) -CALL FMREAD(CFILE,'BUGFIX',COUT,'--',IBUGFIX,IGRID,ILENCH,HCOMMENT,KRESP) +KRESP=0 +! +CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV) +CALL IO_READ_FIELD(TPINFILE,'BUGFIX',IBUGFIX) ! IF ((HREC=='DIM_FULL' .OR. HREC=='DIM_NATURE' .OR. HREC=='DIM_SEA' & .OR. HREC=='DIM_WATER' .OR. HREC=='DIM_TOWN')& @@ -1016,13 +1144,22 @@ IF ((HREC=='DIM_FULL' .OR. HREC=='DIM_NATURE' .OR. HREC=='DIM_SEA' & ELSE IF (HREC=='DIM_FULL' .AND. ( CPROGRAM=='IDEAL ' .OR. & CPROGRAM=='SPAWN ' .OR. CPROGRAM=='ZOOMPG' ))THEN - CALL FMREAD(CFILE,'IMAX',COUT,'--',IIMAX,IGRID,ILENCH,HCOMMENT,KRESP) - CALL FMREAD(CFILE,'JMAX',COUT,'--',IJMAX,IGRID,ILENCH,HCOMMENT,KRESP) + CALL IO_READ_FIELD(TPINFILE,'IMAX',IIMAX) + CALL IO_READ_FIELD(TPINFILE,'JMAX',IJMAX) KFIELD = IIMAX * IJMAX ELSE - CALL FMREAD(CFILE,HREC,COUT,'--',KFIELD,IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CMNHNAME = TRIM(HREC) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(HREC) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' !Expected comment is not known + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEINT + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,KFIELD,KRESP) - IF (KRESP /=0) THEN + IF (KRESP/=0 .AND. KRESP/=-111) THEN WRITE(NLUOUT,*) 'WARNING' WRITE(NLUOUT,*) '-------' WRITE(NLUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP @@ -1116,7 +1253,7 @@ ELSE IF (HDIR=='H') THEN CALL FMREAD(CFILE,HREC,COUT,'XY',IWORK(:,:),IGRID,ILENCH,HCOMMENT,KRESP) ! - IF (KRESP /=0) THEN + IF (KRESP /=0 .AND. KRESP/=-111) THEN WRITE(NLUOUT,*) 'WARNING' WRITE(NLUOUT,*) '-------' WRITE(NLUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP @@ -1175,12 +1312,13 @@ END SUBROUTINE READ_SURFN1_MNH ! ------------ ! USE MODE_ll +USE MODE_FIELD, ONLY: TFIELDDATA,TYPECHAR USE MODE_FM USE MODE_FMREAD ! USE MODE_POS ! -USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, NLUOUT +USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, TPINFILE, NLUOUT USE MODD_CONF, ONLY : LCARTESIAN, CPROGRAM USE MODD_LUNIT, ONLY : CPGDFILE ! @@ -1207,11 +1345,14 @@ CHARACTER(LEN=32) :: YDESFM ! .des file LOGICAL :: GFOUND CHARACTER(LEN=4) :: CTURB,CRAD,CGROUND,CCLOUD,CDCONV,CELEC CHARACTER(LEN=6) :: CSEA_FLUX +TYPE(TFIELDDATA) :: TZFIELD NAMELIST/NAM_PARAMn/CTURB,CRAD,CGROUND,CCLOUD,CDCONV,CSEA_FLUX, CELEC !---------------------------------------------------------------------------- +! +KRESP = 0 ! On lit la version de Mesonh usilisée pour fabriquer le fichier ! -CALL FMREAD(CFILE,'MASDEV',COUT,'--',IMASDEV,IGRID,ILENCH,HCOMMENT,KRESP) +CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV) IF (HREC=='SNOW_VEG_TYPE'.AND.IMASDEV<46) THEN HFIELD='D95' @@ -1262,9 +1403,18 @@ CALL ABORT END IF ELSE - CALL FMREAD(CFILE,HREC,COUT,'--',HFIELD,IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CMNHNAME = TRIM(HREC) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(HREC) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' !Expected comment is not known + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPECHAR + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,HFIELD,KRESP) ! - IF (KRESP /=0) THEN + IF (KRESP/=0 .AND. KRESP/=-111) THEN WRITE(NLUOUT,*) 'WARNING' WRITE(NLUOUT,*) '-------' WRITE(NLUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP @@ -1321,12 +1471,15 @@ END SUBROUTINE READ_SURFC0_MNH !* 0. DECLARATIONS ! ------------ ! +USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE , TPINFILE, NLUOUT, NMASK, & + NIU, NJU, NIB, NJB, NIE, NJE +! +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEINT,TYPELOG USE MODE_FM USE MODE_FMREAD +! USE MODI_PACK_2D_1D ! -USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE , NLUOUT, NMASK, & - NIU, NJU, NIB, NJB, NIE, NJE ! ! IMPLICIT NONE @@ -1350,41 +1503,57 @@ INTEGER :: ILENCH ! ILENCH : length of comment string LOGICAL, DIMENSION(:,:), ALLOCATABLE :: GWORK ! work array read in the file INTEGER, DIMENSION(:,:), ALLOCATABLE :: IWORK ! work array read in the file - +TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------- IF (HDIR=='-') THEN - CALL FMREAD(CFILE,HREC,COUT,'--',OFIELD(:),IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CMNHNAME = TRIM(HREC) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(HREC) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' !Expected comment is not known + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPELOG + TZFIELD%NDIMS = 1 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,OFIELD,KRESP) - IF (KRESP /=0) THEN - WRITE(NLUOUT,*) 'WARNING' - WRITE(NLUOUT,*) '-------' - WRITE(NLUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP - WRITE(NLUOUT,*) 'default value may be used, who knows???' - WRITE(NLUOUT,*) ' ' - ENDIF + IF (KRESP/=0 .AND. KRESP/=-111) THEN + WRITE(NLUOUT,*) 'WARNING' + WRITE(NLUOUT,*) '-------' + WRITE(NLUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP + WRITE(NLUOUT,*) 'default value may be used, who knows???' + WRITE(NLUOUT,*) ' ' + ENDIF ELSE IF (HDIR=='H') THEN - ALLOCATE(GWORK(NIU,NJU)) - GWORK = .FALSE. -! - ALLOCATE(IWORK(NIU,NJU)) - CALL FMREAD(CFILE,HREC,COUT,'XY',IWORK(:,:),IGRID,ILENCH,HCOMMENT,KRESP) - WHERE (IWORK==1) GWORK = .TRUE. - DEALLOCATE(IWORK) -! - - IF (KRESP /=0) THEN + ALLOCATE(GWORK(NIU,NJU)) + GWORK = .FALSE. +! + ALLOCATE(IWORK(NIU,NJU)) + TZFIELD%CMNHNAME = TRIM(HREC) + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(HREC) + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = '' !Expected comment is not known + TZFIELD%NGRID = 4 + TZFIELD%NTYPE = TYPEINT + TZFIELD%NDIMS = 2 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,IWORK,KRESP) + WHERE (IWORK==1) GWORK = .TRUE. + DEALLOCATE(IWORK) +! + IF (KRESP/=0 .AND. KRESP/=-111) THEN WRITE(NLUOUT,*) 'WARNING' WRITE(NLUOUT,*) '-------' WRITE(NLUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP WRITE(NLUOUT,*) 'default value may be used, who knows???' WRITE(NLUOUT,*) ' ' - ELSE + ELSE CALL PACK_2D_1D(NMASK,GWORK(NIB:NIE,NJB:NJE),OFIELD) - END IF + END IF ! - - DEALLOCATE(GWORK) + DEALLOCATE(GWORK) END IF !------------------------------------------------------------------------------- END SUBROUTINE READ_SURFL1_MNH @@ -1429,10 +1598,11 @@ END SUBROUTINE READ_SURFL1_MNH !* 0. DECLARATIONS ! ------------ ! +USE MODE_FIELD, ONLY: TFIELDDATA,TYPELOG USE MODE_FM USE MODE_FMREAD ! -USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, NLUOUT +USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, TPINFILE, NLUOUT ! ! IMPLICIT NONE @@ -1446,15 +1616,12 @@ CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment ! !* 0.2 Declarations of local variables ! -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string - INTEGER :: IMASDEV ! MESONH version - +TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------- IF (HREC(1:4)=='BUDC') THEN - CALL FMREAD(CFILE,'MASDEV',COUT,'--',IMASDEV,IGRID,ILENCH,HCOMMENT,KRESP) + CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV) IF (IMASDEV<=45) THEN OFIELD = .FALSE. KRESP = 0 @@ -1463,7 +1630,7 @@ IF (HREC(1:4)=='BUDC') THEN END IF ! IF (HREC=='ECOCLIMAP') THEN - CALL FMREAD(CFILE,'MASDEV',COUT,'--',IMASDEV,IGRID,ILENCH,HCOMMENT,KRESP) + CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV) IF (IMASDEV<=46) THEN OFIELD = .TRUE. KRESP = 0 @@ -1471,9 +1638,19 @@ IF (HREC=='ECOCLIMAP') THEN END IF END IF ! -CALL FMREAD(CFILE,HREC,COUT,'--',OFIELD,IGRID,ILENCH,HCOMMENT,KRESP) -! -IF (KRESP /=0) THEN +TZFIELD%CMNHNAME = TRIM(HREC) +TZFIELD%CSTDNAME = '' +TZFIELD%CLONGNAME = 'SURFEX: '//TRIM(HREC) +TZFIELD%CUNITS = '' +TZFIELD%CDIR = '--' +TZFIELD%CCOMMENT = '' !Expected comment is not known +TZFIELD%NGRID = 0 +TZFIELD%NTYPE = TYPELOG +TZFIELD%NDIMS = 0 +CALL IO_READ_FIELD(TPINFILE,TZFIELD,OFIELD,KRESP) +HCOMMENT = TZFIELD%CCOMMENT +! +IF (KRESP/=0 .AND. KRESP/=-111) THEN WRITE(NLUOUT,*) 'WARNING' WRITE(NLUOUT,*) '-------' WRITE(NLUOUT,*) 'error when reading article ', HREC,'KRESP=',KRESP @@ -1524,10 +1701,12 @@ END SUBROUTINE READ_SURFL0_MNH !* 0. DECLARATIONS ! ------------ ! +USE MODE_FIELD, ONLY : TFIELDDATA,TYPECHAR USE MODE_FM USE MODE_FMREAD ! -USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, NLUOUT +USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, TPINFILE, NLUOUT +USE MODD_TYPE_DATE ! ! IMPLICIT NONE @@ -1552,14 +1731,25 @@ CHARACTER(LEN=40) :: YFILETYPE40! MESONH file type CHARACTER(LEN=2) :: YFILETYPE2 ! MESONH file type INTEGER, DIMENSION(3) :: ITDATE INTEGER :: IMASDEV ! MESONH version +TYPE(TFIELDDATA) :: TZFIELD +TYPE(DATE_TIME) :: TZDATETIME !------------------------------------------------------------------------------- ! ! -CALL FMREAD(CFILE,'MASDEV',COUT,'--',IMASDEV,IGRID,ILENCH,HCOMMENT,KRESP) +CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV) IF (IMASDEV<46) THEN - CALL FMREAD(CFILE,'STORAGE_TYPE',COUT,'--',YFILETYPE2,IGRID,ILENCH,HCOMMENT,KRESP) + CALL IO_READ_FIELD(TPINFILE,'STORAGE_TYPE',YFILETYPE2) ELSE - CALL FMREAD(CFILE,'STORAGETYPE',COUT,'--',YFILETYPE40,IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CMNHNAME = 'STORAGETYPE' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: STORAGETYPE' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '(-)' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPECHAR + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,YFILETYPE40) YFILETYPE2 = YFILETYPE40(1:2) END IF IF (YFILETYPE2(1:2)=='PG') THEN @@ -1572,30 +1762,21 @@ IF (YFILETYPE2(1:2)=='PG') THEN RETURN END IF ! -YRECFM=TRIM(HREC)//'%TDATE' -CALL FMREAD(CFILE,YRECFM,COUT,'--',ITDATE,IGRID,ILENCH,HCOMMENT,KRESP) -KYEAR = ITDATE(1) -KMONTH = ITDATE(2) -KDAY = ITDATE(3) - - IF (KRESP /=0) THEN - WRITE(NLUOUT,*) 'WARNING' - WRITE(NLUOUT,*) '-------' - WRITE(NLUOUT,*) 'error when reading article ',YRECFM,'KRESP=',KRESP - WRITE(NLUOUT,*) 'default value may be used, who knows???' - WRITE(NLUOUT,*) ' ' - ENDIF +CALL IO_READ_FIELD(TPINFILE,HREC,TZDATETIME,KRESP) +! +IF (KRESP/=0 .AND. KRESP/=-111) THEN + WRITE(NLUOUT,*) 'WARNING' + WRITE(NLUOUT,*) '-------' + WRITE(NLUOUT,*) 'error when reading article ',YRECFM,'KRESP=',KRESP + WRITE(NLUOUT,*) 'default value may be used, who knows???' + WRITE(NLUOUT,*) ' ' +ENDIF +! +KYEAR = TZDATETIME%TDATE%YEAR +KMONTH = TZDATETIME%TDATE%MONTH +KDAY = TZDATETIME%TDATE%DAY +PTIME = TZDATETIME%TIME ! -YRECFM=TRIM(HREC)//'%TIME' -CALL FMREAD(CFILE,YRECFM,COUT,'--',PTIME,IGRID,ILENCH,HCOMMENT,KRESP) - - IF (KRESP /=0) THEN - WRITE(NLUOUT,*) 'WARNING' - WRITE(NLUOUT,*) '-------' - WRITE(NLUOUT,*) 'error when reading article ',YRECFM,'KRESP=',KRESP - WRITE(NLUOUT,*) 'default value may be used, who knows???' - WRITE(NLUOUT,*) ' ' - ENDIF !------------------------------------------------------------------------------- END SUBROUTINE READ_SURFT0_MNH @@ -1640,10 +1821,11 @@ END SUBROUTINE READ_SURFT0_MNH !* 0. DECLARATIONS ! ------------ ! +USE MODE_FIELD, ONLY : TFIELDDATA,TYPECHAR USE MODE_FM USE MODE_FMREAD ! -USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, NLUOUT +USE MODD_IO_SURF_MNH, ONLY : COUT, CFILE, TPINFILE, NLUOUT ! ! IMPLICIT NONE @@ -1670,14 +1852,24 @@ CHARACTER(LEN=40) :: YFILETYPE40! MESONH file type CHARACTER(LEN=2) :: YFILETYPE2 ! MESONH file type INTEGER, DIMENSION(3,KL1) :: ITDATE INTEGER :: IMASDEV ! MESONH version +TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------- ! ! -CALL FMREAD(CFILE,'MASDEV',COUT,'--',IMASDEV,IGRID,ILENCH,HCOMMENT,KRESP) +CALL IO_READ_FIELD(TPINFILE,'MASDEV',IMASDEV) IF (IMASDEV<46) THEN - CALL FMREAD(CFILE,'STORAGE_TYPE',COUT,'--',YFILETYPE2,IGRID,ILENCH,HCOMMENT,KRESP) + CALL IO_READ_FIELD(TPINFILE,'STORAGE_TYPE',YFILETYPE2) ELSE - CALL FMREAD(CFILE,'STORAGETYPE',COUT,'--',YFILETYPE40,IGRID,ILENCH,HCOMMENT,KRESP) + TZFIELD%CMNHNAME = 'STORAGETYPE' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'SURFEX: STORAGETYPE' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '(-)' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPECHAR + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,YFILETYPE40) YFILETYPE2 = YFILETYPE40(1:2) END IF !IF (YFILETYPE2(1:2)=='PG') THEN @@ -1696,7 +1888,7 @@ KYEAR(:) = ITDATE(1,:) KMONTH(:) = ITDATE(2,:) KDAY(:) = ITDATE(3,:) - IF (KRESP /=0) THEN + IF (KRESP/=0 .AND. KRESP/=-111) THEN WRITE(NLUOUT,*) 'WARNING' WRITE(NLUOUT,*) '-------' WRITE(NLUOUT,*) 'error when reading article ',YRECFM,'KRESP=',KRESP @@ -1707,7 +1899,7 @@ KDAY(:) = ITDATE(3,:) YRECFM=TRIM(HREC)//'%TIME' CALL FMREAD(CFILE,YRECFM,COUT,'--',PTIME(:),IGRID,ILENCH,HCOMMENT,KRESP) - IF (KRESP /=0) THEN + IF (KRESP/=0 .AND. KRESP/=-111) THEN WRITE(NLUOUT,*) 'WARNING' WRITE(NLUOUT,*) '-------' WRITE(NLUOUT,*) 'error when reading article ',YRECFM,'KRESP=',KRESP diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90 index 57dc1b2e1..f994bf162 100644 --- a/src/MNH/spawn_model2.f90 +++ b/src/MNH/spawn_model2.f90 @@ -390,7 +390,8 @@ INTEGER,DIMENSION(:,:),ALLOCATABLE :: IJCOUNT ! REAL :: ZZS_MAX, ZZS_MAX_ll ! -TYPE(TFILEDATA),POINTER :: TZFILE +TYPE(TFILEDATA),POINTER :: TZFILE => NULL() +TYPE(TFILEDATA),POINTER :: TZSONFILE => NULL() TYPE(TFILEDATA),POINTER :: TZFILEDUMMY => NULL() !------------------------------------------------------------------------------- ! @@ -432,7 +433,6 @@ ZTIME1 = ZSTART CALL DEALLOCATE_MODEL1(1) CALL DEALLOCATE_MODEL1(2) ! -TZFILE => NULL() !------------------------------------------------------------------------------- ! ! @@ -499,8 +499,9 @@ IF (LEN_TRIM(HSONFILE) /= 0 ) THEN ! ! 3.3.1 Opening the son input file and reading the grid ! - WRITE(ILUOUT,*) 'SPAWN_MODEL2: spawing with a SON input file :',TRIM(HSONFILE) - CALL FMOPEN_ll(HSONFILE,'READ',CLUOUT,0,2,NVERB,ININAR,IRESP) + WRITE(ILUOUT,*) 'SPAWN_MODEL2: spawning with a SON input file :',TRIM(HSONFILE) + CALL IO_FILE_ADD2LIST(TZSONFILE,TRIM(HSONFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB) + CALL IO_FILE_OPEN_ll(TZSONFILE,CLUOUT,IRESP) CALL FMREAD(HSONFILE,'DAD_NAME',CLUOUT,'--',YDAD_SON,IGRID,ILENCH,YCOMMENT,IRESP) CALL FMREAD(HSONFILE,'IMAX',CLUOUT,'--',IIMAXSON,IGRID,ILENCH,YCOMMENT,IRESP) CALL FMREAD(HSONFILE,'JMAX',CLUOUT,'--',IJMAXSON,IGRID,ILENCH,YCOMMENT,IRESP) @@ -1368,14 +1369,14 @@ ZPRESSURE2=ZTIME2-ZTIME1 IF (SIZE(XINPRR) /= 0 ) THEN IF (GNOSON) & CALL SPAWN_SURF2_RAIN (NXOR,NYOR,NXEND,NYEND,NDXRATIO,NDYRATIO, & - XINPRC,XACPRC,XINDEP,XACDEP,XINPRR,XINPRR3D,XEVAP3D, & + XINPRC,XACPRC,XINDEP,XACDEP,XINPRR,XINPRR3D,XEVAP3D, & XACPRR,XINPRS,XACPRS,XINPRG,XACPRG,& XINPRH,XACPRH ) IF (.NOT.GNOSON) & CALL SPAWN_SURF2_RAIN (NXOR,NYOR,NXEND,NYEND,NDXRATIO,NDYRATIO, & - XINPRC,XACPRC,XINDEP,XACDEP,XINPRR,XINPRR3D,XEVAP3D, & + XINPRC,XACPRC,XINDEP,XACDEP,XINPRR,XINPRR3D,XEVAP3D, & XACPRR,XINPRS,XACPRS,XINPRG,XACPRG,XINPRH,XACPRH, & - HSONFILE,IIUSON,IJUSON, & + TZSONFILE,IIUSON,IJUSON, & IIB2,IJB2,IIE2,IJE2, & IIB1,IJB1,IIE1,IJE1 ) ENDIF @@ -1510,8 +1511,8 @@ ZSURF2 = ZTIME2 - ZTIME1 ! ----------------- ! CALL IO_FILE_CLOSE_ll(TZFILE,CLUOUT,IRESP) -IF (LEN_TRIM(HSONFILE) /= 0 ) THEN - CALL FMCLOS_ll(HSONFILE,'KEEP',CLUOUT,IRESP) +IF (ASSOCIATED(TZSONFILE)) THEN + CALL IO_FILE_CLOSE_ll(TZSONFILE,CLUOUT,IRESP) END IF ! !------------------------------------------------------------------------------- diff --git a/src/MNH/spawn_surf2_rain.f90 b/src/MNH/spawn_surf2_rain.f90 index 38b6f46d8..aadc0f6e7 100644 --- a/src/MNH/spawn_surf2_rain.f90 +++ b/src/MNH/spawn_surf2_rain.f90 @@ -14,14 +14,15 @@ MODULE MODI_SPAWN_SURF2_RAIN ! INTERFACE ! - SUBROUTINE SPAWN_SURF2_RAIN (KXOR,KYOR,KXEND,KYEND,KDXRATIO,KDYRATIO, & - PINPRC,PACPRC,PINDEP,PACDEP,PINPRR,PINPRR3D,PEVAP3D, & - PACPRR,PINPRS,PACPRS, & - PINPRG,PACPRG,PINPRH,PACPRH, & - HSONFILE,KIUSON,KJUSON, & - KIB2,KJB2,KIE2,KJE2, & - KIB1,KJB1,KIE1,KJE1 ) + SUBROUTINE SPAWN_SURF2_RAIN (KXOR,KYOR,KXEND,KYEND,KDXRATIO,KDYRATIO, & + PINPRC,PACPRC,PINDEP,PACDEP,PINPRR,PINPRR3D,PEVAP3D, & + PACPRR,PINPRS,PACPRS, & + PINPRG,PACPRG,PINPRH,PACPRH, & + TPSONFILE,KIUSON,KJUSON, & + KIB2,KJB2,KIE2,KJE2, & + KIB1,KJB1,KIE1,KJE1 ) ! +USE MODD_IO_ll, ONLY: TFILEDATA ! IMPLICIT NONE ! @@ -31,17 +32,17 @@ INTEGER, INTENT(IN) :: KDXRATIO ! x and y-direction Resolution ratio INTEGER, INTENT(IN) :: KDYRATIO ! between model 2 and model 1 ! REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRC,PACPRC ! Precipitations +REAL, DIMENSION(:,:), INTENT(OUT) :: PINDEP ! Droplet instant deposition +REAL, DIMENSION(:,:), INTENT(OUT) :: PACDEP ! Droplet accumulated dep REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRR,PACPRR ! Precipitations -REAL, DIMENSION(:,:), INTENT(OUT) :: PINDEP! Droplet instant deposition -REAL, DIMENSION(:,:), INTENT(OUT) :: PACDEP! Droplet accumulated dep -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PINPRR3D,PEVAP3D ! Rain precipitation +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PINPRR3D,PEVAP3D! Rain precipitation ! and evaporation fluxes REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRS,PACPRS ! Precipitations REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRG,PACPRG ! Precipitations REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRH,PACPRH ! Precipitations ! ! Arguments for spawning with 2 input files (father+son1) -CHARACTER (LEN=*), OPTIONAL, INTENT(IN) :: HSONFILE ! name of the input FM-file SON +TYPE(TFILEDATA),POINTER, OPTIONAL, INTENT(IN) :: TPSONFILE ! Input FM-file SON INTEGER, OPTIONAL, INTENT(IN) :: KIUSON ! upper dimensions of the INTEGER, OPTIONAL, INTENT(IN) :: KJUSON !input FM-file SON INTEGER, OPTIONAL, INTENT(IN) :: KIB2,KJB2 ! indexes for common @@ -55,15 +56,15 @@ END INTERFACE END MODULE MODI_SPAWN_SURF2_RAIN ! ! -! ######################################################################### - SUBROUTINE SPAWN_SURF2_RAIN (KXOR,KYOR,KXEND,KYEND,KDXRATIO,KDYRATIO, & - PINPRC,PACPRC,PINDEP,PACDEP,PINPRR,PINPRR3D,PEVAP3D, & - PACPRR,PINPRS,PACPRS, & - PINPRG,PACPRG,PINPRH,PACPRH, & - HSONFILE,KIUSON,KJUSON, & - KIB2,KJB2,KIE2,KJE2, & - KIB1,KJB1,KIE1,KJE1 ) -! ######################################################################### +! ############################################################################## + SUBROUTINE SPAWN_SURF2_RAIN (KXOR,KYOR,KXEND,KYEND,KDXRATIO,KDYRATIO, & + PINPRC,PACPRC,PINDEP,PACDEP,PINPRR,PINPRR3D,PEVAP3D, & + PACPRR,PINPRS,PACPRS, & + PINPRG,PACPRG,PINPRH,PACPRH, & + TPSONFILE,KIUSON,KJUSON, & + KIB2,KJB2,KIE2,KJE2, & + KIB1,KJB1,KIE1,KJE1 ) +! ############################################################################## ! !!**** *SPAWN_SURF2_RAIN * - subroutine to interpolate surface precipitations ! @@ -115,21 +116,20 @@ END MODULE MODI_SPAWN_SURF2_RAIN ! !* 0. DECLARATIONS ! ------------ -USE MODD_LBC_n, ONLY : LBC_MODEL +! USE MODD_BIKHARDT_n -USE MODD_LUNIT_n, ONLY : CLUOUT -USE MODD_FIELD_n, ONLY : XTHT USE MODD_CONF, ONLY : CCONF,CPROGRAM -! +USE MODD_FIELD_n, ONLY : XTHT +USE MODD_IO_ll, ONLY: TFILEDATA +USE MODD_LBC_n, ONLY : LBC_MODEL +USE MODD_LUNIT_n, ONLY : CLUOUT USE MODD_SPAWN ! -USE MODI_BIKHARDT ! Interface modules -! USE MODE_MODELN_HANDLER ! +USE MODI_BIKHARDT ! Interface modules USE MODI_READ_PRECIP_FIELD ! -! IMPLICIT NONE ! ! @@ -142,16 +142,16 @@ INTEGER, INTENT(IN) :: KDXRATIO ! x and y-direction Resolution ratio INTEGER, INTENT(IN) :: KDYRATIO ! between model 2 and model 1 ! REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRC,PACPRC ! Precipitations -REAL, DIMENSION(:,:), INTENT(OUT) :: PINDEP! Droplet instant deposition -REAL, DIMENSION(:,:), INTENT(OUT) :: PACDEP! Droplet accumulated dep +REAL, DIMENSION(:,:), INTENT(OUT) :: PINDEP ! Droplet instant deposition +REAL, DIMENSION(:,:), INTENT(OUT) :: PACDEP ! Droplet accumulated dep REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRR,PACPRR ! Precipitations -REAL, DIMENSION(:,:,:), INTENT(OUT) :: PINPRR3D,PEVAP3D ! Rain precipitation +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PINPRR3D,PEVAP3D! Rain precipitation ! and evaporation fluxes REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRS,PACPRS ! Precipitations REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRG,PACPRG ! Precipitations REAL, DIMENSION(:,:), INTENT(OUT) :: PINPRH,PACPRH ! Precipitation! ! Arguments for spawning with 2 input files (father+son1) -CHARACTER (LEN=*), OPTIONAL, INTENT(IN) :: HSONFILE ! name of the input FM-file SON +TYPE(TFILEDATA),POINTER, OPTIONAL, INTENT(IN) :: TPSONFILE ! Input FM-file SON INTEGER, OPTIONAL, INTENT(IN) :: KIUSON ! upper dimensions of the INTEGER, OPTIONAL, INTENT(IN) :: KJUSON !input FM-file SON INTEGER, OPTIONAL, INTENT(IN) :: KIB2,KJB2 ! indexes for common @@ -357,7 +357,7 @@ END IF !* 3.3 Informations from model SON1 ! ---------------------------- ! -IF (PRESENT(HSONFILE)) THEN +IF (PRESENT(TPSONFILE)) THEN IF (SIZE(XINPRC1) /= 0 ) THEN ALLOCATE(ZINPRC1(KIUSON,KJUSON)) ALLOCATE(ZACPRC1(KIUSON,KJUSON)) @@ -416,11 +416,11 @@ IF (PRESENT(HSONFILE)) THEN ALLOCATE(ZACPRH1(0,0)) YGETRHT='SKIP' END IF - CALL READ_PRECIP_FIELD(HSONFILE,CLUOUT,CPROGRAM,CCONF, & - YGETRCT,YGETRRT,YGETRST,YGETRGT,YGETRHT, & - ZINPRC1,ZACPRC1,ZINDEP1,ZACDEP1,ZINPRR1,ZINPRR3D1,ZEVAP3D1, & - ZACPRR1,ZINPRS1,ZACPRS1, & - ZINPRG1,ZACPRG1,ZINPRH1,ZACPRH1 ) + CALL READ_PRECIP_FIELD(TPSONFILE,CLUOUT,CPROGRAM,CCONF, & + YGETRCT,YGETRRT,YGETRST,YGETRGT,YGETRHT, & + ZINPRC1,ZACPRC1,ZINDEP1,ZACDEP1,ZINPRR1,ZINPRR3D1,ZEVAP3D1, & + ZACPRR1,ZINPRS1,ZACPRS1, & + ZINPRG1,ZACPRG1,ZINPRH1,ZACPRH1 ) IF (SIZE(XINPRC1) /= 0 ) THEN PINPRC(KIB2:KIE2,KJB2:KJE2) = ZINPRC1(KIB1:KIE1,KJB1:KJE1) PACPRC(KIB2:KIE2,KJB2:KJE2) = ZACPRC1(KIB1:KIE1,KJB1:KJE1) diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90 index e9a817722..36dc95211 100644 --- a/src/MNH/spawning.f90 +++ b/src/MNH/spawning.f90 @@ -201,7 +201,7 @@ CALL CLOSE_ll(YEXSPA) CALL INIT_MNH ! CALL FMCLOS_ll(CINIFILE,'KEEP',CLUOUT,IRESP) -CALL FMCLOS_ll(CINIFILEPGD,'KEEP',CLUOUT,IRESP,OPARALLELIO=.FALSE.) +CALL IO_FILE_CLOSE_ll(TINIFILEPGD,CLUOUT,IRESP,OPARALLELIO=.FALSE.) !------------------------------------------------------------------------------- ! !* 4. INITIALIZATION OF OUTER POINTS OF MODEL 1 diff --git a/src/MNH/write_surf_mnh.f90 b/src/MNH/write_surf_mnh.f90 index c92d7c5b6..72af98fdc 100644 --- a/src/MNH/write_surf_mnh.f90 +++ b/src/MNH/write_surf_mnh.f90 @@ -654,7 +654,7 @@ END SUBROUTINE WRITE_SURFX2COV_MNH ! ------------ ! USE MODE_IO_WRITE_FIELD -USE MODE_FIELD, ONLY: TFIELDDATA,TYPELOG,TYPEREAL +USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL USE MODE_MSG USE MODE_TOOLS_ll ! @@ -858,6 +858,9 @@ IF( (HREC=='IMAX' .OR. HREC=='JMAX' .OR. HREC=='KMAX') .AND. & CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFN0_MNH',TRIM(HREC)//' not written in file by externalized surface') RETURN ! +ELSE IF (HREC=='VERSION' .OR. HREC=='BUG') THEN + !Field is in fieldlist + CALL IO_WRITE_FIELD(TFILE_SURFEX,HREC,KFIELD,KRESP) ELSE IFIELD = KFIELD IF (HREC=='IMAX') IFIELD = NIU_ALL-2*JPHEXT diff --git a/src/MNH/xy_to_latlon.f90 b/src/MNH/xy_to_latlon.f90 index 3bce1fdeb..92bbf157e 100644 --- a/src/MNH/xy_to_latlon.f90 +++ b/src/MNH/xy_to_latlon.f90 @@ -66,16 +66,18 @@ !* 0. DECLARATION ! ----------- ! -USE MODE_FM -USE MODE_IO_ll ! USE MODD_GRID +USE MODD_IO_ll, ONLY: TFILEDATA USE MODD_PGDDIM USE MODD_PGDGRID USE MODD_PARAMETERS USE MODD_LUNIT ! +USE MODE_FM USE MODE_GRIDPROJ +USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST ! USE MODI_INI_CST USE MODI_READ_HGRID @@ -101,6 +103,7 @@ REAL :: ZXHAT ! output conformal coodinate x REAL :: ZYHAT ! output conformal coodinate y REAL :: ZLAT ! output latitude REAL :: ZLON ! output longitude +TYPE(TFILEDATA),POINTER :: TZINIFILE => NULL() ! !* 0.3 Declaration of namelists ! ------------------------ @@ -133,17 +136,18 @@ CALL CLOSE_ll('XY2LATLON1.nam',IOSTAT=IRESP) !* 1. Opening of MESONH file ! ---------------------- ! -CALL FMOPEN_ll(YINIFILE,'READ',CLUOUT0,0,2,2,ININAR,IRESP) +CALL IO_FILE_ADD2LIST(TZINIFILE,TRIM(YINIFILE),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=2,KLFIVERB=2) +CALL IO_FILE_OPEN_ll(TZINIFILE,CLUOUT0,IRESP) ! !* 2. Reading of MESONH file ! ---------------------- ! -CALL READ_HGRID(0,YINIFILE,YNAME,YDAD,YSTORAGE_TYPE) +CALL READ_HGRID(0,TZINIFILE,YNAME,YDAD,YSTORAGE_TYPE) ! !* 3. Closing of MESONH file ! ---------------------- ! -CALL FMCLOS_ll(YINIFILE,'KEEP',CLUOUT0,IRESP) +CALL IO_FILE_CLOSE_ll(TZINIFILE,CLUOUT0,IRESP) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90 index 0a4335a41..feb30eec2 100644 --- a/src/MNH/zoom_pgd.f90 +++ b/src/MNH/zoom_pgd.f90 @@ -109,7 +109,7 @@ 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 +TYPE(TFILEDATA),POINTER :: TZZOOMFILE,TZPGDFILE ! REAL, DIMENSION(:,:), ALLOCATABLE :: ZZS1,ZZSMT1,ZZS2,ZZSMT2 ! @@ -160,12 +160,13 @@ CALL CLOSE_ll(YNAMELIST,IOSTAT=IRESP) !* 2.1 Open PGD file ! ------------- ! -CALL FMOPEN_ll(CPGDFILE,'READ',CLUOUT0,1,2,5,ININAR,IRESP) +CALL IO_FILE_ADD2LIST(TZPGDFILE,TRIM(CPGDFILE),'UNKNOWN','READ',KLFINPRAR=1,KLFITYPE=2,KLFIVERB=5) +CALL IO_FILE_OPEN_ll(TZPGDFILE,CLUOUT0,IRESP) ! !* 2.2 Reading of initial grid ! ----------------------- ! -CALL READ_HGRID(1,CPGDFILE,YMY_NAME,YDAD_NAME,YSTORAGE_TYPE) +CALL READ_HGRID(1,TZPGDFILE,YMY_NAME,YDAD_NAME,YSTORAGE_TYPE) ! ! NIMAX, NJMAX: size of input domain ALLOCATE(ZZS1 (NIMAX+2*JPHEXT,NJMAX+2*JPHEXT)) @@ -265,6 +266,8 @@ CPGDFILE = YZOOMFILE !* 3. CLOSE PARALLELIZED I/O ! ---------------------- ! +CALL IO_FILE_CLOSE_ll(TZPGDFILE,CLUOUT0,IRESP) +! WRITE(ILUOUT0,*) WRITE(ILUOUT0,*) '***************************' WRITE(ILUOUT0,*) '* ZOOM_PGD ends correctly *' diff --git a/src/MNH/zsmt_pgd.f90 b/src/MNH/zsmt_pgd.f90 index 6c2ca2c6d..3f306ad07 100644 --- a/src/MNH/zsmt_pgd.f90 +++ b/src/MNH/zsmt_pgd.f90 @@ -92,12 +92,6 @@ INTEGER :: IJMAX ! number of physical points in Y direction INTEGER :: IIU ! number of points in X direction INTEGER :: IJU ! number of points in Y direction ! -INTEGER :: IRESP ! return code for I/O -CHARACTER(LEN=16) :: YRECFM ! name of record -INTEGER :: IGRID ! grid location -INTEGER :: ILENCH ! length of comment string -CHARACTER(LEN=100):: YCOMMENT ! comment string - REAL, DIMENSION(:,:), ALLOCATABLE :: ZSMOOTH_ZS ! smooth orography REAL, DIMENSION(:,:), ALLOCATABLE :: ZFINE_ZS ! smoothed fine orography REAL, DIMENSION(:,:), ALLOCATABLE :: ZSLEVE_ZS ! smooth orography for sleve coordinate @@ -129,8 +123,9 @@ ALLOCATE(ZFINE_ZS(IIU,IJU)) ALLOCATE(ZSLEVE_ZS(IIU,IJU)) ALLOCATE(ZMASK(IIU,IJU)) ! -YRECFM = 'ZS ' -CALL FMREAD(TPFILE%CNAME,YRECFM,CLUOUT0,'XY',ZZS,IGRID,ILENCH,YCOMMENT,IRESP) +!PW: bug/TODO: read a field in a file opened in WRITE mode +!There is a test in IO_READ_FIELD_BYFIELD_X2 to allow this if TPFILE%CMODE='LFICDF4' +CALL IO_READ_FIELD(TPFILE,'ZS',ZZS) ! DO JI=1,JPHEXT ZZS(JI,:) = ZZS(IIB,:) -- GitLab