diff --git a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 index b71d40e6261e3db863147fabfdf36bb65fb0b6dc..fc7a2142a6e1bc14adbb3cc240b779965eead752 100644 --- a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 +++ b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 @@ -578,7 +578,12 @@ INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IDIMLEN CALL LFILEC(iresp,ilu,trim(tpreclist(ji)%name)//trim(suffix),iwork,ileng) extent = ileng - 2 - iwork(2) !iwork(2) = comment length ! Determine TDIMS - CALL IO_GUESS_DIMIDS_NC4(outfiles%tfiles(idx)%TFILE,tpreclist(ji)%TFIELD,extent,tpreclist(ji)%TDIMS) + CALL IO_GUESS_DIMIDS_NC4(outfiles%tfiles(idx)%TFILE,tpreclist(ji)%TFIELD,extent,tpreclist(ji)%TDIMS,IRESP2) + IF (IRESP2/=0) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','fill_ncdf','can not guess dimensions for '//tpreclist(ji)%TFIELD%CMNHNAME// & + ' => ignored') + CYCLE + END IF itab(1:extent) = iwork(3+iwork(2):3+iwork(2)+extent-1) ELSE src=tpreclist(ji)%src(1) @@ -682,7 +687,12 @@ print *,'PW:TODO' CALL LFILEC(iresp,ilu,trim(tpreclist(ji)%name)//trim(suffix),iwork,ileng) extent = ileng - 2 - iwork(2) !iwork(2) = comment length ! Determine TDIMS - CALL IO_GUESS_DIMIDS_NC4(outfiles%tfiles(idx)%TFILE,tpreclist(ji)%TFIELD,extent,tpreclist(ji)%TDIMS) + CALL IO_GUESS_DIMIDS_NC4(outfiles%tfiles(idx)%TFILE,tpreclist(ji)%TFIELD,extent,tpreclist(ji)%TDIMS,IRESP2) + IF (IRESP2/=0) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','fill_ncdf','can not guess dimensions for '//tpreclist(ji)%TFIELD%CMNHNAME// & + ' => ignored') + CYCLE + END IF itab(1:extent) = iwork(3+iwork(2):3+iwork(2)+extent-1) ELSE src=tpreclist(ji)%src(1) @@ -781,7 +791,12 @@ print *,'PW:TODO' CALL LFILEC(iresp,ilu,trim(tpreclist(ji)%name)//trim(suffix),iwork,ileng) extent = ileng - 2 - iwork(2) !iwork(2) = comment length ! Determine TDIMS - CALL IO_GUESS_DIMIDS_NC4(outfiles%tfiles(idx)%TFILE,tpreclist(ji)%TFIELD,extent,tpreclist(ji)%TDIMS) + CALL IO_GUESS_DIMIDS_NC4(outfiles%tfiles(idx)%TFILE,tpreclist(ji)%TFIELD,extent,tpreclist(ji)%TDIMS,IRESP2) + IF (IRESP2/=0) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','fill_ncdf','can not guess dimensions for '//tpreclist(ji)%TFIELD%CMNHNAME// & + ' => ignored') + CYCLE + END IF xtab(1:extent) = TRANSFER(iwork(3+iwork(2):),(/ 0.0_8 /)) ELSE src=tpreclist(ji)%src(1) diff --git a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 index 514bc1475cfb4298bfa4ed7ada8720d147dd56d4..f82579274f63cc78fa9b7874ff2556ca980ec8cb 100644 --- a/src/LIB/SURCOUCHE/src/mode_netcdf.f90 +++ b/src/LIB/SURCOUCHE/src/mode_netcdf.f90 @@ -954,12 +954,13 @@ END DO END SUBROUTINE FILLVDIMS -SUBROUTINE IO_GUESS_DIMIDS_NC4(TPFILE, TPFIELD, KLEN, TPDIMS) +SUBROUTINE IO_GUESS_DIMIDS_NC4(TPFILE, TPFIELD, KLEN, TPDIMS, KRESP) !Used by LFI2CDF TYPE(TFILEDATA), INTENT(IN) :: TPFILE TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD INTEGER, INTENT(IN) :: KLEN -TYPE(DIMCDF),DIMENSION(:),INTENT(OUT) :: TPDIMS +TYPE(DIMCDF),DIMENSION(:), INTENT(OUT) :: TPDIMS +INTEGER, INTENT(OUT) :: KRESP ! INTEGER :: IGRID INTEGER :: ILEN, ISIZE @@ -973,16 +974,17 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_GUESS_DIMIDS_NC4','called for '//TRIM(TPFIEL IGRID = TPFIELD%NGRID YDIR = TPFIELD%CDIR ! +KRESP = 0 ILEN = 0 PTDIM => NULL() ! IF(IGRID<0 .OR. IGRID>8) THEN WRITE(YINT,'( I0 )') IGRID - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_GUESS_DIMIDS_NC4','invalid NGRID ('//TRIM(YINT)//') for field '//TRIM(TPFIELD%CMNHNAME)) + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','invalid NGRID ('//TRIM(YINT)//') for field '//TRIM(TPFIELD%CMNHNAME)) END IF ! IF(IGRID==0 .AND. YDIR/='--' .AND. YDIR/='' ) THEN - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_GUESS_DIMIDS_NC4','invalid YDIR ('//TRIM(YDIR)//') with NGRID=0 for field '& + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','invalid YDIR ('//TRIM(YDIR)//') with NGRID=0 for field '& //TRIM(TPFIELD%CMNHNAME)) END IF ! @@ -995,9 +997,43 @@ IF (IGRID==0) THEN TPDIMS(1) = PTDIM ILEN = PTDIM%LEN CASE DEFAULT - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_GUESS_DIMIDS_NC4','NGRID=0 and NDIMS>1 not yet supported (field '& + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','NGRID=0 and NDIMS>1 not yet supported (field '& //TRIM(TPFIELD%CMNHNAME)//')') END SELECT +ELSE IF (TPFIELD%CLBTYPE/='NONE') THEN + IF (TPFIELD%NDIMS/=3) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','CLBTYPE/=NONE and NDIMS/=3 not supported (field '& + //TRIM(TPFIELD%CMNHNAME)//')') + END IF + ! + IF (TPFIELD%CLBTYPE=='LBX' .OR. TPFIELD%CLBTYPE=='LBXU') THEN + PTDIM => NCOORDID(2,IGRID) + TPDIMS(2) = PTDIM + PTDIM => NCOORDID(3,IGRID) + TPDIMS(3) = PTDIM + ILEN = TPDIMS(2)%LEN * TPDIMS(3)%LEN + ISIZE = KLEN/ILEN + IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4', & + 'can not guess 1st dimension for field '//TRIM(TPFIELD%CMNHNAME)) + PTDIM => GETDIMCDF(TPFILE, ISIZE) + TPDIMS(1) = PTDIM + ILEN = ILEN * PTDIM%LEN + ELSE IF (TPFIELD%CLBTYPE=='LBY' .OR. TPFIELD%CLBTYPE=='LBYV') THEN + PTDIM => NCOORDID(1,IGRID) + TPDIMS(1) = PTDIM + PTDIM => NCOORDID(3,IGRID) + TPDIMS(3) = PTDIM + ILEN = TPDIMS(1)%LEN * TPDIMS(3)%LEN + ISIZE = KLEN/ILEN + IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4', & + 'can not guess 2nd dimension for field '//TRIM(TPFIELD%CMNHNAME)) + PTDIM => GETDIMCDF(TPFILE, ISIZE) + TPDIMS(2) = PTDIM + ILEN = ILEN * PTDIM%LEN + ELSE + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','invalid CLBTYPE ('//TPFIELD%CLBTYPE//') for field '& + //TRIM(TPFIELD%CMNHNAME)) + END IF ELSE IF (TPFIELD%NDIMS==0) ILEN = 1 ! @@ -1010,7 +1046,7 @@ ELSE ELSE IF ( YDIR == 'ZZ' ) THEN PTDIM => NCOORDID(3,IGRID) ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_GUESS_DIMIDS_NC4','can not guess 1st dimension for field '//TRIM(TPFIELD%CMNHNAME)) + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','can not guess 1st dimension for field '//TRIM(TPFIELD%CMNHNAME)) END IF ILEN = PTDIM%LEN TPDIMS(JI) = PTDIM @@ -1019,11 +1055,11 @@ ELSE PTDIM => NCOORDID(2,IGRID) ELSE IF (JI==TPFIELD%NDIMS) THEN !Guess last dimension ISIZE = KLEN/ILEN - IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_GUESS_DIMIDS_NC4', & + IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4', & 'can not guess 2nd and last dimension for field '//TRIM(TPFIELD%CMNHNAME)) PTDIM => GETDIMCDF(TPFILE, ISIZE) ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_GUESS_DIMIDS_NC4','can not guess 2nd dimension for field '//TRIM(TPFIELD%CMNHNAME)) + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','can not guess 2nd dimension for field '//TRIM(TPFIELD%CMNHNAME)) END IF ILEN = ILEN * PTDIM%LEN TPDIMS(JI) = PTDIM @@ -1032,29 +1068,33 @@ ELSE PTDIM => NCOORDID(3,IGRID) ELSE IF (JI==TPFIELD%NDIMS) THEN !Guess last dimension ISIZE = KLEN/ILEN - IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_GUESS_DIMIDS_NC4', & + IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4', & 'can not guess 3rd and last dimension for field '//TRIM(TPFIELD%CMNHNAME)) PTDIM => GETDIMCDF(TPFILE, ISIZE) ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_GUESS_DIMIDS_NC4','can not guess 3rd dimension for field '//TRIM(TPFIELD%CMNHNAME)) + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','can not guess 3rd dimension for field '//TRIM(TPFIELD%CMNHNAME)) END IF ILEN = ILEN * PTDIM%LEN TPDIMS(JI) = PTDIM ELSE IF (JI==4 .AND. JI==TPFIELD%NDIMS) THEN !Guess last dimension ISIZE = KLEN/ILEN - IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_GUESS_DIMIDS_NC4', & + IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4', & 'can not guess 4th and last dimension for field '//TRIM(TPFIELD%CMNHNAME)) PTDIM => GETDIMCDF(TPFILE, ISIZE) ILEN = ILEN * PTDIM%LEN TPDIMS(JI) = PTDIM ELSE - CALL PRINT_MSG(NVERB_FATAL,'IO','IO_GUESS_DIMIDS_NC4','can not guess dimension above 4 for field '//TRIM(TPFIELD%CMNHNAME)) + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','can not guess dimension above 4 for field '& + //TRIM(TPFIELD%CMNHNAME)) END IF END DO END IF ! -IF (KLEN /= ILEN) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_GUESS_DIMIDS_NC4','problem with dimensions for field '& - //TRIM(TPFIELD%CMNHNAME)) +IF (KLEN /= ILEN) THEN + CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','problem with dimensions for field '& + //TRIM(TPFIELD%CMNHNAME)) + KRESP = 1 +END IF ! END SUBROUTINE IO_GUESS_DIMIDS_NC4