diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90 index 21ddfeba6708d033295a94378d08843ffff32332..5415ffdef6aca66d11ba6871b59171d2dc8b991a 100644 --- a/src/MNH/read_surf_mnh.f90 +++ b/src/MNH/read_surf_mnh.f90 @@ -5,6 +5,7 @@ !----------------------------------------------------------------- ! Modifications: !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O +! P. Wautelet 22/02/2019: set HCOMMENT for all subroutines (dummy argument with intent OUT) !----------------------------------------------------------------- MODULE MODE_READ_SURF_MNH_TOOLS @@ -157,7 +158,7 @@ IMPLICIT NONE CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to be read REAL, INTENT(OUT) :: PFIELD ! the real scalar to be read INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment ! !* 0.2 Declarations of local variables ! @@ -175,6 +176,7 @@ TYPE(TFIELDDATA) :: TZFIELD CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFX0_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC)) ! ILUOUT = TOUT%NLU +HCOMMENT='' ! IF (HREC=='LONORI' .OR. HREC=='LATORI') THEN IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<=5)) THEN @@ -231,6 +233,7 @@ IF ( HREC=='LAT0' .OR. HREC=='LON0' .OR. HREC=='RPK' .OR. HREC=='BETA' & ELSE CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEREAL,0,'READ_SURFX0_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,PFIELD,KRESP) + HCOMMENT = TZFIELD%CCOMMENT END IF IF (KRESP /=0) THEN @@ -313,7 +316,7 @@ CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to be read INTEGER, INTENT(IN) :: KL ! number of points REAL, DIMENSION(KL), INTENT(OUT):: PFIELD ! array containing the data field INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT):: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT):: HCOMMENT ! comment CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! ! 'H' for HOR : with hor. dim.; and distributed. ! ! 'A' for ALL : with hor. dim.; and not distributed. @@ -345,6 +348,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFX1_MNH',TRIM(TPINFILE%CNAME)//': readi ! KRESP = 0 ILUOUT = TOUT%NLU +HCOMMENT = ' ' ! IF (HDIR=='A'.OR.HDIR=='E') THEN IIU = NIU_ALL @@ -381,7 +385,6 @@ ELSE IF (HREC=='LON') THEN ELSE IF (HREC=='MESH_SIZE') THEN PFIELD(:) = 0. - HCOMMENT = ' ' ELSE IF (HREC=='XX') THEN !! reading of a 1D field along X in the file @@ -396,6 +399,7 @@ ELSE IF (HREC=='XX') THEN TZFIELD%CDIR = '--' END IF CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP) + HCOMMENT = TZFIELD%CCOMMENT DO JJ = 1,IJU ZWORK(IIB:IIE,JJ) = 0.5 * ZWORK1D(IIB:IIE) + 0.5 * ZWORK1D(IIB+1:IIE+1) END DO @@ -415,6 +419,7 @@ ELSE IF (HREC=='DX') THEN TZFIELD%CDIR = '--' END IF CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP) + HCOMMENT = TZFIELD%CCOMMENT DO JJ = 1,IJU ZWORK(IIB:IIE,JJ) = - ZWORK1D(IIB:IIE) + ZWORK1D(IIB+1:IIE+1) END DO @@ -434,6 +439,7 @@ ELSE IF (HREC=='YY') THEN TZFIELD%CDIR = '--' END IF CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP) + HCOMMENT = TZFIELD%CCOMMENT DO JI = 1,IIU ZWORK(JI,IJB:IJE) = 0.5 * ZWORK1D(IJB:IJE) + 0.5 * ZWORK1D(IJB+1:IJE+1) END DO @@ -453,6 +459,7 @@ ELSE IF (HREC=='DY') THEN TZFIELD%CDIR = '--' END IF CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP) + HCOMMENT = TZFIELD%CCOMMENT DO JI = 1,IIU ZWORK(JI,IJB:IJE) = - ZWORK1D(IJB:IJE) + ZWORK1D(IJB+1:IJE+1) END DO @@ -502,6 +509,7 @@ ELSE CALL PREPARE_METADATA_READ_SURF(YREC,'--',4,TYPEREAL,1,'READ_SURFX1_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,PFIELD,KRESP) END IF + HCOMMENT = TZFIELD%CCOMMENT ! IF (KRESP /=0) THEN WRITE(ILUOUT,*) 'WARNING' @@ -598,7 +606,7 @@ INTEGER, INTENT(IN) :: KL1 ! number of points INTEGER, INTENT(IN) :: KL2 ! second dimension REAL, DIMENSION(KL1,KL2),INTENT(OUT) :: PFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! ! 'H' for HOR : with hor. dim.; and distributed. ! ! 'A' for ALL : with hor. dim.; and not distributed. @@ -641,6 +649,8 @@ ELSE CALL IO_READ_FIELD(TPINFILE,TZFIELD,PFIELD,KRESP) END IF ! +HCOMMENT = TZFIELD%CCOMMENT +! IF (KRESP /=0) THEN WRITE(ILUOUT,*) 'WARNING' WRITE(ILUOUT,*) '-------' @@ -736,7 +746,7 @@ INTEGER, INTENT(IN) :: KL1,KL2 ! number of points REAL, DIMENSION(KL1,KL2), INTENT(OUT):: PFIELD ! array containing the data field LOGICAL,DIMENSION(JPCOVER),INTENT(IN) :: OFLAG ! mask for array filling INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT):: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT):: HCOMMENT ! comment CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! ! 'H' for HOR : with hor. dim.; and distributed. ! ! 'A' for ALL : with hor. dim.; and not distributed. @@ -844,6 +854,8 @@ ELSE CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK3D(:,:,:),KRESP) END IF ! +HCOMMENT = TZFIELD%CCOMMENT +! IF (KRESP /=0) THEN WRITE(ILUOUT,*) 'WARNING' WRITE(ILUOUT,*) '-------' @@ -930,7 +942,7 @@ INTEGER, INTENT(IN) :: KL1 ! number of points INTEGER, INTENT(IN) :: KCOVER ! index of the vertical level, it should be a index such that LCOVER(KCOVER)=.TRUE. REAL, DIMENSION(KL1), INTENT(OUT):: PFIELD ! array containing the data field INTEGER, INTENT(OUT):: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT):: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT):: HCOMMENT ! comment CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! ! 'H' for HOR : with hor. dim.; and distributed. ! ! 'A' for ALL : with hor. dim.; and not distributed. @@ -1035,6 +1047,8 @@ ELSE CALL ABORT END IF ! +HCOMMENT = TZFIELD%CCOMMENT +! IF (KRESP /=0) THEN WRITE(ILUOUT,*) 'WARNING' WRITE(ILUOUT,*) '-------' @@ -1112,7 +1126,7 @@ IMPLICIT NONE CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to be read INTEGER, INTENT(OUT) :: KFIELD ! the integer to be read INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment ! !* 0.2 Declarations of local variables ! @@ -1126,6 +1140,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFN0_MNH',TRIM(TPINFILE%CNAME)//': readi ! KRESP=0 ILUOUT = TOUT%NLU +HCOMMENT='' ! IF (HREC=='DIM_FULL' .AND. ( CPROGRAM=='IDEAL ' .OR. & CPROGRAM=='SPAWN ' .OR. CPROGRAM=='ZOOMPG' ))THEN @@ -1135,6 +1150,7 @@ IF (HREC=='DIM_FULL' .AND. ( CPROGRAM=='IDEAL ' .OR. & ELSE CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEINT,0,'READ_SURFN0_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,KFIELD,KRESP) + HCOMMENT = TZFIELD%CCOMMENT IF (KRESP /=0) THEN WRITE(ILUOUT,*) 'WARNING' @@ -1208,7 +1224,7 @@ CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to be read INTEGER, INTENT(IN) :: KL ! number of points INTEGER, DIMENSION(KL), INTENT(OUT) :: KFIELD ! the integer to be read INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! ! 'H' : field with ! ! horizontal spatial dim. @@ -1249,9 +1265,11 @@ ELSE IF (HDIR=='H') THEN CALL PACK_2D_1D(NMASK,IWORK(NIB:NIE,NJB:NJE),KFIELD) END IF ! -DEALLOCATE(IWORK) - + DEALLOCATE(IWORK) ENDIF + +HCOMMENT = TZFIELD%CCOMMENT + !------------------------------------------------------------------------------- END SUBROUTINE READ_SURFN1_MNH ! @@ -1315,7 +1333,7 @@ IMPLICIT NONE CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to be read CHARACTER(LEN=40), INTENT(OUT) :: HFIELD ! the integer to be read INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment ! !* 0.2 Declarations of local variables ! @@ -1338,6 +1356,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFC0_MNH',TRIM(TPINFILE%CNAME)//': readi ! KRESP = 0 ILUOUT = TOUT%NLU +HCOMMENT = '' ! IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<6)) THEN SELECT CASE(TRIM(HREC)) @@ -1400,6 +1419,7 @@ ELSE IF ( HREC=='GRID_TYPE'.AND. ( & ELSE CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPECHAR,0,'READ_SURFC0_MNH',TZFIELD) CALL IO_READ_FIELD(TPINFILE,TZFIELD,HFIELD,KRESP) + HCOMMENT = TZFIELD%CCOMMENT ! IF (KRESP /=0) THEN CALL PRINT_MSG(NVERB_FATAL,'IO','READ_SURFC0_MNH',TRIM(TPINFILE%CNAME)//': error when reading article '//TRIM(HREC)// & @@ -1472,7 +1492,7 @@ CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to be read INTEGER, INTENT(IN) :: KL ! number of points LOGICAL, DIMENSION(KL), INTENT(OUT) :: OFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! ! 'H' : field with ! ! horizontal spatial dim. @@ -1524,6 +1544,9 @@ ELSE IF (HDIR=='H') THEN ! DEALLOCATE(GWORK) END IF + +HCOMMENT = TZFIELD%CCOMMENT + !------------------------------------------------------------------------------- END SUBROUTINE READ_SURFL1_MNH ! @@ -1583,7 +1606,7 @@ IMPLICIT NONE CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC ! name of the article to be read LOGICAL, INTENT(OUT) :: OFIELD ! array containing the data field INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment ! !* 0.2 Declarations of local variables ! @@ -1684,7 +1707,7 @@ INTEGER, INTENT(OUT) :: KMONTH ! month INTEGER, INTENT(OUT) :: KDAY ! day REAL, INTENT(OUT) :: PTIME ! time INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment !* 0.2 Declarations of local variables ! @@ -1703,6 +1726,7 @@ TYPE(DATE_TIME) :: TZDATETIME CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFT0_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC)) ! ILUOUT = TOUT%NLU +HCOMMENT = '' ! IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<6)) THEN CALL IO_READ_FIELD(TPINFILE,'STORAGE_TYPE',YFILETYPE2) @@ -1809,7 +1833,7 @@ INTEGER, DIMENSION(KL1), INTENT(OUT) :: KMONTH ! month INTEGER, DIMENSION(KL1), INTENT(OUT) :: KDAY ! day REAL, DIMENSION(KL1), INTENT(OUT) :: PTIME ! time INTEGER, INTENT(OUT) :: KRESP ! KRESP : return-code if a problem appears -CHARACTER(LEN=100), INTENT(OUT) :: HCOMMENT ! comment +CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment !* 0.2 Declarations of local variables ! @@ -1827,6 +1851,7 @@ TYPE(TFIELDDATA) :: TZFIELD CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFT1_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC)) ! ILUOUT = TOUT%NLU +HCOMMENT = '' ! IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<6)) THEN CALL IO_READ_FIELD(TPINFILE,'STORAGE_TYPE',YFILETYPE2) @@ -1859,7 +1884,7 @@ TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) TZFIELD%CUNITS = '' TZFIELD%CDIR = '--' -TZFIELD%CCOMMENT = TRIM(HCOMMENT) +TZFIELD%CCOMMENT = '' TZFIELD%NGRID = 0 TZFIELD%NTYPE = TYPEINT TZFIELD%NDIMS = 2 @@ -1884,7 +1909,7 @@ TZFIELD%CSTDNAME = '' TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME) TZFIELD%CUNITS = '' TZFIELD%CDIR = '--' -TZFIELD%CCOMMENT = TRIM(HCOMMENT) +TZFIELD%CCOMMENT = '' TZFIELD%NGRID = 0 TZFIELD%NTYPE = TYPEREAL TZFIELD%NDIMS = 1