diff --git a/src/MNH/compute_r00.f90 b/src/MNH/compute_r00.f90 index 3ec7b851a2a402b23d870af13bc45b619d7a84f5..b31a7a65961f5d2fb407fc7036fd0d0319903960 100644 --- a/src/MNH/compute_r00.f90 +++ b/src/MNH/compute_r00.f90 @@ -84,6 +84,7 @@ USE MODE_FM USE MODE_FMWRIT USE MODE_FMREAD USE MODE_IO_ll +USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST USE MODE_ll USE MODD_TYPE_DATE ! @@ -100,11 +101,8 @@ INTEGER :: INPRAR ! number of articles predicted in ! the LFIFM file INTEGER :: ININAR ! number of articles present in ! the LFIFM file -INTEGER :: ITYPE ! type of file (conv2dia and transfer) ! -CHARACTER(LEN=100) :: YCOMMENT -CHARACTER(LEN=16) :: YRECFM -INTEGER :: IFILECUR,JFILECUR,NIU,NJU,NKU,IGRID,ILENCH +INTEGER :: IFILECUR,JFILECUR,NIU,NJU,NKU INTEGER :: NFILES,JLOOP REAL :: ZXOR,ZYOR,ZDX,ZDY REAL :: ZSPVAL @@ -127,13 +125,13 @@ REAL :: ZXMAX,ZYMAX,ZZMAX ! domain extrema INTEGER, DIMENSION(100) :: NBRFILES INTEGER :: IKU TYPE(TFIELDDATA) :: TZFIELD +TYPE(TFILEDATA),POINTER :: TZTRACFILE ! !------------------------------------------------------------------------------- ! !* 1.0 INITIALIZATION ! -------------- ! -ITYPE=2 ZSPVAL=-1.E+11 IKU=SIZE(XZHAT) ! @@ -252,8 +250,8 @@ END IF ! is performed DO JFILECUR=1,NFILES ! - CALL FMOPEN_ll(CFILES(NBRFILES(JFILECUR)),'READ',CLUOUT, & - INPRAR,ITYPE,NVERB,ININAR,IRESP) + CALL IO_FILE_ADD2LIST(TZTRACFILE,CFILES(NBRFILES(JFILECUR)),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB) + CALL IO_FILE_OPEN_ll(TZTRACFILE,CLUOUT,IRESP) ! !* 4.1 check if this file is a start instant ! @@ -270,9 +268,7 @@ DO JFILECUR=1,NFILES ! IF (GSTART) THEN ! - YRECFM='DTCUR' - CALL FMREAD(CFILES(NBRFILES(JFILECUR)),YRECFM,CLUOUT,'--',TDTCUR_START, & - IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZTRACFILE,'DTCUR',TDTCUR_START) IHOUR = INT(TDTCUR_START%TIME/3600.) ZREMAIN = MOD(TDTCUR_START%TIME,3600.) IMINUTE = INT(ZREMAIN/60.) @@ -280,14 +276,9 @@ DO JFILECUR=1,NFILES WRITE(YDATE,FMT='(1X,I4.4,I2.2,I2.2,2X,I2.2,"H",I2.2,"M", & & F5.2,"S")') TDTCUR_START%TDATE, IHOUR,IMINUTE,ZSECOND ! - YRECFM='THT' - CALL FMREAD(CFILES(NBRFILES(JFILECUR)),YRECFM,CLUOUT,'XY', & - ZTH0(:,:,:),IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM='RVT' - CALL FMREAD(CFILES(NBRFILES(JFILECUR)),YRECFM,CLUOUT,'XY', & - ZRV0(:,:,:),IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZTRACFILE,'THT',ZTH0(:,:,:)) ! + CALL IO_READ_FIELD(TZTRACFILE,'RVT',ZRV0(:,:,:)) ZRV0(:,:,:)=ZRV0(:,:,:)*1.E+3 ! ZRV0 in g/kg ! END IF @@ -376,19 +367,27 @@ DO JFILECUR=1,NFILES !* 4.4 compute the origin of the particules using one more segment ! IF (JFILECUR /= NFILES) THEN - YRECFM='LGXT' - CALL FMREAD(CFILES(NBRFILES(JFILECUR)),YRECFM,CLUOUT,'XY', & - ZX0(:,:,:),IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = 'XY' + TZFIELD%CCOMMENT = '' !Unknown comment + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + TZFIELD%CMNHNAME = 'LGXT' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + CALL IO_READ_FIELD(TZTRACFILE,TZFIELD,ZX0) ZX0(:,:,:)=ZX0(:,:,:)*1.E-3 ! ZX0 in km ! - YRECFM='LGYT' - CALL FMREAD(CFILES(NBRFILES(JFILECUR)),YRECFM,CLUOUT,'XY', & - ZY0(:,:,:),IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LGYT' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + CALL IO_READ_FIELD(TZTRACFILE,TZFIELD,ZY0) ZY0(:,:,:)=ZY0(:,:,:)*1.E-3 ! ZY0 in km ! - YRECFM='LGZT' - CALL FMREAD(CFILES(NBRFILES(JFILECUR)),YRECFM,CLUOUT,'XY', & - ZZ0(:,:,:),IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LGZT' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + CALL IO_READ_FIELD(TZTRACFILE,TZFIELD,ZZ0) ZZ0(:,:,:)=ZZ0(:,:,:)*1.E-3 ! ZZ0 in km ! ! old position of the set of particles @@ -424,7 +423,7 @@ DO JFILECUR=1,NFILES ! !* 4.5 close the input file ! - CALL FMCLOS_ll(CFILES(NBRFILES(JFILECUR)),'KEEP',CLUOUT,IRESP) + CALL IO_FILE_CLOSE_ll(TZTRACFILE,CLUOUT,IRESP) ! END DO ! diff --git a/src/MNH/free_atm_profile.f90 b/src/MNH/free_atm_profile.f90 index 63c34214da7ea8fddb6ad118db629d360da1df35..2ef4e0c92173b3af89ba780c7fc1cc14ce96df44 100644 --- a/src/MNH/free_atm_profile.f90 +++ b/src/MNH/free_atm_profile.f90 @@ -166,10 +166,7 @@ REAL, DIMENSION(SIZE(PZMASS_MX,1),SIZE(PZMASS_MX,2)) & :: ZK_BL_TOP ! as K_BL_TOP but real INTEGER :: IIMIN, IIMAX, IJMIN, IJMAX -INTEGER :: IRESP ! -INTEGER :: IGRID, ILENCH ! -CHARACTER(LEN=16) :: YRECFM ! name of field to be recorded -CHARACTER(LEN=100):: YCOMMENT ! comment to be recorded +INTEGER :: IRESP REAL, DIMENSION(SIZE(PZMASS_MX,1),SIZE(PZMASS_MX,2)) & :: Z2D ! field to be recorded diff --git a/src/MNH/ice_adjust.f90 b/src/MNH/ice_adjust.f90 index a04f63482dbfb138285d57f56511e7cb0a86d111..c31243eabb57c259aa762c10dcf0218767819c7f 100644 --- a/src/MNH/ice_adjust.f90 +++ b/src/MNH/ice_adjust.f90 @@ -248,13 +248,6 @@ REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) & ZW1,ZW2,ZW3,ZW4,ZW5,ZW6,ZW7,& ! Work arrays for intermediate fields ZCND ! CND=(T-T00)/(T0-T00) cf sc doc and TAO etal (89) ! -INTEGER :: IRESP ! Return code of FM routines -INTEGER :: ILENG ! Length of comment string in LFIFM file -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file -CHARACTER (LEN=100) :: YCOMMENT ! Comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file -! INTEGER :: IIU,IJU,IKU! dimensions of dummy arrays INTEGER :: IIB,IJB ! Horz index values of the first inner mass points INTEGER :: IIE,IJE ! Horz index values of the last inner mass points diff --git a/src/MNH/ice_adjust_elec.f90 b/src/MNH/ice_adjust_elec.f90 index 4c7b2c622af2869693247ad15dc973c3d86a8ae0..39b599f5aa08d90a941b7dd620e50f7748e75b73 100644 --- a/src/MNH/ice_adjust_elec.f90 +++ b/src/MNH/ice_adjust_elec.f90 @@ -282,13 +282,6 @@ REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) & ! to add to positive ! or negative ion number ! -INTEGER :: IRESP ! Return code of FM routines -INTEGER :: ILENG ! Length of comment string in LFIFM file -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file -CHARACTER (LEN=100) :: YCOMMENT ! Comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file -! INTEGER :: IIU,IJU,IKU! dimensions of dummy arrays INTEGER :: IIB,IJB ! Horz index values of the first inner mass points INTEGER :: IIE,IJE ! Horz index values of the last inner mass points diff --git a/src/MNH/ini_aircraft_balloon.f90 b/src/MNH/ini_aircraft_balloon.f90 index 5b596df31a305628ec165e938a2470739448e909..06ef3f5a035f51bdd47f49f9624035313829cc9b 100644 --- a/src/MNH/ini_aircraft_balloon.f90 +++ b/src/MNH/ini_aircraft_balloon.f90 @@ -14,14 +14,15 @@ MODULE MODI_INI_AIRCRAFT_BALLOON ! INTERFACE ! - SUBROUTINE INI_AIRCRAFT_BALLOON(HINIFILE,HLUOUT, & + SUBROUTINE INI_AIRCRAFT_BALLOON(TPINIFILE,HLUOUT, & PTSTEP, TPDTSEG, PSEGLEN, & KRR, KSV, KKU, OUSETKE, & PLATOR, PLONOR ) ! +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 ! output listing REAL, INTENT(IN) :: PTSTEP ! time step TYPE(DATE_TIME), INTENT(IN) :: TPDTSEG ! segment date and time @@ -42,7 +43,7 @@ END INTERFACE END MODULE MODI_INI_AIRCRAFT_BALLOON ! ! ############################################################### - SUBROUTINE INI_AIRCRAFT_BALLOON(HINIFILE,HLUOUT, & + SUBROUTINE INI_AIRCRAFT_BALLOON(TPINIFILE,HLUOUT, & PTSTEP, TPDTSEG, PSEGLEN, & KRR, KSV, KKU, OUSETKE, & PLATOR, PLONOR ) @@ -84,31 +85,29 @@ END MODULE MODI_INI_AIRCRAFT_BALLOON !* 0. DECLARATIONS ! ------------ ! -USE MODD_PARAMETERS USE MODD_AIRCRAFT_BALLOON USE MODD_CONF +USE MODD_DIAG_FLAG +USE MODD_DYN_n USE MODD_GRID +USE MODD_IO_ll, ONLY : TFILEDATA +USE MODD_PARAM_n, ONLY : CCLOUD +USE MODD_PARAMETERS ! USE MODE_ll +USE MODE_FIELD, ONLY : TFIELDDATA, TYPEREAL +USE MODE_GRIDPROJ USE MODE_IO_ll USE MODE_MODELN_HANDLER -USE MODE_GRIDPROJ -! -USE MODD_DIAG_FLAG -USE MODD_DYN_n ! USE MODI_INI_BALLOON USE MODI_INI_AIRCRAFT ! -USE MODD_PARAM_n, ONLY : CCLOUD -! IMPLICIT NONE ! -! !* 0.1 declarations of arguments ! -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! name of - ! the initial file +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE !Initial file CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! output listing REAL, INTENT(IN) :: PTSTEP ! time step TYPE(DATE_TIME), INTENT(IN) :: TPDTSEG ! segment date and time @@ -129,13 +128,7 @@ INTEGER :: ISTORE ! number of storage instants INTEGER :: ILUOUT ! logical unit INTEGER :: IRESP ! return code INTEGER :: JSEG ! loop counter -! -CHARACTER(LEN=2) :: YDIR ! Type of the data field in LFIFM file -INTEGER :: IGRID ! C-grid indicator in LFIFM file -INTEGER :: ILENCH ! Length of comment string in LFIFM file -CHARACTER (LEN=100) :: YCOMMENT!comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file - +TYPE(TFIELDDATA) :: TZFIELD ! !---------------------------------------------------------------------------- ! @@ -491,26 +484,65 @@ END IF IF ( CPROGRAM == 'MESONH' .OR. CPROGRAM == 'SPAWN ' .OR. CPROGRAM == 'REAL ' ) THEN ! read the current location in the FM_FILE ! - YRECFM=ADJUSTL(ADJUSTR(TPFLYER%TITLE)//'LAT') - YDIR='--' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,ZLAT,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = TRIM(TPFLYER%TITLE)//'LAT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'degree' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,ZLAT,IRESP) ! IF ( IRESP /= 0 ) THEN WRITE(ILUOUT,*) "INI_LAUCH: Initial location take for ",TPFLYER%TITLE ELSE - YRECFM=ADJUSTL(ADJUSTR(TPFLYER%TITLE)//'LON') - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,ZLON,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = TRIM(TPFLYER%TITLE)//'LON' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'degree' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,ZLON) ! - YRECFM=ADJUSTL(ADJUSTR(TPFLYER%TITLE)//'ALT') - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,TPFLYER%Z_CUR,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = TRIM(TPFLYER%TITLE)//'ALT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'm' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPFLYER%Z_CUR) ! TPFLYER%P_CUR = XUNDEF ! - YRECFM=ADJUSTL(ADJUSTR(TPFLYER%TITLE)//'WASCENT') - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,TPFLYER%WASCENT,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = TRIM(TPFLYER%TITLE)//'WASCENT' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'm s-1' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPFLYER%WASCENT) ! - YRECFM=ADJUSTL(ADJUSTR(TPFLYER%TITLE)//'RHO') - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,TPFLYER%RHO,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = TRIM(TPFLYER%TITLE)//'RHO' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'kg m-3' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPFLYER%RHO) ! CALL SM_XYHAT(PLATOR,PLONOR,& ZLAT,ZLON, & diff --git a/src/MNH/ini_cpl.f90 b/src/MNH/ini_cpl.f90 index 2688af510ebec6885de7cf0e0301fb78ca7ef58e..276b540c810db185b8c258452d946c7c4e46a70e 100644 --- a/src/MNH/ini_cpl.f90 +++ b/src/MNH/ini_cpl.f90 @@ -309,10 +309,7 @@ REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PLBYRS ,PLBYSVS ! in x and y-d ! INTEGER :: ILUOUT ! Logical unit number ! associated with HLUOUT -INTEGER :: IGRID,ILENCH,IRESP,ININAR ! File -CHARACTER (LEN=16) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables -CHARACTER(LEN=2) :: YDIR +INTEGER :: IRESP CHARACTER (LEN=40) :: YTITLE ! Title for date print INTEGER :: JCI ! Loop index on number of ! coupling files diff --git a/src/MNH/ini_elecn.f90 b/src/MNH/ini_elecn.f90 index f9f3e40c5ae8511ae6ea5c08b44e984b648be699..aa95cef9a2915f715e2a6aabc87d540828b84164 100644 --- a/src/MNH/ini_elecn.f90 +++ b/src/MNH/ini_elecn.f90 @@ -272,7 +272,7 @@ IF (HELEC(1:3) == 'ELE') THEN ! ZRHO00 = XP00 / (XRD * XTHVREFZ(IKB)) ! - CALL INI_PARAM_ELEC (TPINIFILE%CNAME, HLUOUT, CGETSVT, ZRHO00, NRR, IINTVL, & + CALL INI_PARAM_ELEC (TPINIFILE, CGETSVT, ZRHO00, NRR, IINTVL, & ZFDINFTY, IIU, IJU, IKU) ! ! diff --git a/src/MNH/ini_lb.f90 b/src/MNH/ini_lb.f90 index a19b00f3b6a96dec2c24c8a17f9bab1d81110fd6..aaac7938aad33b6fabd215c1fd0769c1b7c005a5 100644 --- a/src/MNH/ini_lb.f90 +++ b/src/MNH/ini_lb.f90 @@ -893,7 +893,7 @@ IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0. END SELECT END DO -END DO +END IF ! Chemical aqueous phase scalar variables DO JSV = NSV_CHACBEG, NSV_CHACEND SELECT CASE(HGETSVM(JSV)) diff --git a/src/MNH/ini_ls.f90 b/src/MNH/ini_ls.f90 index a1c40e53d29c2b3e851536ea7f18d3ed845a55eb..2862e1f11ae863c13243258f8fe7c13a6f8d17c0 100644 --- a/src/MNH/ini_ls.f90 +++ b/src/MNH/ini_ls.f90 @@ -123,10 +123,7 @@ LOGICAL, INTENT(IN), OPTIONAL :: OSTEADY_DMASS ! Md ev ! !* 0.2 declarations of local variables ! -INTEGER :: IGRID,ILENCH,IRESP ! File -CHARACTER (LEN=16) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables -CHARACTER(LEN=2) :: YDIR ! +INTEGER :: IRESP INTEGER :: ILUOUT ! Logical unit number associated with HLUOUT ! !------------------------------------------------------------------------------- diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index a065e0150214026fc57d91cdd720a1dfd4a117ad..deafa28c7bff89dec5883a9501bb5c2b764430bd 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -2141,9 +2141,9 @@ DEALLOCATE(XSPOWATM) !* 23. BALLOON and AIRCRAFT initializations ! ------------------------------------ ! -CALL INI_AIRCRAFT_BALLOON(TPINIFILE%CNAME,CLUOUT,XTSTEP, TDTSEG, XSEGLEN, NRR, NSV, & - IKU,CTURB=="TKEL" , & - XLATORI, XLONORI ) +CALL INI_AIRCRAFT_BALLOON(TPINIFILE,CLUOUT,XTSTEP, TDTSEG, XSEGLEN, NRR, NSV, & + IKU,CTURB=="TKEL" , & + XLATORI, XLONORI ) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/ini_param_elec.f90 b/src/MNH/ini_param_elec.f90 index e6b8039ebd2afdbc741727879aec52fb54a40dd0..1fcc6b36d29d68bd9644ccbcc181916ecf9626cf 100644 --- a/src/MNH/ini_param_elec.f90 +++ b/src/MNH/ini_param_elec.f90 @@ -8,12 +8,12 @@ ! INTERFACE ! - SUBROUTINE INI_PARAM_ELEC (HINIFILE, HLUOUT, HGETSVM, PRHO00, & - KRR, KND, PFDINFTY, IIU, IJU, IKU ) + SUBROUTINE INI_PARAM_ELEC (TPINIFILE, HGETSVM, PRHO00, & + KRR, KND, PFDINFTY, IIU, IJU, IKU ) ! -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! name of the initial file -CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing - ! of nested models +USE MODD_IO_ll, ONLY : TFILEDATA +! +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file CHARACTER (LEN=*), DIMENSION(:),INTENT(IN) :: HGETSVM INTEGER, INTENT(IN) :: KND ! Number of intervals to integrate kernels INTEGER, INTENT(IN) :: KRR ! Number of moist variables @@ -27,10 +27,10 @@ END SUBROUTINE INI_PARAM_ELEC END INTERFACE END MODULE MODI_INI_PARAM_ELEC ! -! ################################################################# - SUBROUTINE INI_PARAM_ELEC (HINIFILE, HLUOUT, HGETSVM, PRHO00, & - KRR, KND, PFDINFTY, IIU, IJU, IKU ) -! ################################################################# +! ############################################################## + SUBROUTINE INI_PARAM_ELEC (TPINIFILE, HGETSVM, PRHO00, & + KRR, KND, PFDINFTY, IIU, IJU, IKU ) +! ############################################################## ! !!**** *INI_PARAM_ELEC* - initialize the constants necessary !! for the electrical scheme. @@ -89,31 +89,30 @@ END MODULE MODI_INI_PARAM_ELEC ! ------------ ! USE MODD_CST +USE MODD_ELEC_n +USE MODD_ELEC_DESCR +USE MODD_ELEC_PARAM +USE MODD_IO_ll, ONLY : TFILEDATA +USE MODD_NSV, ONLY : NSV_ELECEND USE MODD_PARAMETERS USE MODD_PARAM_ICE USE MODD_RAIN_ICE_DESCR USE MODD_RAIN_ICE_PARAM -USE MODD_ELEC_DESCR -USE MODD_ELEC_PARAM -USE MODD_ELEC_n -USE MODD_NSV, ONLY : NSV_ELECEND +USE MODD_VAR_ll +! +USE MODE_FMREAD ! USE MODI_MOMG USE MODI_RRCOLSS -USE MODI_RZCOLX USE MODI_RSCOLRG +USE MODI_RZCOLX USE MODI_VQZCOLX ! -USE MODD_VAR_ll -USE MODE_FMREAD -! IMPLICIT NONE ! !* 0.1 Declaration of dummy 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=*), DIMENSION(:),INTENT(IN) :: HGETSVM INTEGER, INTENT(IN) :: KND ! Number of intervals to integrate kernels INTEGER, INTENT(IN) :: KRR ! Number of moist variables @@ -125,18 +124,11 @@ INTEGER, INTENT(IN) :: IKU ! Upper dimension in z direction ! !* 0.2 Declaration of local variables ! -REAL, DIMENSION(IIU,IJU,IKU) :: Z3D ! 3D array used to read data - ! in initial file -INTEGER :: JK ! Loop index REAL :: ZESR ! Mean efficiency of rain-aggregate collection REAL :: ZEGS ! REAL :: ZEGR REAL, DIMENSION(:,:), ALLOCATABLE :: ZMANSELL1, ZMANSELL2 ! Used to initialize ! XMANSELL array -INTEGER :: IGRID,ILENCH,IRESP -CHARACTER (LEN=100) :: YCOMMENT -CHARACTER (LEN=16) :: YRECFM -CHARACTER (LEN=2) :: YDIR ! INTEGER :: JLWC, JTEMP REAL, DIMENSION(:), ALLOCATABLE :: ZT, ZLWCC, ZEW @@ -354,23 +346,10 @@ XEW(:,:,:) = 0. ! SELECT CASE(HGETSVM(NSV_ELECEND)) CASE ('READ') - YRECFM='NI_IAGGS' - YDIR='XY' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - XNI_IAGGS(:,:,:) = Z3D(:,:,:) - YRECFM='NI_IDRYG' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - XNI_IDRYG(:,:,:) = Z3D(:,:,:) - YRECFM='NI_SDRYG' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - XNI_SDRYG(:,:,:) = Z3D(:,:,:) - YRECFM='INDUC_CG' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - XIND_RATE(:,:,:) = Z3D(:,:,:) + CALL IO_READ_FIELD(TPINIFILE,'NI_IAGGS',XNI_IAGGS) + CALL IO_READ_FIELD(TPINIFILE,'NI_IDRYG',XNI_IDRYG) + CALL IO_READ_FIELD(TPINIFILE,'NI_SDRYG',XNI_SDRYG) + CALL IO_READ_FIELD(TPINIFILE,'INDUC_CG',XIND_RATE) CASE ('INIT') XNI_IAGGS(:,:,:) = 0. XNI_IDRYG(:,:,:) = 0. diff --git a/src/MNH/ini_radiations_ecmwf.f90 b/src/MNH/ini_radiations_ecmwf.f90 index 6c2cee16b749190123f8046af87bc2a048c17db5..c04e7dbda015ec5c925c19845699079562ccc096 100644 --- a/src/MNH/ini_radiations_ecmwf.f90 +++ b/src/MNH/ini_radiations_ecmwf.f90 @@ -279,15 +279,10 @@ REAL :: ZLAT_POLAR ! POLAR circle LATitude REAL, DIMENSION(:,:),ALLOCATABLE :: ZLON ! longitude REAL, DIMENSION(SIZE(PSTATM,1)) :: ZZSTAT ! half level altitudes of standard atm. ! -INTEGER :: IGRID,ILENCH,IRESP ! File -CHARACTER (LEN=16) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables -! INTEGER :: IINFO_ll ! return code of parallel routine INTEGER :: IIMAX_ll,IJMAX_ll ! Number of points of ! Global physical domain ! in the x and y directions -INTEGER :: ILUOUT ! Logical unit number associated with HLUOUT ! REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: ZEXNT ! Exner function ! @@ -310,8 +305,6 @@ INTEGER :: ZYMD, ZHOURS ! date for climatology initialisation ! !* 0.1 INITIALIZATIONS ! -CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP) -! !* 0.2 COMPUTES THE PHYSICAL SUBDOMAIN BOUNDS ! CALL GET_DIM_EXT_ll ('B',IIU,IJU) diff --git a/src/MNH/ls_coupling.f90 b/src/MNH/ls_coupling.f90 index 738a7076cbe48f6ae0f0496054c38b680c991e54..2beabcc4cd17fecf73beb4ea5b61938fba7418b3 100644 --- a/src/MNH/ls_coupling.f90 +++ b/src/MNH/ls_coupling.f90 @@ -262,10 +262,7 @@ REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PLBYRS ,PLBYSVS ! in x and y-d ! INTEGER :: ILUOUT ! Logical unit number ! associated with HLUOUT -INTEGER :: IGRID,ILENCH,IRESP ! File -CHARACTER (LEN=16) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables -CHARACTER(LEN=2) :: YDIR +INTEGER :: IRESP REAL :: ZLENG ! Interpolation length INTEGER :: IIMAX,IJMAX,IKMAX ! Dimensions of the physical ! part of the arrays stored in diff --git a/src/MNH/menu_diachro.f90 b/src/MNH/menu_diachro.f90 index b9d38087ac9f824c26037aee43c95c2c5ba9de32..342f5966c3bb32c02762a85089686bda5a8599f6 100644 --- a/src/MNH/menu_diachro.f90 +++ b/src/MNH/menu_diachro.f90 @@ -70,18 +70,15 @@ IMPLICIT NONE ! --------------- TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! file to write -CHARACTER(LEN=*), INTENT(IN) :: HGROUP CHARACTER(LEN=*), INTENT(IN) :: HLUOUTDIA +CHARACTER(LEN=*), INTENT(IN) :: HGROUP ! !* 0.1 Local variables ! --------------- ! -CHARACTER(LEN=16) :: YRECFM -CHARACTER(LEN=20) :: YCOMMENT CHARACTER(LEN=16),DIMENSION(1500),SAVE :: YGROUP -CHARACTER(LEN=28) :: YFILEDIA -INTEGER :: ILENG, ILENCH, IGRID, J, JJ, IALREADY +INTEGER :: ILENG, J, JJ, IALREADY INTEGER :: IRESPDIA INTEGER,SAVE :: IGROUP=0 INTEGER,DIMENSION(:),ALLOCATABLE :: ITABCHAR @@ -89,11 +86,8 @@ LOGICAL :: GPACK TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------ ! -YFILEDIA = TPDIAFILE%CNAME -! GPACK=LPACK LPACK=.FALSE. -YCOMMENT='Nothing' ! IF(HGROUP == 'END')THEN @@ -109,7 +103,7 @@ IF(HGROUP == 'END')THEN TZFIELD%CLONGNAME = 'MesoNH: MENU_BUDGET.DIM' TZFIELD%CUNITS = '' TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(YCOMMENT) + TZFIELD%CCOMMENT = '' TZFIELD%NGRID = 0 TZFIELD%NTYPE = TYPEINT TZFIELD%NDIMS = 0 @@ -127,7 +121,7 @@ IF(HGROUP == 'END')THEN TZFIELD%CLONGNAME = 'MesoNH: MENU_BUDGET' TZFIELD%CUNITS = '' TZFIELD%CDIR = '--' - TZFIELD%CCOMMENT = TRIM(YCOMMENT) + TZFIELD%CCOMMENT = '' TZFIELD%NGRID = 0 TZFIELD%NTYPE = TYPEINT TZFIELD%NDIMS = 1 @@ -137,9 +131,16 @@ IF(HGROUP == 'END')THEN ELSE IF(HGROUP == 'READ')THEN - YRECFM='MENU_BUDGET.DIM' - CALL FMREAD(YFILEDIA,YRECFM,HLUOUTDIA,'--',ILENG,& - IGRID,ILENCH,YCOMMENT,IRESPDIA) + TZFIELD%CMNHNAME = 'MENU_BUDGET.DIM' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: MENU_BUDGET.DIM' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEINT + TZFIELD%NDIMS = 0 + CALL IO_READ_FIELD(TPDIAFILE,TZFIELD,ILENG,IRESPDIA) IF(IRESPDIA == -47)THEN ! print *,' No record MENU_BUDGET ' LPACK=GPACK @@ -147,11 +148,18 @@ ELSE IF(HGROUP == 'READ')THEN ENDIF ALLOCATE(ITABCHAR(ILENG)) - YRECFM='MENU_BUDGET' - CALL FMREAD(YFILEDIA,YRECFM,HLUOUTDIA,'--',ITABCHAR, & - IGRID,ILENCH,YCOMMENT,IRESPDIA) IGROUP=ILENG/16 ! print *,' ILENG ILENCH IGROUP ',ILENG,ILENCH,IGROUP + TZFIELD%CMNHNAME = 'MENU_BUDGET' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: MENU_BUDGET' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = '' + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEINT + TZFIELD%NDIMS = 1 + CALL IO_READ_FIELD(TPDIAFILE,TZFIELD,ITABCHAR) DO JJ=1,IGROUP DO J = 1,16 YGROUP(JJ)(J:J)=CHAR(ITABCHAR(16*(JJ-1)+J)) diff --git a/src/MNH/modd_lunitn.f90 b/src/MNH/modd_lunitn.f90 index 82ccd39dbfed104555a1b4b311cc76b6061f2c1c..aec2234f0deea1e79a06343f1c05c6befb9f0079 100644 --- a/src/MNH/modd_lunitn.f90 +++ b/src/MNH/modd_lunitn.f90 @@ -53,6 +53,7 @@ IMPLICIT NONE TYPE LUNIT_t ! CHARACTER(LEN=28) :: CINIFILE ! Name of the input FM-file + TYPE(TFILEDATA),POINTER :: TINIFILE => NULL() ! 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 @@ -72,7 +73,8 @@ LOGICAL , DIMENSION(JPMODELMAX), SAVE :: LUNIT_FIRST_CALL = .TRUE. CHARACTER(LEN=4),SAVE :: CMASK_SURFEX='PREP' ! CHARACTER(LEN=28), POINTER :: CINIFILE=>NULL() -CHARACTER(LEN=28), POINTER :: CINIFILEPGD=>NULL() +TYPE(TFILEDATA), POINTER :: TINIFILE => NULL() +CHARACTER(LEN=28), POINTER :: CINIFILEPGD =>NULL() TYPE(TFILEDATA), POINTER :: TINIFILEPGD => NULL() CHARACTER(LEN=24), POINTER :: COUTFILE=>NULL() TYPE(TFILEDATA), POINTER :: TDIAFILE=>NULL() @@ -97,6 +99,7 @@ ENDIF ! ! Current model is set to model KTO CINIFILE=>LUNIT_MODEL(KTO)%CINIFILE +TINIFILE=>LUNIT_MODEL(KTO)%TINIFILE CINIFILEPGD=>LUNIT_MODEL(KTO)%CINIFILEPGD TINIFILEPGD=>LUNIT_MODEL(KTO)%TINIFILEPGD COUTFILE=>LUNIT_MODEL(KTO)%COUTFILE diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90 index b86f182967cf3f80556916496a0f4c84625800b1..c4713f707d65e29dd1925217cb8d705c36165066 100644 --- a/src/MNH/prep_pgd.f90 +++ b/src/MNH/prep_pgd.f90 @@ -135,10 +135,6 @@ REAL :: XSMOOTH_ZS = XUNDEF ! optional uniform smooth orography fo REAL, DIMENSION(:,:),ALLOCATABLE :: ZWORK ! work array for lat and lon reshape REAL, DIMENSION(:,:),ALLOCATABLE :: ZWORK_LAT ! work array for lat and lon reshape REAL, DIMENSION(:,:),ALLOCATABLE :: ZWORK_LON ! work array for lat and lon reshape -CHARACTER(LEN=16) :: YRECFM ! name of record -INTEGER :: IGRID ! grid location -INTEGER :: ILENCH ! length of comment string -CHARACTER(LEN=100):: YCOMMENT ! comment string INTEGER :: IIMAX, IJMAX INTEGER :: NHALO_MNH TYPE(TFILEDATA),POINTER :: TZFILE diff --git a/src/MNH/rain_ice_elec.f90 b/src/MNH/rain_ice_elec.f90 index d2b1c005bd8c0f10bdcaa812bfc32a28b153ed71..dddcd3e60a8b9f8ec975de2263818e8bda8f8861 100644 --- a/src/MNH/rain_ice_elec.f90 +++ b/src/MNH/rain_ice_elec.f90 @@ -457,8 +457,6 @@ REAL, DIMENSION(SIZE(XRTMIN)) :: ZRTMIN ! INTEGER , DIMENSION(SIZE(GMICRO)) :: I1,I2,I3 ! Used to replace the COUNT INTEGER :: JL ! and PACK intrinsics -CHARACTER (LEN=100) :: YCOMMENT ! Comment string in LFIFM file -CHARACTER (LEN=16) :: YRECFM ! Name of the desired field in LFIFM file ! LOGICAL, DIMENSION(:,:),ALLOCATABLE :: GELEC ! Logical of work for elec REAL, DIMENSION(:), ALLOCATABLE :: ZRSMIN_ELEC ! Limit value of ZRXS where charge is available diff --git a/src/MNH/set_ref.f90 b/src/MNH/set_ref.f90 index 7fb62eebe819f4c2eb464734cb9b2dca3d718258..45f23b24eb5a39c3b859a6d6a6ae6390acc8fe1e 100644 --- a/src/MNH/set_ref.f90 +++ b/src/MNH/set_ref.f90 @@ -214,10 +214,7 @@ REAL, DIMENSION(:,:,:), INTENT(OUT) :: PRHODJ ! rhod J ! !* 0.2 declarations of local variables ! -INTEGER :: IGRID,ILENCH,IRESP ! File -CHARACTER (LEN=16) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables -CHARACTER (LEN=2) :: YDIR +INTEGER :: IRESP INTEGER :: ILUOUT ! Unit number for prints REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)) :: ZZM ! height of the mass levels diff --git a/src/MNH/set_subdomain.f90 b/src/MNH/set_subdomain.f90 index 001d82105d5fbc6bb540a7161ce53fd2b54d0170..9a30770153c3923700db6966cf5e5aa45c18ff84 100644 --- a/src/MNH/set_subdomain.f90 +++ b/src/MNH/set_subdomain.f90 @@ -12,11 +12,13 @@ MODULE MODI_SET_SUBDOMAIN ! ######################### INTERFACE - SUBROUTINE SET_SUBDOMAIN(HNAMELIST,HFMFILE,KXOR_DAD,KYOR_DAD, & - KXOR,KYOR,KDXRATIO,KDYRATIO ) + SUBROUTINE SET_SUBDOMAIN(HNAMELIST,TPATMFILE,KXOR_DAD,KYOR_DAD, & + KXOR,KYOR,KDXRATIO,KDYRATIO ) +! +USE MODD_IO_ll, ONLY : TFILEDATA ! CHARACTER(LEN=28), INTENT(IN) :: HNAMELIST ! name of the namelist file -CHARACTER(LEN=28), INTENT(IN) :: HFMFILE ! name of the atmospheric MNH file +TYPE(TFILEDATA), INTENT(IN) :: TPATMFILE ! atmospheric MNH file INTEGER, INTENT(OUT):: KXOR_DAD ! XOR compared to Dad file, if any INTEGER, INTENT(OUT):: KYOR_DAD ! YOR compared to Dad file, if any INTEGER, INTENT(OUT):: KXOR ! XOR given or computed @@ -28,10 +30,10 @@ END SUBROUTINE SET_SUBDOMAIN END INTERFACE END MODULE MODI_SET_SUBDOMAIN ! -! ####################################################################### - SUBROUTINE SET_SUBDOMAIN(HNAMELIST,HFMFILE,KXOR_DAD,KYOR_DAD, & - KXOR,KYOR,KDXRATIO,KDYRATIO ) -! ####################################################################### +! ################################################################# + SUBROUTINE SET_SUBDOMAIN(HNAMELIST,TPATMFILE,KXOR_DAD,KYOR_DAD, & + KXOR,KYOR,KDXRATIO,KDYRATIO ) +! ################################################################# ! !!**** *SET_SUBDOMAIN* - computes the horizontal MESO-NH domain !! @@ -93,6 +95,7 @@ USE MODE_FM USE MODE_IO_ll ! USE MODD_CONF ! declaration modules +USE MODD_IO_ll, ONLY : TFILEDATA USE MODD_LUNIT USE MODD_GRID USE MODD_GRID_n @@ -109,7 +112,7 @@ IMPLICIT NONE ! ------------------------ ! CHARACTER(LEN=28), INTENT(IN) :: HNAMELIST ! name of the namelist file -CHARACTER(LEN=28), INTENT(IN) :: HFMFILE ! name of the atmospheric MNH file +TYPE(TFILEDATA), INTENT(IN) :: TPATMFILE ! atmospheric MNH file INTEGER, INTENT(OUT):: KXOR_DAD ! XOR compared to Dad file, if any INTEGER, INTENT(OUT):: KYOR_DAD ! YOR compared to Dad file, if any INTEGER, INTENT(OUT):: KXOR ! XOR given or computed @@ -123,7 +126,7 @@ INTEGER, INTENT(OUT):: KDYRATIO ! DYRATIO compared to Dad file, if an CHARACTER(LEN=28) :: YDADFILE ! name of atmospheric file father (if any) INTEGER :: ILUNAM ! logical unit for namelist file HNAMELIST INTEGER :: ILUOUT0 ! logical unit for listing file -INTEGER :: IRESP ! return-code if problems eraised +INTEGER :: IRESP ! return-code if problems araised INTEGER :: IIU,IJU ! number of points in x,y directions of the large grid INTEGER :: IIINF ! left point index INTEGER :: IISUP ! right point index @@ -136,9 +139,6 @@ INTEGER :: NIMAX,NJMAX ! Dimensions respectively in x, y directions REAL, DIMENSION(:), ALLOCATABLE :: ZXHAT ! = XXHAT(:) REAL, DIMENSION(:), ALLOCATABLE :: ZYHAT ! = XYHAT(:) ! -INTEGER :: IGRID,ILENCH ! File -CHARACTER (LEN=16) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables LOGICAL :: GFOUND ! return code when searching namelist ! !* 0.3 Declaration of namelists @@ -231,29 +231,24 @@ WRITE(ILUOUT0,*) 'given or computed NYOR = ',NYOR !* 4.1 TEST if FATHER of atmospheric MNH file exists: ! --------------------------------------------- ! -YRECFM = 'DAD_NAME' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',YDADFILE,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPATMFILE,'DAD_NAME',YDADFILE,IRESP) IF ( IRESP /= 0 ) YDADFILE=' ' ! IF (LEN_TRIM(YDADFILE)/=0) THEN - YRECFM='DXRATIO' - CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',KDXRATIO,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPATMFILE,'DXRATIO',KDXRATIO,IRESP) IF ( IRESP /= 0 .OR. KDXRATIO == 0 ) THEN KDXRATIO=1 END IF ! - YRECFM='DYRATIO' - CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',KDYRATIO,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPATMFILE,'DYRATIO',KDYRATIO,IRESP) IF ( IRESP /= 0 .OR. KDYRATIO == 0 ) THEN KDYRATIO=1 END IF ! - YRECFM='XOR' - CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',KXOR_DAD,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPATMFILE,'XOR',KXOR,IRESP) IF ( IRESP /= 0 ) KXOR_DAD=1 ! - YRECFM='YOR' - CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',KYOR_DAD,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPATMFILE,'YOR',KYOR,IRESP) IF ( IRESP /= 0 ) KYOR_DAD=1 END IF ! diff --git a/src/MNH/spawn_field2.f90 b/src/MNH/spawn_field2.f90 index d5f9fb857ab4d37cb6dfca2671fd7edc54a19a9c..e26fade2c706b71166c241420a35669e443ae160 100644 --- a/src/MNH/spawn_field2.f90 +++ b/src/MNH/spawn_field2.f90 @@ -14,10 +14,12 @@ INTERFACE PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM, & PDTHFRC,PDRVFRC,PTHREL,PRVREL, & PVU_FLUX_M,PVTH_FLUX_M,PWTH_FLUX_M, & - HSONFILE,KIUSON,KJUSON, & + TPSONFILE,KIUSON,KJUSON, & KIB2,KJB2,KIE2,KJE2, & KIB1,KJB1,KIE1,KJE1 ) ! +USE MODD_IO_ll, ONLY : TFILEDATA +! INTEGER, INTENT(IN) :: KXOR,KXEND ! horizontal position (i,j) of the ORigin and END INTEGER, INTENT(IN) :: KYOR,KYEND ! of the model 2 domain, relative to model 1 INTEGER, INTENT(IN) :: KDXRATIO ! x and y-direction Resolution ratio @@ -39,7 +41,7 @@ REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PTHREL,PRVREL REAL, DIMENSION(:,:,:), INTENT(OUT) :: PVU_FLUX_M,PVTH_FLUX_M,PWTH_FLUX_M ! ! Arguments for spawning with 2 input files (father+son1) -CHARACTER (LEN=*), OPTIONAL, INTENT(IN) :: HSONFILE ! name of the input FM-file SON +TYPE(TFILEDATA), 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 @@ -51,14 +53,14 @@ END SUBROUTINE SPAWN_FIELD2 END INTERFACE ! END MODULE MODI_SPAWN_FIELD2 -! ######spl +! ########################################################################## SUBROUTINE SPAWN_FIELD2(KXOR,KYOR,KXEND,KYEND,KDXRATIO,KDYRATIO,HTURB, & PUT,PVT,PWT,PTHVT,PRT,PHUT,PTKET,PSVT,PATC, & PSRCT,PSIGS, & PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM, & PDTHFRC,PDRVFRC,PTHREL,PRVREL, & PVU_FLUX_M,PVTH_FLUX_M,PWTH_FLUX_M, & - HSONFILE,KIUSON,KJUSON, & + TPSONFILE,KIUSON,KJUSON, & KIB2,KJB2,KIE2,KJE2, & KIB1,KJB1,KIE1,KJE1 ) ! ########################################################################## @@ -151,6 +153,7 @@ END MODULE MODI_SPAWN_FIELD2 !* 0. DECLARATIONS ! ------------ ! +USE MODD_IO_ll, ONLY : TFILEDATA USE MODD_PARAMETERS ! Declarative modules USE MODD_CONF USE MODD_CST @@ -220,7 +223,7 @@ REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PDTHFRC,PDRVFRC REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PTHREL,PRVREL REAL, DIMENSION(:,:,:), INTENT(OUT) :: PVU_FLUX_M,PVTH_FLUX_M,PWTH_FLUX_M ! Arguments for spawning with 2 input files (father+son1) -CHARACTER (LEN=*), OPTIONAL, INTENT(IN) :: HSONFILE ! name of the input FM-file SON +TYPE(TFILEDATA), 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 @@ -297,7 +300,7 @@ CALL COMPUTE_THV_HU(CONF_MODEL(1)%LUSERV,XRT1,XTHT1,XPABST1,ZTHVT,ZHUT) ! !* 1.2 Working arrays for reading in SON input file ! -IF (PRESENT(HSONFILE)) THEN +IF (PRESENT(TPSONFILE)) THEN ALLOCATE(ZWORK3D(KIUSON,KJUSON,SIZE(PUT,3))) ALLOCATE(ZPABST1(KIE1-KIB1+1,KJE1-KJB1+1,SIZE(PUT,3))) ALLOCATE(ZTHT1(KIE1-KIB1+1,KJE1-KJB1+1,SIZE(PUT,3))) @@ -723,19 +726,16 @@ END IF !* 2.2.3 Informations from model SON1 ! (LS fields are not treated because they are identical in the father file) ! -IF (PRESENT(HSONFILE)) THEN +IF (PRESENT(TPSONFILE)) THEN YDIR='XY' ! !variables which always exist ! - YRECFM='UT' ! U wind component at time t - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPSONFILE,'UT',ZWORK3D) ! U wind component at time t PUT(KIB2:KIE2,KJB2:KJE2,:) = ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - YRECFM='VT' ! V wind component at time t - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPSONFILE,'VT',ZWORK3D) ! V wind component at time t PVT(KIB2:KIE2,KJB2:KJE2,:) = ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) - YRECFM='WT' ! W wind component at time t - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPSONFILE,'WT',ZWORK3D) ! W wind component at time t PWT(KIB2:KIE2,KJB2:KJE2,:) = ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) ! ! moist variables @@ -744,43 +744,43 @@ IF (PRESENT(HSONFILE)) THEN IF (IRR<=CONF_MODEL(1)%NRR) THEN GUSERV=.TRUE. YRECFM='RVT' ! Vapor at time t - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) IF(IRESP==0) IRR=IRR+1 END IF IF (IRR<=CONF_MODEL(1)%NRR) THEN YRECFM='RCT' ! Cloud at time t - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) IF(IRESP==0) IRR=IRR+1 END IF IF (IRR<=CONF_MODEL(1)%NRR) THEN YRECFM='RRT' ! Rain at time t - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) IF(IRESP==0) IRR=IRR+1 END IF IF (IRR<=CONF_MODEL(1)%NRR) THEN YRECFM='RIT' ! Ice at time t - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) IF(IRESP==0) IRR=IRR+1 END IF IF (IRR<=CONF_MODEL(1)%NRR) THEN YRECFM='RST' ! Snow at time t - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) IF(IRESP==0) IRR=IRR+1 END IF IF (IRR<=CONF_MODEL(1)%NRR) THEN YRECFM='RGT' ! Graupel at time t - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) IF(IRESP==0) IRR=IRR+1 END IF IF (IRR<=CONF_MODEL(1)%NRR) THEN YRECFM='RHT' ! Hail at time t - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) IF(IRESP==0) IRR=IRR+1 END IF @@ -789,10 +789,10 @@ IF (PRESENT(HSONFILE)) THEN WRITE(ILUOUT,FMT=*) ' ',CONF_MODEL(1)%NRR,' moist variables in model1 and model2, ', & IRR,' moist variables in input SON' YRECFM='THT' ! Theta at time t - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) ZTHT1(:,:,:)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) YRECFM='PABST' ! Pressure at time t - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) ZPABST1(:,:,:)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) ! CALL COMPUTE_THV_HU(GUSERV,ZRT1,ZTHT1,ZPABST1,ZTHVT1,ZHUT1) @@ -807,7 +807,7 @@ IF (PRESENT(HSONFILE)) THEN ! IF (HTURB/='NONE') THEN YRECFM='TKET' ! Turbulence Kinetic Energy at time t - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) IF(IRESP==0) PTKET(KIB2:KIE2,KJB2:KJE2,:)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END IF ! @@ -816,13 +816,13 @@ IF (PRESENT(HSONFILE)) THEN IF (NSV /= 0) THEN DO JSV = 1, NSV_USER ! Users Scalar Variables WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO DO JSV = NSV_C2R2BEG,NSV_C2R2END ! C2R2 Scalar Variables YRECFM=TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T' - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO @@ -878,92 +878,92 @@ IF (PRESENT(HSONFILE)) THEN YRECFM_T=TRIM(CLIMA_COLD_NAMES(5))//'T' END IF ! time t - CALL FMREAD(HSONFILE,YRECFM_T,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM_T,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO ! DO JSV = NSV_ELECBEG,NSV_ELECEND ! ELEC Scalar Variables YRECFM=TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T' - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO DO JSV = NSV_CHEMBEG,NSV_CHEMEND ! Chemical Scalar Variables YRECFM=TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//'T' - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO DO JSV = NSV_CHICBEG,NSV_CHICEND ! Ice phase chemical Scalar Variables YRECFM=TRIM(CICNAMES(JSV-NSV_CHICBEG+1))//'T' - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO DO JSV = NSV_AERBEG,NSV_AEREND ! Orilam Scalar Variables YRECFM=TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T' - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO DO JSV = NSV_DSTBEG,NSV_DSTEND ! Dust Scalar Variables YRECFM=TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T' - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO DO JSV = NSV_SLTBEG,NSV_SLTEND ! Sea Salt Scalar Variables YRECFM=TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T' - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO DO JSV = NSV_LGBEG,NSV_LGEND ! LG Scalar Variables YRECFM=TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T' - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO DO JSV = NSV_LNOXBEG,NSV_LNOXEND ! LNOx Scalar Variables YRECFM='LINOX' - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO DO JSV = NSV_PPBEG,NSV_PPEND ! Passive scalar variables WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO #ifdef MNH_FOREFIRE DO JSV = NSV_FFBEG,NSV_FFEND ! ForeFire variables WRITE(YRECFM,'(A3,I3.3)')'SVM',JSV - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO #endif DO JSV = NSV_CSBEG,NSV_CSEND ! Passive scalar variables WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO DO JSV = 1,NSV_PP ! Passive scalar variables YRECFM='ATC' - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO #ifdef MNH_FOREFIRE DO JSV = 1,NSV_FF ! ForeFire variables YRECFM='ATC' - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END DO #endif @@ -973,17 +973,17 @@ IF (PRESENT(HSONFILE)) THEN ! IF (HTURB /= 'NONE' .AND. IRR>1) THEN YRECFM='SRCT' ! turbulent flux SRC at time t - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) IF( IRESP /= 0 ) THEN YRECFM='SRC' - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH, & YCOMMENT,IRESP) END IF IF(IRESP == 0) PSRCT(KIB2:KIE2,KJB2:KJE2,:) = & ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) YRECFM='SIGS' ! subgrid condensation - CALL FMREAD(HSONFILE,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FMREAD(TPSONFILE%CNAME,YRECFM,CLUOUT,YDIR,ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) IF(IRESP == 0) PSIGS(KIB2:KIE2,KJB2:KJE2,:) = & ZWORK3D(KIB1:KIE1,KJB1:KJE1,:) END IF diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90 index f994bf1623167412bc6023da26ff5f20befc0319..48813da8938cf97d39b159e47c861afa33ebee7e 100644 --- a/src/MNH/spawn_model2.f90 +++ b/src/MNH/spawn_model2.f90 @@ -315,9 +315,6 @@ LOGICAL, INTENT(IN) :: OSPAWN_SURF ! flag to spawn surface fields INTEGER :: IRESP ! Return codes in FM routines INTEGER :: ILUOUT ! Logical unit number for the output listing INTEGER :: INPRAR ! Number of articles predicted in the LFIFM file -INTEGER :: ININAR ! Number of articles present in the LFIFM file -INTEGER :: IGRID,ILENCH ! File management -CHARACTER (LEN=100) :: YCOMMENT ! variables ! CHARACTER (LEN=32) :: YDESFM ! Name of the desfm part of the FM-file ! @@ -502,15 +499,13 @@ IF (LEN_TRIM(HSONFILE) /= 0 ) THEN 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) - CALL FMREAD(HSONFILE,'XOR',CLUOUT,'--',IXORSON,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(HSONFILE,'YOR',CLUOUT,'--',IYORSON,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(HSONFILE,'DXRATIO',CLUOUT,'--',IDXRATIOSON,IGRID,ILENCH, & - YCOMMENT,IRESP) - CALL FMREAD(HSONFILE,'DYRATIO',CLUOUT,'--',IDYRATIOSON,IGRID,ILENCH, & - YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZSONFILE,'DAD_NAME',YDAD_SON) + CALL IO_READ_FIELD(TZSONFILE,'IMAX', IIMAXSON) + CALL IO_READ_FIELD(TZSONFILE,'JMAX', IJMAXSON) + CALL IO_READ_FIELD(TZSONFILE,'XOR', IXORSON) + CALL IO_READ_FIELD(TZSONFILE,'YOR', IYORSON) + CALL IO_READ_FIELD(TZSONFILE,'DXRATIO', IDXRATIOSON) + CALL IO_READ_FIELD(TZSONFILE,'DYRATIO', IDYRATIOSON) ! IF (ADJUSTL(ADJUSTR(YDAD_SON)).NE.ADJUSTL(ADJUSTR(CMY_NAME(1)))) THEN WRITE(ILUOUT,*) 'SPAWN_MODEL2: DAD of SON file is different from the one of model2' @@ -1149,7 +1144,7 @@ ELSE XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM, & XDTHFRC,XDRVFRC,XTHREL,XRVREL, & XVU_FLUX_M, XVTH_FLUX_M,XWTH_FLUX_M, & - HSONFILE,IIUSON,IJUSON, & + TZSONFILE,IIUSON,IJUSON, & IIB2,IJB2,IIE2,IJE2, & IIB1,IJB1,IIE1,IJE1 ) CALL MPPDB_CHECK3D(XUT,"SPAWN_M2 after SPAWN_FIELD2:XUT",PRECISION) @@ -1204,7 +1199,7 @@ CALL SPAWN_PRESSURE2(NXOR,NYOR,NXEND,NYEND,NDXRATIO,NDYRATIO, & ! IF (.NOT.GNOSON) THEN ALLOCATE(ZWORK3D(IIUSON,IJUSON,IKU)) - CALL FMREAD(HSONFILE,'PABST',CLUOUT,'XY',ZWORK3D,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZSONFILE,'PABST',ZWORK3D) XPABST(IIB2:IIE2,IJB2:IJE2,:) = ZWORK3D(IIB1:IIE1,IJB1:IJE1,:) DEALLOCATE(ZWORK3D) END IF diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90 index 978b1d23381526ef20927e7a1a1b181b9e27cc26..959be81109b4ca88350a71dd444a8c5b59122e04 100644 --- a/src/MNH/write_lbn.f90 +++ b/src/MNH/write_lbn.f90 @@ -133,12 +133,6 @@ TYPE(TFILEDATA), INTENT(IN) :: TPFILE ! File characteristics ! INTEGER :: ILUOUT ! logical unit INTEGER :: IRESP ! IRESP : return-code for fmwrit -INTEGER :: IGRID ! IGRID : grid indicator -CHARACTER (LEN=2) :: YDIR ! Type of the data field -INTEGER :: ILENCH ! ILENCH : length of comment string -CHARACTER(LEN=28) :: YFMFILE ! Name of FM-file to write -CHARACTER(LEN=16) :: YRECFM ! Name of the article to be written -CHARACTER(LEN=100) :: YCOMMENT ! Comment string ! INTEGER :: IRR ! Index for moist variables INTEGER :: JRR,JSV ! loop index for moist and scalar variables @@ -164,8 +158,6 @@ CALL FMLOOK_ll(CLUOUT,CLUOUT,ILUOUT,IRESP) ! IMI = GET_CURRENT_MODEL_INDEX() ! -YFMFILE = TPFILE%CNAME -! ! 2. WRITE THE DIMENSION OF LB FIELDS ! -------------------------------- ! @@ -190,11 +182,6 @@ IF(NSIZELBY_ll /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBYTHM',NSIZELBY_ll,XLBYTHM !* 4 LB-TKE ! ------ ! -IGRID=1 -YDIR='--' -YCOMMENT='' -ILENCH=LEN(YCOMMENT) -! IF(CTURB/='NONE') THEN CALL IO_WRITE_FIELD(TPFILE,'HORELAX_TKE',LHORELAX_TKE) ! @@ -276,7 +263,6 @@ IF (NSV >=1) THEN TZFIELD%NDIMS = 0 CALL IO_WRITE_FIELD(TPFILE,TZFIELD,GHORELAX_SV) ! - IGRID=1 IRIMX =(NSIZELBXSV_ll-2*JPHEXT)/2 IRIMY =(NSIZELBYSV_ll-2*JPHEXT)/2 IF (NSV_USER>0) THEN diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90 index feb30eec2ab37f2f5854e3b351400ddf5a131ae2..2fbb05a59bdd9c458dc9876dcb48301cf3694926 100644 --- a/src/MNH/zoom_pgd.f90 +++ b/src/MNH/zoom_pgd.f90 @@ -94,11 +94,6 @@ INTEGER :: IRESP ! return code for I/O INTEGER :: ILUOUT0 INTEGER :: ILUNAM INTEGER :: IINFO_ll -INTEGER :: ININAR -INTEGER :: IGRID -INTEGER :: ILENCH -CHARACTER (LEN=16) :: YRECFM -CHARACTER(LEN=100) :: YCOMMENT CHARACTER(LEN=28) :: YZOOMFILE ! name of the output file CHARACTER(LEN=2) :: YZOOMNBR CHARACTER(LEN=28) :: YMY_NAME,YDAD_NAME @@ -171,15 +166,13 @@ 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)) ALLOCATE(ZZSMT1(NIMAX+2*JPHEXT,NJMAX+2*JPHEXT)) -YRECFM='ZS' -CALL FMREAD(CPGDFILE,YRECFM,CLUOUT0,'XY',ZZS1,IGRID,ILENCH,YCOMMENT,IRESP) -YRECFM='ZSMT' -CALL FMREAD(CPGDFILE,YRECFM,CLUOUT0,'XY',ZZSMT1,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZPGDFILE,'ZS',ZZS1) +CALL IO_READ_FIELD(TZPGDFILE,'ZSMT',ZZSMT1) ! !* 2.3 Define subdomain ! ---------------- ! -CALL SET_SUBDOMAIN(YNAMELIST,CPGDFILE,IXOR_DAD,IYOR_DAD,IXOR,IYOR,IDXRATIO,IDYRATIO) +CALL SET_SUBDOMAIN(YNAMELIST,TZPGDFILE,IXOR_DAD,IYOR_DAD,IXOR,IYOR,IDXRATIO,IDYRATIO) ! NIMAX, NJMAX: size of output domain ! CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT) @@ -214,8 +207,7 @@ CALL WRITE_HGRID(1,TZZOOMFILE) !* 2.5 Preparation of surface physiographic fields ! ------------------------------------------- ! -CALL FMREAD(CPGDFILE,'SURF ',CLUOUT0,'--',CSURF,IGRID,ILENCH,YCOMMENT,IRESP) -CALL FMCLOS_ll(CPGDFILE,'KEEP',CLUOUT0,IRESP) +CALL IO_READ_FIELD(TZPGDFILE,'SURF',CSURF) ! ! IF (CSURF=='EXTE') THEN