diff --git a/src/LIB/SURCOUCHE/src/fmread_ll.f90 b/src/LIB/SURCOUCHE/src/fmread_ll.f90 index 72e606de5591208612e409904fe2cd84b0c1b48e..45426d1fbf2a81c46bff5da02f304f007e74f4bd 100644 --- a/src/LIB/SURCOUCHE/src/fmread_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmread_ll.f90 @@ -67,6 +67,10 @@ INTERFACE IO_READ_FIELD ! IO_READ_FIELD_BYFIELD_C1, & END INTERFACE +INTERFACE IO_READ_FIELD_LB + MODULE PROCEDURE IO_READ_FIELD_BYNAME_LB, IO_READ_FIELD_BYFIELD_LB +END INTERFACE + INTERFACE FMREAD MODULE PROCEDURE FMREADX0_ll,FMREADX1_ll,FMREADX2_ll,FMREADX3_ll,& & FMREADX4_ll,FMREADX5_ll,FMREADX6_ll,& @@ -79,7 +83,7 @@ PUBLIC FMREAD_LB,FMREAD,FMREADX0_ll,FMREADX1_ll,FMREADX2_ll,FMREADX3_ll,& & FMREADX4_ll,FMREADX5_ll,FMREADX6_ll,& & FMREADN0_ll,FMREADN1_ll,FMREADN2_ll,& & FMREADL0_ll,FMREADL1_ll,FMREADC0_ll,FMREADT0_ll -PUBLIC IO_READ_FIELD +PUBLIC IO_READ_FIELD,IO_READ_FIELD_LB CONTAINS SUBROUTINE FM_READ_ERR(HFUNC,HFILEM,HFIPRI,HRECFM,HDIR,KRESP) @@ -1234,9 +1238,6 @@ END SUBROUTINE FMREADX3_ll SUBROUTINE IO_READ_FIELD_BYNAME_X3(TPFILE,HNAME,PFIELD,KRESP) ! -USE MODD_IO_ll, ONLY : ISNPROC -! -! TYPE(TFILEDATA), INTENT(IN) :: TPFILE CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write REAL,DIMENSION(:,:,:),INTENT(INOUT) :: PFIELD ! array containing the data field @@ -3151,4 +3152,230 @@ CALL SECOND_MNH2(T22) TIMEZ%T_READLB_ALL=TIMEZ%T_READLB_ALL + T22 - T11 END SUBROUTINE FMREAD_LB +SUBROUTINE IO_READ_FIELD_BYNAME_LB(TPFILE,HNAME,KL3D,KRIM,PLB,KRESP) +! +TYPE(TFILEDATA), INTENT(IN) :: TPFILE +CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write +INTEGER, INTENT(IN) :: KL3D ! size of the LB array in FM +INTEGER, INTENT(IN) :: KRIM ! size of the LB area +REAL, DIMENSION(:,:,:),TARGET, INTENT(INOUT) :: PLB ! array containing the LB field +INTEGER,OPTIONAL, INTENT(OUT) :: KRESP ! return-code + +INTEGER :: ID ! Index of the field +INTEGER :: IRESP ! return_code +! +CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_LB',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME)) +! +CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) +! +IF(IRESP==0) CALL IO_READ_FIELD_LB(TPFILE,TFIELDLIST(ID),KL3D,KRIM,PLB,IRESP) +! +IF (PRESENT(KRESP)) KRESP = IRESP +! +END SUBROUTINE IO_READ_FIELD_BYNAME_LB + +SUBROUTINE IO_READ_FIELD_BYFIELD_LB(TPFILE,TPFIELD,KL3D,KRIM,PLB,KRESP) +! +USE MODD_FM +USE MODD_IO_ll, ONLY : ISP,ISNPROC,GSMONOPROC,LPACK,L2D +USE MODD_PARAMETERS_ll,ONLY : JPHEXT +USE MODD_TIMEZ, ONLY : TIMEZ +USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE +! +USE MODE_DISTRIB_LB +USE MODE_FD_ll, ONLY : GETFD,JPFINL,FD_LL +USE MODE_MNH_TIMING, ONLY : SECOND_MNH2 +USE MODE_TOOLS_ll, ONLY : GET_GLOBALDIMS_ll +! +TYPE(TFILEDATA), INTENT(IN) :: TPFILE +TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD +INTEGER, INTENT(IN) :: KL3D ! size of the LB array in FM +INTEGER, INTENT(IN) :: KRIM ! size of the LB area +REAL, DIMENSION(:,:,:),TARGET, INTENT(INOUT) :: PLB ! array containing the LB field +INTEGER,OPTIONAL, INTENT(OUT) :: KRESP ! return-code +! +!* 0.2 Declarations of local variables +! +TYPE TX_3DP + REAL,DIMENSION(:,:,:), POINTER :: X +END TYPE +! +CHARACTER(LEN=4) :: YLBTYPE ! 'LBX','LBXU','LBY' or 'LBYV' +INTEGER :: IERR,IRESP +INTEGER :: IHEXTOT +INTEGER :: IIMAX_ll,IJMAX_ll +INTEGER :: IIB,IIE,IJB,IJE +INTEGER :: JI +INTEGER :: NB_REQ,IKU +INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS +INTEGER, ALLOCATABLE,DIMENSION(:,:) :: STATUSES +INTEGER,ALLOCATABLE,DIMENSION(:) :: REQ_TAB +REAL,DIMENSION(:,:,:),ALLOCATABLE,TARGET :: Z3D +REAL,DIMENSION(:,:,:), POINTER :: TX3DP +REAL(KIND=8),DIMENSION(2) :: T0,T1,T2,T3 +REAL(KIND=8),DIMENSION(2) :: T11,T22 +TYPE(FD_ll), POINTER :: TZFD +TYPE(TX_3DP),ALLOCATABLE,DIMENSION(:) :: T_TX3DP +! +CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_LB','reading '//TRIM(TPFIELD%CMNHNAME)) +! +YLBTYPE = TPFIELD%CLBTYPE +! +IF (YLBTYPE/='LBX' .AND. YLBTYPE/='LBXU' .AND. YLBTYPE/='LBY' .AND. YLBTYPE/='LBYV') THEN + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_LB',TRIM(TPFILE%CNAME)//': invalid CLBTYPE (' & + //TRIM(TPFIELD%CLBTYPE)//') for '//TRIM(TPFIELD%CMNHNAME)) + RETURN +END IF +! +!* 1.1 THE NAME OF LFIFM +! +CALL SECOND_MNH2(T11) +IRESP = 0 +!------------------------------------------------------------------ +IHEXTOT = 2*JPHEXT+1 +TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') +IF (ASSOCIATED(TZFD)) THEN + IF (GSMONOPROC) THEN ! sequential execution + IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN + ALLOCATE(Z3D(KL3D,SIZE(PLB,2),SIZE(PLB,3))) + Z3D = 0.0 + IF (LPACK .AND. L2D) THEN + TX3DP=>Z3D(:,JPHEXT+1:JPHEXT+1,:) + ELSE + TX3DP => Z3D(:,:,:) + END IF + ELSE !(YLBTYPE == 'LBY' .OR. YLBTYPE == 'LBYV') + ALLOCATE(Z3D(SIZE(PLB,1),KL3D,SIZE(PLB,3))) + Z3D = 0.0 + TX3DP => Z3D(:,:,:) + END IF + IF (TPFILE%CFORMAT=='NETCDF4') THEN + CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP) + ELSE IF (TPFILE%CFORMAT=='LFI') THEN + CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP) + ELSE + CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_LB',& + TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') + END IF + IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN + IF (LPACK .AND. L2D) Z3D(:,:,:) = SPREAD(Z3D(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT) + PLB(1:KRIM+JPHEXT,:,:) = Z3D(1:KRIM+JPHEXT,:,:) + PLB(KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:,:) = Z3D(KL3D-KRIM-JPHEXT+1:KL3D,:,:) + ELSE !(YLBTYPE == 'LBY' .OR. YLBTYPE == 'LBYV') + PLB(:,1:KRIM+JPHEXT,:) = Z3D(:,1:KRIM+JPHEXT,:) + PLB(:,KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:) = Z3D(:,KL3D-KRIM-JPHEXT+1:KL3D,:) + END IF + ELSE ! multiprocessor execution + IF (ISP == TZFD%OWNER) THEN + CALL SECOND_MNH2(T0) + CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll) + IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN + ALLOCATE(Z3D(KL3D,IJMAX_ll+2*JPHEXT,SIZE(PLB,3))) + Z3D = 0.0 + IF (LPACK .AND. L2D) THEN + TX3DP=>Z3D(:,JPHEXT+1:JPHEXT+1,:) + ELSE + TX3DP => Z3D(:,:,:) + END IF + ELSE !(YLBTYPE == 'LBY' .OR. YLBTYPE == 'LBYV') + ALLOCATE(Z3D(IIMAX_ll+2*JPHEXT,KL3D,SIZE(PLB,3))) + Z3D = 0.0 + TX3DP => Z3D(:,:,:) + END IF + IF (TPFILE%CFORMAT=='NETCDF4') THEN + CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP) + ELSE IF (TPFILE%CFORMAT=='LFI') THEN + CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP) + ELSE + CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_BYFIELD_LB',& + TRIM(TPFILE%CNAME)//': invalid fileformat ('//TRIM(TPFILE%CFORMAT)//')') + END IF + IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN + IF (LPACK .AND. L2D) Z3D(:,:,:) = SPREAD(Z3D(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT) + ! erase gap in LB field + Z3D(KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:,:) = Z3D(KL3D-KRIM-JPHEXT+1:KL3D,:,:) + ELSE !(YLBTYPE == 'LBY' .OR. YLBTYPE == 'LBYV') + ! erase gap in LB field + Z3D(:,KRIM+JPHEXT+1:2*(KRIM+JPHEXT),:) = Z3D(:,KL3D-KRIM-JPHEXT+1:KL3D,:) + END IF + CALL SECOND_MNH2(T1) + TIMEZ%T_READLB_READ=TIMEZ%T_READLB_READ + T1 - T0 + END IF + ! + CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TZFD%OWNER-1,TZFD%COMM,IERR) + ! + !Broadcast header only if IRESP==-111 + !because metadata of field has been modified in IO_READ_FIELD_xxx + IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TZFD,TPFIELD) + ! + NB_REQ=0 + ALLOCATE(REQ_TAB(ISNPROC-1)) + !REQ_TAB=MPI_REQUEST_NULL + IF (ISP == TZFD%OWNER) THEN + CALL SECOND_MNH2(T1) + !ALLOCATE(REQ_TAB(ISNPROC-1)) + !REQ_TAB=MPI_REQUEST_NULL + ALLOCATE(T_TX3DP(ISNPROC-1)) + IKU = SIZE(Z3D,3) + DO JI = 1,ISNPROC + CALL GET_DISTRIB_LB(YLBTYPE,JI,'FM','READ',KRIM,IIB,IIE,IJB,IJE) + IF (IIB /= 0) THEN + TX3DP=>Z3D(IIB:IIE,IJB:IJE,:) + IF (ISP /= JI) THEN + NB_REQ = NB_REQ + 1 + ALLOCATE(T_TX3DP(NB_REQ)%X(IIB:IIE,IJB:IJE,IKU)) + T_TX3DP(NB_REQ)%X=Z3D(IIB:IIE,IJB:IJE,:) + CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TZFD%COMM,REQ_TAB(NB_REQ),IERR) + !CALL MPI_BSEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TZFD%COMM,IERR) + ELSE + CALL GET_DISTRIB_LB(YLBTYPE,JI,'LOC','READ',KRIM,IIB,IIE,IJB,IJE) + PLB(IIB:IIE,IJB:IJE,:) = TX3DP(:,:,:) + END IF + END IF + END DO + CALL SECOND_MNH2(T2) + TIMEZ%T_READLB_SEND=TIMEZ%T_READLB_SEND + T2 - T1 + IF (NB_REQ .GT.0 ) THEN + !ALLOCATE(STATUSES(MPI_STATUS_SIZE,NB_REQ)) + !CALL MPI_WAITALL(NB_REQ,REQ_TAB,STATUSES,IERR) + CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR) + !DEALLOCATE(STATUSES) + DO JI=1,NB_REQ ; DEALLOCATE(T_TX3DP(JI)%X) ; ENDDO + END IF + DEALLOCATE(T_TX3DP) + !DEALLOCATE(REQ_TAB) + CALL SECOND_MNH2(T3) + TIMEZ%T_READLB_WAIT=TIMEZ%T_READLB_WAIT + T3 - T2 + ELSE + CALL SECOND_MNH2(T0) + !ALLOCATE(REQ_TAB(1)) + !REQ_TAB=MPI_REQUEST_NULL + CALL GET_DISTRIB_LB(YLBTYPE,ISP,'LOC','READ',KRIM,IIB,IIE,IJB,IJE) + IF (IIB /= 0) THEN + TX3DP=>PLB(IIB:IIE,IJB:IJE,:) + CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,STATUS,IERR) + !NB_REQ = NB_REQ + 1 + !CALL MPI_IRECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,TZFD%OWNER-1,99,TZFD%COMM,REQ_TAB(NB_REQ),IERR) + !IF (NB_REQ .GT.0 ) CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR) + END IF + CALL SECOND_MNH2(T1) + TIMEZ%T_READLB_RECV=TIMEZ%T_READLB_RECV + T1 - T0 + END IF + DEALLOCATE(REQ_TAB) + END IF !(GSMONOPROC) +ELSE + IRESP = -61 + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_LB','file '//TRIM(TPFILE%CNAME)//' not found') +END IF +!---------------------------------------------------------------- +! +IF (ALLOCATED(Z3D)) DEALLOCATE (Z3D) +! +IF (PRESENT(KRESP)) KRESP = IRESP +! +CALL SECOND_MNH2(T22) +TIMEZ%T_READLB_ALL=TIMEZ%T_READLB_ALL + T22 - T11 +! +END SUBROUTINE IO_READ_FIELD_BYFIELD_LB + END MODULE MODE_FMREAD diff --git a/src/MNH/ini_lb.f90 b/src/MNH/ini_lb.f90 index 1145fbf802caf50fd7238d5b1e077fa852b9bc98..fe105644bc46b7f0dcaa6269da613cc4e9c5509b 100644 --- a/src/MNH/ini_lb.f90 +++ b/src/MNH/ini_lb.f90 @@ -147,7 +147,7 @@ USE MODD_CH_AEROSOL USE MODD_PARAM_LIMA USE MODD_PARAM_n ! - +USE MODE_FIELD, ONLY: TFIELDDATA,TYPELOG,TYPEREAL USE MODE_FM USE MODE_FMREAD USE MODE_IO_ll, ONLY: CLOSE_ll @@ -232,10 +232,10 @@ LOGICAL :: GHORELAX_R, GHORELAX_SV ! switch for the horizontal relaxation ! for moist and scalar variables CHARACTER (LEN= LEN(HGETRVM)), DIMENSION (7) :: YGETRXM ! Arrays with the get indicators ! for the moist variables -CHARACTER (LEN= 16), DIMENSION (7) :: YRECFMX,YRECFMY ! arrays with the name of the LB fields - ! in FM files for the moist variables +CHARACTER (LEN=1), DIMENSION (7) :: YC ! array with the prefix of the moist variables INTEGER :: IMASDEV CHARACTER(LEN=2) :: INDICE ! to index CCN and IFN fields of LIMA scheme +TYPE(TFIELDDATA) :: TZFIELD !------------------------------------------------------------------------------- ! ! @@ -290,59 +290,35 @@ ELSE ENDIF ! IF (KSIZELBXU_ll/= 0) THEN - YRECFM = 'LBXUM' - YDIRLB='LBXU' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXUM,IRIMXU,IL3DXU,IGRID,& - & ILENCH,YCOMMENT,IRESP) -END IF - -IF ( KSIZELBY_ll /= 0) THEN - YRECFM = 'LBYUM' - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYUM,IRIMY,IL3DY,IGRID,& - & ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD_LB(TPINIFILE,'LBXUM',IL3DXU,IRIMXU,PLBXUM) END IF IF ( KSIZELBX_ll /= 0) THEN - YRECFM = 'LBXVM' - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXVM,IRIMX,IL3DX,IGRID,& - & ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD_LB(TPINIFILE,'LBXVM',IL3DX,IRIMX,PLBXVM) ENDIF -IF ( KSIZELBYV_ll /= 0) THEN - YRECFM = 'LBYVM' - YDIRLB='LBYV' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYVM,IRIMYV,IL3DYV,IGRID,& - & ILENCH,YCOMMENT,IRESP) +IF ( KSIZELBX_ll /= 0) THEN + CALL IO_READ_FIELD_LB(TPINIFILE,'LBXWM',IL3DX,IRIMX,PLBXWM) END IF -IF ( KSIZELBX_ll /= 0) THEN - YRECFM = 'LBXWM' - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXWM,IRIMX,IL3DX,IGRID,& - & ILENCH,YCOMMENT,IRESP) +IF ( KSIZELBY_ll /= 0) THEN + CALL IO_READ_FIELD_LB(TPINIFILE,'LBYUM',IL3DY,IRIMY,PLBYUM) +END IF + +IF ( KSIZELBYV_ll /= 0) THEN + CALL IO_READ_FIELD_LB(TPINIFILE,'LBYVM',IL3DYV,IRIMYV,PLBYVM) END IF IF (KSIZELBY_ll /= 0) THEN - YRECFM = 'LBYWM' - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYWM,IRIMY,IL3DY,IGRID,& - & ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD_LB(TPINIFILE,'LBYWM',IL3DY,IRIMY,PLBYWM) END IF IF (KSIZELBX_ll /= 0) THEN - YRECFM = 'LBXTHM' - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBXTHM,IRIMX,IL3DX,IGRID,& - & ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD_LB(TPINIFILE,'LBXTHM',IL3DX,IRIMX,PLBXTHM) END IF IF ( KSIZELBY_ll /= 0) THEN - YRECFM = 'LBYTHM' - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIRLB,PLBYTHM,IRIMY,IL3DY,IGRID,& - & ILENCH,YCOMMENT,IRESP) + CALL IO_READ_FIELD_LB(TPINIFILE,'LBYTHM',IL3DY,IRIMY,PLBYTHM) END IF ! !* 2.3 LB-TKE @@ -400,12 +376,21 @@ END SELECT !* 2.5 LB-Rx ! IF(KSIZELBXR_ll > 0 ) THEN - YRECFM = 'HORELAX_R' - YDIR='--' - CALL FMREAD(TPINIFILE%CNAME,YRECFM,HLUOUT,YDIR,GHORELAX_R,IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'HORELAX_R' + TZFIELD%CSTDNAME = '' + TZFIELD%CLONGNAME = 'MesoNH: HORELAX_R' + TZFIELD%CUNITS = '' + TZFIELD%CDIR = '--' + TZFIELD%CCOMMENT = 'Switch to activate the HOrizontal RELAXation' + TZFIELD%CLBTYPE = 'NONE' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPELOG + TZFIELD%NDIMS = 0 + ! + CALL IO_READ_FIELD(TPINIFILE,TZFIELD,GHORELAX_R) + ! YGETRXM(:)=(/HGETRVM,HGETRCM,HGETRRM,HGETRIM,HGETRSM,HGETRGM,HGETRHM/) - YRECFMX(:)=(/"LBXRVM","LBXRCM","LBXRRM","LBXRIM","LBXRSM","LBXRGM","LBXRHM"/) - YRECFMY(:)=(/"LBYRVM","LBYRCM","LBYRRM","LBYRIM","LBYRSM","LBYRGM","LBYRHM"/) + YC(:)=(/"V","C","R","I","S","G","H"/) IF (GHORELAX_R) THEN IRIMX=(KSIZELBXR_ll-2*JPHEXT)/2 IRIMY= (KSIZELBYR_ll-2*JPHEXT)/2 @@ -417,21 +402,33 @@ IF(KSIZELBXR_ll > 0 ) THEN IL3DX=2*JPHEXT ! 2 IL3DY=2*JPHEXT ! 2 END IF - ! + ! + TZFIELD%CSTDNAME = '' + TZFIELD%CUNITS = 'kg kg-1' + TZFIELD%CDIR = 'XY' + TZFIELD%NGRID = 1 + TZFIELD%NTYPE = TYPEREAL + TZFIELD%NDIMS = 3 + ! IRR=0 + JRR=1 SELECT CASE(YGETRXM(1)) CASE('READ') IRR=IRR+1 IF ( KSIZELBXR_ll /= 0 ) THEN - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFMX(1),HLUOUT,YDIRLB,PLBXRM(:,:,:,IRR),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LBXR'//YC(JRR)//'M' + TZFIELD%CLONGNAME = 'MesoNH: LBXR'//YC(JRR)//'M' + TZFIELD%CLBTYPE = 'LBX' + TZFIELD%CCOMMENT = '2_Y_Z_LBXR'//YC(JRR)//'M' + CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXRM(:,:,:,IRR)) END IF ! IF ( KSIZELBYR_ll /= 0 ) THEN - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFMY(1),HLUOUT,YDIRLB,PLBYRM(:,:,:,IRR),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LBYR'//YC(JRR)//'M' + TZFIELD%CLONGNAME = 'MesoNH: LBYR'//YC(JRR)//'M' + TZFIELD%CLBTYPE = 'LBY' + TZFIELD%CCOMMENT = '2_Y_Z_LBYR'//YC(JRR)//'M' + CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYRM(:,:,:,IRR)) END IF CASE('INIT') IRR=IRR+1 @@ -448,18 +445,20 @@ IF(KSIZELBXR_ll > 0 ) THEN IF (.NOT. LCPL_AROME .AND. OLSOURCE) THEN IF (PRESENT(PLBXRMM)) THEN PLBXRM(:,:,:,IRR)=PLBXRMM(:,:,:,IRR) - WRITE(ILUOUT,*) 'PLBXRS will be initialized to 0 FOR ', YRECFMX(JRR) + WRITE(ILUOUT,*) 'PLBXRS will be initialized to 0 for LBXR'//YC(JRR)//'M' ELSE - WRITE(ILUOUT,*) 'Pb to initialze PLBXRM For', YRECFMX(JRR) + WRITE(ILUOUT,*) 'Pb to initialize PLBXRM for LBXR'//YC(JRR)//'M' !callabortstop CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) CALL ABORT STOP ENDIF ELSE - YDIRLB='LBX' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFMX(JRR),HLUOUT,YDIRLB,PLBXRM(:,:,:,IRR),IRIMX,IL3DX,& - & IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LBXR'//YC(JRR)//'M' + TZFIELD%CLONGNAME = 'MesoNH: LBXR'//YC(JRR)//'M' + TZFIELD%CLBTYPE = 'LBX' + TZFIELD%CCOMMENT = '2_Y_Z_LBXR'//YC(JRR)//'M' + CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXRM(:,:,:,IRR)) ENDIF END IF ! @@ -467,18 +466,20 @@ IF(KSIZELBXR_ll > 0 ) THEN IF (.NOT. LCPL_AROME .AND. OLSOURCE) THEN IF (PRESENT(PLBYRMM)) THEN PLBYRM(:,:,:,IRR)=PLBYRMM(:,:,:,IRR) - WRITE(ILUOUT,*) 'PLBYRS will be initialized to 0 For ', YRECFMY(JRR) + WRITE(ILUOUT,*) 'PLBYRS will be initialized to 0 for LBYR'//YC(JRR)//'M' ELSE - WRITE(ILUOUT,*) 'Pb to initialze PLBYRM For ', YRECFMY(JRR) + WRITE(ILUOUT,*) 'Pb to initialize PLBYRM for LBYR'//YC(JRR)//'M' !callabortstop CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP) CALL ABORT STOP ENDIF ELSE - YDIRLB='LBY' - CALL FMREAD_LB(TPINIFILE%CNAME,YRECFMY(JRR),HLUOUT,YDIRLB,PLBYRM(:,:,:,IRR),IRIMY,IL3DY,& - & IGRID,ILENCH,YCOMMENT,IRESP) + TZFIELD%CMNHNAME = 'LBYR'//YC(JRR)//'M' + TZFIELD%CLONGNAME = 'MesoNH: LBYR'//YC(JRR)//'M' + TZFIELD%CLBTYPE = 'LBY' + TZFIELD%CCOMMENT = '2_Y_Z_LBYR'//YC(JRR)//'M' + CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYRM(:,:,:,IRR)) ENDIF END IF CASE('INIT')