diff --git a/src/LIB/SURCOUCHE/src/mode_io_field_read.f90 b/src/LIB/SURCOUCHE/src/mode_io_field_read.f90 index 7ce7335251f4dbb99a1175f21d230bda60382d88..c3d47cb6cc3bbc6b6fda62c78d0cc310d2946867 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_field_read.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_field_read.f90 @@ -51,7 +51,7 @@ INTERFACE IO_Field_read IO_Field_read_byname_N2, IO_Field_read_byname_N3, & IO_Field_read_byname_L0, IO_Field_read_byname_L1, & IO_Field_read_byname_C0, & - IO_Field_read_byname_T0, & + IO_Field_read_byname_T0, IO_Field_read_byname_T1, & IO_Field_read_byfield_X0,IO_Field_read_byfield_X1, & IO_Field_read_byfield_X2,IO_Field_read_byfield_X3, & IO_Field_read_byfield_X4,IO_Field_read_byfield_X5, & @@ -60,7 +60,7 @@ INTERFACE IO_Field_read IO_Field_read_byfield_N2,IO_Field_read_byfield_N3, & IO_Field_read_byfield_L0,IO_Field_read_byfield_L1, & IO_Field_read_byfield_C0, & - IO_Field_read_byfield_T0 + IO_Field_read_byfield_T0, IO_Field_read_byfield_T1 END INTERFACE INTERFACE IO_Field_read_lb @@ -2096,7 +2096,99 @@ IF (PRESENT(KRESP)) KRESP = IRESP END SUBROUTINE IO_Field_read_byfield_T0 -SUBROUTINE IO_Field_read_byname_lb(TPFILE,HNAME,KL3D,KRIM,PLB,KRESP) +SUBROUTINE IO_Field_read_byname_T1( TPFILE, HNAME, TPDATA, KRESP ) + + use modd_type_date, only: DATE_TIME + + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write + TYPE (DATE_TIME), DIMENSION(:), INTENT(INOUT) :: TPDATA ! array containing the data 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_Field_read_byname_T1',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME)) + ! + CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP) + ! + IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),TPDATA,IRESP) + ! + IF (PRESENT(KRESP)) KRESP = IRESP + ! + END SUBROUTINE IO_Field_read_byname_T1 + + SUBROUTINE IO_Field_read_byfield_T1( TPFILE, TPFIELD, TPDATA, KRESP ) + ! + use modd_io, only: ISP, GSMONOPROC + use modd_type_date, only: DATE_TIME + ! + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + CLASS(TFIELDMETADATA), INTENT(INOUT) :: TPFIELD + TYPE(DATE_TIME), DIMENSION(:), INTENT(INOUT) :: TPDATA ! array containing the data field + INTEGER, OPTIONAL, INTENT(OUT) :: KRESP ! return-code + ! + INTEGER :: IERR + INTEGER :: IRESP + INTEGER,DIMENSION(3,SIZE(TPDATA)) :: ITDATE + logical :: glfi, gnc4 + type(date_time), dimension(:), allocatable :: tzdata ! Intermediate data (always used for reads to not overwrite data in case of error) + ! + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_T1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) + ! + IRESP = 0 + ! + CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_T1',IRESP) + + call IO_Format_read_select( tpfile, glfi, gnc4 ) + + IF (IRESP==0) THEN + IF (GSMONOPROC) THEN ! sequential execution + allocate( tzdata(size(tpdata)) ) + if ( gnc4 ) call IO_Field_read_nc4( tpfile, tpfield, tzdata, iresp ) + if ( glfi ) call IO_Field_read_lfi( tpfile, tpfield, tzdata, iresp ) + if ( iresp == 0 .or. iresp == -111 ) tpdata(:) = tzdata(:) + ELSE + IF (ISP == TPFILE%NMASTER_RANK) THEN + call Allocbuffer_ll( tzdata, tpdata, tpfield%cdir ) + if ( gnc4 ) call IO_Field_read_nc4( tpfile, tpfield, tzdata, iresp ) + if ( glfi ) call IO_Field_read_lfi( tpfile, tpfield, tzdata, iresp ) + ELSE + !Not really necessary but useful to suppress alerts with Valgrind + allocate( tzdata(0) ) + END IF + ! + CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR) + ! + !Broadcast header only if IRESP==-111 + !because metadata of field has been modified in IO_Field_read_xxx + IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD) + ! + !Share data only if no error + if ( iresp == 0 .or. iresp == -111 ) then + if ( isp == tpfile%nmaster_rank ) then + tpdata(:) = tzdata(:) + ITDATE(1,:) = TPDATA(:)%nyear + ITDATE(2,:) = TPDATA(:)%nmonth + ITDATE(3,:) = TPDATA(:)%nday + end if + CALL MPI_BCAST( ITDATE(:,:), 3*size(tpdata), MNHINT_MPI, TPFILE%NMASTER_RANK-1, TPFILE%NMPICOMM, IERR ) + CALL MPI_BCAST( TPDATA(:)%xtime, 1*size(tpdata), MNHREAL_MPI, TPFILE%NMASTER_RANK-1, TPFILE%NMPICOMM, IERR ) + TPDATA(:)%nyear = ITDATE(1,:) + TPDATA(:)%nmonth = ITDATE(2,:) + TPDATA(:)%nday = ITDATE(3,:) + end if + END IF + END IF + ! + IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed) + ! + IF (PRESENT(KRESP)) KRESP = IRESP + ! + END SUBROUTINE IO_Field_read_byfield_T1 + + + SUBROUTINE IO_Field_read_byname_lb(TPFILE,HNAME,KL3D,KRIM,PLB,KRESP) ! TYPE(TFILEDATA), INTENT(IN) :: TPFILE CHARACTER(LEN=*), INTENT(IN) :: HNAME ! name of the field to write diff --git a/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 index 449f05c8df0b74cfd1343a5e778c8da224c89fc4..f7dd95bf4ad934dab6ed27ebb0c1ca144cc5b106 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 @@ -38,7 +38,7 @@ INTERFACE IO_Field_read_lfi IO_Field_read_lfi_N2, IO_Field_read_lfi_N3, & IO_Field_read_lfi_L0, IO_Field_read_lfi_L1, & IO_Field_read_lfi_C0, & - IO_Field_read_lfi_T0 + IO_Field_read_lfi_T0, IO_Field_read_lfi_T1 END INTERFACE IO_Field_read_lfi ! CONTAINS @@ -644,6 +644,28 @@ KRESP = IRESP END SUBROUTINE IO_Field_read_lfi_T0 ! ! +SUBROUTINE IO_Field_read_lfi_T1(TPFILE,TPFIELD,TPDATA,KRESP) +! +USE MODE_MSG +USE MODD_TYPE_DATE +! +IMPLICIT NONE +! +!* 0.1 Declarations of arguments +! +TYPE(TFILEDATA), INTENT(IN) :: TPFILE +CLASS(tfieldmetadata_base), INTENT(INOUT) :: TPFIELD +TYPE (DATE_TIME), DIMENSION(:), INTENT(INOUT) :: TPDATA ! array containing the data field +INTEGER, INTENT(OUT) :: KRESP ! return-code if problems occured +! +!* 0.2 Declarations of local variables +! +CALL PRINT_MSG( NVERB_ERROR, 'IO', 'IO_Field_read_lfi_T1', & + TRIM(TPFILE%CNAME) // ': read of 1D arrays of dates not implemented for LFI files' ) +! +END SUBROUTINE IO_Field_read_lfi_T1 +! +! SUBROUTINE IO_Field_read_check_lfi(TPFILE,TPFIELD,KLENG,KWORK,KTOTAL,KRESP,OGOOD) ! USE MODD_PARAMETERS, ONLY: NGRIDUNKNOWN diff --git a/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 index f95effb73e96f12a5d95d213515dead022a548d6..d7e4663ffa06f1c46bb98d27644f7ab2dd78c6f6 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 @@ -44,7 +44,7 @@ INTERFACE IO_Field_read_nc4 IO_Field_read_nc4_N2,IO_Field_read_nc4_N3, & IO_Field_read_nc4_L0,IO_Field_read_nc4_L1, & IO_Field_read_nc4_C0, & - IO_Field_read_nc4_T0 + IO_Field_read_nc4_T0,IO_Field_read_nc4_T1 END INTERFACE IO_Field_read_nc4 contains @@ -1289,7 +1289,6 @@ INTEGER(KIND=CDFINT) :: IVARID INTEGER(KIND=CDFINT) :: ITYPE ! variable type INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions CHARACTER(LEN=30) :: YVARNAME -CHARACTER(LEN=:),ALLOCATABLE :: YSTR INTEGER(KIND=CDFINT) :: IDIMLEN INTEGER :: IDX,IRESP REAL :: ZTIME @@ -1344,6 +1343,93 @@ KRESP = IRESP END SUBROUTINE IO_Field_read_nc4_T0 +SUBROUTINE IO_Field_read_nc4_T1(TPFILE, TPFIELD, TPDATA, KRESP) + ! + USE MODD_TYPE_DATE + ! + USE MODE_DATETIME + ! + TYPE(TFILEDATA), INTENT(IN) :: TPFILE + CLASS(tfieldmetadata), INTENT(INOUT) :: TPFIELD + TYPE (DATE_TIME), DIMENSION(:), INTENT(INOUT) :: TPDATA + INTEGER, INTENT(OUT) :: KRESP ! return-code + + INTEGER(KIND=CDFINT) :: istatus + INTEGER(KIND=CDFINT) :: INCID + INTEGER(KIND=CDFINT) :: IVARID + INTEGER(KIND=CDFINT) :: ITYPE ! variable type + INTEGER(KIND=CDFINT) :: IDIMS ! number of dimensions + INTEGER(KIND=CDFINT), DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS + CHARACTER(LEN=30) :: YVARNAME + INTEGER(KIND=CDFINT) :: IDIMLEN + INTEGER :: IDX,IRESP + REAL, DIMENSION(:), ALLOCATABLE :: ZTIMES + + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_T1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME)) + + IRESP = 0 + ! Get the Netcdf file ID + INCID = TPFILE%NNCID + + CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME) + + ! Get variable ID, NDIMS and TYPE + istatus = NF90_INQ_VARID(INCID, YVARNAME, IVARID) + IF (istatus /= NF90_NOERR) THEN + CALL IO_Err_handle_nc4(istatus,'IO_Field_read_nc4_T1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP) + GOTO 1000 + END IF + istatus = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS) + IF (istatus /= NF90_NOERR) CALL IO_Err_handle_nc4(istatus,'IO_Field_read_nc4_T1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME)) + + IF (IDIMS == 1 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN + ! Check size of variable before reading + istatus = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN) + IF (istatus /= NF90_NOERR) CALL IO_Err_handle_nc4(istatus,'IO_Field_read_nc4_T1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME)) + + IF (IDIMLEN == SIZE(TPDATA)) THEN + ! Read times + allocate( ztimes(idimlen) ) + istatus = NF90_GET_VAR( INCID, IVARID, ZTIMES ) + IF (istatus /= NF90_NOERR) THEN + CALL IO_Err_handle_nc4(istatus,'IO_Field_read_nc4_T1','NF90_GET_VAR',TRIM(YVARNAME),IRESP) + GOTO 1000 + END IF + ! Read and check attributes of variable + CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP,HCALENDAR='standard') + ! Extract date from UNITS + IDX = INDEX(TPFIELD%CUNITS,'since ') + READ(TPFIELD%CUNITS(IDX+6 :IDX+9), '( I4.4 )') TPDATA(1)%nyear + READ(TPFIELD%CUNITS(IDX+11:IDX+12),'( I2.2 )') TPDATA(1)%nmonth + READ(TPFIELD%CUNITS(IDX+14:IDX+15),'( I2.2 )') TPDATA(1)%nday + ! Simple check (should catch most errors) + IF ( TPDATA(1)%nday<1 .OR. TPDATA(1)%nday>31 .OR. TPDATA(1)%nmonth<1 .OR. TPDATA(1)%nmonth>12 ) THEN + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_T1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// & + ' read date is invalid') + IRESP = -3 + END IF + if ( size(tpdata) > 1 ) then + TPDATA(2:)%nyear = TPDATA(1)%nyear + TPDATA(2:)%nmonth = TPDATA(1)%nmonth + TPDATA(2:)%nday = TPDATA(1)%nday + end if + ! Insert times + autocorrect date and time (necessary for example if time is bigger than 86400 s) + TPDATA(:) = TPDATA(:) + ZTIMES(:) + ELSE + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_T1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// & + ' not read (wrong size)') + IRESP = -3 + END IF + ELSE + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_T1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// & + ' not read (wrong number of dimensions or wrong type)') + IRESP = -3 + END IF + + 1000 CONTINUE + KRESP = IRESP + +END SUBROUTINE IO_Field_read_nc4_T1 end module mode_io_read_nc4 #else diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90 index d3ce73acd1e91e46175fa2eb82168bf1e5f95d68..ca508f8c324cc69c4e63d7e1e202c952897e4a3c 100644 --- a/src/MNH/read_surf_mnh.f90 +++ b/src/MNH/read_surf_mnh.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2003-2023 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2003-2024 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -169,8 +169,6 @@ CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment ! !* 0.2 Declarations of local variables ! -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string INTEGER :: ILUOUT INTEGER :: IID,IRESP INTEGER :: IIMAX,IJMAX @@ -329,8 +327,6 @@ CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! !* 0.2 Declarations of local variables ! -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string INTEGER :: ILUOUT INTEGER :: JI, JJ ! loop counters @@ -615,8 +611,6 @@ CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! !* 0.2 Declarations of local variables ! -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string INTEGER :: ILUOUT INTEGER :: JP ! loop index @@ -753,8 +747,6 @@ CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! !* 0.2 Declarations of local variables ! -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string INTEGER :: ILUOUT ! CHARACTER(LEN=MNH_LEN_HREC) :: YREC @@ -949,8 +941,6 @@ CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! !* 0.2 Declarations of local variables ! -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string INTEGER :: ILUOUT ! CHARACTER(LEN=MNH_LEN_HREC) :: YREC @@ -1224,8 +1214,6 @@ CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! !* 0.2 Declarations of local variables ! -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string INTEGER :: ILUOUT ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: IWORK ! work array read in the file @@ -1329,8 +1317,6 @@ CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment !* 0.2 Declarations of local variables ! INTEGER :: IRESP ! return code -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string INTEGER :: ILUOUT ! INTEGER :: ILUDES ! .des file logical unit @@ -1488,8 +1474,6 @@ CHARACTER(LEN=1), INTENT(IN) :: HDIR ! type of field : ! !* 0.2 Declarations of local variables ! -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string INTEGER :: ILUOUT LOGICAL, DIMENSION(:,:), ALLOCATABLE :: GWORK ! work array read in the file INTEGER, DIMENSION(:,:), ALLOCATABLE :: IWORK ! work array read in the file @@ -1717,14 +1701,10 @@ CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment !* 0.2 Declarations of local variables ! -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string INTEGER :: ILUOUT ! -CHARACTER(LEN=MNH_LEN_HREC) :: YRECFM ! Name of the article to be written CHARACTER(LEN=40) :: YFILETYPE40! MESONH file type CHARACTER(LEN=2) :: YFILETYPE2 ! MESONH file type -INTEGER, DIMENSION(3) :: ITDATE TYPE(TFIELDMETADATA) :: TZFIELD TYPE(DATE_TIME) :: TZDATETIME !------------------------------------------------------------------------------- @@ -1766,7 +1746,7 @@ CALL IO_Field_read(TPINFILE,HREC,TZDATETIME,KRESP) IF (KRESP /=0) THEN WRITE(ILUOUT,*) 'WARNING' WRITE(ILUOUT,*) '-------' - WRITE(ILUOUT,*) 'error when reading article ',YRECFM,'KRESP=',KRESP + WRITE(ILUOUT,*) 'error when reading article ',HREC,'KRESP=',KRESP WRITE(ILUOUT,*) 'default value may be used, who knows???' WRITE(ILUOUT,*) ' ' ENDIF @@ -1820,11 +1800,13 @@ END SUBROUTINE READ_SURFT0_MNH !* 0. DECLARATIONS ! ------------ ! -use modd_field, only: tfieldmetadata, TYPECHAR, TYPEINT, TYPEREAL +use modd_field, only: tfieldmetadata, TYPEINT, TYPEREAL, TYPEDATE USE MODD_IO_SURF_MNH, ONLY: TOUT, TPINFILE +USE MODD_TYPE_DATE USE MODE_IO_FIELD_READ, only: IO_Field_read USE MODE_MSG +USE MODE_READ_SURF_MNH_TOOLS IMPLICIT NONE ! @@ -1842,15 +1824,12 @@ CHARACTER(LEN=*), INTENT(OUT) :: HCOMMENT ! comment !* 0.2 Declarations of local variables ! -INTEGER :: IGRID ! IGRID : grid indicator -INTEGER :: ILENCH ! ILENCH : length of comment string INTEGER :: ILUOUT ! -CHARACTER(LEN=MNH_LEN_HREC) :: YRECFM ! Name of the article to be written -CHARACTER(LEN=40) :: YFILETYPE40! MESONH file type -CHARACTER(LEN=2) :: YFILETYPE2 ! MESONH file type -INTEGER, DIMENSION(3,KL1) :: ITDATE -TYPE(TFIELDMETADATA) :: TZFIELD +CHARACTER(LEN=5) :: YMSG +INTEGER, DIMENSION(3,KL1) :: ITDATE +TYPE (DATE_TIME), DIMENSION(KL1) :: TZDATA +TYPE(TFIELDMETADATA) :: TZFIELD !------------------------------------------------------------------------------- ! CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFT1_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC)) @@ -1858,79 +1837,64 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFT1_MNH',TRIM(TPINFILE%CNAME)//': readi ILUOUT = TOUT%NLU HCOMMENT = '' ! -IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<6)) THEN - CALL IO_Field_read(TPINFILE,'STORAGE_TYPE',YFILETYPE2) +IF ( TPINFILE%NMNHVERSION(1)<5 & + .OR. (TPINFILE%NMNHVERSION(1)==5 .AND. TPINFILE%NMNHVERSION(2)<7) & + .OR. (TPINFILE%NMNHVERSION(1)==5 .AND. TPINFILE%NMNHVERSION(2)==7 .AND. TPINFILE%NMNHVERSION(3)<2 ) ) THEN + TZFIELD = TFIELDMETADATA( & + CMNHNAME = TRIM(HREC)//'%TDATE', & + CSTDNAME = '', & + CLONGNAME = TRIM(HREC)//'%TDATE', & + CUNITS = '', & + CDIR = '--', & + CCOMMENT = '', & + NGRID = 0, & + NTYPE = TYPEINT, & + NDIMS = 2, & + LTIMEDEP = .FALSE. ) + ! + CALL IO_Field_read(TPINFILE,TZFIELD,ITDATE(:,:),KRESP) + ! + KYEAR(:) = ITDATE(1,:) + KMONTH(:) = ITDATE(2,:) + KDAY(:) = ITDATE(3,:) + ! + IF (KRESP /=0) THEN + WRITE(ILUOUT,*) 'WARNING' + WRITE(ILUOUT,*) '-------' + WRITE(ILUOUT,*) 'error when reading article ',HREC,'KRESP=',KRESP + WRITE(ILUOUT,*) 'default value may be used, who knows???' + WRITE(ILUOUT,*) ' ' + ENDIF + ! + TZFIELD = TFIELDMETADATA( & + CMNHNAME = TRIM(HREC)//'%xtime', & + CSTDNAME = '', & + CLONGNAME = TRIM(HREC)//'%xtime', & + CUNITS = '', & + CDIR = '--', & + CCOMMENT = '', & + NGRID = 0, & + NTYPE = TYPEREAL, & + NDIMS = 1, & + LTIMEDEP = .FALSE. ) + ! + CALL IO_Field_read(TPINFILE,TZFIELD,PTIME(:),KRESP) + ! + IF (KRESP /=0) THEN + WRITE(ILUOUT,*) 'WARNING' + WRITE(ILUOUT,*) '-------' + WRITE(ILUOUT,*) 'error when reading article ',HREC,'KRESP=',KRESP + WRITE(ILUOUT,*) 'default value may be used, who knows???' + WRITE(ILUOUT,*) ' ' + ENDIF ELSE - TZFIELD = TFIELDMETADATA( & - CMNHNAME = 'STORAGETYPE', & - CSTDNAME = '', & - CLONGNAME = 'STORAGETYPE', & - CUNITS = '', & - CDIR = '--', & - CCOMMENT = '', & - NGRID = 0, & - NTYPE = TYPECHAR, & - NDIMS = 0, & - LTIMEDEP = .FALSE. ) - CALL IO_Field_read(TPINFILE,TZFIELD,YFILETYPE40) - YFILETYPE2 = YFILETYPE40(1:2) -END IF -!IF (YFILETYPE2(1:2)=='PG') THEN -! WRITE(ILUOUT,*) 'WARNING' -! WRITE(ILUOUT,*) '-------' -! WRITE(ILUOUT,*) 'Date is not read in a PGD file' -! WRITE(ILUOUT,*) 'Atmospheric model value is kept' -! WRITE(ILUOUT,*) ' ' -! KRESP = -2 -! RETURN -!END IF -! -TZFIELD = TFIELDMETADATA( & - CMNHNAME = TRIM(HREC)//'%TDATE', & - CSTDNAME = '', & - CLONGNAME = TRIM(HREC)//'%TDATE', & - CUNITS = '', & - CDIR = '--', & - CCOMMENT = '', & - NGRID = 0, & - NTYPE = TYPEINT, & - NDIMS = 2, & - LTIMEDEP = .FALSE. ) -! -CALL IO_Field_read(TPINFILE,TZFIELD,ITDATE(:,:),KRESP) -! -KYEAR(:) = ITDATE(1,:) -KMONTH(:) = ITDATE(2,:) -KDAY(:) = ITDATE(3,:) -! -IF (KRESP /=0) THEN - WRITE(ILUOUT,*) 'WARNING' - WRITE(ILUOUT,*) '-------' - WRITE(ILUOUT,*) 'error when reading article ',YRECFM,'KRESP=',KRESP - WRITE(ILUOUT,*) 'default value may be used, who knows???' - WRITE(ILUOUT,*) ' ' -ENDIF -! -TZFIELD = TFIELDMETADATA( & - CMNHNAME = TRIM(HREC)//'%xtime', & - CSTDNAME = '', & - CLONGNAME = TRIM(HREC)//'%xtime', & - CUNITS = '', & - CDIR = '--', & - CCOMMENT = '', & - NGRID = 0, & - NTYPE = TYPEREAL, & - NDIMS = 1, & - LTIMEDEP = .FALSE. ) -! -CALL IO_Field_read(TPINFILE,TZFIELD,PTIME(:),KRESP) -! -IF (KRESP /=0) THEN - WRITE(ILUOUT,*) 'WARNING' - WRITE(ILUOUT,*) '-------' - WRITE(ILUOUT,*) 'error when reading article ',YRECFM,'KRESP=',KRESP - WRITE(ILUOUT,*) 'default value may be used, who knows???' - WRITE(ILUOUT,*) ' ' + CALL PREPARE_METADATA_READ_SURF( HREC, '--', 0, TYPEDATE, 1,'READ_SURFT1_MNH', TZFIELD ) + CALL IO_Field_read( TPINFILE, TZFIELD, TZDATA, KRESP ) + + IF ( KRESP /=0 ) THEN + WRITE ( YMSG, '( I5 )' ) KRESP + CALL PRINT_MSG( NVERB_ERROR, 'IO', 'READ_SURFT1_MNH', 'error when reading article ' // TRIM(HREC) // ' KRESP=' // YMSG ) + END IF ENDIF !------------------------------------------------------------------------------- END SUBROUTINE READ_SURFT1_MNH