diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 index 81e95d60ace139656f5f3a5f59d1aa91b1edecb8..6d242bcbf5d3dab9325d1172c91db4a909971f2b 100644 --- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 @@ -258,6 +258,55 @@ CONTAINS END SUBROUTINE FM_WRIT_ERR + SUBROUTINE FIELD_METADATA_CHECK(TPFIELD,KTYPE,KDIMS,HCALLER) + TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD ! Field to check + INTEGER, INTENT(IN) :: KTYPE ! Expected datatype + INTEGER, INTENT(IN) :: KDIMS ! Expected number of dimensions + CHARACTER(LEN=*), INTENT(IN) :: HCALLER ! name of the calling subroutine + ! + CHARACTER(LEN=2) :: YDIMOK,YDIMKO + CHARACTER(LEN=8) :: YTYPEOK,YTYPEKO + ! + IF (TPFIELD%NGRID<0 .OR. TPFIELD%NGRID>4) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO',HCALLER,'TPFIELD%NGRID is invalid for '//TRIM(TPFIELD%CMNHNAME)) + END IF + IF (TPFIELD%NTYPE/=KTYPE) THEN + CALL TYPE_WRITE(KTYPE,YTYPEOK) + CALL TYPE_WRITE(TPFIELD%NTYPE,YTYPEKO) + CALL PRINT_MSG(NVERB_WARNING,'IO',HCALLER,& + 'TPFIELD%NTYPE should be '//YTYPEOK//' instead of '//YTYPEKO//' for '//TRIM(TPFIELD%CMNHNAME)) + END IF + IF (TPFIELD%NDIMS/=KDIMS) THEN + WRITE (YDIMOK,'(I2)') KDIMS + WRITE (YDIMKO,'(I2)') TPFIELD%NDIMS + CALL PRINT_MSG(NVERB_WARNING,'IO',HCALLER,& + 'TPFIELD%NDIMS should be '//YDIMOK//' instead of '//YDIMKO//' for '//TRIM(TPFIELD%CMNHNAME)) + END IF + ! + CONTAINS + SUBROUTINE TYPE_WRITE(KTYPEINT,HTYPE) + INTEGER, INTENT(IN) :: KTYPEINT + CHARACTER(LEN=8),INTENT(OUT) :: HTYPE + ! + SELECT CASE(KTYPEINT) + CASE(TYPEINT) + HTYPE = 'TYPEINT' + CASE(TYPELOG) + HTYPE = 'TYPELOG' + CASE(TYPEREAL) + HTYPE = 'TYPEREAL' + CASE(TYPECHAR) + HTYPE = 'TYPECHAR' + CASE(TYPEDATE) + HTYPE = 'TYPEDATE' + CASE DEFAULT + HTYPE = 'UNKNOWN' + END SELECT + ! + END SUBROUTINE TYPE_WRITE + END SUBROUTINE FIELD_METADATA_CHECK + + SUBROUTINE IO_WRITE_HEADER(TPFILE,HLUOUT,HDAD_NAME) ! USE MODD_CONF @@ -452,6 +501,8 @@ CONTAINS ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X0','writing '//TRIM(YRECFM)) ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,0,'IO_WRITE_FIELD_BYFIELD_X0') + ! !* 1.1 THE NAME OF LFIFM ! IRESP = 0 @@ -649,6 +700,9 @@ CONTAINS ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X1','writing '//TRIM(YRECFM)) ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,1,'IO_WRITE_FIELD_BYFIELD_X1') + ! + ! !* 1.1 THE NAME OF LFIFM ! IRESP = 0 @@ -944,6 +998,8 @@ CONTAINS ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X2','writing '//TRIM(YRECFM)) ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,2,'IO_WRITE_FIELD_BYFIELD_X2') + ! !* 1.1 THE NAME OF LFIFM ! CALL SECOND_MNH2(T11) @@ -1519,6 +1575,8 @@ CONTAINS ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X3','writing '//TRIM(YRECFM)) ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,3,'IO_WRITE_FIELD_BYFIELD_X3') + ! !* 1.1 THE NAME OF LFIFM ! CALL SECOND_MNH2(T11) @@ -1957,6 +2015,8 @@ CONTAINS ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X4','writing '//TRIM(YRECFM)) ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,4,'IO_WRITE_FIELD_BYFIELD_X4') + ! IRESP = 0 GALLOC = .FALSE. YFNLFI=TRIM(ADJUSTL(YFILEM))//'.lfi' @@ -2182,6 +2242,8 @@ CONTAINS ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X5','writing '//TRIM(YRECFM)) ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,5,'IO_WRITE_FIELD_BYFIELD_X5') + ! IRESP = 0 GALLOC = .FALSE. YFNLFI=TRIM(ADJUSTL(YFILEM))//'.lfi' @@ -2389,6 +2451,8 @@ CONTAINS ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X6','writing '//TRIM(YRECFM)) ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,6,'IO_WRITE_FIELD_BYFIELD_X6') + ! IRESP = 0 GALLOC = .FALSE. YFNLFI=TRIM(ADJUSTL(YFILEM))//'.lfi' @@ -2468,6 +2532,7 @@ CONTAINS TYPE(FD_ll), POINTER :: TZFD_IOZ ! CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITN0_ll','writing '//TRIM(HRECFM)) + ! !JUANZIO !---------------------------------------------------------------- ! @@ -2576,12 +2641,10 @@ CONTAINS CHARACTER(len=128) :: YFILE_IOZ TYPE(FD_ll), POINTER :: TZFD_IOZ TYPE(TFILEDATA),POINTER :: TZFILE - INTEGER,DIMENSION(1) :: IDIMS ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N0','writing '//TRIM(TPFIELD%CMNHNAME)) ! - IDIMS(1) = 0 - ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,0,'IO_WRITE_FIELD_BYFIELD_N0') ! IRESP = 0 !------------------------------------------------------------------ @@ -2663,6 +2726,7 @@ CONTAINS LOGICAL :: GALLOC ! CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITN1_ll','writing '//TRIM(HRECFM)) + ! !---------------------------------------------------------------- ! !* 1.1 THE NAME OF LFIFM @@ -2776,6 +2840,8 @@ CONTAINS ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N1','writing '//TRIM(YRECFM)) ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,1,'IO_WRITE_FIELD_BYFIELD_N1') + ! !* 1.1 THE NAME OF LFIFM ! IRESP = 0 @@ -2993,6 +3059,8 @@ CONTAINS ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N2','writing '//TRIM(YRECFM)) ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,2,'IO_WRITE_FIELD_BYFIELD_N2') + ! !* 1.1 THE NAME OF LFIFM ! CALL SECOND_MNH2(T11) @@ -3227,9 +3295,9 @@ CONTAINS TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP TYPE(FMHEADER) :: TZFMH - ! CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITL0_ll','writing '//TRIM(HRECFM)) + ! !---------------------------------------------------------------- ! !* 1.1 THE NAME OF LFIFM @@ -3327,6 +3395,7 @@ CONTAINS ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_L0','writing '//TRIM(TPFIELD%CMNHNAME)) ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPELOG,0,'IO_WRITE_FIELD_BYFIELD_L0') ! IRESP = 0 !------------------------------------------------------------------ @@ -3510,6 +3579,7 @@ CONTAINS ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_L1','writing '//TRIM(YRECFM)) ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPELOG,1,'IO_WRITE_FIELD_BYFIELD_L1') ! !* 1.1 THE NAME OF LFIFM ! @@ -3587,9 +3657,9 @@ CONTAINS TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP TYPE(FMHEADER) :: TZFMH - ! CALL PRINT_MSG(NVERB_DEBUG,'IO','FMWRITC0_ll','writing '//TRIM(HRECFM)) + ! !---------------------------------------------------------------- !* 1.1 THE NAME OF LFIFM ! @@ -3685,12 +3755,17 @@ CONTAINS INTEGER :: IERR TYPE(FD_ll), POINTER :: TZFD INTEGER :: IRESP - INTEGER,DIMENSION(1) :: IDIMS ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_C0','writing '//TRIM(TPFIELD%CMNHNAME)) ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPECHAR,0,'IO_WRITE_FIELD_BYFIELD_C0') + ! IRESP = 0 ! + IF (LEN(HFIELD)==0 .AND. LLFIOUT) THEN + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C0',& + 'zero-size string not allowed if LFI output for '//TRIM(TPFIELD%CMNHNAME)) + END IF !------------------------------------------------------------------ TZFD=>GETFD(TRIM(ADJUSTL(TPFILE%CNAME))//'.lfi') IF (ASSOCIATED(TZFD)) THEN @@ -3857,8 +3932,11 @@ CONTAINS INTEGER :: ILE, IP INTEGER,DIMENSION(:),ALLOCATABLE :: IFIELD INTEGER :: ILENG + ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_C1','writing '//TRIM(TPFIELD%CMNHNAME)) ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPECHAR,1,'IO_WRITE_FIELD_BYFIELD_C1') + ! IRESP = 0 ! IF(LLFIOUT) THEN @@ -4037,6 +4115,8 @@ CONTAINS ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_T0','writing '//TRIM(TPFIELD%CMNHNAME)) ! + CALL FIELD_METADATA_CHECK(TPFIELD,TYPEDATE,0,'IO_WRITE_FIELD_BYFIELD_T0') + ! IRESP = 0 ! !------------------------------------------------------------------ @@ -4932,5 +5012,3 @@ CONTAINS END SUBROUTINE FMWRITBOXX6_ll END MODULE MODE_FMWRIT - -