diff --git a/src/MNH/ini_deep_convection.f90 b/src/MNH/ini_deep_convection.f90 index d3e9e033ed0ca7c9a9c0d944cc96899cdc6b80db..056f1ce8168857a9029aeb8372f7bd034951b31d 100644 --- a/src/MNH/ini_deep_convection.f90 +++ b/src/MNH/ini_deep_convection.f90 @@ -8,18 +8,19 @@ ! INTERFACE ! - SUBROUTINE INI_DEEP_CONVECTION(HINIFILE,HLUOUT,OINIDCONV,TPDTCUR, & - KCOUNTCONV,PDTHCONV,PDRVCONV,PDRCCONV, & - PDRICONV,PPRCONV,PPRSCONV,PPACCONV, & - PUMFCONV,PDMFCONV,PMFCONV,PPRLFLXCONV,PPRSFLXCONV,& - PCAPE,KCLTOPCONV,KCLBASCONV, & - TPDTDCONV, HGETSVCONV, PDSVCONV, & - OCH_CONV_LINOX, PIC_RATE, PCG_RATE, & - PIC_TOTAL_NUMBER, PCG_TOTAL_NUMBER ) -! + SUBROUTINE INI_DEEP_CONVECTION(TPINIFILE,HLUOUT,OINIDCONV,TPDTCUR, & + KCOUNTCONV,PDTHCONV,PDRVCONV,PDRCCONV, & + PDRICONV,PPRCONV,PPRSCONV,PPACCONV, & + PUMFCONV,PDMFCONV,PMFCONV,PPRLFLXCONV,PPRSFLXCONV, & + PCAPE,KCLTOPCONV,KCLBASCONV, & + TPDTDCONV, HGETSVCONV, PDSVCONV, & + OCH_CONV_LINOX, PIC_RATE, PCG_RATE, & + PIC_TOTAL_NUMBER, PCG_TOTAL_NUMBER ) +! +USE MODD_IO_ll, ONLY : TFILEDATA USE MODD_TIME ! -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) :: OINIDCONV ! switch to initialize or read @@ -60,16 +61,16 @@ END SUBROUTINE INI_DEEP_CONVECTION END INTERFACE ! END MODULE MODI_INI_DEEP_CONVECTION -! ########################################################################## - SUBROUTINE INI_DEEP_CONVECTION(HINIFILE,HLUOUT,OINIDCONV,TPDTCUR, & - KCOUNTCONV,PDTHCONV,PDRVCONV,PDRCCONV, & - PDRICONV,PPRCONV,PPRSCONV,PPACCONV, & - PUMFCONV,PDMFCONV,PMFCONV,PPRLFLXCONV,PPRSFLXCONV,& - PCAPE,KCLTOPCONV,KCLBASCONV, & - TPDTDCONV, HGETSVCONV, PDSVCONV, & - OCH_CONV_LINOX, PIC_RATE, PCG_RATE, & - PIC_TOTAL_NUMBER, PCG_TOTAL_NUMBER ) -! ########################################################################## +! ################################################################################### + SUBROUTINE INI_DEEP_CONVECTION(TPINIFILE,HLUOUT,OINIDCONV,TPDTCUR, & + KCOUNTCONV,PDTHCONV,PDRVCONV,PDRCCONV, & + PDRICONV,PPRCONV,PPRSCONV,PPACCONV, & + PUMFCONV,PDMFCONV,PMFCONV,PPRLFLXCONV,PPRSFLXCONV, & + PCAPE,KCLTOPCONV,KCLBASCONV, & + TPDTDCONV, HGETSVCONV, PDSVCONV, & + OCH_CONV_LINOX, PIC_RATE, PCG_RATE, & + PIC_TOTAL_NUMBER, PCG_TOTAL_NUMBER ) +! ################################################################################### ! !!**** Routine to initialize the convective tendencies and the !! convective counter @@ -113,6 +114,7 @@ END MODULE MODI_INI_DEEP_CONVECTION !* 0. DECLARATIONS ! ------------ ! +USE MODD_IO_ll, ONLY : TFILEDATA USE MODD_TIME USE MODD_CONVPAR USE MODD_CH_M9_n, ONLY: CNAMES @@ -129,15 +131,15 @@ USE MODD_CH_AEROSOL, ONLY : CAERONAMES USE MODD_DUST, ONLY : CDUSTNAMES USE MODD_SALT, ONLY : CSALTNAMES ! +USE MODE_FIELD USE MODE_FM -! USE MODE_FMREAD ! 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) :: OINIDCONV ! switch to initialize or read @@ -178,16 +180,13 @@ REAL, DIMENSION(:,:), INTENT(INOUT) :: PCG_TOTAL_NUMBER ! Total number of CG !* 0.2 declarations of local variables ! ! -INTEGER :: ILUOUT -INTEGER :: IGRID,ILENCH,IRESP ! File -CHARACTER (LEN=16) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables -INTEGER :: JSV ! number of tracers +INTEGER :: IID +INTEGER :: IRESP +INTEGER :: JSV ! number of tracers +TYPE(TFIELDDATA) :: TZFIELD ! !------------------------------------------------------------------------------- ! -CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP) -! !* 1. INITIALIZE CONSTANTS USED IN DEEP CONVECTION PARAMETERIZATION ! ------------------------------------------------------------- ! @@ -226,181 +225,113 @@ IF ( OINIDCONV ) THEN ! ELSE ! - YRECFM='DTDCONV' - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'--',TPDTDCONV,IGRID,ILENCH,YCOMMENT,IRESP) -! -! - YRECFM = 'COUNTCONV' - YCOMMENT = 'X_Y_COUNTCONV' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',KCOUNTCONV,IGRID,ILENCH,YCOMMENT,IRESP) -! -! - YRECFM = 'DTHCONV' - YCOMMENT = 'X_Y_Z_DTHCONV (K/S)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDTHCONV,IGRID,ILENCH,YCOMMENT,IRESP) -! -! - YRECFM = 'DRVCONV' - YCOMMENT = 'X_Y_Z_DRVCONV (1/S)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDRVCONV,IGRID,ILENCH,YCOMMENT,IRESP) -! -! - YRECFM = 'DRCCONV' - YCOMMENT = 'X_Y_Z_DRCCONV (1/S)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDRCCONV,IGRID,ILENCH,YCOMMENT,IRESP) -! -! - YRECFM = 'DRICONV' - YCOMMENT = 'X_Y_Z_DRICONV (1/S)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDRICONV,IGRID,ILENCH,YCOMMENT,IRESP) -! -! - YRECFM = 'PRCONV' - YCOMMENT = 'X_Y_PRCONV (MM/H)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PPRCONV,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'DTDCONV', TPDTDCONV) + CALL IO_READ_FIELD(TPINIFILE,'COUNTCONV',KCOUNTCONV) + CALL IO_READ_FIELD(TPINIFILE,'DTHCONV', PDTHCONV) + CALL IO_READ_FIELD(TPINIFILE,'DRVCONV', PDRVCONV) + CALL IO_READ_FIELD(TPINIFILE,'DRCCONV', PDRCCONV) + CALL IO_READ_FIELD(TPINIFILE,'DRICONV', PDRICONV) +! + CALL FIND_FIELD_ID_FROM_MNHNAME('PRCONV',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm hour-1' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PPRCONV) PPRCONV=PPRCONV/(1000.*3600.) ! conversion into m/s units ! -! - YRECFM = 'PRSCONV' - YCOMMENT = 'X_Y_PRSCONV (MM/H)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PPRSCONV,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FIND_FIELD_ID_FROM_MNHNAME('PRSCONV',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm hour-1' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PPRSCONV) PPRSCONV=PPRSCONV/(1000.*3600.) ! conversion into m/s units ! -! - YRECFM = 'PACCONV' - YCOMMENT = 'X_Y_PACCONV (MM)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PPACCONV,IGRID,ILENCH,YCOMMENT,IRESP) + CALL FIND_FIELD_ID_FROM_MNHNAME('PACCONV',IID,IRESP) + TZFIELD = TFIELDLIST(IID) + TZFIELD%CUNITS = 'mm' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PPACCONV) PPACCONV=PPACCONV/1000. ! conversion into m unit ! IF ( OCH_CONV_LINOX ) THEN - YRECFM = 'IC_RATE' - YCOMMENT = 'X_Y_IC_RATE (/s)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PIC_RATE,IGRID,ILENCH, & - YCOMMENT,IRESP) -! -! - YRECFM = 'CG_RATE' - YCOMMENT = 'X_Y_CG_RATE (/s)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PCG_RATE,IGRID,ILENCH, & - YCOMMENT,IRESP) -! -! - YRECFM = 'IC_TOTAL_NB' - YCOMMENT = 'X_Y_IC_TOTAL_NUMBER (no unit)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PIC_TOTAL_NUMBER,IGRID,ILENCH, & - YCOMMENT,IRESP) -! -! - YRECFM = 'CG_TOTAL_NB' - YCOMMENT = 'X_Y_CG_TOTAL_NUMBER (no unit)' - IGRID = 1 - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PCG_TOTAL_NUMBER,IGRID,ILENCH, & - YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'IC_RATE', PIC_RATE) + CALL IO_READ_FIELD(TPINIFILE,'CG_RATE', PCG_RATE) + CALL IO_READ_FIELD(TPINIFILE,'IC_TOTAL_NB',PIC_TOTAL_NUMBER) + CALL IO_READ_FIELD(TPINIFILE,'CG_TOTAL_NB',PCG_TOTAL_NUMBER) END IF ! ! SELECT CASE(HGETSVCONV) CASE('READ') - IGRID=1 + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 's-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! DO JSV = 1, NSV_USER - WRITE(YRECFM,'(A7,I3.3)')'DSVCONV',JSV - WRITE(YCOMMENT,'(A6,A7,I3.3,A6)')'X_Y_Z_','DSVCONV',JSV,' (1/S)' - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) + WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV)) END DO DO JSV = NSV_C2R2BEG, NSV_C2R2END - YRECFM = 'DSVCONV_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1)) - WRITE(YCOMMENT,'(A6,A7,I3.3,A6)')'X_Y_Z_','DSVCONV',JSV,' (1/S)' - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DSVCONV_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV)) END DO DO JSV = NSV_C1R3BEG, NSV_C1R3END - YRECFM = 'DSVCONV_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1)) - WRITE(YCOMMENT,'(A6,A7,I3.3,A6)')'X_Y_Z_','DSVCONV',JSV,' (1/S)' - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DSVCONV_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV)) END DO DO JSV = NSV_ELECBEG, NSV_ELECEND - YRECFM = 'DSVCONV_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1)) - WRITE(YCOMMENT,'(A6,A7,I3.3,A6)')'X_Y_Z_','DSVCONV',JSV,' (1/S)' - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DSVCONV_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV)) END DO DO JSV = NSV_CHEMBEG, NSV_CHEMEND - YRECFM = 'DSVCONV_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1))) - WRITE(YCOMMENT,'(A6,A7,I3.3,A6)')'X_Y_Z_','DSVCONV',JSV,' (1/S)' - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DSVCONV_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1))) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV)) END DO DO JSV = NSV_AERBEG, NSV_AEREND - YRECFM = 'DSVCONV_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1))) - WRITE(YCOMMENT,'(A6,A7,I3.3,A6)')'X_Y_Z_','DSVCONV',JSV,' (1/S)' - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DSVCONV_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1))) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV)) END DO DO JSV = NSV_LNOXBEG,NSV_LNOXEND - YRECFM='DSVCONV_LINOX' - WRITE(YCOMMENT,'(A6,A7,I3.3,A6)')'X_Y_Z_','DSVCONV',JSV,' (1/S)' - ILENCH=LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DSVCONV_LINOX' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV)) END DO DO JSV = NSV_DSTBEG, NSV_DSTEND - YRECFM = 'DSVCONV_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1))) - WRITE(YCOMMENT,'(A6,A7,I3.3,A6)')'X_Y_Z_','DSVCONV',JSV,' (1/S)' - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DSVCONV_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1))) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV)) END DO DO JSV = NSV_SLTBEG, NSV_SLTEND - YRECFM = 'DSVCONV_'//TRIM(UPCASE(CSALTNAMES(JSV-NSV_SLTBEG+1))) - WRITE(YCOMMENT,'(A6,A7,I3.3,A6)')'X_Y_Z_','DSVCONV',JSV,' (1/S)' - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DSVCONV_'//TRIM(UPCASE(CSALTNAMES(JSV-NSV_SLTBEG+1))) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV)) END DO DO JSV = NSV_LGBEG, NSV_LGEND - YRECFM = 'DSVCONV_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1)) - WRITE(YCOMMENT,'(A6,A7,I3.3,A6)')'X_Y_Z_','DSVCONV',JSV,' (1/S)' - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'DSVCONV_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1)) + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV)) END DO DO JSV = NSV_PPBEG, NSV_PPEND - WRITE(YRECFM,'(A7,I3.3)')'DSVCONV',JSV - WRITE(YCOMMENT,'(A6,A7,I3.3,A6)')'X_Y_Z_','DSVCONV',JSV,' (1/S)' - ILENCH = LEN(YCOMMENT) - CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDSVCONV(:,:,:,JSV), & - IGRID,ILENCH,YCOMMENT,IRESP) + WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV)) END DO END SELECT ! diff --git a/src/MNH/ini_lb.f90 b/src/MNH/ini_lb.f90 index fd2dc11d6f4b330d8f5c517b8b95f9886d79f05c..a19b00f3b6a96dec2c24c8a17f9bab1d81110fd6 100644 --- a/src/MNH/ini_lb.f90 +++ b/src/MNH/ini_lb.f90 @@ -834,54 +834,65 @@ DO JSV = NSV_ELECBEG, NSV_ELECEND END SELECT END DO ! Chemical gas phase scalar variables -DO JSV = NSV_CHGSBEG, NSV_CHGSEND - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM = 'LBX_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHGSBEG+1))) - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,IRESP) - IF ( SIZE(PLBXSVM,1) /= 0 ) THEN - IF (IRESP/=0) THEN - IF (PRESENT(PLBXSVMM)) THEN - PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV) - WRITE(ILUOUT,*) 'Chemical PLBXSVM will be initialized to 0' - ELSE - WRITE(ILUOUT,*) 'Pb to initialize gas phase Chemical PLBXSVM ' +IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_CHGSBEG, NSV_CHGSEND + SELECT CASE(HGETSVM(JSV)) + CASE ('READ') + IF ( KSIZELBXSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHGSBEG+1))) + 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 + PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV) + WRITE(ILUOUT,*) 'Chemical PLBXSVM will be initialized to 0' + ELSE + WRITE(ILUOUT,*) 'Pb to initialize gas phase Chemical PLBXSVM ' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF END IF - END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM = 'LBY_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHGSBEG+1))) - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,IRESP) - IF ( SIZE(PLBYSVM,1) /= 0 ) THEN - IF (IRESP/=0) THEN - IF (PRESENT(PLBYSVMM)) THEN - PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV) - WRITE(ILUOUT,*) 'Chemical PLBYSVM will be initialized to 0' - ELSE - WRITE(ILUOUT,*) 'Pb to initialize gas phase Chemical PLBYSVM ' + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHGSBEG+1))) + 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 + PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV) + WRITE(ILUOUT,*) 'Chemical PLBYSVM will be initialized to 0' + ELSE + WRITE(ILUOUT,*) 'Pb to initialize gas phase Chemical PLBYSVM ' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF END IF - END IF - END IF - CASE('INIT') - IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0. - IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0. - END SELECT + CASE('INIT') + IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0. + IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0. + END SELECT + END DO END DO ! Chemical aqueous phase scalar variables DO JSV = NSV_CHACBEG, NSV_CHACEND @@ -1084,55 +1095,67 @@ DO JSV = NSV_AERDEPBEG, NSV_AERDEPEND END SELECT END DO ! Dust scalar variables -DO JSV = NSV_DSTBEG, NSV_DSTEND - SELECT CASE(HGETSVM(JSV)) - CASE ('READ') - IF ( KSIZELBXSV_ll /= 0 ) THEN - YRECFM = 'LBX_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1))) - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,IRESP) - IF ( SIZE(PLBXSVM,1) /= 0 ) THEN - IF (IRESP/=0) THEN - IF (PRESENT(PLBXSVMM)) THEN - PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV) - WRITE(ILUOUT,*) 'Dust PLBXSVM will be initialized to 0' - ELSE - WRITE(ILUOUT,*) 'Pb to initialize dust PLBXSVM ' +IF (NSV_DSTEND>=NSV_DSTBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_DSTBEG, NSV_DSTEND + SELECT CASE(HGETSVM(JSV)) + CASE ('READ') + IF ( KSIZELBXSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBX_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1))) + 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 + PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV) + WRITE(ILUOUT,*) 'Dust PLBXSVM will be initialized to 0' + ELSE + WRITE(ILUOUT,*) 'Pb to initialize dust PLBXSVM ' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF END IF - END IF - END IF -! - IF (KSIZELBYSV_ll /= 0 ) THEN - YRECFM = 'LBY_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1))) - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,IRESP) - IF ( SIZE(PLBYSVM,1) /= 0 ) THEN - IF (IRESP/=0) THEN - IF (PRESENT(PLBYSVMM)) THEN - PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV) - WRITE(ILUOUT,*) 'Dust PLBYSVM will be initialized to 0' - ELSE - WRITE(ILUOUT,*) 'Pb to initialize dust PLBYSVM ' + ! + IF (KSIZELBYSV_ll /= 0 ) THEN + TZFIELD%CMNHNAME = 'LBY_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1))) + 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 + PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV) + WRITE(ILUOUT,*) 'Dust PLBYSVM will be initialized to 0' + ELSE + WRITE(ILUOUT,*) 'Pb to initialize dust PLBYSVM ' !callabortstop - CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) - CALL ABORT - STOP - ENDIF + CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) + CALL ABORT + STOP + ENDIF + END IF + END IF END IF - END IF - END IF - CASE('INIT') - IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0. - IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0. - END SELECT -END DO + CASE('INIT') + IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0. + IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0. + END SELECT + END DO +END IF +! DO JSV = NSV_DSTDEPBEG, NSV_DSTDEPEND SELECT CASE(HGETSVM(JSV)) CASE ('READ') diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index df4fff5ccec73ccb13c19898f281dd93f50628ce..a065e0150214026fc57d91cdd720a1dfd4a117ad 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -2015,7 +2015,7 @@ DEALLOCATE(ZCO2) !* in a RESTART case, reads surface radiative quantities in the MESONH file ! IF (CRAD == 'ECMW' .AND. CGETRAD=='READ') THEN - CALL INI_SURF_RAD(TPINIFILE%CNAME, CLUOUT, XDIR_ALB, XSCA_ALB, XEMIS, XTSRAD) + CALL INI_SURF_RAD(TPINIFILE, XDIR_ALB, XSCA_ALB, XEMIS, XTSRAD) END IF ! ! @@ -2079,7 +2079,7 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN IF (NVERB>=10) THEN WRITE(ILUOUT,*) 'XDTCONV has been set to : ',XDTCONV END IF - CALL INI_DEEP_CONVECTION (TPINIFILE%CNAME,HLUOUT,GINIDCONV,TDTCUR, & + CALL INI_DEEP_CONVECTION (TPINIFILE,HLUOUT,GINIDCONV,TDTCUR, & NCOUNTCONV,XDTHCONV,XDRVCONV,XDRCCONV, & XDRICONV,XPRCONV,XPRSCONV,XPACCONV, & XUMFCONV,XDMFCONV,XMFCONV,XPRLFLXCONV,XPRSFLXCONV,& diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90 index d470cf68aa53191e1acdb96a9ac6fa6c9cc7cebb..f1978145d18dbb5861e0518d61a5c2d33395e789 100644 --- a/src/MNH/ini_segn.f90 +++ b/src/MNH/ini_segn.f90 @@ -284,7 +284,8 @@ ELSE IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL '.OR. CPROGRAM=='SPEC ') THEN YINIFILE = CINIFILE_n HINIFILEPGD = CINIFILEPGD_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,HLUOUT,IRESP) CALL FMLOOK_ll(YEXSEG,CLUOUT0,ILUSEG,IRESP) ! !* 1.3bis DIAG program case diff --git a/src/MNH/ini_spectren.f90 b/src/MNH/ini_spectren.f90 index 760ab376e604238b90694aa36d599a4ece13245d..e299c24c85d90872588c385592fe99a10a1bbb49 100644 --- a/src/MNH/ini_spectren.f90 +++ b/src/MNH/ini_spectren.f90 @@ -150,14 +150,7 @@ TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file ! INTEGER :: JSV ! Loop index INTEGER :: IRESP ! Return code of FM routines -INTEGER :: ININAR ! File management variable -INTEGER :: IMASDEV ! version of MESOHN in the input file INTEGER :: ILUOUT ! Logical unit number of output-listing -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 INTEGER :: IIU ! Upper dimension in x direction (local) INTEGER :: IJU ! Upper dimension in y direction (local) INTEGER :: IIU_ll ! Upper dimension in x direction (global) @@ -240,10 +233,8 @@ CINIFILE=TPINIFILE%CNAME ! IKU=NKMAX+2*JPVEXT ! -YRECFM = 'ZHAT' ALLOCATE(XZHAT(IKU)) - YDIR='--' -CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,XZHAT,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'ZHAT',XZHAT) IF (XALZBOT>=XZHAT(IKU) .AND. LVE_RELAX) THEN WRITE(ILUOUT,FMT=*) "INI_SPECTRE_n ERROR: you want to use vertical relaxation" WRITE(ILUOUT,FMT=*) " but bottom of layer XALZBOT(",XALZBOT,")" @@ -765,37 +756,27 @@ NDT_2_WAY(KMI)=4 IF (LSPECTRE_U) THEN ALLOCATE(XUT(IIU,IJU,IKU)) ; XUT = 0.0 - YRECFM = 'UT' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,XUT,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'UT',XUT) END IF ! IF (LSPECTRE_V) THEN ALLOCATE(XVT(IIU,IJU,IKU)) ; XVT = 0.0 - YRECFM = 'VT' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,XVT,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'VT',XVT) END IF ! IF (LSPECTRE_W) THEN ALLOCATE(XWT(IIU,IJU,IKU)) ; XWT = 0.0 - YRECFM = 'WT' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,XWT,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'WT',XWT) END IF ! IF (LSPECTRE_TH) THEN ALLOCATE(XTHT(IIU,IJU,IKU)) ; XTHT = 0.0 - YRECFM = 'THT' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,XTHT,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'THT',XTHT) END IF ! IF (LSPECTRE_RV) THEN ALLOCATE(XRT(IIU,IJU,IKU,NRR)) - YRECFM = 'RVT' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,XRT(:,:,:,1),IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'RVT',XRT(:,:,:,1)) END IF ! !------------------------------------------------------------------------------- diff --git a/src/MNH/ini_surf_rad.f90 b/src/MNH/ini_surf_rad.f90 index 9eb2433c78ac509f60b3c17f4edfba1449af6944..2566399537eea25b38331115c1e33ecb021d1d22 100644 --- a/src/MNH/ini_surf_rad.f90 +++ b/src/MNH/ini_surf_rad.f90 @@ -14,11 +14,11 @@ ! INTERFACE ! - SUBROUTINE INI_SURF_RAD(HINIFILE, HLUOUT, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD) + SUBROUTINE INI_SURF_RAD(TPINIFILE, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD) ! +USE MODD_IO_ll, ONLY : TFILEDATA ! -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! Name of the initial file -CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDIR_ALB ! Direct albedo REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSCA_ALB ! Diffuse albedo REAL, DIMENSION(:,:), INTENT(OUT) :: PEMIS ! emissivity @@ -31,9 +31,9 @@ END INTERFACE END MODULE MODI_INI_SURF_RAD ! ! -! ####################################################################### - SUBROUTINE INI_SURF_RAD(HINIFILE, HLUOUT, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD) -! ####################################################################### +! ##################################################################### + SUBROUTINE INI_SURF_RAD(TPINIFILE, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD) +! ##################################################################### ! !!**** *INI_SURF_RAD * - initialisation for ECMWF radiation scheme in the MesoNH framework !! @@ -66,14 +66,15 @@ END MODULE MODI_INI_SURF_RAD !* 0. DECLARATIONS ! ------------ ! +USE MODD_IO_ll, ONLY : TFILEDATA +! USE MODE_FMREAD ! IMPLICIT NONE ! !* 0.1 Declarations of dummy arguments : ! -CHARACTER (LEN=*), INTENT(IN) :: HINIFILE ! Name of the initial file -CHARACTER (LEN=*), INTENT(IN) :: HLUOUT ! name for output-listing +TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDIR_ALB ! Direct albedo REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSCA_ALB ! Diffuse albedo REAL, DIMENSION(:,:), INTENT(OUT) :: PEMIS ! emissivity @@ -81,35 +82,12 @@ REAL, DIMENSION(:,:), INTENT(OUT) :: PTSRAD ! radiative surface temperature ! !* 0.2 declarations of local variables ! -INTEGER :: IGRID,ILENCH,IRESP ! File -CHARACTER (LEN=16) :: YRECFM ! management -CHARACTER (LEN=100) :: YCOMMENT ! variables -! !------------------------------------------------------------------------------- ! -YRECFM = 'DIR_ALB' -YCOMMENT = 'X_Y_DIR_ALB (-)' -IGRID = 1 -ILENCH = LEN(YCOMMENT) -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PDIR_ALB,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM = 'SCA_ALB' -YCOMMENT = 'X_Y_SCA_ALB (-)' -IGRID = 1 -ILENCH = LEN(YCOMMENT) -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PSCA_ALB,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM = 'EMIS' -YCOMMENT = 'X_Y_EMIS (-)' -IGRID = 1 -ILENCH = LEN(YCOMMENT) -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PEMIS,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM = 'TSRAD' -YCOMMENT = 'X_Y_TSRAD (-)' -IGRID = 1 -ILENCH = LEN(YCOMMENT) -CALL FMREAD(HINIFILE,YRECFM,HLUOUT,'XY',PTSRAD,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPINIFILE,'DIR_ALB',PDIR_ALB) +CALL IO_READ_FIELD(TPINIFILE,'SCA_ALB',PSCA_ALB) +CALL IO_READ_FIELD(TPINIFILE,'EMIS',PEMIS) +CALL IO_READ_FIELD(TPINIFILE,'TSRAD',PTSRAD) ! !------------------------------------------------------------------------------- ! diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90 index 181104754b2383d87a8f48df8b4a582ff7bee973..1345f4cd6f24bd7b9b787a32aa056ac84bd23874 100644 --- a/src/MNH/prep_surfex.f90 +++ b/src/MNH/prep_surfex.f90 @@ -139,8 +139,12 @@ CALL CLOSE_ll(YPRE_REAL1, IOSTAT=IRESP) !* 4.2 reading of values of some configuration variables in namelist ! -CALL FMREAD(CPGDFILE,'IMAX',CLUOUT0,'--',II,IGRID,ILENGTH,HCOMMENT,IRESP) -CALL FMREAD(CPGDFILE,'JMAX',CLUOUT0,'--',IJ,IGRID,ILENGTH,HCOMMENT,IRESP) +CALL INI_FIELD_LIST(1) +! +CALL INI_FIELD_SCALARS() +! +CALL IO_READ_FIELD(TZPGDFILE,'IMAX',II) +CALL IO_READ_FIELD(TZPGDFILE,'JMAX',IJ) CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT) CALL SET_DAD0_ll() CALL SET_DIM_ll(II, IJ, 1) @@ -156,10 +160,6 @@ CALL SET_DAD_ll(0, 1) !JUANZ CALL INI_PARA_ll(IINFO_ll) CALL INI_PARAZ_ll(IINFO_ll) ! -CALL INI_FIELD_LIST(1) -! -CALL INI_FIELD_SCALARS() -! !------------------------------------------------------------------------------- ! ! @@ -169,9 +169,10 @@ CALL INI_FIELD_SCALARS() !* reading of date ! IF (YATMFILETYPE=='MESONH') THEN - CALL FMOPEN_ll(YATMFILE,'READ',CLUOUT0,0,1,1,ININAR,IRESP) - CALL FMREAD(YATMFILE,'DTCUR',CLUOUT0,'--',TDTCUR,IGRID,ILENGTH,HCOMMENT,IRESP) - CALL FMCLOS_ll(YATMFILE,'KEEP',CLUOUT0,IRESP) + CALL IO_FILE_ADD2LIST(TZATMFILE,TRIM(YATMFILE),'UNKNOWN','READ',KLFINPRAR=0,KLFITYPE=1,KLFIVERB=1) + CALL IO_FILE_OPEN_ll(TZATMFILE,CLUOUT0,IRESP) + CALL IO_READ_FIELD(TZATMFILE,'DTCUR',TDTCUR) + CALL IO_FILE_CLOSE_ll(TZATMFILE,CLUOUT0,IRESP) ELSE TDTCUR%TDATE%YEAR = NUNDEF TDTCUR%TDATE%MONTH= NUNDEF diff --git a/src/MNH/read_all_data_mesonh_case.f90 b/src/MNH/read_all_data_mesonh_case.f90 index cc369a623b2b3be21984fed630782ef542466a33..2eb30cc31ac0d77fbb52311cbefe572adddd1296 100644 --- a/src/MNH/read_all_data_mesonh_case.f90 +++ b/src/MNH/read_all_data_mesonh_case.f90 @@ -191,8 +191,6 @@ CHARACTER(LEN=28) :: YOUTFILE CHARACTER(LEN=2) :: YPGD_TYPE ! INTEGER :: IMASDEV ! Masdev version -INTEGER :: IGRID, ILENCH -CHARACTER(LEN=100):: YCOMMENT ! !* temporary namelist configuration variables ! @@ -326,15 +324,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(TPPGDFILE%CNAME,'ZS',CLUOUT,'XY',XZS,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPPGDFILE,'ZS',XZS) CALL ZS_BOUNDARY(XZS,XZS_LS) ! ALLOCATE(XZSMT(IISUP_LS-IIINF_LS+1,IJSUP_LS-IJINF_LS+1)) -CALL FMREAD(TPPGDFILE%CNAME,'MASDEV',CLUOUT,'XY',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TPPGDFILE,'MASDEV',IMASDEV) IF (IMASDEV<=46) THEN XZSMT = XZS ELSE - CALL FMREAD(TPPGDFILE%CNAME,'ZSMT',CLUOUT,'XY',XZSMT,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPPGDFILE,'ZSMT',XZSMT) END IF CALL ZS_BOUNDARY(XZSMT,XZSMT_LS) ! diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90 index 13017f6310c1834cdb8981b93ee0fbdf857aa8e2..d34944a220abcf0eaf70ef48adc37b0562b01325 100644 --- a/src/MNH/read_field.f90 +++ b/src/MNH/read_field.f90 @@ -271,6 +271,7 @@ USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL USE MODE_FM USE MODE_FMREAD USE MODE_IO_ll, ONLY: UPCASE +USE MODE_MSG ! USE MODI_INI_LB USE MODI_INI_LS @@ -561,11 +562,7 @@ END SELECT ! SELECT CASE(HGETCIT) ! ice concentration CASE('READ') - YRECFM='CIT' - YDIR='XY' - IF (SIZE(PCIT) /= 0 ) & - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PCIT,IGRID,ILENCH, & - YCOMMENT,IRESP) + IF (SIZE(PCIT) /= 0 ) CALL IO_READ_FIELD(TPINIFILE,'CIT',PCIT) CASE('INIT') PCIT(:,:,:)=0. END SELECT @@ -575,50 +572,77 @@ END SELECT YDIR='XY' ISV= SIZE(PSVT,4) ! -DO JSV = 1, NSV_USER ! initialize according to the get indicators - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - WRITE(YRECFM,'(A3,I3.3)')'SVT',JSV - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PSVT(:,:,:,JSV) = Z3D(:,:,:) - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - END SELECT -END DO +IF (NSV_USER>0) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = 1, NSV_USER ! initialize according to the get indicators + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CCOMMENT = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME) + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF ! -DO JSV = NSV_C2R2BEG,NSV_C2R2END - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - YRECFM=TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PSVT(:,:,:,JSV) = Z3D(:,:,:) - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - IF (LSUPSAT .AND. (HGETRVT == 'READ') ) THEN - ZWORK(:,:,:) = (PPABST(:,:,:)/XP00 )**(XRD/XCPD) - ZWORK(:,:,:) = PTHT(:,:,:)*ZWORK(:,:,:) - ZWORK(:,:,:) = EXP(XALPW-XBETAW/ZWORK(:,:,:)-XGAMW*ALOG(ZWORK(:,:,:))) - !rvsat - ZWORK(:,:,:) = (XMV / XMD)*ZWORK(:,:,:)/(PPABST(:,:,:)-ZWORK(:,:,:)) - ZWORK(:,:,:) = PRT(:,:,:,1)/ZWORK(:,:,:) - PSVT(:,:,:,NSV_C2R2END ) = ZWORK(:,:,:) - END IF - END SELECT -END DO +IF (NSV_C2R2END>=NSV_C2R2BEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'm-3' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_C2R2BEG,NSV_C2R2END + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + TZFIELD%CMNHNAME = TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + IF (LSUPSAT .AND. (HGETRVT == 'READ') ) THEN + ZWORK(:,:,:) = (PPABST(:,:,:)/XP00 )**(XRD/XCPD) + ZWORK(:,:,:) = PTHT(:,:,:)*ZWORK(:,:,:) + ZWORK(:,:,:) = EXP(XALPW-XBETAW/ZWORK(:,:,:)-XGAMW*ALOG(ZWORK(:,:,:))) + !rvsat + ZWORK(:,:,:) = (XMV / XMD)*ZWORK(:,:,:)/(PPABST(:,:,:)-ZWORK(:,:,:)) + ZWORK(:,:,:) = PRT(:,:,:,1)/ZWORK(:,:,:) + PSVT(:,:,:,NSV_C2R2END ) = ZWORK(:,:,:) + END IF + END SELECT + END DO +END IF ! -DO JSV = NSV_C1R3BEG,NSV_C1R3END - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - YRECFM=TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PSVT(:,:,:,JSV) = Z3D(:,:,:) - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - END SELECT -END DO +IF (NSV_C1R3END>=NSV_C1R3BEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'm-3' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_C1R3BEG,NSV_C1R3END + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + TZFIELD%CMNHNAME = TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF ! ! LIMA variables ! @@ -690,56 +714,99 @@ DO JSV = NSV_LIMA_BEG,NSV_LIMA_END END SELECT END DO ! -DO JSV = NSV_ELECBEG,NSV_ELECEND - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - YRECFM=TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PSVT(:,:,:,JSV) = Z3D(:,:,:) - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - END SELECT -END DO +IF (NSV_ELECEND>=NSV_ELECBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_ELECBEG,NSV_ELECEND + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + TZFIELD%CMNHNAME = TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + IF (JSV .GT. NSV_ELECBEG .AND. JSV .LT. NSV_ELECEND) THEN + TZFIELD%CUNITS = 'C m-3' + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (C/m3)' + ELSE + TZFIELD%CUNITS = 'm-3' + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)' + END IF + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF ! -DO JSV = NSV_CHGSBEG,NSV_CHGSEND - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - CNAMES(JSV-NSV_CHGSBEG+1) = UPCASE(CNAMES(JSV-NSV_CHGSBEG+1)) - YRECFM=TRIM(CNAMES(JSV-NSV_CHGSBEG+1))//'T' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PSVT(:,:,:,JSV) = Z3D(:,:,:) - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - END SELECT -END DO +IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN + CNAMES(JSV-NSV_CHGSBEG+1) = UPCASE(CNAMES(JSV-NSV_CHGSBEG+1)) + TZFIELD%CMNHNAME = TRIM(CNAMES(JSV-NSV_CHGSBEG+1))//'T' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + TZFIELD%CUNITS = 'ppbv' + TZFIELD%CDIR = 'XY' + WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','CHIM',JSV + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_CHGSBEG,NSV_CHGSEND + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF ! -DO JSV = NSV_CHACBEG,NSV_CHACEND - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1) = UPCASE(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1)) - YRECFM=TRIM(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))//'T' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PSVT(:,:,:,JSV) = Z3D(:,:,:) - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - END SELECT -END DO +IF (NSV_CHACEND>=NSV_CHACBEG) THEN + CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1) = UPCASE(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1)) + TZFIELD%CSTDNAME = '' + !PW TODO: check units + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_CHACBEG,NSV_CHACEND + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + TZFIELD%CMNHNAME = TRIM(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))//'M' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3,A4)')'X_Y_Z_','CHAQ',JSV,' (M)' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) +!***ATTENTION: BUG ? field written with a M suffix, read with a T suffix + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF ! -DO JSV = NSV_CHICBEG,NSV_CHICEND - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - CICNAMES(JSV-NSV_CHICBEG+1) = UPCASE(CICNAMES(JSV-NSV_CHICBEG+1)) - YRECFM=TRIM(CICNAMES(JSV-NSV_CHICBEG+1))//'T' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PSVT(:,:,:,JSV) = Z3D(:,:,:) - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - END SELECT -END DO +IF (NSV_CHICEND>=NSV_CHICBEG) THEN + CICNAMES(JSV-NSV_CHICBEG+1) = UPCASE(CICNAMES(JSV-NSV_CHICBEG+1)) + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_CHICBEG,NSV_CHICEND + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + TZFIELD%CMNHNAME = TRIM(CICNAMES(JSV-NSV_CHICBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (ppp)' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF ! DO JSV = NSV_SLTBEG,NSV_SLTEND SELECT CASE(HGETSVT(JSV)) @@ -765,17 +832,27 @@ DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND END SELECT END DO ! -DO JSV = NSV_DSTBEG,NSV_DSTEND - SELECT CASE(HGETSVT(JSV)) - CASE ('READ') - YRECFM=TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PSVT(:,:,:,JSV) = Z3D(:,:,:) - CASE ('INIT') - PSVT(:,:,:,JSV) = 0. - END SELECT -END DO +IF (NSV_DSTEND>=NSV_DSTBEG) THEN + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'ppp' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! + DO JSV = NSV_DSTBEG,NSV_DSTEND + SELECT CASE(HGETSVT(JSV)) + CASE ('READ') + TZFIELD%CMNHNAME = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T' + TZFIELD%CLONGNAME = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME) + WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV + YRECFM=TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T' + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV)) + CASE ('INIT') + PSVT(:,:,:,JSV) = 0. + END SELECT + END DO +END IF ! DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND SELECT CASE(HGETSVT(JSV)) @@ -896,61 +973,29 @@ DO JSV = NSV_LNOXBEG,NSV_LNOXEND END DO ! IF (CCONF == 'RESTA') THEN - YRECFM = 'US_PRES' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PRUS_PRES,IGRID,ILENCH,YCOMMENT,IRESP) - YRECFM = 'VS_PRES' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PRVS_PRES,IGRID,ILENCH,YCOMMENT,IRESP) - YRECFM = 'WS_PRES' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PRWS_PRES,IGRID,ILENCH,YCOMMENT,IRESP) - YRECFM = 'THS_CLD' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PRTHS_CLD,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'US_PRES',PRUS_PRES) + CALL IO_READ_FIELD(TPINIFILE,'VS_PRES',PRVS_PRES) + CALL IO_READ_FIELD(TPINIFILE,'WS_PRES',PRWS_PRES) + CALL IO_READ_FIELD(TPINIFILE,'THS_CLD',PRTHS_CLD) DO JRR = 1, SIZE(PRT,4) - IF (JRR == 1 ) THEN - YRECFM='RVS_CLD' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRRS_CLD(:,:,:,JRR) = Z3D(:,:,:) - END IF - IF (JRR == 2 ) THEN - YRECFM='RCS_CLD' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRRS_CLD(:,:,:,JRR) = Z3D(:,:,:) - END IF - IF (JRR == 3 ) THEN - YRECFM='RRS_CLD' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRRS_CLD(:,:,:,JRR) = Z3D(:,:,:) - END IF - IF (JRR == 4 ) THEN - YRECFM='RIS_CLD' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRRS_CLD(:,:,:,JRR) = Z3D(:,:,:) - END IF - IF (JRR == 5 ) THEN - YRECFM='RSS_CLD' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRRS_CLD(:,:,:,JRR) = Z3D(:,:,:) - END IF - IF (JRR == 6 ) THEN - YRECFM='RGS_CLD' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRRS_CLD(:,:,:,JRR) = Z3D(:,:,:) - END IF - IF (JRR == 7 ) THEN - YRECFM='RHS_CLD' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,Z3D,IGRID,ILENCH, & - YCOMMENT,IRESP) - PRRS_CLD(:,:,:,JRR) = Z3D(:,:,:) - END IF + SELECT CASE(JRR) + CASE (1) + CALL IO_READ_FIELD(TPINIFILE,'RVS_CLD',PRRS_CLD(:,:,:,JRR)) + CASE (2) + CALL IO_READ_FIELD(TPINIFILE,'RCS_CLD',PRRS_CLD(:,:,:,JRR)) + CASE (3) + CALL IO_READ_FIELD(TPINIFILE,'RRS_CLD',PRRS_CLD(:,:,:,JRR)) + CASE (4) + CALL IO_READ_FIELD(TPINIFILE,'RIS_CLD',PRRS_CLD(:,:,:,JRR)) + CASE (5) + CALL IO_READ_FIELD(TPINIFILE,'RSS_CLD',PRRS_CLD(:,:,:,JRR)) + CASE (6) + CALL IO_READ_FIELD(TPINIFILE,'RGS_CLD',PRRS_CLD(:,:,:,JRR)) + CASE (7) + CALL IO_READ_FIELD(TPINIFILE,'RHS_CLD',PRRS_CLD(:,:,:,JRR)) + CASE DEFAULT + CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_FIELD','PRT is too big') + END SELECT END DO DO JSV = NSV_C2R2BEG,NSV_C2R2END IF (JSV == NSV_C2R2BEG ) THEN @@ -973,29 +1018,12 @@ END IF IF (CPROGRAM=='MESONH' .AND. HUVW_ADV_SCHEME(1:3)=='CEN' .AND. & HTEMP_SCHEME == 'LEFR' ) THEN IF (CCONF=='RESTA') THEN - YRECFM = 'UM' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PUM,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM = 'VM' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PVM,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM = 'WM' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PWM,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM = 'DUM' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PDUM,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM = 'DVM' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PDVM,IGRID,ILENCH,YCOMMENT,IRESP) - ! - YRECFM = 'DWM' - YDIR='XY' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,PDWM,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TPINIFILE,'UM', PUM) + CALL IO_READ_FIELD(TPINIFILE,'VM', PVM) + CALL IO_READ_FIELD(TPINIFILE,'WM', PWM) + CALL IO_READ_FIELD(TPINIFILE,'DUM',PDUM) + CALL IO_READ_FIELD(TPINIFILE,'DVM',PDVM) + CALL IO_READ_FIELD(TPINIFILE,'DWM',PDWM) ELSE PUM = PUT PVM = PVT diff --git a/src/MNH/read_grid_time_mesonh_case.f90 b/src/MNH/read_grid_time_mesonh_case.f90 index 2c99639d3cdc741305c70d1026b322471d0099ac..b9b3317949ceef0cbaa0b43f2670f850b7f9c148 100644 --- a/src/MNH/read_grid_time_mesonh_case.f90 +++ b/src/MNH/read_grid_time_mesonh_case.f90 @@ -125,12 +125,7 @@ CHARACTER(LEN=*), INTENT(OUT):: HDAD_NAME! dad name of the FM file REAL :: ZEPS ! a little number INTEGER :: IRESP ! return-code if problem eraised in FMLOOK INTEGER :: ILUOUT0 ! logical number for listing file -INTEGER :: IGRID ! grid point indicator -INTEGER :: ILENCH ! length of comment string INTEGER :: IMASDEV ! Masdev version - -CHARACTER(LEN=100) :: YCOMMENT ! comment string -CHARACTER(LEN=16) :: YRECFM ! Name of the article to be read INTEGER :: JL ! loop controls INTEGER :: ILMAX_LS ! @@ -163,11 +158,14 @@ TYPE(TFILEDATA),POINTER :: TZFMFILE => NULL() CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) ZEPS=1.E-10 ! +!PW: TODO: temporary: look for file from its name +! TPFMFILE should be passed in arguments +CALL IO_FILE_FIND_BYNAME(HFMFILE,TZFMFILE,IRESP) +! !* 1.1 Original FMfile name ! -------------------- ! -YRECFM = 'DAD_NAME' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',HDAD_NAME,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZFMFILE,'DAD_NAME',HDAD_NAME) ! !------------------------------------------------------------------------------- ! @@ -177,18 +175,12 @@ CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',HDAD_NAME,IGRID,ILENCH,YCOMMENT,IRESP) !* 2.1 Projection : ! ---------- ! -YRECFM='LON0' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',ZLON0_LS,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZFMFILE,'LON0',ZLON0_LS) ZLON0_LS =ZLON0_LS +NINT((XLON0 -ZLON0_LS )/360.)*360. ! -YRECFM='RPK' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',ZRPK_LS,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='LAT0' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',ZLAT0_LS,IGRID,ILENCH,YCOMMENT,IRESP) -! -YRECFM='BETA' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',ZBETA_LS,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZFMFILE,'RPK', ZRPK_LS) +CALL IO_READ_FIELD(TZFMFILE,'LAT0',ZLAT0_LS) +CALL IO_READ_FIELD(TZFMFILE,'BETA',ZBETA_LS) ! IF ( (ABS(ZLAT0_LS-XLAT0)>ZEPS*MAX(1.,ABS(XLAT0))) & .OR. (ABS(ZLON0_LS-XLON0)>ZEPS*MAX(1.,ABS(XLON0))) & @@ -212,9 +204,6 @@ END IF !* 2.2 Horizontal grid: ! --------------- ! -!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) ! @@ -234,35 +223,31 @@ END IF ! ------------- ! ! -YRECFM='KMAX' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',ILMAX_LS,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZFMFILE,'KMAX',ILMAX_LS) ! ILMAX_LS=ILMAX_LS+2*JPVEXT ! -YRECFM='ZHAT' ALLOCATE(XZHAT_LS(ILMAX_LS)) -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',XZHAT_LS,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZFMFILE,'ZHAT',XZHAT_LS) ! -CALL FMREAD(HFMFILE,'MASDEV',CLUOUT0,'--',IMASDEV,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZFMFILE,'MASDEV',IMASDEV) CALL DEFAULT_SLEVE(LSLEVE_LS,XLEN1_LS,XLEN2_LS) IF (IMASDEV<=46) THEN LSLEVE_LS = .FALSE. ELSE - CALL FMREAD(HFMFILE,'SLEVE',CLUOUT0,'--',LSLEVE_LS,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZFMFILE,'SLEVE',LSLEVE_LS) IF (LSLEVE_LS) THEN - CALL FMREAD(HFMFILE,'LEN1',CLUOUT0,'--',XLEN1_LS,IGRID,ILENCH,YCOMMENT,IRESP) - CALL FMREAD(HFMFILE,'LEN2',CLUOUT0,'--',XLEN2_LS,IGRID,ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD(TZFMFILE,'LEN1',XLEN1_LS) + CALL IO_READ_FIELD(TZFMFILE,'LEN2',XLEN2_LS) END IF END IF ! -YRECFM='THINSHELL' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',LTHINSHELL,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZFMFILE,'THINSHELL',LTHINSHELL) ! !* 2.5 Time variables : ! -------------- ! -YRECFM='DTCUR' -CALL FMREAD(HFMFILE,YRECFM,CLUOUT0,'--',TDTCUR,IGRID,ILENCH,YCOMMENT,IRESP) +CALL IO_READ_FIELD(TZFMFILE,'DTCUR',TDTCUR) ! TDTMOD=TDTCUR TDTSEG=TDTCUR diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90 index ac337d47f3e55ac645f4d578d67453c6b9c95215..bd0e4d15357773c3b22e1b02a67e0ba4e86b3b98 100644 --- a/src/MNH/read_surf_mnh.f90 +++ b/src/MNH/read_surf_mnh.f90 @@ -1212,10 +1212,11 @@ END SUBROUTINE READ_SURFN0_MNH !* 0. DECLARATIONS ! ------------ ! +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 MODI_PACK_2D_1D @@ -1240,17 +1241,35 @@ INTEGER :: IGRID ! IGRID : grid indicator INTEGER :: ILENCH ! ILENCH : length of comment string ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: IWORK ! work array read in the file +TYPE(TFIELDDATA) :: TZFIELD !--------------------------------------------------------------------- ! IF (HDIR=='-') THEN ! - 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 = TRIM(HCOMMENT) + TZFIELD%NGRID = 0 + TZFIELD%NTYPE = TYPEINT + TZFIELD%NDIMS = 1 + CALL IO_READ_FIELD(TPINFILE,TZFIELD,KFIELD,KRESP) ! ELSE IF (HDIR=='H') THEN - ALLOCATE(IWORK(NIU,NJU)) - + ALLOCATE(IWORK(NIU,NJU)) ! - CALL FMREAD(CFILE,HREC,COUT,'XY',IWORK(:,:),IGRID,ILENCH,HCOMMENT,KRESP) + 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) ! IF (KRESP /=0) THEN WRITE(NLUOUT,*) 'WARNING' @@ -1262,7 +1281,6 @@ ELSE IF (HDIR=='H') THEN CALL PACK_2D_1D(NMASK,IWORK(NIB:NIE,NJB:NJE),KFIELD) END IF ! - DEALLOCATE(IWORK) ENDIF