diff --git a/src/LIB/SURCOUCHE/src/fmreadwrit.f90 b/src/LIB/SURCOUCHE/src/fmreadwrit.f90 index 415014b32c4375bc3edb2fecee12b37808fbb8ca..e2ff07972d4af31518ad33aa15e91baca65e3932 100644 --- a/src/LIB/SURCOUCHE/src/fmreadwrit.f90 +++ b/src/LIB/SURCOUCHE/src/fmreadwrit.f90 @@ -802,33 +802,52 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK) ! END SUBROUTINE IO_WRITE_FIELD_LFI_X1 ! -SUBROUTINE IO_WRITE_FIELD_LFI_X2(TPFILE,TPFIELD,PFIELD,KRESP,KVERTLEVEL) +SUBROUTINE IO_WRITE_FIELD_LFI_X2(TPFILE,TPFIELD,PFIELD,KRESP,KVERTLEVEL,KZFILE) +! +USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME ! IMPLICIT NONE ! !* 0.1 Declarations of arguments ! -TYPE(TFILEDATA), INTENT(IN) :: TPFILE +TYPE(TFILEDATA),TARGET,INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD REAL,DIMENSION(:,:), INTENT(IN) :: PFIELD ! array containing the data field INTEGER, INTENT(OUT):: KRESP ! return-code if problems araised INTEGER,OPTIONAL, INTENT(IN) :: KVERTLEVEL ! Number of the vertical level (needed for Z-level splitted files) +INTEGER,OPTIONAL, INTENT(IN) :: KZFILE ! Number of the Z-level splitted file ! !* 0.2 Declarations of local variables ! -INTEGER :: ILENG +INTEGER :: ILENG,IERR INTEGER(kind=LFI_INT) :: IRESP, ITOTAL INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK CHARACTER(LEN=4) :: YSUFFIX +CHARACTER(LEN=3) :: YNUMBER CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4) :: YVARNAME CHARACTER(LEN=LEN_HREC) :: YRECFM +TYPE(TFILEDATA),POINTER :: TZFILE +! +IERR = 0 ! ILENG = SIZE(PFIELD) IF (PRESENT(KVERTLEVEL)) THEN WRITE(YSUFFIX,'(I4.4)') KVERTLEVEL + IF (.NOT.PRESENT(KZFILE)) THEN + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_LFI_X2','KZFILE argument not provided') + RETURN + END IF + WRITE(YNUMBER,'(I3.3)') KZFILE YVARNAME = TRIM(TPFIELD%CMNHNAME)//YSUFFIX +!PW: TODO: try to not do a find (for better perf) + CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//'.Z'//YNUMBER,TZFILE,IERR) + IF (IERR/=0) THEN + CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_LFI_X2','file '//TRIM(TRIM(TPFILE%CNAME)//'.Z'//YNUMBER)//' not found in list') + RETURN + END IF ELSE YVARNAME = TRIM(TPFIELD%CMNHNAME) + TZFILE => TPFILE ENDIF ! CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X2','writing '//TRIM(YVARNAME)) @@ -841,7 +860,7 @@ IF (IRESP==0) THEN IF( LEN_TRIM(YVARNAME) > LEN(YRECFM) ) & CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X2','field name was truncated to '& //YRECFM//' for '//TRIM(YVARNAME)) - CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL) + CALL LFIECR(IRESP,TZFILE%NLFIFLU,YRECFM,IWORK,ITOTAL) ENDIF ! KRESP=IRESP diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 index 8325e93ec98c3e53f50b0df01572eedb8f4ba385..9915319f2a1fc5f42b883f5bb085e9d1ca07066f 100644 --- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 +++ b/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 @@ -272,7 +272,7 @@ CONTAINS ! CHARACTER(LEN=28) :: YDAD_NAME !Necessary to use a character string of the right length for LFI files ! - CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER','called for file'//TRIM(TPFILE%CNAME)) + CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER','called for file '//TRIM(TPFILE%CNAME)) ! IF ( ASSOCIATED(TPFILE%TDADFILE) .AND. PRESENT(HDAD_NAME) ) THEN IF ( TRIM(TPFILE%TDADFILE%CNAME) /= TRIM(HDAD_NAME) ) THEN @@ -478,7 +478,6 @@ CONTAINS INTEGER :: IK_FILE,IK_RANK CHARACTER(len=5) :: YK_FILE CHARACTER(len=128) :: YFILE_IOZ - TYPE(FD_ll), POINTER :: TZFD_IOZ CHARACTER(LEN=:),ALLOCATABLE :: YMSG CHARACTER(LEN=6) :: YRESP ! @@ -994,7 +993,7 @@ CONTAINS CALL SECOND_MNH2(T1) TIMEZ%T_WRIT3D_RECV=TIMEZ%T_WRIT3D_RECV + T1 - T0 ! - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD_IOZ%CDF,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1) CALL SECOND_MNH2(T2) TIMEZ%T_WRIT3D_WRIT=TIMEZ%T_WRIT3D_WRIT + T2 - T1 @@ -1113,7 +1112,7 @@ CONTAINS CALL SECOND_MNH2(T1) TIMEZ%T_WRIT3D_RECV=TIMEZ%T_WRIT3D_RECV + T1 - T0 !JUANIOZ - IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK) + IF (LLFIOUT) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1) IF (LIOCDF4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TZFD_IOZ%CDF,ZSLIDE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1) CALL SECOND_MNH2(T2) TIMEZ%T_WRIT3D_WRIT=TIMEZ%T_WRIT3D_WRIT + T2 - T1